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 c0756e3d4d2..3d9befcfba7 100644
--- a/code/defines/turf.dm
+++ b/code/defines/turf.dm
@@ -332,7 +332,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/events/EventProcs/spacevines.dm b/code/game/events/EventProcs/spacevines.dm
index b372981383a..f074e2b884d 100644
--- a/code/game/events/EventProcs/spacevines.dm
+++ b/code/game/events/EventProcs/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 92cc9281ef9..be5c8639ffe 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 46905532dbf..4531d76cba3 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 4215c0a2b53..750db980e6b 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)
@@ -162,6 +165,7 @@
playsound(loc, 'Screwdriver.ogg', 50, 1)
user << "\blue You connect the monitor."
new /mob/living/silicon/ai ( loc, laws, brain )
+// feedback_inc("cyborg_ais_created",1)
del(src)
/obj/structure/AIcore/deactivated
diff --git a/code/game/machinery/computer/buildandrepair.dm b/code/game/machinery/computer/buildandrepair.dm
index cfcef2eb3b7..15d63c6d56f 100644
--- a/code/game/machinery/computer/buildandrepair.dm
+++ b/code/game/machinery/computer/buildandrepair.dm
@@ -259,13 +259,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 2df8cb6f5c8..3174443256d 100644
--- a/code/game/machinery/portable_turret.dm
+++ b/code/game/machinery/portable_turret.dm
@@ -456,6 +456,7 @@ Neutralize All Unidentified Life Signs: []
"},
/obj/machinery/porta_turret/proc/shootAt(var/atom/movable/target) // shoots at a target
+
if(!emagged) // if it hasn't been emagged, it has to obey a cooldown rate
if(last_fired || !raised) return // prevents rapid-fire shooting, unless it's been emagged
last_fired = 1
@@ -644,13 +645,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)
@@ -706,22 +713,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 52f897ef19b..f2ac1f25269 100644
--- a/code/game/mecha/mecha.dm
+++ b/code/game/mecha/mecha.dm
@@ -757,8 +757,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 939f7578c1e..1b574e9dd2b 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/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 1ec2acdda74..c623440b0ff 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)
@@ -156,8 +157,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 4c9e9c7207c..c3e67162baf 100644
--- a/code/game/objects/door_assembly.dm
+++ b/code/game/objects/door_assembly.dm
@@ -179,20 +179,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 ba9c5a979fa..a740c7d9d71 100644
--- a/code/game/objects/items.dm
+++ b/code/game/objects/items.dm
@@ -511,18 +511,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 d93e157d767..3e103f23ab6 100644
--- a/code/game/objects/items/candle.dm
+++ b/code/game/objects/items/candle.dm
@@ -1,4 +1,4 @@
-//This file was auto-corrected by findeclaration.exe on 29/05/2012 15:03:05
+//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:32
#define CANDLE_LUM 3
@@ -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 cec30461897..02e30257ed7 100644
--- a/code/game/objects/items/weapons/cigs_lighters.dm
+++ b/code/game/objects/items/weapons/cigs_lighters.dm
@@ -128,8 +128,10 @@ 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))
var/obj/item/weapon/lighter/zippo/Z = W
@@ -266,18 +268,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 5a23cfbb8ab..4bc4a25de19 100644
--- a/code/game/objects/items/weapons/tools.dm
+++ b/code/game/objects/items/weapons/tools.dm
@@ -71,242 +71,278 @@ 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()
- user.update_clothing()
- 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.disabilities |= 128
- 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 //Simpler to just leave them short sighted.
+ //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
- attack(mob/M as mob, mob/user as mob)
- if(hasorgans(M))
- var/datum/organ/external/S = M:organs[user.zone_sel.selecting]
- if(S)
- message_admins("It appears [M] has \"null\" where there should be a [user.zone_sel.selecting]. Check into this, and tell SkyMarshal: \"[M.type]\"")
- return ..()
- if(!S.robot || user.a_intent != "help")
- return ..()
- if(S.brute_dam)
- S.heal_damage(15,0,0,1)
- if(user != M)
- user.visible_message("\red You patch some dents on \the [M]'s [S.display_name]",\
- "\red \The [user] patches some dents on \the [M]'s [S.display_name] with \the [src]",\
- "You hear a welder.")
- else
- user.visible_message("\red You patch some dents on your [S.display_name]",\
- "\red \The [user] patches some dents on their [S.display_name] with \the [src]",\
- "You hear a welder.")
- else
- user << "Nothing to fix!"
+
+/obj/item/weapon/weldingtool/attack_self(mob/user as mob)
+ toggle()
+ user.update_clothing()
+ 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
- return ..()
+ 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
+ return
+
+//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.disabilities |= 128
+ 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 //Simpler to just leave them short sighted.
+ return
+
+/obj/item/weapon/weldingtool/attack(mob/M as mob, mob/user as mob)
+ if(hasorgans(M))
+ var/datum/organ/external/S = M:organs[user.zone_sel.selecting]
+ if(!S.robot || user.a_intent != "help")
+ return ..()
+ if(S.brute_dam)
+ S.heal_damage(15,0,0,1)
+ if(user != M)
+ user.visible_message("\red You patch some dents on \the [M]'s [S.display_name]",\
+ "\red \The [user] patches some dents on \the [M]'s [S.display_name] with \the [src]",\
+ "You hear a welder.")
+ else
+ user.visible_message("\red You patch some dents on your [S.display_name]",\
+ "\red \The [user] patches some dents on their [S.display_name] with \the [src]",\
+ "You hear a welder.")
+ else
+ user << "Nothing to fix!"
+ else
+ return ..()
/obj/item/weapon/weldingtool/largetank
name = "Industrial Welding Tool"
@@ -325,13 +361,21 @@ WELDINGTOOOL
/obj/item/weapon/weldingtool/experimental
name = "Experimental Welding Tool"
- max_fuel = 80
+ max_fuel = 40
w_class = 3.0
m_amt = 70
g_amt = 120
+ origin_tech = "engineering=4;plasma=3"
+ icon_state = "ewelder"
+ var/last_gen = 0
+/obj/item/weapon/weldingtool/experimental/proc/fuel_gen()//Proc to make the experimental welder generate fuel, optimized as fuck -Sieve
+ var/gen_amount = ((world.time-last_gen)/25)
+ reagents += (gen_amount)
+ if(reagents > max_fuel)
+ reagents = max_fuel
/obj/item/weapon/wirecutters
name = "wirecutters"
desc = "This cuts wires."
@@ -346,10 +390,10 @@ WELDINGTOOOL
m_amt = 80
origin_tech = "materials=1;engineering=1"
- New()
- if(prob(50))
- icon_state = "cutters-y"
- item_state = "cutters_yellow"
+/obj/item/weapon/wirecutters/New()
+ if(prob(50))
+ icon_state = "cutters-y"
+ item_state = "cutters_yellow"
/obj/item/weapon/wirecutters/attack(mob/M as mob, mob/user as mob)
if((M.handcuffed) && (istype(M:handcuffed, /obj/item/weapon/handcuffs/cable)))
diff --git a/code/game/objects/mineral_doors.dm b/code/game/objects/mineral_doors.dm
index f99a8d395fe..9e7fcb5fb2f 100644
--- a/code/game/objects/mineral_doors.dm
+++ b/code/game/objects/mineral_doors.dm
@@ -188,7 +188,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 a11beacd82f..88803375fc3 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 087c562efa2..f4c9d52e19d 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 132fd7e00cc..9d7f29078aa 100644
--- a/code/game/objects/structures.dm
+++ b/code/game/objects/structures.dm
@@ -173,7 +173,6 @@ obj/structure/meteorhit(obj/O as obj)
else
return
-
/obj/structure/girder/displaced
icon_state = "displaced"
anchored = 0
@@ -259,9 +258,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 1ffe6a64c7b..dfc0f319551 100644
--- a/code/game/objects/tables_racks.dm
+++ b/code/game/objects/tables_racks.dm
@@ -283,23 +283,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
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 c431b4c5890..95b897b3741 100644
--- a/code/game/objects/uplinks.dm
+++ b/code/game/objects/uplinks.dm
@@ -81,113 +81,184 @@ A list of items and costs is stored under the datum of every game mode, alongsid
// src.menu_message += "Random Item (??)
"
src.menu_message += "