[READY] Replaces sleepers with stasis beds (Lifeform Stasis Unit) (#43075)

* Adds stasis beds

Needs sprites, using placeholder ones

* Adds stasis beds to techwebs
Cryostasis Technology

* Adds sprites for stasis bed

* Stasis beds support economy/ancap

* Stasis bed can be deconstructed

* Stasis bed requires cable coil

* New stasis bed sprites by @Kmc2000

Made by Kmc2000 <bluekorben2000@yahoo.com>
Not currently functional

* Add unique to SSvis_overlay.add_vis_overlay

will return the overlay object itself and not reuse it

* Make stasis bed art function

can enable/disable with alt click
makes sounds when powering up/down

* The tubes go over the mob now

* Remove sleepers from techweb tree

* Fix stasis bed lying

* Modified stasis bed build requirements

* Survival pod version of stasis bed

Map spawned sleepers delete their circuit boards
Added stasis beds to 'doctors' phobia
NanoMed for survival pod which is always free, not refillable

* Replace sleepers with stasis beds on all station maps

removed all sleeper machine boards from maps
one sleeper machine board intentionally left alone in oldstation

* Fix stasis bed tube overlay capturing clicks

Give power up and down noise freq variation

* Remove stat check from living Life

* Remove vis overlay assertions from stasis bed
This commit is contained in:
JJRcop
2019-05-07 13:16:18 -04:00
committed by moo
parent 88f964419c
commit 6aa8cebfe4
30 changed files with 381 additions and 148 deletions
+1 -1
View File
@@ -97,7 +97,7 @@ SUBSYSTEM_DEF(traumas)
/obj/item/clothing/under/rank/nursesuit, /obj/item/clothing/under/rank/chief_medical_officer,
/obj/item/reagent_containers/syringe, /obj/item/reagent_containers/pill/, /obj/item/reagent_containers/hypospray,
/obj/item/storage/firstaid, /obj/item/storage/pill_bottle, /obj/item/healthanalyzer,
/obj/structure/sign/departments/medbay, /obj/machinery/door/airlock/medical, /obj/machinery/sleeper,
/obj/structure/sign/departments/medbay, /obj/machinery/door/airlock/medical, /obj/machinery/sleeper, /obj/machinery/stasis,
/obj/machinery/dna_scannernew, /obj/machinery/atmospherics/components/unary/cryo_cell, /obj/item/surgical_drapes,
/obj/item/retractor, /obj/item/hemostat, /obj/item/cautery, /obj/item/surgicaldrill, /obj/item/scalpel, /obj/item/circular_saw,
/obj/item/clothing/suit/bio_suit/plaguedoctorsuit, /obj/item/clothing/head/plaguedoctorhat, /obj/item/clothing/mask/gas/plaguedoctor)),
+34 -15
View File
@@ -5,11 +5,13 @@ SUBSYSTEM_DEF(vis_overlays)
init_order = INIT_ORDER_VIS
var/list/vis_overlay_cache
var/list/unique_vis_overlays
var/list/currentrun
var/datum/callback/rotate_cb
/datum/controller/subsystem/vis_overlays/Initialize()
vis_overlay_cache = list()
unique_vis_overlays = list()
rotate_cb = CALLBACK(src, .proc/rotate_vis_overlay)
return ..()
@@ -31,21 +33,23 @@ SUBSYSTEM_DEF(vis_overlays)
return
//the "thing" var can be anything with vis_contents which includes images
/datum/controller/subsystem/vis_overlays/proc/add_vis_overlay(atom/movable/thing, icon, iconstate, layer, plane, dir, alpha = 255, add_appearance_flags = NONE)
. = "[icon]|[iconstate]|[layer]|[plane]|[dir]|[alpha]|[add_appearance_flags]"
var/obj/effect/overlay/vis/overlay = vis_overlay_cache[.]
if(!overlay)
overlay = new
overlay.icon = icon
overlay.icon_state = iconstate
overlay.layer = layer
overlay.plane = plane
overlay.dir = dir
overlay.alpha = alpha
overlay.appearance_flags |= add_appearance_flags
vis_overlay_cache[.] = overlay
/datum/controller/subsystem/vis_overlays/proc/add_vis_overlay(atom/movable/thing, icon, iconstate, layer, plane, dir, alpha = 255, add_appearance_flags = NONE, unique = FALSE)
var/obj/effect/overlay/vis/overlay
if(!unique)
. = "[icon]|[iconstate]|[layer]|[plane]|[dir]|[alpha]|[add_appearance_flags]"
overlay = vis_overlay_cache[.]
if(!overlay)
overlay = _create_new_vis_overlay(icon, iconstate, layer, plane, dir, alpha, add_appearance_flags)
vis_overlay_cache[.] = overlay
else
overlay.unused = 0
else
overlay.unused = 0
overlay = _create_new_vis_overlay(icon, iconstate, layer, plane, dir, alpha, add_appearance_flags)
overlay.cache_expiration = -1
var/cache_id = "\ref[overlay]@{[world.time]}"
unique_vis_overlays += overlay
vis_overlay_cache[cache_id] = overlay
. = overlay
thing.vis_contents += overlay
if(!isatom(thing)) // Automatic rotation is not supported on non atoms
@@ -57,6 +61,18 @@ SUBSYSTEM_DEF(vis_overlays)
else
thing.managed_vis_overlays += overlay
/datum/controller/subsystem/vis_overlays/proc/_create_new_vis_overlay(icon, iconstate, layer, plane, dir, alpha, add_appearance_flags)
var/obj/effect/overlay/vis/overlay = new
overlay.icon = icon
overlay.icon_state = iconstate
overlay.layer = layer
overlay.plane = plane
overlay.dir = dir
overlay.alpha = alpha
overlay.appearance_flags |= add_appearance_flags
return overlay
/datum/controller/subsystem/vis_overlays/proc/remove_vis_overlay(atom/movable/thing, list/overlays)
thing.vis_contents -= overlays
if(!isatom(thing))
@@ -71,8 +87,11 @@ SUBSYSTEM_DEF(vis_overlays)
return
var/rotation = dir2angle(old_dir) - dir2angle(new_dir)
var/list/overlays_to_remove = list()
for(var/i in thing.managed_vis_overlays)
for(var/i in thing.managed_vis_overlays - unique_vis_overlays)
var/obj/effect/overlay/vis/overlay = i
add_vis_overlay(thing, overlay.icon, overlay.icon_state, overlay.layer, overlay.plane, turn(overlay.dir, rotation), overlay.alpha, overlay.appearance_flags)
overlays_to_remove += overlay
for(var/i in thing.managed_vis_overlays & unique_vis_overlays)
var/obj/effect/overlay/vis/overlay = i
overlay.dir = turn(overlay.dir, rotation)
remove_vis_overlay(thing, overlays_to_remove)