mirror of
https://github.com/goonstation/goonstation-2020.git
synced 2026-07-12 23:52:20 +01:00
720 lines
20 KiB
Plaintext
720 lines
20 KiB
Plaintext
/obj/morgue
|
|
name = "morgue"
|
|
icon = 'icons/obj/stationobjs.dmi'
|
|
icon_state = "morgue1"
|
|
density = 1
|
|
var/obj/m_tray/connected = null
|
|
anchored = 1.0
|
|
dir = EAST
|
|
|
|
/obj/morgue/proc/update()
|
|
if (src.connected.loc != src)
|
|
src.icon_state = "morgue0"
|
|
else
|
|
if (src.contents.len > 1) //the tray lives in contents
|
|
src.icon_state = "morgue2"
|
|
else
|
|
src.icon_state = "morgue1"
|
|
return
|
|
|
|
/obj/morgue/ex_act(severity)
|
|
switch(severity)
|
|
if(1.0)
|
|
for(var/atom/movable/A as mob|obj in src)
|
|
A.set_loc(src.loc)
|
|
A.ex_act(severity)
|
|
qdel(src)
|
|
return
|
|
if(2.0)
|
|
if (prob(50))
|
|
for(var/atom/movable/A as mob|obj in src)
|
|
A.set_loc(src.loc)
|
|
A.ex_act(severity)
|
|
qdel(src)
|
|
return
|
|
if(3.0)
|
|
if (prob(5))
|
|
for(var/atom/movable/A as mob|obj in src)
|
|
A.set_loc(src.loc)
|
|
A.ex_act(severity)
|
|
qdel(src)
|
|
return
|
|
return
|
|
|
|
/obj/morgue/alter_health()
|
|
return src.loc
|
|
|
|
/obj/morgue/attack_hand(mob/user as mob)
|
|
if (src.connected && src.connected.loc != src)
|
|
for( var/atom/movable/A as mob|obj in src.connected.loc)
|
|
if (!( A.anchored ))
|
|
A.set_loc(src)
|
|
playsound(src.loc, "sound/items/Deconstruct.ogg", 50, 1)
|
|
src.connected.set_loc(src)
|
|
else
|
|
playsound(src.loc, "sound/items/Deconstruct.ogg", 50, 1)
|
|
if (!connected)
|
|
src.connected = new /obj/m_tray(src.loc)
|
|
else
|
|
src.connected.set_loc(src.loc)
|
|
step(src.connected, src.dir)//EAST)
|
|
src.connected.layer = OBJ_LAYER
|
|
var/turf/T = get_step(src, src.dir)//EAST)
|
|
if (T.contents.Find(src.connected))
|
|
src.connected.connected = src
|
|
for(var/atom/movable/A as mob|obj in src)
|
|
A.set_loc(src.connected.loc)
|
|
src.connected.icon_state = "morguet"
|
|
else
|
|
src.connected.set_loc(src)
|
|
src.add_fingerprint(user)
|
|
src.update()
|
|
return
|
|
|
|
/obj/morgue/attackby(P as obj, mob/user as mob)
|
|
src.add_fingerprint(user)
|
|
if (istype(P, /obj/item/pen))
|
|
var/t = input(user, "What would you like the label to be?", src.name, null) as null|text
|
|
if (!t)
|
|
return
|
|
if (user.equipped() != P)
|
|
return
|
|
if ((!in_range(src, usr) && src.loc != user))
|
|
return
|
|
t = copytext(adminscrub(t),1,128)
|
|
if (t)
|
|
src.name = "Morgue- '[t]'"
|
|
else
|
|
src.name = "Morgue"
|
|
else
|
|
return ..()
|
|
|
|
/obj/morgue/relaymove(mob/user as mob)
|
|
if (user.stat)
|
|
return
|
|
if (!connected)
|
|
src.connected = new /obj/m_tray(src.loc)
|
|
else
|
|
src.connected.set_loc(src.loc)
|
|
step(src.connected, src.dir)//EAST)
|
|
src.connected.layer = OBJ_LAYER
|
|
var/turf/T = get_step(src, src.dir)//EAST)
|
|
if (T.contents.Find(src.connected))
|
|
src.connected.connected = src
|
|
for(var/atom/movable/A as mob|obj in src)
|
|
A.set_loc(src.connected.loc)
|
|
//Foreach goto(106)
|
|
src.connected.icon_state = "morguet"
|
|
else
|
|
src.connected.set_loc(src)
|
|
src.update()
|
|
return
|
|
|
|
/obj/m_tray
|
|
name = "morgue tray"
|
|
icon = 'icons/obj/stationobjs.dmi'
|
|
icon_state = "morguet"
|
|
density = 1
|
|
layer = FLOOR_EQUIP_LAYER1
|
|
var/obj/morgue/connected = null
|
|
anchored = 1.0
|
|
event_handler_flags = USE_FLUID_ENTER | USE_CANPASS
|
|
|
|
/obj/m_tray/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
|
|
if (istype(mover, /obj/item/dummy))
|
|
return 1
|
|
else
|
|
return ..()
|
|
|
|
/obj/m_tray/attack_hand(mob/user as mob)
|
|
if (src.connected && src.connected != src.loc)
|
|
for(var/atom/movable/A as mob|obj in src.loc)
|
|
if (!( A.anchored ))
|
|
A.set_loc(src.connected)
|
|
//Foreach goto(26)
|
|
playsound(src.loc, "sound/items/Deconstruct.ogg", 50, 1)
|
|
src.connected.update()
|
|
add_fingerprint(user)
|
|
//SN src = null
|
|
src.set_loc(src.connected)
|
|
return
|
|
return
|
|
|
|
/obj/m_tray/MouseDrop_T(atom/movable/O as mob|obj, mob/user as mob)
|
|
if (!(isobj(O) || ismob(O)) || O.anchored || get_dist(user, src) > 1 || get_dist(user, O) > 1 || user.contents.Find(O)) //user.contents.Find(src) WHY WERE WE LOOKING FOR THE MORGUE TRAY IN THE USER
|
|
return
|
|
if (istype(O, /obj/screen) || istype(O, /obj/effects) || istype(O, /obj/ability_button) || istype(O, /obj/item/grab))
|
|
return
|
|
O.set_loc(src.loc)
|
|
if (user != O)
|
|
src.visible_message("<span style='color:red'>[user] stuffs [O] into [src]!</span>")
|
|
//Foreach goto(99)
|
|
return
|
|
|
|
|
|
/obj/crematorium
|
|
name = "crematorium"
|
|
desc = "A human incinerator."
|
|
icon = 'icons/obj/stationobjs.dmi'
|
|
icon_state = "crema1"
|
|
density = 1
|
|
var/obj/c_tray/connected = null
|
|
anchored = 1.0
|
|
var/cremating = 0
|
|
var/id = 1
|
|
var/locked = 0
|
|
|
|
/obj/crematorium/proc/update()
|
|
if (src.connected.loc != src.loc)
|
|
src.icon_state = "crema0"
|
|
else
|
|
if (src.contents.len > 1) //the tray lives in contents
|
|
src.icon_state = "crema2"
|
|
else
|
|
src.icon_state = "crema1"
|
|
return
|
|
|
|
/obj/crematorium/ex_act(severity)
|
|
switch(severity)
|
|
if(1.0)
|
|
for(var/atom/movable/A as mob|obj in src)
|
|
A.set_loc(src.loc)
|
|
A.ex_act(severity)
|
|
qdel(src)
|
|
return
|
|
if(2.0)
|
|
if (prob(50))
|
|
for(var/atom/movable/A as mob|obj in src)
|
|
A.set_loc(src.loc)
|
|
A.ex_act(severity)
|
|
qdel(src)
|
|
return
|
|
if(3.0)
|
|
if (prob(5))
|
|
for(var/atom/movable/A as mob|obj in src)
|
|
A.set_loc(src.loc)
|
|
A.ex_act(severity)
|
|
qdel(src)
|
|
return
|
|
return
|
|
|
|
/obj/crematorium/alter_health()
|
|
return src.loc
|
|
|
|
/obj/crematorium/attack_hand(mob/user as mob)
|
|
// if (cremating) AWW MAN! THIS WOULD BE SO MUCH MORE FUN ... TO WATCH
|
|
// user.show_message("<span style=\"color:red\">Uh-oh, that was a bad idea.</span>", 1)
|
|
// //boutput(usr, "Uh-oh, that was a bad idea.")
|
|
// src:loc:poison += 20000000
|
|
// src:loc:firelevel = src:loc:poison
|
|
// return
|
|
if (cremating)
|
|
boutput(usr, "<span style=\"color:red\">It's locked.</span>")
|
|
return
|
|
if ((src.connected && src.connected.loc != src) && (src.locked == 0))
|
|
for(var/atom/movable/A as mob|obj in src.connected.loc)
|
|
if (!( A.anchored ))
|
|
A.set_loc(src)
|
|
playsound(src.loc, "sound/items/Deconstruct.ogg", 50, 1)
|
|
src.connected.set_loc(src)
|
|
else if (src.locked == 0)
|
|
playsound(src.loc, "sound/items/Deconstruct.ogg", 50, 1)
|
|
if (!connected)
|
|
src.connected = new /obj/c_tray(src.loc)
|
|
else
|
|
src.connected.set_loc(src.loc)
|
|
step(src.connected, SOUTH)
|
|
src.connected.layer = OBJ_LAYER
|
|
var/turf/T = get_step(src, SOUTH)
|
|
if (T.contents.Find(src.connected))
|
|
src.connected.connected = src
|
|
src.update()
|
|
for(var/atom/movable/A as mob|obj in src)
|
|
A.set_loc(src.connected.loc)
|
|
src.connected.icon_state = "cremat"
|
|
else
|
|
src.connected.set_loc(src)
|
|
src.add_fingerprint(user)
|
|
update()
|
|
|
|
/obj/crematorium/attackby(P as obj, mob/user as mob)
|
|
if (istype(P, /obj/item/pen))
|
|
var/t = input(user, "What would you like the label to be?", src.name, null) as null|text
|
|
if (!t)
|
|
return
|
|
if (user.equipped() != P)
|
|
return
|
|
if ((!in_range(src, usr) > 1 && src.loc != user))
|
|
return
|
|
t = copytext(adminscrub(t),1,128)
|
|
if (t)
|
|
src.name = "Crematorium- '[t]'"
|
|
else
|
|
src.name = "Crematorium"
|
|
src.add_fingerprint(user)
|
|
return
|
|
|
|
/obj/crematorium/relaymove(mob/user as mob)
|
|
if (user.stat || locked)
|
|
return
|
|
if (!connected)
|
|
src.connected = new /obj/c_tray(src.loc)
|
|
else
|
|
src.connected.set_loc(src.loc)
|
|
step(src.connected, SOUTH)
|
|
src.connected.layer = OBJ_LAYER
|
|
var/turf/T = get_step(src, SOUTH)
|
|
if (T.contents.Find(src.connected))
|
|
src.connected.connected = src
|
|
src.icon_state = "crema0"
|
|
for(var/atom/movable/A as mob|obj in src)
|
|
A.set_loc(src.connected.loc)
|
|
src.connected.icon_state = "cremat"
|
|
else
|
|
src.connected.set_loc(src)
|
|
src.update()
|
|
return
|
|
|
|
/obj/crematorium/proc/cremate(mob/user as mob)
|
|
if (!src || !istype(src))
|
|
return
|
|
if (src.cremating)
|
|
return //don't let you cremate something twice or w/e
|
|
if (!src.contents || !src.contents.len)
|
|
src.visible_message("<span style=\"color:red\">You hear a hollow crackle, but nothing else happens.</span>")
|
|
return
|
|
|
|
src.visible_message("<span style=\"color:red\">You hear a roar as \the [src.name] activates.</span>")
|
|
src.cremating = 1
|
|
src.locked = 1
|
|
var/ashes = 0
|
|
|
|
for (var/M in contents)
|
|
if (M == src.connected) continue //no cremating the tray tyvm
|
|
if (isliving(M))
|
|
var/mob/living/L = M
|
|
SPAWN_DBG (0)
|
|
L.changeStatus("stunned", 10 SECONDS)
|
|
|
|
var/i
|
|
for (i = 0, i < 10, i++)
|
|
sleep(10)
|
|
L.TakeDamage("chest", 0, 30)
|
|
if (!isdead(L) && prob(25))
|
|
L.emote("scream")
|
|
|
|
for (var/obj/item/W in L)
|
|
if (prob(10))
|
|
W.set_loc(L.loc)
|
|
|
|
logTheThing("combat", user, L, "cremates %target% in a crematorium at [log_loc(src)].")
|
|
L.remove()
|
|
ashes += 1
|
|
|
|
else if (!ismob(M))
|
|
if (prob(max(0, 100 - (ashes * 10))))
|
|
ashes += 1
|
|
qdel(M)
|
|
|
|
SPAWN_DBG(10 SECONDS)
|
|
if (src)
|
|
src.visible_message("<span style=\"color:red\">\The [src.name] finishes and shuts down.</span>")
|
|
src.cremating = 0
|
|
src.locked = 0
|
|
playsound(src.loc, "sound/machines/ding.ogg", 50, 1)
|
|
|
|
while (ashes > 0)
|
|
make_cleanable( /obj/decal/cleanable/ash,src)
|
|
ashes -= 1
|
|
|
|
return
|
|
|
|
/obj/c_tray
|
|
name = "crematorium tray"
|
|
icon = 'icons/obj/stationobjs.dmi'
|
|
icon_state = "cremat"
|
|
density = 1
|
|
layer = FLOOR_EQUIP_LAYER1
|
|
var/obj/crematorium/connected = null
|
|
anchored = 1.0
|
|
var/datum/light/light //Only used for tanning beds.
|
|
event_handler_flags = USE_FLUID_ENTER | USE_CANPASS
|
|
|
|
/obj/c_tray/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
|
|
if (istype(mover, /obj/item/dummy))
|
|
return 1
|
|
else
|
|
return ..()
|
|
|
|
/obj/c_tray/attack_hand(mob/user as mob)
|
|
if (src.connected && src.connected != src.loc)
|
|
for(var/atom/movable/A as mob|obj in src.loc)
|
|
if (!( A.anchored ))
|
|
A.set_loc(src.connected)
|
|
playsound(src.loc, "sound/items/Deconstruct.ogg", 50, 1)
|
|
src.connected.update()
|
|
add_fingerprint(user)
|
|
//SN src = null
|
|
src.set_loc(src.connected)
|
|
return
|
|
return
|
|
|
|
/obj/c_tray/MouseDrop_T(atom/movable/O as mob|obj, mob/user as mob)
|
|
if (!(isobj(O) || ismob(O)) || O.anchored || get_dist(user, src) > 1 || get_dist(user, O) > 1 || user.contents.Find(O))
|
|
return
|
|
if (istype(O, /obj/screen) || istype(O, /obj/effects) || istype(O, /obj/ability_button) || istype(O, /obj/item/grab))
|
|
return
|
|
O.set_loc(src.loc)
|
|
if (user != O)
|
|
user.visible_message("<span style=\"color:red\">[user] stuffs [O] into [src]!</span>", "<span style=\"color:red\">You stuff [O] into [src]!</span>")
|
|
return
|
|
|
|
/obj/machinery/crema_switch
|
|
name = "crematorium igniter"
|
|
desc = "Burn baby burn!"
|
|
icon = 'icons/obj/power.dmi'
|
|
icon_state = "crema_switch"
|
|
anchored = 1.0
|
|
req_access = list(access_crematorium)
|
|
object_flags = CAN_REPROGRAM_ACCESS
|
|
var/on = 0
|
|
var/area/area = null
|
|
var/otherarea = null
|
|
var/id = 1
|
|
var/list/crematoriums = null
|
|
|
|
/obj/machinery/crema_switch/New()
|
|
..()
|
|
UnsubscribeProcess()
|
|
|
|
/obj/machinery/crema_switch/attack_hand(mob/user as mob)
|
|
if (src.allowed(user))
|
|
if (!islist(src.crematoriums))
|
|
src.crematoriums = list()
|
|
for (var/obj/crematorium/C in world)
|
|
LAGCHECK(LAG_LOW)
|
|
if (C.id == src.id)
|
|
src.crematoriums.Add(C)
|
|
for (var/obj/crematorium/C in src.crematoriums)
|
|
if (!C.cremating)
|
|
C.cremate(user)
|
|
else
|
|
boutput(user, "<span style=\"color:red\">Access denied.</span>")
|
|
return
|
|
|
|
|
|
/obj/crematorium/tanning
|
|
name = "tanning bed"
|
|
desc = "Now bringing the rays of Space Hawaii to your local spa!"
|
|
icon = 'icons/obj/stationobjs.dmi'
|
|
icon_state = "tanbed"
|
|
connected = null
|
|
cremating = 0 //yes im going to keep this var name
|
|
id = 2
|
|
locked = 0
|
|
mats = 30
|
|
var/emagged = 0 //heh heh
|
|
var/primed = 0 //Prime the bed via the console
|
|
var/settime = 10 //How long? (s)
|
|
var/tanningcolor = rgb(205,88,34) //Change to tan people into hillarious colors!
|
|
var/tanningmodifier = 0.03 //How fast do you want to go to your tanningcolor?
|
|
|
|
update()
|
|
if (src.contents.len)
|
|
src.icon_state = "tanbed1"
|
|
else
|
|
src.icon_state = "tanbed"
|
|
return
|
|
|
|
emag_act(var/mob/user, var/obj/item/card/emag/E)
|
|
if (src.emagged)
|
|
return 0
|
|
if (user)
|
|
user.show_text("\The [src]'s saftey lock has been disabled.", "red")
|
|
src.emagged = 1
|
|
src.tanningmodifier = 0.2
|
|
return 1
|
|
|
|
attack_hand(mob/user as mob)
|
|
if (cremating)
|
|
boutput(usr, "<span style=\"color:red\">It's locked.</span>")
|
|
return
|
|
if ((src.connected && src.connected.loc != src) && (src.locked == 0))
|
|
for(var/atom/movable/A as mob|obj in src.connected.loc)
|
|
if (!( A.anchored ))
|
|
A.set_loc(src)
|
|
playsound(src.loc, "sound/items/Deconstruct.ogg", 50, 1)
|
|
src.connected.set_loc(src)
|
|
else if (src.locked == 0)
|
|
playsound(src.loc, "sound/items/Deconstruct.ogg", 50, 1)
|
|
if (!connected)
|
|
src.connected = new /obj/c_tray/tanning(src.loc)
|
|
else
|
|
src.connected.set_loc(src.loc)
|
|
step(src.connected, SOUTH)
|
|
src.connected.layer = OBJ_LAYER
|
|
src.connected.light.enable()
|
|
var/turf/T = get_step(src, SOUTH)
|
|
if (T.contents.Find(src.connected))
|
|
src.connected.connected = src
|
|
src.update()
|
|
for(var/atom/movable/A as mob|obj in src)
|
|
A.set_loc(src.connected.loc)
|
|
else
|
|
src.connected.set_loc(src)
|
|
src.connected.light.disable()
|
|
src.add_fingerprint(user)
|
|
update()
|
|
|
|
attackby(P as obj, mob/user as mob)
|
|
if (istype(P, /obj/item/pen))
|
|
var/t = input(user, "What would you like the label to be?", src.name, null) as null|text
|
|
if (!t)
|
|
return
|
|
if (user.equipped() != P)
|
|
return
|
|
if ((!in_range(src, usr) > 1 && src.loc != user))
|
|
return
|
|
t = copytext(adminscrub(t),1,128)
|
|
if (t)
|
|
src.name = "Tanning Bed- '[t]'"
|
|
else
|
|
src.name = "Tanning Bed"
|
|
src.add_fingerprint(user)
|
|
return
|
|
|
|
relaymove(mob/user as mob)
|
|
if (user.stat || locked)
|
|
return
|
|
if (!connected)
|
|
src.connected = new /obj/c_tray/tanning(src.loc)
|
|
else
|
|
src.connected.set_loc(src.loc)
|
|
step(src.connected, SOUTH)
|
|
src.connected.layer = OBJ_LAYER
|
|
var/turf/T = get_step(src, SOUTH)
|
|
if (T.contents.Find(src.connected))
|
|
src.connected.connected = src
|
|
for(var/atom/movable/A as mob|obj in src)
|
|
A.set_loc(src.connected.loc)
|
|
else
|
|
src.connected.set_loc(src)
|
|
src.connected.light.disable()
|
|
src.update()
|
|
return
|
|
|
|
cremate(mob/user as mob)
|
|
if (!src || !istype(src))
|
|
return
|
|
if (src.cremating)
|
|
return //don't let you cremate something twice or w/e
|
|
if (!src.contents || !src.contents.len)
|
|
src.visible_message("<span style=\"color:red\">You hear the lights turn on for a second, then turn off.</span>")
|
|
return
|
|
|
|
src.visible_message("<span style=\"color:red\">You hear a faint buzz as \the [src] activates.</span>")
|
|
playsound(src.loc, "sound/machines/shieldup.ogg", 30, 1)
|
|
src.cremating = 1
|
|
src.locked = 1
|
|
|
|
for (var/mob/M in contents)
|
|
if (isliving(M))
|
|
var/mob/living/L = M
|
|
for (var/i in 1 to src.settime)
|
|
sleep(10)
|
|
if(ishuman(L))
|
|
var/mob/living/carbon/human/H = L
|
|
if (src.emagged)
|
|
H.TakeDamage("All", 0, 10, 0, DAMAGE_BURN)
|
|
if (src.settime % 2) //message limiter
|
|
boutput(H, "<span style=\"color:red\">Your skin feels like it's on fire!</span>")
|
|
else if (!H.wear_suit)
|
|
H.TakeDamage("All", 0, 2, 0, DAMAGE_BURN)
|
|
if (src.settime % 2) //limiter
|
|
boutput(H, "<span style=\"color:red\">Your skin feels hot!</span>")
|
|
if (!(H.glasses && istype(H.glasses, /obj/item/clothing/glasses/sunglasses/tanning))) //Always wear protection
|
|
H.take_eye_damage(1, 2)
|
|
H.change_eye_blurry(2)
|
|
H.changeStatus("stunned", 1 SECOND)
|
|
H.change_misstep_chance(5)
|
|
boutput(H, "<span style=\"color:red\">Your eyes sting!</span>")
|
|
if (H.bioHolder.mobAppearance.s_tone)
|
|
var/currenttone = H.bioHolder.mobAppearance.s_tone
|
|
var/newtone = BlendRGB(currenttone, src.tanningcolor, src.tanningmodifier) //Make them tan slowly
|
|
H.bioHolder.mobAppearance.s_tone = newtone
|
|
H.set_face_icon_dirty()
|
|
H.set_body_icon_dirty()
|
|
if (H.limbs)
|
|
H.limbs.reset_stone()
|
|
if (emagged && isdead(M))
|
|
qdel(M)
|
|
make_cleanable( /obj/decal/cleanable/ash,src)
|
|
|
|
SPAWN_DBG(src.settime * 10)
|
|
if (src)
|
|
src.visible_message("<span style=\"color:red\">The [src.name] finishes and shuts down.</span>")
|
|
src.cremating = 0
|
|
src.locked = 0
|
|
playsound(src.loc, "sound/machines/ding.ogg", 50, 1)
|
|
return
|
|
|
|
/obj/c_tray/tanning
|
|
name = "tanning bed"
|
|
desc = "The perfect place to lay down after a long day indoors."
|
|
icon = 'icons/obj/stationobjs.dmi'
|
|
icon_state = "tantray_empty"
|
|
connected = null
|
|
var/obj/item/light/tube/tanningtube = null
|
|
var/image/trayoverlay
|
|
|
|
proc/generate_overlay_icon(var/tubecolor)
|
|
if (!trayoverlay)
|
|
src.trayoverlay = image('icons/obj/stationobjs.dmi', "tantray_overlay")
|
|
src.overlays = null
|
|
if (tanningtube)
|
|
src.trayoverlay.color = tubecolor
|
|
src.overlays += trayoverlay
|
|
|
|
proc/send_new_tancolor(var/tubecolor)
|
|
if (src.connected && istype (src.connected, /obj/crematorium/tanning))
|
|
var/obj/crematorium/tanning/tanningbed = src.connected
|
|
tanningbed.tanningcolor = tubecolor
|
|
|
|
New()
|
|
..()
|
|
tanningtube = new /obj/item/light/tube(src)
|
|
tanningtube.name = "stock tanning light tube"
|
|
tanningtube.desc = "Fancy. But not really."
|
|
tanningtube.color_r = 0.7
|
|
tanningtube.color_g = 0.5
|
|
tanningtube.color_b = 0.3
|
|
|
|
light = new /datum/light/point
|
|
light.attach(src)
|
|
light.set_brightness(0.5)
|
|
light.set_color(tanningtube.color_r, tanningtube.color_g, tanningtube.color_b)
|
|
|
|
var/tanningtubecolor = rgb(tanningtube.color_r * 255, tanningtube.color_b * 255, tanningtube.color_g * 255)
|
|
|
|
generate_overlay_icon(tanningtubecolor)
|
|
|
|
send_new_tancolor(tanningtubecolor)
|
|
|
|
attackby(var/obj/item/P as obj, mob/user as mob)
|
|
..()
|
|
if (istype(P, /obj/item/light/tube) && !src.contents.len)
|
|
var/obj/item/light/tube/G = P
|
|
boutput(usr, "<span style=\"color:blue\">You put \the [G.name] into \the [src.name].</span>")
|
|
user.drop_item()
|
|
G.set_loc(src)
|
|
src.tanningtube = G
|
|
var/tanningtubecolor = rgb(tanningtube.color_r * 255, tanningtube.color_b * 255, tanningtube.color_g * 255)
|
|
generate_overlay_icon(tanningtubecolor)
|
|
send_new_tancolor(tanningtubecolor)
|
|
if (src.light)
|
|
light.set_color(tanningtube.color_r, tanningtube.color_g, tanningtube.color_b)
|
|
light.set_brightness(0.5)
|
|
|
|
if (ispryingtool(P) && src.contents.len) //pry out the tube with a crowbar
|
|
boutput(usr, "<span style=\"color:blue\">You pry out \the [src.tanningtube.name] from \the [src.name].</span>")
|
|
src.tanningtube.set_loc(src.loc)
|
|
src.tanningtube = null
|
|
generate_overlay_icon() //nulling overlay
|
|
if (src.light)
|
|
light.set_color(0, 0, 0)
|
|
light.set_brightness(0)
|
|
|
|
|
|
/* -------------------- Computer -------------------- */
|
|
|
|
/obj/machinery/computer/tanning
|
|
name = "Tanning Computer"
|
|
desc = "Used to control a tanning bed."
|
|
icon = 'icons/obj/stationobjs.dmi'
|
|
mats = 20
|
|
var/id = 2
|
|
icon_state = "tanconsole"
|
|
var/state_str = ""
|
|
var/obj/crematorium/tanning/linked = null //The linked tanning bed
|
|
|
|
|
|
New()
|
|
..()
|
|
get_link()
|
|
|
|
proc/get_link()
|
|
for(var/obj/crematorium/tanning/C in world)
|
|
LAGCHECK(LAG_LOW)
|
|
if(C.z == src.z && C.id == src.id && C != src)
|
|
linked = C
|
|
break
|
|
|
|
proc/find_tray_tube()
|
|
if (linked.connected && istype(linked.connected, /obj/c_tray/tanning))
|
|
var/obj/c_tray/tanning/tray = linked.connected
|
|
if (tray.tanningtube)
|
|
return 1
|
|
|
|
proc/get_state_string()
|
|
if(linked == null) get_link()
|
|
if(linked == null) return "ERROR: No tanning beds found."
|
|
|
|
if(find_tray_tube() != 1) return "No light tube found in the tanning tray."
|
|
if(linked.cremating) return "Tanning in progress. Please wait."
|
|
if(linked.cremating == 0) return "Tanning bed idle."
|
|
|
|
return "Unknown Error Encountered."
|
|
|
|
attack_hand(var/mob/user as mob, params)
|
|
if (..(user))
|
|
return
|
|
|
|
state_str = src.get_state_string()
|
|
|
|
var/dat = ""
|
|
dat += "<b>Tanning Bed Status:</b><BR>"
|
|
dat += "[state_str]<BR>"
|
|
dat += "Set Time: [linked.settime]<BR>"
|
|
dat += "<b>Tanning Bed Control:</b><BR>"
|
|
dat += "<A href='?src=\ref[src];toggle=1'>Activate Tanning Bed</A><BR>"
|
|
dat += "<A href='?src=\ref[src];timer=1'>Delayed Activation</A><BR>"
|
|
dat += "<A href='?src=\ref[src];settime=1'>Increase Time</A><BR>"
|
|
dat += "<A href='?src=\ref[src];unsettime=1'>Decrease Time</A><BR>"
|
|
|
|
if (user.client.tooltipHolder)
|
|
user.client.tooltipHolder.showClickTip(src, list(
|
|
"params" = params,
|
|
"title" = src.name,
|
|
"content" = dat,
|
|
))
|
|
|
|
return
|
|
|
|
Topic(href, href_list)
|
|
if (..(href, href_list))
|
|
return
|
|
|
|
if (href_list["toggle"])
|
|
if (linked && !linked.cremating && find_tray_tube() == 1)
|
|
playsound(src.loc, "sound/machines/bweep.ogg", 20, 1)
|
|
linked.cremate()
|
|
logTheThing("station", usr, null, "activated the tanning bed at [usr.loc.loc] ([showCoords(usr.x, usr.y, usr.z)])")
|
|
|
|
else if (href_list["timer"])
|
|
sleep (100)
|
|
if (linked && !linked.cremating && find_tray_tube() == 1)
|
|
playsound(src.loc, "sound/machines/bweep.ogg", 20, 1)
|
|
linked.cremate()
|
|
logTheThing("station", usr, null, "activated the tanning bed at [usr.loc.loc] ([showCoords(usr.x, usr.y, usr.z)])")
|
|
|
|
else if (href_list["settime"])
|
|
if (linked && linked.settime < 20)
|
|
linked.settime++
|
|
|
|
else if (href_list["unsettime"])
|
|
if (linked && linked.settime > 0)
|
|
linked.settime--
|
|
|
|
src.updateDialog()
|
|
return
|