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