From 6aa8cebfe46e67d9a72bb201446f363fb8cc3abe Mon Sep 17 00:00:00 2001 From: JJRcop Date: Tue, 7 May 2019 13:16:18 -0400 Subject: [PATCH] [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 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 --- _maps/map_files/BoxStation/BoxStation.dmm | 15 +- .../map_files/Deltastation/DeltaStation2.dmm | 15 +- _maps/map_files/Donutstation/Donutstation.dmm | 22 ++- _maps/map_files/MetaStation/MetaStation.dmm | 8 +- _maps/map_files/PubbyStation/PubbyStation.dmm | 8 +- _maps/map_files/generic/CentCom.dmm | 8 +- _maps/templates/shelter_1.dmm | 5 +- _maps/templates/shelter_2.dmm | 5 +- code/__DEFINES/status_effects.dm | 2 + code/__HELPERS/time.dm | 8 +- code/controllers/subsystem/traumas.dm | 2 +- code/controllers/subsystem/vis_overlays.dm | 49 ++++-- code/datums/status_effects/debuffs.dm | 37 +++++ code/game/machinery/Sleeper.dm | 6 +- code/game/machinery/_machinery.dm | 11 +- code/game/machinery/stasis.dm | 141 ++++++++++++++++++ .../circuitboards/machine_circuitboards.dm | 8 + code/modules/mining/equipment/survival_pod.dm | 20 +++ .../mob/living/carbon/alien/larva/life.dm | 2 +- code/modules/mob/living/carbon/human/life.dm | 25 ++-- code/modules/mob/living/carbon/life.dm | 37 +++-- code/modules/mob/living/carbon/monkey/life.dm | 2 +- code/modules/mob/living/life.dm | 53 +++---- code/modules/mob/living/living.dm | 9 +- code/modules/mob/living/status_procs.dm | 8 + .../research/designs/machine_designs.dm | 18 +-- code/modules/research/techweb/all_nodes.dm | 4 +- icons/mob/screen_alert.dmi | Bin 108679 -> 109224 bytes icons/obj/machines/stasis.dmi | Bin 0 -> 672 bytes tgstation.dme | 1 + 30 files changed, 381 insertions(+), 148 deletions(-) create mode 100644 code/game/machinery/stasis.dm mode change 100644 => 100755 icons/mob/screen_alert.dmi create mode 100755 icons/obj/machines/stasis.dmi diff --git a/_maps/map_files/BoxStation/BoxStation.dmm b/_maps/map_files/BoxStation/BoxStation.dmm index 1c333f5fedb..7fe385f2d08 100644 --- a/_maps/map_files/BoxStation/BoxStation.dmm +++ b/_maps/map_files/BoxStation/BoxStation.dmm @@ -7296,6 +7296,7 @@ /obj/structure/table, /obj/effect/spawner/lootdrop/maintenance/two, /obj/effect/decal/cleanable/dirt, +/obj/item/stock_parts/capacitor, /turf/open/floor/plasteel, /area/maintenance/port/fore) "apM" = ( @@ -9547,6 +9548,7 @@ /turf/open/floor/plasteel, /area/crew_quarters/dorms) "avS" = ( +/obj/item/circuitboard/machine/stasis, /obj/item/wrench, /turf/open/floor/plating, /area/maintenance/port/fore) @@ -10074,9 +10076,7 @@ /turf/open/floor/plasteel, /area/construction/mining/aux_base) "axe" = ( -/obj/machinery/sleeper{ - dir = 4 - }, +/obj/structure/frame/machine, /turf/open/floor/plating, /area/maintenance/port/fore) "axf" = ( @@ -10590,6 +10590,7 @@ "ayt" = ( /obj/structure/table/glass, /obj/item/hemostat, +/obj/item/stock_parts/manipulator, /turf/open/floor/plating, /area/maintenance/port/fore) "ayu" = ( @@ -31259,9 +31260,7 @@ /turf/open/floor/plasteel/white, /area/medical/sleeper) "bwD" = ( -/obj/machinery/sleeper{ - dir = 8 - }, +/obj/machinery/stasis, /turf/open/floor/plasteel, /area/medical/sleeper) "bwE" = ( @@ -32878,14 +32877,12 @@ /turf/open/floor/plasteel/white, /area/medical/sleeper) "bAq" = ( -/obj/machinery/sleeper{ - dir = 8 - }, /obj/machinery/camera{ c_tag = "Medbay Treatment Center"; network = list("ss13","medbay"); dir = 8 }, +/obj/machinery/stasis, /turf/open/floor/plasteel, /area/medical/sleeper) "bAr" = ( diff --git a/_maps/map_files/Deltastation/DeltaStation2.dmm b/_maps/map_files/Deltastation/DeltaStation2.dmm index ed27cec2485..c9f4863517a 100644 --- a/_maps/map_files/Deltastation/DeltaStation2.dmm +++ b/_maps/map_files/Deltastation/DeltaStation2.dmm @@ -95060,12 +95060,13 @@ dir = 4; pixel_x = -23 }, -/obj/machinery/sleeper{ - dir = 4 - }, /obj/effect/turf_decal/stripes/line{ dir = 6 }, +/obj/item/stack/rods/ten, +/obj/item/stock_parts/capacitor, +/obj/item/circuitboard/machine/stasis, +/obj/item/stock_parts/manipulator, /turf/open/floor/plasteel, /area/medical/abandoned) "ddn" = ( @@ -95751,12 +95752,10 @@ /turf/open/floor/plating, /area/security/checkpoint/medical) "deC" = ( -/obj/machinery/sleeper{ - dir = 4 - }, /obj/effect/turf_decal/stripes/end{ dir = 4 }, +/obj/machinery/stasis, /turf/open/floor/plasteel, /area/medical/medbay/central) "deD" = ( @@ -95776,15 +95775,13 @@ /turf/open/floor/plasteel/white, /area/medical/medbay/central) "deF" = ( -/obj/machinery/sleeper{ - dir = 8 - }, /obj/effect/turf_decal/stripes/end{ dir = 8 }, /obj/machinery/light{ dir = 4 }, +/obj/machinery/stasis, /turf/open/floor/plasteel, /area/medical/medbay/central) "deG" = ( diff --git a/_maps/map_files/Donutstation/Donutstation.dmm b/_maps/map_files/Donutstation/Donutstation.dmm index 06963c75824..987ca9839e7 100644 --- a/_maps/map_files/Donutstation/Donutstation.dmm +++ b/_maps/map_files/Donutstation/Donutstation.dmm @@ -14613,12 +14613,6 @@ /obj/machinery/vending/wardrobe/viro_wardrobe, /turf/open/floor/plasteel/white, /area/medical/virology) -"aIf" = ( -/obj/machinery/sleeper{ - dir = 1 - }, -/turf/open/floor/plasteel, -/area/medical/sleeper) "aIg" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{ @@ -17957,14 +17951,12 @@ /turf/open/floor/plasteel, /area/quartermaster/warehouse) "aQh" = ( -/obj/machinery/sleeper{ - dir = 1 - }, /obj/machinery/camera{ c_tag = "Medical - Sleeper Bay"; dir = 1; network = list("ss13","Medical") }, +/obj/machinery/stasis, /turf/open/floor/plasteel, /area/medical/sleeper) "aQi" = ( @@ -19424,6 +19416,10 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/plating, /area/maintenance/starboard) +"aTD" = ( +/obj/machinery/stasis, +/turf/open/floor/plasteel, +/area/medical/sleeper) "aTE" = ( /obj/structure/grille, /obj/structure/window/reinforced{ @@ -21877,10 +21873,10 @@ /turf/open/floor/plasteel/white, /area/medical/surgery) "aYo" = ( -/obj/machinery/sleeper, /obj/machinery/firealarm{ pixel_y = 24 }, +/obj/machinery/stasis, /turf/open/floor/plasteel, /area/medical/sleeper) "aYp" = ( @@ -48517,7 +48513,7 @@ empty = 1; name = "First-Aid (empty)" }, -/obj/item/circuitboard/machine/sleeper, +/obj/item/circuitboard/machine/stasis, /turf/open/floor/plating, /area/maintenance/port) "bZY" = ( @@ -56892,7 +56888,7 @@ /turf/open/floor/plasteel/dark, /area/engine/engineering) "wMM" = ( -/obj/machinery/sleeper, +/obj/machinery/stasis, /obj/machinery/airalarm{ pixel_y = 25 }, @@ -80037,7 +80033,7 @@ aGQ aYo aJb aHP -aIf +aTD aGQ aTY bAF diff --git a/_maps/map_files/MetaStation/MetaStation.dmm b/_maps/map_files/MetaStation/MetaStation.dmm index 3fe7e209874..7e1d22af6c7 100644 --- a/_maps/map_files/MetaStation/MetaStation.dmm +++ b/_maps/map_files/MetaStation/MetaStation.dmm @@ -59037,9 +59037,6 @@ /turf/open/floor/plasteel/dark, /area/medical/surgery) "cld" = ( -/obj/machinery/sleeper{ - dir = 4 - }, /obj/effect/turf_decal/tile/blue{ dir = 1 }, @@ -59050,6 +59047,7 @@ /obj/effect/turf_decal/tile/blue{ dir = 8 }, +/obj/machinery/stasis, /turf/open/floor/plasteel/white, /area/medical/sleeper) "cle" = ( @@ -59090,9 +59088,6 @@ /turf/open/floor/plasteel/white, /area/medical/sleeper) "clh" = ( -/obj/machinery/sleeper{ - dir = 8 - }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, @@ -59106,6 +59101,7 @@ /obj/effect/turf_decal/tile/blue{ dir = 8 }, +/obj/machinery/stasis, /turf/open/floor/plasteel/white, /area/medical/sleeper) "cli" = ( diff --git a/_maps/map_files/PubbyStation/PubbyStation.dmm b/_maps/map_files/PubbyStation/PubbyStation.dmm index b0cca06757a..cd0a7d8c1c9 100644 --- a/_maps/map_files/PubbyStation/PubbyStation.dmm +++ b/_maps/map_files/PubbyStation/PubbyStation.dmm @@ -33201,9 +33201,6 @@ /turf/open/floor/plasteel/white, /area/medical/medbay/zone2) "bzP" = ( -/obj/machinery/sleeper{ - dir = 4 - }, /obj/effect/turf_decal/stripes/line{ dir = 1 }, @@ -33224,6 +33221,7 @@ network = list("ss13","medbay"); dir = 4 }, +/obj/machinery/stasis, /turf/open/floor/plasteel, /area/medical/sleeper) "bzQ" = ( @@ -34449,9 +34447,6 @@ /turf/open/floor/plasteel, /area/medical/sleeper) "bCj" = ( -/obj/machinery/sleeper{ - dir = 4 - }, /obj/effect/turf_decal/tile/blue{ dir = 1 }, @@ -34462,6 +34457,7 @@ /obj/effect/turf_decal/tile/blue{ dir = 8 }, +/obj/machinery/stasis, /turf/open/floor/plasteel, /area/medical/sleeper) "bCl" = ( diff --git a/_maps/map_files/generic/CentCom.dmm b/_maps/map_files/generic/CentCom.dmm index a0f85e36158..7b20477582e 100644 --- a/_maps/map_files/generic/CentCom.dmm +++ b/_maps/map_files/generic/CentCom.dmm @@ -1118,9 +1118,7 @@ /obj/structure/window{ dir = 8 }, -/obj/machinery/sleeper{ - dir = 1 - }, +/obj/machinery/stasis, /turf/open/floor/holofloor{ icon_state = "white" }, @@ -1132,9 +1130,7 @@ }, /area/holodeck/rec_center/medical) "dd" = ( -/obj/machinery/sleeper{ - dir = 1 - }, +/obj/machinery/stasis, /turf/open/floor/holofloor{ icon_state = "white" }, diff --git a/_maps/templates/shelter_1.dmm b/_maps/templates/shelter_1.dmm index f5b2e141f4c..58146c1fb84 100644 --- a/_maps/templates/shelter_1.dmm +++ b/_maps/templates/shelter_1.dmm @@ -27,7 +27,10 @@ /turf/closed/wall/mineral/titanium/survival/pod, /area/survivalpod) "g" = ( -/obj/machinery/sleeper/survival_pod, +/obj/machinery/stasis/survival_pod, +/obj/machinery/vending/wallmed/survival_pod{ + pixel_x = -24 + }, /turf/open/floor/pod, /area/survivalpod) "h" = ( diff --git a/_maps/templates/shelter_2.dmm b/_maps/templates/shelter_2.dmm index 80de4438da3..e259c1cc9c5 100644 --- a/_maps/templates/shelter_2.dmm +++ b/_maps/templates/shelter_2.dmm @@ -50,7 +50,10 @@ /turf/closed/wall/mineral/titanium/survival/pod, /area/survivalpod) "k" = ( -/obj/machinery/sleeper/survival_pod, +/obj/machinery/stasis/survival_pod, +/obj/machinery/vending/wallmed/survival_pod{ + pixel_x = -24 + }, /turf/open/floor/pod, /area/survivalpod) "l" = ( diff --git a/code/__DEFINES/status_effects.dm b/code/__DEFINES/status_effects.dm index ae0e7de4453..b50423cc80c 100644 --- a/code/__DEFINES/status_effects.dm +++ b/code/__DEFINES/status_effects.dm @@ -94,6 +94,8 @@ #define STATUS_EFFECT_GO_AWAY /datum/status_effect/go_away //makes you launch through walls in a single direction for a while +#define STATUS_EFFECT_STASIS /datum/status_effect/incapacitating/stasis //Halts biological functions like bleeding, chemical processing, blood regeneration, walking, etc + ///////////// // NEUTRAL // ///////////// diff --git a/code/__HELPERS/time.dm b/code/__HELPERS/time.dm index 5fe65af8f3f..677643b9edd 100644 --- a/code/__HELPERS/time.dm +++ b/code/__HELPERS/time.dm @@ -11,11 +11,11 @@ wtime = world.time return time2text(wtime - GLOB.timezoneOffset, format) -/proc/station_time(display_only = FALSE) - return ((((world.time - SSticker.round_start_time) * SSticker.station_time_rate_multiplier) + SSticker.gametime_offset) % 864000) - (display_only? GLOB.timezoneOffset : 0) +/proc/station_time(display_only = FALSE, wtime=world.time) + return ((((wtime - SSticker.round_start_time) * SSticker.station_time_rate_multiplier) + SSticker.gametime_offset) % 864000) - (display_only? GLOB.timezoneOffset : 0) -/proc/station_time_timestamp(format = "hh:mm:ss") - return time2text(station_time(TRUE), format) +/proc/station_time_timestamp(format = "hh:mm:ss", wtime) + return time2text(station_time(TRUE, wtime), format) /proc/station_time_debug(force_set) if(isnum(force_set)) diff --git a/code/controllers/subsystem/traumas.dm b/code/controllers/subsystem/traumas.dm index c49e5994184..df5df35aa89 100644 --- a/code/controllers/subsystem/traumas.dm +++ b/code/controllers/subsystem/traumas.dm @@ -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)), diff --git a/code/controllers/subsystem/vis_overlays.dm b/code/controllers/subsystem/vis_overlays.dm index f7945d1db34..df3ad1687bc 100644 --- a/code/controllers/subsystem/vis_overlays.dm +++ b/code/controllers/subsystem/vis_overlays.dm @@ -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) diff --git a/code/datums/status_effects/debuffs.dm b/code/datums/status_effects/debuffs.dm index a9de73645b0..f6d6d038d41 100644 --- a/code/datums/status_effects/debuffs.dm +++ b/code/datums/status_effects/debuffs.dm @@ -82,6 +82,43 @@ desc = "You've fallen asleep. Wait a bit and you should wake up. Unless you don't, considering how helpless you are." icon_state = "asleep" +//STASIS +/datum/status_effect/incapacitating/stasis + id = "stasis" + duration = -1 + tick_interval = 10 + alert_type = /obj/screen/alert/status_effect/stasis + var/last_dead_time + +/datum/status_effect/incapacitating/stasis/proc/update_time_of_death() + if(last_dead_time) + var/delta = world.time - last_dead_time + var/new_timeofdeath = owner.timeofdeath + delta + owner.timeofdeath = new_timeofdeath + owner.tod = station_time_timestamp(wtime=new_timeofdeath) + last_dead_time = null + if(owner.stat == DEAD) + last_dead_time = world.time + +/datum/status_effect/incapacitating/stasis/on_creation(mob/living/new_owner, set_duration, updating_canmove) + . = ..() + update_time_of_death() + +/datum/status_effect/incapacitating/stasis/tick() + update_time_of_death() + +/datum/status_effect/incapacitating/stasis/on_remove() + update_time_of_death() + return ..() + +/datum/status_effect/incapacitating/stasis/be_replaced() + update_time_of_death() + return ..() + +/obj/screen/alert/status_effect/stasis + name = "Stasis" + desc = "Your biological functions have halted. You could live forever this way, but it's pretty boring." + icon_state = "stasis" //GOLEM GANG diff --git a/code/game/machinery/Sleeper.dm b/code/game/machinery/Sleeper.dm index d38963d9e76..276992860db 100644 --- a/code/game/machinery/Sleeper.dm +++ b/code/game/machinery/Sleeper.dm @@ -27,8 +27,11 @@ var/enter_message = "You feel cool air surround you. You go numb as your senses turn inward." payment_department = ACCOUNT_MED fair_market_price = 5 -/obj/machinery/sleeper/Initialize() +/obj/machinery/sleeper/Initialize(mapload) . = ..() + if(mapload) + component_parts -= circuit + QDEL_NULL(circuit) occupant_typecache = GLOB.typecache_living update_icon() reset_chem_buttons() @@ -259,7 +262,6 @@ /obj/machinery/sleeper/syndie/fullupgrade/Initialize() . = ..() component_parts = list() - component_parts += new /obj/item/circuitboard/machine/sleeper(null) component_parts += new /obj/item/stock_parts/matter_bin/bluespace(null) component_parts += new /obj/item/stock_parts/manipulator/femto(null) component_parts += new /obj/item/stack/sheet/glass(null) diff --git a/code/game/machinery/_machinery.dm b/code/game/machinery/_machinery.dm index 077818cb91f..c537150ec59 100644 --- a/code/game/machinery/_machinery.dm +++ b/code/game/machinery/_machinery.dm @@ -183,12 +183,15 @@ Class Procs: L.update_mobility() occupant = null +/obj/machinery/proc/can_be_occupant(atom/movable/am) + return occupant_typecache ? is_type_in_typecache(am, occupant_typecache) : isliving(am) + /obj/machinery/proc/close_machine(atom/movable/target = null) state_open = FALSE density = TRUE if(!target) for(var/am in loc) - if (!(occupant_typecache ? is_type_in_typecache(am, occupant_typecache) : isliving(am))) + if (!(can_be_occupant(am))) continue var/atom/movable/AM = am if(AM.has_buckled_mobs()) @@ -249,19 +252,19 @@ Class Procs: var/datum/bank_account/insurance = I.registered_account if(!insurance) say("[market_verb] NAP Violation: No bank account found.") - nap_violation() + nap_violation(occupant) return FALSE else if(!insurance.adjust_money(-fair_market_price)) say("[market_verb] NAP Violation: Unable to pay.") - nap_violation() + nap_violation(occupant) return FALSE var/datum/bank_account/D = SSeconomy.get_dep_account(payment_department) if(D) D.adjust_money(fair_market_price) else say("[market_verb] NAP Violation: No ID card found.") - nap_violation() + nap_violation(occupant) return FALSE return TRUE diff --git a/code/game/machinery/stasis.dm b/code/game/machinery/stasis.dm new file mode 100644 index 00000000000..5f7f0263dbb --- /dev/null +++ b/code/game/machinery/stasis.dm @@ -0,0 +1,141 @@ +#define STASIS_TOGGLE_COOLDOWN 50 +/obj/machinery/stasis + name = "Lifeform Stasis Unit" + desc = "A not so comfortable looking bed with some nozzles at the top and bottom. It will keep someone in stasis." + icon = 'icons/obj/machines/stasis.dmi' + icon_state = "stasis" + density = FALSE + can_buckle = TRUE + buckle_lying = 90 + circuit = /obj/item/circuitboard/machine/stasis + idle_power_usage = 40 + active_power_usage = 340 + fair_market_price = 10 + payment_department = ACCOUNT_MED + var/stasis_enabled = TRUE + var/last_stasis_sound = FALSE + var/stasis_can_toggle = 0 + var/mattress_state = "stasis_on" + var/obj/effect/overlay/vis/mattress_on + +/obj/machinery/stasis/examine(mob/user) + ..() + var/turn_on_or_off = stasis_enabled ? "turn off" : "turn on" + to_chat(user, "Alt-click to [turn_on_or_off] the machine.") + +/obj/machinery/stasis/proc/play_power_sound() + var/_running = stasis_running() + if(last_stasis_sound != _running) + var/sound_freq = rand(5120, 8800) + if(_running) + playsound(src, 'sound/machines/synth_yes.ogg', 50, TRUE, frequency = sound_freq) + else + playsound(src, 'sound/machines/synth_no.ogg', 50, TRUE, frequency = sound_freq) + last_stasis_sound = _running + +/obj/machinery/stasis/AltClick(mob/user) + if(world.time >= stasis_can_toggle && user.canUseTopic(src)) + stasis_enabled = !stasis_enabled + stasis_can_toggle = world.time + STASIS_TOGGLE_COOLDOWN + playsound(src, 'sound/machines/click.ogg', 60, TRUE) + play_power_sound() + update_icon() + +/obj/machinery/stasis/Exited(atom/movable/AM, atom/newloc) + if(AM == occupant) + var/mob/living/L = AM + if(L.IsInStasis()) + thaw_them(L) + . = ..() + +/obj/machinery/stasis/proc/stasis_running() + return stasis_enabled && is_operational() + +/obj/machinery/stasis/update_icon() + . = ..() + var/_running = stasis_running() + var/list/overlays_to_remove = managed_vis_overlays + + if(mattress_state) + if(!mattress_on || !managed_vis_overlays) + mattress_on = SSvis_overlays.add_vis_overlay(src, icon, mattress_state, layer, plane, dir, alpha = 0, unique = TRUE) + + if(mattress_on.alpha ? !_running : _running) //check the inverse of _running compared to truthy alpha, to see if they differ + var/new_alpha = _running ? 255 : 0 + var/easing_direction = _running ? EASE_OUT : EASE_IN + animate(mattress_on, alpha = new_alpha, time = 50, easing = CUBIC_EASING|easing_direction) + + overlays_to_remove = managed_vis_overlays - mattress_on + + SSvis_overlays.remove_vis_overlay(src, overlays_to_remove) + + if(occupant) + SSvis_overlays.add_vis_overlay(src, 'icons/obj/machines/stasis.dmi', "tubes", LYING_MOB_LAYER + 0.1, plane, dir) //using vis_overlays instead of normal overlays for mouse_opacity here + + if(stat & BROKEN) + icon_state = "stasis_broken" + return + if(panel_open || stat & MAINT) + icon_state = "stasis_maintenance" + return + icon_state = "stasis" + +/obj/machinery/stasis/obj_break(damage_flag) + . = ..() + play_power_sound() + update_icon() + +/obj/machinery/stasis/power_change() + . = ..() + play_power_sound() + update_icon() + +/obj/machinery/stasis/proc/chill_out(mob/living/target) + if(target != occupant) + return + var/freq = rand(24750, 26550) + playsound(src, 'sound/effects/spray.ogg', 5, TRUE, 2, frequency = freq) + target.SetStasis(TRUE) + target.ExtinguishMob() + use_power = ACTIVE_POWER_USE + +/obj/machinery/stasis/proc/thaw_them(mob/living/target) + target.SetStasis(FALSE) + if(target == occupant) + use_power = IDLE_POWER_USE + +/obj/machinery/stasis/post_buckle_mob(mob/living/L) + if(!can_be_occupant(L)) + return + occupant = L + if(stasis_running() && check_nap_violations()) + chill_out(L) + update_icon() + +/obj/machinery/stasis/post_unbuckle_mob(mob/living/L) + thaw_them(L) + if(L == occupant) + occupant = null + update_icon() + +/obj/machinery/stasis/process() + if( !( occupant && isliving(occupant) && check_nap_violations() ) ) + use_power = IDLE_POWER_USE + return + var/mob/living/L_occupant = occupant + if(stasis_running()) + if(!L_occupant.IsInStasis()) + chill_out(L_occupant) + else if(L_occupant.IsInStasis()) + thaw_them(L_occupant) + +/obj/machinery/stasis/screwdriver_act(mob/living/user, obj/item/I) + . = default_deconstruction_screwdriver(user, "stasis_maintenance", "stasis", I) + update_icon() + +/obj/machinery/stasis/crowbar_act(mob/living/user, obj/item/I) + return default_deconstruction_crowbar(I) + +/obj/machinery/stasis/nap_violation(mob/violator) + unbuckle_mob(violator, TRUE) +#undef STASIS_TOGGLE_COOLDOWN diff --git a/code/game/objects/items/circuitboards/machine_circuitboards.dm b/code/game/objects/items/circuitboards/machine_circuitboards.dm index 40f6aa9fbf1..4d6ac1d131a 100644 --- a/code/game/objects/items/circuitboards/machine_circuitboards.dm +++ b/code/game/objects/items/circuitboards/machine_circuitboards.dm @@ -1002,3 +1002,11 @@ build_path = /obj/machinery/fat_sucker req_components = list(/obj/item/stock_parts/micro_laser = 1, /obj/item/kitchen/fork = 1) + +/obj/item/circuitboard/machine/stasis + name = "Lifeform Stasis Unit (Machine Board)" + build_path = /obj/machinery/stasis + req_components = list( + /obj/item/stack/cable_coil = 3, + /obj/item/stock_parts/manipulator = 1, + /obj/item/stock_parts/capacitor = 1) diff --git a/code/modules/mining/equipment/survival_pod.dm b/code/modules/mining/equipment/survival_pod.dm index e2e3c13516c..108767b07b7 100644 --- a/code/modules/mining/equipment/survival_pod.dm +++ b/code/modules/mining/equipment/survival_pod.dm @@ -138,6 +138,26 @@ else add_overlay("sleeper_cover") +//Lifeform Stasis Unit +/obj/machinery/stasis/survival_pod + icon = 'icons/obj/lavaland/survival_pod.dmi' + icon_state = "sleeper" + mattress_state = null + buckle_lying = 270 + +/obj/machinery/stasis/survival_pod/play_power_sound() + return + +/obj/machinery/stasis/survival_pod/update_icon() + return + +//NanoMed +/obj/machinery/vending/wallmed/survival_pod + name = "survival pod medical supply" + desc = "Wall-mounted Medical Equipment dispenser. This one seems just a tiny bit smaller." + refill_canister = null + onstation = FALSE + //Computer /obj/item/gps/computer name = "pod computer" diff --git a/code/modules/mob/living/carbon/alien/larva/life.dm b/code/modules/mob/living/carbon/alien/larva/life.dm index 5cd1e5cd595..51fe5e2e100 100644 --- a/code/modules/mob/living/carbon/alien/larva/life.dm +++ b/code/modules/mob/living/carbon/alien/larva/life.dm @@ -4,7 +4,7 @@ set invisibility = 0 if (notransform) return - if(..()) //not dead + if(..() && !IsInStasis()) //not dead and not in stasis // GROW! if(amount_grown < max_grown) amount_grown++ diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index a71f5390518..ca3e63f38d4 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -28,25 +28,26 @@ if (QDELETED(src)) return 0 - if(.) //not dead - handle_active_genes() + if(!IsInStasis()) + if(.) //not dead + handle_active_genes() - if(stat != DEAD) - //heart attack stuff - handle_heart() + if(stat != DEAD) + //heart attack stuff + handle_heart() - if(stat != DEAD) - //Stuff jammed in your limbs hurts - handle_embedded_objects() + if(stat != DEAD) + //Stuff jammed in your limbs hurts + handle_embedded_objects() - if(stat != DEAD) - handle_hygiene() + if(stat != DEAD) + handle_hygiene() + + dna.species.spec_life(src) // for mutantraces //Update our name based on whether our face is obscured/disfigured name = get_visible_name() - dna.species.spec_life(src) // for mutantraces - if(stat != DEAD) return 1 diff --git a/code/modules/mob/living/carbon/life.dm b/code/modules/mob/living/carbon/life.dm index bf39ee76404..8d8a939762f 100644 --- a/code/modules/mob/living/carbon/life.dm +++ b/code/modules/mob/living/carbon/life.dm @@ -8,28 +8,33 @@ damageoverlaytemp = 0 update_damage_hud() - if(stat != DEAD) //Reagent processing needs to come before breathing, to prevent edge cases. - handle_organs() + if(!IsInStasis()) - . = ..() + if(stat != DEAD) //Reagent processing needs to come before breathing, to prevent edge cases. + handle_organs() - if (QDELETED(src)) - return + . = ..() - if(.) //not dead - handle_blood() + if (QDELETED(src)) + return - if(stat != DEAD) - var/bprv = handle_bodyparts() - if(bprv & BODYPART_LIFE_UPDATE_HEALTH) - updatehealth() - update_stamina() + if(.) //not dead + handle_blood() - if(stat != DEAD) - handle_brain_damage() + if(stat != DEAD) + var/bprv = handle_bodyparts() + if(bprv & BODYPART_LIFE_UPDATE_HEALTH) + updatehealth() + update_stamina() - if(stat != DEAD) - handle_liver() + if(stat != DEAD) + handle_brain_damage() + + if(stat != DEAD) + handle_liver() + + else + . = ..() if(stat == DEAD) stop_sound_channel(CHANNEL_HEARTBEAT) diff --git a/code/modules/mob/living/carbon/monkey/life.dm b/code/modules/mob/living/carbon/monkey/life.dm index 6b7c1e46c2b..624ed6d0160 100644 --- a/code/modules/mob/living/carbon/monkey/life.dm +++ b/code/modules/mob/living/carbon/monkey/life.dm @@ -9,7 +9,7 @@ if (notransform) return - if(..()) + if(..() && !IsInStasis()) if(!client) if(stat == CONSCIOUS) diff --git a/code/modules/mob/living/life.dm b/code/modules/mob/living/life.dm index 26b194eb5cf..923e378fbb4 100644 --- a/code/modules/mob/living/life.dm +++ b/code/modules/mob/living/life.dm @@ -33,44 +33,45 @@ return if(!loc) return - var/datum/gas_mixture/environment = loc.return_air() - if(stat != DEAD) - //Mutations and radiation - handle_mutations_and_radiation() + if(!IsInStasis()) - if(stat != DEAD) - //Breathing, if applicable - handle_breathing(times_fired) + if(stat != DEAD) + //Mutations and radiation + handle_mutations_and_radiation() - handle_diseases()// DEAD check is in the proc itself; we want it to spread even if the mob is dead, but to handle its disease-y properties only if you're not. + if(stat != DEAD) + //Breathing, if applicable + handle_breathing(times_fired) - if (QDELETED(src)) // diseases can qdel the mob via transformations - return + handle_diseases()// DEAD check is in the proc itself; we want it to spread even if the mob is dead, but to handle its disease-y properties only if you're not. - if(stat != DEAD) - //Random events (vomiting etc) - handle_random_events() + if (QDELETED(src)) // diseases can qdel the mob via transformations + return - //Handle temperature/pressure differences between body and environment - if(environment) - handle_environment(environment) + if(stat != DEAD) + //Random events (vomiting etc) + handle_random_events() + + //Handle temperature/pressure differences between body and environment + var/datum/gas_mixture/environment = loc.return_air() + if(environment) + handle_environment(environment) + + //stuff in the stomach + handle_stomach() + + handle_gravity() + + if(stat != DEAD) + handle_traits() // eye, ear, brain damages + handle_status_effects() //all special effects, stun, knockdown, jitteryness, hallucination, sleeping, etc handle_fire() - //stuff in the stomach - handle_stomach() - - handle_gravity() - if(machine) machine.check_eye(src) - if(stat != DEAD) - handle_traits() // eye, ear, brain damages - if(stat != DEAD) - handle_status_effects() //all special effects, stun, knockdown, jitteryness, hallucination, sleeping, etc - if(stat != DEAD) return 1 diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index e54634376ac..9f6616d96fd 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -382,8 +382,8 @@ to_chat(src, "You have given up life and succumbed to death.") death() -/mob/living/incapacitated(ignore_restraints = FALSE, ignore_grab = FALSE, check_immobilized = FALSE) - if(stat || IsUnconscious() || IsStun() || IsParalyzed() || (check_immobilized && IsImmobilized()) || (!ignore_restraints && restrained(ignore_grab))) +/mob/living/incapacitated(ignore_restraints = FALSE, ignore_grab = FALSE, check_immobilized = FALSE, ignore_stasis = FALSE) + if(stat || IsUnconscious() || IsStun() || IsParalyzed() || (check_immobilized && IsImmobilized()) || (!ignore_restraints && restrained(ignore_grab)) || (!ignore_stasis && IsInStasis())) return TRUE /mob/living/canUseStorage() @@ -678,7 +678,7 @@ ..(pressure_difference, direction, pressure_resistance_prob_delta) /mob/living/can_resist() - return !((next_move > world.time) || incapacitated(ignore_restraints = TRUE)) + return !((next_move > world.time) || incapacitated(ignore_restraints = TRUE, ignore_stasis = TRUE)) /mob/living/verb/resist() set name = "Resist" @@ -1097,7 +1097,8 @@ var/stun = IsStun() var/knockdown = IsKnockdown() var/ignore_legs = get_leg_ignore() - var/canmove = !IsImmobilized() && !stun && conscious && !paralyzed && !buckled && (!stat_softcrit || !pulledby) && !chokehold && !IsFrozen() && (has_arms || ignore_legs || has_legs) + var/in_stasis = IsInStasis() + var/canmove = !IsImmobilized() && !stun && conscious && !paralyzed && !buckled && (!stat_softcrit || !pulledby) && !chokehold && !IsFrozen() && !in_stasis && (has_arms || ignore_legs || has_legs) if(canmove) mobility_flags |= MOBILITY_MOVE else diff --git a/code/modules/mob/living/status_procs.dm b/code/modules/mob/living/status_procs.dm index b5747b1f65e..1d41e25a334 100644 --- a/code/modules/mob/living/status_procs.dm +++ b/code/modules/mob/living/status_procs.dm @@ -374,6 +374,14 @@ priority_absorb_key["stuns_absorbed"] += amount return TRUE +/////////////////////////////////// STASIS /////////////////////////////////// + +/mob/living/proc/IsInStasis() + . = has_status_effect(STATUS_EFFECT_STASIS) + +/mob/living/proc/SetStasis(apply, updating = TRUE) + . = apply ? apply_status_effect(STATUS_EFFECT_STASIS, null, updating) : remove_status_effect(STATUS_EFFECT_STASIS) + /////////////////////////////////// DISABILITIES //////////////////////////////////// /mob/living/proc/add_quirk(quirktype, spawn_effects) //separate proc due to the way these ones are handled if(HAS_TRAIT(src, quirktype)) diff --git a/code/modules/research/designs/machine_designs.dm b/code/modules/research/designs/machine_designs.dm index 9e9ac487cf4..1da282f673f 100644 --- a/code/modules/research/designs/machine_designs.dm +++ b/code/modules/research/designs/machine_designs.dm @@ -130,14 +130,6 @@ category = list("Teleportation Machinery") departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE -/datum/design/board/sleeper - name = "Machine Design (Sleeper Board)" - desc = "The circuit board for a sleeper." - id = "sleeper" - build_path = /obj/item/circuitboard/machine/sleeper - departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_MEDICAL - category = list ("Medical Machinery") - /datum/design/board/vr_sleeper name = "Machine Design (VR Sleeper Board)" desc = "The circuit board for a VR sleeper." @@ -593,4 +585,12 @@ id = "fat_sucker" build_path = /obj/item/circuitboard/machine/fat_sucker category = list ("Misc. Machinery") - departmental_flags = DEPARTMENTAL_FLAG_SERVICE \ No newline at end of file + departmental_flags = DEPARTMENTAL_FLAG_SERVICE + +/datum/design/board/stasis + name = "Machine Design (Lifeform Stasis Unit)" + desc = "The circuit board for a stasis unit." + id = "stasis" + build_path = /obj/item/circuitboard/machine/stasis + category = list("Medical Machinery") + departmental_flags = DEPARTMENTAL_FLAG_MEDICAL diff --git a/code/modules/research/techweb/all_nodes.dm b/code/modules/research/techweb/all_nodes.dm index 9dc1973cd02..0587c7f6077 100644 --- a/code/modules/research/techweb/all_nodes.dm +++ b/code/modules/research/techweb/all_nodes.dm @@ -56,7 +56,7 @@ display_name = "Biological Technology" description = "What makes us tick." //the MC, silly! prereq_ids = list("base") - design_ids = list("chem_heater", "chem_master", "chem_dispenser", "sleeper", "vr_sleeper", "pandemic", "defibrillator", "defibmount", "operating", "soda_dispenser", "beer_dispenser", "healthanalyzer", "medspray","genescanner") + design_ids = list("chem_heater", "chem_master", "chem_dispenser", "vr_sleeper", "pandemic", "defibrillator", "defibmount", "operating", "soda_dispenser", "beer_dispenser", "healthanalyzer", "medspray","genescanner") research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) export_price = 5000 @@ -435,7 +435,7 @@ display_name = "Cryostasis Technology" description = "Smart freezing of objects to preserve them!" prereq_ids = list("adv_engi", "biotech") - design_ids = list("splitbeaker", "noreactsyringe", "cryotube", "cryo_Grenade") + design_ids = list("splitbeaker", "noreactsyringe", "cryotube", "cryo_Grenade", "stasis") research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2000) export_price = 4000 diff --git a/icons/mob/screen_alert.dmi b/icons/mob/screen_alert.dmi old mode 100644 new mode 100755 index cff1a390651ded9dcf2322474dbd7598e44870db..9550d879aa9d68e678a91d86fd9b8af8d85978d7 GIT binary patch delta 23534 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 delta 22985 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�Jgk%Kg+MafRFS< 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 diff --git a/icons/obj/machines/stasis.dmi b/icons/obj/machines/stasis.dmi new file mode 100755 index 0000000000000000000000000000000000000000..d63d8e24d3f4e78567c999061e704081397ea978 GIT binary patch literal 672 zcmV;R0$=@!P)N=izAfPmN7fFDZ*Bkpc$`yKaB_9`^iy#0_2eo`Eh^5; z&r`5fFwryM;w;ZhDainGjE%TBGg33tGfE(w;*!LYR3K9c$SBS%R^sAJ$t)@c3K(*6 zrWGaTrb5_g%HorX^0QO(h*h1Nn3-3SnwOZDoJvqjNoi6l(ay-n=>%m3S3ehUKmY)p z+E4)Xs={^v00B@*L_t(oh3%9LZ-XEZhGkOJUC}OVYd5uB|NoyHAoZi3RDx@=#B#(NUDO^o!O1P0$bUgsAQ znXT`189R>PuQeQd`&ZE!6p?uQ?2!bF8;)$qtwJbj{LJNHM z1(aiuM~txfPhWbt`M=#5Y<+C%>DjhzV1o1Mye#JhnmV+=7