diff --git a/code/game/objects/items/weapons/twohanded.dm b/code/game/objects/items/weapons/twohanded.dm index 115b3be662f..9b63673316d 100644 --- a/code/game/objects/items/weapons/twohanded.dm +++ b/code/game/objects/items/weapons/twohanded.dm @@ -7,8 +7,9 @@ * Kidan spear * Chainsaw * Singularity hammer - * Mjolnnir + * Mjolnnir * Knighthammer + * Pyro Claws */ /*################################################################## @@ -826,3 +827,124 @@ Z.ex_act(2) charged = 3 playsound(user, 'sound/weapons/marauder.ogg', 50, 1) + +// PYRO CLAWS +/obj/item/twohanded/required/pyro_claws + name = "hardplasma energy claws" + desc = "The power of the sun, in the claws of your hand." + icon_state = "pyro_claws" + flags = ABSTRACT | NODROP | DROPDEL + force = 22 + force_wielded = 22 + damtype = BURN + armour_penetration_percentage = 50 + block_chance = 50 + sharp = TRUE + attack_effect_override = ATTACK_EFFECT_CLAW + hitsound = 'sound/weapons/bladeslice.ogg' + attack_verb = list("slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut", "savaged", "clawed") + sprite_sheets_inhand = list("Vox" = 'icons/mob/clothing/species/vox/held.dmi', "Drask" = 'icons/mob/clothing/species/drask/held.dmi') + toolspeed = 0.5 + var/lifetime = 60 SECONDS + +/obj/item/twohanded/required/pyro_claws/Initialize(mapload) + . = ..() + START_PROCESSING(SSobj, src) + +/obj/item/twohanded/required/pyro_claws/Destroy() + STOP_PROCESSING(SSobj, src) + return ..() + +/obj/item/twohanded/required/pyro_claws/process() + lifetime -= 2 SECONDS + if(lifetime <= 0) + visible_message("[src] slides back into the depths of [loc]'s wrists.") + do_sparks(rand(1,6), 1, loc) + qdel(src) + return + if(prob(15)) + do_sparks(rand(1,6), 1, loc) + +/obj/item/twohanded/required/pyro_claws/afterattack(atom/target, mob/user, proximity) + if(!proximity) + return + if(prob(60)) + do_sparks(rand(1,6), 1, loc) + if(istype(target, /obj/machinery/door/airlock)) + var/obj/machinery/door/airlock/A = target + + if(!A.requiresID() || A.allowed(user)) + return + + if(A.locked) + to_chat(user, "The airlock's bolts prevent it from being forced.") + return + + if(A.arePowerSystemsOn()) + user.visible_message("[user] jams [user.p_their()] [name] into the airlock and starts prying it open!", "You start forcing the airlock open.", "You hear a metal screeching sound.") + playsound(A, 'sound/machines/airlock_alien_prying.ogg', 150, 1) + if(!do_after(user, 25, target = A)) + return + + user.visible_message("[user] forces the airlock open with [user.p_their()] [name]!", "You force open the airlock.", "You hear a metal screeching sound.") + A.open(2) + +/obj/item/clothing/gloves/color/black/pyro_claws + name = "Fusion gauntlets" + desc = "Cybersun Industries developed these gloves after a grifter fought one of their soldiers, who attached a pyro core to an energy sword, and found it mostly effective." + item_state = "pyro" + item_color = "pyro" // I will kill washing machines one day + icon_state = "pyro" + can_be_cut = FALSE + actions_types = list(/datum/action/item_action/toggle) + var/on_cooldown = FALSE + var/obj/item/assembly/signaler/anomaly/pyro/core + +/obj/item/clothing/gloves/color/black/pyro_claws/Destroy() + QDEL_NULL(core) + return ..() + +/obj/item/clothing/gloves/color/black/pyro_claws/examine(mob/user) + . = ..() + if(core) + . += "[src] are fully operational!" + else + . += "It is missing a pyroclastic anomaly core." + +/obj/item/clothing/gloves/color/black/pyro_claws/ui_action_click(mob/user) + if(!core) + to_chat(user, "[src] has no core to power it!") + return + if(on_cooldown) + to_chat(user, "[src] is on cooldown!") + do_sparks(rand(1,6), 1, loc) + return + if(!user.drop_l_hand() || !user.drop_r_hand()) + to_chat(user, "[src] are unable to deploy the blades with the items in your hands!") + return + var/obj/item/W = new /obj/item/twohanded/required/pyro_claws + user.visible_message("[user] deploys [W] from [user.p_their()] wrists in a shower of sparks!", "You deploy [W] from your wrists!", "You hear the shower of sparks!") + user.put_in_hands(W) + on_cooldown = TRUE + flags |= NODROP + addtimer(CALLBACK(src, .proc/reboot), 2 MINUTES) + do_sparks(rand(1,6), 1, loc) + +/obj/item/clothing/gloves/color/black/pyro_claws/attackby(obj/item/I, mob/user, params) + if(istype(I, /obj/item/assembly/signaler/anomaly/pyro)) + if(core) + to_chat(user, "[src] already has a [I]!") + return + if(!user.drop_item()) + to_chat(user, "[I] is stuck to your hand!") + return + to_chat(user, "You insert [I] into [src], and [src] starts to warm up.") + I.forceMove(src) + core = I + else + return ..() + +/obj/item/clothing/gloves/color/black/pyro_claws/proc/reboot() + on_cooldown = FALSE + flags &= ~NODROP + atom_say("Internal plasma canisters recharged. Gloves sufficiently cooled") diff --git a/code/game/objects/structures/false_walls.dm b/code/game/objects/structures/false_walls.dm index 091e8cfdd6b..df44e0164ce 100644 --- a/code/game/objects/structures/false_walls.dm +++ b/code/game/objects/structures/false_walls.dm @@ -127,7 +127,7 @@ else to_chat(user, "You can't reach, close it first!") - if(istype(W, /obj/item/gun/energy/plasmacutter) || istype(W, /obj/item/pickaxe/drill/diamonddrill) || istype(W, /obj/item/pickaxe/drill/jackhammer) || istype(W, /obj/item/melee/energy/blade)) + if(istype(W, /obj/item/gun/energy/plasmacutter) || istype(W, /obj/item/pickaxe/drill/diamonddrill) || istype(W, /obj/item/pickaxe/drill/jackhammer) || istype(W, /obj/item/melee/energy/blade) || istype(W, /obj/item/twohanded/required/pyro_claws)) dismantle(user, TRUE) /obj/structure/falsewall/welder_act(mob/user, obj/item/I) diff --git a/code/game/objects/structures/girders.dm b/code/game/objects/structures/girders.dm index b2b4efb1d8e..4e3ee42f466 100644 --- a/code/game/objects/structures/girders.dm +++ b/code/game/objects/structures/girders.dm @@ -66,6 +66,12 @@ refundMetal(metalUsed) qdel(src) + else if(istype(W, /obj/item/twohanded/required/pyro_claws)) + playsound(loc, W.usesound, 100, 1) + to_chat(user, "You melt the girder!") + refundMetal(metalUsed) + qdel(src) + else if(istype(W, /obj/item/stack)) if(iswallturf(loc)) to_chat(user, "There is already a wall present!") diff --git a/code/game/turfs/simulated/walls.dm b/code/game/turfs/simulated/walls.dm index 2289bb13348..f7ccaa652ac 100644 --- a/code/game/turfs/simulated/walls.dm +++ b/code/game/turfs/simulated/walls.dm @@ -435,6 +435,14 @@ visible_message("[user] disintegrates [src]!","You hear the grinding of metal.") return TRUE + else if(istype(I, /obj/item/twohanded/required/pyro_claws)) + to_chat(user, "You begin to melt the wall.") + + if(do_after(user, isdiamond ? 60 * I.toolspeed : 30 * I.toolspeed, target = src)) // claws has 0.5 toolspeed, so 3/1.5 seconds + to_chat(user, "Your [I.name] melts the reinforced plating.") + dismantle_wall() + visible_message("[user] melts [src]!","You hear the hissing of steam.") + return TRUE return FALSE /turf/simulated/wall/proc/try_wallmount(obj/item/I, mob/user, params) diff --git a/code/game/turfs/simulated/walls_reinforced.dm b/code/game/turfs/simulated/walls_reinforced.dm index 6f59080ef50..6a8293f2d72 100644 --- a/code/game/turfs/simulated/walls_reinforced.dm +++ b/code/game/turfs/simulated/walls_reinforced.dm @@ -204,6 +204,12 @@ dismantle_wall() return TRUE + if(istype(I, /obj/item/twohanded/required/pyro_claws)) + to_chat(user, "You begin to melt the wall...") + if(do_after(user, 50 * I.toolspeed, target = src)) // claws has 0.5 toolspeed, so 2.5 seconds + to_chat(user, "Your [I] melt the reinforced plating.") + dismantle_wall() + return TRUE /turf/simulated/wall/r_wall/wall_singularity_pull(current_size) if(current_size >= STAGE_FIVE) diff --git a/code/modules/research/designs/weapon_designs.dm b/code/modules/research/designs/weapon_designs.dm index 12fc8c7884f..9678aff9b22 100644 --- a/code/modules/research/designs/weapon_designs.dm +++ b/code/modules/research/designs/weapon_designs.dm @@ -260,3 +260,13 @@ materials = list(MAT_METAL = 8000, MAT_GLASS = 5000, MAT_SILVER = 500, MAT_TITANIUM = 500, MAT_PLASMA = 500) build_path = /obj/item/grenade/barrier/dropwall category = list("Weapons") + +/datum/design/pyroclaw + name = "Fusion gauntlets" + desc = "A pair of gloves designed to make superheated claws capable of cutting through almost anything. Needs a pyro anomaly core" + id = "pyro_gloves" + req_tech = list("combat" = 7, "materials" = 7, "engineering" = 7, "plasmatech" = 7) + build_type = PROTOLATHE + materials = list(MAT_METAL = 10000, MAT_GLASS = 5000, MAT_SILVER = 4000, MAT_TITANIUM = 4000, MAT_PLASMA = 8000) + build_path = /obj/item/clothing/gloves/color/black/pyro_claws + category = list("Weapons") diff --git a/icons/mob/clothing/hands.dmi b/icons/mob/clothing/hands.dmi index 77c10e0b01b..6744596fc77 100644 Binary files a/icons/mob/clothing/hands.dmi and b/icons/mob/clothing/hands.dmi differ diff --git a/icons/mob/inhands/items_lefthand.dmi b/icons/mob/inhands/items_lefthand.dmi index 621b769c085..ce51ee78bbf 100644 Binary files a/icons/mob/inhands/items_lefthand.dmi and b/icons/mob/inhands/items_lefthand.dmi differ diff --git a/icons/mob/inhands/items_righthand.dmi b/icons/mob/inhands/items_righthand.dmi index a8c554abec2..f4205728600 100644 Binary files a/icons/mob/inhands/items_righthand.dmi and b/icons/mob/inhands/items_righthand.dmi differ diff --git a/icons/obj/clothing/gloves.dmi b/icons/obj/clothing/gloves.dmi index cfba0fe56af..108050d275d 100644 Binary files a/icons/obj/clothing/gloves.dmi and b/icons/obj/clothing/gloves.dmi differ diff --git a/icons/obj/items.dmi b/icons/obj/items.dmi index fc56c446995..96879336814 100644 Binary files a/icons/obj/items.dmi and b/icons/obj/items.dmi differ