From bcf77458dd5639ba27f07dd4acb0a174aa562dbb Mon Sep 17 00:00:00 2001 From: kevinz000 <2003111+kevinz000@users.noreply.github.com> Date: Sat, 11 Apr 2020 08:37:02 -0700 Subject: [PATCH] nicer way to bash people --- code/game/objects/items/shields.dm | 39 ++++++++++++++++++------------ 1 file changed, 23 insertions(+), 16 deletions(-) diff --git a/code/game/objects/items/shields.dm b/code/game/objects/items/shields.dm index be011c8a34..9725237bf8 100644 --- a/code/game/objects/items/shields.dm +++ b/code/game/objects/items/shields.dm @@ -19,6 +19,8 @@ var/shieldbash_stamdmg = 15 /// Shield bashing stagger duration var/shieldbash_stagger_duration = 3.5 SECONDS + /// Shield bashing push distance + var/shieldbash_push_distance = 1 /obj/item/shield/examine(mob/user) . = ..() @@ -31,11 +33,11 @@ return TRUE /obj/item/shield/alt_pre_attack(atom/A, mob/living/user, params) - user_shieldbash(user, A) + user_shieldbash(user, A, user.a_intent != INTENT_HARM) return TRUE /obj/item/shield/altafterattack(atom/target, mob/user, proximity_flag, click_parameters) - user_shieldbash(user, target) + user_shieldbash(user, target, user.a_intent != INTENT_HARM) return TRUE /obj/item/shield/proc/do_shieldbash_effect(mob/living/user, dir) @@ -54,11 +56,11 @@ var/oldpy = user.pixel_y animate(user, pixel_x = px, pixel_y = py, time = 3, easing = SINE_EASING | EASE_OUT, flags = ANIMATION_END_NOW) animate(user, pixel_x = oldpx, pixel_y = oldpy, time = 3) - user.visible_message("[user] charges forwards with [src]!") + user.visible_message("[user] [harmful? "charges forwards with" : "sweeps"] [src]!") var/obj/effect/temp_visual/dir_setting/shield_bash/effect = new(user.loc, dir) animate(effect, alpha = 0, pixel_x = px + 4, pixel_y = py + 4, time = 3) -/obj/item/shield/proc/bash_target(mob/living/user, mob/living/target, bashdir) +/obj/item/shield/proc/bash_target(mob/living/user, mob/living/target, bashdir, harmful) if(!(target.status_flags & CANKNOCKDOWN) || HAS_TRAIT(src, TRAIT_STUNIMMUNE)) // should probably add stun absorption check at some point I guess.. // unified stun absorption system when lol target.visible_message("[user] slams [target] with [src], but [target] doesn't falter!", "[user] slams you with [src], but it barely fazes you!") @@ -66,12 +68,16 @@ var/target_downed = !CHECK_MOBILITY(target, MOBILITY_STAND) var/wallhit = FALSE var/turf/target_current_turf = get_turf(target) - target.visible_message("[target_downed? "[user] slams [src] into [target]" : "[user] bashes [target] with [src]"]!", - "[target_downed? "[user] slams [src] into you" : "[user] bashes you with [src]"]!") - for(var/i in 1 to shieldbash_knockback) + if(harmful) + target.visible_message("[target_downed? "[user] slams [src] into [target]" : "[user] bashes [target] with [src]"]!", + "[target_downed? "[user] slams [src] into you" : "[user] bashes you with [src]"]!") + else + target.visible_message("[user] shoves [target] with [src]!", + "[user] shoves you with [src]!") + for(var/i in 1 to harmful? shieldbash_knockback : shieldbash_push_distance) var/turf/new_turf = get_step(target, bashdir) var/mob/living/carbon/human/H = locate() in new_turf - if(H) + if(H && harmful) H.visible_message("[target] is sent crashing into [H]!", "[target] is sent crashing into you!") H.KnockToFloor() @@ -94,12 +100,13 @@ else if(disarming) target.drop_all_held_items() - target.apply_damage(shieldbash_stamdmg, STAMINA, BODY_ZONE_CHEST) - target.apply_damage(shieldbash_brutedamage, BRUTE, BODY_ZONE_CHEST) + if(harmful) + target.apply_damage(shieldbash_stamdmg, STAMINA, BODY_ZONE_CHEST) + target.apply_damage(shieldbash_brutedamage, BRUTE, BODY_ZONE_CHEST) target.Stagger(shieldbash_stagger_duration) return TRUE -/obj/item/shield/proc/user_shieldbash(mob/living/user, atom/target) +/obj/item/shield/proc/user_shieldbash(mob/living/user, atom/target, harmful) if(!(shield_flags & SHIELD_CAN_BASH)) to_chat(user, "[src] can't be used to shield bash!") return FALSE @@ -110,9 +117,9 @@ if(!(shield_flags & SHIELD_BASH_GROUND_SLAM)) to_chat(user, "You can't ground slam with [src]!") return FALSE - bash_target(user, target) + bash_target(user, target, NONE, harmful) user.do_attack_animation(target, used_item = src) - playsound(src, "swing_hit", 75, 1) + playsound(src, harmful? "swing_hit" : 'sound/weapons/thudswoosh.ogg', 75, 1) last_shieldbash = world.time user.adjustStaminaLossBuffered(shieldbash_stamcost) return 1 @@ -121,7 +128,7 @@ user.adjustStaminaLossBuffered(shieldbash_stamcost) // Since we are in combat mode, we can probably safely use the user's dir instead of getting their mouse pointing cardinal dir. var/bashdir = user.dir - do_shieldbash_effect(user, bashdir) + do_shieldbash_effect(user, bashdir, harmful) var/list/checking = list(get_step(user, user.dir), get_step(user, turn(user.dir, 45)), get_step(user, turn(user.dir, -45))) var/list/victims = list() for(var/i in checking) @@ -130,8 +137,8 @@ victims += L if(length(victims)) for(var/i in victims) - bash_target(user, i, bashdir) - playsound(src, "swing_hit", 75, 1) + bash_target(user, i, bashdir, harmful) + playsound(src, harmful? "swing_hit" : 'sound/weapons/thudswoosh.ogg', 75, 1) else playsound(src, 'sound/weapons/punchmiss.ogg', 75, 1) return length(victims)