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