From 28391cad07d3febdd55f15c57e7609d8b853ade4 Mon Sep 17 00:00:00 2001 From: Geeves Date: Sat, 21 Mar 2020 13:46:25 +0200 Subject: [PATCH] Plasma Cutter Things (#8445) Plasma cutters can now have their power cells removed with screwdrivers, and replaced by using the power cells on them. Plasma cutters now do 20 damage, up from 15. More things can now be disassembled with the plasma cutter. Non-reinforced walls, non-reinforced tables, grills, machine frames. --- code/game/machinery/constructable_frame.dm | 13 ++++- code/game/objects/structures/grille.dm | 10 +++- code/game/turfs/simulated/wall_attacks.dm | 8 +++ .../modules/projectiles/guns/energy/mining.dm | 51 +++++++++++++++---- code/modules/tables/tables.dm | 4 +- html/changelogs/geeves-plasma_cutter.yml | 8 +++ 6 files changed, 79 insertions(+), 15 deletions(-) create mode 100644 html/changelogs/geeves-plasma_cutter.yml diff --git a/code/game/machinery/constructable_frame.dm b/code/game/machinery/constructable_frame.dm index 12bb909eeb5..d445f0bee66 100644 --- a/code/game/machinery/constructable_frame.dm +++ b/code/game/machinery/constructable_frame.dm @@ -40,7 +40,7 @@ playsound(src.loc, 'sound/items/poster_being_created.ogg', 75, 1) state = 2 else - if(P.iswirecutter()) + if(P.iswirecutter() || istype(P, /obj/item/gun/energy/plasmacutter)) playsound(src.loc, 'sound/items/poster_ripped.ogg', 75, 1) to_chat(user, span("notice", "You decide to scrap the blueprint.")) new /obj/item/stack/material/steel(src.loc, 2) @@ -61,9 +61,18 @@ else if(P.iswrench()) playsound(src.loc, P.usesound, 75, 1) - to_chat(user, "You dismantle the blueprint") + to_chat(user, SPAN_NOTICE("You dismantle the blueprint.")) new /obj/item/stack/material/steel(src.loc, 2) qdel(src) + else if(istype(P, /obj/item/gun/energy/plasmacutter)) + var/obj/item/gun/energy/plasmacutter/PC = P + if(!PC.power_supply) + to_chat(user, SPAN_WARNING("\The [src] doesn't have a power supply installed!")) + return + playsound(get_turf(src), PC.fire_sound, 75, TRUE) + to_chat(user, SPAN_NOTICE("You dismantle the blueprint.")) + new /obj/item/stack/material/steel(get_turf(src), 2) + qdel(src) if(3) if(istype(P, /obj/item/circuitboard)) var/obj/item/circuitboard/B = P diff --git a/code/game/objects/structures/grille.dm b/code/game/objects/structures/grille.dm index 369c2b1ca71..d38014db583 100644 --- a/code/game/objects/structures/grille.dm +++ b/code/game/objects/structures/grille.dm @@ -92,12 +92,20 @@ src.health -= damage*0.2 spawn(0) healthcheck() //spawn to make sure we return properly if the grille is deleted -/obj/structure/grille/attackby(obj/item/W as obj, mob/user as mob) +/obj/structure/grille/attackby(obj/item/W, mob/user) if(W.iswirecutter()) if(!shock(user, 100)) playsound(loc, 'sound/items/Wirecutter.ogg', 100, 1) new /obj/item/stack/rods(get_turf(src), destroyed ? 1 : 2) qdel(src) + else if(istype(W, /obj/item/gun/energy/plasmacutter)) + var/obj/item/gun/energy/plasmacutter/PC = W + if(!PC.power_supply) + to_chat(user, SPAN_WARNING("\The [src] doesn't have a power supply installed!")) + return + playsound(get_turf(src), PC.fire_sound, 100, TRUE) + new /obj/item/stack/rods(get_turf(src), destroyed ? 1 : 2) + qdel(src) else if((W.isscrewdriver()) && (istype(loc, /turf/simulated) || anchored)) if(!shock(user, 90)) playsound(loc, 'sound/items/Screwdriver.ogg', 100, 1) diff --git a/code/game/turfs/simulated/wall_attacks.dm b/code/game/turfs/simulated/wall_attacks.dm index 5923d7a5f06..f57ae480695 100644 --- a/code/game/turfs/simulated/wall_attacks.dm +++ b/code/game/turfs/simulated/wall_attacks.dm @@ -190,6 +190,14 @@ dismantle_verb = "cutting" dismantle_sound = 'sound/items/Welder.ogg' cut_delay *= 0.7 + else if(istype(W, /obj/item/gun/energy/plasmacutter)) + var/obj/item/gun/energy/plasmacutter/PC = W + if(!PC.power_supply) + to_chat(user, SPAN_WARNING("\The [src] doesn't have a power supply installed!")) + return + dismantle_sound = "zapping and melting" + dismantle_verb = "slicing" + cut_delay *= 0.8 else if(istype(W,/obj/item/melee/energy)) var/obj/item/melee/energy/WT = W if(WT.active) diff --git a/code/modules/projectiles/guns/energy/mining.dm b/code/modules/projectiles/guns/energy/mining.dm index a66a8c9e21d..6ab4839e855 100644 --- a/code/modules/projectiles/guns/energy/mining.dm +++ b/code/modules/projectiles/guns/energy/mining.dm @@ -3,32 +3,63 @@ /obj/item/gun/energy/plasmacutter name = "plasma cutter" desc = "A mining tool capable of expelling concentrated plasma bursts. You could use it to cut limbs off of xenos! Or, you know, mine stuff." - charge_meter = 0 + charge_meter = FALSE icon = 'icons/obj/mining_contained.dmi' icon_state = "plasma" item_state = "plasma" fire_sound = 'sound/weapons/plasma_cutter.ogg' slot_flags = SLOT_BELT|SLOT_BACK - w_class = 3 accuracy = 1 force = 15 - sharp = 1 - edge = 1 + sharp = TRUE + edge = TRUE origin_tech = list(TECH_MATERIAL = 4, TECH_PHORON = 3, TECH_ENGINEERING = 3) - matter = list(DEFAULT_WALL_MATERIAL = 4000) + matter = list(DEFAULT_WALL_MATERIAL = 4000, MATERIAL_GLASS = 2000) projectile_type = /obj/item/projectile/beam/plasmacutter - max_shots = 15 + cell_type = /obj/item/cell/high + charge_cost = 666.66 // 15 shots on a high cap cell needspin = FALSE +/obj/item/gun/energy/plasmacutter/examine(mob/user) + ..() + if(user.Adjacent(src)) + if(power_supply) + to_chat(user, FONT_SMALL(SPAN_NOTICE("It has a [capitalize_first_letters(power_supply.name)] installed as its power supply."))) + else + to_chat(user, FONT_SMALL(SPAN_WARNING("It has no power supply installed."))) + +/obj/item/gun/energy/plasmacutter/attackby(obj/item/I, mob/user) + if(I.isscrewdriver()) + if(power_supply) + to_chat(user, SPAN_NOTICE("You uninstall \the [power_supply].")) + power_supply.forceMove(get_turf(src)) + if(ishuman(user)) + var/mob/living/carbon/human/H = user + H.put_in_hands(power_supply) + power_supply = null + else + to_chat(user, SPAN_WARNING("\The [src] doesn't have a power supply!")) + else if(istype(I, /obj/item/cell)) + if(power_supply) + to_chat(user, SPAN_WARNING("\The [src] already has a power supply installed!")) + else + to_chat(user, SPAN_NOTICE("You install \the [I] into \the [src].")) + user.drop_from_inventory(I, src) + power_supply = I + else + ..() + /obj/item/gun/energy/plasmacutter/mounted name = "mounted plasma cutter" - self_recharge = 1 - use_external_power = 1 + self_recharge = TRUE + use_external_power = TRUE + cell_type = null + max_shots = 15 /obj/item/projectile/beam/plasmacutter name = "plasma arc" icon_state = "omnilaser" - damage = 15 + damage = 20 damage_type = BURN check_armour = "laser" range = 5 @@ -37,7 +68,7 @@ muzzle_type = /obj/effect/projectile/muzzle/plasma_cutter tracer_type = /obj/effect/projectile/tracer/plasma_cutter impact_type = /obj/effect/projectile/impact/plasma_cutter - maiming = 1 + maiming = TRUE maim_rate = 1 /obj/item/projectile/beam/plasmacutter/on_impact(var/atom/A) diff --git a/code/modules/tables/tables.dm b/code/modules/tables/tables.dm index e7efbc82a7f..164e628b3f2 100644 --- a/code/modules/tables/tables.dm +++ b/code/modules/tables/tables.dm @@ -129,7 +129,7 @@ else to_chat(user, "You don't have enough carpet!") - if(!reinforced && !carpeted && material && W.iswrench()) + if(!reinforced && !carpeted && material && (W.iswrench() || istype(W, /obj/item/gun/energy/plasmacutter))) remove_material(W, user) if(!material) update_connections(1) @@ -140,7 +140,7 @@ update_material() return 1 - if(!carpeted && !reinforced && !material && W.iswrench()) + if(!carpeted && !reinforced && !material && (W.iswrench() || istype(W, /obj/item/gun/energy/plasmacutter))) dismantle(W, user) return 1 diff --git a/html/changelogs/geeves-plasma_cutter.yml b/html/changelogs/geeves-plasma_cutter.yml new file mode 100644 index 00000000000..d43e22937fa --- /dev/null +++ b/html/changelogs/geeves-plasma_cutter.yml @@ -0,0 +1,8 @@ +author: Geeves + +delete-after: True + +changes: + - tweak: "Plasma cutters can now have their power cells removed with screwdrivers, and replaced by using the power cells on them." + - tweak: "Plasma cutters now do 20 damage, up from 15." + - rscadd: "More things can now be disassembled with the plasma cutter. Non-reinforced walls, non-reinforced tables, grills, machine frames." \ No newline at end of file