From f5083f498bfe1b41d6bfef5b01708c43eaa446b5 Mon Sep 17 00:00:00 2001
From: SkyratBot <59378654+SkyratBot@users.noreply.github.com>
Date: Mon, 1 Mar 2021 18:49:38 +0100
Subject: [PATCH] [MIRROR] *smacks table* Hot Damn! (#3734)
* *smacks table* Hot Damn! (#57269)
* *smacks table* Hot Damn!
Co-authored-by: Ryll Ryll <3589655+Ryll-Ryll@users.noreply.github.com>
---
code/__DEFINES/achievements.dm | 1 +
code/_onclick/item_attack.dm | 4 +--
code/datums/achievements/misc_achievements.dm | 6 ++++
code/game/objects/items/extinguisher.dm | 2 +-
code/game/objects/items/hand_items.dm | 31 ++++++++++++++++++
code/game/objects/items/inducer.dm | 2 +-
.../objects/structures/lavaland/geyser.dm | 2 +-
code/game/objects/structures/manned_turret.dm | 2 +-
code/modules/cargo/coupon.dm | 2 +-
.../living/carbon/alien/special/facehugger.dm | 2 +-
code/modules/mob/living/carbon/emote.dm | 1 +
code/modules/power/lighting.dm | 2 +-
code/modules/projectiles/gun.dm | 2 +-
icons/UI_Icons/Achievements/Misc/hotdamn.png | Bin 0 -> 4624 bytes
14 files changed, 49 insertions(+), 10 deletions(-)
create mode 100644 icons/UI_Icons/Achievements/Misc/hotdamn.png
diff --git a/code/__DEFINES/achievements.dm b/code/__DEFINES/achievements.dm
index 9da8ea2440a..acac49dcef8 100644
--- a/code/__DEFINES/achievements.dm
+++ b/code/__DEFINES/achievements.dm
@@ -32,6 +32,7 @@
#define MEDAL_VOID_ASCENSION "Void"
#define MEDAL_TOOLBOX_SOUL "Toolsoul"
#define MEDAL_CHEM_TUT "Beginner Chemist"
+#define MEDAL_HOT_DAMN "Hot Damn!"
//Skill medal hub IDs
#define MEDAL_LEGENDARY_MINER "Legendary Miner"
diff --git a/code/_onclick/item_attack.dm b/code/_onclick/item_attack.dm
index 4c77a25e21d..b5d5c55dc06 100644
--- a/code/_onclick/item_attack.dm
+++ b/code/_onclick/item_attack.dm
@@ -125,7 +125,7 @@
return SECONDARY_ATTACK_CALL_NORMAL
/obj/attackby(obj/item/I, mob/living/user, params)
- return ..() || ((obj_flags & CAN_BE_HIT) && I.attack_obj(src, user))
+ return ..() || ((obj_flags & CAN_BE_HIT) && I.attack_obj(src, user, params))
/mob/living/attackby(obj/item/I, mob/living/user, params)
if(..())
@@ -202,7 +202,7 @@
return SECONDARY_ATTACK_CALL_NORMAL
/// The equivalent of the standard version of [/obj/item/proc/attack] but for object targets.
-/obj/item/proc/attack_obj(obj/O, mob/living/user)
+/obj/item/proc/attack_obj(obj/O, mob/living/user, params)
if(SEND_SIGNAL(src, COMSIG_ITEM_ATTACK_OBJ, O, user) & COMPONENT_CANCEL_ATTACK_CHAIN)
return
if(item_flags & NOBLUDGEON)
diff --git a/code/datums/achievements/misc_achievements.dm b/code/datums/achievements/misc_achievements.dm
index 0da38df8f30..26e779129aa 100644
--- a/code/datums/achievements/misc_achievements.dm
+++ b/code/datums/achievements/misc_achievements.dm
@@ -159,3 +159,9 @@
desc = "Passed the chemistry tutorial with perfect purity!"
database_id = MEDAL_CHEM_TUT
icon = "chem_tut"
+
+/datum/award/achievement/misc/hot_damn
+ name = "Hot Damn!"
+ desc = "Sometimes you need to make some noise to make a point."
+ database_id = MEDAL_HOT_DAMN
+ icon = "hotdamn"
diff --git a/code/game/objects/items/extinguisher.dm b/code/game/objects/items/extinguisher.dm
index 399d4661134..38913e32234 100644
--- a/code/game/objects/items/extinguisher.dm
+++ b/code/game/objects/items/extinguisher.dm
@@ -117,7 +117,7 @@
else
return ..()
-/obj/item/extinguisher/attack_obj(obj/O, mob/living/user)
+/obj/item/extinguisher/attack_obj(obj/O, mob/living/user, params)
if(AttemptRefill(O, user))
refilling = TRUE
return FALSE
diff --git a/code/game/objects/items/hand_items.dm b/code/game/objects/items/hand_items.dm
index 313be3d7b4d..c113b79d3c1 100644
--- a/code/game/objects/items/hand_items.dm
+++ b/code/game/objects/items/hand_items.dm
@@ -113,6 +113,8 @@
attack_verb_continuous = list("slaps")
attack_verb_simple = list("slap")
hitsound = 'sound/effects/snap.ogg'
+ /// How many smaller table smacks we can do before we're out
+ var/table_smacks_left = 3
/obj/item/slapper/attack(mob/M, mob/living/carbon/human/user)
if(ishuman(M))
@@ -126,6 +128,35 @@
"You hear a slap.")
return
+/obj/item/slapper/attack_obj(obj/O, mob/living/user, params)
+ if(!istype(O, /obj/structure/table))
+ return ..()
+
+ var/obj/structure/table/the_table = O
+ var/is_right_clicking = LAZYACCESS(params2list(params), RIGHT_CLICK)
+
+ if(is_right_clicking && table_smacks_left == initial(table_smacks_left)) // so you can't do 2 weak slaps followed by a big slam
+ transform = transform.Scale(5) // BIG slap
+ if(HAS_TRAIT(user, TRAIT_HULK))
+ transform = transform.Scale(2)
+ color = COLOR_GREEN
+ user.do_attack_animation(the_table)
+ if(ishuman(user))
+ var/mob/living/carbon/human/human_user = user
+ if(istype(human_user.shoes, /obj/item/clothing/shoes/cowboy))
+ human_user.say(pick("Hot damn!", "Hoo-wee!", "Got-dang!"), spans = list(SPAN_YELL), forced=TRUE)
+ human_user.client?.give_award(/datum/award/achievement/misc/hot_damn, human_user)
+ playsound(get_turf(the_table), 'sound/effects/tableslam.ogg', 110, TRUE)
+ user.visible_message("[user] slams [user.p_their()] fist down on [the_table]!", "You slam your fist down on [the_table]!")
+ qdel(src)
+ else
+ user.do_attack_animation(the_table)
+ playsound(get_turf(the_table), 'sound/effects/tableslam.ogg', 40, TRUE)
+ user.visible_message("[user] slaps [user.p_their()] hand on [the_table].", "You slap your hand on [the_table].", vision_distance=COMBAT_MESSAGE_RANGE)
+ table_smacks_left--
+ if(table_smacks_left <= 0)
+ qdel(src)
+
/obj/item/noogie
name = "noogie"
desc = "Get someone in an aggressive grab then use this on them to ruin their day."
diff --git a/code/game/objects/items/inducer.dm b/code/game/objects/items/inducer.dm
index 91e23bffc54..f4f64f591ff 100644
--- a/code/game/objects/items/inducer.dm
+++ b/code/game/objects/items/inducer.dm
@@ -33,7 +33,7 @@
if(cell && !(. & EMP_PROTECT_CONTENTS))
cell.emp_act(severity)
-/obj/item/inducer/attack_obj(obj/O, mob/living/carbon/user)
+/obj/item/inducer/attack_obj(obj/O, mob/living/carbon/user, params)
if(user.combat_mode)
return ..()
diff --git a/code/game/objects/structures/lavaland/geyser.dm b/code/game/objects/structures/lavaland/geyser.dm
index f2403da649b..fb1c6aa1d0e 100644
--- a/code/game/objects/structures/lavaland/geyser.dm
+++ b/code/game/objects/structures/lavaland/geyser.dm
@@ -79,7 +79,7 @@
var/list/layers = list("First Layer" = FIRST_DUCT_LAYER, "Second Layer" = SECOND_DUCT_LAYER, "Default Layer" = DUCT_LAYER_DEFAULT,
"Fourth Layer" = FOURTH_DUCT_LAYER, "Fifth Layer" = FIFTH_DUCT_LAYER)
-/obj/item/plunger/attack_obj(obj/O, mob/living/user)
+/obj/item/plunger/attack_obj(obj/O, mob/living/user, params)
if(layer_mode)
SEND_SIGNAL(O, COMSIG_MOVABLE_CHANGE_DUCT_LAYER, O, target_layer)
return ..()
diff --git a/code/game/objects/structures/manned_turret.dm b/code/game/objects/structures/manned_turret.dm
index 303b6ca9ee2..ccac75806c7 100644
--- a/code/game/objects/structures/manned_turret.dm
+++ b/code/game/objects/structures/manned_turret.dm
@@ -198,7 +198,7 @@
/obj/item/gun_control/CanItemAutoclick()
return TRUE
-/obj/item/gun_control/attack_obj(obj/O, mob/living/user)
+/obj/item/gun_control/attack_obj(obj/O, mob/living/user, params)
user.changeNext_move(CLICK_CD_MELEE)
O.attacked_by(src, user)
diff --git a/code/modules/cargo/coupon.dm b/code/modules/cargo/coupon.dm
index ac77a994a03..78476cb01e0 100644
--- a/code/modules/cargo/coupon.dm
+++ b/code/modules/cargo/coupon.dm
@@ -30,7 +30,7 @@
discount_pct_off = text2num(discount_pct_off)
name = "coupon - [round(discount_pct_off * 100)]% off [initial(discounted_pack.name)]"
-/obj/item/coupon/attack_obj(obj/O, mob/living/user)
+/obj/item/coupon/attack_obj(obj/O, mob/living/user, params)
if(!istype(O, /obj/machinery/computer/cargo))
return ..()
if(discount_pct_off == COUPON_OMEN)
diff --git a/code/modules/mob/living/carbon/alien/special/facehugger.dm b/code/modules/mob/living/carbon/alien/special/facehugger.dm
index 412ee81f2e6..3e6bcfd701d 100644
--- a/code/modules/mob/living/carbon/alien/special/facehugger.dm
+++ b/code/modules/mob/living/carbon/alien/special/facehugger.dm
@@ -65,7 +65,7 @@
Die()
/obj/item/clothing/mask/facehugger/attackby(obj/item/O, mob/user, params)
- return O.attack_obj(src, user)
+ return O.attack_obj(src, user, params)
//ATTACK HAND IGNORING PARENT RETURN VALUE
/obj/item/clothing/mask/facehugger/attack_hand(mob/user, list/modifiers)
diff --git a/code/modules/mob/living/carbon/emote.dm b/code/modules/mob/living/carbon/emote.dm
index e5d3a5b6e4f..04a7ac827f5 100644
--- a/code/modules/mob/living/carbon/emote.dm
+++ b/code/modules/mob/living/carbon/emote.dm
@@ -117,6 +117,7 @@
key = "slap"
key_third_person = "slaps"
hands_use_check = TRUE
+ cooldown = 3 SECONDS // to prevent endless table slamming
/datum/emote/living/carbon/slap/run_emote(mob/user, params, type_override, intentional)
. = ..()
diff --git a/code/modules/power/lighting.dm b/code/modules/power/lighting.dm
index a9696cea489..6ba7e2db63b 100644
--- a/code/modules/power/lighting.dm
+++ b/code/modules/power/lighting.dm
@@ -995,7 +995,7 @@
..()
shatter()
-/obj/item/light/attack_obj(obj/O, mob/living/user)
+/obj/item/light/attack_obj(obj/O, mob/living/user, params)
..()
shatter()
diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm
index ffdbe8e4b7b..24efe69b527 100644
--- a/code/modules/projectiles/gun.dm
+++ b/code/modules/projectiles/gun.dm
@@ -394,7 +394,7 @@
return ..()
return
-/obj/item/gun/attack_obj(obj/O, mob/living/user)
+/obj/item/gun/attack_obj(obj/O, mob/living/user, params)
if(user.combat_mode)
if(bayonet)
O.attackby(bayonet, user)
diff --git a/icons/UI_Icons/Achievements/Misc/hotdamn.png b/icons/UI_Icons/Achievements/Misc/hotdamn.png
new file mode 100644
index 0000000000000000000000000000000000000000..5c278772f6f88e0483c7f482c6edaad7edfd2b5f
GIT binary patch
literal 4624
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