From 47c633a5473226bbd32959bbe21a8d1c4fd1f0f2 Mon Sep 17 00:00:00 2001 From: SamCroswell Date: Mon, 29 Jun 2015 15:57:13 -0400 Subject: [PATCH] Adds the bo staff and a new martial art --- code/datums/martial.dm | 219 ++++++++++++++++++++++++++++++++++++ icons/mob/in-hand/staff.dmi | Bin 2979 -> 3758 bytes icons/obj/weapons.dmi | Bin 46653 -> 46932 bytes 3 files changed, 219 insertions(+) diff --git a/code/datums/martial.dm b/code/datums/martial.dm index 1388e088f8c..b2892b959a3 100644 --- a/code/datums/martial.dm +++ b/code/datums/martial.dm @@ -305,6 +305,128 @@ basic_hit(A,D) return 1 +#define WRIST_WRENCH_COMBO "DD" +#define BACK_KICK_COMBO "HG" +#define STOMACH_KNEE_COMBO "GH" +#define HEAD_KICK_COMBO "DHH" +#define ELBOW_DROP_COMBO "HDHDH" +/datum/martial_art/the_sleeping_carp + name = "The Sleeping Carp" + +/datum/martial_art/the_sleeping_carp/proc/check_streak(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D) + if(findtext(streak,WRIST_WRENCH_COMBO)) + streak = "" + wristWrench(A,D) + return 1 + if(findtext(streak,BACK_KICK_COMBO)) + streak = "" + backKick(A,D) + return 1 + if(findtext(streak,STOMACH_KNEE_COMBO)) + streak = "" + kneeStomach(A,D) + return 1 + if(findtext(streak,HEAD_KICK_COMBO)) + streak = "" + headKick(A,D) + return 1 + if(findtext(streak,ELBOW_DROP_COMBO)) + streak = "" + elbowDrop(A,D) + return 1 + return 0 + +/datum/martial_art/the_sleeping_carp/proc/wristWrench(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D) + if(!D.stat && !D.stunned && !D.weakened) + D.visible_message("[A] grabs [D]'s wrist and wrenches it sideways!", \ + "[A] grabs your wrist and violently wrenches it to the side!") + playsound(get_turf(A), 'sound/weapons/thudswoosh.ogg', 50, 1, -1) + D.emote("scream") + D.drop_item() + D.apply_damage(5, BRUTE, pick("l_arm", "r_arm")) + D.Stun(2) + return 1 + return basic_hit(A,D) + +/datum/martial_art/the_sleeping_carp/proc/backKick(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D) + if(A.dir == D.dir && !D.stat && !D.weakened) + D.visible_message("[A] kicks [D] in the back!", \ + "[A] kicks you in the back, making you stumble and fall!") + step_to(D,get_step(D,D.dir),1) + D.Weaken(4) + playsound(get_turf(D), 'sound/weapons/punch1.ogg', 50, 1, -1) + return 1 + return basic_hit(A,D) + +/datum/martial_art/the_sleeping_carp/proc/kneeStomach(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D) + if(!D.stat && !D.weakened) + D.visible_message("[A] knees [D] in the stomach!", \ + "[A] winds you with a knee in the stomach!") + D.audible_message("[D] gags!") + D.losebreath += 3 + D.Stun(1) + playsound(get_turf(D), 'sound/weapons/punch1.ogg', 50, 1, -1) + return 1 + return basic_hit(A,D) + +/datum/martial_art/the_sleeping_carp/proc/headKick(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D) + if(!D.stat && !D.weakened) + D.visible_message("[A] kicks [D] in the head!", \ + "[A] kicks you in the jaw!") + D.apply_damage(20, BRUTE, "head") + D.drop_item() + playsound(get_turf(D), 'sound/weapons/punch1.ogg', 75, 1, -1) + return 1 + return basic_hit(A,D) + +/datum/martial_art/the_sleeping_carp/proc/elbowDrop(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D) + if(D.weakened || D.resting || D.stat) + D.visible_message("[A] elbow drops [D]!", \ + "[A] piledrives you with their elbow!") + if(D.stat) + D.death() //FINISH HIM! + D.apply_damage(50, BRUTE, "chest") + playsound(get_turf(D), 'sound/weapons/punch1.ogg', 100, 1, -1) + return 1 + return basic_hit(A,D) + +/datum/martial_art/the_sleeping_carp/grab_act(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D) + add_to_streak("G") + if(check_streak(A,D)) + return 1 + ..() + var/obj/item/weapon/grab/G = A.get_active_hand() + if(G) + G.state = GRAB_AGGRESSIVE //Instant aggressive grab + +/datum/martial_art/the_sleeping_carp/harm_act(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D) + add_to_streak("H") + if(check_streak(A,D)) + return 1 + D.visible_message("[A] [pick("punches", "kicks", "chops", "hits", "slams")] [D]!", \ + "[A] hits you!") + D.apply_damage(10, BRUTE) + playsound(get_turf(D), 'sound/weapons/punch1.ogg', 50, 1, -1) + return 1 + + +/datum/martial_art/the_sleeping_carp/disarm_act(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D) + add_to_streak("D") + if(check_streak(A,D)) + return 1 + return ..() + +/mob/living/carbon/human/proc/sleeping_carp_help() + set name = "Recall Teachings" + set desc = "Remember the martial techniques of the Sleeping Carp clan." + set category = "Sleeping Carp" + + usr << "You retreat inward and recall the teachings of the Sleeping Carp..." + usr << "Wrist Wrench: Disarm Disarm. Forces opponent to drop item in hand." + usr << "Back Kick: Harm Grab. Opponent must be facing away. Knocks down." + usr << "Stomach Knee: Grab Harm. Knocks the wind out of opponent and stuns." + usr << "Head Kick: Disarm Harm Harm. Decent damage, forces opponent to drop item in hand." + usr << "Elbow Drop: Harm Disarm Harm Disarm Harm. Opponent must be on the ground. Deals huge damage, instantly kills anyone in critical condition." //ITEMS @@ -364,3 +486,100 @@ H << "You learn the PLASMA FIST style." used = 1 desc += "It looks like it's magic was used up." + +/obj/item/weapon/sleeping_carp_scroll + name = "mysterious scroll" + desc = "A scroll filled with strange markings. It seems to be drawings of some sort of martial art." + icon = 'icons/obj/wizard.dmi' + icon_state = "scroll2" + +/obj/item/weapon/sleeping_carp_scroll/attack_self(mob/living/carbon/human/user as mob) + if(!istype(user) || !user) + return + user << "You begin to read the scroll..." + user << "And all at once the secrets of the Sleeping Carp fill your mind. The ancient clan's martial teachings have been imbued into this scroll. As you read through it, \ + these secrets flood into your mind and body. You now know the martial techniques of the Sleeping Carp. Your hand-to-hand combat has become much more effective, and you may now perform powerful \ + combination attacks. To learn more about these combos, use the Recall Teachings ability in the Sleeping Carp tab." + user.verbs += /mob/living/carbon/human/proc/sleeping_carp_help + var/datum/martial_art/the_sleeping_carp/theSleepingCarp = new(null) + theSleepingCarp.teach(user) + user.drop_item() + visible_message("[src] lights up in fire and quickly burns to ash.") + new /obj/effect/decal/cleanable/ash(get_turf(src)) + qdel(src) + + +/obj/item/weapon/twohanded/bostaff + name = "bo staff" + desc = "A long, tall staff made of polished wood. Traditionally used in ancient old-Earth martial arts. Can be wielded to both kill and incapacitate." + force = 8 + w_class = 4 + slot_flags = SLOT_BACK + force_unwielded = 8 + force_wielded = 18 + throwforce = 20 + attack_verb = list("smashed", "slammed", "whacked", "thwacked") + icon = 'icons/obj/weapons.dmi' + icon_state = "bostaff0" + +/obj/item/weapon/twohanded/bostaff/update_icon() + icon_state = "bostaff[wielded]" + return + +/obj/item/weapon/twohanded/bostaff/attack(mob/target, mob/living/user) + add_fingerprint(user) + if((CLUMSY in user.disabilities) && prob(50)) + user << "You club yourself over the head with [src]." + user.Weaken(3) + if(ishuman(user)) + var/mob/living/carbon/human/H = user + H.apply_damage(2*force, BRUTE, "head") + else + user.take_organ_damage(2*force) + return + if(isrobot(target)) + return ..() + if(!isliving(target)) + return ..() + var/mob/living/carbon/C = target + if(C.stat) + user << "It would be dishonorable to attack a foe while they cannot retaliate." + return + switch(user.a_intent) + if("disarm") + if(!wielded) + return ..() + if(!ishuman(target)) + return ..() + var/mob/living/carbon/human/H = target + var/list/fluffmessages = list("[user] clubs [H] with [src]!", \ + "[user] smacks [H] with the butt of [src]!", \ + "[user] broadsides [H] with [src]!", \ + "[user] smashes [H]'s head with [src]!", \ + "[user] beats [H] with front of [src]!", \ + "[user] twirls and slams [H] with [src]!") + H.visible_message("[pick(fluffmessages)]", \ + "[pick(fluffmessages)]") + playsound(get_turf(user), 'sound/effects/woodhit.ogg', 75, 1, -1) + H.adjustStaminaLoss(rand(13,20)) + if(prob(10)) + H.visible_message("[H] collapses!", \ + "Your legs give out!") + H.Weaken(4) + if(H.staminaloss && !H.sleeping) + var/total_health = (H.health - H.staminaloss) + if(total_health <= config.health_threshold_crit && !H.stat) + H.visible_message("[user] delivers a heavy hit to [H]'s head, knocking them out cold!", \ + "[user] knocks you unconscious!") + H.sleeping += 30 + H.adjustBrainLoss(25) + return + else + return ..() + return ..() + +/obj/item/weapon/twohanded/bostaff/IsShield() + if(wielded) + return 1 + else + return 0 \ No newline at end of file diff --git a/icons/mob/in-hand/staff.dmi b/icons/mob/in-hand/staff.dmi index 6d59d81ecfbef4f434a8406695a1ab184fb42e20..2309136a45469d1b4ea93b48c8b235a2afa3702f 100644 GIT binary patch delta 3710 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 delta 2910 zcmYLLcR1VK7f*j7OKp-%J zzCkRE^c&ODtw zLocCjWZb&)ivfiyye1Dv;5T|U+*0k<$Xhsh6h3WMToK6%)8tf#L)77#iVEooTYxMg z_$Hgmc(V8qP9ir2^e2xroV_}lyeAo3Ji9svlB`4UNy`&A1sY8oSBjcn$i=t@A4GCy zpqZs#`(sLG_T7I6+=o@7KTQjt6A}_(Yt;&CU#hhuo)Tb6=`V1ecsTX9WuR|wCX#Kh zNa21~SJV-4^TcthY+!0R3nU3B^IohngG@>|MmeiHyGWv97^9#`ARVM<%B&w{)+M^3jr51OVzwJ+jFJ8z-IW7#T_LqI0jje5(K_g$ zS|=k_-J*arr!RTY&isj`zRl>MyH1|@?RCLC%oTjX)$BVh=UkoxCi|S>6#@>f;(L*H z7oW>NU5Nbr)1xeVmh6e1T8P4t%YgDYJ=x{T?!}JARKIGCFYqz zw{%X5d9qAHo`_$4^(Co_#~aqC;%4{cW@D|+J-NNhtM_KWV@e`!RU&bb4yoh9+b;Mj z<~N5?ucl(wfU5I?8%3&fDk9Ikx~*(_F`TeN}H-g?uwk2vSt7juLuhv@pZBL^OZcS!NytsY3*Yue}0BSchEP7Pmh5`wc3i zeR`Q6Y+fp?h8zd-)TOmPpeZr2$R#!5Dkpq@ZXc($PNu2-E>wuu?PG)OR>2VGQVI+3 z;)diI1!sedW3DNp(PzHFa= z1B^}9nbel?gO7q;%L2EMq{xmzGCaiSC#BDe05GggrMib$-i6wXw0y7114W^S^=*qI zzeTcm2Uz-h`m(LueW4%nL^85?!>M}OEVyC005*|L0y8M9F4+sIPJC}Nl^g_Q)}5pR zCKqkk27T;2FF0U_mYG?+&A2;1wihtfI$gm$gw^e*GK>b@sULBdf4IBO6kxAPjWCar z8ocICTr#+we#f5Gv7s;XD&#UA-OD}bpkD;wRxP(b8F9FSJwM2!=y?tZ1*tDi{7V_6Y7$zFVhKgCgnBTNu%k&dZ9_*Y9!Ph*EpIdhhwm$L2H#^md=;b* z^j(vq$tfS~&~Z5ttRE z2`nfQPWKF4(K-mL?=5W`zJe$hP64YIhIY{%qG-8rQ5By8@N9X)d6^$R4I39+TTkKt zpUW1PuG+A>Ube##waIMRFH9s=-t|A#dcY{PoVY~}z$h_t9f!Qw?Rbh)=FI@7Q5w5R z^n5}t1Hs>tp*ANNz&b87*+8|f>`&@Ze`&`yTpyNId_s_kh%^ZRC4Yu`Ss@Af$eW`H>&<$Gc{_)cQThCf6d9Dj9`PX8Pno^&22)O2YpIxkpLL zRP5pDj?dVYGyR#^7&*8D$}vRhkl0hGqT9$%%0Td4^G;K$m;%jIY7g7sE;ruXZ~Whm z{(DYF#kFq`Rt$Z{@Lpm~x+9-V!W^tRTjY;cIk|eMiQR;QxRI`_GMWV?(ye;$lD(y8 z*yRX{sf>a$9YYs-CDQxyu|!wfq^p64z6$uf0uhbwt%R=Q)iFQv%-9|U$kj^u;ir^l zsCsYLzu$hbhxYcF%7DtP``lGSKDd{?I0y2jpSz{2MHVST66r=2Z5^a{N&}@Md#@>^ ztF+IZ`6J%BN`?#Hp6cSRWmaU{F1m+))cf21ek^{Vy1M$h6|a_+Zws#~QM!En_RX-1 zJ9QLFI+;|=isG1W+`7=|77h};)IDEUfj8>p4D$$mSG%pf3d=a=}R6$O#u<``} zVXckKxUmVljJ$>JHc@+A$@3W^u}d5VgK@V>f>H=K*cYG10n$AW_bdvusobt0{EJN?W z*BOBO9`(^3rDJSp@4%t!(%6a5)V0WmxSAXd{ZY>=sx z>mkdB-wCYBgr_vaZBqR)_CQSagx0Xj{h#^%d&;Y8(y?Ec4>wP+*b{8fF&5pwMVAi1 z5$TO=_xOOgp>bk*p PpD9RB%Sf{X?HKxRcCxq4 diff --git a/icons/obj/weapons.dmi b/icons/obj/weapons.dmi index 041703a632a3036e844fe0393f24666340d73b4f..fa286d3e12b899ca9d4fa7530feb05567c5d6aeb 100644 GIT binary patch delta 5196 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 delta 4923 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