From 794bd0ab6f9c573183bff1ca44d304d5a4bb7541 Mon Sep 17 00:00:00 2001 From: Mechoid Date: Tue, 31 Oct 2017 20:07:14 -0700 Subject: [PATCH] Adds a mounted welder to the welderpacks in engineering. --- code/game/objects/items/weapons/tools.dm | 55 +++++++++ .../objects/items/weapons/weldbackpack.dm | 110 ++++++++++++++++-- icons/obj/tools.dmi | Bin 9629 -> 10116 bytes 3 files changed, 157 insertions(+), 8 deletions(-) diff --git a/code/game/objects/items/weapons/tools.dm b/code/game/objects/items/weapons/tools.dm index 2c56cd690bd..045f910190a 100644 --- a/code/game/objects/items/weapons/tools.dm +++ b/code/game/objects/items/weapons/tools.dm @@ -656,6 +656,61 @@ nextrefueltick = world.time + 10 reagents.add_reagent("fuel", 1) +/* + * Backpack Welder. + */ + +/obj/item/weapon/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 = ITEMSIZE_NO_CONTAINER + matter = null + toolspeed = 1.25 + change_icons = 0 + flame_intensity = 1 + eye_safety_modifier = 1 + always_process = TRUE + var/obj/item/weapon/weldpack/mounted_pack = null + +/obj/item/weapon/weldingtool/tubefed/New(location) + ..() + if(istype(location, /obj/item/weapon/weldpack)) + var/obj/item/weapon/weldpack/holder = location + mounted_pack = holder + else + qdel(src) + +/obj/item/weapon/weldingtool/tubefed/Destroy() + mounted_pack.nozzle = null + mounted_pack = null + return ..() + +/obj/item/weapon/weldingtool/tubefed/process() + 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/weapon/weldingtool/tubefed/dropped(mob/user) + ..() + if(src.loc != user) + mounted_pack.return_nozzle() + to_chat(user, "\The [src] retracts to its fueltank.") + /* * Electric/Arc Welder */ diff --git a/code/game/objects/items/weapons/weldbackpack.dm b/code/game/objects/items/weapons/weldbackpack.dm index 6a6d77521ec..0312ca55f8b 100644 --- a/code/game/objects/items/weapons/weldbackpack.dm +++ b/code/game/objects/items/weapons/weldbackpack.dm @@ -6,46 +6,140 @@ icon_state = "welderpack" w_class = ITEMSIZE_LARGE var/max_fuel = 350 + var/obj/item/weapon/nozzle = null //Attached welder, or other spray device. + var/nozzle_attached = 0 /obj/item/weapon/weldpack/New() var/datum/reagents/R = new/datum/reagents(max_fuel) //Lotsa refills reagents = R R.my_atom = src R.add_reagent("fuel", max_fuel) + nozzle = new/obj/item/weapon/weldingtool/tubefed(src) + nozzle_attached = 1 + +/obj/item/weapon/weldpack/Destroy() + qdel(nozzle) + nozzle = null + return ..() + +/obj/item/weapon/weldpack/dropped(mob/user) + ..() + if(nozzle) + user.remove_from_mob(nozzle) + return_nozzle() + to_chat(user, "\The [nozzle] retracts to its fueltank.") + +/obj/item/weapon/weldpack/proc/get_nozzle(var/mob/living/user) + if(!ishuman(user)) + return 0 + + var/mob/living/carbon/human/H = user + + if(H.hands_are_full()) //Make sure our hands aren't full. + to_chat(H, "Your hands are full. Drop something first.") + return 0 + + var/obj/item/weapon/F = nozzle + H.put_in_hands(F) + nozzle_attached = 0 + + return 1 + +/obj/item/weapon/weldpack/proc/return_nozzle(var/mob/living/user) + nozzle.forceMove(src) + nozzle_attached = 1 /obj/item/weapon/weldpack/attackby(obj/item/W as obj, mob/user as mob) - if(istype(W, /obj/item/weapon/weldingtool)) + if(istype(W, /obj/item/weapon/weldingtool) && !(W == nozzle)) var/obj/item/weapon/weldingtool/T = W if(T.welding & prob(50)) message_admins("[key_name_admin(user)] triggered a fueltank explosion.") log_game("[key_name(user)] triggered a fueltank explosion.") - user << "That was stupid of you." + to_chat(user,"That was stupid of you.") explosion(get_turf(src),-1,0,2) if(src) qdel(src) return - else + else if(T.status) if(T.welding) - user << "That was close!" + to_chat(user,"That was close!") src.reagents.trans_to_obj(W, T.max_fuel) - user << "Welder refilled!" + to_chat(user, "Welder refilled!") playsound(src.loc, 'sound/effects/refill.ogg', 50, 1, -6) return - user << "The tank scoffs at your insolence. It only provides services to welders." + else if(nozzle) + if(nozzle == W) + if(!user.unEquip(W)) + to_chat(user,"\The [W] seems to be stuck to your hand.") + return + if(!nozzle_attached) + return_nozzle() + to_chat(user,"You attach \the [W] to the [src].") + return + else + to_chat(user,"The [src] already has a nozzle!") + else + to_chat(user,"The tank scoffs at your insolence. It only provides services to welders.") return +/obj/item/weapon/weldpack/attack_hand(mob/user as mob) + if(istype(user, /mob/living/carbon/human)) + var/mob/living/carbon/human/wearer = user + if(wearer.back == src) + if(nozzle && nozzle_attached) + if(!wearer.incapacitated()) + get_nozzle(user) + else + to_chat(user,"\The [src] does not have a nozzle attached!") + else + ..() + else + ..() + /obj/item/weapon/weldpack/afterattack(obj/O as obj, mob/user as mob, proximity) if(!proximity) // this replaces and improves the get_dist(src,O) <= 1 checks used previously return if (istype(O, /obj/structure/reagent_dispensers/fueltank) && src.reagents.total_volume < max_fuel) O.reagents.trans_to_obj(src, max_fuel) - user << "You crack the cap off the top of the pack and fill it back up again from the tank." + to_chat(user,"You crack the cap off the top of the pack and fill it back up again from the tank.") playsound(src.loc, 'sound/effects/refill.ogg', 50, 1, -6) return else if (istype(O, /obj/structure/reagent_dispensers/fueltank) && src.reagents.total_volume == max_fuel) - user << "The pack is already full!" + to_chat(user,"The pack is already full!") return +/obj/item/weapon/weldpack/MouseDrop(obj/over_object as obj) //This is terrifying. + if(!canremove) + return + + if (ishuman(usr) || issmall(usr)) //so monkeys can take off their backpacks -- Urist + + if (istype(usr.loc,/obj/mecha)) // stops inventory actions in a mech. why? + return + + if (!( istype(over_object, /obj/screen) )) + return ..() + + //makes sure that the thing is equipped, so that we can't drag it into our hand from miles away. + //there's got to be a better way of doing this. + if (!(src.loc == usr) || (src.loc && src.loc.loc == usr)) + return + + if (( usr.restrained() ) || ( usr.stat )) + return + + if ((src.loc == usr) && !(istype(over_object, /obj/screen)) && !usr.unEquip(src)) + return + + switch(over_object.name) + if("r_hand") + usr.u_equip(src) + usr.put_in_r_hand(src) + if("l_hand") + usr.u_equip(src) + usr.put_in_l_hand(src) + src.add_fingerprint(usr) + /obj/item/weapon/weldpack/examine(mob/user) ..(user) user << text("\icon[] [] units of fuel left!", src, src.reagents.total_volume) diff --git a/icons/obj/tools.dmi b/icons/obj/tools.dmi index 5e1ad9e8e0f5239b0415f9843ccc1727708f79be..9cbb46748aed4cfc660b96fd2c8abd68482eb187 100644 GIT binary patch literal 10116 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