mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2026-08-30 08:39:12 +01:00
Merge branch 'master' into pianocargo
This commit is contained in:
@@ -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 ..()
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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"
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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()
|
||||
..()
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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>")
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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")
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
+1
-1
@@ -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)
|
||||
|
||||
|
||||
@@ -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.")
|
||||
|
||||
|
||||
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user