From ca6b289da63894ae6acb96d98a799005bacd63ec Mon Sep 17 00:00:00 2001
From: Timothy Teakettle <59849408+timothyteakettle@users.noreply.github.com>
Date: Sun, 19 Jul 2020 17:49:22 +0100
Subject: [PATCH] fix tables and some minor thing
---
code/game/objects/structures/tables_racks.dm | 40 ++++++++++++++++++--
code/modules/mob/living/living_defense.dm | 2 +-
2 files changed, 37 insertions(+), 5 deletions(-)
diff --git a/code/game/objects/structures/tables_racks.dm b/code/game/objects/structures/tables_racks.dm
index 9e7c3476dc..1a9064f556 100644
--- a/code/game/objects/structures/tables_racks.dm
+++ b/code/game/objects/structures/tables_racks.dm
@@ -60,7 +60,7 @@
/obj/structure/table/attack_paw(mob/user)
return attack_hand(user)
-/obj/structure/table/attack_hand(mob/living/user, act_intent = user.a_intent, unarmed_attack_flags)
+/obj/structure/table/attack_hand(mob/living/user)
if(Adjacent(user) && user.pulling)
if(isliving(user.pulling))
var/mob/living/pushed_mob = user.pulling
@@ -71,7 +71,10 @@
if(user.grab_state < GRAB_AGGRESSIVE)
to_chat(user, "You need a better grip to do that!")
return
- tablelimbsmash(user, pushed_mob)
+ if(user.grab_state >= GRAB_NECK)
+ tablelimbsmash(user, pushed_mob)
+ else
+ tablepush(user, pushed_mob)
if(user.a_intent == INTENT_HELP)
pushed_mob.visible_message("[user] begins to place [pushed_mob] onto [src]...", \
"[user] begins to place [pushed_mob] onto [src]...")
@@ -114,10 +117,31 @@
"[user] places [pushed_mob] onto [src].")
log_combat(user, pushed_mob, "placed")
-/obj/structure/table/proc/tablelimbsmash(mob/living/user, mob/living/pushed_mob)
- if(HAS_TRAIT(user, TRAIT_PACIFISM)) //this shouldnt even be possible anyway because you cant get them in an aggressive grab, but whatever
+/obj/structure/table/proc/tablepush(mob/living/user, mob/living/pushed_mob)
+ if(HAS_TRAIT(user, TRAIT_PACIFISM))
to_chat(user, "Throwing [pushed_mob] onto the table might hurt them!")
return
+ var/added_passtable = FALSE
+ if(!pushed_mob.pass_flags & PASSTABLE)
+ added_passtable = TRUE
+ pushed_mob.pass_flags |= PASSTABLE
+ pushed_mob.Move(src.loc)
+ if(added_passtable)
+ pushed_mob.pass_flags &= ~PASSTABLE
+ if(pushed_mob.loc != loc) //Something prevented the tabling
+ return
+ pushed_mob.Knockdown(30)
+ pushed_mob.apply_damage(10, BRUTE)
+ pushed_mob.apply_damage(40, STAMINA)
+ if(user.mind?.martial_art.smashes_tables && user.mind?.martial_art.can_use(user))
+ deconstruct(FALSE)
+ playsound(pushed_mob, 'sound/effects/tableslam.ogg', 90, TRUE)
+ pushed_mob.visible_message("[user] slams [pushed_mob] onto \the [src]!", \
+ "[user] slams you onto \the [src]!")
+ log_combat(user, pushed_mob, "tabled", null, "onto [src]")
+ SEND_SIGNAL(pushed_mob, COMSIG_ADD_MOOD_EVENT, "table", /datum/mood_event/table)
+
+/obj/structure/table/proc/tablelimbsmash(mob/living/user, mob/living/pushed_mob)
pushed_mob.Knockdown(30)
var/obj/item/bodypart/banged_limb = pushed_mob.get_bodypart(user.zone_selected) || pushed_mob.get_bodypart(BODY_ZONE_HEAD)
var/extra_wound = 0
@@ -125,6 +149,14 @@
extra_wound = 20
banged_limb.receive_damage(30, wound_bonus = extra_wound)
pushed_mob.apply_damage(60, STAMINA)
+ take_damage(50)
+ if(user.mind?.martial_art.smashes_tables && user.mind?.martial_art.can_use(user))
+ deconstruct(FALSE)
+ playsound(pushed_mob, 'sound/effects/bang.ogg', 90, TRUE)
+ pushed_mob.visible_message("[user] smashes [pushed_mob]'s [banged_limb.name] against \the [src]!",
+ "[user] smashes your [banged_limb.name] against \the [src]")
+ log_combat(user, pushed_mob, "head slammed", null, "against [src]")
+ SEND_SIGNAL(pushed_mob, COMSIG_ADD_MOOD_EVENT, "table", /datum/mood_event/table_limbsmash, banged_limb)
/obj/structure/table/shove_act(mob/living/target, mob/living/user)
if(CHECK_MOBILITY(target, MOBILITY_STAND))
diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm
index 88de7477ea..e24e9641bf 100644
--- a/code/modules/mob/living/living_defense.dm
+++ b/code/modules/mob/living/living_defense.dm
@@ -85,7 +85,7 @@
totaldamage = block_calculate_resultant_damage(totaldamage, returnlist)
var/armor = run_armor_check(def_zone, P.flag, null, null, P.armour_penetration, null)
if(!P.nodamage)
- apply_damage(P.damage, P.damage_type, def_zone, armor, wound_bonus=P.wound_bonus, bare_wound_bonus=P.bare_wound_bonus, sharpness=P.sharpness)
+ apply_damage(totaldamage, P.damage_type, def_zone, armor, wound_bonus=P.wound_bonus, bare_wound_bonus=P.bare_wound_bonus, sharpness=P.sharpness)
if(P.dismemberment)
check_projectile_dismemberment(P, def_zone)
var/missing = 100 - final_percent