#define WELDER_FUEL_BURN_INTERVAL 13
/*
* Welding Tool
*/
/obj/item/weldingtool
name = "\improper welding tool"
icon = 'icons/obj/tools.dmi'
icon_state = "welder"
item_state = "welder"
slot_flags = SLOT_BELT
tool_behavior = TOOL_WELDER
suit_storage_class = SUIT_STORAGE_CLASS_SOFTWEAR | SUIT_STORAGE_CLASS_HARDWEAR
belt_storage_class = BELT_CLASS_MEDIUM
//Amount of OUCH when it's thrown
damage_force = 3.0
throw_force = 5.0
throw_speed = 1
throw_range = 5
w_class = WEIGHT_CLASS_SMALL
worth_intrinsic = 35
//Cost to make in the autolathe
materials_base = list(MAT_STEEL = 70, MAT_GLASS = 30)
//R&D tech level
origin_tech = list(TECH_ENGINEERING = 1)
//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
var/acti_sound = 'sound/items/welderactivate.ogg'
var/deac_sound = 'sound/items/welderdeactivate.ogg'
tool_sound = 'sound/items/Welder2.ogg'
var/change_icons = TRUE
var/flame_intensity = 2 //how powerful the emitted light is when used.
var/flame_color = "#FF9933" // What color the welder light emits when its on. Default is an orange-ish color.
var/eye_safety_modifier = 0 // Increasing this will make less eye protection needed to stop eye damage. IE at 1, sunglasses will fully protect.
var/burned_fuel_for = 0 // Keeps track of how long the welder's been on, used to gradually empty the welder if left one, without RNG.
var/always_process = FALSE // If true, keeps the welder on the process list even if it's off. Used for when it needs to regenerate fuel.
tool_speed = 1
drop_sound = 'sound/items/drop/weldingtool.ogg'
pickup_sound = 'sound/items/pickup/weldingtool.ogg'
/obj/item/weldingtool/Initialize(mapload)
. = ..()
// var/random_fuel = min(rand(10,20),max_fuel)
var/datum/reagent_holder/R = new/datum/reagent_holder(max_fuel)
reagents = R
R.my_atom = src
R.add_reagent("fuel", max_fuel)
update_icon()
if(always_process)
START_PROCESSING(SSobj, src)
/obj/item/weldingtool/Destroy()
if(welding || always_process)
STOP_PROCESSING(SSobj, src)
return ..()
/obj/item/weldingtool/examine(mob/user, dist)
. = ..()
if(max_fuel)
. += "[icon2html(thing = src, target = world)] The [src.name] contains [get_fuel()]/[src.max_fuel] units of fuel!"
/obj/item/weldingtool/legacy_mob_melee_hook(mob/target, mob/user, clickchain_flags, list/params, mult, target_zone, intent)
if(ishuman(target) && user.a_intent == INTENT_HELP)
var/mob/living/carbon/human/H = target
var/obj/item/organ/external/S = H.organs_by_name[user.zone_sel.selecting]
if(!S || S.robotic < ORGAN_ROBOT || S.open == 3)
to_chat(user, SPAN_WARNING("That isn't a robotic limb."))
return NONE
if(!welding)
to_chat(user, "You'll need to turn [src] on to patch the damage on [H]'s [S.name]!")
return NONE
if(S.robo_repair(15, DAMAGE_TYPE_BRUTE, "some dents", src, user))
remove_fuel(1, user)
return NONE
if(is_holosphere_shell(target) && user.a_intent == INTENT_HELP)
if(!welding)
to_chat(user, "You'll need to turn [src] on to patch the damage on [target]!")
return NONE
var/mob/living/simple_mob/holosphere_shell/shell = target
shell.shell_repair(10, DAMAGE_TYPE_BRUTE, "some dents", src, user)
remove_fuel(1, user)
return NONE
return ..()
/obj/item/weldingtool/attackby(obj/item/W as obj, mob/living/user as mob)
if(istype(W,/obj/item/tool/screwdriver))
if(welding)
to_chat(user, "Stop welding first!")
return
status = !status
if(status)
to_chat(user, "You secure the welder.")
else
to_chat(user, "The welder can now be attached and modified.")
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/flamethrower/F = new /obj/item/flamethrower(user.drop_location())
forceMove(F)
F.weldtool = src
master = F
reset_plane_and_layer()
add_fingerprint(user)
return
..()
/obj/item/weldingtool/process(delta_time)
if(welding)
++burned_fuel_for
if(burned_fuel_for >= WELDER_FUEL_BURN_INTERVAL)
remove_fuel(1)
if(get_fuel() < 1)
setWelding(0)
else //Only start fires when its on and has enough fuel to actually keep working
var/turf/location = src.loc
if(istype(location, /mob/living))
var/mob/living/M = location
if(M.is_holding(src))
location = get_turf(M)
if (istype(location, /turf))
location.hotspot_expose(700, 5)
/obj/item/weldingtool/afterattack(atom/target, mob/user, clickchain_flags, list/params)
if(!(clickchain_flags & CLICKCHAIN_HAS_PROXIMITY))
return
if(istype(target, /obj/structure/reagent_dispensers/fueltank) || istype(target, /obj/item/reagent_containers/portable_fuelcan) && get_dist(src,target) <= 1)
if(!welding && max_fuel)
target.reagents.trans_to_obj(src, max_fuel)
to_chat(user, "You refill [src].")
playsound(src.loc, 'sound/effects/refill.ogg', 50, 1, -6)
return
else if(!welding)
to_chat(user, "[src] doesn't use fuel.")
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.")
to_chat(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 = target
tank.explode()
return
if (src.welding)
remove_fuel(1)
var/turf/location = get_turf(user)
if(isliving(target))
var/mob/living/L = target
L.IgniteMob()
if (istype(location, /turf))
location.hotspot_expose(700, 50, 1)
/obj/item/weldingtool/attack_self(mob/user, datum/event_args/actor/actor)
. = ..()
if(.)
return
setWelding(!welding, user)
//Returns the amount of fuel in the welder
/obj/item/weldingtool/proc/get_fuel()
return reagents.get_reagent_amount(/datum/reagent/fuel)
/obj/item/weldingtool/proc/get_max_fuel()
return max_fuel
/obj/item/weldingtool/using_as_tool(function, flags, datum/event_args/actor/clickchain/e_args, atom/target, time, cost, usage)
. = ..()
if(!. || function != TOOL_WELDER)
return
if(!isOn())
e_args.chat_feedback(SPAN_WARNING("[src] must be on to be used to weld!"), target)
return FALSE
// floor
var/computed = round(cost * time * TOOL_WELDING_FUEL_PER_DS)
if(get_fuel() < computed)
e_args.chat_feedback(SPAN_WARNING("[src] doesn't have enough fuel left to do that!"), target)
return FALSE
/obj/item/weldingtool/used_as_tool(function, flags, datum/event_args/actor/clickchain/e_args, atom/target, time, cost, usage, success)
. = ..()
if(!.)
return
remove_fuel(round(cost * time * TOOL_WELDING_FUEL_PER_DS))
//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/weldingtool/proc/remove_fuel(var/amount = 1, var/mob/M = null)
if(!welding)
return 0
if(amount)
burned_fuel_for = 0 // Reset the counter since we're removing fuel.
if(get_fuel() >= amount)
reagents.remove_reagent("fuel", amount)
if(M)
eyecheck(M)
update_icon()
return 1
else
if(M)
to_chat(M, "You need more welding fuel to complete this task.")
update_icon()
return 0
//Returns whether or not the welding tool is currently on.
/obj/item/weldingtool/proc/isOn()
return welding
/obj/item/weldingtool/update_icon()
..()
cut_overlays()
var/list/overlays_to_add = list()
// Welding overlay.
if(welding)
var/image/I = image(icon, src, "[icon_state]-on")
overlays_to_add += I
item_state = "[initial(item_state)]1"
else
item_state = initial(item_state)
// Fuel counter overlay.
if(change_icons && get_max_fuel())
var/ratio = get_fuel() / get_max_fuel()
ratio = CEILING(ratio * 4, 1) * 25
var/image/I = image(icon, src, "[icon_state][ratio]")
overlays_to_add += I
add_overlay(overlays_to_add)
// Lights
if(welding && flame_intensity)
set_light(flame_intensity, flame_intensity, flame_color)
else
set_light(0)
update_worn_icon()
//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/weldingtool/proc/setWelding(var/set_welding, var/mob/M)
if(!status) return
var/turf/T = get_turf(src)
//If we're turning it on
if(set_welding && !welding)
if (get_fuel() > 0)
if(M)
to_chat(M, "You switch the [src] on.")
else if(T)
T.visible_message("\The [src] turns on.")
playsound(loc, acti_sound, 50, 1)
src.damage_force = 15
src.damage_type = DAMAGE_TYPE_BURN
src.set_weight_class(WEIGHT_CLASS_BULKY)
src.attack_sound = 'sound/items/welder.ogg'
welding = 1
update_icon()
if(!always_process)
START_PROCESSING(SSobj, src)
else
if(M)
var/msg = max_fuel ? "welding fuel" : "charge"
to_chat(M, "You need more [msg] to complete this task.")
return
//Otherwise
else if(!set_welding && welding)
if(!always_process)
STOP_PROCESSING(SSobj, src)
if(M)
to_chat(M, "You switch \the [src] off.")
else if(T)
T.visible_message("\The [src] turns off.")
playsound(loc, deac_sound, 50, 1)
src.damage_force = 3
src.damage_type = DAMAGE_TYPE_BRUTE
src.set_weight_class(initial(src.w_class))
src.welding = 0
src.attack_sound = initial(src.attack_sound)
update_icon()
//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/weldingtool/proc/eyecheck(mob/living/carbon/user)
if(!istype(user))
return 1
var/safety = user.eyecheck()
safety = clamp( safety + eye_safety_modifier, -1, 2)
if(istype(user, /mob/living/carbon/human))
var/mob/living/carbon/human/H = user
var/obj/item/organ/internal/eyes/E = H.internal_organs_by_name[O_EYES]
if(!E)
return
if(H.nif && H.nif.flag_check(NIF_V_UVFILTER,NIF_FLAGS_VISION))
return
switch(safety)
if(1)
to_chat(usr, "Your eyes sting a little.")
E.damage += rand(1, 2)
if(E.damage > 12)
user.eye_blurry += rand(3,6)
if(0)
to_chat(usr, "Your eyes burn.")
E.damage += rand(2, 4)
if(E.damage > 10)
E.damage += rand(4,10)
if(-1)
to_chat(usr, "Your thermals intensify the welder's glow. Your eyes itch and burn severely.")
user.eye_blurry += rand(12,20)
E.damage += rand(12, 16)
if(safety<2)
if(E.damage > 10)
to_chat(user, "Your eyes are really starting to hurt. This can't be good for you!")
if (E.damage >= E.min_broken_damage)
to_chat(user, "You go blind!")
user.remove_blindness_source( TRAIT_BLINDNESS_EYE_DMG)
else if (E.damage >= E.min_bruised_damage)
to_chat(user, "You go blind!")
user.apply_status_effect(/datum/status_effect/sight/blindness, 5 SECONDS)
user.eye_blurry = 5
user.disabilities |= DISABILITY_NEARSIGHTED
spawn(100)
user.disabilities &= ~DISABILITY_NEARSIGHTED
return
/obj/item/weldingtool/is_hot()
return isOn()
/obj/item/weldingtool/largetank
name = "industrial welding tool"
desc = "A slightly larger welder with a larger tank."
icon_state = "indwelder"
max_fuel = 40
origin_tech = list(TECH_ENGINEERING = 2, TECH_PHORON = 2)
materials_base = list(MAT_STEEL = 70, MAT_GLASS = 60)
/obj/item/weldingtool/largetank/cyborg
name = "integrated welding tool"
desc = "An advanced welder designed to be used in robotic systems."
tool_speed = 0.5
/obj/item/weldingtool/hugetank
name = "upgraded welding tool"
desc = "A much larger welder with a huge tank."
icon_state = "indwelder"
max_fuel = 80
w_class = WEIGHT_CLASS_NORMAL
origin_tech = list(TECH_ENGINEERING = 3)
materials_base = list(MAT_STEEL = 70, MAT_GLASS = 120)
/obj/item/weldingtool/mini
name = "emergency welding tool"
desc = "A miniature welder used during emergencies."
icon_state = "miniwelder"
max_fuel = 10
w_class = WEIGHT_CLASS_SMALL
materials_base = list(MAT_METAL = 30, MAT_GLASS = 10)
change_icons = 0
tool_speed = 2
eye_safety_modifier = 1 // Safer on eyes.
/obj/item/weldingtool/bone
name = "Elder's Bellows"
desc = "A curious welding tool that uses an anomalous crystal and a bellows to create heat."
icon = 'icons/obj/lavaland.dmi'
icon_state = "ashwelder"
max_fuel = 20
materials_base = list(MAT_METAL = 30, MAT_BONE = 10)
tool_speed = 3 ///It doesn't get that hot
eye_safety_modifier = 3 // Safe for Scorians who don't have goggles.
always_process = TRUE
//I can't currently think of a good vector for welding fuel. Plus these welders are like, magic anyways, so.
/obj/item/weldingtool/bone/process(delta_time)
if(get_fuel() <= get_max_fuel())
reagents.add_reagent("fuel", 1)
..()
/obj/item/weldingtool/brass
name = "brass welding tool"
desc = "A brass plated welder utilizing an antiquated, yet incredibly efficient, fuel system."
icon_state = "brasswelder"
max_fuel = 40
materials_base = list(MAT_STEEL = 70, "brass" = 60)
tool_speed = 0.75
/datum/category_item/catalogue/anomalous/precursor_a/alien_welder
name = "Precursor Alpha Object - Self Refueling Exothermic Tool"
desc = "An unwieldly tool which somewhat resembles a weapon, due to \
having a prominent trigger attached to the part which would presumably \
have been held by whatever had created this object. When the trigger is \
held down, a small but very high temperature flame shoots out from the \
tip of the tool. The grip is able to be held by human hands, however the \
shape makes it somewhat awkward to hold.\
\
The tool appears to utilize an unknown fuel to light and maintain the \
flame. What is more unusual, is that the fuel appears to replenish itself. \
How it does this is not known presently, however experimental human-made \
welders have been known to have a similar quality.\
\
Interestingly, the flame is able to cut through a wide array of materials, \
such as iron, steel, stone, lead, plasteel, and even durasteel. Yet, it is unable \
to cut the unknown material that itself and many other objects made by this \
precursor civilization have made. This raises questions on the properties of \
that material, and how difficult it would have been to work with. This tool \
does demonstrate, however, that the alien fuel cannot melt precursor beams, walls, \
or other structual elements, making it rather limited for their \
deconstruction purposes."
value = CATALOGUER_REWARD_EASY
/obj/item/weldingtool/alien
name = "alien welding tool"
desc = "An alien welding tool. Whatever fuel it uses, it never runs out."
catalogue_data = list(/datum/category_item/catalogue/anomalous/precursor_a/alien_welder)
icon = 'icons/obj/abductor.dmi'
icon_state = "welder"
tool_speed = 0.1
flame_color = "#6699FF" // Light bluish.
eye_safety_modifier = 2
change_icons = 0
origin_tech = list(TECH_PHORON = 5 ,TECH_ENGINEERING = 5)
always_process = TRUE
/obj/item/weldingtool/alien/process(delta_time)
if(get_fuel() <= get_max_fuel())
reagents.add_reagent("fuel", 1)
..()
/obj/item/weldingtool/experimental
name = "experimental welding tool"
desc = "An experimental welder capable of synthesizing its own fuel from waste compounds. It can output a flame hotter than regular welders."
icon_state = "exwelder"
max_fuel = 40
w_class = WEIGHT_CLASS_NORMAL
origin_tech = list(TECH_ENGINEERING = 4, TECH_PHORON = 3)
materials_base = list(MAT_STEEL = 70, MAT_GLASS = 120)
tool_speed = 0.5
change_icons = 0
flame_intensity = 3
always_process = TRUE
var/nextrefueltick = 0
/obj/item/weldingtool/experimental/process(delta_time)
..()
if(get_fuel() < get_max_fuel() && nextrefueltick < world.time)
nextrefueltick = world.time + 10
reagents.add_reagent("fuel", 1)
/obj/item/weldingtool/experimental/brass
name = "replica clockwork welding tool"
desc = "A re-engineered experimental welder. It sports anti-corrosive brass fittings, and a further refined fuel system."
icon = 'icons/obj/clockwork.dmi'
icon_state = "clockwelder"
max_fuel = 50
tool_speed = 0.4
flame_color = "#990000" // deep red, as the sprite shows
change_icons = 0
/obj/item/weldingtool/experimental/clockwork
name = "clockwork welding tool"
desc = "An antique welding tool, adorned with brass, and a brilliant red gem as the fuel tank. It neither runs out of fuel, nor harms the unprotected eye."
icon = 'icons/obj/clockwork.dmi'
icon_state = "clockwelder"
max_fuel = 100
eye_safety_modifier = 2
tool_sound = 'sound/machines/clockcult/steam_whoosh.ogg'
tool_speed = 0.1
flame_color = "#990000" // deep red, as above, so below
change_icons = 0
/obj/item/weldingtool/experimental/clockwork/examine(mob/user, dist)
. = ..()
. += SPAN_NEZBERE("Sometimes, the best masterworks are lessons in rediscovering simplicity. Thousands upon thousands of these passed through the Great Forgeworks, and out into the void. Treasure this find, friend.")
/obj/item/weldingtool/experimental/hybrid
name = "strange welding tool"
desc = "An experimental welder capable of synthesizing its own fuel from spatial waveforms. It's like welding with a star!"
icon_state = "hybwelder"
max_fuel = 80
eye_safety_modifier = -2 // Brighter than the sun. Literally, you can look at the sun with a welding mask of proper grade, this will burn through that.
weight = ITEM_WEIGHT_HYBRID_TOOLS
tool_speed = 0.25
w_class = WEIGHT_CLASS_BULKY
flame_intensity = 5
origin_tech = list(TECH_ENGINEERING = 5, TECH_PHORON = 4, TECH_PRECURSOR = 1)
reach = 2
/*
* Backpack Welder.
*/
/obj/item/weldingtool/tubefed
name = "tube-fed welding tool"
desc = "A bulky, cooler-burning welding tool that draws from a worn welding tank."
icon_state = "tubewelder"
max_fuel = 10
w_class = WEIGHT_CLASS_HUGE
materials_base = null
tool_speed = 1.25
change_icons = 0
flame_intensity = 1
eye_safety_modifier = 1
always_process = TRUE
var/obj/item/weldpack/mounted_pack = null
/obj/item/weldingtool/tubefed/Initialize(mapload)
. = ..()
if(istype(loc, /obj/item/weldpack))
var/obj/item/weldpack/holder = loc
mounted_pack = holder
else
qdel(src)
/obj/item/weldingtool/tubefed/Destroy()
mounted_pack.nozzle = null
mounted_pack = null
return ..()
/obj/item/weldingtool/tubefed/process(delta_time)
if(mounted_pack)
if(!istype(mounted_pack.loc,/mob/living/carbon/human))
mounted_pack.return_nozzle()
else
var/mob/living/carbon/human/H = mounted_pack.loc
if(H.back != mounted_pack)
mounted_pack.return_nozzle()
if(mounted_pack.loc != src.loc && src.loc != mounted_pack)
mounted_pack.return_nozzle()
visible_message("\The [src] retracts to its fueltank.")
if(get_fuel() <= get_max_fuel())
mounted_pack.reagents.trans_to_obj(src, 1)
..()
/obj/item/weldingtool/tubefed/dropped(mob/user, flags, atom/newLoc)
..()
if(src.loc != user)
mounted_pack.return_nozzle()
to_chat(user, "\The [src] retracts to its fueltank.")
/obj/item/weldingtool/tubefed/survival
name = "tube-fed emergency welding tool"
desc = "A bulky, cooler-burning welding tool that draws from a worn welding tank."
icon_state = "tubewelder"
max_fuel = 5
tool_speed = 1.75
eye_safety_modifier = 2
//Welder Spear
/obj/item/weldingtool/welder_spear
name = "welder spear"
desc = "A miniature welder attached to a spear, providing more reach. Typically used by Tyrmalin workers."
icon_state = "welderspear"
max_fuel = 10
w_class = WEIGHT_CLASS_NORMAL
materials_base = list(MAT_METAL = 50, MAT_GLASS = 10)
tool_speed = 1.5
eye_safety_modifier = 1 // Safer on eyes.
reach = 2
/obj/item/weldingtool/welder_spear/Initialize(mapload)
. = ..()
AddComponent(/datum/component/jousting)
/*
* Electric/Arc Welder
*/
/obj/item/weldingtool/electric //AND HIS WELDING WAS ELECTRIC
name = "electric welding tool"
desc = "A welder which runs off of electricity."
icon_state = "arcwelder"
max_fuel = 0 //We'll handle the consumption later.
item_state = "ewelder"
worth_intrinsic = 70
var/charge_cost = 24 //The rough equivalent of 1 unit of fuel, based on us wanting 10 welds per battery
var/use_external_power = 0 //If in a borg or hardsuit, this needs to = 1
flame_color = "#00CCFF" // Blue-ish, to set it apart from the gas flames.
acti_sound = /datum/soundbyte/sparks
deac_sound = /datum/soundbyte/sparks
var/cell_type = /obj/item/cell/basic/tier_1/small
var/cell_accept = CELL_TYPE_SMALL | CELL_TYPE_WEAPON
/obj/item/weldingtool/electric/Initialize(mapload)
init_cell_slot_easy_tool(cell_type, cell_accept)
. = ..()
update_icon()
/obj/item/weldingtool/electric/object_cell_slot_inserted(obj/item/cell/cell, datum/object_system/cell_slot/slot)
. = ..()
update_icon()
/obj/item/weldingtool/electric/object_cell_slot_removed(obj/item/cell/cell, datum/object_system/cell_slot/slot)
. = ..()
update_icon()
setWelding(FALSE)
/obj/item/weldingtool/electric/examine(mob/user, dist)
. = ..()
if(get_dist(src, user) > 1)
return
else // The << need to stay, for some reason no they dont
var/obj/item/cell/power_supply = obj_cell_slot.cell
if(power_supply)
. += "[icon2html(thing = src, target = world)] The [src] has [get_fuel()] charge left."
else
. += "[icon2html(thing = src, target = world)] The [src] has no power cell!"
/obj/item/weldingtool/electric/get_fuel()
var/obj/item/cell/power_supply = get_cell()
if(use_external_power)
var/obj/item/cell/external = get_external_power_supply()
if(external)
return external.charge
else if(power_supply)
return power_supply.charge
else
return 0
/obj/item/weldingtool/electric/get_max_fuel()
var/obj/item/cell/power_supply = get_cell()
if(use_external_power)
var/obj/item/cell/external = get_external_power_supply()
if(external)
return external.max_charge
else if(power_supply)
return power_supply.max_charge
return 0
/obj/item/weldingtool/electric/remove_fuel(var/amount = 1, var/mob/M = null)
var/obj/item/cell/power_supply = get_cell()
if(!welding)
return 0
if(get_fuel() >= amount)
power_supply.checked_use(charge_cost)
if(use_external_power)
var/obj/item/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)
update_icon()
return 1
else
if(M)
to_chat(M, "You need more energy to complete this task.")
update_icon()
return 0
/obj/item/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/hardsuit_module))
var/obj/item/hardsuit_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/hardsuit/suit = H.back
if(istype(suit))
return suit.cell
return null
/obj/item/weldingtool/electric/unloaded
cell_type = null
/obj/item/weldingtool/electric/mounted
use_external_power = 1
/obj/item/weldingtool/electric/mounted/cyborg
tool_speed = 0.5
/obj/item/weldingtool/electric/mounted/RIGset
name = "arc welder"
tool_speed = 0.7 // Let's see if this works with RIGs
desc = "If you're seeing this, someone did a dum-dum."
/obj/item/weldingtool/electric/mounted/exosuit
var/obj/item/vehicle_module/equip_mount = null
flame_intensity = 1
eye_safety_modifier = 2
always_process = TRUE
/obj/item/weldingtool/electric/mounted/exosuit/Initialize(mapload)
. = ..()
if(istype(loc, /obj/item/vehicle_module))
equip_mount = loc
/obj/item/weldingtool/electric/mounted/exosuit/process()
..()
if(equip_mount && equip_mount.chassis)
var/obj/vehicle/sealed/mecha/M = equip_mount.chassis
if(M.selected == equip_mount && get_fuel())
setWelding(TRUE, M.occupant_legacy)
else
setWelding(FALSE, M.occupant_legacy)
#undef WELDER_FUEL_BURN_INTERVAL
/obj/item/weldingtool/electric/crystal
name = "crystalline arc welder"
desc = "A crystalline welding tool of an alien make."
icon_state = "crystal_welder"
item_state = "crystal_tool"
icon = 'icons/obj/crystal_tools.dmi'
materials_base = list(MATERIAL_CRYSTAL = 1250)
cell_type = null
charge_cost = null
tool_speed = 0.2
use_external_power = 1
/obj/item/weldingtool/electric/crystal/attackby(var/obj/item/W, var/mob/user)
return
/obj/item/weldingtool/electric/crystal/update_icon()
. = ..()
icon_state = welding ? "crystal_welder_on" : "crystal_welder"
item_state = welding ? "crystal_tool_lit" : "crystal_tool"
update_worn_icon()
/obj/item/weldingtool/electric/crystal/attack_self(mob/user, datum/event_args/actor/actor)
var/mob/living/carbon/human/H = user
if(!istype(H))
return
if(H.species.name == SPECIES_ADHERENT)
if(user.nutrition >= 40)
setWelding(!welding, user)
else
to_chat(user, "You need more charge to activate your arc welder.")
else
to_chat(user, "This tool is beyond your understanding.")
/obj/item/weldingtool/electric/crystal/get_fuel()
if(ishuman(src.loc))
var/mob/living/carbon/human/R = src.loc
if(R.species.name == SPECIES_ADHERENT)
return R.nutrition
else
return
/obj/item/weldingtool/electric/crystal/get_external_power_supply()
return get_fuel()
/obj/item/weldingtool/electric/crystal/get_max_fuel()
return get_fuel()
/obj/item/weldingtool/electric/crystal/remove_fuel(var/amount = 1, var/mob/M = null)
if(ishuman(src.loc))
var/mob/living/carbon/human/R = src.loc
if(R.species.name == SPECIES_ADHERENT)
if(R.nutrition >= amount)
R.nutrition = R.nutrition - amount
return 1
else
if(M)
to_chat(M, "You need more energy to complete this task.")
update_icon()
return 0