diff --git a/code/game/objects/items/weapons/tools.dm b/code/game/objects/items/weapons/tools.dm
index c39053b5aa..e07cc91eef 100644
--- a/code/game/objects/items/weapons/tools.dm
+++ b/code/game/objects/items/weapons/tools.dm
@@ -172,7 +172,8 @@
/obj/item/weapon/weldingtool/examine(mob/user)
if(..(user, 0))
- user << text("\icon[] [] contains []/[] units of fuel!", src, src.name, get_fuel(),src.max_fuel )
+ if(max_fuel)
+ user << text("\icon[] [] contains []/[] units of fuel!", src, src.name, get_fuel(),src.max_fuel )
/obj/item/weapon/weldingtool/attackby(obj/item/W as obj, mob/living/user as mob)
@@ -234,18 +235,22 @@
/obj/item/weapon/weldingtool/afterattack(obj/O as obj, mob/user as mob, proximity)
if(!proximity) return
- if (istype(O, /obj/structure/reagent_dispensers/fueltank) && get_dist(src,O) <= 1 && !src.welding)
- O.reagents.trans_to_obj(src, max_fuel)
- user << "Welder refueled"
- playsound(src.loc, 'sound/effects/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 with a welding tool.")
- log_game("[key_name(user)] triggered a fueltank explosion with a welding tool.")
- user << "You begin welding on the fueltank and with a moment of lucidity you realize, this might not have been the smartest thing you've ever done."
- var/obj/structure/reagent_dispensers/fueltank/tank = O
- tank.explode()
- return
+ if (istype(O, /obj/structure/reagent_dispensers/fueltank) && get_dist(src,O) <= 1 && !welding)
+ if(!welding && max_fuel)
+ O.reagents.trans_to_obj(src, max_fuel)
+ user << "Welder refueled"
+ playsound(src.loc, 'sound/effects/refill.ogg', 50, 1, -6)
+ return
+ else if(!welding)
+ user << ""
+ return
+ else
+ message_admins("[key_name_admin(user)] triggered a fueltank explosion with a welding tool.")
+ log_game("[key_name(user)] triggered a fueltank explosion with a welding tool.")
+ user << "You begin welding on the fueltank and with a moment of lucidity you realize, this might not have been the smartest thing you've ever done."
+ var/obj/structure/reagent_dispensers/fueltank/tank = O
+ tank.explode()
+ return
if (src.welding)
remove_fuel(1)
var/turf/location = get_turf(user)
@@ -286,7 +291,7 @@
/obj/item/weapon/weldingtool/update_icon()
..()
- icon_state = welding ? "welder1" : "welder"
+ icon_state = welding ? "[icon_state]1" : "[initial(icon_state)]"
var/mob/M = loc
if(istype(M))
M.update_inv_l_hand()
@@ -313,7 +318,8 @@
processing_objects |= src
else
if(M)
- M << "You need more welding fuel to complete this task."
+ var/msg = max_fuel ? "welding fuel" : "charge"
+ M << "You need more [msg] to complete this task."
return
//Otherwise
else if(!set_welding && welding)
@@ -370,7 +376,6 @@
user.disabilities &= ~NEARSIGHTED
return
-
/obj/item/weapon/weldingtool/largetank
name = "industrial welding tool"
max_fuel = 40
@@ -405,6 +410,108 @@
if(get_fuel() < max_fuel && nextrefueltick < world.time)
nextrefueltick = world.time + 10
reagents.add_reagent("fuel", 1)
+
+/*
+ * Electric/Arc Welder
+ */
+
+/obj/item/weapon/weldingtool/electric //AND HIS WELDING WAS ELECTRIC
+ name = "electric welding tool"
+ icon_state = "arcwelder"
+ max_fuel = 0 //We'll handle the consumption later.
+ var/obj/item/weapon/cell/power_supply //What type of power cell this uses
+ var/charge_cost = 24 //The rough equivalent of 1 unit of fuel, based on us wanting 10 welds per battery
+ var/cell_type = null
+ var/use_external_power = 0 //If in a borg or hardsuit, this needs to = 1
+
+/obj/item/weapon/weldingtool/electric/New()
+ ..()
+ if(cell_type)
+ power_supply = new cell_type(src)
+ else
+ power_supply = new /obj/item/weapon/cell/device(src)
+ update_icon()
+
+/obj/item/weapon/weldingtool/electric/examine(mob/user)
+ ..()
+ if(power_supply)
+ user << text("\icon[] [] has [] charge left.", src, src.name, get_fuel())
+ else
+ user << text("\icon[] [] has power for no power cell!", src, src.name)
+
+/obj/item/weapon/weldingtool/electric/get_fuel()
+ if(use_external_power)
+ var/obj/item/weapon/cell/external = get_external_power_supply()
+ return external.charge
+ else if(power_supply)
+ return power_supply.charge
+ else
+ return 0
+
+/obj/item/weapon/weldingtool/electric/remove_fuel(var/amount = 1, var/mob/M = null)
+ if(!welding)
+ return 0
+ if(get_fuel() >= amount)
+ power_supply.checked_use(charge_cost)
+ if(use_external_power)
+ var/obj/item/weapon/cell/external = get_external_power_supply()
+ if(!external || !external.use(charge_cost)) //Take power from the borg...
+ power_supply.give(charge_cost) //Give it back to the cell.
+ if(M)
+ eyecheck(M)
+ return 1
+ else
+ if(M)
+ M << "You need more energy to complete this task."
+ return 0
+
+/obj/item/weapon/weldingtool/electric/attack_hand(mob/user as mob)
+ if(user.get_inactive_hand() == src)
+ if(power_supply)
+ power_supply.update_icon()
+ user.put_in_hands(power_supply)
+ power_supply = null
+ user << "You remove the cell from the [src]."
+ setWelding(0)
+ update_icon()
+ return
+ ..()
+ else
+ return ..()
+
+/obj/item/weapon/weldingtool/electric/attackby(obj/item/weapon/W, mob/user as mob)
+ if(istype(W, /obj/item/weapon/cell))
+ if(istype(W, /obj/item/weapon/cell/device))
+ if(!power_supply)
+ user.drop_item()
+ W.loc = src
+ power_supply = W
+ user << "You install a cell in \the [src]."
+ update_icon()
+ else
+ user << "\The [src] already has a cell."
+ else
+ user << "\The [src] cannot use that type of cell."
+ else
+ ..()
+
+/obj/item/weapon/weldingtool/electric/proc/get_external_power_supply()
+ if(isrobot(src.loc))
+ var/mob/living/silicon/robot/R = src.loc
+ return R.cell
+ if(istype(src.loc, /obj/item/rig_module))
+ var/obj/item/rig_module/module = src.loc
+ if(module.holder && module.holder.wearer)
+ var/mob/living/carbon/human/H = module.holder.wearer
+ if(istype(H) && H.back)
+ var/obj/item/weapon/rig/suit = H.back
+ if(istype(suit))
+ return suit.cell
+ return null
+
+/obj/item/weapon/weldingtool/electric/mounted
+ use_external_power = 1
+
/*
* Crowbar
*/
diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm
index 0a50fc78cc..971f438a1f 100644
--- a/code/modules/mob/living/silicon/robot/robot_modules.dm
+++ b/code/modules/mob/living/silicon/robot/robot_modules.dm
@@ -312,7 +312,7 @@ var/global/list/robot_modules = list(
src.modules += new /obj/item/weapon/rcd/borg(src)
src.modules += new /obj/item/weapon/screwdriver(src)
src.modules += new /obj/item/weapon/wrench(src)
- src.modules += new /obj/item/weapon/weldingtool/largetank(src)
+ src.modules += new /obj/item/weapon/weldingtool/electric/mounted(src)
src.modules += new /obj/item/weapon/pickaxe/plasmacutter(src)
src.modules += new /obj/item/device/pipe_painter(src)
src.modules += new /obj/item/device/floor_painter(src)
@@ -348,7 +348,7 @@ var/global/list/robot_modules = list(
/obj/item/weapon/robot_module/robot/engineering/general/New()
..()
src.modules += new /obj/item/borg/sight/meson(src)
- src.modules += new /obj/item/weapon/weldingtool/largetank(src)
+ src.modules += new /obj/item/weapon/weldingtool/electric/mounted(src)
src.modules += new /obj/item/weapon/screwdriver(src)
src.modules += new /obj/item/weapon/wrench(src)
src.modules += new /obj/item/weapon/wirecutters(src)
@@ -599,7 +599,7 @@ var/global/list/robot_modules = list(
src.modules += new /obj/item/weapon/gripper/no_use/loader(src)
src.modules += new /obj/item/device/robotanalyzer(src)
src.modules += new /obj/item/weapon/card/robot(src)
- src.modules += new /obj/item/weapon/weldingtool/largetank(src)
+ src.modules += new /obj/item/weapon/weldingtool/electric/mounted(src)
src.modules += new /obj/item/weapon/screwdriver(src)
src.modules += new /obj/item/weapon/wrench(src)
src.modules += new /obj/item/weapon/wirecutters(src)
@@ -686,7 +686,8 @@ var/global/list/robot_modules = list(
/obj/item/weapon/robot_module/drone/New(var/mob/living/silicon/robot/robot)
..()
- src.modules += new /obj/item/weapon/weldingtool(src)
+ src.modules += new /obj/item/borg/sight/meson(src)
+ src.modules += new /obj/item/weapon/weldingtool/electric/mounted(src)
src.modules += new /obj/item/weapon/screwdriver(src)
src.modules += new /obj/item/weapon/wrench(src)
src.modules += new /obj/item/weapon/crowbar(src)
diff --git a/icons/mob/items/lefthand.dmi b/icons/mob/items/lefthand.dmi
index f77c8c5207..8239bf74f3 100644
Binary files a/icons/mob/items/lefthand.dmi and b/icons/mob/items/lefthand.dmi differ
diff --git a/icons/mob/items/righthand.dmi b/icons/mob/items/righthand.dmi
index da47c520be..ff082ada9f 100644
Binary files a/icons/mob/items/righthand.dmi and b/icons/mob/items/righthand.dmi differ
diff --git a/icons/obj/items.dmi b/icons/obj/items.dmi
index c0df5a707f..dc3456ba67 100644
Binary files a/icons/obj/items.dmi and b/icons/obj/items.dmi differ