diff --git a/code/ATMOSPHERICS/components/unary/vent_pump.dm b/code/ATMOSPHERICS/components/unary/vent_pump.dm
index 3388cfd9667..2b151f04136 100644
--- a/code/ATMOSPHERICS/components/unary/vent_pump.dm
+++ b/code/ATMOSPHERICS/components/unary/vent_pump.dm
@@ -252,11 +252,12 @@
return
attackby(obj/item/W, mob/user)
- if(istype(W, /obj/item/weapon/weldingtool) && W:welding)
- if (W:remove_fuel(0,user))
- W:welding = 2
+ if(istype(W, /obj/item/weapon/weldingtool))
+ var/obj/item/weapon/weldingtool/WT = W
+ if (WT.remove_fuel(0,user))
user << "\blue Now welding the vent."
if(do_after(user, 20))
+ if(!src || !WT.isOn()) return
playsound(src.loc, 'Welder2.ogg', 50, 1)
if(!welded)
user.visible_message("[user] welds the vent shut.", "You weld the vent shut.", "You hear welding.")
@@ -266,7 +267,8 @@
user.visible_message("[user] unwelds the vent.", "You unweld the vent.", "You hear welding.")
welded = 0
update_icon()
- W:welding = 1
+ else
+ user << "\blue The welding tool needs to be on to start this task."
else
user << "\blue You need more welding fuel to complete this task."
return 1
diff --git a/code/defines/turf.dm b/code/defines/turf.dm
index 946e06bb257..7e8eca55adf 100644
--- a/code/defines/turf.dm
+++ b/code/defines/turf.dm
@@ -316,7 +316,8 @@
attackby(obj/item/weapon/W as obj, mob/user as mob)
if(istype(W,/obj/item/weapon/weldingtool))
- if(W:welding)
+ var/obj/item/weapon/weldingtool/WT = W
+ if(WT.remove_fuel(0, user))
return TemperatureAct(100)
..()
diff --git a/code/game/gamemodes/events/spacevines.dm b/code/game/gamemodes/events/spacevines.dm
index b6839944e0f..8eae7a0cd5d 100644
--- a/code/game/gamemodes/events/spacevines.dm
+++ b/code/game/gamemodes/events/spacevines.dm
@@ -38,7 +38,8 @@
else //weapons with subtypes
if(istype(W, /obj/item/weapon/melee/energy/sword)) del src
else if(istype(W, /obj/item/weapon/weldingtool))
- if(W:welding) del src
+ var/obj/item/weapon/weldingtool/WT = W
+ if(WT.remove_fuel(0, user)) del src
//TODO: add plant-b-gone
..()
diff --git a/code/game/machinery/bots/ed209bot.dm b/code/game/machinery/bots/ed209bot.dm
index 24550199c62..2c436eda99e 100644
--- a/code/game/machinery/bots/ed209bot.dm
+++ b/code/game/machinery/bots/ed209bot.dm
@@ -813,8 +813,9 @@ Auto Patrol: []"},
src.item_state = "ed209_shell"
src.icon_state = "ed209_shell"
del(W)
- else if((istype(W, /obj/item/weapon/weldingtool) && W:welding) && (src.build_step == 3))
- if (W:remove_fuel(0,user))
+ else if((istype(W, /obj/item/weapon/weldingtool)) && (src.build_step == 3))
+ var/obj/item/weapon/weldingtool/WT = W
+ if (WT.remove_fuel(0,user))
src.build_step++
src.name = "shielded frame assembly"
user << "You welded the vest to [src]!"
diff --git a/code/game/machinery/bots/secbot.dm b/code/game/machinery/bots/secbot.dm
index a5617d2d5e2..f4de191c570 100644
--- a/code/game/machinery/bots/secbot.dm
+++ b/code/game/machinery/bots/secbot.dm
@@ -730,8 +730,9 @@ Auto Patrol: []"},
/obj/item/weapon/secbot_assembly/attackby(obj/item/weapon/W as obj, mob/user as mob)
..()
- if((istype(W, /obj/item/weapon/weldingtool) && W:welding) && (!src.build_step))
- if(W:remove_fuel(0,user))
+ if((istype(W, /obj/item/weapon/weldingtool)) && (!src.build_step))
+ var/obj/item/weapon/weldingtool/WT = W
+ if(WT.remove_fuel(0,user))
src.build_step++
src.overlays += image('aibots.dmi', "hs_hole")
user << "You weld a hole in [src]!"
diff --git a/code/game/machinery/computer/ai_core.dm b/code/game/machinery/computer/ai_core.dm
index 0d58f013629..ca026ce2e4b 100644
--- a/code/game/machinery/computer/ai_core.dm
+++ b/code/game/machinery/computer/ai_core.dm
@@ -20,13 +20,16 @@
anchored = 1
state = 1
if(istype(P, /obj/item/weapon/weldingtool))
+ var/obj/item/weapon/weldingtool/WT = P
+ if(!WT.isOn())
+ user << "The welder must be on for this task."
+ return
playsound(loc, 'Welder.ogg', 50, 1)
- P:welding = 2
if(do_after(user, 20))
+ if(!src || !WT.remove_fuel(0, user)) return
user << "\blue You deconstruct the frame."
new /obj/item/stack/sheet/plasteel( loc, 4)
del(src)
- P:welding = 1
if(1)
if(istype(P, /obj/item/weapon/wrench))
playsound(loc, 'Ratchet.ogg', 50, 1)
diff --git a/code/game/machinery/computer/buildandrepair.dm b/code/game/machinery/computer/buildandrepair.dm
index df0ea43e15d..066178956d5 100644
--- a/code/game/machinery/computer/buildandrepair.dm
+++ b/code/game/machinery/computer/buildandrepair.dm
@@ -233,13 +233,16 @@
src.anchored = 1
src.state = 1
if(istype(P, /obj/item/weapon/weldingtool))
- P:welding = 2
+ var/obj/item/weapon/weldingtool/WT = P
+ if(!WT.remove_fuel(0, user))
+ user << "The welding tool must be on to complete this task."
+ return
playsound(src.loc, 'Welder.ogg', 50, 1)
if(do_after(user, 20))
+ if(!src || !WT.isOn()) return
user << "\blue You deconstruct the frame."
new /obj/item/stack/sheet/metal( src.loc, 5 )
del(src)
- P:welding = 1
if(1)
if(istype(P, /obj/item/weapon/wrench))
playsound(src.loc, 'Ratchet.ogg', 50, 1)
diff --git a/code/game/machinery/portable_turret.dm b/code/game/machinery/portable_turret.dm
index c8da66c6635..977a179f346 100644
--- a/code/game/machinery/portable_turret.dm
+++ b/code/game/machinery/portable_turret.dm
@@ -639,13 +639,19 @@ Neutralize All Unidentified Life Signs: []
"},
return
else if(istype(W, /obj/item/weapon/weldingtool))
- if (W:remove_fuel(5,user)) // uses up 5 fuel.
- playsound(src.loc, pick('Welder.ogg', 'Welder2.ogg'), 50, 1)
- if(do_after(user, 20))
- build_step = 1
- user << "You remove the turret's interior metal armor."
- new /obj/item/stack/sheet/metal( loc, 2)
- return
+ var/obj/item/weapon/weldingtool/WT = W
+ if(!WT.isOn()) return
+ if (WT.get_fuel() < 5) // uses up 5 fuel.
+ user << "\red You need more fuel to complete this task."
+ return
+
+ playsound(src.loc, pick('Welder.ogg', 'Welder2.ogg'), 50, 1)
+ if(do_after(user, 20))
+ if(!src || !WT.remove_fuel(5, user)) return
+ build_step = 1
+ user << "You remove the turret's interior metal armor."
+ new /obj/item/stack/sheet/metal( loc, 2)
+ return
if(3)
@@ -701,22 +707,27 @@ Neutralize All Unidentified Life Signs: []
"},
if(7)
if(istype(W, /obj/item/weapon/weldingtool))
- if (W:remove_fuel(5,user))
- playsound(src.loc, pick('Welder.ogg', 'Welder2.ogg'), 50, 1)
- if(do_after(user, 30))
- build_step = 8
- user << "\blue You weld the turret's armor down."
+ var/obj/item/weapon/weldingtool/WT = W
+ if(!WT.isOn()) return
+ if (WT.get_fuel() < 5)
+ user << "\red You need more fuel to complete this task."
- // The final step: create a full turret
- var/obj/machinery/porta_turret/Turret = new/obj/machinery/porta_turret(locate(x,y,z))
- Turret.name = finish_name
- Turret.installation = src.installation
- Turret.gun_charge = src.gun_charge
+ playsound(src.loc, pick('Welder.ogg', 'Welder2.ogg'), 50, 1)
+ if(do_after(user, 30))
+ if(!src || !WT.remove_fuel(5, user)) return
+ build_step = 8
+ user << "\blue You weld the turret's armor down."
- Turret.cover=new/obj/machinery/porta_turret_cover(src.loc)
- Turret.cover.Parent_Turret=Turret
- Turret.cover.name = finish_name
- del(src)
+ // The final step: create a full turret
+ var/obj/machinery/porta_turret/Turret = new/obj/machinery/porta_turret(locate(x,y,z))
+ Turret.name = finish_name
+ Turret.installation = src.installation
+ Turret.gun_charge = src.gun_charge
+
+ Turret.cover=new/obj/machinery/porta_turret_cover(src.loc)
+ Turret.cover.Parent_Turret=Turret
+ Turret.cover.name = finish_name
+ del(src)
else if(istype(W, /obj/item/weapon/crowbar))
playsound(src.loc, 'Crowbar.ogg', 75, 1)
diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm
index 46164b106d3..9dc9298fa70 100644
--- a/code/game/mecha/mecha.dm
+++ b/code/game/mecha/mecha.dm
@@ -756,8 +756,9 @@
user << "There's already a powercell installed."
return
- else if(istype(W, /obj/item/weapon/weldingtool) && W:welding && user.a_intent != "hurt")
- if (W:remove_fuel(0,user))
+ else if(istype(W, /obj/item/weapon/weldingtool) && user.a_intent != "hurt")
+ var/obj/item/weapon/weldingtool/WT = W
+ if (WT.remove_fuel(0,user))
if (hasInternalDamage(MECHA_INT_TANK_BREACH))
clearInternalDamage(MECHA_INT_TANK_BREACH)
user << "\blue You repair the damaged gas tank."
diff --git a/code/game/mecha/mecha_construction_paths.dm b/code/game/mecha/mecha_construction_paths.dm
index a4a47e81a66..b30cd7211f7 100644
--- a/code/game/mecha/mecha_construction_paths.dm
+++ b/code/game/mecha/mecha_construction_paths.dm
@@ -5,7 +5,7 @@
/datum/construction/mecha/custom_action(step, atom/used_atom, mob/user)
if(istype(used_atom, /obj/item/weapon/weldingtool))
var/obj/item/weapon/weldingtool/W = used_atom
- if (W:remove_fuel(0, user))
+ if (W.remove_fuel(0, user))
playsound(holder, 'Welder2.ogg', 50, 1)
else
return 0
@@ -38,7 +38,7 @@
/datum/construction/reversible/mecha/custom_action(index as num, diff as num, atom/used_atom, mob/user as mob)
if(istype(used_atom, /obj/item/weapon/weldingtool))
var/obj/item/weapon/weldingtool/W = used_atom
- if (W:remove_fuel(0, user))
+ if (W.remove_fuel(0, user))
playsound(holder, 'Welder2.ogg', 50, 1)
else
return 0
diff --git a/code/game/mecha/mecha_wreckage.dm b/code/game/mecha/mecha_wreckage.dm
index dd91a9a57db..d5d470db103 100644
--- a/code/game/mecha/mecha_wreckage.dm
+++ b/code/game/mecha/mecha_wreckage.dm
@@ -31,11 +31,12 @@
/obj/effect/decal/mecha_wreckage/attackby(obj/item/weapon/W as obj, mob/user as mob)
- if(istype(W, /obj/item/weapon/weldingtool) && W:welding)
+ if(istype(W, /obj/item/weapon/weldingtool))
+ var/obj/item/weapon/weldingtool/WT = W
if(salvage_num <= 0)
user << "You don't see anything that can be cut with [W]."
return
- if (!isemptylist(welder_salvage) && W:remove_fuel(0,user))
+ if (!isemptylist(welder_salvage) && WT.remove_fuel(0,user))
var/type = prob(70)?pick(welder_salvage):null
if(type)
var/N = new type(get_turf(user))
diff --git a/code/game/objects/alien/egg.dm b/code/game/objects/alien/egg.dm
index 2f6ee03982e..8f73d2cd11a 100644
--- a/code/game/objects/alien/egg.dm
+++ b/code/game/objects/alien/egg.dm
@@ -82,7 +82,7 @@
if(istype(W, /obj/item/weapon/weldingtool))
var/obj/item/weapon/weldingtool/WT = W
- if(WT.welding)
+ if(WT.remove_fuel(0, user))
damage = 15
playsound(src.loc, 'Welder.ogg', 100, 1)
diff --git a/code/game/objects/alien/weeds.dm b/code/game/objects/alien/weeds.dm
index b65d00044b3..3c07c2fd732 100644
--- a/code/game/objects/alien/weeds.dm
+++ b/code/game/objects/alien/weeds.dm
@@ -76,7 +76,7 @@ Alien plants should do something if theres a lot of poison
if(istype(W, /obj/item/weapon/weldingtool))
var/obj/item/weapon/weldingtool/WT = W
- if(WT.welding)
+ if(WT.remove_fuel(0, user))
damage = 15
playsound(loc, 'Welder.ogg', 100, 1)
diff --git a/code/game/objects/closets.dm b/code/game/objects/closets.dm
index 042e20e6dd4..54ce1884aa8 100644
--- a/code/game/objects/closets.dm
+++ b/code/game/objects/closets.dm
@@ -133,8 +133,9 @@
if(istype(W, /obj/item/weapon/grab))
src.MouseDrop_T(W:affecting, user) //act like they were dragged onto the closet
- if(istype(W, /obj/item/weapon/weldingtool) && W:welding )
- if(!W:remove_fuel(0,user))
+ if(istype(W, /obj/item/weapon/weldingtool))
+ var/obj/item/weapon/weldingtool/WT = W
+ if(!WT.remove_fuel(0,user))
user << "\blue You need more welding fuel to complete this task."
return
new /obj/item/stack/sheet/metal(src.loc)
@@ -153,8 +154,9 @@
else if(istype(W, /obj/item/weapon/packageWrap))
return
- else if(istype(W, /obj/item/weapon/weldingtool) && W:welding )
- if(!W:remove_fuel(0,user))
+ else if(istype(W, /obj/item/weapon/weldingtool))
+ var/obj/item/weapon/weldingtool/WT = W
+ if(!WT.remove_fuel(0,user))
user << "\blue You need more welding fuel to complete this task."
return
src.welded =! src.welded
diff --git a/code/game/objects/door_assembly.dm b/code/game/objects/door_assembly.dm
index 80309b1c1fa..629e3c2c02a 100644
--- a/code/game/objects/door_assembly.dm
+++ b/code/game/objects/door_assembly.dm
@@ -175,20 +175,19 @@ obj/structure/door_assembly
glass = 1
/obj/structure/door_assembly/attackby(obj/item/W as obj, mob/user as mob)
- if(istype(W, /obj/item/weapon/weldingtool) && W:welding && !anchored )
- if (W:remove_fuel(0,user))
- W:welding = 2
+ if(istype(W, /obj/item/weapon/weldingtool) && !anchored )
+ var/obj/item/weapon/weldingtool/WT = W
+ if (WT.remove_fuel(0,user))
user.visible_message("[user] dissassembles the airlock assembly.", "You start to dissassemble the airlock assembly.")
playsound(src.loc, 'Welder2.ogg', 50, 1)
if(do_after(user, 40))
- if(!src) return
+ if(!src || !WT.isOn()) return
user << "\blue You dissasembled the airlock assembly!"
new /obj/item/stack/sheet/metal(get_turf(src), 4)
if(src.glass==1)
new /obj/item/stack/sheet/rglass(get_turf(src))
del(src)
- W:welding = 1
else
user << "\blue You need more welding fuel to dissassemble the airlock assembly."
return
diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm
index 5179e6cd6e4..a5565b78c15 100644
--- a/code/game/objects/items.dm
+++ b/code/game/objects/items.dm
@@ -495,18 +495,19 @@
if (is_sharp(W))
burst()
+//Is this even used for anything besides balloons? Yes I took out the W:lit stuff because : really shouldnt be used.
/proc/is_sharp(obj/item/W as obj) // For the record, WHAT THE HELL IS THIS METHOD OF DOING IT?
return ( \
istype(W, /obj/item/weapon/screwdriver) || \
istype(W, /obj/item/weapon/pen) || \
- istype(W, /obj/item/weapon/weldingtool) && W:welding || \
- istype(W, /obj/item/weapon/lighter/zippo) && W:lit || \
- istype(W, /obj/item/weapon/match) && W:lit || \
- istype(W, /obj/item/clothing/mask/cigarette) && W:lit || \
+ istype(W, /obj/item/weapon/weldingtool) || \
+ istype(W, /obj/item/weapon/lighter/zippo) || \
+ istype(W, /obj/item/weapon/match) || \
+ istype(W, /obj/item/clothing/mask/cigarette) || \
istype(W, /obj/item/weapon/wirecutters) || \
istype(W, /obj/item/weapon/circular_saw) || \
- istype(W, /obj/item/weapon/melee/energy/sword) && W:active || \
- istype(W, /obj/item/weapon/melee/energy/blade) || \
+ istype(W, /obj/item/weapon/melee/energy/sword) || \
+ istype(W, /obj/item/weapon/melee/energy/blade) || \
istype(W, /obj/item/weapon/shovel) || \
istype(W, /obj/item/weapon/kitchenknife) || \
istype(W, /obj/item/weapon/butch) || \
diff --git a/code/game/objects/items/candle.dm b/code/game/objects/items/candle.dm
index 1b1ec87223f..e0d64f9ede3 100644
--- a/code/game/objects/items/candle.dm
+++ b/code/game/objects/items/candle.dm
@@ -27,14 +27,22 @@
attackby(obj/item/weapon/W as obj, mob/user as mob)
..()
- if(istype(W, /obj/item/weapon/weldingtool) && W:welding)
- light("\red [user] casually lights the [name] with [W], what a badass.")
- else if(istype(W, /obj/item/weapon/lighter) && W:lit)
- light()
- else if(istype(W, /obj/item/weapon/match) && W:lit)
- light()
- else if(istype(W, /obj/item/candle) && W:lit)
- light()
+ if(istype(W, /obj/item/weapon/weldingtool))
+ var/obj/item/weapon/weldingtool/WT = W
+ if(WT.isOn()) //Badasses dont get blinded by lighting their candle with a welding tool
+ light("\red [user] casually lights the [name] with [W], what a badass.")
+ else if(istype(W, /obj/item/weapon/lighter))
+ var/obj/item/weapon/lighter/L = W
+ if(L.lit)
+ light()
+ else if(istype(W, /obj/item/weapon/match))
+ var/obj/item/weapon/match/M = W
+ if(M.lit)
+ light()
+ else if(istype(W, /obj/item/candle))
+ var/obj/item/candle/C = W
+ if(C.lit)
+ light()
light(var/flavor_text = "\red [usr] lights the [name].")
diff --git a/code/game/objects/items/weapons/cigs_lighters.dm b/code/game/objects/items/weapons/cigs_lighters.dm
index 5dc2b9c8953..15a74acb478 100644
--- a/code/game/objects/items/weapons/cigs_lighters.dm
+++ b/code/game/objects/items/weapons/cigs_lighters.dm
@@ -123,20 +123,30 @@ ZIPPO
/obj/item/clothing/mask/cigarette/attackby(obj/item/weapon/W as obj, mob/user as mob)
..()
- if(istype(W, /obj/item/weapon/weldingtool) && W:welding)
- light("\red [user] casually lights the [name] with [W], what a badass.")
+ if(istype(W, /obj/item/weapon/weldingtool))
+ var/obj/item/weapon/weldingtool/WT = W
+ if(WT.isOn())//Badasses dont get blinded while lighting their cig with a welding tool
+ light("\red [user] casually lights the [name] with [W], what a badass.")
- else if(istype(W, /obj/item/weapon/lighter/zippo) && (W:lit > 0))
- light("\red With a single flick of their wrist, [user] smoothly lights their [name] with their [W]. Damn they're cool.")
+ else if(istype(W, /obj/item/weapon/lighter/zippo))
+ var/obj/item/weapon/lighter/zippo/Z = W
+ if(Z.lit > 0)
+ light("\red With a single flick of their wrist, [user] smoothly lights their [name] with their [W]. Damn they're cool.")
- else if(istype(W, /obj/item/weapon/lighter) && (W:lit > 0))
- light("\red After some fiddling, [user] manages to light their [name] with [W].")
+ else if(istype(W, /obj/item/weapon/lighter))
+ var/obj/item/weapon/lighter/L = W
+ if(L.lit > 0)
+ light("\red After some fiddling, [user] manages to light their [name] with [W].")
- else if(istype(W, /obj/item/weapon/melee/energy/sword) && (W:active))
- light("\red [user] swings their [W], barely missing their nose. They light their [name] in the process.")
+ else if(istype(W, /obj/item/weapon/melee/energy/sword))
+ var/obj/item/weapon/melee/energy/sword/S = W
+ if(S.active)
+ light("\red [user] swings their [W], barely missing their nose. They light their [name] in the process.")
- else if(istype(W, /obj/item/weapon/match) && (W:lit > 0))
- light("\red [user] lights their [name] with their [W].")
+ else if(istype(W, /obj/item/weapon/match))
+ var/obj/item/weapon/match/M = W
+ if(M.lit > 0)
+ light("\red [user] lights their [name] with their [W].")
return
@@ -250,18 +260,25 @@ ZIPPO
attackby(obj/item/weapon/W as obj, mob/user as mob)
..()
- if(istype(W, /obj/item/weapon/weldingtool) && W:welding)
- light("\red [user] casually lights the [name] with [W], what a badass.")
+ if(istype(W, /obj/item/weapon/weldingtool))
+ var/obj/item/weapon/weldingtool/WT = W
+ if(WT.isOn())
+ light("\red [user] casually lights the [name] with [W], what a badass.")
- else if(istype(W, /obj/item/weapon/lighter/zippo) && (W:lit > 0))
- light("\red With a single flick of their wrist, [user] smoothly lights their [name] with their [W]. Damn they're cool.")
+ else if(istype(W, /obj/item/weapon/lighter/zippo))
+ var/obj/item/weapon/lighter/zippo/Z = W
+ if(Z.lit > 0)
+ light("\red With a single flick of their wrist, [user] smoothly lights their [name] with their [W]. Damn they're cool.")
- else if(istype(W, /obj/item/weapon/lighter) && (W:lit > 0))
- light("\red After some fiddling, [user] manages to light their [name] with [W].")
+ else if(istype(W, /obj/item/weapon/lighter))
+ var/obj/item/weapon/lighter/L = W
+ if(L.lit > 0)
+ light("\red After some fiddling, [user] manages to light their [name] with [W].")
- else if(istype(W, /obj/item/weapon/match) && (W:lit > 0))
- light("\red [user] lights \his [name] with \his [W].")
- return
+ else if(istype(W, /obj/item/weapon/match))
+ var/obj/item/weapon/match/M = W
+ if(M.lit > 0)
+ light("\red [user] lights their [name] with their [W].")
light(var/flavor_text = "[usr] lights the [name].")
if(!src.lit)
diff --git a/code/game/objects/items/weapons/tools.dm b/code/game/objects/items/weapons/tools.dm
index 5de9b3215d6..b2197a1acc3 100644
--- a/code/game/objects/items/weapons/tools.dm
+++ b/code/game/objects/items/weapons/tools.dm
@@ -71,217 +71,256 @@ WELDINGTOOOL
icon_state = "welder"
flags = FPRINT | TABLEPASS| CONDUCT
slot_flags = SLOT_BELT
+
+ //Amount of OUCH when it's thrown
force = 3.0
throwforce = 5.0
throw_speed = 1
throw_range = 5
w_class = 2.0
+
+ //Cost to make in the autolathe
m_amt = 70
g_amt = 30
+
+ //R&D tech level
origin_tech = "engineering=1"
- var/welding = 0
- var/status = 1
- var/max_fuel = 20
- proc
- get_fuel()
- remove_fuel(var/amount = 1, var/mob/M = null)
- check_status()
- toggle(var/message = 0)
- eyecheck(mob/user as mob)
+
+ //Welding tool specific stuff
+ var/welding = 0 //Whether or not the welding tool is off(0), on(1) or currently welding(2)
+ var/status = 1 //Whether the welder is secured or unsecured (able to attach rods to it to make a flamethrower)
+ var/max_fuel = 20 //The max amount of fuel the welder can hold
+
+/obj/item/weapon/weldingtool/New()
+// var/random_fuel = min(rand(10,20),max_fuel)
+ var/datum/reagents/R = new/datum/reagents(max_fuel)
+ reagents = R
+ R.my_atom = src
+ R.add_reagent("fuel", max_fuel)
+ return
- New()
- var/random_fuel = min(rand(10,20),max_fuel)
- var/datum/reagents/R = new/datum/reagents(max_fuel)
- reagents = R
- R.my_atom = src
- R.add_reagent("fuel", random_fuel)
- return
+/obj/item/weapon/weldingtool/examine()
+ set src in usr
+ usr << text("\icon[] [] contains []/[] units of fuel!", src, src.name, get_fuel(),src.max_fuel )
+ return
- examine()
- set src in usr
- usr << text("\icon[] [] contains []/[] units of fuel!", src, src.name, get_fuel(),src.max_fuel )
- return
-
-
- attackby(obj/item/W as obj, mob/user as mob)
- if(istype(W,/obj/item/weapon/screwdriver))
- if(welding)
- user << "\red Stop welding first!"
- return
- status = !status
- if(status)
- user << "\blue You resecure the welder."
- else
- user << "\blue The welder can now be attached and modified."
- src.add_fingerprint(user)
+/obj/item/weapon/weldingtool/attackby(obj/item/W as obj, mob/user as mob)
+ if(istype(W,/obj/item/weapon/screwdriver))
+ if(welding)
+ user << "\red Stop welding first!"
return
-
- if((!status) && (istype(W,/obj/item/stack/rods)))
- var/obj/item/stack/rods/R = W
- R.use(1)
- var/obj/item/weapon/flamethrower/F = new/obj/item/weapon/flamethrower(user.loc)
- src.loc = F
- F.weldtool = src
- if (user.client)
- user.client.screen -= src
- if (user.r_hand == src)
- user.u_equip(src)
- else
- user.u_equip(src)
- src.master = F
- src.layer = initial(src.layer)
- user.u_equip(src)
- if (user.client)
- user.client.screen -= src
- src.loc = F
- src.add_fingerprint(user)
- return
-
- ..()
- return
-
-
- process()
- switch(welding)
- if(0)
- processing_objects.Remove(src)
- return
- if(1)
- if(prob(5))//Welders left on now use up fuel, but lets not have them run out quite that fast
- remove_fuel(1)
- if(2)
- if(prob(75))
- remove_fuel(1)
- //if you're actually actively welding, use fuel faster.
-
- var/turf/location = src.loc
- if(istype(location, /mob/))
- var/mob/M = location
- if(M.l_hand == src || M.r_hand == src)
- location = get_turf(M)
- if (istype(location, /turf))
- location.hotspot_expose(700, 5)
-
-
- afterattack(obj/O as obj, mob/user as mob)
- if (istype(O, /obj/structure/reagent_dispensers/fueltank) && get_dist(src,O) <= 1 && !src.welding)
- O.reagents.trans_to(src, max_fuel)
- user << "\blue Welder refueled"
- playsound(src.loc, 'refill.ogg', 50, 1, -6)
- return
- else if (istype(O, /obj/structure/reagent_dispensers/fueltank) && get_dist(src,O) <= 1 && src.welding)
- message_admins("[key_name_admin(user)] triggered a fueltank explosion.")
- log_game("[key_name(user)] triggered a fueltank explosion.")
- user << "\red That was stupid of you."
- explosion(O.loc,-1,0,2)
- if(O)
- del(O)
- return
- if (src.welding)
- remove_fuel(1)
- var/turf/location = get_turf(user)
- if (istype(location, /turf))
- location.hotspot_expose(700, 50, 1)
- return
-
-
- attack_self(mob/user as mob)
- toggle()
- return
-
-
-///GET prop for fuel
- get_fuel()
- return reagents.get_reagent_amount("fuel")
-
-
-///SET prop for fuel
-///Will also turn it off if it is out of fuel
-///The mob argument is not needed but if included will call eyecheck() on it if the welder is on.
- remove_fuel(var/amount = 1, var/mob/M = null)
- if(!welding || !check_status())
- return 0
- if(get_fuel() >= amount)
- reagents.remove_reagent("fuel", amount)
- check_status()
- if(M)
- eyecheck(M)//TODO:eyecheck should really be in mob not here
- return 1
+ status = !status
+ if(status)
+ user << "\blue You resecure the welder."
else
- if(M)
- M << "\blue You need more welding fuel to complete this task."
- return 0
+ user << "\blue The welder can now be attached and modified."
+ src.add_fingerprint(user)
+ return
+
+ if((!status) && (istype(W,/obj/item/stack/rods)))
+ var/obj/item/stack/rods/R = W
+ R.use(1)
+ var/obj/item/weapon/flamethrower/F = new/obj/item/weapon/flamethrower(user.loc)
+ src.loc = F
+ F.weldtool = src
+ if (user.client)
+ user.client.screen -= src
+ if (user.r_hand == src)
+ user.u_equip(src)
+ else
+ user.u_equip(src)
+ src.master = F
+ src.layer = initial(src.layer)
+ user.u_equip(src)
+ if (user.client)
+ user.client.screen -= src
+ src.loc = F
+ src.add_fingerprint(user)
+ return
+
+ ..()
+ return
-///Quick check to see if we even have any fuel and should shut off
-///This could use a better name
- check_status()
- if((get_fuel() <= 0) && welding)
- toggle(1)
- return 0
- return 1
-
-
-//toggles the welder off and on
- toggle(var/message = 0)
- if(!status) return
- src.welding = !( src.welding )
- if (src.welding)
- if (remove_fuel(1))
- usr << "\blue You switch the [src] on."
+/obj/item/weapon/weldingtool/process()
+ switch(welding)
+ //If off
+ if(0)
+ if(src.icon_state != "welder") //Check that the sprite is correct, if it isnt, it means toggle() was not called
+ src.force = 3
+ src.damtype = "brute"
+ src.icon_state = "welder"
+ src.welding = 0
+ processing_objects.Remove(src)
+ return
+ //Welders left on now use up fuel, but lets not have them run out quite that fast
+ if(1)
+ if(src.icon_state != "welder1") //Check that the sprite is correct, if it isnt, it means toggle() was not called
src.force = 15
src.damtype = "fire"
src.icon_state = "welder1"
- processing_objects.Add(src)
- else
- usr << "\blue Need more fuel!"
- src.welding = 0
- return
- else
- if(!message)
- usr << "\blue You switch the [src] off."
- else
- usr << "\blue The [src] shuts off!"
- src.force = 3
- src.damtype = "brute"
- src.icon_state = "welder"
- src.welding = 0
+ if(prob(5))
+ remove_fuel(1)
+
+ //If you're actually actively welding, use fuel faster.
+ //Is this actually used or set anywhere? - Nodrak
+ if(2)
+ if(prob(75))
+ remove_fuel(1)
- eyecheck(mob/user as mob)
- //check eye protection
- if(!iscarbon(user)) return 1
- var/safety = user:eyecheck()
- switch(safety)
- if(1)
- usr << "\red Your eyes sting a little."
- user.eye_stat += rand(1, 2)
- if(user.eye_stat > 12)
- user.eye_blurry += rand(3,6)
- if(0)
- usr << "\red Your eyes burn."
- user.eye_stat += rand(2, 4)
- if(user.eye_stat > 10)
- user.eye_blurry += rand(4,10)
- if(-1)
- usr << "\red Your thermals intensify the welder's glow. Your eyes itch and burn severely."
- user.eye_blurry += rand(12,20)
- user.eye_stat += rand(12, 16)
- if(user.eye_stat > 10 && safety < 2)
- user << "\red Your eyes are really starting to hurt. This can't be good for you!"
- if (prob(user.eye_stat - 25 + 1))
- user << "\red You go blind!"
- user.sdisabilities |= 1
- else if (prob(user.eye_stat - 15 + 1))
- user << "\red You go blind!"
- user.eye_blind = 5
- user.eye_blurry = 5
- user.disabilities |= 1
- spawn(100)
- user.disabilities &= ~1
+ //I'm not sure what this does. I assume it has to do with starting fires...
+ //...but it doesnt check to see if the welder is on or not.
+ var/turf/location = src.loc
+ if(istype(location, /mob/))
+ var/mob/M = location
+ if(M.l_hand == src || M.r_hand == src)
+ location = get_turf(M)
+ if (istype(location, /turf))
+ location.hotspot_expose(700, 5)
+
+
+/obj/item/weapon/weldingtool/afterattack(obj/O as obj, mob/user as mob)
+ if (istype(O, /obj/structure/reagent_dispensers/fueltank) && get_dist(src,O) <= 1 && !src.welding)
+ O.reagents.trans_to(src, max_fuel)
+ user << "\blue Welder refueled"
+ playsound(src.loc, 'refill.ogg', 50, 1, -6)
return
+ else if (istype(O, /obj/structure/reagent_dispensers/fueltank) && get_dist(src,O) <= 1 && src.welding)
+ message_admins("[key_name_admin(user)] triggered a fueltank explosion.")
+ log_game("[key_name(user)] triggered a fueltank explosion.")
+ user << "\red That was stupid of you."
+ explosion(O.loc,-1,0,2)
+ if(O)
+ del(O)
+ return
+ if (src.welding)
+ remove_fuel(1)
+ var/turf/location = get_turf(user)
+ if (istype(location, /turf))
+ location.hotspot_expose(700, 50, 1)
+ return
+
+
+/obj/item/weapon/weldingtool/attack_self(mob/user as mob)
+ toggle()
+ return
+
+//Returns the amount of fuel in the welder
+/obj/item/weapon/weldingtool/proc/get_fuel()
+ return reagents.get_reagent_amount("fuel")
+
+
+//Removes fuel from the welding tool. If a mob is passed, it will perform an eyecheck on the mob. This should probably be renamed to use()
+/obj/item/weapon/weldingtool/proc/remove_fuel(var/amount = 1, var/mob/M = null)
+ if(!welding || !check_fuel())
+ return 0
+ if(get_fuel() >= amount)
+ reagents.remove_reagent("fuel", amount)
+ check_fuel()
+ if(M)
+ eyecheck(M)
+ return 1
+ else
+ if(M)
+ M << "\blue You need more welding fuel to complete this task."
+ return 0
+
+//Returns whether or not the welding tool is currently on.
+/obj/item/weapon/weldingtool/proc/isOn()
+ return src.welding
+
+//Sets the welding state of the welding tool. If you see W.welding = 1 anywhere, please change it to W.setWelding(1)
+//so that the welding tool updates accordingly
+/obj/item/weapon/weldingtool/proc/setWelding(var/temp_welding)
+ //If we're turning it on
+ if(temp_welding > 0)
+ if (remove_fuel(1))
+ usr << "\blue The [src] switches on."
+ src.force = 15
+ src.damtype = "fire"
+ src.icon_state = "welder1"
+ processing_objects.Add(src)
+ else
+ usr << "\blue Need more fuel!"
+ src.welding = 0
+ return
+ //Otherwise
+ else
+ usr << "\blue The [src] switches off."
+ src.force = 3
+ src.damtype = "brute"
+ src.icon_state = "welder"
+ src.welding = 0
+
+//Turns off the welder if there is no more fuel (does this really need to be its own proc?)
+/obj/item/weapon/weldingtool/proc/check_fuel()
+ if((get_fuel() <= 0) && welding)
+ toggle(1)
+ return 0
+ return 1
+
+
+//Toggles the welder off and on
+/obj/item/weapon/weldingtool/proc/toggle(var/message = 0)
+ if(!status) return
+ src.welding = !( src.welding )
+ if (src.welding)
+ if (remove_fuel(1))
+ usr << "\blue You switch the [src] on."
+ src.force = 15
+ src.damtype = "fire"
+ src.icon_state = "welder1"
+ processing_objects.Add(src)
+ else
+ usr << "\blue Need more fuel!"
+ src.welding = 0
+ return
+ else
+ if(!message)
+ usr << "\blue You switch the [src] off."
+ else
+ usr << "\blue The [src] shuts off!"
+ src.force = 3
+ src.damtype = "brute"
+ src.icon_state = "welder"
+ src.welding = 0
+
+//Decides whether or not to damage a player's eyes based on what they're wearing as protection
+//Note: This should probably be moved to mob
+/obj/item/weapon/weldingtool/proc/eyecheck(mob/user as mob)
+ if(!iscarbon(user)) return 1
+ var/safety = user:eyecheck()
+ switch(safety)
+ if(1)
+ usr << "\red Your eyes sting a little."
+ user.eye_stat += rand(1, 2)
+ if(user.eye_stat > 12)
+ user.eye_blurry += rand(3,6)
+ if(0)
+ usr << "\red Your eyes burn."
+ user.eye_stat += rand(2, 4)
+ if(user.eye_stat > 10)
+ user.eye_blurry += rand(4,10)
+ if(-1)
+ usr << "\red Your thermals intensify the welder's glow. Your eyes itch and burn severely."
+ user.eye_blurry += rand(12,20)
+ user.eye_stat += rand(12, 16)
+ if(user.eye_stat > 10 && safety < 2)
+ user << "\red Your eyes are really starting to hurt. This can't be good for you!"
+ if (prob(user.eye_stat - 25 + 1))
+ user << "\red You go blind!"
+ user.sdisabilities |= 1
+ else if (prob(user.eye_stat - 15 + 1))
+ user << "\red You go blind!"
+ user.eye_blind = 5
+ user.eye_blurry = 5
+ user.disabilities |= 1
+ spawn(100)
+ user.disabilities &= ~1
+ return
/obj/item/weapon/weldingtool/largetank
@@ -322,7 +361,7 @@ WELDINGTOOOL
m_amt = 80
origin_tech = "materials=1;engineering=1"
- New()
- if(prob(50))
- icon_state = "cutters-y"
- item_state = "cutters_yellow"
\ No newline at end of file
+/obj/item/weapon/wirecutters/New()
+ if(prob(50))
+ icon_state = "cutters-y"
+ item_state = "cutters_yellow"
\ No newline at end of file
diff --git a/code/game/objects/mineral_doors.dm b/code/game/objects/mineral_doors.dm
index 17118f65f19..fb844265017 100644
--- a/code/game/objects/mineral_doors.dm
+++ b/code/game/objects/mineral_doors.dm
@@ -215,7 +215,8 @@
attackby(obj/item/weapon/W as obj, mob/user as mob)
if(istype(W,/obj/item/weapon/weldingtool))
- if(W:welding)
+ var/obj/item/weapon/weldingtool/WT = W
+ if(WT.remove_fuel(0, user))
TemperatureAct(100)
..()
diff --git a/code/game/objects/shooting_range.dm b/code/game/objects/shooting_range.dm
index d678e9d88c4..6731b3e9e2c 100644
--- a/code/game/objects/shooting_range.dm
+++ b/code/game/objects/shooting_range.dm
@@ -95,7 +95,8 @@
attackby(obj/item/W as obj, mob/user as mob)
if (istype(W, /obj/item/weapon/weldingtool))
- if(W:welding == 1)
+ var/obj/item/weapon/weldingtool/WT = W
+ if(WT.remove_fuel(0, user))
overlays = null
usr << "You slice off [src]'s uneven chunks of aluminum and scorch marks."
return
diff --git a/code/game/objects/stacks/glass.dm b/code/game/objects/stacks/glass.dm
index d8d5b5c0bf4..cb14a32ec71 100644
--- a/code/game/objects/stacks/glass.dm
+++ b/code/game/objects/stacks/glass.dm
@@ -237,19 +237,20 @@ SHARDS
/obj/item/weapon/shard/attackby(obj/item/weapon/W as obj, mob/user as mob)
..()
- if ( istype(W, /obj/item/weapon/weldingtool) && W:welding )
- W:eyecheck(user)
- var/obj/item/stack/sheet/glass/NG = new (user.loc)
- for (var/obj/item/stack/sheet/glass/G in user.loc)
- if(G==NG)
- continue
- if(G.amount>=G.max_amount)
- continue
- G.attackby(NG, user)
- usr << "You add the newly-formed glass to the stack. It now contains [NG.amount] sheets."
- //SN src = null
- del(src)
- return
+ if ( istype(W, /obj/item/weapon/weldingtool))
+ var/obj/item/weapon/weldingtool/WT = W
+ if(WT.remove_fuel(0, user))
+ var/obj/item/stack/sheet/glass/NG = new (user.loc)
+ for (var/obj/item/stack/sheet/glass/G in user.loc)
+ if(G==NG)
+ continue
+ if(G.amount>=G.max_amount)
+ continue
+ G.attackby(NG, user)
+ usr << "You add the newly-formed glass to the stack. It now contains [NG.amount] sheets."
+ //SN src = null
+ del(src)
+ return
return ..()
/obj/item/weapon/shard/HasEntered(AM as mob|obj)
diff --git a/code/game/objects/stacks/metal.dm b/code/game/objects/stacks/metal.dm
index 330cb6245ed..9f3d91c92d9 100644
--- a/code/game/objects/stacks/metal.dm
+++ b/code/game/objects/stacks/metal.dm
@@ -12,11 +12,14 @@ FLOOR TILES
/obj/item/stack/rods/attackby(obj/item/W as obj, mob/user as mob)
..()
- if (istype(W, /obj/item/weapon/weldingtool) && W:welding)
+ if (istype(W, /obj/item/weapon/weldingtool))
+ var/obj/item/weapon/weldingtool/WT = W
+
if(amount < 2)
user << "\red You need at least two rods to do this."
return
- if(W:remove_fuel(0,user))
+
+ if(WT.remove_fuel(0,user))
var/obj/item/stack/sheet/metal/new_item = new(usr.loc)
new_item.add_to_stacks(usr)
for (var/mob/M in viewers(src))
diff --git a/code/game/objects/structures.dm b/code/game/objects/structures.dm
index 1acc05d70c0..27be50d553f 100644
--- a/code/game/objects/structures.dm
+++ b/code/game/objects/structures.dm
@@ -253,9 +253,10 @@ obj/structure/meteorhit(obj/O as obj)
var/turf/T = get_turf(src)
T.attackby(C, user) //BubbleWrap - hand this off to the underlying turf instead
return
- if (istype(C, /obj/item/weapon/weldingtool) && C:welding)
- user << "\blue Slicing lattice joints ..."
- C:eyecheck(user)
+ if (istype(C, /obj/item/weapon/weldingtool))
+ var/obj/item/weapon/weldingtool/WT = C
+ if(WT.remove_fuel(0, user))
+ user << "\blue Slicing lattice joints ..."
new /obj/item/stack/rods(src.loc)
del(src)
diff --git a/code/game/objects/tables_racks.dm b/code/game/objects/tables_racks.dm
index f90ed28bb99..3be189a0534 100644
--- a/code/game/objects/tables_racks.dm
+++ b/code/game/objects/tables_racks.dm
@@ -238,24 +238,22 @@ TABLE AND RACK OBJECT INTERATIONS
return
if (istype(W, /obj/item/weapon/weldingtool))
- if(W:welding == 1)
+ var/obj/item/weapon/weldingtool/WT = W
+ if(WT.remove_fuel(0, user))
if(src.status == 2)
- W:welding = 2
- W:eyecheck(user)
user << "\blue Now weakening the reinforced table"
playsound(src.loc, 'Welder.ogg', 50, 1)
if (do_after(user, 50))
+ if(!src || !WT.isOn()) return
user << "\blue Table weakened"
src.status = 1
- W:welding = 1
else
- W:welding = 2
user << "\blue Now strengthening the reinforced table"
playsound(src.loc, 'Welder.ogg', 50, 1)
if (do_after(user, 50))
+ if(!src || !WT.isOn()) return
user << "\blue Table strengthened"
src.status = 2
- W:welding = 1
return
if(isrobot(user))
return
diff --git a/code/game/objects/uplinks.dm b/code/game/objects/uplinks.dm
index 21d262f20e6..d8beaeb8f76 100644
--- a/code/game/objects/uplinks.dm
+++ b/code/game/objects/uplinks.dm
@@ -81,112 +81,180 @@ A list of items and costs is stored under the datum of every game mode, alongsid
src.menu_message += "