diff --git a/code/__DEFINES/status_effects.dm b/code/__DEFINES/status_effects.dm
index b34e68e9ae..669bf6326b 100644
--- a/code/__DEFINES/status_effects.dm
+++ b/code/__DEFINES/status_effects.dm
@@ -119,6 +119,8 @@
#define STATUS_EFFECT_CLOUDSTRUCK /datum/status_effect/cloudstruck //blinds and applies an overlay.
+#define STATUS_EFFECT_GAUNTLET_CONC /datum/status_effect/cgau_conc // it's a slowdown that really should only be applying to large simplemobs
+
/// shoves inflict this to indicate the next shove while this is in effect should disarm guns
#define STATUS_EFFECT_OFF_BALANCE /datum/status_effect/off_balance
diff --git a/code/datums/status_effects/debuffs.dm b/code/datums/status_effects/debuffs.dm
index b75676dbd2..2e0df8917d 100644
--- a/code/datums/status_effects/debuffs.dm
+++ b/code/datums/status_effects/debuffs.dm
@@ -1132,3 +1132,16 @@
else if(fake_msg)
to_chat(owner, fake_msg)
msg_stage++
+
+/datum/status_effect/cgau_conc
+ id = "cgau_conc"
+ examine_text = "SUBJECTPRONOUN rocks from side to side, confused."
+ duration = 5 SECONDS
+
+/datum/status_effect/cgau_conc/on_creation(mob/living/new_owner, ...)
+ . = ..()
+ new_owner.add_movespeed_modifier(/datum/movespeed_modifier/gauntlet_concussion)
+
+/datum/status_effect/cgau_conc/on_remove()
+ owner.remove_movespeed_modifier(/datum/movespeed_modifier/gauntlet_concussion)
+ . = ..()
diff --git a/code/modules/mining/equipment/kinetic_crusher.dm b/code/modules/mining/equipment/kinetic_crusher.dm
index 2149967049..91078bb135 100644
--- a/code/modules/mining/equipment/kinetic_crusher.dm
+++ b/code/modules/mining/equipment/kinetic_crusher.dm
@@ -184,6 +184,7 @@
icon_state = "crusher-glaive"
item_state = "crusher0-glaive"
block_parry_data = /datum/block_parry_data/crusherglaive
+ obj_flags = UNIQUE_RENAME
//ideas: altclick that lets you pummel people with the handguard/handle?
//parrying functionality?
@@ -238,6 +239,36 @@
/obj/item/kinetic_crusher/glaive/bone/update_icon_state()
item_state = "crusher[wielded]-bone"
+/obj/item/kinetic_crusher/glaive/gauntlets
+ name = "proto-kinetic gauntlets"
+ desc = "A pair of scaled-down proto-kinetic crusher destabilizer modules shoved into gauntlets and greaves, often used by \
+ those who wish to spit in the eyes of God. Sacrifices outright damage for \
+ a reliance on backstabs and the ability to give fauna concussions on a parry."
+ attack_verb = list("pummeled", "punched", "jabbed", "hammer-fisted", "uppercut", "slammed")
+ icon_state = "crusher-hands"
+ item_state = "crusher0-fist"
+ unique_reskin = list("Gauntlets" = "crusher-hands",
+ "Fingerless" = "crusher-hands-bare")
+ detonation_damage = 45 // 60 on wield, compared to normal crusher's 70
+ backstab_bonus = 70 // 130 on backstab though
+
+/obj/item/kinetic_crusher/glaive/gauntlets/ComponentInitialize()
+ . = ..()
+ AddComponent(/datum/component/two_handed, force_unwielded=0, force_wielded=15)
+
+/obj/item/kinetic_crusher/glaive/gauntlets/active_parry_reflex_counter(mob/living/owner, atom/object, damage, attack_text, attack_type, armour_penetration, mob/attacker, def_zone, list/return_list, parry_efficiency, list/effect_text)
+ . = ..()
+ if(isliving(attacker))
+ var/mob/living/liv_atk = attacker
+ if(liv_atk.mob_size >= MOB_SIZE_LARGE && !ismegafauna(liv_atk))
+ liv_atk.apply_status_effect(STATUS_EFFECT_GAUNTLET_CONC)
+
+/obj/item/kinetic_crusher/glaive/gauntlets/update_icon_state()
+ if(current_skin == "Fingerless")
+ item_state = "crusher[wielded]-fistbare"
+ else
+ item_state = "crusher[wielded]-fist"
+
//destablizing force
/obj/item/projectile/destabilizer
name = "destabilizing force"
diff --git a/code/modules/mining/machine_vending.dm b/code/modules/mining/machine_vending.dm
index 7a3cd9140b..b1bde7d454 100644
--- a/code/modules/mining/machine_vending.dm
+++ b/code/modules/mining/machine_vending.dm
@@ -74,7 +74,7 @@
new /datum/data/mining_equipment("KA AoE Damage", /obj/item/borg/upgrade/modkit/aoe/mobs, 2000),
new /datum/data/mining_equipment("Miner Full Replacement", /obj/item/storage/backpack/duffelbag/mining/cloned, 3000),
new /datum/data/mining_equipment("Premium Accelerator", /obj/item/gun/energy/kinetic_accelerator/premiumka, 8000),
- new /datum/data/mining_equipment("Kinetic Glaive Kit", /obj/item/storage/backpack/duffelbag/mining/glaivekit, 2250),
+ new /datum/data/mining_equipment("Premium Kinetic Melee Kit", /obj/item/storage/backpack/duffelbag/mining/glaivekit, 2250),
new /datum/data/mining_equipment("Survival Dagger", /obj/item/kitchen/knife/combat/survival/knuckledagger, 550),
)
@@ -166,6 +166,7 @@
return
I.mining_points -= prize.cost
to_chat(usr, "[src] clanks to life briefly before vending [prize.equipment_name]!")
+ playsound(src, 'sound/machines/machine_vend.ogg', 50, TRUE, extrarange = -3)
new prize.equipment_path(loc)
SSblackbox.record_feedback("nested tally", "mining_equipment_bought", 1, list("[type]", "[prize.equipment_path]"))
. = TRUE
@@ -187,6 +188,9 @@
if(istype(I, /obj/item/suit_voucher))
RedeemSVoucher(I, user)
return
+ if(istype(I, /obj/item/premium_crusher_voucher))
+ RedeemPCVoucher(I, user)
+ return
if(default_deconstruction_screwdriver(user, "mining-open", "mining", I))
updateUsrDialog()
return
@@ -226,10 +230,46 @@
new /obj/item/kinetic_crusher(drop_location)
if("Mining Conscription Kit")
new /obj/item/storage/backpack/duffelbag/mining/conscript(drop_location)
-
+ playsound(src, 'sound/machines/machine_vend.ogg', 50, TRUE, extrarange = -3)
SSblackbox.record_feedback("tally", "mining_voucher_redeemed", 1, selection)
qdel(voucher)
+/obj/machinery/mineral/equipment_vendor/proc/RedeemSVoucher(obj/item/suit_voucher/voucher, mob/redeemer)
+ var/items = list( "Exo-suit" = image(icon = 'icons/obj/clothing/suits.dmi', icon_state = "exo"),
+ "SEVA suit" = image(icon = 'icons/obj/clothing/suits.dmi', icon_state = "seva"))
+
+ var/selection = show_radial_menu(redeemer, src, items, require_near = TRUE, tooltips = TRUE)
+ if(!selection || !Adjacent(redeemer) || QDELETED(voucher) || voucher.loc != redeemer)
+ return
+ var/drop_location = drop_location()
+ switch(selection)
+ if("Exo-suit")
+ new /obj/item/clothing/suit/hooded/explorer/exo(drop_location)
+ new /obj/item/clothing/mask/gas/exo(drop_location)
+ if("SEVA suit")
+ new /obj/item/clothing/suit/hooded/explorer/seva(drop_location)
+ new /obj/item/clothing/mask/gas/seva(drop_location)
+ playsound(src, 'sound/machines/machine_vend.ogg', 50, TRUE, extrarange = -3)
+ SSblackbox.record_feedback("tally", "suit_voucher_redeemed", 1, selection)
+ qdel(voucher)
+
+/obj/machinery/mineral/equipment_vendor/proc/RedeemPCVoucher(obj/item/premium_crusher_voucher/voucher, mob/redeemer) // someone should REALLY just refactor this
+ var/items = list("Kinetic Glaive" = image(icon = 'icons/obj/mining.dmi', icon_state = "crusher-glaive"),
+ "Kinetic Gauntlets" = image(icon = 'icons/obj/mining.dmi', icon_state = "crusher-hands"))
+
+ var/selection = show_radial_menu(redeemer, src, items, require_near = TRUE, tooltips = TRUE)
+ if(!selection || !Adjacent(redeemer) || QDELETED(voucher) || voucher.loc != redeemer)
+ return
+ var/drop_location = drop_location()
+ switch(selection)
+ if("Kinetic Glaive")
+ new /obj/item/kinetic_crusher/glaive(drop_location)
+ if("Kinetic Gauntlets")
+ new /obj/item/kinetic_crusher/glaive/gauntlets(drop_location)
+ playsound(src, 'sound/machines/machine_vend.ogg', 50, TRUE, extrarange = -3)
+ SSblackbox.record_feedback("tally", "crusher_voucher_redeemed", 1, selection)
+ qdel(voucher)
+
/obj/machinery/mineral/equipment_vendor/ex_act(severity, target)
do_sparks(5, TRUE, src)
if(prob(50 / severity) && severity < 3)
@@ -245,7 +285,7 @@
. = ..()
desc += "\nIt seems a few selections have been added."
prize_list += list(
- new /datum/data/mining_equipment("Extra Id", /obj/item/card/id/mining, 250),
+ new /datum/data/mining_equipment("Extra ID", /obj/item/card/id/mining, 250),
new /datum/data/mining_equipment("Science Goggles", /obj/item/clothing/glasses/science, 250),
new /datum/data/mining_equipment("Monkey Cube", /obj/item/reagent_containers/food/snacks/cube/monkey, 300),
new /datum/data/mining_equipment("Toolbelt", /obj/item/storage/belt/utility, 350),
@@ -273,6 +313,13 @@
icon_state = "mining_voucher"
w_class = WEIGHT_CLASS_TINY
+/obj/item/premium_crusher_voucher
+ name = "premium crusher voucher"
+ desc = "A token to redeem for a premium proto-kinetic melee weapon. Use it on a mining equipment vendor."
+ icon = 'icons/obj/mining.dmi'
+ icon_state = "mining_voucher"
+ w_class = WEIGHT_CLASS_TINY
+
/**********************Mining Point Card**********************/
//mp = Miner Pointers
//c = Cash
@@ -375,24 +422,5 @@
/obj/item/storage/backpack/duffelbag/mining/glaivekit
/obj/item/storage/backpack/duffelbag/mining/glaivekit/PopulateContents()
- new /obj/item/kinetic_crusher/glaive(src)
new /obj/item/kitchen/knife/combat/survival/knuckledagger(src)
-
-/obj/machinery/mineral/equipment_vendor/proc/RedeemSVoucher(obj/item/suit_voucher/voucher, mob/redeemer)
- var/items = list( "Exo-suit" = image(icon = 'icons/obj/clothing/suits.dmi', icon_state = "exo"),
- "SEVA suit" = image(icon = 'icons/obj/clothing/suits.dmi', icon_state = "seva"))
-
- var/selection = show_radial_menu(redeemer, src, items, require_near = TRUE, tooltips = TRUE)
- if(!selection || !Adjacent(redeemer) || QDELETED(voucher) || voucher.loc != redeemer)
- return
- var/drop_location = drop_location()
- switch(selection)
- if("Exo-suit")
- new /obj/item/clothing/suit/hooded/explorer/exo(drop_location)
- new /obj/item/clothing/mask/gas/exo(drop_location)
- if("SEVA suit")
- new /obj/item/clothing/suit/hooded/explorer/seva(drop_location)
- new /obj/item/clothing/mask/gas/seva(drop_location)
-
- SSblackbox.record_feedback("tally", "suit_voucher_redeemed", 1, selection)
- qdel(voucher)
+ new /obj/item/premium_crusher_voucher(src)
diff --git a/code/modules/movespeed/modifiers/mobs.dm b/code/modules/movespeed/modifiers/mobs.dm
index 153d7dd973..ddeef393ac 100644
--- a/code/modules/movespeed/modifiers/mobs.dm
+++ b/code/modules/movespeed/modifiers/mobs.dm
@@ -167,3 +167,6 @@
/datum/movespeed_modifier/dragon_depression
multiplicative_slowdown = 5
+
+/datum/movespeed_modifier/gauntlet_concussion
+ multiplicative_slowdown = 5
diff --git a/icons/mob/inhands/weapons/hammers_lefthand.dmi b/icons/mob/inhands/weapons/hammers_lefthand.dmi
index 988d64fde3..cb3ecd4e99 100644
Binary files a/icons/mob/inhands/weapons/hammers_lefthand.dmi and b/icons/mob/inhands/weapons/hammers_lefthand.dmi differ
diff --git a/icons/mob/inhands/weapons/hammers_righthand.dmi b/icons/mob/inhands/weapons/hammers_righthand.dmi
index 1e0e7c91bf..f3d9ca52b7 100644
Binary files a/icons/mob/inhands/weapons/hammers_righthand.dmi and b/icons/mob/inhands/weapons/hammers_righthand.dmi differ
diff --git a/icons/obj/mining.dmi b/icons/obj/mining.dmi
index f70f110078..e03f6e9b97 100644
Binary files a/icons/obj/mining.dmi and b/icons/obj/mining.dmi differ