mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-30 16:47:13 +01:00
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:
@@ -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
|
||||
|
||||
@@ -47,7 +47,7 @@
|
||||
if(OPERATING)
|
||||
if(!attached)
|
||||
return
|
||||
SSobj.processing.Add(src)
|
||||
SSobj.processing |= src
|
||||
anchored = 1
|
||||
|
||||
mode = value
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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
|
||||
@@ -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."
|
||||
|
||||
@@ -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/
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user