Merge branch 'master' of https://github.com/tgstation/-tg-station into drugs

Conflicts:
	code/modules/food&drinks/food/snacks_meat.dm
	code/modules/reagents/Chemistry-Reagents/Consumable-Reagents/Food-Reagents.dm
	icons/obj/drinks.dmi
	icons/obj/food.dmi
This commit is contained in:
Iamgoofball
2015-02-20 22:00:53 -08:00
295 changed files with 7506 additions and 5885 deletions
+1 -1
View File
@@ -54,7 +54,7 @@
for(var/mob/O in viewers(usr, null))
O.show_message(flavor_text, 1)
SetLuminosity(CANDLE_LUMINOSITY)
SSobj.processing.Add(src)
SSobj.processing |= src
/obj/item/candle/process()
@@ -125,7 +125,8 @@
master.disrupt()
/obj/effect/dummy/chameleon/relaymove(var/mob/user, direction)
if(istype(loc, /turf/space)) return //No magical space movement!
if(istype(loc, /turf/space) || !direction)
return //No magical space movement!
if(can_move)
can_move = 0
@@ -283,7 +283,7 @@ obj/item/device/flashlight/lamp/bananalamp
/obj/item/device/flashlight/emp/New()
..()
SSobj.processing.Add(src)
SSobj.processing |= src
/obj/item/device/flashlight/emp/Destroy()
SSobj.processing.Remove(src)
@@ -186,7 +186,7 @@
if(energy <= max_energy)
if(!recharging)
recharging = 1
SSobj.processing.Add(src)
SSobj.processing |= src
if(energy <= 0)
user << "<span class='warning'>You've overused the battery of [src], now it needs time to recharge!</span>"
recharge_locked = 1
+1 -1
View File
@@ -47,7 +47,7 @@
if(OPERATING)
if(!attached)
return
SSobj.processing.Add(src)
SSobj.processing |= src
anchored = 1
mode = value
+1 -1
View File
@@ -25,7 +25,7 @@ MASS SPECTROMETER
icon_state = copytext(icon_state, 1, length(icon_state))+"[on]"
if(on)
SSobj.processing.Add(src)
SSobj.processing |= src
/obj/item/device/t_scanner/process()
+247
View File
@@ -0,0 +1,247 @@
#define MAX_TAPE_RANGE 3
//The max length of a line of hazard tape by tile range
//Define all tape types in hazardtape.dm
/obj/item/tapeproj
icon = 'icons/obj/holotape.dmi'
icon_state = "rollstart"
w_class = 2.0
var/turf/start
var/turf/end
var/tape_type = /obj/item/holotape
var/icon_base
var/charging = 0
/obj/item/holotape
icon = 'icons/obj/holotape.dmi'
anchored = 1
density = 1
var/icon_base
var/health = 10
/obj/item/tapeproj/security
name = "security holotape projector"
desc = "A security hard-light holotape projector used to create holotape. It can be placed in segments along hallways or on airlocks to signify crime scenes."
icon_state = "security_start"
tape_type = /obj/item/holotape/security
icon_base = "security"
/obj/item/holotape/security
name = "security holotape"
desc = "A length of security hard-light holotape. It reads: SECURITY LINE | DO NOT CROSS."
icon_base = "security"
/obj/item/tapeproj/engineering
name = "engineering holotape projector"
desc = "An engineering hard-light holotape projector used to create holotape. It can be placed in segments along hallways or on airlocks to show hazardous areas."
icon_state = "engineering_start"
tape_type = /obj/item/holotape/engineering
icon_base = "engineering"
/obj/item/holotape/engineering
name = "engineering holotape"
desc = "A length of engineering hard-light holotape. It reads: HAZARD AHEAD // DO NOT CROSS."
icon_base = "engineering"
/obj/item/tapeproj/dropped()
reset()
/obj/item/tapeproj/equipped()
reset()
/obj/item/tapeproj/proc/reset()
if(icon_state == "[icon_base]_stop")
icon_state = "[icon_base]_start"
start = null
return
/obj/item/tapeproj/attack_self(var/mob/user)
if(charging)
usr << "<span class='warning'>[src] is recharging!</span>"
return
if(icon_state == "[icon_base]_start")
start = get_turf(src)
usr << "<span class='notice'>You project the start of the [icon_base] holotape.</span>"
icon_state = "[icon_base]_stop"
else
icon_state = "[icon_base]_start"
end = get_turf(src)
if(start.y != end.y && start.x != end.x || start.z != end.z)
usr << "<span class='warning'>[src] can only be projected horizontally or vertically.</span>"
return
if(get_dist(start,end) >= MAX_TAPE_RANGE)
usr << "<span class='warning'>Your holotape segment is too long! It must be [MAX_TAPE_RANGE] tiles long or shorter!</span>"
return
var/turf/cur = start
var/dir
if(start.x == end.x)
var/d = end.y-start.y
if(d) d = d/abs(d)
end = get_turf(locate(end.x,end.y+d,end.z))
dir = "v"
else
var/d = end.x-start.x
if(d) d = d/abs(d)
end = get_turf(locate(end.x+d,end.y,end.z))
dir = "h"
var/can_place = 1
while (cur!=end && can_place)
if(cur.density == 1)
can_place = 0
else if(istype(cur, /turf/space))
can_place = 0
else
for(var/obj/O in cur)
if(!istype(O, /obj/item/holotape) && O.density)
can_place = 0
break
cur = get_step_towards(cur,end)
if(!can_place)
usr << "<span class='warning'>You can't project the [icon_base] holotape through that!</span>"
return
cur = start
var/tapetest = 0
while (cur!=end)
for(var/obj/item/holotape/Ptest in cur)
if(Ptest.icon_state == "[Ptest.icon_base]_[dir]")
tapetest = 1
if(tapetest != 1)
var/obj/item/holotape/P = new tape_type(cur)
P.icon_state = "[P.icon_base]_[dir]"
cur = get_step_towards(cur,end)
usr << "<span class='notice'>You finish project the legnth of [icon_base] holotape.</span>"
user.visible_message("<span class='warning'>[user] finishes projecting the length of [icon_base] holotape.</span>")
charging = 1
spawn(40)
charging = 0
/obj/item/tapeproj/afterattack(atom/target, mob/user, proximity_flag, click_parameters)
if(charging)
return
if(proximity_flag == 0) // not adjacent
return
if(istype(target, /obj/machinery/door/airlock) || istype(target, /obj/machinery/door/firedoor) || istype(target, /obj/structure/window))
var/turf = get_turf(target)
if(locate(tape_type) in turf) //Don't you dare stack tape
return
if(istype(target, /obj/structure/window))
var/obj/structure/window/W = target
if(!(W.dir == 5) || !(W.fulltile == 1))
return
user << "<span class='notice'>You start projecting the [icon_base] holotape onto [target].</span>"
if(!do_mob(user, target, 30))
return
var/atom/tape = new tape_type(turf)
tape.icon_state = "[icon_base]_door"
tape.layer = 3.2
user << "<span class='notice'>You project the [icon_base] holotape onto [target].</span>"
charging = 1
spawn(40)
charging = 0
/obj/item/holotape/Bumped(var/mob/living/carbon/C)
if(C.m_intent == "walk")
var/turf/T = get_turf(src)
C.loc = T
/obj/item/holotape/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
if(!density) return 1
if(air_group || (height==0)) return 1
if((mover.flags & PASSGLASS || istype(mover, /obj/effect/meteor) || mover.throwing == 1) )
return 1
else
return 0
/obj/item/holotape/attack_hand(mob/living/user)
user.changeNext_move(CLICK_CD_MELEE)
user.do_attack_animation(src)
playsound(loc, 'sound/weapons/Egloves.ogg', 80, 1)
user.visible_message("<span class='warning'>[user] hits [src].</span>", \
"<span class='warning'>You hit [src].</span>" )
health -= rand(1,2)
healthcheck()
/obj/item/holotape/proc/healthcheck()
if(health <= 0)
breaktape()
/obj/item/holotape/ex_act(severity, target)
breaktape()
/obj/item/holotape/blob_act()
breaktape()
/obj/item/holotape/attack_paw(mob/living/user)
attack_hand(user)
/obj/item/holotape/bullet_act(var/obj/item/projectile/Proj)
if((Proj.damage_type == BRUTE || Proj.damage_type == BURN))
health -= Proj.damage
..()
if(health <= 0)
breaktape()
return
/obj/item/holotape/attackby(obj/item/weapon/W as obj, mob/user as mob)
user.changeNext_move(CLICK_CD_MELEE)
add_fingerprint(user)
health -= W.force * 0.3
healthcheck()
..()
return
/obj/item/holotape/hitby(AM as mob|obj)
..()
visible_message("<span class='danger'>[src] was hit by [AM].</span>")
var/tforce = 0
if(ismob(AM))
tforce = 5
else if(isobj(AM))
var/obj/item/I = AM
tforce = max(0, I.throwforce * 0.5)
playsound(loc, 'sound/weapons/Egloves.ogg', 80, 1)
health = max(0, health - tforce)
healthcheck()
/obj/item/holotape/proc/breaktape()
var/dir[2]
var/icon_dir = src.icon_state
if(icon_dir == "[src.icon_base]_h")
dir[1] = EAST
dir[2] = WEST
if(icon_dir == "[src.icon_base]_v")
dir[1] = NORTH
dir[2] = SOUTH
for(var/i=1;i<3;i++)
var/N = 0
var/turf/cur = get_step(src,dir[i])
while(N != 1)
N = 1
for (var/obj/item/holotape/P in cur)
if(P.icon_state == icon_dir)
N = 0
del(P)
cur = get_step(cur,dir[i])
del(src)
return
#undef MAX_TAPE_RANGE
+1 -1
View File
@@ -55,5 +55,5 @@
var/obj/item/weapon/tank/T = W
blow(T, user)
return
if (is_sharp(W) || is_hot(W))
if (is_sharp(W) || is_hot(W) || is_pointed(W))
burst()
@@ -149,7 +149,7 @@
R.module.modules += new/obj/item/weapon/tank/jetpack/carbondioxide(R.module)
for(var/obj/item/weapon/tank/jetpack/carbondioxide in R.module.modules)
R.internals = src
R.icon_state="Miner+j"
R.jetpackoverlay = 1
R.module.rebuild()
return 1
@@ -101,6 +101,11 @@
desc = "A roll of cloth roughly cut from something that can stop bleeding, but does not heal wounds."
stop_bleeding = 900
/obj/item/stack/medical/gauze/cyborg/
m_amt = 0
is_cyborg = 1
cost = 250
/obj/item/stack/medical/ointment
name = "ointment"
desc = "Used to treat those nasty burn wounds."
+11 -1
View File
@@ -34,7 +34,6 @@ var/global/list/datum/stack_recipe/rod_recipes = list ( \
icon_state = "rods"
/obj/item/stack/rods/attackby(obj/item/W as obj, mob/user as mob)
..()
if (istype(W, /obj/item/weapon/weldingtool))
var/obj/item/weapon/weldingtool/WT = W
@@ -55,6 +54,17 @@ var/global/list/datum/stack_recipe/rod_recipes = list ( \
if (!R && replace)
user.put_in_hands(new_item)
return
if(istype(W,/obj/item/weapon/reagent_containers/food/snacks))
var/obj/item/weapon/reagent_containers/food/snacks/S = W
if(amount != 1)
user << "<span class='warning'>You must use a single rod.</span>"
else if(S.w_class > 2)
user << "<span class='warning'>The ingredient is too big for [src].</span>"
else
var/obj/item/weapon/reagent_containers/food/snacks/customizable/A = new/obj/item/weapon/reagent_containers/food/snacks/customizable/kebab(get_turf(src))
A.initialize_custom_food(src, S, user)
return
..()
/obj/item/stack/rods/cyborg/
-4
View File
@@ -40,10 +40,6 @@
name = "plate"
icon_state = "plate"
/obj/item/trash/snack_bowl
name = "snack bowl"
icon_state = "snack_bowl"
/obj/item/trash/pistachios
name = "pistachios pack"
icon_state = "pistachios_pack"
@@ -176,7 +176,7 @@
update_icon()
desc = initial(desc) + "<br><span class='info'>It appears to contain [target.name].</span>"
SSobj.processing.Add(src)
SSobj.processing |= src
/obj/effect/chrono_field/Destroy()
if(gun && gun.field_check(src))
@@ -50,7 +50,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
name = "lit match"
desc = "A match. This one is lit."
attack_verb = list("burnt","singed")
SSobj.processing.Add(src)
SSobj.processing |= src
update_icon()
return
@@ -185,7 +185,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
if(flavor_text)
var/turf/T = get_turf(src)
T.visible_message(flavor_text)
SSobj.processing.Add(src)
SSobj.processing |= src
//can't think of any other way to update the overlays :<
if(ismob(loc))
@@ -475,7 +475,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
user.visible_message("<span class='notice'>After a few attempts, [user] manages to light [src], they however burn their finger in the process.</span>")
user.AddLuminosity(1)
SSobj.processing.Add(src)
SSobj.processing |= src
else
lit = 0
icon_state = icon_off
+46 -16
View File
@@ -18,6 +18,7 @@
var/powered = 0 //if there's a cell in the defib with enough power for a revive, blocks paddles from reviving otherwise
var/obj/item/weapon/twohanded/shockpaddles/paddles
var/obj/item/weapon/stock_parts/cell/high/bcell = null
var/combat = 0 //can we revive through space suits?
/obj/item/weapon/defibrillator/New() //starts without a cell for rnd
..()
@@ -103,7 +104,6 @@
if(W == paddles)
paddles.unwield()
toggle_paddles()
return
if(istype(W, /obj/item/weapon/stock_parts/cell))
var/obj/item/weapon/stock_parts/cell/C = W
if(bcell)
@@ -221,20 +221,49 @@
paddles.update_icon()
update_icon()
/obj/item/weapon/defibrillator/combatdefibrillator
name = "combat defibrillator"
desc = "A expensive combat oriented defibrillator. It is more compact that civilian models."
icon_state = "combatdefibunit"
item_state = "combatdefibunit"
/obj/item/weapon/defibrillator/compact
name = "compact defibrillator"
desc = "A belt-equipped defibrillator that can be rapidly deployed."
icon_state = "defibcompact"
item_state = "defibcompact"
w_class = 3
slot_flags = SLOT_BELT
origin_tech = "biotech=4"
/obj/item/weapon/defibrillator/combatdefibrillator/loaded/New()
/obj/item/weapon/defibrillator/compact/ui_action_click()
if(usr.get_item_by_slot(slot_belt) == src)
toggle_paddles()
else
usr << "<span class='warning'>Strap the defibrillator's belt on first!</span>"
return
/obj/item/weapon/defibrillator/compact/loaded/New()
..()
paddles = make_paddles()
bcell = new(src)
update_icon()
return
/obj/item/weapon/defibrillator/compact/combat
name = "combat defibrillator"
desc = "A belt-equipped blood-red defibrillator that can be rapidly deployed. Does not have the restrictions or safeties of conventional defibrillators and can revive through space suits."
combat = 1
safety = 0
/obj/item/weapon/defibrillator/compact/combat/loaded/New()
..()
paddles = make_paddles()
bcell = new /obj/item/weapon/stock_parts/cell/infinite(src)
update_icon()
return
/obj/item/weapon/defibrillator/compact/combat/attackby(obj/item/weapon/W, mob/user)
if(W == paddles)
paddles.unwield()
toggle_paddles()
update_icon()
return
//paddles
/obj/item/weapon/twohanded/shockpaddles
@@ -293,7 +322,7 @@
else
return 1
/obj/item/weapon/twohanded/shockpaddles/attack(mob/M as mob, mob/user as mob)
/obj/item/weapon/twohanded/shockpaddles/attack(mob/M, mob/user)
var/tobehealed
var/threshold = -config.health_threshold_dead
var/mob/living/carbon/human/H = M
@@ -339,18 +368,19 @@
playsound(get_turf(src), 'sound/machines/defib_charge.ogg', 50, 0)
var/mob/dead/observer/ghost = H.get_ghost()
var/tplus = world.time - H.timeofdeath
var/tlimit = 3000 //past this much time the patient is unrecoverable (in deciseconds)
var/tloss = 900 //brain damage starts setting in on the patient after some time left rotting
var/tlimit = 6000 //past this much time the patient is unrecoverable (in deciseconds)
var/tloss = 3000 //brain damage starts setting in on the patient after some time left rotting
var/total_burn = 0
var/total_brute = 0
if(do_after(user, 20)) //placed on chest and short delay to shock for dramatic effect, revive time is 5sec total
for(var/obj/item/carried_item in H.contents)
if((istype(carried_item, /obj/item/clothing/suit/armor)) || (istype(carried_item, /obj/item/clothing/suit/space)))
user.visible_message("<span class='notice'>[defib] buzzes: Patient's chest is obscured. Operation aborted.</span>")
playsound(get_turf(src), 'sound/machines/defib_failed.ogg', 50, 0)
busy = 0
update_icon()
return
if(istype(carried_item, /obj/item/clothing/suit/space))
if(!defib.combat)
user.visible_message("<span class='notice'>[defib] buzzes: Patient's chest is obscured. Operation aborted.</span>")
playsound(get_turf(src), 'sound/machines/defib_failed.ogg', 50, 0)
busy = 0
update_icon()
return
if(H.stat == 2)
var/health = H.health
M.visible_message("<span class='warning'>[M]'s body convulses a bit.")
@@ -140,7 +140,7 @@
if(!status) return
lit = !lit
if(lit)
SSobj.processing.Add(src)
SSobj.processing |= src
if(href_list["amount"])
throw_amount = throw_amount + text2num(href_list["amount"])
throw_amount = max(50, min(5000, throw_amount))
@@ -69,7 +69,7 @@
desc = "Lets you shoot your guns"
icon_state = "auth"
/obj/item/weapon/implant/tracking/get_data()
/obj/item/weapon/implant/weapons_auth/get_data()
var/dat = {"<b>Implant Specifications:</b><BR>
<b>Name:</b> Firearms Authentication Implant<BR>
<b>Life:</b> 4 hours after death of host<BR>
@@ -99,3 +99,13 @@
/obj/item/weapon/implantcase/loyalty/New()
imp = new /obj/item/weapon/implant/loyalty(src)
..()
/obj/item/weapon/implantcase/weapons_auth
name = "glass case- 'Firearms Authentication'"
desc = "A case containing a firearms authentication implant."
icon = 'icons/obj/items.dmi'
icon_state = "implantcase-r"
/obj/item/weapon/implantcase/weapons_auth/New()
imp = new /obj/item/weapon/implant/weapons_auth(src)
..()
@@ -29,6 +29,7 @@
var/obj/effect/overlay/holograph/H = locate() in T
if(H)
user << "<span class='notice'>You use [src] to destroy [H].</span>"
signs.Remove(H)
qdel(H)
else
if(signs.len < max_signs)
+41 -18
View File
@@ -677,34 +677,57 @@
<h1>Food for Dummies</h1>
Here is a guide on basic food recipes and also how to not poison your customers accidentally.
<h2>Burger:<h2>
Put 1 meat and 1 flour into the microwave and turn it on. Then wait.
<h2>Bread:<h2>
Put 3 flour into the microwave and then wait.
<h2>Basic ingredients preparation:</h2>
<h2>Waffles:<h2>
Add 2 flour and 2 egg to the microwave and then wait.
<b>Dough:</b> Add an egg to 15 flour. Dough can be transformed by using your knife and rolling pin or by adding milk. All doughs can be microwaved.<br>
<b>Bowl:</b> Add water to it for soup preparation.<br>
<b>Meat:</b> Microwave it, process it, slice it into microwavable cutlets with your knife, or use it raw.<br>
<b>Cheese:</b> Add 5u universal enzyme (catalyst) to milk and soy milk to prepare cheese (sliceable) and tofu.
<h2>Popcorn:<h2>
Add 1 corn to the microwave and wait.
<h2>Custom food:</h2>
Add ingredients to a base item to prepare a custom meal.<br>
The bases are:<br>
- bun (burger)<br>
- breadslices(sandwich)<br>
- plain bread<br>
- plain pie<br>
- vanilla cake<br>
- empty bowl (salad)<br>
- bowl with 10u water (soup)<br>
- boiled spaghetti<br>
- pizza bread<br>
- metal rod (kebab)
<h2>Meat Steak:<h2>
Put 1 meat, 1 unit of salt and 1 unit of pepper into the microwave and wait.
<h2>Table Craft:</h2>
Put ingredients on table, then click and drag the table onto yourself to see what recipes you can prepare.
<h2>Meat Pie:<h2>
Put 1 meat and 2 flour into the microwave and wait.
<h2>Microwave:</h2>
Use it to cook or boil food ingredients (meats, doughs, egg, spaghetti, donkpocket, etc...).
It can cook multiple items at once. Use the higher power settings for faster (and riskier) cooking.
<h2>Boiled Spagetti:<h2>
Put 1 spagetti and 5 units of water into the microwave and wait.
<h2>Processor:</h2>
Use it to process certain ingredients (meat into faggot, doughslice into spaghetti, potato into fries,etc...)
<h2>Donuts:<h2>
Add 1 egg and 1 flour to the microwave and wait.
<h2>Gibber:</h2>
Stuff an animal in it to grind it into meat.
<h2>Fries:<h2>
Add one potato to the processor and wait.
<h2>Meat spike:</h2>
Stick an animal on it then begin collecting its meat.
<h2>Example recipes:</h2>
<b>Vanilla Cake</b>: Microwave cake batter.<br>
<b>Burger:</b> 1 bun + 1 meat steak<br>
<b>Bread:</b> Microwave dough.<br>
<b>Waffles:</b> 2 pastry base<br>
<b>Popcorn:</b> Microwave corn.<br>
<b>Meat Steak:</b> Microwave meat.<br>
<b>Meat Pie:</b> 1 plain pie + 1u black pepper + 1u salt + 2 meat cutlets<br>
<b>Boiled Spagetti:</b> Microwave spaghetti.<br>
<b>Donuts:</b> 1u sugar + 1 pastry base<br>
<b>Fries:</b> Process potato.
</body>
</html>
"}
@@ -17,7 +17,7 @@
/obj/item/weapon/twohanded/singularityhammer/New()
..()
SSobj.processing.Add(src)
SSobj.processing |= src
/obj/item/weapon/twohanded/singularityhammer/Destroy()
@@ -7,6 +7,12 @@
slot_flags = SLOT_BELT
attack_verb = list("whipped", "lashed", "disciplined")
/obj/item/weapon/storage/belt/update_icon()
overlays.Cut()
for(var/obj/item/I in contents)
overlays += "[I.name]"
..()
/obj/item/weapon/storage/belt/utility
name = "toolbelt" //Carn: utility belt is nicer, but it bamboozles the text parsing.
desc = "Holds tools."
@@ -116,7 +116,7 @@
..()
if(empty) return
new /obj/item/stack/medical/gauze(src)
new /obj/item/stack/medical/gauze(src)
new /obj/item/weapon/defibrillator/compact/combat/loaded(src)
new /obj/item/weapon/reagent_containers/hypospray/combat(src)
new /obj/item/weapon/reagent_containers/pill/patch/styptic(src)
new /obj/item/weapon/reagent_containers/pill/patch/silver_sulf(src)
@@ -13,6 +13,7 @@
var/status = 0
var/obj/item/weapon/stock_parts/cell/high/bcell = null
var/hitcost = 1000
var/losspertick = 5
/obj/item/weapon/melee/baton/suicide_act(mob/user)
user.visible_message("<span class='suicide'>[user] is putting the live [name] in \his mouth! It looks like \he's trying to commit suicide.</span>")
@@ -44,6 +45,25 @@
else
return 0
/obj/item/weapon/melee/baton/proc/update_process()
if(status)
SSobj.processing |= src
else
SSobj.processing.Remove(src)
/obj/item/weapon/melee/baton/process()
if(bcell)
if(bcell.charge < hitcost)
status = 0
update_icon()
if(status)
if(isrobot(loc))
var/mob/living/silicon/robot/R = loc
if(R && R.cell)
R.cell.use(losspertick)
else
bcell.use(losspertick)
/obj/item/weapon/melee/baton/update_icon()
if(status)
icon_state = "[initial(name)]_active"
@@ -51,6 +71,7 @@
icon_state = "[initial(name)]_nocell"
else
icon_state = "[initial(name)]"
update_process()
/obj/item/weapon/melee/baton/examine(mob/user)
..()
@@ -24,7 +24,7 @@
src.air_contents.volume = volume //liters
src.air_contents.temperature = T20C
SSobj.processing.Add(src)
SSobj.processing |= src
return
+1 -1
View File
@@ -317,7 +317,7 @@
damtype = "fire"
hitsound = 'sound/items/welder.ogg'
icon_state = "welder1"
SSobj.processing.Add(src)
SSobj.processing |= src
else
user << "<span class='notice'>You need more fuel.</span>"
welding = 0