Merge branch 'master' into pianocargo

This commit is contained in:
spaghettiweaver
2020-04-23 00:42:09 -05:00
committed by GitHub
2733 changed files with 2226449 additions and 189201 deletions
+6 -6
View File
@@ -17,13 +17,13 @@
..()
switch(icon_state)
if("Off")
user << "It appears to be switched off."
to_chat(user, "It appears to be switched off.")
if("narsiebistro")
user << "It shows a picture of a large black and red being. Spooky!"
to_chat(user, "It shows a picture of a large black and red being. Spooky!")
if("on", "empty")
user << "The lights are on, but there's no picture."
to_chat(user, "The lights are on, but there's no picture.")
else
user << "It says '[icon_state]'"
to_chat(user, "It says '[icon_state]'")
/obj/structure/sign/double/barsign/New()
..()
@@ -40,9 +40,9 @@
if(!sign_type)
return
icon_state = sign_type
user << "<span class='notice'>You change the barsign.</span>"
to_chat(user, "<span class='notice'>You change the barsign.</span>")
else
user << "<span class='warning'>Access denied.</span>"
to_chat(user, "<span class='warning'>Access denied.</span>")
return
return ..()
+10 -9
View File
@@ -16,6 +16,7 @@ LINEN BINS
throw_speed = 1
throw_range = 2
w_class = ITEMSIZE_SMALL
drop_sound = 'sound/items/drop/clothing.ogg'
/obj/item/weapon/bedsheet/attack_self(mob/user as mob)
user.drop_item()
@@ -30,7 +31,7 @@ LINEN BINS
if(is_sharp(I))
user.visible_message("<span class='notice'>\The [user] begins cutting up [src] with [I].</span>", "<span class='notice'>You begin cutting up [src] with [I].</span>")
if(do_after(user, 50))
user << "<span class='notice'>You cut [src] into pieces!</span>"
to_chat(user, "<span class='notice'>You cut [src] into pieces!</span>")
for(var/i in 1 to rand(2,5))
new /obj/item/weapon/reagent_containers/glass/rag(drop_location())
qdel(src)
@@ -172,12 +173,12 @@ LINEN BINS
..(user)
if(amount < 1)
user << "There are no bed sheets in the bin."
to_chat(user, "There are no bed sheets in the bin.")
return
if(amount == 1)
user << "There is one bed sheet in the bin."
to_chat(user, "There is one bed sheet in the bin.")
return
user << "There are [amount] bed sheets in the bin."
to_chat(user, "There are [amount] bed sheets in the bin.")
/obj/structure/bedsheetbin/update_icon()
@@ -193,12 +194,12 @@ LINEN BINS
I.loc = src
sheets.Add(I)
amount++
user << "<span class='notice'>You put [I] in [src].</span>"
to_chat(user, "<span class='notice'>You put [I] in [src].</span>")
else if(amount && !hidden && I.w_class < ITEMSIZE_LARGE) //make sure there's sheets to hide it among, make sure nothing else is hidden in there.
user.drop_item()
I.loc = src
hidden = I
user << "<span class='notice'>You hide [I] among the sheets.</span>"
to_chat(user, "<span class='notice'>You hide [I] among the sheets.</span>")
/obj/structure/bedsheetbin/attack_hand(mob/user as mob)
if(amount >= 1)
@@ -214,11 +215,11 @@ LINEN BINS
B.loc = user.loc
user.put_in_hands(B)
user << "<span class='notice'>You take [B] out of [src].</span>"
to_chat(user, "<span class='notice'>You take [B] out of [src].</span>")
if(hidden)
hidden.loc = user.loc
user << "<span class='notice'>[hidden] falls out of [B]!</span>"
to_chat(user, "<span class='notice'>[hidden] falls out of [B]!</span>")
hidden = null
@@ -237,7 +238,7 @@ LINEN BINS
B = new /obj/item/weapon/bedsheet(loc)
B.loc = loc
user << "<span class='notice'>You telekinetically remove [B] from [src].</span>"
to_chat(user, "<span class='notice'>You telekinetically remove [B] from [src].</span>")
update_icon()
if(hidden)
+1 -7
View File
@@ -87,14 +87,8 @@
return ..()
/obj/structure/catwalk/Crossed()
//VOREStation Edit begin: SHADEKIN
var/mob/SK = usr
if(istype(SK))
if(SK.shadekin_phasing_check())
return
//VOREStation Edit end: SHADEKIN
. = ..()
if(isliving(usr))
if(isliving(usr) && !usr.is_incorporeal())
playsound(src, pick('sound/effects/footstep/catwalk1.ogg', 'sound/effects/footstep/catwalk2.ogg', 'sound/effects/footstep/catwalk3.ogg', 'sound/effects/footstep/catwalk4.ogg', 'sound/effects/footstep/catwalk5.ogg'), 25, 1)
/obj/structure/catwalk/CheckExit(atom/movable/O, turf/target)
+1 -1
View File
@@ -24,7 +24,7 @@
user.drop_from_inventory(coat, src)
update_icon()
else
user << "<span class='notice'>You cannot hang [W] on [src]</span>"
to_chat(user, "<span class='notice'>You cannot hang [W] on [src]</span>")
return ..()
/obj/structure/coatrack/CanPass(atom/movable/mover, turf/target)
@@ -58,7 +58,7 @@
update_icon()
/obj/structure/closet/examine(mob/user)
if(..(user, 1) && !opened)
if(!src.opened && (..(user, 1) || isobserver(user)))
var/content_size = 0
for(var/obj/item/I in src.contents)
if(!I.anchored)
@@ -74,6 +74,9 @@
else
to_chat(user, "It is full.")
if(!src.opened && isobserver(user))
to_chat(user, "It contains: [counting_english_list(contents)]")
/obj/structure/closet/CanPass(atom/movable/mover, turf/target)
if(wall_mounted)
return TRUE
@@ -360,12 +363,6 @@
if(!src.toggle())
to_chat(usr, "<span class='notice'>It won't budge!</span>")
/obj/structure/closet/attack_ghost(mob/ghost)
if(ghost.client && ghost.client.inquisitive_ghost)
ghost.examinate(src)
if (!src.opened)
to_chat(ghost, "It contains: [english_list(contents)].")
/obj/structure/closet/verb/verb_toggleopen()
set src in oview(1)
set category = "Object"
@@ -474,4 +471,4 @@
return
dump_contents()
spawn(1) qdel(src)
return 1
return 1
@@ -1,6 +1,6 @@
/obj/structure/closet/secure_closet/blueshield
name = "blueshield's locker"
req_access = list(access_teleporter)
req_access = list(access_blueshield)
icon = 'icons/obj/closet_yw.dmi'
icon_state = "bssecure1"
icon_closed = "bssecure"
@@ -63,7 +63,7 @@
var/obj/item/weapon/card/id/I = W.GetID()
if(src.broken)
user << "<span class='warning'>It appears to be broken.</span>"
to_chat(user, "<span class='warning'>It appears to be broken.</span>")
return
if(!I || !I.registered_name) return
if(src.allowed(user) || !src.registered_name || (istype(I) && (src.registered_name == I.registered_name)))
@@ -76,7 +76,7 @@
src.registered_name = I.registered_name
src.desc = "Owned by [I.registered_name]."
else
user << "<span class='warning'>Access Denied</span>"
to_chat(user, "<span class='warning'>Access Denied</span>")
else if(istype(W, /obj/item/weapon/melee/energy/blade))
if(emag_act(INFINITY, user, "The locker has been sliced open by [user] with \an [W]!", "You hear metal being sliced and sparks flying."))
var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread()
@@ -85,7 +85,7 @@
playsound(src.loc, 'sound/weapons/blade1.ogg', 50, 1)
playsound(src.loc, "sparks", 50, 1)
else
user << "<span class='warning'>Access Denied</span>"
to_chat(user, "<span class='warning'>Access Denied</span>")
return
/obj/structure/closet/secure_closet/personal/emag_act(var/remaining_charges, var/mob/user, var/visual_feedback, var/audible_feedback)
@@ -107,9 +107,9 @@
if(ishuman(usr))
src.add_fingerprint(usr)
if (src.locked || !src.registered_name)
usr << "<span class='warning'>You need to unlock it first.</span>"
to_chat(usr, "<span class='warning'>You need to unlock it first.</span>")
else if (src.broken)
usr << "<span class='warning'>It appears to be broken.</span>"
to_chat(usr, "<span class='warning'>It appears to be broken.</span>")
else
if (src.opened)
if(!src.close())
@@ -39,7 +39,7 @@
/obj/item/device/radio/headset/heads/hop,
/obj/item/device/radio/headset/heads/hop/alt,
/obj/item/weapon/storage/box/ids = 2,
/obj/item/weapon/gun/energy/gun,
///obj/item/weapon/gun/energy/gun, //YW Edit,
/obj/item/weapon/gun/energy/gun/martin, //VOREStation Add,
/obj/item/weapon/storage/box/commandkeys, //VOREStation Add,
/obj/item/weapon/storage/box/servicekeys, //VOREStation Add,
@@ -114,6 +114,7 @@
/obj/item/device/flash,
/obj/item/weapon/melee/baton/loaded,
/obj/item/weapon/gun/magnetic/railgun/heater/pistol/hos,
/obj/item/weapon/rcd_ammo/large,
/obj/item/weapon/cell/device/weapon,
/obj/item/clothing/accessory/holster/waist,
/obj/item/weapon/melee/telebaton,
@@ -19,6 +19,8 @@
var/list/spawnitems = list(/obj/item/weapon/tank/emergency/oxygen,/obj/item/clothing/mask/breath,/obj/item/weapon/tool/crowbar/red,/obj/item/device/flashlight/flare,)
var/amount = 2 // spawns each items X times.
icon_state = "emerg"
icon_closed = "emerg"
icon_opened = "emerg_open"
/obj/structure/closet/walllocker/emerglocker/toggle(mob/user as mob)
src.attack_hand(user)
@@ -31,10 +33,10 @@
if (istype(user, /mob/living/silicon/ai)) //Added by Strumpetplaya - AI shouldn't be able to
return //activate emergency lockers. This fixes that. (Does this make sense, the AI can't call attack_hand, can it? --Mloc)
if(!amount)
usr << "<spawn class='notice'>It's empty.."
to_chat(usr, "<spawn class='notice'>It's empty..")
return
if(amount)
usr << "<spawn class='notice'>You take out some items from \the [src]."
to_chat(usr, "<spawn class='notice'>You take out some items from \the [src].")
for(var/path in spawnitems)
new path(src.loc)
amount--
@@ -82,21 +82,21 @@
else if(istype(W, /obj/item/stack/cable_coil))
var/obj/item/stack/cable_coil/C = W
if(rigged)
user << "<span class='notice'>[src] is already rigged!</span>"
to_chat(user, "<span class='notice'>[src] is already rigged!</span>")
return
if (C.use(1))
user << "<span class='notice'>You rig [src].</span>"
to_chat(user , "<span class='notice'>You rig [src].</span>")
rigged = 1
return
else if(istype(W, /obj/item/device/radio/electropack))
if(rigged)
user << "<span class='notice'>You attach [W] to [src].</span>"
to_chat(user , "<span class='notice'>You attach [W] to [src].</span>")
user.drop_item()
W.forceMove(src)
return
else if(W.is_wirecutter())
if(rigged)
user << "<span class='notice'>You cut away the wiring.</span>"
to_chat(user , "<span class='notice'>You cut away the wiring.</span>")
playsound(src.loc, W.usesound, 100, 1)
rigged = 0
return
@@ -149,15 +149,15 @@
/obj/structure/closet/crate/secure/proc/togglelock(mob/user as mob)
if(src.opened)
user << "<span class='notice'>Close the crate first.</span>"
to_chat(user, "<span class='notice'>Close the crate first.</span>")
return
if(src.broken)
user << "<span class='warning'>The crate appears to be broken.</span>"
to_chat(user, "<span class='warning'>The crate appears to be broken.</span>")
return
if(src.allowed(user))
set_locked(!locked, user)
else
user << "<span class='notice'>Access Denied</span>"
to_chat(user, "<span class='notice'>Access Denied</span>")
/obj/structure/closet/crate/secure/proc/set_locked(var/newlocked, mob/user = null)
if(locked == newlocked) return
@@ -181,7 +181,7 @@
src.add_fingerprint(usr)
src.togglelock(usr)
else
usr << "<span class='warning'>This mob type can't use this verb.</span>"
to_chat(usr, "<span class='warning'>This mob type can't use this verb.</span>")
/obj/structure/closet/crate/secure/attack_hand(mob/user as mob)
src.add_fingerprint(user)
@@ -209,7 +209,7 @@
playsound(src.loc, "sparks", 60, 1)
src.locked = 0
src.broken = 1
user << "<span class='notice'>You unlock \the [src].</span>"
to_chat(user, "<span class='notice'>You unlock \the [src].</span>")
return 1
/obj/structure/closet/crate/secure/emp_act(severity)
@@ -64,10 +64,9 @@
icon_state = "vehiclecrate"
/obj/structure/largecrate/vehicle/Initialize()
..()
spawn(1)
for(var/obj/O in contents)
O.update_icon()
. = ..()
for(var/obj/O in contents)
O.update_icon()
/obj/structure/largecrate/vehicle/bike
name = "spacebike crate"
+2 -2
View File
@@ -40,9 +40,9 @@
/obj/structure/curtain/attackby(obj/item/P, mob/user)
if(P.is_wirecutter())
playsound(src, P.usesound, 50, 1)
user << "<span class='notice'>You start to cut the shower curtains.</span>"
to_chat(user, "<span class='notice'>You start to cut the shower curtains.</span>")
if(do_after(user, 10))
user << "<span class='notice'>You cut the shower curtains.</span>"
to_chat(user, "<span class='notice'>You cut the shower curtains.</span>")
var/obj/item/stack/material/plastic/A = new /obj/item/stack/material/plastic( src.loc )
A.amount = 3
qdel(src)
+3 -3
View File
@@ -66,16 +66,16 @@
/obj/structure/displaycase/attack_hand(mob/user as mob)
if (src.destroyed && src.occupied)
new /obj/item/weapon/gun/energy/captain( src.loc )
user << "<span class='notice'>You deactivate the hover field built into the case.</span>"
to_chat(user, "<span class='notice'>You deactivate the hover field built into the case.</span>")
src.occupied = 0
src.add_fingerprint(user)
update_icon()
return
else
usr << text("<span class='warning'>You kick the display case.</span>")
to_chat(usr, "<span class='warning'>You kick the display case.</span>")
for(var/mob/O in oviewers())
if ((O.client && !( O.blinded )))
O << "<span class='warning'>[usr] kicks the display case.</span>"
to_chat(O, "<span class='warning'>[usr] kicks the display case.</span>")
src.health -= 2
healthcheck()
return
+6 -6
View File
@@ -32,15 +32,15 @@
user.remove_from_mob(O)
contents += O
has_extinguisher = O
user << "<span class='notice'>You place [O] in [src].</span>"
to_chat(user, "<span class='notice'>You place [O] in [src].</span>")
else
opened = !opened
if(O.is_wrench())
if(!has_extinguisher)
user << "<span class='notice'>You start to unwrench the extinguisher cabinet.</span>"
to_chat(user, "<span class='notice'>You start to unwrench the extinguisher cabinet.</span>")
playsound(src.loc, O.usesound, 50, 1)
if(do_after(user, 15 * O.toolspeed))
user << "<span class='notice'>You unwrench the extinguisher cabinet.</span>"
to_chat(user, "<span class='notice'>You unwrench the extinguisher cabinet.</span>")
new /obj/item/frame/extinguisher_cabinet( src.loc )
qdel(src)
return
@@ -58,11 +58,11 @@
if (user.hand)
temp = H.organs_by_name["l_hand"]
if(temp && !temp.is_usable())
user << "<span class='notice'>You try to move your [temp.name], but cannot!</span>"
to_chat(user, "<span class='notice'>You try to move your [temp.name], but cannot!</span>")
return
if(has_extinguisher)
user.put_in_hands(has_extinguisher)
user << "<span class='notice'>You take [has_extinguisher] from [src].</span>"
to_chat(user, "<span class='notice'>You take [has_extinguisher] from [src].</span>")
has_extinguisher = null
opened = 1
else
@@ -72,7 +72,7 @@
/obj/structure/extinguisher_cabinet/attack_tk(mob/user)
if(has_extinguisher)
has_extinguisher.loc = loc
user << "<span class='notice'>You telekinetically remove [has_extinguisher] from [src].</span>"
to_chat(user, "<span class='notice'>You telekinetically remove [has_extinguisher] from [src].</span>")
has_extinguisher = null
opened = 1
else
@@ -0,0 +1,79 @@
/obj/structure/fitness/boxing_ropes
name = "Ropes"
desc = "Firm yet springy, perhaps this could be useful!"
icon = 'icons/obj/fitness_vr.dmi'
icon_state = "ropes"
density = 1
throwpass = 1
climbable = 1
layer = WINDOW_LAYER
anchored = 1
flags = ON_BORDER
/obj/structure/fitness/boxing_ropes/CanPass(atom/movable/mover, turf/target)
if(istype(mover) && mover.checkpass(PASSTABLE))
return TRUE
if(get_dir(mover, target) == turn(dir, 180))
return !density
return TRUE
/obj/structure/fitness/boxing_ropes/CheckExit(atom/movable/O as mob|obj, target as turf)
if(istype(O) && O.checkpass(PASSTABLE))
return 1
if(get_dir(O.loc, target) == dir)
return 0
return 1
/obj/structure/fitness/boxing_ropes_bottom
name = "Ropes"
desc = "Firm yet springy, perhaps this could be useful!"
icon = 'icons/obj/fitness_vr.dmi'
icon_state = "ropes"
density = 1
throwpass = 1
climbable = 1
plane = MOB_PLANE
layer = ABOVE_MOB_LAYER
anchored = 1
flags = ON_BORDER
/obj/structure/fitness/boxing_ropes_bottom/CanPass(atom/movable/mover, turf/target)
if(istype(mover) && mover.checkpass(PASSTABLE))
return TRUE
if(get_dir(mover, target) == turn(dir, 180))
return !density
return TRUE
/obj/structure/fitness/boxing_ropes_bottom/CheckExit(atom/movable/O as mob|obj, target as turf)
if(istype(O) && O.checkpass(PASSTABLE))
return 1
if(get_dir(O.loc, target) == dir)
return 0
return 1
/obj/structure/fitness/boxing_turnbuckle
name = "Turnbuckle"
desc = "A sturdy post that looks like it could support even the most heaviest of heavy weights!"
icon = 'icons/obj/fitness_vr.dmi'
icon_state = "turnbuckle"
density = 1
throwpass = 1
climbable = 1
layer = WINDOW_LAYER
anchored = 1
flags = ON_BORDER
/obj/structure/fitness/boxing_turnbuckle/CanPass(atom/movable/mover, turf/target)
if(istype(mover) && mover.checkpass(PASSTABLE))
return TRUE
if(get_dir(mover, target) == turn(dir, 180))
return !density
return TRUE
/obj/structure/fitness/boxing_turnbuckle/CheckExit(atom/movable/O as mob|obj, target as turf)
if(istype(O) && O.checkpass(PASSTABLE))
return 1
if(get_dir(O.loc, target) == dir)
return 0
return 1
/turf/simulated/fitness
name = "Mat"
icon = 'icons/turf/floors_vr.dmi'
icon_state = "fit_mat"
+38
View File
@@ -222,6 +222,44 @@
icon_state = "plant-01"
plane = OBJ_PLANE
var/obj/item/stored_item
/obj/structure/flora/pottedplant/examine(mob/user)
..()
if(in_range(user, src) && stored_item)
to_chat(user, "<i>You can see something in there...</i>")
/obj/structure/flora/pottedplant/attackby(obj/item/I, mob/user)
if(stored_item)
to_chat(user, "<span class='notice'>[I] won't fit in. There already appears to be something in here...</span>")
return
if(I.w_class > ITEMSIZE_TINY)
to_chat(user, "<span class='notice'>[I] is too big to fit inside [src].</span>")
return
if(do_after(user, 10))
user.drop_from_inventory(I, src)
I.forceMove(src)
stored_item = I
src.visible_message("\icon[src] \icon[I] [user] places [I] into [src].")
return
else
to_chat(user, "<span class='notice'>You refrain from putting things into the plant pot.</span>")
return
..()
/obj/structure/flora/pottedplant/attack_hand(mob/user)
if(!stored_item)
to_chat(user, "<b>You see nothing of interest in [src]...</b>")
else
if(do_after(user, 10))
to_chat(user, "You find \icon[stored_item] [stored_item] in [src]!")
stored_item.forceMove(get_turf(src))
stored_item = null
..()
/obj/structure/flora/pottedplant/large
name = "large potted plant"
@@ -65,18 +65,13 @@
/obj/structure/ghost_pod/automatic/Initialize()
. = ..()
spawn(delay_to_self_open)
if(src)
trigger()
addtimer(CALLBACK(src, .proc/trigger), delay_to_self_open)
/obj/structure/ghost_pod/automatic/trigger()
. = ..()
if(. == FALSE) // If we failed to get a volunteer, try again later if allowed to.
if(delay_to_try_again)
spawn(delay_to_try_again)
if(src)
trigger()
addtimer(CALLBACK(src, .proc/trigger), delay_to_try_again)
// This type is triggered by a ghost clicking on it, as opposed to a living player. A ghost query type isn't needed.
/obj/structure/ghost_pod/ghost_activated
+5 -5
View File
@@ -129,23 +129,23 @@
else
dir_to_set = 4
else
user << "<span class='notice'>You can't reach.</span>"
to_chat(user, "<span class='notice'>You can't reach.</span>")
return //Only works for cardinal direcitons, diagonals aren't supposed to work like this.
for(var/obj/structure/window/WINDOW in loc)
if(WINDOW.dir == dir_to_set)
user << "<span class='notice'>There is already a window facing this way there.</span>"
to_chat(user, "<span class='notice'>There is already a window facing this way there.</span>")
return
user << "<span class='notice'>You start placing the window.</span>"
to_chat(user, "<span class='notice'>You start placing the window.</span>")
if(do_after(user,20))
for(var/obj/structure/window/WINDOW in loc)
if(WINDOW.dir == dir_to_set)//checking this for a 2nd time to check if a window was made while we were waiting.
user << "<span class='notice'>There is already a window facing this way there.</span>"
to_chat(user, "<span class='notice'>There is already a window facing this way there.</span>")
return
var/wtype = ST.material.created_window
if (ST.use(1))
var/obj/structure/window/WD = new wtype(loc, dir_to_set, 1)
user << "<span class='notice'>You place the [WD] on [src].</span>"
to_chat(user, "<span class='notice'>You place the [WD] on [src].</span>")
WD.update_icon()
return
//window placing end
+2 -2
View File
@@ -48,13 +48,13 @@
plant = prepare_icon(emagged ? "emagged" : null)
overlays += plant
set_light(2)
use_power = 2
use_power = USE_POWER_ACTIVE
/obj/machinery/holoplant/proc/deactivate()
overlays -= plant
QDEL_NULL(plant)
set_light(0)
use_power = 0
use_power = USE_POWER_OFF
/obj/machinery/holoplant/power_change()
..()
+6 -5
View File
@@ -3,6 +3,7 @@
desc = "A folded membrane which rapidly expands into a large cubical shape on activation."
icon = 'icons/obj/inflatable.dmi'
icon_state = "folded_wall"
drop_sound = 'sound/items/drop/rubber.ogg'
w_class = ITEMSIZE_NORMAL
var/deploy_path = /obj/structure/inflatable
@@ -14,7 +15,7 @@
if(!user)
return
if(!user.Adjacent(A))
to_chat(user,"You can't reach!")
to_chat(user, "You can't reach!")
return
if(istype(A, /turf))
inflate(user,A)
@@ -94,7 +95,7 @@
/obj/item/inflatable/proc/inflate(var/mob/user,var/location)
playsound(location, 'sound/items/zip.ogg', 75, 1)
to_chat(user,"<span class='notice'>You inflate [src].</span>")
to_chat(user, "<span class='notice'>You inflate [src].</span>")
var/obj/structure/inflatable/R = new deploy_path(location)
src.transfer_fingerprints_to(R)
R.add_fingerprint(user)
@@ -102,7 +103,7 @@
/obj/structure/inflatable/proc/deflate()
playsound(loc, 'sound/machines/hiss.ogg', 75, 1)
//user << "<span class='notice'>You slowly deflate the inflatable wall.</span>"
//to_chat(user, "<span class='notice'>You slowly deflate the inflatable wall.</span>")
visible_message("[src] slowly deflates.")
spawn(50)
var/obj/item/inflatable/R = new /obj/item/inflatable(loc)
@@ -247,7 +248,7 @@
icon_state = "folded_wall_torn"
attack_self(mob/user)
user << "<span class='notice'>The inflatable wall is too torn to be inflated!</span>"
to_chat(user, "<span class='notice'>The inflatable wall is too torn to be inflated!</span>")
add_fingerprint(user)
/obj/item/inflatable/door/torn
@@ -257,7 +258,7 @@
icon_state = "folded_door_torn"
attack_self(mob/user)
user << "<span class='notice'>The inflatable door is too torn to be inflated!</span>"
to_chat(user, "<span class='notice'>The inflatable door is too torn to be inflated!</span>")
add_fingerprint(user)
/obj/item/weapon/storage/briefcase/inflatable
+21 -21
View File
@@ -25,7 +25,7 @@ GLOBAL_LIST_BOILERPLATE(all_janitorial_carts, /obj/structure/janitorialcart)
/obj/structure/janitorialcart/examine(mob/user)
if(..(user, 1))
user << "[src] \icon[src] contains [reagents.total_volume] unit\s of liquid!"
to_chat(user, "[src] [bicon(src)] contains [reagents.total_volume] unit\s of liquid!")
//everything else is visible, so doesn't need to be mentioned
@@ -36,15 +36,15 @@ GLOBAL_LIST_BOILERPLATE(all_janitorial_carts, /obj/structure/janitorialcart)
I.loc = src
update_icon()
updateUsrDialog()
user << "<span class='notice'>You put [I] into [src].</span>"
to_chat(user, "<span class='notice'>You put [I] into [src].</span>")
else if(istype(I, /obj/item/weapon/mop))
if(I.reagents.total_volume < I.reagents.maximum_volume) //if it's not completely soaked we assume they want to wet it, otherwise store it
if(reagents.total_volume < 1)
user << "<span class='warning'>[src] is out of water!</span>"
to_chat(user, "<span class='warning'>[src] is out of water!</span>")
else
reagents.trans_to_obj(I, 5) //
user << "<span class='notice'>You wet [I] in [src].</span>"
to_chat(user, "<span class='notice'>You wet [I] in [src].</span>")
playsound(loc, 'sound/effects/slosh.ogg', 25, 1)
return
if(!mymop)
@@ -53,7 +53,7 @@ GLOBAL_LIST_BOILERPLATE(all_janitorial_carts, /obj/structure/janitorialcart)
I.loc = src
update_icon()
updateUsrDialog()
user << "<span class='notice'>You put [I] into [src].</span>"
to_chat(user, "<span class='notice'>You put [I] into [src].</span>")
else if(istype(I, /obj/item/weapon/reagent_containers/spray) && !myspray)
user.drop_item()
@@ -61,7 +61,7 @@ GLOBAL_LIST_BOILERPLATE(all_janitorial_carts, /obj/structure/janitorialcart)
I.loc = src
update_icon()
updateUsrDialog()
user << "<span class='notice'>You put [I] into [src].</span>"
to_chat(user, "<span class='notice'>You put [I] into [src].</span>")
else if(istype(I, /obj/item/device/lightreplacer) && !myreplacer)
user.drop_item()
@@ -69,7 +69,7 @@ GLOBAL_LIST_BOILERPLATE(all_janitorial_carts, /obj/structure/janitorialcart)
I.loc = src
update_icon()
updateUsrDialog()
user << "<span class='notice'>You put [I] into [src].</span>"
to_chat(user, "<span class='notice'>You put [I] into [src].</span>")
else if(istype(I, /obj/item/weapon/caution))
if(signs < 4)
@@ -78,9 +78,9 @@ GLOBAL_LIST_BOILERPLATE(all_janitorial_carts, /obj/structure/janitorialcart)
signs++
update_icon()
updateUsrDialog()
user << "<span class='notice'>You put [I] into [src].</span>"
to_chat(user, "<span class='notice'>You put [I] into [src].</span>")
else
user << "<span class='notice'>[src] can't hold any more signs.</span>"
to_chat(user, "<span class='notice'>[src] can't hold any more signs.</span>")
else if(istype(I, /obj/item/weapon/reagent_containers/glass))
return // So we do not put them in the trash bag as we mean to fill the mop bucket
@@ -120,29 +120,29 @@ GLOBAL_LIST_BOILERPLATE(all_janitorial_carts, /obj/structure/janitorialcart)
if("garbage")
if(mybag)
user.put_in_hands(mybag)
user << "<span class='notice'>You take [mybag] from [src].</span>"
to_chat(user, "<span class='notice'>You take [mybag] from [src].</span>")
mybag = null
if("mop")
if(mymop)
user.put_in_hands(mymop)
user << "<span class='notice'>You take [mymop] from [src].</span>"
to_chat(user, "<span class='notice'>You take [mymop] from [src].</span>")
mymop = null
if("spray")
if(myspray)
user.put_in_hands(myspray)
user << "<span class='notice'>You take [myspray] from [src].</span>"
to_chat(user, "<span class='notice'>You take [myspray] from [src].</span>")
myspray = null
if("replacer")
if(myreplacer)
user.put_in_hands(myreplacer)
user << "<span class='notice'>You take [myreplacer] from [src].</span>"
to_chat(user, "<span class='notice'>You take [myreplacer] from [src].</span>")
myreplacer = null
if("sign")
if(signs)
var/obj/item/weapon/caution/Sign = locate() in src
if(Sign)
user.put_in_hands(Sign)
user << "<span class='notice'>You take \a [Sign] from [src].</span>"
to_chat(user, "<span class='notice'>You take \a [Sign] from [src].</span>")
signs--
else
warning("[src] signs ([signs]) didn't match contents")
@@ -189,23 +189,23 @@ GLOBAL_LIST_BOILERPLATE(all_janitorial_carts, /obj/structure/janitorialcart)
if(!..(user, 1))
return
user << "\icon[src] This [callme] contains [reagents.total_volume] unit\s of water!"
to_chat(user, "[bicon(src)] This [callme] contains [reagents.total_volume] unit\s of water!")
if(mybag)
user << "\A [mybag] is hanging on the [callme]."
to_chat(user, "\A [mybag] is hanging on the [callme].")
/obj/structure/bed/chair/janicart/attackby(obj/item/I, mob/user)
if(istype(I, /obj/item/weapon/mop))
if(reagents.total_volume > 1)
reagents.trans_to_obj(I, 2)
user << "<span class='notice'>You wet [I] in the [callme].</span>"
to_chat(user, "<span class='notice'>You wet [I] in the [callme].</span>")
playsound(loc, 'sound/effects/slosh.ogg', 25, 1)
else
user << "<span class='notice'>This [callme] is out of water!</span>"
to_chat(user, "<span class='notice'>This [callme] is out of water!</span>")
else if(istype(I, /obj/item/key))
user << "Hold [I] in one of your hands while you drive this [callme]."
to_chat(user, "Hold [I] in one of your hands while you drive this [callme].")
else if(istype(I, /obj/item/weapon/storage/bag/trash))
user << "<span class='notice'>You hook the trashbag onto the [callme].</span>"
to_chat(user, "<span class='notice'>You hook the trashbag onto the [callme].</span>")
user.drop_item()
I.loc = src
mybag = I
@@ -227,7 +227,7 @@ GLOBAL_LIST_BOILERPLATE(all_janitorial_carts, /obj/structure/janitorialcart)
step(src, direction)
update_mob()
else
user << "<span class='notice'>You'll need the keys in one of your hands to drive this [callme].</span>"
to_chat(user, "<span class='notice'>You'll need the keys in one of your hands to drive this [callme].</span>")
/obj/structure/bed/chair/janicart/Move()
+2 -2
View File
@@ -63,14 +63,14 @@
var/obj/item/weapon/weldingtool/WT = C
if(WT.welding == 1)
if(WT.remove_fuel(0, user))
user << "<span class='notice'>Slicing lattice joints ...</span>"
to_chat(user, "<span class='notice'>Slicing lattice joints ...</span>")
new /obj/item/stack/rods(src.loc)
qdel(src)
return
if (istype(C, /obj/item/stack/rods))
var/obj/item/stack/rods/R = C
if(R.use(2))
user << "<span class='notice'>You start connecting \the [R.name] to \the [src.name] ...</span>"
to_chat(user, "<span class='notice'>You start connecting \the [R.name] to \the [src.name] ...</span>")
if(do_after(user, 5 SECONDS))
src.alpha = 0 // Note: I don't know why this is set, Eris did it, just trusting for now. ~Leshana
new /obj/structure/catwalk(src.loc)
+1 -1
View File
@@ -258,7 +258,7 @@ Loot piles can be depleted, if loot_depleted is turned on. Note that players wh
/obj/item/weapon/reagent_containers/syringe/steroid,
/obj/item/weapon/storage/pill_bottle/zoom,
/obj/item/weapon/storage/pill_bottle/happy,
/obj/item/weapon/storage/pill_bottle/tramadol
/obj/item/weapon/storage/pill_bottle/paracetamol //VOREStation Edit
)
// Contains loads of different types of boxes, which may have items inside!
@@ -0,0 +1,444 @@
/obj/structure/medical_stand
name = "medical stand"
icon = 'icons/obj/medical_stand_vr.dmi'
desc = "Medical stand used to hang reagents for transfusion and to hold anesthetic tank."
icon_state = "medical_stand_empty"
//gas stuff
var/obj/item/weapon/tank/tank
var/mob/living/carbon/human/breather
var/obj/item/clothing/mask/breath/contained
var/spawn_type = null
var/mask_type = /obj/item/clothing/mask/breath/medical
var/is_loosen = TRUE
var/valve_opened = FALSE
//blood stuff
var/mob/living/carbon/attached
var/mode = 1 // 1 is injecting, 0 is taking blood.
var/obj/item/weapon/reagent_containers/beaker
var/list/transfer_amounts = list(REM, 1, 2)
var/transfer_amount = 1
/obj/structure/medical_stand/New()
..()
if (spawn_type)
tank = new spawn_type (src)
contained = new mask_type (src)
update_icon()
/obj/structure/medical_stand/update_icon()
overlays.Cut()
if (tank)
if (breather)
overlays += "tube_active"
else
overlays += "tube"
if(istype(tank,/obj/item/weapon/tank/anesthetic))
overlays += "tank_anest"
else if(istype(tank,/obj/item/weapon/tank/nitrogen))
overlays += "tank_nitro"
else if(istype(tank,/obj/item/weapon/tank/oxygen))
overlays += "tank_oxyg"
else if(istype(tank,/obj/item/weapon/tank/phoron))
overlays += "tank_plasma"
//else if(istype(tank,/obj/item/weapon/tank/hydrogen))
// overlays += "tank_hydro"
else
overlays += "tank_other"
if(beaker)
overlays += "beaker"
if(attached)
overlays += "line_active"
else
overlays += "line"
var/datum/reagents/reagents = beaker.reagents
var/percent = round((reagents.total_volume / beaker.volume) * 100)
if(reagents.total_volume)
var/image/filling = image('icons/obj/medical_stand_vr.dmi', src, "reagent")
switch(percent)
if(10 to 24) filling.icon_state = "reagent10"
if(25 to 49) filling.icon_state = "reagent25"
if(50 to 74) filling.icon_state = "reagent50"
if(75 to 79) filling.icon_state = "reagent75"
if(80 to 90) filling.icon_state = "reagent80"
if(91 to INFINITY) filling.icon_state = "reagent100"
if (filling.icon)
filling.icon += reagents.get_color()
overlays += filling
/obj/structure/medical_stand/Destroy()
STOP_PROCESSING(SSobj,src)
if(breather)
breather.internal = null
breather.internals?.icon_state = "internal0"
if(tank)
qdel(tank)
if(breather)
breather.remove_from_mob(contained)
src.visible_message("<span class='notice'>The mask rapidly retracts just before /the [src] is destroyed!</span>")
qdel(contained)
contained = null
breather = null
attached = null
qdel(beaker)
beaker = null
return ..()
/obj/structure/medical_stand/attack_robot(var/mob/user)
if(Adjacent(user))
attack_hand(user)
/obj/structure/medical_stand/MouseDrop(var/mob/living/carbon/human/target, src_location, over_location)
..()
if(istype(target))
if(usr.stat == DEAD || !CanMouseDrop(target))
return
var/list/available_options = list()
if (tank)
available_options += "Gas mask"
if (beaker)
available_options += "Drip needle"
var/action_type
if(available_options.len > 1)
action_type = input(usr, "What do you want to attach/detach?") as null|anything in available_options
else if(available_options.len)
action_type = available_options[1]
if(usr.stat == DEAD || !CanMouseDrop(target))
return
switch (action_type)
if("Gas mask")
if(!can_apply_to_target(target, usr)) // There is no point in attempting to apply a mask if it's impossible.
return
if (breather)
src.add_fingerprint(usr)
if(!do_mob(usr, target, 30) || !can_apply_to_target(target, usr))
return
if(tank)
tank.forceMove(src)
if (breather.wear_mask == contained)
breather.remove_from_mob(contained)
contained.forceMove(src)
else
qdel(contained)
contained = new mask_type(src)
breather = null
src.visible_message("<span class='notice'>\The [contained] slips to \the [src]!</span>")
update_icon()
return
usr.visible_message("<span class='notice'>\The [usr] begins carefully placing the mask onto [target].</span>",
"<span class='notice'>You begin carefully placing the mask onto [target].</span>")
if(!do_mob(usr, target, 100) || !can_apply_to_target(target, usr))
return
// place mask and add fingerprints
usr.visible_message("<span class='notice'>\The [usr] has placed \the mask on [target]'s mouth.</span>",
"<span class='notice'>You have placed \the mask on [target]'s mouth.</span>")
if(attach_mask(target))
src.add_fingerprint(usr)
update_icon()
START_PROCESSING(SSobj,src)
return
if("Drip needle")
if(attached)
if(!do_mob(usr, target, 20))
return
visible_message("\The [attached] is taken off \the [src]")
attached = null
else if(ishuman(target))
usr.visible_message("<span class='notice'>\The [usr] begins inserting needle into [target]'s vein.</span>",
"<span class='notice'>You begin inserting needle into [target]'s vein.</span>")
if(!do_mob(usr, target, 50))
usr.visible_message("<span class='notice'>\The [usr]'s hand slips and pricks \the [target].</span>",
"<span class='notice'>Your hand slips and pricks \the [target].</span>")
target.apply_damage(3, BRUTE, pick(BP_R_ARM, BP_L_ARM))
return
usr.visible_message("<span class='notice'>\The [usr] hooks \the [target] up to \the [src].</span>",
"<span class='notice'>You hook \the [target] up to \the [src].</span>")
attached = target
START_PROCESSING(SSobj,src)
update_icon()
/obj/structure/medical_stand/attack_hand(mob/user as mob)
var/list/available_options = list()
if (tank)
available_options += "Toggle valve"
available_options += "Remove tank"
if (beaker)
available_options += "Remove vessel"
var/action_type
if(available_options.len > 1)
action_type = input(user, "What do you want to do?") as null|anything in available_options
else if(available_options.len)
action_type = available_options[1]
switch (action_type)
if ("Remove tank")
if (!tank)
to_chat(user, "<span class='warning'>There is no tank in \the [src]!</span>")
return
else if (tank && is_loosen)
user.visible_message("<span class='notice'>\The [user] removes \the [tank] from \the [src].</span>", "<span class='warning'>You remove \the [tank] from \the [src].</span</span>>")
user.put_in_hands(tank)
tank = null
update_icon()
return
else if (!is_loosen)
user.visible_message("<span class='notice'>\The [user] tries to removes \the [tank] from \the [src] but it won't budge.</span>", "<span class='warning'>You try to removes \the [tank] from \the [src] but it won't budge.</span</span>>")
return
if ("Toggle valve")
if (!tank)
to_chat(user, "<span class='warning'>There is no tank in \the [src]!</span>")
return
else
if (valve_opened)
src.visible_message("<span class='notice'>\The [user] closes valve on \the [src]!</span>",
"<span class='notice'>You close valve on \the [src].</span>")
if(breather)
breather.internals?.icon_state = "internal0"
breather.internal = null
valve_opened = FALSE
update_icon()
else
src.visible_message("<span class='notice'>\The [user] opens valve on \the [src]!</span>",
"<span class='notice'>You open valve on \the [src].</span>")
if(breather)
breather.internal = tank
breather.internals?.icon_state = "internal1"
valve_opened = TRUE
//playsound(get_turf(src), 'sound/effects/internals.ogg', 100, 1)
update_icon()
START_PROCESSING(SSobj,src)
if ("Remove vessel")
if(beaker)
beaker.forceMove(loc)
beaker = null
update_icon()
/obj/structure/medical_stand/verb/toggle_mode()
set category = "Object"
set name = "Toggle IV Mode"
set src in view(1)
if(!istype(usr, /mob/living))
to_chat(usr, "<span class='warning'>You can't do that.</span>")
return
if(usr.incapacitated())
return
mode = !mode
to_chat(usr, "The IV drip is now [mode ? "injecting" : "taking blood"].")
/obj/structure/medical_stand/verb/set_APTFT()
set name = "Set IV transfer amount"
set category = "Object"
set src in range(1)
var/N = input("Amount per transfer from this:","[src]") as null|anything in transfer_amounts
if(N)
transfer_amount = N
/obj/structure/medical_stand/proc/attach_mask(var/mob/living/carbon/C)
if(C && istype(C))
if(C.equip_to_slot_if_possible(contained, slot_wear_mask))
if(tank)
tank.forceMove(C)
breather = C
return TRUE
/obj/structure/medical_stand/proc/can_apply_to_target(var/mob/living/carbon/human/target, var/mob/user)
if(!user)
user = target
// Check target validity
if(!istype(target))
to_chat(user, "<span class='warning'>\The [target] not compatible with machine.</span>")
return
if(!target.organs_by_name[BP_HEAD])
to_chat(user, "<span class='warning'>\The [target] doesn't have a head.</span>")
return
if(!target.check_has_mouth())
to_chat(user, "<span class='warning'>\The [target] doesn't have a mouth.</span>")
return
if(target.wear_mask && target != breather)
to_chat(user, "<span class='warning'>\The [target] is already wearing a mask.</span>")
return
if(target.head && (target.head.body_parts_covered & FACE))
to_chat(user, "<span class='warning'>Remove their [target.head] first.</span>")
return
if(!tank)
to_chat(user, "<span class='warning'>There is no tank in \the [src].</span>")
return
if(is_loosen)
to_chat(user, "<span class='warning'>Tighten \the nut with a wrench first.</span>")
return
if(!Adjacent(target))
return
//when there is a breather:
if(breather && target != breather)
to_chat(user, "<span class='warning'>\The [src] is already in use.</span>")
return
//Checking if breather is still valid
if(target == breather && target.wear_mask != contained)
to_chat(user, "<span class='warning'>\The [target] is not using the supplied mask.</span>")
return
return 1
/obj/structure/medical_stand/attackby(var/obj/item/weapon/W, var/mob/user)
if(istype (W, /obj/item/weapon/tool))
if (valve_opened)
to_chat(user, "<span class='warning'>Close the valve first.</span>")
return
if (tank)
if(!W.is_wrench())
return
if (!is_loosen)
is_loosen = TRUE
else
is_loosen = FALSE
if (valve_opened)
START_PROCESSING(SSobj,src)
user.visible_message(
"<span class='notice'>The [user] [is_loosen == TRUE ? "loosen" : "tighten"] the nut holding [tank] in place.</span>",
"<span class='notice'>You [is_loosen == TRUE ? "loosen" : "tighten"] the nut holding [tank] in place.</span>")
else
to_chat(user, "<span class='warning'>There is no tank in \the [src].</span>")
else if(istype(W, /obj/item/weapon/tank))
if(tank)
to_chat(user, "<span class='warning'>\The [src] already has a tank installed!</span>")
else if(!is_loosen)
to_chat(user, "<span class='warning'>Loosen the nut with a wrench first.</span>")
else
user.drop_item()
W.forceMove(src)
tank = W
user.visible_message("<span class='notice'>\The [user] attaches \the [tank] to \the [src].</span>", "<span class='notice'>You attach \the [tank] to \the [src].</span>")
src.add_fingerprint(user)
update_icon()
else if (istype(W, /obj/item/weapon/reagent_containers))
if(!isnull(src.beaker))
to_chat(user, "There is already a reagent container loaded!")
return
user.drop_item()
W.forceMove(src)
beaker = W
to_chat(user, "You attach \the [W] to \the [src].")
update_icon()
else
return ..()
/obj/structure/medical_stand/examine(var/mob/user)
. = ..()
if (get_dist(src, user) > 2)
return
if(beaker)
to_chat(user, "The IV drip is [mode ? "injecting" : "taking blood"].")
to_chat(user, "It is set to transfer [transfer_amount]u of chemicals per cycle.")
if(beaker.reagents && beaker.reagents.total_volume)
to_chat(user, "<span class='notice'>Attached is \a [beaker] with [beaker.reagents.total_volume] units of liquid.</span>")
else
to_chat(user, "<span class='notice'>Attached is an empty [beaker].</span>")
to_chat(user, "<span class='notice'>[attached ? attached : "No one"] is hooked up to it.</span>")
else
to_chat(user, "<span class='notice'>There is no vessel.</span>")
if(tank)
if (!is_loosen)
to_chat(user, "\The [tank] connected.")
to_chat(user, "The meter shows [round(tank.air_contents.return_pressure())]. The valve is [valve_opened == TRUE ? "open" : "closed"].")
if (tank.distribute_pressure == 0)
to_chat(user, "Use wrench to replace tank.")
else
to_chat(user, "<span class='notice'>There is no tank.</span>")
/obj/structure/medical_stand/process()
//Gas Stuff
if(breather)
if(!can_apply_to_target(breather))
if(tank)
tank.forceMove(src)
if (breather.wear_mask == contained)
breather.remove_from_mob(contained)
contained.forceMove(src)
else
qdel(contained)
contained = new mask_type (src)
src.visible_message("<span class='notice'>\The [contained] slips to \the [src]!</span>")
breather = null
update_icon()
return
if(valve_opened)
if (tank)
breather.internal = tank
breather.internals?.icon_state = "internal1"
else
breather.internals?.icon_state = "internal0"
breather.internal = null
else if (valve_opened)
var/datum/gas_mixture/removed = tank.remove_air(0.01)
var/datum/gas_mixture/environment = loc.return_air()
environment.merge(removed)
//Reagent Stuff
if(attached)
if(!Adjacent(attached))
visible_message("The needle is ripped out of [src.attached], doesn't that hurt?")
attached.apply_damage(3, BRUTE, pick(BP_R_ARM, BP_L_ARM))
attached = null
update_icon()
if(beaker)
if(mode) // Give blood
if(beaker.volume > 0)
beaker.reagents.trans_to_mob(attached, transfer_amount, CHEM_BLOOD)
update_icon()
else // Take blood
var/amount = beaker.reagents.maximum_volume - beaker.reagents.total_volume
amount = min(amount, 4)
if(amount == 0) // If the beaker is full, ping
if(prob(5)) visible_message("\The [src] pings.")
return
var/mob/living/carbon/human/H = attached
if(!istype(H))
return
if(!H.dna)
return
if(NOCLONE in H.mutations)
return
if(H.species.flags & NO_BLOOD)
return
if(!H.should_have_organ(O_HEART))
return
// If the human is losing too much blood, beep.
if(((H.vessel.get_reagent_amount("blood")/H.species.blood_volume)*100) < BLOOD_VOLUME_SAFE)
visible_message("\The [src] beeps loudly.")
var/datum/reagent/B = H.take_blood(beaker,amount)
if (B)
beaker.reagents.reagent_list |= B
beaker.reagents.update_total()
beaker.on_reagent_change()
beaker.reagents.handle_reactions()
update_icon()
if ((!valve_opened || tank.distribute_pressure == 0) && !breather && !attached)
return PROCESS_KILL
/obj/structure/medical_stand/anesthetic
spawn_type = /obj/item/weapon/tank/anesthetic
mask_type = /obj/item/clothing/mask/breath/medical
is_loosen = FALSE
+1 -1
View File
@@ -18,7 +18,7 @@ GLOBAL_LIST_BOILERPLATE(all_mopbuckets, /obj/structure/mopbucket)
/obj/structure/mopbucket/examine(mob/user)
if(..(user, 1))
to_chat(user, "[src] \icon[src] contains [reagents.total_volume] unit\s of water!")
to_chat(user, "[src] [bicon(src)] contains [reagents.total_volume] unit\s of water!")
/obj/structure/mopbucket/attackby(obj/item/I, mob/user)
if(istype(I, /obj/item/weapon/mop) || istype(I, /obj/item/weapon/soap) || istype(I, /obj/item/weapon/reagent_containers/glass/rag)) //VOREStation Edit - "Allows soap and rags to be used on mopbuckets"
+5 -5
View File
@@ -219,7 +219,7 @@ GLOBAL_LIST_BOILERPLATE(all_crematoriums, /obj/structure/morgue/crematorium)
/obj/structure/morgue/crematorium/attack_hand(mob/user as mob)
if (cremating)
usr << "<span class='warning'>It's locked.</span>"
to_chat(usr, "<span class='warning'>It's locked.</span>")
return
if ((src.connected) && (src.locked == 0))
for(var/atom/movable/A as mob|obj in src.connected.loc)
@@ -285,16 +285,16 @@ GLOBAL_LIST_BOILERPLATE(all_crematoriums, /obj/structure/morgue/crematorium)
if(contents.len <= 0)
for (var/mob/M in viewers(src))
to_chat(M,"<span class='warning'>You hear a hollow crackle.</span>")
to_chat(M, "<span class='warning'>You hear a hollow crackle.</span>")
return
else
if(!isemptylist(src.search_contents_for(/obj/item/weapon/disk/nuclear)))
to_chat(user,"You get the feeling that you shouldn't cremate one of the items in the cremator.")
to_chat(user, "You get the feeling that you shouldn't cremate one of the items in the cremator.")
return
for (var/mob/M in viewers(src))
to_chat(M,"<span class='warning'>You hear a roar as the crematorium activates.</span>")
to_chat(M, "<span class='warning'>You hear a roar as the crematorium activates.</span>")
cremating = 1
locked = 1
@@ -349,4 +349,4 @@ GLOBAL_LIST_BOILERPLATE(all_crematoriums, /obj/structure/morgue/crematorium)
if (!C.cremating)
C.cremate(user)
else
to_chat(user,"<span class='warning'>Access denied.</span>")
to_chat(user, "<span class='warning'>Access denied.</span>")
+1 -1
View File
@@ -15,7 +15,7 @@
return
else
if(!isemptylist(src.search_contents_for(/obj/item/weapon/disk/nuclear)))
usr << "You get the feeling that you shouldn't cremate one of the items in the cremator."
to_chat(usr, "You get the feeling that you shouldn't cremate one of the items in the cremator.")
return
for(var/I in contents)
+5 -5
View File
@@ -38,14 +38,14 @@
O.loc = src
notices++
icon_state = "nboard0[notices]" //update sprite
user << "<span class='notice'>You pin the paper to the noticeboard.</span>"
to_chat(user, "<span class='notice'>You pin the paper to the noticeboard.</span>")
else
user << "<span class='notice'>You reach to pin your paper to the board but hesitate. You are certain your paper will not be seen among the many others already attached.</span>"
to_chat(user, "<span class='notice'>You reach to pin your paper to the board but hesitate. You are certain your paper will not be seen among the many others already attached.</span>")
if(O.is_wrench())
user << "<span class='notice'>You start to unwrench the noticeboard.</span>"
to_chat(user, "<span class='notice'>You start to unwrench the noticeboard.</span>")
playsound(src.loc, O.usesound, 50, 1)
if(do_after(user, 15 * O.toolspeed))
user << "<span class='notice'>You unwrench the noticeboard.</span>"
to_chat(user, "<span class='notice'>You unwrench the noticeboard.</span>")
new /obj/item/frame/noticeboard( src.loc )
qdel(src)
return
@@ -92,7 +92,7 @@
add_fingerprint(M)
P.attackby(E, usr)
else
M << "<span class='notice'>You'll need something to write with!</span>"
to_chat(M, "<span class='notice'>You'll need something to write with!</span>")
if(href_list["read"])
var/obj/item/weapon/paper/P = locate(href_list["read"])
if((P && P.loc == src))
@@ -0,0 +1,13 @@
/obj/structure/prop/alien/computer/hybrid
name = "hybrid console"
desc = "The console flashes what appear to be symbols you've never seen before, intermixed with human writing moving too fast to comprehend."
icon = 'icons/obj/abductor_vr.dmi'
icon_state = "console-c"
interaction_message = "<span class='warning'>The screen flashes an 'access denied' message at you. Perhaps for the best.</span>"
/obj/structure/prop/alien/pod/hybrid
name = "hybrid pod"
desc = "This seems to be a container for something."
icon = 'icons/obj/abductor_vr.dmi'
icon_state = "experiment"
interaction_message = "<span class='warning'>You don't see any mechanism to open this thing. Probably for the best.</span>"
@@ -197,16 +197,18 @@
P.rotate_auto(new_bearing)
/obj/structure/prop/prismcontrol/Initialize()
..()
. = ..()
if(my_turrets.len) //Preset controls.
for(var/obj/structure/prop/prism/P in my_turrets)
P.remote_dial = src
return
spawn()
for(var/obj/structure/prop/prism/P in orange(src, world.view)) //Don't search a huge area.
if(P.dialID == dialID && !P.remote_dial && P.external_control_lock)
my_turrets |= P
P.remote_dial = src
else
. = INITIALIZE_HINT_LATELOAD
/obj/structure/prop/prismcontrol/LateInitialize()
for(var/obj/structure/prop/prism/P in orange(src, world.view)) //Don't search a huge area.
if(P.dialID == dialID && !P.remote_dial && P.external_control_lock)
my_turrets |= P
P.remote_dial = src
/obj/structure/prop/prismcontrol/Destroy()
for(var/obj/structure/prop/prism/P in my_turrets)
+366
View File
@@ -0,0 +1,366 @@
/obj/structure/salvageable
name = "broken macninery"
desc = "Broken beyond repair, but looks like you can still salvage something from this if you had a prying implement."
icon = 'icons/obj/salvageable.dmi'
density = 1
anchored = 1
var/salvageable_parts = list()
/obj/structure/salvageable/proc/dismantle()
new /obj/structure/frame (src.loc)
for(var/path in salvageable_parts)
if(prob(salvageable_parts[path]))
new path (loc)
return
/obj/structure/salvageable/attackby(obj/item/I, mob/user)
if(I.is_crowbar())
playsound(loc, I.usesound, 50, 1)
var/actual_time = I.toolspeed * 170
user.visible_message( \
"<span class='notice'>\The [user] begins salvaging from \the [src].</span>", \
"<span class='notice'>You start salvaging from \the [src].</span>")
if(do_after(user, actual_time, target = src))
user.visible_message( \
"<span class='notice'>\The [user] has salvaged \the [src].</span>", \
"<span class='notice'>You salvage \the [src].</span>")
dismantle()
qdel(src)
return TRUE
return ..()
//Types themself, use them, but not the parent object
/obj/structure/salvageable/machine
name = "broken machine"
icon_state = "machine1"
salvageable_parts = list(
/obj/item/weapon/stock_parts/console_screen = 80,
/obj/item/stack/cable_coil{amount = 5} = 80,
/obj/item/trash/material/circuit = 60,
/obj/item/trash/material/metal = 60,
/obj/item/weapon/stock_parts/capacitor = 40,
/obj/item/weapon/stock_parts/capacitor = 40,
/obj/item/weapon/stock_parts/scanning_module = 40,
/obj/item/weapon/stock_parts/scanning_module = 40,
/obj/item/weapon/stock_parts/manipulator = 40,
/obj/item/weapon/stock_parts/manipulator = 40,
/obj/item/weapon/stock_parts/micro_laser = 40,
/obj/item/weapon/stock_parts/micro_laser = 40,
/obj/item/weapon/stock_parts/matter_bin = 40,
/obj/item/weapon/stock_parts/matter_bin = 40,
/obj/item/weapon/stock_parts/capacitor/adv = 20,
/obj/item/weapon/stock_parts/scanning_module/adv = 20,
/obj/item/weapon/stock_parts/manipulator/nano = 20,
/obj/item/weapon/stock_parts/micro_laser/high = 20,
/obj/item/weapon/stock_parts/matter_bin/adv = 20
)
/obj/structure/salvageable/machine/Initialize()
. = ..()
icon_state = "machine[rand(0,6)]"
/obj/structure/salvageable/computer
name = "broken computer"
icon_state = "computer0"
salvageable_parts = list(
/obj/item/weapon/stock_parts/console_screen = 80,
/obj/item/stack/cable_coil{amount = 5} = 90,
/obj/item/stack/material/glass{amount = 5} = 90,
/obj/item/trash/material/circuit = 60,
/obj/item/trash/material/metal = 60,
/obj/item/weapon/stock_parts/capacitor = 60,
/obj/item/weapon/stock_parts/capacitor = 60,
/obj/item/weapon/computer_hardware/network_card = 40,
/obj/item/weapon/computer_hardware/network_card = 40,
/obj/item/weapon/computer_hardware/processor_unit = 40,
/obj/item/weapon/computer_hardware/processor_unit = 40,
/obj/item/weapon/computer_hardware/card_slot = 40,
/obj/item/weapon/computer_hardware/card_slot = 40,
/obj/item/weapon/stock_parts/capacitor/adv = 30,
/obj/item/weapon/computer_hardware/network_card/advanced = 20
)
obj/structure/salvageable/computer/Initialize()
. = ..()
icon_state = "computer[rand(0,7)]"
/obj/structure/salvageable/autolathe
name = "broken autolathe"
icon_state = "autolathe"
salvageable_parts = list(
/obj/item/weapon/stock_parts/console_screen = 80,
/obj/item/stack/cable_coil{amount = 5} = 80,
/obj/item/trash/material/circuit = 60,
/obj/item/trash/material/metal = 60,
/obj/item/weapon/stock_parts/capacitor = 40,
/obj/item/weapon/stock_parts/scanning_module = 40,
/obj/item/weapon/stock_parts/manipulator = 40,
/obj/item/weapon/stock_parts/micro_laser = 40,
/obj/item/weapon/stock_parts/micro_laser = 40,
/obj/item/weapon/stock_parts/micro_laser = 40,
/obj/item/weapon/stock_parts/matter_bin = 40,
/obj/item/weapon/stock_parts/matter_bin = 40,
/obj/item/weapon/stock_parts/matter_bin = 40,
/obj/item/weapon/stock_parts/matter_bin = 40,
/obj/item/weapon/stock_parts/capacitor/adv = 20,
/obj/item/weapon/stock_parts/micro_laser/high = 20,
/obj/item/weapon/stock_parts/micro_laser/high = 20,
/obj/item/weapon/stock_parts/matter_bin/adv = 20,
/obj/item/weapon/stock_parts/matter_bin/adv = 20,
/obj/item/stack/material/steel{amount = 20} = 40,
/obj/item/stack/material/glass{amount = 20} = 40,
/obj/item/stack/material/plastic{amount = 20} = 40,
/obj/item/stack/material/plasteel{amount = 10} = 40,
/obj/item/stack/material/silver{amount = 10} = 20,
/obj/item/stack/material/gold{amount = 10} = 20,
/obj/item/stack/material/phoron{amount = 10} = 20
)
/obj/structure/salvageable/implant_container
name = "old container"
icon_state = "implant_container0"
salvageable_parts = list(
/obj/item/weapon/stock_parts/console_screen = 80,
/obj/item/stack/cable_coil{amount = 5} = 80,
/obj/item/trash/material/circuit = 60,
/obj/item/trash/material/metal = 60,
/obj/item/weapon/implant/death_alarm = 15,
/obj/item/weapon/implant/explosive = 10,
/obj/item/weapon/implant/freedom = 5,
/obj/item/weapon/implant/tracking = 10,
/obj/item/weapon/implant/chem = 10,
/obj/item/weapon/implantcase = 30,
/obj/item/weapon/implanter = 30,
/obj/item/stack/material/steel{amount = 10} = 30,
/obj/item/stack/material/glass{amount = 10} = 30,
/obj/item/stack/material/silver{amount = 10} = 30
)
obj/structure/salvageable/implant_container/Initialize()
. = ..()
icon_state = "implant_container[rand(0,1)]"
/obj/structure/salvageable/data
name = "broken data storage"
icon_state = "data0"
salvageable_parts = list(
/obj/item/weapon/stock_parts/console_screen = 80,
/obj/item/stack/cable_coil{amount = 5} = 90,
/obj/item/stack/material/glass{amount = 5} = 90,
/obj/item/trash/material/circuit = 60,
/obj/item/trash/material/metal = 60,
/obj/item/weapon/computer_hardware/network_card = 40,
/obj/item/weapon/computer_hardware/network_card = 40,
/obj/item/weapon/computer_hardware/processor_unit = 40,
/obj/item/weapon/computer_hardware/processor_unit = 40,
/obj/item/weapon/computer_hardware/hard_drive = 50,
/obj/item/weapon/computer_hardware/hard_drive = 50,
/obj/item/weapon/computer_hardware/hard_drive = 50,
/obj/item/weapon/computer_hardware/hard_drive = 50,
/obj/item/weapon/computer_hardware/hard_drive = 50,
/obj/item/weapon/computer_hardware/hard_drive = 50,
/obj/item/weapon/computer_hardware/hard_drive/advanced = 30,
/obj/item/weapon/computer_hardware/hard_drive/advanced = 30,
/obj/item/weapon/computer_hardware/network_card/advanced = 20
)
obj/structure/salvageable/data/Initialize()
. = ..()
icon_state = "data[rand(0,1)]"
/obj/structure/salvageable/server
name = "broken server"
icon_state = "server0"
salvageable_parts = list(
/obj/item/weapon/stock_parts/console_screen = 80,
/obj/item/stack/cable_coil{amount = 5} = 90,
/obj/item/stack/material/glass{amount = 5} = 90,
/obj/item/trash/material/circuit = 60,
/obj/item/trash/material/metal = 60,
/obj/item/weapon/computer_hardware/network_card = 40,
/obj/item/weapon/computer_hardware/network_card = 40,
/obj/item/weapon/computer_hardware/processor_unit = 40,
/obj/item/weapon/computer_hardware/processor_unit = 40,
/obj/item/weapon/stock_parts/subspace/amplifier = 40,
/obj/item/weapon/stock_parts/subspace/amplifier = 40,
/obj/item/weapon/stock_parts/subspace/analyzer = 40,
/obj/item/weapon/stock_parts/subspace/analyzer = 40,
/obj/item/weapon/stock_parts/subspace/ansible = 40,
/obj/item/weapon/stock_parts/subspace/ansible = 40,
/obj/item/weapon/stock_parts/subspace/transmitter = 40,
/obj/item/weapon/stock_parts/subspace/transmitter = 40,
/obj/item/weapon/stock_parts/subspace/crystal = 30,
/obj/item/weapon/stock_parts/subspace/crystal = 30,
/obj/item/weapon/computer_hardware/network_card/advanced = 20
)
obj/structure/salvageable/server/Initialize()
. = ..()
icon_state = "server[rand(0,1)]"
/obj/structure/salvageable/personal
name = "personal terminal"
icon_state = "personal0"
salvageable_parts = list(
/obj/item/weapon/stock_parts/console_screen = 90,
/obj/item/stack/cable_coil{amount = 5} = 90,
/obj/item/stack/material/glass{amount = 5} = 70,
/obj/item/trash/material/circuit = 60,
/obj/item/trash/material/metal = 60,
/obj/item/weapon/computer_hardware/network_card = 60,
/obj/item/weapon/computer_hardware/network_card/advanced = 40,
/obj/item/weapon/computer_hardware/network_card/wired = 40,
/obj/item/weapon/computer_hardware/card_slot = 40,
/obj/item/weapon/computer_hardware/processor_unit = 60,
/obj/item/weapon/computer_hardware/processor_unit/small = 50,
/obj/item/weapon/computer_hardware/processor_unit/photonic = 40,
/obj/item/weapon/computer_hardware/processor_unit/photonic/small = 30,
/obj/item/weapon/computer_hardware/hard_drive = 60,
/obj/item/weapon/computer_hardware/hard_drive/advanced = 40
)
obj/structure/salvageable/personal/Initialize()
. = ..()
icon_state = "personal[rand(0,12)]"
new /obj/structure/table/reinforced (loc)
/obj/structure/salvageable/bliss
name = "strange terminal"
icon_state = "bliss0"
salvageable_parts = list(
/obj/item/weapon/stock_parts/console_screen = 90,
/obj/item/stack/cable_coil{amount = 5} = 90,
/obj/item/weapon/computer_hardware/processor_unit/photonic = 60,
/obj/item/weapon/computer_hardware/hard_drive/cluster = 50
)
obj/structure/salvageable/bliss/Initialize()
. = ..()
icon_state = "bliss[rand(0,1)]"
/obj/structure/salvageable/bliss/attackby(obj/item/I, mob/user)
if((. = ..()))
playsound(user, 'sound/machines/shutdown.ogg', 60, 1)
//////////////////
//// ONE STAR ////
//////////////////
/obj/structure/salvageable/machine_os
name = "broken machine"
icon_state = "os-machine"
salvageable_parts = list(
/obj/item/weapon/stock_parts/console_screen = 80,
/obj/item/stack/cable_coil{amount = 5} = 80,
/obj/item/weapon/stock_parts/capacitor = 40,
/obj/item/weapon/stock_parts/capacitor = 40,
/obj/item/weapon/stock_parts/scanning_module = 40,
/obj/item/weapon/stock_parts/scanning_module = 40,
/obj/item/weapon/stock_parts/manipulator = 40,
/obj/item/weapon/stock_parts/manipulator = 40,
/obj/item/weapon/stock_parts/micro_laser = 40,
/obj/item/weapon/stock_parts/micro_laser = 40,
/obj/item/weapon/stock_parts/matter_bin = 40,
/obj/item/weapon/stock_parts/matter_bin = 40
)
/obj/structure/salvageable/computer_os
name = "broken computer"
icon_state = "os-computer"
salvageable_parts = list(
/obj/item/weapon/stock_parts/console_screen = 80,
/obj/item/stack/cable_coil{amount = 5} = 90,
/obj/item/stack/material/glass{amount = 5} = 90,
/obj/item/weapon/stock_parts/capacitor = 60,
/obj/item/weapon/stock_parts/capacitor = 60,
/obj/item/weapon/computer_hardware/processor_unit/photonic = 40,
/obj/item/weapon/computer_hardware/processor_unit/photonic = 40,
/obj/item/weapon/computer_hardware/card_slot = 40,
/obj/item/weapon/computer_hardware/card_slot = 40,
/obj/item/weapon/computer_hardware/network_card/advanced = 40
)
/obj/structure/salvageable/implant_container_os
name = "old container"
icon_state = "os-container"
salvageable_parts = list(
/obj/item/weapon/stock_parts/console_screen = 80,
/obj/item/stack/cable_coil{amount = 5} = 80,
/obj/item/weapon/implant/death_alarm = 30,
/obj/item/weapon/implant/explosive = 20,
/obj/item/weapon/implant/freedom = 20,
/obj/item/weapon/implant/tracking = 30,
/obj/item/weapon/implant/chem = 30,
/obj/item/weapon/implantcase = 30,
/obj/item/weapon/implanter = 30
)
/obj/structure/salvageable/data_os
name = "broken data storage"
icon_state = "os-data"
salvageable_parts = list(
/obj/item/weapon/stock_parts/console_screen = 90,
/obj/item/stack/cable_coil{amount = 5} = 90,
/obj/item/stack/material/glass{amount = 5} = 90,
/obj/item/weapon/computer_hardware/processor_unit/small = 60,
/obj/item/weapon/computer_hardware/processor_unit/photonic = 50,
/obj/item/weapon/computer_hardware/hard_drive/super = 50,
/obj/item/weapon/computer_hardware/hard_drive/super = 50,
/obj/item/weapon/computer_hardware/hard_drive/cluster = 50,
/obj/item/weapon/computer_hardware/network_card/wired = 40
)
/obj/structure/salvageable/server_os
name = "broken server"
icon_state = "os-server"
salvageable_parts = list(
/obj/item/weapon/stock_parts/console_screen = 80,
/obj/item/stack/cable_coil{amount = 5} = 90,
/obj/item/stack/material/glass{amount = 5} = 90,
/obj/item/weapon/computer_hardware/network_card/wired = 40,
/obj/item/weapon/computer_hardware/network_card/wired = 40,
/obj/item/weapon/computer_hardware/processor_unit = 40,
/obj/item/weapon/computer_hardware/processor_unit/photonic = 40,
/obj/item/weapon/stock_parts/subspace/amplifier = 40,
/obj/item/weapon/stock_parts/subspace/amplifier = 40,
/obj/item/weapon/stock_parts/subspace/analyzer = 40,
/obj/item/weapon/stock_parts/subspace/analyzer = 40,
/obj/item/weapon/stock_parts/subspace/ansible = 40,
/obj/item/weapon/stock_parts/subspace/ansible = 40,
/obj/item/weapon/stock_parts/subspace/transmitter = 40,
/obj/item/weapon/stock_parts/subspace/transmitter = 40,
/obj/item/weapon/stock_parts/subspace/crystal = 30,
/obj/item/weapon/stock_parts/subspace/crystal = 30,
/obj/item/weapon/computer_hardware/network_card/wired = 20
)
/obj/structure/salvageable/console_os
name = "pristine console"
desc = "Despite being in pristine condition this console doesn't respond to anything, but looks like you can still salvage something from this."
icon_state = "os_console"
salvageable_parts = list(
/obj/item/stack/cable_coil{amount = 5} = 90,
/obj/item/weapon/stock_parts/console_screen = 80,
/obj/item/weapon/stock_parts/capacitor = 60,
/obj/item/weapon/stock_parts/capacitor = 60,
/obj/item/weapon/computer_hardware/processor_unit/small = 40,
/obj/item/weapon/computer_hardware/processor_unit/photonic = 40,
/obj/item/weapon/computer_hardware/card_slot = 40,
/obj/item/weapon/computer_hardware/card_slot = 40,
/obj/item/weapon/computer_hardware/network_card/advanced = 40
)
/obj/structure/salvageable/console_broken_os
name = "broken console"
icon_state = "os_console_broken"
salvageable_parts = list(
/obj/item/stack/cable_coil{amount = 5} = 90,
/obj/item/weapon/stock_parts/console_screen = 80,
/obj/item/weapon/stock_parts/capacitor = 60,
/obj/item/weapon/stock_parts/capacitor = 60,
/obj/item/weapon/computer_hardware/processor_unit = 40,
/obj/item/weapon/computer_hardware/processor_unit/photonic = 40,
/obj/item/weapon/computer_hardware/card_slot = 40,
/obj/item/weapon/computer_hardware/card_slot = 40,
/obj/item/weapon/computer_hardware/network_card/advanced = 40
)
@@ -0,0 +1,23 @@
/material/flockium
name = "flockium"
//stack_type = /obj/item/stack/material/sandstone
icon_base = "flock"
icon_reinf = "flock"
icon_colour = "#FFFFFF"
//shard_type = SHARD_STONE_PIECE
weight = 30
hardness = 200
protectiveness = 5 // 20%
conductive = 0
conductivity = 0
door_icon_base = "flockdoor"
sheet_singular_name = "quanta"
sheet_plural_name = "quanta"
/obj/structure/simple_door/flock
name = "aperture"
icon = 'icons/goonstation/featherzone.dmi'
icon_state = "flockdoor"
/obj/structure/simple_door/flock/New(var/newloc, var/newmat)
..(newloc, "flockium")
+1 -1
View File
@@ -7,7 +7,7 @@
/obj/structure/snowman/attack_hand(mob/user as mob)
if(user.a_intent == I_HURT)
user << "<span class='notice'>In one hit, [src] easily crumples into a pile of snow. You monster.</span>"
to_chat(user, "<span class='notice'>In one hit, [src] easily crumples into a pile of snow. You monster.</span>")
var/turf/simulated/floor/F = get_turf(src)
if (istype(F))
new /obj/item/stack/material/snow(F)
@@ -42,16 +42,15 @@
/obj/structure/bed/update_icon()
// Prep icon.
icon_state = ""
overlays.Cut()
cut_overlays()
// Base icon.
var/cache_key = "[base_icon]-[material.name]"
if(isnull(stool_cache[cache_key]))
var/image/I = image(icon, base_icon) //VOREStation Edit
//var/image/I = image('icons/obj/furniture.dmi', base_icon) //From Polaris Sync. Not sure if this is a better way of doing it or not. Uncomment if so.
var/image/I = image(icon, base_icon)
if(applies_material_colour) //VOREStation Add - Goes with added var
I.color = material.icon_colour
stool_cache[cache_key] = I
overlays |= stool_cache[cache_key]
add_overlay(stool_cache[cache_key])
// Padding overlay.
if(padding_material)
var/padding_cache_key = "[base_icon]-padding-[padding_material.name]"
@@ -59,7 +58,7 @@
var/image/I = image(icon, "[base_icon]_padding")
I.color = padding_material.icon_colour
stool_cache[padding_cache_key] = I
overlays |= stool_cache[padding_cache_key]
add_overlay(stool_cache[padding_cache_key])
// Strings.
desc = initial(desc)
if(padding_material)
@@ -232,6 +231,7 @@
desc = "A collapsed roller bed that can be carried around."
icon = 'icons/obj/rollerbed.dmi'
icon_state = "folded_rollerbed"
center_of_mass = list("x" = 17,"y" = 7)
slot_flags = SLOT_BACK
w_class = ITEMSIZE_LARGE
var/rollertype = /obj/item/roller
@@ -288,6 +288,7 @@
/obj/structure/bed/roller/Move()
..()
playsound(src, 'sound/effects/roll.ogg', 100, 1)
if(has_buckled_mobs())
for(var/A in buckled_mobs)
var/mob/living/L = A
@@ -347,4 +348,4 @@
return // Doesn't care about material or anything else.
/obj/structure/bed/alien/attackby(obj/item/weapon/W, mob/user)
return // No deconning.
return // No deconning.
@@ -9,11 +9,9 @@
buckle_lying = 0 //force people to sit up in chairs when buckled
var/propelled = 0 // Check for fire-extinguisher-driven chairs
/obj/structure/bed/chair/New()
..() //Todo make metal/stone chairs display as thrones
spawn(3) //sorry. i don't think there's a better way to do this.
update_layer()
return
/obj/structure/bed/chair/Initialize()
. = ..()
update_layer()
/obj/structure/bed/chair/attackby(obj/item/weapon/W as obj, mob/user as mob)
..()
@@ -43,15 +41,16 @@
/obj/structure/bed/chair/update_icon()
..()
if(has_buckled_mobs() && padding_material)
var/cache_key = "[base_icon]-armrest-[padding_material.name]"
if(has_buckled_mobs())
var/cache_key = "[base_icon]-armrest-[padding_material ? padding_material.name : "no_material"]"
if(isnull(stool_cache[cache_key]))
var/image/I = image(icon, "[base_icon]_armrest")
I.layer = MOB_LAYER + 0.1
I.plane = MOB_PLANE
I.color = padding_material.icon_colour
I.layer = ABOVE_MOB_LAYER
if(padding_material)
I.color = padding_material.icon_colour
stool_cache[cache_key] = I
overlays |= stool_cache[cache_key]
add_overlay(stool_cache[cache_key])
/obj/structure/bed/chair/proc/update_layer()
if(src.dir == NORTH)
@@ -85,15 +84,16 @@
/obj/structure/bed/chair/shuttle
name = "chair"
desc = "You sit in this. Either by will or force."
icon_state = "shuttle_chair"
icon_state = "shuttlechair"
color = null
base_icon = "shuttle_chair"
base_icon = "shuttlechair"
applies_material_colour = 0
// Leaving this in for the sake of compilation.
/obj/structure/bed/chair/comfy
desc = "It's a chair. It looks comfy."
icon_state = "comfychair_preview"
icon_state = "comfychair"
base_icon = "comfychair"
/obj/structure/bed/chair/comfy/brown/New(var/newloc,var/newmaterial)
..(newloc,"steel","leather")
@@ -122,6 +122,12 @@
/obj/structure/bed/chair/comfy/lime/New(var/newloc,var/newmaterial)
..(newloc,"steel","lime")
/obj/structure/bed/chair/comfy/yellow/New(var/newloc,var/newmaterial)
..(newloc,"steel","yellow")
/obj/structure/bed/chair/comfy/orange/New(var/newloc,var/newmaterial)
..(newloc,"steel","orange")
/obj/structure/bed/chair/office
anchored = 0
buckle_movable = 1
@@ -136,6 +142,7 @@
/obj/structure/bed/chair/office/Move()
..()
playsound(src, 'sound/effects/roll.ogg', 100, 1)
if(has_buckled_mobs())
for(var/A in buckled_mobs)
var/mob/living/occupant = A
@@ -203,3 +210,172 @@
/obj/structure/bed/chair/wood/wings
icon_state = "wooden_chair_wings"
//sofa
/obj/structure/bed/chair/sofa
name = "sofa"
desc = "It's a sofa. You sit on it. Possibly with someone else."
icon = 'icons/obj/sofas.dmi'
base_icon = "sofamiddle"
icon_state = "sofamiddle"
applies_material_colour = 1
var/sofa_material = "carpet"
/obj/structure/bed/chair/sofa/update_icon()
if(applies_material_colour && sofa_material)
var/material/color_material = get_material_by_name(sofa_material)
color = color_material.icon_colour
if(sofa_material == "carpet")
name = "red [initial(name)]"
else
name = "[sofa_material] [initial(name)]"
/obj/structure/bed/chair/sofa/left
icon_state = "sofaend_left"
base_icon = "sofaend_left"
/obj/structure/bed/chair/sofa/right
icon_state = "sofaend_right"
base_icon = "sofaend_right"
/obj/structure/bed/chair/sofa/corner
icon_state = "sofacorner"
base_icon = "sofacorner"
//color variations
/obj/structure/bed/chair/sofa
sofa_material = "carpet"
/obj/structure/bed/chair/sofa/brown
sofa_material = "leather"
/obj/structure/bed/chair/sofa/teal
sofa_material = "teal"
/obj/structure/bed/chair/sofa/black
sofa_material = "black"
/obj/structure/bed/chair/sofa/green
sofa_material = "green"
/obj/structure/bed/chair/sofa/purp
sofa_material = "purple"
/obj/structure/bed/chair/sofa/blue
sofa_material = "blue"
/obj/structure/bed/chair/sofa/beige
sofa_material = "beige"
/obj/structure/bed/chair/sofa/lime
sofa_material = "lime"
/obj/structure/bed/chair/sofa/yellow
sofa_material = "yellow"
/obj/structure/bed/chair/sofa/orange
sofa_material = "orange"
//sofa directions
/obj/structure/bed/chair/sofa/left
icon_state = "sofaend_left"
/obj/structure/bed/chair/sofa/right
icon_state = "sofaend_right"
/obj/structure/bed/chair/sofa/corner
icon_state = "sofacorner"
/obj/structure/bed/chair/sofa/brown/left
icon_state = "sofaend_left"
/obj/structure/bed/chair/sofa/brown/right
icon_state = "sofaend_right"
/obj/structure/bed/chair/sofa/brown/corner
icon_state = "sofacorner"
/obj/structure/bed/chair/sofa/teal/left
icon_state = "sofaend_left"
/obj/structure/bed/chair/sofa/teal/right
icon_state = "sofaend_right"
/obj/structure/bed/chair/sofa/teal/corner
icon_state = "sofacorner"
/obj/structure/bed/chair/sofa/black/left
icon_state = "sofaend_left"
/obj/structure/bed/chair/sofa/black/right
icon_state = "sofaend_right"
/obj/structure/bed/chair/sofa/black/corner
icon_state = "sofacorner"
/obj/structure/bed/chair/sofa/green/left
icon_state = "sofaend_left"
/obj/structure/bed/chair/sofa/green/right
icon_state = "sofaend_right"
/obj/structure/bed/chair/sofa/green/corner
icon_state = "sofacorner"
/obj/structure/bed/chair/sofa/purp/left
icon_state = "sofaend_left"
/obj/structure/bed/chair/sofa/purp/right
icon_state = "sofaend_right"
/obj/structure/bed/chair/sofa/purp/corner
icon_state = "sofacorner"
/obj/structure/bed/chair/sofa/blue/left
icon_state = "sofaend_left"
/obj/structure/bed/chair/sofa/blue/right
icon_state = "sofaend_right"
/obj/structure/bed/chair/sofa/blue/corner
icon_state = "sofacorner"
/obj/structure/bed/chair/sofa/beige/left
icon_state = "sofaend_left"
/obj/structure/bed/chair/sofa/beige/right
icon_state = "sofaend_right"
/obj/structure/bed/chair/sofa/beige/corner
icon_state = "sofacorner"
/obj/structure/bed/chair/sofa/lime/left
icon_state = "sofaend_left"
/obj/structure/bed/chair/sofa/lime/right
icon_state = "sofaend_right"
/obj/structure/bed/chair/sofa/lime/corner
icon_state = "sofacorner"
/obj/structure/bed/chair/sofa/yellow/left
icon_state = "sofaend_left"
/obj/structure/bed/chair/sofa/yellow/right
icon_state = "sofaend_right"
/obj/structure/bed/chair/sofa/yellow/corner
icon_state = "sofacorner"
/obj/structure/bed/chair/sofa/orange/left
icon_state = "sofaend_left"
/obj/structure/bed/chair/sofa/orange/right
icon_state = "sofaend_right"
/obj/structure/bed/chair/sofa/orange/corner
icon_state = "sofacorner"
@@ -1,20 +1,245 @@
/obj/structure/bed/chair/sofa
name = "sofa"
desc = "A padded, comfy sofa. Great for lazing on."
base_icon = "sofamiddle"
/obj/structure/bed/chair/modern_chair
name = "modern chair"
desc = "It's like sitting in an egg."
icon_state = "modern_chair"
color = null
base_icon = "modern_chair"
applies_material_colour = 0
/obj/structure/bed/chair/sofa/left
base_icon = "sofaend_left"
/obj/structure/bed/chair/modern_chair/Initialize()
. = ..()
var/image/I = image(icon, "[base_icon]_over")
I.layer = ABOVE_MOB_LAYER
I.plane = MOB_PLANE
add_overlay(I)
/obj/structure/bed/chair/sofa/right
base_icon = "sofaend_right"
/obj/structure/bed/chair/bar_stool
name = "bar stool"
desc = "How vibrant!"
icon_state = "modern_stool"
color = null
base_icon = "modern_stool"
applies_material_colour = 0
/obj/structure/bed/chair/sofa/corner
base_icon = "sofacorner"
/obj/structure/bed/chair/backed_grey
name = "grey chair"
desc = "Also available in red."
icon_state = "onestar_chair_grey"
color = null
base_icon = "onestar_chair_grey"
applies_material_colour = 0
/obj/structure/bed/chair/sofa/corner/update_layer()
if(src.dir == NORTH || src.dir == WEST)
plane = MOB_PLANE
layer = MOB_LAYER + 0.1
/obj/structure/bed/chair/backed_red
name = "red chair"
desc = "Also available in grey."
icon_state = "onestar_chair_red"
color = null
base_icon = "onestar_chair_red"
applies_material_colour = 0
// Baystation12 chairs with their larger update_icons proc
/obj/structure/bed/chair/bay/update_icon()
// Strings.
desc = initial(desc)
if(padding_material)
name = "[padding_material.display_name] [initial(name)]" //this is not perfect but it will do for now.
desc += " It's made of [material.use_name] and covered with [padding_material.use_name]."
else
reset_plane_and_layer()
name = "[material.display_name] [initial(name)]"
desc += " It's made of [material.use_name]."
// Prep icon.
icon_state = ""
cut_overlays()
// Base icon (base material color)
var/cache_key = "[base_icon]-[material.name]"
if(isnull(stool_cache[cache_key]))
var/image/I = image(icon, base_icon)
if(applies_material_colour)
I.color = material.icon_colour
stool_cache[cache_key] = I
add_overlay(stool_cache[cache_key])
// Padding ('_padding') (padding material color)
if(padding_material)
var/padding_cache_key = "[base_icon]-padding-[padding_material.name]"
if(isnull(stool_cache[padding_cache_key]))
var/image/I = image(icon, "[base_icon]_padding")
I.color = padding_material.icon_colour
stool_cache[padding_cache_key] = I
add_overlay(stool_cache[padding_cache_key])
// Over ('_over') (base material color)
cache_key = "[base_icon]-[material.name]-over"
if(isnull(stool_cache[cache_key]))
var/image/I = image(icon, "[base_icon]_over")
I.plane = MOB_PLANE
I.layer = ABOVE_MOB_LAYER
if(applies_material_colour)
I.color = material.icon_colour
stool_cache[cache_key] = I
add_overlay(stool_cache[cache_key])
// Padding Over ('_padding_over') (padding material color)
if(padding_material)
var/padding_cache_key = "[base_icon]-padding-[padding_material.name]-over"
if(isnull(stool_cache[padding_cache_key]))
var/image/I = image(icon, "[base_icon]_padding_over")
I.color = padding_material.icon_colour
I.plane = MOB_PLANE
I.layer = ABOVE_MOB_LAYER
stool_cache[padding_cache_key] = I
add_overlay(stool_cache[padding_cache_key])
if(has_buckled_mobs())
if(padding_material)
cache_key = "[base_icon]-armrest-[padding_material.name]"
// Armrest ('_armrest') (base material color)
if(isnull(stool_cache[cache_key]))
var/image/I = image(icon, "[base_icon]_armrest")
I.plane = MOB_PLANE
I.layer = ABOVE_MOB_LAYER
if(applies_material_colour)
I.color = material.icon_colour
stool_cache[cache_key] = I
add_overlay(stool_cache[cache_key])
if(padding_material)
cache_key = "[base_icon]-padding-armrest-[padding_material.name]"
// Padding Armrest ('_padding_armrest') (padding material color)
if(isnull(stool_cache[cache_key]))
var/image/I = image(icon, "[base_icon]_padding_armrest")
I.plane = MOB_PLANE
I.layer = ABOVE_MOB_LAYER
I.color = padding_material.icon_colour
stool_cache[cache_key] = I
add_overlay(stool_cache[cache_key])
/obj/structure/bed/chair/bay/chair
name = "mounted chair"
desc = "Like a normal chair, but more stationary."
icon_state = "bay_chair_preview"
base_icon = "bay_chair"
/obj/structure/bed/chair/bay/chair/padded/red/New(var/newloc, var/new_material, var/new_padding_material)
..(newloc, new_material, "carpet")
/obj/structure/bed/chair/bay/chair/padded/brown/New(var/newloc, var/new_material, var/new_padding_material)
..(newloc, new_material, "leather")
/obj/structure/bed/chair/bay/chair/padded/teal/New(var/newloc, var/new_material, var/new_padding_material)
..(newloc, new_material, "teal")
/obj/structure/bed/chair/bay/chair/padded/black/New(var/newloc, var/new_material, var/new_padding_material)
..(newloc, new_material, "black")
/obj/structure/bed/chair/bay/chair/padded/green/New(var/newloc, var/new_material, var/new_padding_material)
..(newloc, new_material, "green")
/obj/structure/bed/chair/bay/chair/padded/purple/New(var/newloc, var/new_material, var/new_padding_material)
..(newloc, new_material, "purple")
/obj/structure/bed/chair/bay/chair/padded/blue/New(var/newloc, var/new_material, var/new_padding_material)
..(newloc, new_material, "blue")
/obj/structure/bed/chair/bay/chair/padded/beige/New(var/newloc, var/new_material, var/new_padding_material)
..(newloc, new_material, "beige")
/obj/structure/bed/chair/bay/chair/padded/lime/New(var/newloc, var/new_material, var/new_padding_material)
..(newloc, new_material, "lime")
/obj/structure/bed/chair/bay/chair/padded/yellow/New(var/newloc, var/new_material, var/new_padding_material)
..(newloc, new_material, "yellow")
/obj/structure/bed/chair/bay/comfy
name = "comfy mounted chair"
desc = "Like a normal chair, but more stationary, and with more padding."
icon_state = "bay_comfychair_preview"
base_icon = "bay_comfychair"
/obj/structure/bed/chair/bay/comfy/red/New(var/newloc, var/new_material, var/new_padding_material)
..(newloc, new_material, "carpet")
/obj/structure/bed/chair/bay/comfy/brown/New(var/newloc, var/new_material, var/new_padding_material)
..(newloc, new_material, "leather")
/obj/structure/bed/chair/bay/comfy/teal/New(var/newloc, var/new_material, var/new_padding_material)
..(newloc, new_material, "teal")
/obj/structure/bed/chair/bay/comfy/black/New(var/newloc, var/new_material, var/new_padding_material)
..(newloc, new_material, "black")
/obj/structure/bed/chair/bay/comfy/green/New(var/newloc, var/new_material, var/new_padding_material)
..(newloc, new_material, "green")
/obj/structure/bed/chair/bay/comfy/purple/New(var/newloc, var/new_material, var/new_padding_material)
..(newloc, new_material, "purple")
/obj/structure/bed/chair/bay/comfy/blue/New(var/newloc, var/new_material, var/new_padding_material)
..(newloc, new_material, "blue")
/obj/structure/bed/chair/bay/comfy/beige/New(var/newloc, var/new_material, var/new_padding_material)
..(newloc, new_material, "beige")
/obj/structure/bed/chair/bay/comfy/lime/New(var/newloc, var/new_material, var/new_padding_material)
..(newloc, new_material, "lime")
/obj/structure/bed/chair/bay/comfy/yellow/New(var/newloc, var/new_material, var/new_padding_material)
..(newloc, new_material, "yellow")
/obj/structure/bed/chair/bay/comfy/captain
name = "captain chair"
desc = "It's a chair. Only for the highest ranked asses."
icon_state = "capchair_preview"
base_icon = "capchair"
buckle_movable = 1
/obj/structure/bed/chair/bay/comfy/captain/update_icon()
..()
var/image/I = image(icon, "[base_icon]_special")
I.plane = MOB_PLANE
I.layer = ABOVE_MOB_LAYER
add_overlay(I)
/obj/structure/bed/chair/bay/comfy/captain/New(var/newloc, var/new_material, var/new_padding_material)
..(newloc, DEFAULT_WALL_MATERIAL, "blue")
/obj/structure/bed/chair/bay/shuttle
name = "shuttle seat"
desc = "A comfortable, secure seat. It has a sturdy-looking buckling system for smoother flights."
base_icon = "shuttle_chair"
icon_state = "shuttle_chair_preview"
var/buckling_sound = 'sound/effects/metal_close.ogg'
var/padding = "blue"
/obj/structure/bed/chair/bay/shuttle/New(var/newloc, var/new_material, var/new_padding_material)
..(newloc, DEFAULT_WALL_MATERIAL, padding)
/obj/structure/bed/chair/bay/shuttle/post_buckle_mob()
playsound(loc,buckling_sound,75,1)
if(has_buckled_mobs())
base_icon = "shuttle_chair-b"
else
base_icon = "shuttle_chair"
..()
/obj/structure/bed/chair/bay/shuttle/update_icon()
..()
if(!has_buckled_mobs())
var/image/I = image(icon, "[base_icon]_special")
I.plane = MOB_PLANE
I.layer = ABOVE_MOB_LAYER
if(applies_material_colour)
I.color = material.icon_colour
add_overlay(I)
/obj/structure/bed/chair/bay/chair/padded/red/smallnest
name = "teshari nest"
desc = "Smells like cleaning products."
icon_state = "nest_chair"
base_icon = "nest_chair"
/obj/structure/bed/chair/bay/chair/padded/red/bignest
name = "large teshari nest"
icon_state = "nest_chair_large"
base_icon = "nest_chair_large"
@@ -6,6 +6,8 @@ var/global/list/stool_cache = list() //haha stool
desc = "Apply butt."
icon = 'icons/obj/furniture_vr.dmi' //VOREStation Edit - new Icons
icon_state = "stool_preview" //set for the map
randpixel = 0
center_of_mass = null
force = 10
throwforce = 10
w_class = ITEMSIZE_HUGE
@@ -35,22 +37,22 @@ var/global/list/stool_cache = list() //haha stool
/obj/item/weapon/stool/update_icon()
// Prep icon.
icon_state = ""
overlays.Cut()
cut_overlays()
// Base icon.
var/cache_key = "stool-[material.name]"
if(isnull(stool_cache[cache_key]))
var/image/I = image(icon, base_icon)
I.color = material.icon_colour
stool_cache[cache_key] = I
overlays |= stool_cache[cache_key]
add_overlay(stool_cache[cache_key])
// Padding overlay.
if(padding_material)
var/padding_cache_key = "stool-padding-[padding_material.name]"
if(isnull(stool_cache[padding_cache_key]))
var/image/I = image(icon, "stool_padding")
var/image/I = image(icon, "[base_icon]_padding") //VOREStation Edit
I.color = padding_material.icon_colour
stool_cache[padding_cache_key] = I
overlays |= stool_cache[padding_cache_key]
add_overlay(stool_cache[padding_cache_key])
// Strings.
if(padding_material)
name = "[padding_material.display_name] [initial(name)]" //this is not perfect but it will do for now.
@@ -114,7 +116,7 @@ var/global/list/stool_cache = list() //haha stool
qdel(src)
else if(istype(W,/obj/item/stack))
if(padding_material)
user << "\The [src] is already padded."
to_chat(user, "\The [src] is already padded.")
return
var/obj/item/stack/C = W
if(C.get_amount() < 1) // How??
@@ -129,20 +131,20 @@ var/global/list/stool_cache = list() //haha stool
if(M.material && (M.material.flags & MATERIAL_PADDING))
padding_type = "[M.material.name]"
if(!padding_type)
user << "You cannot pad \the [src] with that."
to_chat(user, "You cannot pad \the [src] with that.")
return
C.use(1)
if(!istype(src.loc, /turf))
user.drop_from_inventory(src)
src.loc = get_turf(src)
user << "You add padding to \the [src]."
to_chat(user, "You add padding to \the [src].")
add_padding(padding_type)
return
else if (W.is_wirecutter())
if(!padding_material)
user << "\The [src] has no padding to remove."
to_chat(user, "\The [src] has no padding to remove.")
return
user << "You remove the padding from \the [src]."
to_chat(user, "You remove the padding from \the [src].")
playsound(src.loc, W.usesound, 50, 1)
remove_padding()
else
@@ -0,0 +1,15 @@
/obj/item/weapon/stool/baystool
name = "bar stool"
desc = "Apply butt."
icon = 'icons/obj/furniture_vr.dmi' //VOREStation Edit - new Icons
icon_state = "bar_stool_preview" //set for the map
randpixel = 0
center_of_mass = null
force = 10
throwforce = 10
w_class = ITEMSIZE_HUGE
base_icon = "bar_stool_base"
anchored = 1
/obj/item/weapon/stool/baystool/padded/New(var/newloc, var/new_material)
..(newloc, "steel", "carpet")
@@ -14,9 +14,9 @@
/obj/structure/bed/chair/wheelchair/set_dir()
..()
overlays = null
cut_overlays()
var/image/O = image(icon = 'icons/obj/furniture.dmi', icon_state = "w_overlay", layer = FLY_LAYER, dir = src.dir)
overlays += O
add_overlay(O)
if(has_buckled_mobs())
for(var/A in buckled_mobs)
var/mob/living/L = A
@@ -33,7 +33,7 @@
if(user==pulling)
pulling = null
user.pulledby = null
user << "<span class='warning'>You lost your grip!</span>"
to_chat(user, "<span class='warning'>You lost your grip!</span>")
return
if(has_buckled_mobs() && pulling && user in buckled_mobs)
if(pulling.stat || pulling.stunned || pulling.weakened || pulling.paralysis || pulling.lying || pulling.restrained())
@@ -51,10 +51,10 @@
if(user==pulling)
return
if(pulling && (get_dir(src.loc, pulling.loc) == direction))
user << "<span class='warning'>You cannot go there.</span>"
to_chat(user, "<span class='warning'>You cannot go there.</span>")
return
if(pulling && has_buckled_mobs() && (user in buckled_mobs))
user << "<span class='warning'>You cannot drive while being pushed.</span>"
to_chat(user, "<span class='warning'>You cannot drive while being pushed.</span>")
return
// Let's roll
@@ -93,6 +93,8 @@
/obj/structure/bed/chair/wheelchair/Move()
..()
cut_overlays()
playsound(src, 'sound/effects/roll.ogg', 75, 1)
if(has_buckled_mobs())
for(var/A in buckled_mobs)
var/mob/living/occupant = A
@@ -109,7 +111,7 @@
unbuckle_mob()
if (pulling && (get_dist(src, pulling) > 1))
pulling.pulledby = null
pulling << "<span class='warning'>You lost your grip!</span>"
to_chat(pulling, "<span class='warning'>You lost your grip!</span>")
pulling = null
else
if (occupant && (src.loc != occupant.loc))
@@ -128,7 +130,7 @@
if(in_range(src, user))
if(!ishuman(user)) return
if(has_buckled_mobs() && user in buckled_mobs)
user << "<span class='warning'>You realize you are unable to push the wheelchair you sit in.</span>"
to_chat(user, "<span class='warning'>You realize you are unable to push the wheelchair you sit in.</span>")
return
if(!pulling)
pulling = user
@@ -136,9 +138,9 @@
if(user.pulling)
user.stop_pulling()
user.set_dir(get_dir(user, src))
user << "You grip \the [name]'s handles."
to_chat(user, "You grip \the [name]'s handles.")
else
usr << "You let go of \the [name]'s handles."
to_chat(usr, "You let go of \the [name]'s handles.")
pulling.pulledby = null
pulling = null
return
@@ -54,11 +54,11 @@
I.loc = src
oxytanks.Add(I)
oxygentanks++
user << "<span class='notice'>You put [I] in [src].</span>"
to_chat(user, "<span class='notice'>You put [I] in [src].</span>")
if(oxygentanks < 5)
update_icon()
else
user << "<span class='notice'>[src] is full.</span>"
to_chat(user, "<span class='notice'>[src] is full.</span>")
updateUsrDialog()
return
if(istype(I, /obj/item/weapon/tank/phoron))
@@ -67,19 +67,19 @@
I.loc = src
platanks.Add(I)
phorontanks++
user << "<span class='notice'>You put [I] in [src].</span>"
to_chat(user, "<span class='notice'>You put [I] in [src].</span>")
if(oxygentanks < 6)
update_icon()
else
user << "<span class='notice'>[src] is full.</span>"
to_chat(user, "<span class='notice'>[src] is full.</span>")
updateUsrDialog()
return
if(I.is_wrench())
if(anchored)
user << "<span class='notice'>You lean down and unwrench [src].</span>"
to_chat(user, "<span class='notice'>You lean down and unwrench [src].</span>")
anchored = 0
else
user << "<span class='notice'>You wrench [src] into place.</span>"
to_chat(user, "<span class='notice'>You wrench [src] into place.</span>")
anchored = 1
return
@@ -97,7 +97,7 @@
else
O = new /obj/item/weapon/tank/oxygen(loc)
O.loc = loc
usr << "<span class='notice'>You take [O] out of [src].</span>"
to_chat(usr, "<span class='notice'>You take [O] out of [src].</span>")
oxygentanks--
update_icon()
if(href_list["phoron"])
@@ -109,7 +109,7 @@
else
P = new /obj/item/weapon/tank/phoron(loc)
P.loc = loc
usr << "<span class='notice'>You take [P] out of [src].</span>"
to_chat(usr, "<span class='notice'>You take [P] out of [src].</span>")
phorontanks--
update_icon()
add_fingerprint(usr)
+3 -3
View File
@@ -30,7 +30,7 @@
W.loc = loc
W.layer = ABOVE_JUNK_LAYER
pinned_target = W
user << "You slide the target into the stake."
to_chat(user, "You slide the target into the stake.")
return
attack_hand(mob/user as mob)
@@ -44,9 +44,9 @@
if(ishuman(user))
if(!user.get_active_hand())
user.put_in_hands(pinned_target)
user << "You take the target out of the stake."
to_chat(user, "You take the target out of the stake.")
else
pinned_target.loc = get_turf(user)
user << "You take the target out of the stake."
to_chat(user, "You take the target out of the stake.")
pinned_target = null
@@ -101,11 +101,11 @@ obj/structure/ex_act(severity)
/obj/structure/transit_tube/Bumped(mob/AM as mob|obj)
var/obj/structure/transit_tube/T = locate() in AM.loc
if(T)
AM << "<span class='warning'>The tube's support pylons block your way.</span>"
to_chat(AM, "<span class='warning'>The tube's support pylons block your way.</span>")
return ..()
else
AM.loc = src.loc
AM << "<span class='info'>You slip under the tube.</span>"
to_chat(AM, "<span class='info'>You slip under the tube.</span>")
/obj/structure/transit_tube/station/New(loc)
@@ -117,7 +117,7 @@ obj/structure/ex_act(severity)
if(!pod_moving && icon_state == "open" && istype(AM, /mob))
for(var/obj/structure/transit_tube_pod/pod in loc)
if(pod.contents.len)
AM << "<span class='notice'>The pod is already occupied.</span>"
to_chat(AM, "<span class='notice'>The pod is already occupied.</span>")
return
else if(!pod.moving && pod.dir in directions())
AM.loc = pod
@@ -220,7 +220,7 @@
return I
/obj/structure/trash_pile/proc/produce_beta_item()
var/path = pick(prob(6);/obj/item/weapon/storage/pill_bottle/tramadol,
var/path = pick(prob(6);/obj/item/weapon/storage/pill_bottle/paracetamol,
prob(4);/obj/item/weapon/storage/pill_bottle/happy,
prob(4);/obj/item/weapon/storage/pill_bottle/zoom,
prob(4);/obj/item/seeds/ambrosiavulgarisseed,
@@ -7,7 +7,7 @@
/obj/structure/undies_wardrobe/attack_hand(var/mob/user)
if(!human_who_can_use_underwear(user))
user << "<span class='warning'>Sadly there's nothing in here for you to wear.</span>"
to_chat(user, "<span class='warning'>Sadly there's nothing in here for you to wear.</span>")
return
interact(user)
+3 -1
View File
@@ -124,7 +124,7 @@
icon_state = "shower"
density = 0
anchored = 1
use_power = 0
use_power = USE_POWER_OFF
var/on = 0
var/obj/effect/mist/mymist = null
var/ismist = 0 //needs a var so we can make it linger~
@@ -384,6 +384,7 @@
return
to_chat(usr, "<span class='notice'>You start washing your hands.</span>")
playsound(loc, 'sound/effects/sink_long.ogg', 75, 1)
busy = 1
sleep(40)
@@ -406,6 +407,7 @@
if (istype(RG) && RG.is_open_container())
RG.reagents.add_reagent("water", min(RG.volume - RG.reagents.total_volume, RG.amount_per_transfer_from_this))
user.visible_message("<span class='notice'>[user] fills \the [RG] using \the [src].</span>","<span class='notice'>You fill \the [RG] using \the [src].</span>")
playsound(loc, 'sound/effects/sink.ogg', 75, 1)
return 1
else if (istype(O, /obj/item/weapon/melee/baton))
@@ -192,7 +192,7 @@ obj/structure/windoor_assembly/Destroy()
if(src.electronics && istype(src.electronics, /obj/item/weapon/circuitboard/broken))
to_chat(usr,"<span class='warning'>The assembly has broken airlock electronics.</span>")
return
to_chat(usr,browse(null, "window=windoor_access")) //Not sure what this actually does... -Ner
usr << browse(null, "window=windoor_access") //Not sure what this actually does... -Ner
playsound(src, W.usesound, 100, 1)
user.visible_message("[user] pries the windoor into the frame.", "You start prying the windoor into the frame.")
+7
View File
@@ -442,6 +442,13 @@
//this way it will only update full-tile ones
overlays.Cut()
if(!is_fulltile())
// Rotate the sprite somewhat so non-fulltiled windows can be seen as needing repair.
var/full_tilt_degrees = 15
var/tilt_to_apply = abs((health / maxhealth) - 1)
if(tilt_to_apply && prob(50))
tilt_to_apply = -tilt_to_apply
adjust_rotation(LERP(0, full_tilt_degrees, tilt_to_apply))
icon_state = "[basestate]"
return
var/list/dirs = list()