diff --git a/code/datums/martial/_martial.dm b/code/datums/martial/_martial.dm index 0253ecf8a4a..c18f2c8de24 100644 --- a/code/datums/martial/_martial.dm +++ b/code/datums/martial/_martial.dm @@ -8,6 +8,7 @@ var/block_chance = 0 //Chance to block melee attacks using items while on throw mode. var/help_verb var/allow_temp_override = TRUE //if this martial art can be overridden by temporary martial arts + var/smashes_tables = FALSE //If the martial art smashes tables when performing table slams and head smashes /datum/martial_art/proc/disarm_act(mob/living/carbon/human/A, mob/living/carbon/human/D) return FALSE diff --git a/code/datums/martial/cqc.dm b/code/datums/martial/cqc.dm index 6f78f0a6b1b..b85cd782696 100644 --- a/code/datums/martial/cqc.dm +++ b/code/datums/martial/cqc.dm @@ -9,6 +9,7 @@ id = MARTIALART_CQC help_verb = /mob/living/carbon/human/proc/CQC_help block_chance = 75 + smashes_tables = TRUE var/old_grab_state = null var/restraining = FALSE diff --git a/code/datums/martial/sleeping_carp.dm b/code/datums/martial/sleeping_carp.dm index 27d031b6542..dd1c7b6c0df 100644 --- a/code/datums/martial/sleeping_carp.dm +++ b/code/datums/martial/sleeping_carp.dm @@ -9,6 +9,7 @@ id = MARTIALART_SLEEPINGCARP allow_temp_override = FALSE help_verb = /mob/living/carbon/human/proc/sleeping_carp_help + smashes_tables = TRUE var/old_grab_state = null /datum/martial_art/the_sleeping_carp/proc/check_streak(mob/living/carbon/human/A, mob/living/carbon/human/D) diff --git a/code/datums/mood_events/generic_negative_events.dm b/code/datums/mood_events/generic_negative_events.dm index 8d88c2dc39c..ecda528cbd8 100644 --- a/code/datums/mood_events/generic_negative_events.dm +++ b/code/datums/mood_events/generic_negative_events.dm @@ -84,6 +84,11 @@ description = "They want to play on the table!\n" mood_change = 2 +/datum/mood_event/table_headsmash + description = "My fucking head, that hurt..." + mood_change = -3 + timeout = 3 MINUTES + /datum/mood_event/brain_damage mood_change = -3 diff --git a/code/game/objects/structures/tables_racks.dm b/code/game/objects/structures/tables_racks.dm index 90ad4e7b9f6..0de5a57caca 100644 --- a/code/game/objects/structures/tables_racks.dm +++ b/code/game/objects/structures/tables_racks.dm @@ -70,7 +70,10 @@ if(user.grab_state < GRAB_AGGRESSIVE) to_chat(user, "You need a better grip to do that!") return - tablepush(user, pushed_mob) + if(user.grab_state >= GRAB_NECK) + tableheadsmash(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]...") @@ -126,14 +129,29 @@ pushed_mob.pass_flags &= ~PASSTABLE if(pushed_mob.loc != loc) //Something prevented the tabling return - pushed_mob.Paralyze(40) - pushed_mob.visible_message("[user] slams [pushed_mob] onto [src]!", \ - "[user] slams you onto [src]!") + pushed_mob.Knockdown(30) + pushed_mob.apply_damage(10, BRUTE) + pushed_mob.apply_damage(40, STAMINA) + if(user.mind?.martial_art?.smashes_tables) + 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]") - if(!ishuman(pushed_mob)) - return - var/mob/living/carbon/human/H = pushed_mob - SEND_SIGNAL(H, COMSIG_ADD_MOOD_EVENT, "table", /datum/mood_event/table) + SEND_SIGNAL(pushed_mob, COMSIG_ADD_MOOD_EVENT, "table", /datum/mood_event/table) + +/obj/structure/table/proc/tableheadsmash(mob/living/user, mob/living/pushed_mob) + pushed_mob.Knockdown(30) + pushed_mob.apply_damage(40, BRUTE, BODY_ZONE_HEAD) + pushed_mob.apply_damage(60, STAMINA) + take_damage(50) + if(user.mind?.martial_art?.smashes_tables) + deconstruct(FALSE) + playsound(pushed_mob, "sound/effects/tableheadsmash.ogg", 90, TRUE) + pushed_mob.visible_message("[user] smashes [pushed_mob]'s head against \the [src]!", + "[user] smashes your head 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_headsmash) /obj/structure/table/attackby(obj/item/I, mob/user, params) if(!(flags_1 & NODECONSTRUCT_1) && user.a_intent != INTENT_HELP) diff --git a/sound/effects/tableheadsmash.ogg b/sound/effects/tableheadsmash.ogg new file mode 100644 index 00000000000..7f2a5f45a6a Binary files /dev/null and b/sound/effects/tableheadsmash.ogg differ diff --git a/sound/effects/tableslam.ogg b/sound/effects/tableslam.ogg new file mode 100644 index 00000000000..6d1ba5ce215 Binary files /dev/null and b/sound/effects/tableslam.ogg differ