From a8a9e8e022e1c878e365bc532c7ac191f905e6f0 Mon Sep 17 00:00:00 2001 From: Couls Date: Wed, 10 Jul 2019 21:12:35 -0400 Subject: [PATCH 1/5] Baseball! --- .../machinery/computer/HolodeckControl.dm | 6 ++++ code/game/objects/items/weapons/weaponry.dm | 19 +++++++--- .../mob/living/carbon/human/human_defense.dm | 33 ++++++++++++++++++ icons/obj/basketball.dmi | Bin 2028 -> 4142 bytes sound/weapons/baseball_hit.ogg | Bin 0 -> 6754 bytes 5 files changed, 54 insertions(+), 4 deletions(-) create mode 100644 sound/weapons/baseball_hit.ogg diff --git a/code/game/machinery/computer/HolodeckControl.dm b/code/game/machinery/computer/HolodeckControl.dm index 604ac3f02f3..d3edc588e2d 100644 --- a/code/game/machinery/computer/HolodeckControl.dm +++ b/code/game/machinery/computer/HolodeckControl.dm @@ -460,6 +460,12 @@ desc = "Here's your chance, do your dance at the Space Jam." w_class = WEIGHT_CLASS_BULKY //Stops people from hiding it in their bags/pockets +/obj/item/beach_ball/holoball/baseball + icon_state = "baseball" + name = "baseball" + item_state = "baseball" + desc = "Take me out to the ball game." + /obj/structure/holohoop name = "basketball hoop" desc = "Boom, Shakalaka!" diff --git a/code/game/objects/items/weapons/weaponry.dm b/code/game/objects/items/weapons/weaponry.dm index b759139dba6..9bdabbd543d 100644 --- a/code/game/objects/items/weapons/weaponry.dm +++ b/code/game/objects/items/weapons/weaponry.dm @@ -157,6 +157,8 @@ icon = 'icons/obj/items.dmi' icon_state = "baseball_bat" item_state = "baseball_bat" + var/deflectmode = FALSE // deflect small/medium thrown objects + var/lastdeflect force = 10 throwforce = 12 attack_verb = list("beat", "smacked") @@ -171,12 +173,18 @@ /obj/item/melee/baseball_bat/attack_self(mob/user) if(!homerun_able) - ..() - return + if(!deflectmode && world.time >= lastdeflect) + to_chat(user, "You prepare to deflect objects thrown at you, You cannot attack during this time.") + deflectmode = TRUE + else if(deflectmode && world.time >= lastdeflect) + to_chat(user, "You no longer deflect objects thrown at you, You can attack during this time") + deflectmode = FALSE + else + to_chat(user, "You need to wait until you can deflect again. The ability will be ready in [time2text(lastdeflect - world.time, "m:ss")]") + return ..() if(homerun_ready) to_chat(user, "You're already ready to do a home run!") - ..() - return + return ..() to_chat(user, "You begin gathering strength...") playsound(get_turf(src), 'sound/magic/lightning_chargeup.ogg', 65, 1) if(do_after(user, 90, target = user)) @@ -185,6 +193,9 @@ ..() /obj/item/melee/baseball_bat/attack(mob/living/target, mob/living/user) + if(deflectmode) + to_chat(user, "You cannot attack in deflect mode!") + return . = ..() var/atom/throw_target = get_edge_target_turf(target, user.dir) if(homerun_ready) diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index b95920e688b..5dc3710f3b5 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -311,6 +311,39 @@ emp_act throwpower = I.throwforce if(I.thrownby == src) //No throwing stuff at yourself to trigger reactions return ..() + if(I.w_class <= WEIGHT_CLASS_NORMAL || istype(I, /obj/item/beach_ball)) // baseball bat deflecting + var/obj/item/melee/baseball_bat/B + if(l_hand && istype(l_hand, /obj/item/melee/baseball_bat)) + B = l_hand + else if(r_hand && istype(r_hand, /obj/item/melee/baseball_bat)) + B = r_hand + if(B && B.deflectmode) + if(prob(10)) + visible_message("[src] Deflects the [I] directly back at the thrower! It's a home run!", "You deflects the [I] directly back at the thrower!, It's a home run!") + playsound(get_turf(src), 'sound/weapons/homerun.ogg', 100, 1) + do_attack_animation(I, ATTACK_EFFECT_DISARM) + I.throw_at(I.thrownby, 20, 20, src) + B.deflectmode = FALSE + if(!istype(I, /obj/item/beach_ball)) + B.lastdeflect = world.time + 3000 + return TRUE + else if(prob(30)) + visible_message("[src] swings! And he misses! How embarassing.", "You swing! You miss! Oh no!") + playsound(get_turf(src), 'sound/weapons/thudswoosh.ogg', 50, 1, -1) + do_attack_animation(get_step(src,pick(alldirs)), ATTACK_EFFECT_DISARM) + B.deflectmode = FALSE + if(!istype(I, /obj/item/beach_ball)) + B.lastdeflect = world.time + 3000 + return ..() + else + visible_message("[src] swings and deflects the [I]!", "You swing and deflect the [I]!") + playsound(get_turf(src), 'sound/weapons/baseball_hit.ogg', 50, 1, -1) + do_attack_animation(I, ATTACK_EFFECT_DISARM) + I.throw_at(get_edge_target_turf(src,pick(alldirs)), rand(8,10), 14, src) + B.deflectmode = FALSE + if(!istype(I, /obj/item/beach_ball)) + B.lastdeflect = world.time + 3000 + return TRUE if(check_shields(throwpower, "\the [AM.name]", AM, THROWN_PROJECTILE_ATTACK)) hitpush = 0 skipcatch = 1 diff --git a/icons/obj/basketball.dmi b/icons/obj/basketball.dmi index a26c3935719625333067ad098afd3dd50d17c67a..7b34fda1a32c52581e83e72b8d33acb73ef0f305 100644 GIT binary patch literal 4142 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 bqElvcB0n{`B;ubB0Dz^bjY*}EcjA8m>2me5 literal 2028 zcmV-P)V=-0C=2JR&a84_w-Y6@%7{?OD!tS%+FJ>RWQ*r;NmRLOex6#a*U0*I5Sc+ z(=$pSoZ^zil2jm5DJiiyJGCS!F(*ffi!&v&s2C_{$iu4M4Fk2C} zg-ikx8NUosqf8?sK%$vJAjT!?hzWjxAH)xo2*$)n{D=uef4~nje~^F>AsE>-DT)5^ zpTh_kDnc=A3wCPTZRy%x&$;wAm%5hsw)b6kujfgY_x9d)?>WzN-gDl2dp0E+jRK>7 z@Gu1|01Loi0aySA3%~*}SO6A41kXRZMxDs25N>e6WKIRYTY(P_f1}Kl(TDo_)Y5aC z4<5AT{H6rhzHz;p%Vssg>F2X2mVn2l!roI?;JKbPno;|Yol;~wen%hxovp2qPNyM^ z$FY%-;x(B<$e3SPfNdMrs!N(1;MsfI;e{__uz%xXm^ar8xoi%m@_G2E=XTil!xeaI z^E&n2LtiU0oDceZa8Ec4EiEmOLFZdLIv|xuz={m}_ znxWC}(q6k<3aF|I$z&G(_%j3ZZt=j!k1vMZM}CvG^jp1N2nU0Z8XJQqB!Qd{(rX+e z7?C{~jr~JIwwhl^fK6*3QbS%B_!_-%>1swxKO>1Lc#zFPws081=gzY=<`oeuo!V-UbS$ppJ!&;KG&h7p9?W$vk8x zreM>NU*XQC21}h!6~-pa!O2VpLO2o$VVwjVDH451PB4|SoP3${3kfhho`pBQy#(*C zSpxk5MF24#t8Q z#HF9X>mzt91G4595+K~*hAbA`of!SeOdei28H3bR9)cMCR2%l9Fzpc^c)V_S^7C_A znz9-(bZjX)nLy_$64M0|w4972B#;arz8=9ylmS`u3kh)G_<%zD{MS~_2e;1+?|pv- zK3v~Xygo1F0UcVRlq`zI#S!h*2? zf)FKNe=mu^0&o##umDaJz)Ai2wi3XJ{rR>Lz^VQDqM%)knQf?)72w4Fd|RvlC->)z z-qq5Lm6^z<&se$woZ6o+f`Nen=;jwj!){CL5?XQ=oY%LH(8f4&HI?ATE}ra#M4 z6s0(pJ7;+faB6@4%~1L@^YrP{M6{|CPSB6>nqv0*qg0{9cZM=N>vi$o1r}pPpgH@|mO_zeyYF2^AOcXk?Kfjg~q^|(!Dac3yjZW&% zuND;bt$5#|A6NU&4?VRIQ7_bc{<=R6Wv~D&0D}c!0T?U*3&3CjSb+a4;_)~OP%qr9 z>zM^`N(z$QA1^w$RS`E+5Vc)s1<34=7n$3N-%}5W*e)c1k^GxAC+V#lW(6yU<;$1b zHob`0ZmI@|bcUJfjTb>mLYKo#LBw`Xwd99Fp&MQ&lSxZOsI~UYwt7&m4w&8r8Hv}w z5u*LDe%>fVErhRLy&47w2esBiyF#~}d@1!$7sRvxL~v>JPqzxH0SQWC>f}2m1(7eh zPr8q$SAelQcsdb`k-*jR||j_Gzm zrUcOY<10mW={3>*_;Lp8kvxBgL2rrrXm9~Z{DMD|@rE8C_2tw2q?pmMpZ+>M2myC8ief{l(9&fVa6 zJz%t9I=hVRiZ$(mW&?~)8Y9i_cG>O=8RJrSf?c)|U^b>8E9|me3MwsjcDKu8$MjQr zY-hXpOZhs31z-VK00s-d0x(zr7J$J5umGlDMSr}^-!~gk>f^t~D8M_LTS4~#0000< KMNUMnLSTa3^S31c diff --git a/sound/weapons/baseball_hit.ogg b/sound/weapons/baseball_hit.ogg new file mode 100644 index 0000000000000000000000000000000000000000..6530945b6c1bb9e13945b854b20a339d5a6c8f48 GIT binary patch literal 6754 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 literal 0 HcmV?d00001 From 0ad7b779446dbedd0b70ad03afa1bfab80c333cb Mon Sep 17 00:00:00 2001 From: Couls Date: Thu, 11 Jul 2019 19:27:45 -0400 Subject: [PATCH 2/5] Update code/modules/mob/living/carbon/human/human_defense.dm Co-Authored-By: Tayyyyyyy --- code/modules/mob/living/carbon/human/human_defense.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index 5dc3710f3b5..b26429a92a6 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -319,7 +319,7 @@ emp_act B = r_hand if(B && B.deflectmode) if(prob(10)) - visible_message("[src] Deflects the [I] directly back at the thrower! It's a home run!", "You deflects the [I] directly back at the thrower!, It's a home run!") + visible_message("[src] Deflects the [I] directly back at the thrower! It's a home run!", "You deflect the [I] directly back at the thrower! It's a home run!") playsound(get_turf(src), 'sound/weapons/homerun.ogg', 100, 1) do_attack_animation(I, ATTACK_EFFECT_DISARM) I.throw_at(I.thrownby, 20, 20, src) @@ -558,4 +558,4 @@ emp_act if(head) to_chat(src, "Your [head.name] protects you from the [hot ? "hot" : "cold"] liquid!") return FALSE - return TRUE \ No newline at end of file + return TRUE From ea0535756897c278f02abb682d4836812ce439ce Mon Sep 17 00:00:00 2001 From: Couls Date: Thu, 11 Jul 2019 19:27:55 -0400 Subject: [PATCH 3/5] Update code/modules/mob/living/carbon/human/human_defense.dm Co-Authored-By: Tayyyyyyy --- code/modules/mob/living/carbon/human/human_defense.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index b26429a92a6..9bfdae11ee1 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -328,7 +328,7 @@ emp_act B.lastdeflect = world.time + 3000 return TRUE else if(prob(30)) - visible_message("[src] swings! And he misses! How embarassing.", "You swing! You miss! Oh no!") + visible_message("[src] swings! And [p_they()] miss[p_es()]! How embarassing.", "You swing! You miss! Oh no!") playsound(get_turf(src), 'sound/weapons/thudswoosh.ogg', 50, 1, -1) do_attack_animation(get_step(src,pick(alldirs)), ATTACK_EFFECT_DISARM) B.deflectmode = FALSE From bf161edfeb6cc991e5faa4fb9619b6de4abdd774 Mon Sep 17 00:00:00 2001 From: Couls Date: Thu, 11 Jul 2019 19:36:25 -0400 Subject: [PATCH 4/5] grammar --- code/game/objects/items/weapons/weaponry.dm | 4 ++-- code/modules/mob/living/carbon/human/human_defense.dm | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/code/game/objects/items/weapons/weaponry.dm b/code/game/objects/items/weapons/weaponry.dm index 9bdabbd543d..78f23b6c92a 100644 --- a/code/game/objects/items/weapons/weaponry.dm +++ b/code/game/objects/items/weapons/weaponry.dm @@ -174,10 +174,10 @@ /obj/item/melee/baseball_bat/attack_self(mob/user) if(!homerun_able) if(!deflectmode && world.time >= lastdeflect) - to_chat(user, "You prepare to deflect objects thrown at you, You cannot attack during this time.") + to_chat(user, "You prepare to deflect objects thrown at you. You cannot attack during this time.") deflectmode = TRUE else if(deflectmode && world.time >= lastdeflect) - to_chat(user, "You no longer deflect objects thrown at you, You can attack during this time") + to_chat(user, "You no longer deflect objects thrown at you. You can attack during this time") deflectmode = FALSE else to_chat(user, "You need to wait until you can deflect again. The ability will be ready in [time2text(lastdeflect - world.time, "m:ss")]") diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index 9bfdae11ee1..d147b52577c 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -319,7 +319,7 @@ emp_act B = r_hand if(B && B.deflectmode) if(prob(10)) - visible_message("[src] Deflects the [I] directly back at the thrower! It's a home run!", "You deflect the [I] directly back at the thrower! It's a home run!") + visible_message("[src] Deflects the [I] directly back at the thrower! It's a home run!", "You deflect the [I] directly back at the thrower! It's a home run!") playsound(get_turf(src), 'sound/weapons/homerun.ogg', 100, 1) do_attack_animation(I, ATTACK_EFFECT_DISARM) I.throw_at(I.thrownby, 20, 20, src) From 6d7ee9c93483ec5e02f7bf17488eb8f9c356f4d9 Mon Sep 17 00:00:00 2001 From: Couls Date: Fri, 23 Aug 2019 00:40:44 -0400 Subject: [PATCH 5/5] use hit_reaction instead --- code/game/objects/items.dm | 2 +- code/game/objects/items/weapons/weaponry.dm | 34 +++++++++++++++ .../mob/living/carbon/human/human_defense.dm | 41 ++----------------- 3 files changed, 39 insertions(+), 38 deletions(-) diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 073cd0df669..f9cf71271fc 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -331,7 +331,7 @@ var/global/image/fire_overlay = image("icon" = 'icons/goonstation/effects/fire.d else return ..() -/obj/item/proc/hit_reaction(mob/living/carbon/human/owner, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK) +/obj/item/proc/hit_reaction(mob/living/carbon/human/owner, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK, atom/movable/AM) SEND_SIGNAL(src, COMSIG_ITEM_HIT_REACT, args) if(prob(final_block_chance)) owner.visible_message("[owner] blocks [attack_text] with [src]!") diff --git a/code/game/objects/items/weapons/weaponry.dm b/code/game/objects/items/weapons/weaponry.dm index 78f23b6c92a..f42decd4363 100644 --- a/code/game/objects/items/weapons/weaponry.dm +++ b/code/game/objects/items/weapons/weaponry.dm @@ -171,6 +171,40 @@ desc = "This thing looks dangerous... Dangerously good at baseball, that is." homerun_able = 1 +/obj/item/melee/baseball_bat/hit_reaction(mob/living/carbon/human/owner, attack_text, final_block_chance, damage, attack_type, atom/movable/AM) + . = ..() + if(!istype(AM, /obj/item) || attack_type != THROWN_PROJECTILE_ATTACK) + return FALSE + var/obj/item/I = AM + if(I.w_class <= WEIGHT_CLASS_NORMAL || istype(I, /obj/item/beach_ball)) // baseball bat deflecting + if(deflectmode) + if(prob(10)) + visible_message("[owner] Deflects [I] directly back at the thrower! It's a home run!", "You deflect the [I] directly back at the thrower! It's a home run!") + playsound(get_turf(owner), 'sound/weapons/homerun.ogg', 100, 1) + do_attack_animation(I, ATTACK_EFFECT_DISARM) + I.throw_at(I.thrownby, 20, 20, owner) + deflectmode = FALSE + if(!istype(I, /obj/item/beach_ball)) + lastdeflect = world.time + 3000 + return TRUE + else if(prob(30)) + visible_message("[owner] swings! And [p_they()] miss[p_es()]! How embarassing.", "You swing! You miss! Oh no!") + playsound(get_turf(owner), 'sound/weapons/thudswoosh.ogg', 50, 1, -1) + do_attack_animation(get_step(owner, pick(alldirs)), ATTACK_EFFECT_DISARM) + deflectmode = FALSE + if(!istype(I, /obj/item/beach_ball)) + lastdeflect = world.time + 3000 + return FALSE + else + visible_message("[owner] swings and deflects [I]!", "You swing and deflect the [I]!") + playsound(get_turf(owner), 'sound/weapons/baseball_hit.ogg', 50, 1, -1) + do_attack_animation(I, ATTACK_EFFECT_DISARM) + I.throw_at(get_edge_target_turf(owner, pick(cardinal)), rand(8,10), 14, owner) + deflectmode = FALSE + if(!istype(I, /obj/item/beach_ball)) + lastdeflect = world.time + 3000 + return TRUE + /obj/item/melee/baseball_bat/attack_self(mob/user) if(!homerun_able) if(!deflectmode && world.time >= lastdeflect) diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index d147b52577c..d172fabef00 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -141,19 +141,19 @@ emp_act if(l_hand && !istype(l_hand, /obj/item/clothing)) var/final_block_chance = l_hand.block_chance - (Clamp((armour_penetration-l_hand.armour_penetration)/2,0,100)) + block_chance_modifier //So armour piercing blades can still be parried by other blades, for example - if(l_hand.hit_reaction(src, attack_text, final_block_chance, damage, attack_type)) + if(l_hand.hit_reaction(src, attack_text, final_block_chance, damage, attack_type, AM)) return 1 if(r_hand && !istype(r_hand, /obj/item/clothing)) var/final_block_chance = r_hand.block_chance - (Clamp((armour_penetration-r_hand.armour_penetration)/2,0,100)) + block_chance_modifier //Need to reset the var so it doesn't carry over modifications between attempts - if(r_hand.hit_reaction(src, attack_text, final_block_chance, damage, attack_type)) + if(r_hand.hit_reaction(src, attack_text, final_block_chance, damage, attack_type, AM)) return 1 if(wear_suit) var/final_block_chance = wear_suit.block_chance - (Clamp((armour_penetration-wear_suit.armour_penetration)/2,0,100)) + block_chance_modifier - if(wear_suit.hit_reaction(src, attack_text, final_block_chance, damage, attack_type)) + if(wear_suit.hit_reaction(src, attack_text, final_block_chance, damage, attack_type, AM)) return 1 if(w_uniform) var/final_block_chance = w_uniform.block_chance - (Clamp((armour_penetration-w_uniform.armour_penetration)/2,0,100)) + block_chance_modifier - if(w_uniform.hit_reaction(src, attack_text, final_block_chance, damage, attack_type)) + if(w_uniform.hit_reaction(src, attack_text, final_block_chance, damage, attack_type, AM)) return 1 return 0 @@ -311,39 +311,6 @@ emp_act throwpower = I.throwforce if(I.thrownby == src) //No throwing stuff at yourself to trigger reactions return ..() - if(I.w_class <= WEIGHT_CLASS_NORMAL || istype(I, /obj/item/beach_ball)) // baseball bat deflecting - var/obj/item/melee/baseball_bat/B - if(l_hand && istype(l_hand, /obj/item/melee/baseball_bat)) - B = l_hand - else if(r_hand && istype(r_hand, /obj/item/melee/baseball_bat)) - B = r_hand - if(B && B.deflectmode) - if(prob(10)) - visible_message("[src] Deflects the [I] directly back at the thrower! It's a home run!", "You deflect the [I] directly back at the thrower! It's a home run!") - playsound(get_turf(src), 'sound/weapons/homerun.ogg', 100, 1) - do_attack_animation(I, ATTACK_EFFECT_DISARM) - I.throw_at(I.thrownby, 20, 20, src) - B.deflectmode = FALSE - if(!istype(I, /obj/item/beach_ball)) - B.lastdeflect = world.time + 3000 - return TRUE - else if(prob(30)) - visible_message("[src] swings! And [p_they()] miss[p_es()]! How embarassing.", "You swing! You miss! Oh no!") - playsound(get_turf(src), 'sound/weapons/thudswoosh.ogg', 50, 1, -1) - do_attack_animation(get_step(src,pick(alldirs)), ATTACK_EFFECT_DISARM) - B.deflectmode = FALSE - if(!istype(I, /obj/item/beach_ball)) - B.lastdeflect = world.time + 3000 - return ..() - else - visible_message("[src] swings and deflects the [I]!", "You swing and deflect the [I]!") - playsound(get_turf(src), 'sound/weapons/baseball_hit.ogg', 50, 1, -1) - do_attack_animation(I, ATTACK_EFFECT_DISARM) - I.throw_at(get_edge_target_turf(src,pick(alldirs)), rand(8,10), 14, src) - B.deflectmode = FALSE - if(!istype(I, /obj/item/beach_ball)) - B.lastdeflect = world.time + 3000 - return TRUE if(check_shields(throwpower, "\the [AM.name]", AM, THROWN_PROJECTILE_ATTACK)) hitpush = 0 skipcatch = 1