@@ -12673,9 +12673,7 @@
|
||||
/turf/open/floor/plasteel,
|
||||
/area/construction/mining/aux_base)
|
||||
"aCW" = (
|
||||
/obj/machinery/sleeper{
|
||||
dir = 4
|
||||
},
|
||||
/obj/machinery/stasis,
|
||||
/turf/open/floor/plating,
|
||||
/area/maintenance/port/fore)
|
||||
"aCX" = (
|
||||
@@ -30332,9 +30330,7 @@
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/medical/surgery)
|
||||
"bwD" = (
|
||||
/obj/machinery/sleeper{
|
||||
dir = 8
|
||||
},
|
||||
/obj/machinery/stasis,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/medical/medbay/central)
|
||||
"bwE" = (
|
||||
@@ -32059,14 +32055,12 @@
|
||||
/turf/open/floor/plating,
|
||||
/area/maintenance/port/aft)
|
||||
"bAq" = (
|
||||
/obj/machinery/sleeper{
|
||||
dir = 8
|
||||
},
|
||||
/obj/machinery/camera{
|
||||
c_tag = "Medbay Treatment Center";
|
||||
dir = 8;
|
||||
network = list("ss13","medbay")
|
||||
},
|
||||
/obj/machinery/stasis,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/medical/medbay/central)
|
||||
"bAr" = (
|
||||
|
||||
@@ -8805,12 +8805,11 @@
|
||||
/obj/effect/turf_decal/tile/blue{
|
||||
dir = 1
|
||||
},
|
||||
/obj/machinery/sleeper{
|
||||
dir = 8
|
||||
},
|
||||
/obj/machinery/airalarm{
|
||||
pixel_y = 24
|
||||
},
|
||||
/obj/structure/table,
|
||||
/obj/item/stack/medical/suture/five,
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/medical/clinic)
|
||||
"auS" = (
|
||||
@@ -8876,9 +8875,7 @@
|
||||
name = "Station Intercom (Common)";
|
||||
pixel_y = 26
|
||||
},
|
||||
/obj/machinery/sleep_console{
|
||||
dir = 8
|
||||
},
|
||||
/obj/machinery/stasis,
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/medical/clinic)
|
||||
"auZ" = (
|
||||
@@ -36751,9 +36748,6 @@
|
||||
/obj/machinery/light/small{
|
||||
dir = 4
|
||||
},
|
||||
/obj/item/storage/box/engineer{
|
||||
pixel_y = 4
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
/area/maintenance/disposal)
|
||||
"bCu" = (
|
||||
@@ -58329,9 +58323,7 @@
|
||||
dir = 1
|
||||
},
|
||||
/obj/structure/window/reinforced/spawner/west,
|
||||
/obj/machinery/sleeper{
|
||||
dir = 4
|
||||
},
|
||||
/obj/machinery/stasis,
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/medical/medbay/zone2)
|
||||
"ctZ" = (
|
||||
@@ -58340,9 +58332,7 @@
|
||||
dir = 4
|
||||
},
|
||||
/obj/structure/window/reinforced/spawner/east,
|
||||
/obj/machinery/sleeper{
|
||||
dir = 8
|
||||
},
|
||||
/obj/machinery/stasis,
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/medical/medbay/zone2)
|
||||
"cua" = (
|
||||
|
||||
@@ -46910,12 +46910,10 @@
|
||||
dir = 4;
|
||||
pixel_x = -23
|
||||
},
|
||||
/obj/machinery/sleeper{
|
||||
dir = 4
|
||||
},
|
||||
/obj/effect/turf_decal/stripes/line{
|
||||
dir = 6
|
||||
},
|
||||
/obj/machinery/stasis,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/medical/abandoned)
|
||||
"ddn" = (
|
||||
@@ -47559,12 +47557,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" = (
|
||||
@@ -47584,12 +47580,10 @@
|
||||
/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/stasis,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/medical/medbay/central)
|
||||
"deG" = (
|
||||
|
||||
@@ -29800,8 +29800,8 @@
|
||||
/turf/open/floor/carpet/green,
|
||||
/area/medical/surgery)
|
||||
"byn" = (
|
||||
/obj/machinery/sleeper,
|
||||
/obj/effect/decal/festive/christmas_ivy_string,
|
||||
/obj/machinery/stasis,
|
||||
/turf/open/floor/plasteel/white/side,
|
||||
/area/medical/exam_room)
|
||||
"byo" = (
|
||||
@@ -29882,7 +29882,7 @@
|
||||
/turf/open/floor/plasteel/white/side,
|
||||
/area/medical/exam_room)
|
||||
"byy" = (
|
||||
/obj/machinery/sleeper,
|
||||
/obj/machinery/stasis,
|
||||
/turf/open/floor/plasteel/white/side,
|
||||
/area/medical/exam_room)
|
||||
"byz" = (
|
||||
@@ -33048,9 +33048,7 @@
|
||||
},
|
||||
/area/medical/genetics/cloning)
|
||||
"bEC" = (
|
||||
/obj/machinery/sleeper{
|
||||
dir = 1
|
||||
},
|
||||
/obj/machinery/stasis,
|
||||
/turf/open/floor/plasteel/white/side{
|
||||
dir = 1
|
||||
},
|
||||
|
||||
@@ -22447,9 +22447,7 @@
|
||||
/obj/effect/turf_decal/tile/neutral{
|
||||
dir = 4
|
||||
},
|
||||
/obj/machinery/sleeper{
|
||||
dir = 4
|
||||
},
|
||||
/obj/machinery/stasis,
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/medical/medbay/central)
|
||||
"aLj" = (
|
||||
|
||||
@@ -38154,17 +38154,17 @@
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/medical/medbay/central)
|
||||
"bDq" = (
|
||||
/obj/machinery/sleeper,
|
||||
/obj/effect/turf_decal/trimline/blue/filled/line{
|
||||
dir = 9
|
||||
},
|
||||
/obj/machinery/stasis,
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/medical/cryo)
|
||||
"bDr" = (
|
||||
/obj/machinery/sleeper,
|
||||
/obj/effect/turf_decal/trimline/blue/filled/line{
|
||||
dir = 5
|
||||
},
|
||||
/obj/machinery/stasis,
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/medical/cryo)
|
||||
"bDs" = (
|
||||
|
||||
@@ -50579,9 +50579,6 @@
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/engineering/storage/tech)
|
||||
"eAe" = (
|
||||
/obj/machinery/sleeper{
|
||||
dir = 8
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
|
||||
dir = 4
|
||||
},
|
||||
@@ -50595,6 +50592,7 @@
|
||||
/obj/effect/turf_decal/tile/blue{
|
||||
dir = 8
|
||||
},
|
||||
/obj/machinery/stasis,
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/medical/treatment_center)
|
||||
"eAy" = (
|
||||
@@ -81034,9 +81032,6 @@
|
||||
/turf/open/space/basic,
|
||||
/area/space)
|
||||
"vLV" = (
|
||||
/obj/machinery/sleeper{
|
||||
dir = 4
|
||||
},
|
||||
/obj/effect/turf_decal/tile/blue{
|
||||
dir = 1
|
||||
},
|
||||
@@ -81047,6 +81042,7 @@
|
||||
/obj/effect/turf_decal/tile/blue{
|
||||
dir = 8
|
||||
},
|
||||
/obj/machinery/stasis,
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/medical/treatment_center)
|
||||
"vMm" = (
|
||||
|
||||
@@ -26814,12 +26814,10 @@
|
||||
/turf/open/floor/plating,
|
||||
/area/medical/medbay/zone3)
|
||||
"aXS" = (
|
||||
/obj/machinery/sleeper{
|
||||
dir = 4
|
||||
},
|
||||
/obj/effect/turf_decal/stripes/line{
|
||||
dir = 6
|
||||
},
|
||||
/obj/machinery/stasis,
|
||||
/turf/open/floor/plasteel/dark/side{
|
||||
dir = 8
|
||||
},
|
||||
@@ -28158,9 +28156,6 @@
|
||||
/turf/open/floor/plating,
|
||||
/area/medical/medbay/zone3)
|
||||
"bax" = (
|
||||
/obj/machinery/sleeper{
|
||||
dir = 4
|
||||
},
|
||||
/obj/machinery/newscaster{
|
||||
pixel_y = -32
|
||||
},
|
||||
@@ -28170,6 +28165,7 @@
|
||||
/obj/effect/turf_decal/stripes/end{
|
||||
dir = 4
|
||||
},
|
||||
/obj/machinery/stasis,
|
||||
/turf/open/floor/plasteel/dark/side{
|
||||
dir = 8
|
||||
},
|
||||
|
||||
@@ -32729,9 +32729,6 @@
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/medical/medbay/zone3)
|
||||
"bzP" = (
|
||||
/obj/machinery/sleeper{
|
||||
dir = 4
|
||||
},
|
||||
/obj/effect/turf_decal/stripes/line{
|
||||
dir = 1
|
||||
},
|
||||
@@ -32748,6 +32745,7 @@
|
||||
/obj/effect/turf_decal/tile/blue{
|
||||
dir = 8
|
||||
},
|
||||
/obj/machinery/stasis,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/medical/treatment_center)
|
||||
"bzQ" = (
|
||||
@@ -33961,9 +33959,6 @@
|
||||
/turf/open/floor/plasteel,
|
||||
/area/medical/treatment_center)
|
||||
"bCj" = (
|
||||
/obj/machinery/sleeper{
|
||||
dir = 4
|
||||
},
|
||||
/obj/effect/turf_decal/tile/blue{
|
||||
dir = 1
|
||||
},
|
||||
@@ -33974,6 +33969,7 @@
|
||||
/obj/effect/turf_decal/tile/blue{
|
||||
dir = 8
|
||||
},
|
||||
/obj/machinery/stasis,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/medical/treatment_center)
|
||||
"bCl" = (
|
||||
|
||||
@@ -11007,9 +11007,7 @@
|
||||
/obj/effect/turf_decal/tile/blue{
|
||||
dir = 4
|
||||
},
|
||||
/obj/machinery/sleeper{
|
||||
dir = 8
|
||||
},
|
||||
/obj/machinery/stasis,
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/medical/medbay/zone2)
|
||||
"aPZ" = (
|
||||
@@ -20516,9 +20514,6 @@
|
||||
/turf/open/floor/plating,
|
||||
/area/maintenance/solars/starboard/aft)
|
||||
"fUX" = (
|
||||
/obj/machinery/sleeper{
|
||||
dir = 4
|
||||
},
|
||||
/obj/structure/window/reinforced{
|
||||
dir = 1
|
||||
},
|
||||
@@ -20528,6 +20523,7 @@
|
||||
/obj/effect/turf_decal/stripes/line{
|
||||
dir = 9
|
||||
},
|
||||
/obj/machinery/stasis,
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/medical/medbay/central)
|
||||
"fVm" = (
|
||||
@@ -23736,9 +23732,6 @@
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/security/office)
|
||||
"hWn" = (
|
||||
/obj/machinery/sleeper{
|
||||
dir = 8
|
||||
},
|
||||
/obj/structure/window/reinforced{
|
||||
dir = 1
|
||||
},
|
||||
@@ -23755,6 +23748,7 @@
|
||||
/obj/effect/turf_decal/stripes/line{
|
||||
dir = 1
|
||||
},
|
||||
/obj/machinery/stasis,
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/medical/medbay/central)
|
||||
"hWp" = (
|
||||
@@ -29421,9 +29415,6 @@
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/ai_monitored/turret_protected/ai_upload_foyer)
|
||||
"lOX" = (
|
||||
/obj/machinery/sleeper{
|
||||
dir = 8
|
||||
},
|
||||
/obj/structure/window/reinforced,
|
||||
/obj/structure/mirror{
|
||||
pixel_x = 25
|
||||
@@ -29433,6 +29424,7 @@
|
||||
},
|
||||
/obj/effect/turf_decal/tile/blue,
|
||||
/obj/effect/turf_decal/stripes/line,
|
||||
/obj/machinery/stasis,
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/medical/medbay/central)
|
||||
"lPB" = (
|
||||
@@ -44165,9 +44157,7 @@
|
||||
/obj/effect/turf_decal/tile/blue{
|
||||
dir = 4
|
||||
},
|
||||
/obj/machinery/sleeper{
|
||||
dir = 8
|
||||
},
|
||||
/obj/machinery/stasis,
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/medical/medbay/zone3)
|
||||
"vkk" = (
|
||||
@@ -46271,9 +46261,6 @@
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/medical/medbay/central)
|
||||
"wut" = (
|
||||
/obj/machinery/sleeper{
|
||||
dir = 4
|
||||
},
|
||||
/obj/structure/window/reinforced,
|
||||
/obj/structure/window/reinforced{
|
||||
dir = 8
|
||||
@@ -46282,6 +46269,7 @@
|
||||
/obj/effect/turf_decal/stripes/line{
|
||||
dir = 10
|
||||
},
|
||||
/obj/machinery/stasis,
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/medical/medbay/central)
|
||||
"wuC" = (
|
||||
|
||||
@@ -1120,9 +1120,7 @@
|
||||
/obj/structure/window{
|
||||
dir = 8
|
||||
},
|
||||
/obj/machinery/sleeper{
|
||||
dir = 1
|
||||
},
|
||||
/obj/machinery/stasis,
|
||||
/turf/open/floor/holofloor{
|
||||
icon_state = "white"
|
||||
},
|
||||
@@ -1134,9 +1132,7 @@
|
||||
},
|
||||
/area/holodeck/rec_center/medical)
|
||||
"dd" = (
|
||||
/obj/machinery/sleeper{
|
||||
dir = 1
|
||||
},
|
||||
/obj/machinery/stasis,
|
||||
/turf/open/floor/holofloor{
|
||||
icon_state = "white"
|
||||
},
|
||||
@@ -11920,12 +11916,10 @@
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/centcom/control)
|
||||
"BH" = (
|
||||
/obj/machinery/sleeper{
|
||||
dir = 4
|
||||
},
|
||||
/obj/effect/turf_decal/stripes/line{
|
||||
dir = 9
|
||||
},
|
||||
/obj/machinery/stasis,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/centcom/control)
|
||||
"BI" = (
|
||||
@@ -11940,12 +11934,10 @@
|
||||
/turf/open/floor/plasteel,
|
||||
/area/centcom/control)
|
||||
"BJ" = (
|
||||
/obj/machinery/sleeper{
|
||||
dir = 8
|
||||
},
|
||||
/obj/effect/turf_decal/stripes/line{
|
||||
dir = 5
|
||||
},
|
||||
/obj/machinery/stasis,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/centcom/control)
|
||||
"BK" = (
|
||||
@@ -16449,9 +16441,7 @@
|
||||
/turf/open/floor/holofloor/wood,
|
||||
/area/holodeck/rec_center/wrestlingarena)
|
||||
"Lh" = (
|
||||
/obj/machinery/sleeper{
|
||||
dir = 8
|
||||
},
|
||||
/obj/machinery/stasis,
|
||||
/turf/open/floor/mineral/titanium/blue,
|
||||
/area/centcom/evac)
|
||||
"Li" = (
|
||||
@@ -46325,7 +46315,7 @@ KO
|
||||
KV
|
||||
KV
|
||||
KV
|
||||
Lb
|
||||
Lh
|
||||
Lb
|
||||
Lp
|
||||
Lp
|
||||
|
||||
@@ -385,6 +385,7 @@
|
||||
#define COMSIG_LIVING_LIFE "life_tick" //from base of mob/living/Life() (seconds, times_fired)
|
||||
#define COMPONENT_INTERRUPT_LIFE_BIOLOGICAL 1 // interrupt biological processes
|
||||
#define COMPONENT_INTERRUPT_LIFE_PHYSICAL 2 // interrupt physical handling
|
||||
#define COMPONET_INTERRUPT_STATUS_EFFECTS 3 // interrupt status effects
|
||||
|
||||
#define COMSIG_LIVING_BIOLOGICAL_LIFE "biological_life" //from base of mob/living/BiologicalLife() (seconds, times_fired)
|
||||
|
||||
|
||||
@@ -152,4 +152,9 @@
|
||||
// GROUPED //
|
||||
/////////////
|
||||
|
||||
#define STASIS_MACHINE_EFFECT "stasis_machine"
|
||||
|
||||
#define STASIS_ASCENSION_EFFECT "heretic_ascension"
|
||||
|
||||
/// If the incapacitated status effect will ignore a mob in stasis (stasis beds)
|
||||
#define IGNORE_STASIS (1<<1)
|
||||
|
||||
@@ -70,6 +70,10 @@
|
||||
#define HAS_TRAIT_NOT_FROM(target, trait, source) (target.status_traits ? (target.status_traits[trait] ? (length(target.status_traits[trait] - source) > 0) : FALSE) : FALSE)
|
||||
|
||||
//mob traits
|
||||
/// Prevents voluntary movement.
|
||||
#define TRAIT_IMMOBILIZED "immobilized"
|
||||
/// Prevents usage of manipulation appendages (picking, holding or using items, manipulating storage).
|
||||
#define TRAIT_HANDS_BLOCKED "handsblocked"
|
||||
#define TRAIT_BLIND "blind"
|
||||
#define TRAIT_MUTE "mute"
|
||||
#define TRAIT_EMOTEMUTE "emotemute"
|
||||
|
||||
@@ -484,3 +484,5 @@ GLOBAL_LIST_EMPTY(species_datums)
|
||||
|
||||
//check if the person is dead, not sure where to put this
|
||||
#define IS_DEAD_OR_INCAP(source) (source.incapacitated() || source.stat)
|
||||
|
||||
#define IS_IN_STASIS(mob) (mob.has_status_effect(/datum/status_effect/grouped/stasis))
|
||||
|
||||
@@ -75,10 +75,8 @@ GLOBAL_VAR_INIT(rollovercheck_last_timeofday, 0)
|
||||
/proc/daysSince(realtimev)
|
||||
return round((world.realtime - realtimev) / (24 HOURS))
|
||||
|
||||
/proc/worldtime2text()
|
||||
return gameTimestamp("hh:mm:ss", world.time)
|
||||
/proc/worldtime2text(wtime = world.timeofday)
|
||||
return gameTimestamp("hh:mm:ss", wtime)
|
||||
|
||||
/proc/gameTimestamp(format = "hh:mm:ss", wtime=null)
|
||||
if(!wtime)
|
||||
wtime = world.time
|
||||
/proc/gameTimestamp(format = "hh:mm:ss", wtime=world.time)
|
||||
return time2text(wtime - GLOB.timezoneOffset, format)
|
||||
|
||||
@@ -107,7 +107,7 @@ SUBSYSTEM_DEF(traumas)
|
||||
/obj/item/clothing/under/rank/medical/doctor/nurse, /obj/item/clothing/under/rank/medical/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)),
|
||||
|
||||
@@ -5,12 +5,10 @@ SUBSYSTEM_DEF(vis_overlays)
|
||||
init_order = INIT_ORDER_VIS
|
||||
|
||||
var/list/vis_overlay_cache
|
||||
var/list/unique_vis_overlays
|
||||
var/list/currentrun
|
||||
|
||||
/datum/controller/subsystem/vis_overlays/Initialize()
|
||||
vis_overlay_cache = list()
|
||||
unique_vis_overlays = list()
|
||||
return ..()
|
||||
|
||||
/datum/controller/subsystem/vis_overlays/fire(resumed = FALSE)
|
||||
@@ -30,7 +28,7 @@ SUBSYSTEM_DEF(vis_overlays)
|
||||
if(MC_TICK_CHECK)
|
||||
return
|
||||
|
||||
//the "thing" var can be anything with vis_contents which includes images
|
||||
//the "thing" var can be anything with vis_contents which includes images - in the future someone should totally allow vis overlays to be passed in as an arg instead of all this bullshit
|
||||
/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)
|
||||
@@ -45,7 +43,6 @@ SUBSYSTEM_DEF(vis_overlays)
|
||||
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
|
||||
|
||||
@@ -127,13 +127,58 @@
|
||||
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"
|
||||
|
||||
|
||||
/datum/status_effect/grouped/stasis
|
||||
id = "stasis"
|
||||
duration = -1
|
||||
tick_interval = 10
|
||||
alert_type = /atom/movable/screen/alert/status_effect/stasis
|
||||
var/last_dead_time
|
||||
|
||||
/datum/status_effect/grouped/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 = gameTimestamp(wtime=new_timeofdeath)
|
||||
last_dead_time = null
|
||||
if(owner.stat == DEAD)
|
||||
last_dead_time = world.time
|
||||
|
||||
/datum/status_effect/grouped/stasis/on_creation(mob/living/new_owner, set_duration)
|
||||
. = ..()
|
||||
if(.)
|
||||
update_time_of_death()
|
||||
owner.reagents?.end_metabolization(owner, FALSE)
|
||||
|
||||
/datum/status_effect/grouped/stasis/on_apply()
|
||||
. = ..()
|
||||
if(!.)
|
||||
return
|
||||
RegisterSignal(owner, COMSIG_LIVING_LIFE, .proc/InterruptBiologicalLife)
|
||||
owner.mobility_flags &= ~(MOBILITY_USE | MOBILITY_PICKUP | MOBILITY_PULL | MOBILITY_HOLD)
|
||||
owner.update_mobility()
|
||||
owner.add_filter("stasis_status_ripple", 2, list("type" = "ripple", "flags" = WAVE_BOUNDED, "radius" = 0, "size" = 2))
|
||||
var/filter = owner.get_filter("stasis_status_ripple")
|
||||
animate(filter, radius = 32, time = 15, size = 0, loop = -1)
|
||||
|
||||
/datum/status_effect/grouped/stasis/proc/InterruptBiologicalLife()
|
||||
return COMPONENT_INTERRUPT_LIFE_BIOLOGICAL
|
||||
|
||||
/datum/status_effect/grouped/stasis/tick()
|
||||
update_time_of_death()
|
||||
|
||||
/datum/status_effect/grouped/stasis/on_remove()
|
||||
UnregisterSignal(owner, COMSIG_LIVING_LIFE)
|
||||
owner.mobility_flags |= MOBILITY_USE | MOBILITY_PICKUP | MOBILITY_PULL | MOBILITY_HOLD
|
||||
owner.remove_filter("stasis_status_ripple")
|
||||
update_time_of_death()
|
||||
return ..()
|
||||
|
||||
/atom/movable/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"
|
||||
|
||||
/datum/status_effect/robotic_emp
|
||||
id = "emp_no_combat_mode"
|
||||
|
||||
|
||||
@@ -0,0 +1,142 @@
|
||||
#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, "<span class='notice'>Alt-click to [turn_on_or_off] the machine.</span>")
|
||||
|
||||
/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(IS_IN_STASIS(L))
|
||||
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.apply_status_effect(/datum/status_effect/grouped/stasis, STASIS_MACHINE_EFFECT)
|
||||
|
||||
target.ExtinguishMob()
|
||||
use_power = ACTIVE_POWER_USE
|
||||
|
||||
/obj/machinery/stasis/proc/thaw_them(mob/living/target)
|
||||
target.remove_status_effect(/datum/status_effect/grouped/stasis, STASIS_MACHINE_EFFECT)
|
||||
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(!IS_IN_STASIS(L_occupant))
|
||||
chill_out(L_occupant)
|
||||
else if(IS_IN_STASIS(L_occupant))
|
||||
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
|
||||
@@ -1482,3 +1482,11 @@
|
||||
icon_state = "engineering"
|
||||
build_path = /obj/machinery/research/explosive_compressor
|
||||
req_components = list(/obj/item/stock_parts/matter_bin = 3)
|
||||
|
||||
/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)
|
||||
|
||||
@@ -162,6 +162,26 @@
|
||||
if(!state_open)
|
||||
. += "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"
|
||||
|
||||
@@ -6,13 +6,13 @@
|
||||
SHOULD_NOT_SLEEP(TRUE)
|
||||
if(mob_transforming)
|
||||
return
|
||||
|
||||
. = SEND_SIGNAL(src, COMSIG_LIVING_LIFE, seconds, times_fired)
|
||||
if(!(. & COMPONENT_INTERRUPT_LIFE_PHYSICAL))
|
||||
PhysicalLife(seconds, times_fired)
|
||||
if(!(. & COMPONENT_INTERRUPT_LIFE_BIOLOGICAL))
|
||||
BiologicalLife(seconds, times_fired)
|
||||
|
||||
if(!(. & COMPONET_INTERRUPT_STATUS_EFFECTS))
|
||||
handle_status_effects() //all special effects, stun, knockdown, jitteryness, hallucination, sleeping, etc
|
||||
// CODE BELOW SHOULD ONLY BE THINGS THAT SHOULD HAPPEN NO MATTER WHAT AND CAN NOT BE SUSPENDED!
|
||||
// Otherwise, it goes into one of the two split Life procs!
|
||||
|
||||
@@ -69,9 +69,8 @@
|
||||
|
||||
handle_block_parry(seconds)
|
||||
|
||||
// These two MIGHT need to be moved to base Life() if we get any in the future that's a "physical" effect that needs to fire even while in stasis.
|
||||
handle_traits() // eye, ear, brain damages
|
||||
handle_status_effects() //all special effects, stun, knockdown, jitteryness, hallucination, sleeping, etc
|
||||
|
||||
return TRUE
|
||||
|
||||
/**
|
||||
|
||||
@@ -433,8 +433,8 @@
|
||||
to_chat(src, "<span class='notice'>You have given up life and succumbed to death.</span>")
|
||||
death()
|
||||
|
||||
/mob/living/incapacitated(ignore_restraints = FALSE, ignore_grab = FALSE, check_immobilized = FALSE)
|
||||
if(stat || IsUnconscious() || IsStun() || IsParalyzed() || (combat_flags & COMBAT_FLAG_HARD_STAMCRIT) || (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() || (combat_flags & COMBAT_FLAG_HARD_STAMCRIT) || (check_immobilized && IsImmobilized()) || (!ignore_restraints && restrained(ignore_grab)) || (!ignore_stasis && IS_IN_STASIS(src)))
|
||||
return TRUE
|
||||
|
||||
/mob/living/canUseStorage()
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 3.9 KiB |
@@ -912,6 +912,7 @@
|
||||
#include "code\game\machinery\Sleeper.dm"
|
||||
#include "code\game\machinery\slotmachine.dm"
|
||||
#include "code\game\machinery\spaceheater.dm"
|
||||
#include "code\game\machinery\stasis.dm"
|
||||
#include "code\game\machinery\status_display.dm"
|
||||
#include "code\game\machinery\suit_storage_unit.dm"
|
||||
#include "code\game\machinery\syndicatebeacon.dm"
|
||||
|
||||
Reference in New Issue
Block a user