From ca0ae94889225ed6c6d96b99d37ad47d66e485ab Mon Sep 17 00:00:00 2001 From: TTNT789 <105447889+TTNT789@users.noreply.github.com> Date: Thu, 20 Jun 2024 21:36:11 -0600 Subject: [PATCH] Cane swords! (#2174) * ungabungaicastnobugspls * tadaaaaaaa * fucnamedspritewrong * forgottopushthisfix * forgot to improper it --- .../code/game/objects/items/caneswords.dm | 209 ++++++++++++++++++ .../icons/obj/caneswords/caneswordinhandL.dmi | Bin 0 -> 3118 bytes .../icons/obj/caneswords/caneswordinhandR.dmi | Bin 0 -> 2959 bytes .../icons/obj/caneswords/caneswords.dmi | Bin 0 -> 1492 bytes tgstation.dme | 1 + 5 files changed, 210 insertions(+) create mode 100644 monkestation/code/game/objects/items/caneswords.dm create mode 100644 monkestation/icons/obj/caneswords/caneswordinhandL.dmi create mode 100644 monkestation/icons/obj/caneswords/caneswordinhandR.dmi create mode 100644 monkestation/icons/obj/caneswords/caneswords.dmi diff --git a/monkestation/code/game/objects/items/caneswords.dm b/monkestation/code/game/objects/items/caneswords.dm new file mode 100644 index 000000000000..bf240bb682b1 --- /dev/null +++ b/monkestation/code/game/objects/items/caneswords.dm @@ -0,0 +1,209 @@ +/obj/item/weapon/cane_sword + name = "\improper cane sword" + desc = "wrong one silly heads this one dont do damage haha" + icon = 'monkestation/icons/obj/caneswords/caneswords.dmi' + lefthand_file = 'monkestation/icons/obj/caneswords/caneswordinhandL.dmi' + righthand_file = 'monkestation/icons/obj/caneswords/caneswordinhandR.dmi' + +/obj/item/weapon/cane_sword/CentCom + name = "\improper nanotrasen cane sword" + desc = "OH GOD CENTCOM GENTLEMAN NINJA" + icon_state = "CC_canesword1" + inhand_icon_state = "CC_sword" + inhand_x_dimension = 64 + inhand_y_dimension = 64 + flags_1 = CONDUCT_1 + obj_flags = UNIQUE_RENAME + force = 20 + throwforce = 15 + demolition_mod = 0.75 //but not metal + w_class = WEIGHT_CLASS_BULKY + block_chance = 50 + armour_penetration = 75 + sharpness = SHARP_EDGED + attack_verb_continuous = list("slashes", "cuts") + attack_verb_simple = list("slash", "cut") + block_sound = 'sound/weapons/parry.ogg' + hitsound = 'sound/weapons/rapierhit.ogg' + custom_materials = list(/datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT) + wound_bonus = 15 + bare_wound_bonus = 25 + +/obj/item/weapon/cane_sword/syndicate + name = "\improper syndicate cane sword" + desc = "OH GOD SYNDICATE GENTLEMAN NINJA" + icon_state = "S_canesword1" + inhand_icon_state = "S_sword" + inhand_x_dimension = 64 + inhand_y_dimension = 64 + flags_1 = CONDUCT_1 + obj_flags = UNIQUE_RENAME + force = 20 + throwforce = 15 + demolition_mod = 0.75 //but not metal + w_class = WEIGHT_CLASS_BULKY + block_chance = 50 + armour_penetration = 75 + sharpness = SHARP_EDGED + attack_verb_continuous = list("slashes", "cuts") + attack_verb_simple = list("slash", "cut") + block_sound = 'sound/weapons/parry.ogg' + hitsound = 'sound/weapons/rapierhit.ogg' + custom_materials = list(/datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT) + wound_bonus = 15 + bare_wound_bonus = 25 + +/obj/item/weapon/cane_sword/civilian + name = "\improper cane sword" + desc = "OH GOD GENTLEMAN NINJA" + icon_state = "canesword1" + inhand_icon_state = "sword" + inhand_x_dimension = 64 + inhand_y_dimension = 64 + flags_1 = CONDUCT_1 + obj_flags = UNIQUE_RENAME + force = 12 + throwforce = 7 + demolition_mod = 0.75 //but not metal + w_class = WEIGHT_CLASS_BULKY + block_chance = 25 + armour_penetration = 20 + sharpness = SHARP_EDGED + attack_verb_continuous = list("slashes", "cuts") + attack_verb_simple = list("slash", "cut") + block_sound = 'sound/weapons/parry.ogg' + hitsound = 'sound/weapons/rapierhit.ogg' + custom_materials = list(/datum/material/iron = HALF_SHEET_MATERIAL_AMOUNT) + wound_bonus = 5 + bare_wound_bonus = 15 + +/obj/item/storage/canesword + name = "canesword" + desc = "this is the catch all and the wrong one" + icon = 'monkestation/icons/obj/caneswords/caneswords.dmi' + lefthand_file = 'monkestation/icons/obj/caneswords/caneswordinhandL.dmi' + righthand_file = 'monkestation/icons/obj/caneswords/caneswordinhandR.dmi' + +/obj/item/storage/canesword/civ + name = "\improper cane" + desc = "An ordinary civilian issue cane... or so it looks" + icon_state = "canesword0" + inhand_icon_state = "cane" + inhand_x_dimension = 64 + inhand_y_dimension = 64 + w_class = WEIGHT_CLASS_BULKY + +/obj/item/storage/canesword/civ/Initialize(mapload) + . = ..() + AddElement(/datum/element/update_icon_updates_onmob, ITEM_SLOT_BELT) + + atom_storage.max_slots = 1 + atom_storage.rustle_sound = FALSE + atom_storage.max_specific_storage = WEIGHT_CLASS_BULKY + atom_storage.set_holdable( + list( + /obj/item/weapon/cane_sword/civilian, + ) + ) + +/obj/item/storage/canesword/civ/examine(mob/user) + . = ..() + if(length(contents)) + . += span_notice("Alt-click it to quickly draw the blade.") + +/obj/item/storage/canesword/civ/AltClick(mob/user) + if(!user.can_perform_action(src, NEED_DEXTERITY|NEED_HANDS)) + return + if(length(contents)) + var/obj/item/I = contents[1] + user.visible_message(span_notice("[user] takes [I] out of [src]."), span_notice("You take [I] out of [src].")) + user.put_in_hands(I) + update_appearance() + else + balloon_alert(user, "it's empty!") + +/obj/item/storage/canesword/civ/PopulateContents() + new /obj/item/weapon/cane_sword/civilian(src) + + +/obj/item/storage/canesword/CentCom + name = "\improper cane" + desc = "An ordinary CentCom issue cane... or so it looks" + icon_state = "CC_canesword0" + inhand_icon_state = "CC_cane" + inhand_x_dimension = 64 + inhand_y_dimension = 64 + w_class = WEIGHT_CLASS_BULKY + +/obj/item/storage/canesword/CentCom/Initialize(mapload) + . = ..() + AddElement(/datum/element/update_icon_updates_onmob, ITEM_SLOT_BELT) + + atom_storage.max_slots = 1 + atom_storage.rustle_sound = FALSE + atom_storage.max_specific_storage = WEIGHT_CLASS_BULKY + atom_storage.set_holdable( + list( + /obj/item/weapon/cane_sword/CentCom, + ) + ) + +/obj/item/storage/canesword/CentCom/examine(mob/user) + . = ..() + if(length(contents)) + . += span_notice("Alt-click it to quickly draw the blade.") + +/obj/item/storage/canesword/CentCom/PopulateContents() + new /obj/item/weapon/cane_sword/CentCom(src) + +/obj/item/storage/canesword/CentCom/AltClick(mob/user) + if(!user.can_perform_action(src, NEED_DEXTERITY|NEED_HANDS)) + return + if(length(contents)) + var/obj/item/I = contents[1] + user.visible_message(span_notice("[user] takes [I] out of [src]."), span_notice("You take [I] out of [src].")) + user.put_in_hands(I) + update_appearance() + else + balloon_alert(user, "it's empty!") + +/obj/item/storage/canesword/syndicate + name = "\improper cane" + desc = "An ordinary Syndicate issue cane... or so it looks" + icon_state = "S_canesword0" + inhand_icon_state = "S_cane" + inhand_x_dimension = 64 + inhand_y_dimension = 64 + w_class = WEIGHT_CLASS_BULKY + +/obj/item/storage/canesword/syndicate/Initialize(mapload) + . = ..() + AddElement(/datum/element/update_icon_updates_onmob, ITEM_SLOT_BELT) + + atom_storage.max_slots = 1 + atom_storage.rustle_sound = FALSE + atom_storage.max_specific_storage = WEIGHT_CLASS_BULKY + atom_storage.set_holdable( + list( + /obj/item/weapon/cane_sword/syndicate, + ) + ) + +/obj/item/storage/canesword/syndicate/examine(mob/user) + . = ..() + if(length(contents)) + . += span_notice("Alt-click it to quickly draw the blade.") + +/obj/item/storage/canesword/syndicate/AltClick(mob/user) + if(!user.can_perform_action(src, NEED_DEXTERITY|NEED_HANDS)) + return + if(length(contents)) + var/obj/item/I = contents[1] + user.visible_message(span_notice("[user] takes [I] out of [src]."), span_notice("You take [I] out of [src].")) + user.put_in_hands(I) + update_appearance() + else + balloon_alert(user, "it's empty!") + +/obj/item/storage/canesword/syndicate/PopulateContents() + new /obj/item/weapon/cane_sword/syndicate(src) diff --git a/monkestation/icons/obj/caneswords/caneswordinhandL.dmi b/monkestation/icons/obj/caneswords/caneswordinhandL.dmi new file mode 100644 index 0000000000000000000000000000000000000000..a88a9bed7c595cdc00c4cfd39ebfc730092a2b52 GIT binary patch literal 3118 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 M(bb{$Ou(&w1Ne!ri2wiq literal 0 HcmV?d00001 diff --git a/monkestation/icons/obj/caneswords/caneswordinhandR.dmi b/monkestation/icons/obj/caneswords/caneswordinhandR.dmi new file mode 100644 index 0000000000000000000000000000000000000000..5a6afc7ffa8b66fc5a2e7ec830ed793c7b0d187c GIT binary patch literal 2959 zcmchZcTiL58pcCe5h?EC(xoa*5H=hX_|LJJp_=*GB?HxeuzR8^X;b zLRB8GXWn@!7AKVwkvg5JYW}l6_J+Wmo##KSvKXo9W+8Sr<@S%9IwmD@`M9h-|MZ>o zm{Llir}}SM$Q9fzhVkn5bav-9r#zOys(?|FJS2fReBWgjk^V?#iB7Iz&eVO;Ck(#O z&B?as6ukzUz+*dd@oGCWlBiNS>ToC2&2mCTZ5@>lU%&i1(V9CnpmZpa;an!Qm{y1t zXE#;rd1FGLT!LFEZMPIF1yMiiL^5_G>fBJPV8G8<1^TwTy_#IC?~CIvv?~7Zj_%81wyQmbjoHyoslG> zvQ4@&rHfuh@-Tf7(D(?G*if(_EhpUb5Q!l5ot_>_BFAh*ni%dVEVQr9FVN_1N2bW! zP9s@Fj_lqt8y?^Lq#3DE@8sX@Pj)5h*r_p4N7=^DHe8Yx*g0%!gKqgozpdYVF4JOT zu_$zk@LAg#@qLQ@eU}-ke6I7Qvv;rZGFjc$9bL=%s4$gkrB?IO@O3iGErCFPba#_e0n--GjA6OJ%w?y{M?5@I7b=gkd{PkPY5kc>~9%=v}1O&NiD$uj)U3 zj`b#&Hdx^ak(7WnhH|ZC=#cpM&rUpvH;-Q;W@~+kwsq1GjPaltQkwV2)^=I255}Xf zNeS4m2e-onf{%~&Jv$n$`x=LTO(aGF<(uyW{@w-OS9Q4QN2!EB#X#4h3vOHQisiMI zaywyP7?tV+>g8l?M#H+-Q==C%&%kmbJ^!VCcf+;dtcQOTyB3>?NWKC)eA(?xh^wOV zFtO3iz`t@GzeIn-l!umyx)CSR0DUA=Nm*_8#jNQ?RNduWl&d&mbNJQtu_&6o%u6bm zosFP8LbP@S`2m_Q+YrHE{LRNRXE1tDSpi9oD*MzG((+^+u%s8{#Sx9E^m1Cw%~*$nKpAZ z_>JB0aZ{ZK``2K^|JdghC_g<5J=7n1tW#XE1uKzyA&4Lk-NVH7&P!ClF2pHfIT?wi?3~f)Sz1jZ@6$%O{^xG`T|Hi@Y*f+bw^%XS{pA@uLb~gw~L7)Cy|cO|*0b&*1oc z6Yviley?zb_4KVzif}lGh8J;&x32C>ns|*!66XKA`JTD13FR|`td5mCdRw^iY;Qci z#Q&q_1CZcdHBgGbu-X4>+4Er95Yzk@LgrLKUdP{D8>RjpW~s{JQ7igyEBZ}uNisE* zkOpU{(O5=LwEEyQS??kd((s}`` zX2f(|TOw1+GkeWwa=W!D;eBL829w=+uB!gNg?9(yiODT`Us!x~OW=Li1* z`xVibE+@g4um1%5Y<_nSm5{wRqH{cE1KgoF)7;8u0BZxHXWXA2LIiyl8VvC_|YUP3IPl&qF)5STk&&RmQl zHsCit8I*BC)HvOL;G{TL^R5?aFDD^)j{&zMIf#Gl2s9V@IdbQ(gT#;k`9S|k$=(lZ zjQ~YPw^Y|ckltO2iGtm>ZSR3#U=aLQRacBwj8{wt&_&QTQ=+B*+~oNMI2h{F6*KCu zA+gP4Y6X9;^3uh&jfE><3Fx)TP6oU!w*s>L#b^rvp_EY@iTGrl`wG`RtHnJQwJIe_ zMZXpJ6PfYD&yFDeeu-qWHbG^VQ+x-%bIB8-3?3E{3O6zS>R@|oXR8(qztn#M_NIr5 literal 0 HcmV?d00001 diff --git a/monkestation/icons/obj/caneswords/caneswords.dmi b/monkestation/icons/obj/caneswords/caneswords.dmi new file mode 100644 index 0000000000000000000000000000000000000000..df388befb5d9b96a9586460c7c29649a7757ca10 GIT binary patch literal 1492 zcma)+jW-i|7{^!Ayo6rvO($tO9rCtK9HiK;j*diPgshobL#<5n+OWAQbcx$&%tCLB z<7K7feIqGMURoJ>nU`incbIL)YPXSruFj}CVK}wiCi(}(xM8C)gsV|8SMiYmK*A%xfG9$&Y}GGnS@O-& z6KvVn+wb?{yv?B9mp&Its08aAuo# z{&6qU&h%CJKJ&<~PFg@-0bS=3=KPJ*KK9z%b3?D$Sm^7Uy>0E$sUblo+cW^Y-61Az ziFqghKy!zOo2!4qqaWkwh=;KUJ}isMXb!nk&L>6@N0cb;jf43EmoaXTH@A-Z+}x+7 zO^X=>l|y=`?pn7*AQE=D#bM1MMhPzq4Sh8%B3^Z7TbRFliO5N?a<5YY8Gu#GDMKjbj@dn-*}6syK)nYMA#)OT`|j730s1!@6N zi6DI2>^WgNV0YOc4vnl5;;V46;2#oOm@`pmGGLV|+O+&@J(i9_A{kuXq@6LVSQDJr zMpV|M#WAovbtjn__$LLX71P$fL@x~1O{K0cRSS8kKmq&(`JC&}F)G`-N^gEiV$00m z2!vKYxGudGG3vc_L0+e5>KzpH^-8pz;Lel`#glQ3Dw%ZfWf$ zIdgU;Ft9pm!3y*@)U2lKeUrpCYP!5g5v**Q$l?a_H>Ph>(Y$84V-ht&4jT8Fad7d+ zLfKT9_#{-|cu~nRzW;{93@86@BrBi6JX2Q|M))$;Z$*+7{(^6bW*LWB%232{m>lCC ze1l@Wg}!10CX0X@z4`EL_DAdOVAX?SNRKEHo%C3d2d`gUZiT|;2F0xFCpE1ffk z3mA$t4*ZsQuey*%%-1PyZd#RlgdP~7FVWB%F*>Bb#<}Fll5TS zDO{YcsSO>idoYjuT>7(Hec11;<3C_a+O`*YG+taA%e5a-{S|jX`Fx~xf{X`~3 z9}N`~8`;ty@sy7trsS=6;tZB%#Ttz(4CEWmP+HNY8xBV&ob2h(Tg?}aCiK0vhx&xK)XO)KF&4JC|XE}I++NCRSbRoBn(e$7y^&8a${k+7SJ+B_$ zO|QS6X4r$rDs@TWhu6YNI@!~RU}ZL(oC~7*cOlvRg&h1g!DpUz#BDLTpk`-hLd^QLr)=+=cS?nzrpozYFi;U;~Bg5mAw_DB0(A0kc;hFC; literal 0 HcmV?d00001 diff --git a/tgstation.dme b/tgstation.dme index a6dc84338520..32c0b3a53d93 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -5792,6 +5792,7 @@ #include "monkestation\code\game\objects\effects\random\ai_module.dm" #include "monkestation\code\game\objects\effects\spawners\roomspawner.dm" #include "monkestation\code\game\objects\effects\spawners\random\fishing.dm" +#include "monkestation\code\game\objects\items\caneswords.dm" #include "monkestation\code\game\objects\items\choice_beacon.dm" #include "monkestation\code\game\objects\items\cirno_plush.dm" #include "monkestation\code\game\objects\items\gravity_gun.dm"