diff --git a/_maps/map_files/KiloStation/KiloStation.dmm b/_maps/map_files/KiloStation/KiloStation.dmm index 19efdd3740ef..32c858c0e518 100644 --- a/_maps/map_files/KiloStation/KiloStation.dmm +++ b/_maps/map_files/KiloStation/KiloStation.dmm @@ -6115,14 +6115,17 @@ /turf/open/floor/iron/checker, /area/station/service/hydroponics) "aJz" = ( -/obj/effect/spawner/random/entertainment/arcade{ +/obj/machinery/sleeper/cryo{ dir = 4 }, -/obj/effect/turf_decal/siding/wood{ +/obj/effect/turf_decal/stripes/line{ dir = 4 }, -/turf/open/floor/wood/parquet, -/area/station/commons/fitness/recreation/entertainment) +/obj/effect/turf_decal/siding/dark_green{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/commons/lounge) "aJA" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/cyan/visible/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/visible, @@ -11934,24 +11937,6 @@ /obj/structure/cable, /turf/open/floor/iron, /area/station/hallway/primary/starboard) -"bpo" = ( -/obj/effect/turf_decal/bot, -/obj/structure/rack, -/obj/item/storage/backpack/duffelbag/med{ - pixel_y = 5 - }, -/obj/item/reagent_containers/blood/random{ - pixel_x = 4; - pixel_y = 4 - }, -/obj/item/reagent_containers/blood/random, -/obj/effect/decal/cleanable/blood/old, -/obj/effect/decal/cleanable/cobweb/cobweb2, -/obj/effect/decal/cleanable/dirt, -/obj/structure/sign/warning/no_smoking/directional/north, -/obj/effect/spawner/random/medical/memeorgans, -/turf/open/floor/plating, -/area/station/maintenance/department/medical/central) "bpq" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/light/small/directional/north, @@ -11988,14 +11973,9 @@ /turf/open/floor/iron, /area/station/hallway/primary/starboard) "bpD" = ( -/obj/structure/girder, /obj/effect/decal/cleanable/dirt, -/obj/machinery/power/apc/auto_name/directional/south, -/obj/structure/cable, -/obj/effect/mapping_helpers/burnt_floor, -/obj/structure/grille/broken, -/turf/open/floor/plating, -/area/station/maintenance/department/medical/central) +/turf/open/floor/eighties, +/area/station/commons/locker) "bpF" = ( /obj/structure/sign/departments/cargo, /turf/closed/wall, @@ -12459,18 +12439,16 @@ /turf/open/floor/iron, /area/station/hallway/primary/central/fore) "bve" = ( -/obj/structure/table, -/obj/structure/sign/departments/medbay/alt/directional/east, -/obj/structure/sign/poster/official/help_others/directional/south, -/obj/item/storage/box/bodybags{ - pixel_y = 5 +/obj/effect/spawner/random/entertainment/arcade{ + dir = 8 }, -/obj/item/clothing/glasses/eyepatch{ - pixel_y = 4 +/obj/effect/turf_decal/siding/wood{ + dir = 8 }, -/obj/item/clothing/mask/surgical, -/turf/open/floor/plating, -/area/station/maintenance/department/medical/central) +/obj/item/radio/intercom/directional/east, +/obj/machinery/light/small/directional/south, +/turf/open/floor/wood/parquet, +/area/station/commons/locker) "bvi" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -15783,6 +15761,15 @@ /obj/structure/sign/warning/vacuum/external/directional/north, /turf/open/floor/plating, /area/station/construction/mining/aux_base) +"bTk" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/shutters{ + dir = 2; + id = "virologysurgery"; + name = "Virology Privacy Shutters" + }, +/turf/open/floor/plating, +/area/station/medical/virology) "bTl" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/sign/warning/vacuum/external, @@ -23405,7 +23392,7 @@ "cOn" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, -/area/station/commons/fitness/recreation/entertainment) +/area/station/commons/lounge) "cOp" = ( /obj/structure/sign/warning/docking, /turf/closed/wall/rust, @@ -23882,13 +23869,6 @@ /obj/effect/mapping_helpers/airlock/access/all/medical/surgery, /turf/open/floor/iron/dark, /area/station/medical/surgery/fore) -"cVO" = ( -/obj/structure/flora/grass/jungle/a/style_random, -/obj/structure/flora/bush/ferny/style_random, -/mob/living/carbon/human/species/monkey, -/obj/machinery/airalarm/directional/east, -/turf/open/floor/grass, -/area/station/medical/virology) "cWg" = ( /obj/effect/turf_decal/tile/neutral{ dir = 4 @@ -23924,18 +23904,17 @@ /turf/closed/wall, /area/station/commons/storage/primary) "cWQ" = ( -/obj/effect/turf_decal/siding/wood/corner{ +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 8 }, -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ +/obj/effect/turf_decal/tile/green/diagonal_centre, +/obj/effect/turf_decal/tile/green/diagonal_edge, +/obj/effect/turf_decal/tile/green/diagonal_centre, +/obj/effect/turf_decal/stripes/corner{ dir = 8 }, -/turf/open/floor/wood/parquet, -/area/station/commons/fitness/recreation/entertainment) +/turf/open/floor/iron/diagonal, +/area/station/commons/lounge) "cWW" = ( /obj/machinery/disposal/bin, /obj/effect/turf_decal/bot, @@ -27081,21 +27060,25 @@ }, /obj/item/storage/medkit/o2, /obj/machinery/light/small/directional/south, +/obj/item/storage/backpack/duffelbag/med{ + pixel_y = 5 + }, /turf/open/floor/plating, /area/station/maintenance/port/greater) "eeg" = ( -/obj/structure/table, /obj/machinery/firealarm/directional/east, -/obj/effect/turf_decal/siding/wood/corner{ - dir = 1 - }, /obj/machinery/light/small/directional/south, -/obj/item/ashtray{ - pixel_y = 6; - pixel_x = 4 +/obj/machinery/sleeper/cryo{ + dir = 8 }, -/turf/open/floor/wood/parquet, -/area/station/commons/fitness/recreation/entertainment) +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/siding/dark_green{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/station/commons/lounge) "eej" = ( /obj/structure/table, /obj/effect/turf_decal/tile/neutral{ @@ -27883,7 +27866,7 @@ /area/station/service/kitchen/coldroom) "epS" = ( /turf/closed/wall, -/area/station/commons/fitness/recreation/entertainment) +/area/station/commons/lounge) "eqk" = ( /turf/closed/wall/r_wall, /area/station/command/heads_quarters/cmo) @@ -28332,16 +28315,19 @@ /turf/open/floor/iron/dark, /area/station/service/hydroponics) "eyO" = ( -/obj/effect/spawner/random/entertainment/arcade{ +/obj/machinery/status_display/ai/directional/north, +/obj/machinery/light/small/directional/north, +/obj/machinery/sleeper/cryo{ dir = 4 }, -/obj/machinery/status_display/ai/directional/north, -/obj/effect/turf_decal/siding/wood{ +/obj/effect/turf_decal/stripes/line{ dir = 4 }, -/obj/machinery/light/small/directional/north, -/turf/open/floor/wood/parquet, -/area/station/commons/fitness/recreation/entertainment) +/obj/effect/turf_decal/siding/dark_green{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/commons/lounge) "ezd" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -29374,15 +29360,15 @@ /turf/open/floor/grass, /area/station/service/hydroponics) "eRj" = ( -/obj/effect/turf_decal/siding/wood, -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/turf/open/floor/wood/parquet, -/area/station/commons/fitness/recreation/entertainment) +/obj/effect/turf_decal/tile/green/diagonal_centre, +/obj/effect/turf_decal/tile/green/diagonal_edge, +/obj/effect/turf_decal/tile/green/diagonal_centre, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/iron/diagonal, +/area/station/commons/lounge) "eRk" = ( /obj/effect/turf_decal/bot, /obj/machinery/conveyor{ @@ -31599,6 +31585,16 @@ /obj/effect/mapping_helpers/airlock/access/all/engineering/general, /turf/open/floor/iron/dark, /area/station/engineering/supermatter/room) +"fBa" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/tile/green/diagonal_centre, +/obj/effect/turf_decal/tile/green/diagonal_edge, +/obj/effect/turf_decal/tile/green/diagonal_centre, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/turf/open/floor/iron/diagonal, +/area/station/commons/lounge) "fBf" = ( /obj/effect/turf_decal/siding/dark_green{ dir = 4 @@ -31621,16 +31617,17 @@ /turf/open/floor/iron/dark, /area/station/medical/virology) "fBx" = ( -/obj/effect/spawner/random/entertainment/arcade{ +/obj/machinery/status_display/evac/directional/north, +/obj/machinery/light/small/directional/north, +/obj/structure/closet/secure_closet/personal, +/obj/effect/turf_decal/stripes/line{ dir = 8 }, -/obj/machinery/status_display/evac/directional/north, -/obj/effect/turf_decal/siding/wood{ +/obj/effect/turf_decal/siding/dark_green{ dir = 8 }, -/obj/machinery/light/small/directional/north, -/turf/open/floor/wood/parquet, -/area/station/commons/fitness/recreation/entertainment) +/turf/open/floor/iron/white, +/area/station/commons/lounge) "fBA" = ( /obj/machinery/chem_master, /obj/effect/turf_decal/delivery, @@ -33210,17 +33207,12 @@ }, /obj/item/storage/wallet, /obj/item/razor, +/obj/item/ashtray{ + pixel_y = 6; + pixel_x = 4 + }, /turf/open/floor/iron, /area/station/commons/locker) -"geB" = ( -/obj/machinery/door/airlock/maintenance, -/obj/structure/cable, -/obj/effect/mapping_helpers/airlock/unres{ - dir = 8 - }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, -/turf/open/floor/iron/dark, -/area/station/maintenance/department/medical/central) "geJ" = ( /obj/effect/turf_decal/trimline/red/filled/line{ dir = 1 @@ -34005,6 +33997,9 @@ req_access = list("brig") }, /obj/machinery/computer/security/telescreen/isolation/directional/north, +/obj/machinery/sleeper/cryo{ + dir = 4 + }, /turf/open/floor/iron, /area/station/security/prison) "gtw" = ( @@ -35716,9 +35711,6 @@ /turf/open/floor/iron, /area/station/hallway/primary/central) "gVM" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, /obj/structure/cable, /turf/open/floor/iron, /area/station/hallway/primary/port) @@ -36639,6 +36631,16 @@ }, /turf/open/floor/iron, /area/station/cargo/sorting) +"hls" = ( +/obj/structure/cable, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/tile/green/diagonal_centre, +/obj/effect/turf_decal/tile/green/diagonal_edge, +/obj/effect/turf_decal/tile/green/diagonal_centre, +/obj/machinery/holopad, +/obj/effect/turf_decal/bot, +/turf/open/floor/iron/diagonal, +/area/station/commons/lounge) "hma" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/disposalpipe/segment, @@ -38554,7 +38556,7 @@ }, /obj/effect/turf_decal/delivery, /obj/structure/sign/poster/official/no_erp/directional/south, -/obj/machinery/vending/coffee, +/obj/machinery/vending/autodrobe/all_access, /turf/open/floor/iron/dark, /area/station/commons/locker) "hUp" = ( @@ -38572,16 +38574,15 @@ /turf/closed/wall/r_wall, /area/station/maintenance/department/bridge) "hUE" = ( -/obj/effect/turf_decal/siding/wood/corner, -/obj/effect/turf_decal/siding/wood{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 4 }, -/turf/open/floor/wood/parquet, -/area/station/commons/fitness/recreation/entertainment) +/obj/effect/turf_decal/tile/green/diagonal_centre, +/obj/effect/turf_decal/tile/green/diagonal_edge, +/obj/effect/turf_decal/tile/green/diagonal_centre, +/obj/effect/turf_decal/stripes/corner, +/turf/open/floor/iron/diagonal, +/area/station/commons/lounge) "hUK" = ( /obj/item/radio{ pixel_x = 5; @@ -39056,19 +39057,6 @@ }, /turf/open/floor/iron/dark, /area/station/medical/medbay/lobby) -"icM" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Virology Maintenance" - }, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/effect/mapping_helpers/airlock/access/all/medical/virology, -/obj/effect/mapping_helpers/airlock/cyclelink_helper_multi{ - cycle_id = "viromonkey" - }, -/turf/open/floor/iron/dark, -/area/station/maintenance/department/medical/central) "icT" = ( /obj/effect/turf_decal/tile/yellow{ dir = 4 @@ -39624,7 +39612,6 @@ /obj/item/storage/backpack/satchel, /obj/item/clothing/suit/hooded/wintercoat, /obj/item/clothing/shoes/winterboots, -/obj/machinery/airalarm/directional/north, /obj/effect/landmark/start/hangover/closet, /turf/open/floor/iron/dark, /area/station/commons/locker) @@ -41091,6 +41078,7 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 1 }, +/obj/machinery/airalarm/directional/east, /turf/open/floor/grass, /area/station/medical/virology) "iJw" = ( @@ -44428,13 +44416,16 @@ /turf/open/floor/plating, /area/station/maintenance/starboard/aft) "jRu" = ( -/obj/machinery/door/airlock/maintenance, -/obj/effect/mapping_helpers/airlock/unres{ - dir = 1 +/obj/machinery/door/airlock/public/glass{ + name = "Arcade" }, -/obj/effect/mapping_helpers/airlock/access/all/engineering/maintenance, +/obj/effect/turf_decal/siding/wood/corner{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, -/area/station/maintenance/department/medical/central) +/area/station/commons/locker) "jRw" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ dir = 8 @@ -45485,15 +45476,13 @@ /turf/open/floor/plating, /area/station/engineering/atmos/pumproom) "kkt" = ( -/obj/effect/turf_decal/stripes/corner{ +/obj/effect/turf_decal/siding/wood{ dir = 4 }, -/obj/structure/sign/warning/biohazard/directional/north, -/obj/effect/decal/cleanable/cobweb, /obj/effect/decal/cleanable/dirt, -/obj/effect/mapping_helpers/burnt_floor, -/turf/open/floor/plating, -/area/station/maintenance/department/medical/central) +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, +/turf/open/floor/iron/dark, +/area/station/commons/locker) "kkB" = ( /obj/structure/altar_of_gods, /obj/item/book/bible, @@ -46810,12 +46799,14 @@ /turf/open/floor/iron/dark, /area/station/medical/paramedic) "kDD" = ( -/obj/effect/decal/cleanable/blood/old, -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/obj/effect/mapping_helpers/burnt_floor, -/turf/open/floor/plating, -/area/station/maintenance/department/medical/central) +/obj/effect/spawner/random/entertainment/arcade{ + dir = 8 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/turf/open/floor/wood/parquet, +/area/station/commons/locker) "kEg" = ( /obj/structure/table, /obj/effect/turf_decal/tile/neutral{ @@ -47366,18 +47357,18 @@ /turf/open/floor/iron/dark, /area/station/commons/fitness/recreation) "kPO" = ( -/obj/structure/table, /obj/item/radio/intercom/directional/west, -/obj/effect/turf_decal/siding/wood/corner{ - dir = 4 - }, -/obj/machinery/cell_charger, -/obj/item/stock_parts/power_store/cell/high, -/obj/item/screwdriver, /obj/machinery/airalarm/directional/south, /obj/machinery/light/small/directional/south, -/turf/open/floor/wood/parquet, -/area/station/commons/fitness/recreation/entertainment) +/obj/structure/closet/secure_closet/personal, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/siding/dark_green{ + dir = 4 + }, +/turf/open/floor/iron/white, +/area/station/commons/lounge) "kPS" = ( /obj/structure/railing{ dir = 8 @@ -49372,10 +49363,12 @@ /turf/open/floor/engine/plasma, /area/station/engineering/atmos) "lwU" = ( -/obj/structure/chair/stool/directional/east, /obj/effect/decal/cleanable/dirt, -/turf/open/floor/eighties, -/area/station/commons/fitness/recreation/entertainment) +/obj/effect/turf_decal/tile/green/diagonal_centre, +/obj/effect/turf_decal/tile/green/diagonal_edge, +/obj/effect/turf_decal/tile/green/diagonal_centre, +/turf/open/floor/iron/diagonal, +/area/station/commons/lounge) "lxe" = ( /turf/closed/wall/r_wall, /area/station/security/prison) @@ -51422,8 +51415,8 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, -/obj/machinery/vending/autodrobe/all_access, /obj/effect/turf_decal/delivery, +/obj/machinery/vending/coffee, /turf/open/floor/iron/dark, /area/station/commons/locker) "mlu" = ( @@ -54566,14 +54559,10 @@ /turf/open/floor/iron, /area/station/security/brig) "nmo" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/structure/grille/broken, /obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/turf/open/floor/plating, -/area/station/maintenance/department/medical/central) +/obj/machinery/newscaster/directional/north, +/turf/open/floor/eighties, +/area/station/commons/locker) "nmp" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -56949,15 +56938,15 @@ /turf/open/floor/iron, /area/station/maintenance/disposal/incinerator) "ois" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Arcade" - }, /obj/machinery/door/firedoor, /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/door/airlock/public/glass{ + name = "Crew Storage" + }, /turf/open/floor/iron, -/area/station/commons/fitness/recreation/entertainment) +/area/station/commons/lounge) "oiw" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/mapping_helpers/broken_floor, @@ -59128,8 +59117,11 @@ "oUk" = ( /obj/structure/cable, /obj/effect/decal/cleanable/dirt, -/turf/open/floor/eighties, -/area/station/commons/fitness/recreation/entertainment) +/obj/effect/turf_decal/tile/green/diagonal_centre, +/obj/effect/turf_decal/tile/green/diagonal_edge, +/obj/effect/turf_decal/tile/green/diagonal_centre, +/turf/open/floor/iron/diagonal, +/area/station/commons/lounge) "oUl" = ( /obj/effect/spawner/random/vending/snackvend, /obj/effect/turf_decal/tile/neutral{ @@ -60556,9 +60548,6 @@ /turf/open/floor/plating, /area/station/maintenance/starboard/aft) "prF" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 8 - }, /obj/effect/turf_decal/tile/neutral{ dir = 1 }, @@ -61976,13 +61965,10 @@ /turf/open/floor/iron, /area/station/engineering/atmos) "pPd" = ( -/obj/effect/turf_decal/bot, -/obj/structure/bed/medical/emergency, -/obj/machinery/light/small/directional/south, -/obj/machinery/iv_drip, /obj/effect/decal/cleanable/dirt, -/turf/open/floor/plating, -/area/station/maintenance/department/medical/central) +/obj/structure/chair/stool/directional/east, +/turf/open/floor/eighties, +/area/station/commons/locker) "pPi" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/effect/turf_decal/tile/neutral{ @@ -62147,9 +62133,6 @@ /area/station/engineering/supermatter) "pRJ" = ( /obj/effect/turf_decal/stripes/line, -/obj/effect/turf_decal/stripes/corner{ - dir = 1 - }, /obj/effect/turf_decal/tile/neutral{ dir = 1 }, @@ -65596,20 +65579,6 @@ /obj/effect/turf_decal/stripes/corner, /turf/open/floor/iron/white, /area/station/medical/exam_room) -"rdj" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 1 - }, -/obj/structure/sink/kitchen/directional/south{ - desc = "A sink used for washing one's hands and face. It looks rusty and home-made"; - name = "old sink" - }, -/obj/effect/decal/cleanable/blood/old, -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/station/maintenance/department/medical/central) "rdu" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -69571,8 +69540,14 @@ "siP" = ( /obj/machinery/power/apc/auto_name/directional/north, /obj/structure/cable, -/turf/open/floor/eighties, -/area/station/commons/fitness/recreation/entertainment) +/obj/effect/turf_decal/tile/green/diagonal_centre, +/obj/effect/turf_decal/tile/green/diagonal_edge, +/obj/effect/turf_decal/tile/green/diagonal_centre, +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/turf/open/floor/iron/diagonal, +/area/station/commons/lounge) "sjJ" = ( /obj/effect/turf_decal/tile/neutral{ dir = 1 @@ -69633,6 +69608,8 @@ }, /obj/structure/table, /obj/machinery/newscaster/directional/north, +/obj/machinery/cell_charger, +/obj/item/stock_parts/power_store/cell/high, /turf/open/floor/iron/dark, /area/station/commons/locker) "sko" = ( @@ -71525,14 +71502,17 @@ /turf/open/floor/iron/dark, /area/station/engineering/atmos/storage/gas) "sVw" = ( -/obj/effect/spawner/random/entertainment/arcade{ +/obj/machinery/sleeper/cryo{ dir = 8 }, -/obj/effect/turf_decal/siding/wood{ +/obj/effect/turf_decal/stripes/line{ dir = 8 }, -/turf/open/floor/wood/parquet, -/area/station/commons/fitness/recreation/entertainment) +/obj/effect/turf_decal/siding/dark_green{ + dir = 8 + }, +/turf/open/floor/iron/white, +/area/station/commons/lounge) "sVE" = ( /obj/machinery/power/apc/auto_name/directional/north, /obj/structure/cable, @@ -73736,10 +73716,12 @@ /area/station/engineering/supermatter) "tJn" = ( /obj/machinery/newscaster/directional/north, -/obj/structure/chair/stool/directional/east, /obj/effect/decal/cleanable/dirt, -/turf/open/floor/eighties, -/area/station/commons/fitness/recreation/entertainment) +/obj/effect/turf_decal/tile/green/diagonal_centre, +/obj/effect/turf_decal/tile/green/diagonal_edge, +/obj/effect/turf_decal/tile/green/diagonal_centre, +/turf/open/floor/iron/diagonal, +/area/station/commons/lounge) "tJq" = ( /obj/effect/turf_decal/tile/neutral{ dir = 4 @@ -74892,11 +74874,6 @@ /obj/effect/landmark/start/hangover, /turf/open/floor/iron, /area/station/commons/fitness/recreation) -"ubj" = ( -/obj/effect/turf_decal/sand/plating, -/mob/living/basic/bot/cleanbot/medbay, -/turf/open/floor/plating/airless, -/area/space/nearstation) "ubn" = ( /obj/effect/turf_decal/tile/neutral, /obj/effect/turf_decal/stripes/line{ @@ -80783,6 +80760,16 @@ /obj/effect/landmark/event_spawn, /turf/open/floor/iron/showroomfloor, /area/station/security/lockers) +"weW" = ( +/obj/effect/spawner/random/entertainment/arcade{ + dir = 8 + }, +/obj/effect/turf_decal/siding/wood{ + dir = 8 + }, +/obj/machinery/light/small/directional/north, +/turf/open/floor/wood/parquet, +/area/station/commons/locker) "weX" = ( /obj/effect/turf_decal/tile/blue{ dir = 4 @@ -81778,6 +81765,10 @@ /obj/effect/mapping_helpers/broken_floor, /turf/open/floor/plating, /area/station/maintenance/starboard) +"wzo" = ( +/obj/structure/chair/stool/directional/east, +/turf/open/floor/eighties, +/area/station/commons/locker) "wzs" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, @@ -82585,10 +82576,14 @@ /turf/open/floor/iron/dark, /area/station/hallway/secondary/service) "wMe" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/mapping_helpers/broken_floor, -/turf/open/floor/plating, -/area/station/maintenance/department/medical/central) +/obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/siding/wood{ + dir = 4 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/turf/open/floor/iron/dark, +/area/station/commons/locker) "wMg" = ( /obj/effect/landmark/start/hangover, /obj/effect/turf_decal/tile/neutral{ @@ -83269,6 +83264,8 @@ /obj/effect/turf_decal/stripes/line{ dir = 1 }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /turf/open/floor/iron/dark, /area/station/commons/locker) "wWj" = ( @@ -83938,10 +83935,11 @@ /turf/closed/wall, /area/station/engineering/storage/tech) "xeI" = ( -/obj/structure/chair/stool/directional/west, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/eighties, -/area/station/commons/fitness/recreation/entertainment) +/obj/effect/turf_decal/tile/green/diagonal_centre, +/obj/effect/turf_decal/tile/green/diagonal_edge, +/obj/effect/turf_decal/tile/green/diagonal_centre, +/turf/open/floor/iron/diagonal, +/area/station/commons/lounge) "xfj" = ( /obj/effect/turf_decal/siding/dark_green{ dir = 1 @@ -85925,6 +85923,7 @@ }, /obj/machinery/light/small/directional/north, /obj/effect/landmark/start/hangover/closet, +/obj/machinery/airalarm/directional/north, /turf/open/floor/iron/dark, /area/station/commons/locker) "xKO" = ( @@ -104709,8 +104708,8 @@ asg asX beX cnJ -xeI -xeI +fBa +lwU xeI hUE cOn @@ -104967,7 +104966,7 @@ cnL edM amA siP -oUk +hls oUk eRj ois @@ -105998,7 +105997,7 @@ acm oxC acm coy -epS +hBN xKT fZM sRc @@ -109850,8 +109849,8 @@ aUV aTh aTi sOO -cVO -icM +bAN +bAN nmo bpD tNZ @@ -110107,11 +110106,11 @@ bAN aTi dKg lGj -aPf -bAN -rdj +bTk +wzo pPd -tNZ +pPd +xXg imG kcq uFB @@ -110365,7 +110364,7 @@ vhx bAN teb bAN -bpo +weW kDD bve wEY @@ -110622,9 +110621,9 @@ bpt wnU bpM boC -boC -geB -boC +tNZ +xXg +tNZ tNZ tNZ ePs @@ -114438,7 +114437,7 @@ aaa acm aaa aaa -ubj +cmU aUz aeu adH diff --git a/_maps/map_files/LimaStation/LimaStation.dmm b/_maps/map_files/LimaStation/LimaStation.dmm index 44b4fd0e9ca5..db4abb3d137a 100644 --- a/_maps/map_files/LimaStation/LimaStation.dmm +++ b/_maps/map_files/LimaStation/LimaStation.dmm @@ -132,6 +132,13 @@ /obj/structure/cable, /turf/open/floor/plating, /area/station/maintenance/port/fore) +"acU" = ( +/obj/effect/turf_decal/tile/neutral, +/obj/machinery/sleeper/cryo{ + dir = 8 + }, +/turf/open/floor/iron, +/area/station/security/prison) "adb" = ( /obj/machinery/firealarm/directional/south, /obj/machinery/vending/tool, @@ -1018,7 +1025,7 @@ }, /obj/machinery/power/apc/auto_name/directional/south, /obj/structure/cable, -/obj/effect/spawner/random/entertainment/arcade{ +/obj/machinery/sleeper/cryo{ dir = 8 }, /turf/open/floor/iron/freezer, @@ -3565,7 +3572,7 @@ dir = 8 }, /obj/machinery/airalarm/directional/south, -/obj/effect/spawner/random/entertainment/arcade{ +/obj/machinery/sleeper/cryo{ dir = 4 }, /turf/open/floor/iron/freezer, @@ -9774,14 +9781,14 @@ /turf/open/floor/wood/large, /area/station/maintenance/old_rec) "dmO" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ - dir = 1 - }, /obj/effect/turf_decal/tile/neutral, /obj/machinery/camera/directional/south{ c_tag = "Prison Wing - Foyer"; network = list("ss13", "prison") }, +/obj/machinery/sleeper/cryo{ + dir = 4 + }, /turf/open/floor/iron, /area/station/security/prison) "dng" = ( @@ -16354,6 +16361,9 @@ /obj/machinery/light/directional/south, /obj/effect/turf_decal/tile/neutral, /obj/structure/noticeboard/directional/south, +/obj/machinery/atmospherics/components/unary/vent_pump/on/layer4{ + dir = 1 + }, /turf/open/floor/iron, /area/station/security/prison) "fze" = ( @@ -36194,16 +36204,6 @@ /obj/effect/decal/cleanable/dirt, /turf/open/floor/catwalk_floor/iron_dark, /area/station/maintenance/port/lower) -"lOt" = ( -/obj/effect/turf_decal/siding/wideplating{ - dir = 1 - }, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/turf/open/floor/iron, -/area/station/security/prison) "lOB" = ( /obj/effect/turf_decal/tile/red{ dir = 4 @@ -37826,7 +37826,7 @@ /obj/effect/turf_decal/tile/green{ dir = 8 }, -/obj/effect/spawner/random/entertainment/arcade{ +/obj/machinery/sleeper/cryo{ dir = 4 }, /turf/open/floor/iron/freezer, @@ -52305,6 +52305,12 @@ }, /turf/open/floor/iron, /area/station/hallway/secondary/entry) +"qMm" = ( +/obj/machinery/duct, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, +/turf/open/floor/iron/checker, +/area/station/security/prison) "qMo" = ( /obj/effect/mapping_helpers/broken_floor, /obj/effect/decal/cleanable/dirt, @@ -71327,7 +71333,7 @@ }, /obj/structure/cable, /obj/machinery/newscaster/directional/east, -/obj/effect/spawner/random/entertainment/arcade{ +/obj/machinery/sleeper/cryo{ dir = 8 }, /turf/open/floor/iron/freezer, @@ -72785,6 +72791,7 @@ /obj/effect/turf_decal/tile/neutral{ dir = 4 }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /turf/open/floor/iron, /area/station/security/prison) "xon" = ( @@ -73587,7 +73594,7 @@ }, /obj/structure/cable, /obj/machinery/firealarm/directional/east, -/obj/effect/spawner/random/entertainment/arcade{ +/obj/machinery/sleeper/cryo{ dir = 8 }, /turf/open/floor/iron/freezer, @@ -94629,7 +94636,7 @@ iIy sJB sJB qQq -dzL +acU eyn cYc wOX @@ -95396,7 +95403,7 @@ riq vLL hrv xoh -lhT +qMm aRO aRO mFV @@ -95909,7 +95916,7 @@ bID nkV jzw aJs -lOt +iQf vis dzL dzL diff --git a/_maps/map_files/PubbyStation/PubbyStation.dmm b/_maps/map_files/PubbyStation/PubbyStation.dmm index 77c4563aeabb..c60b81cdd8bc 100644 --- a/_maps/map_files/PubbyStation/PubbyStation.dmm +++ b/_maps/map_files/PubbyStation/PubbyStation.dmm @@ -8865,7 +8865,7 @@ department = "Dormitories"; name = "Dorms Requests Console" }, -/obj/structure/tank_holder/extinguisher, +/obj/machinery/vending/snack/blue, /turf/open/floor/iron/corner{ dir = 1 }, @@ -34311,17 +34311,12 @@ /turf/open/floor/iron/edge, /area/station/security/brig) "emV" = ( -/obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4{ dir = 4 }, /obj/machinery/status_display/evac/directional/west, /turf/open/floor/iron, /area/station/commons/fitness/recreation) -"enI" = ( -/obj/machinery/vending/cola/red, -/turf/open/floor/iron/white/smooth_large, -/area/station/commons/fitness/recreation) "enO" = ( /obj/effect/turf_decal/stripes/corner{ dir = 4 @@ -39370,6 +39365,15 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, /turf/open/floor/iron/white/smooth_large, /area/station/medical/virology) +"ibu" = ( +/obj/effect/turf_decal/trimline/red/filled/line, +/obj/machinery/sleeper/cryo{ + dir = 8 + }, +/turf/open/floor/iron/dark/side{ + dir = 1 + }, +/area/station/security/prison) "ibw" = ( /obj/machinery/atmospherics/pipe/smart/simple/purple/visible{ dir = 4 @@ -43332,7 +43336,7 @@ /turf/open/floor/iron/smooth_half, /area/station/science/robotics/mechbay) "low" = ( -/obj/machinery/vending/snack/blue, +/obj/machinery/sleeper/cryo, /turf/open/floor/iron/white/smooth_large, /area/station/commons/fitness/recreation) "lpB" = ( @@ -43884,11 +43888,6 @@ /obj/item/wrench, /turf/open/floor/plating, /area/station/maintenance/department/science) -"lJM" = ( -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/turf/open/floor/iron, -/area/station/commons/fitness/recreation) "lJR" = ( /obj/effect/turf_decal/tile/yellow/half{ dir = 1 @@ -48105,10 +48104,6 @@ "oMN" = ( /turf/open/floor/iron/stairs/left, /area/station/service/abandoned_gambling_den) -"oNs" = ( -/obj/machinery/vending/cigarette, -/turf/open/floor/iron/white/smooth_large, -/area/station/commons/fitness/recreation) "oND" = ( /obj/machinery/meter, /obj/effect/decal/cleanable/dirt, @@ -56822,6 +56817,7 @@ /area/station/medical/medbay/central) "uFi" = ( /obj/item/radio/intercom/directional/east, +/obj/structure/tank_holder/extinguisher, /turf/open/floor/iron/corner{ dir = 8 }, @@ -59327,7 +59323,7 @@ /turf/open/floor/plating, /area/station/engineering/atmos) "wwE" = ( -/obj/structure/table, +/obj/machinery/vending/cola/red, /turf/open/floor/iron/edge{ dir = 4 }, @@ -60110,7 +60106,6 @@ "wRG" = ( /obj/structure/closet/lasertag/red, /obj/effect/turf_decal/tile/blue, -/obj/machinery/door/firedoor, /turf/open/floor/iron/white/corner{ dir = 4 }, @@ -84542,7 +84537,7 @@ aem nud iTv agd -agp +ibu ahp agM asA @@ -103322,10 +103317,10 @@ sFK sFK sFK aiS -enI +low fVJ lFK -lJM +lFK duC rrM pcg @@ -103579,7 +103574,7 @@ aiT aiS sFK aiS -oNs +low eHq wKP wRG diff --git a/code/__DEFINES/preferences.dm b/code/__DEFINES/preferences.dm index 69ac863865b8..e13ffc00e6cb 100644 --- a/code/__DEFINES/preferences.dm +++ b/code/__DEFINES/preferences.dm @@ -168,3 +168,7 @@ #define UPPER_LIP "Upper" #define MIDDLE_LIP "Middle" #define LOWER_LIP "Lower" + +// Latejoin Spawnpoints +#define SPAWNPOINT_CRYO "Cryogenic Storage" +#define SPAWNPOINT_ARRIVALS "Arrivals Shuttle" diff --git a/code/__HELPERS/mobs.dm b/code/__HELPERS/mobs.dm index 4080ba37bf94..85d256f815d6 100644 --- a/code/__HELPERS/mobs.dm +++ b/code/__HELPERS/mobs.dm @@ -184,21 +184,21 @@ GLOBAL_LIST_INIT(skin_tone_names, list( * * Checks that `user` does not move, change hands, get stunned, etc. for the * given `delay`. Returns `TRUE` on success or `FALSE` on failure. - * + * * @param {mob} user - The mob performing the action. - * + * * @param {number} delay - The time in deciseconds. Use the SECONDS define for readability. `1 SECONDS` is 10 deciseconds. - * + * * @param {atom} target - The target of the action. This is where the progressbar will display. - * + * * @param {flag} timed_action_flags - Flags to control the behavior of the timed action. - * + * * @param {boolean} progress - Whether to display a progress bar / cogbar. - * + * * @param {datum/callback} extra_checks - Additional checks to perform before the action is executed. - * + * * @param {string} interaction_key - The assoc key under which the do_after is capped, with max_interact_count being the cap. Interaction key will default to target if not set. - * + * * @param {number} max_interact_count - The maximum amount of interactions allowed. */ /proc/do_after(mob/user, delay, atom/target, timed_action_flags = NONE, progress = TRUE, datum/callback/extra_checks, interaction_key, max_interact_count = 1, hidden = FALSE) diff --git a/code/_onclick/hud/alert.dm b/code/_onclick/hud/alert.dm index c2f12a66e821..b7bdc2d957a6 100644 --- a/code/_onclick/hud/alert.dm +++ b/code/_onclick/hud/alert.dm @@ -113,6 +113,10 @@ /// Boolean. If TRUE, the Click() proc will attempt to Click() on the master first if there is a master. var/click_master = TRUE +/atom/movable/screen/alert/Initialize(mapload, datum/hud/hud_owner) + . = ..() + if(mouse_over_pointer == MOUSE_HAND_POINTER) + add_filter("clickglow", 2, outline_filter(color = COLOR_GOLD, size = 1)) /atom/movable/screen/alert/MouseEntered(location,control,params) . = ..() diff --git a/code/game/machinery/announcement_system.dm b/code/game/machinery/announcement_system.dm index 1700abb0af1a..861e1a321ccb 100644 --- a/code/game/machinery/announcement_system.dm +++ b/code/game/machinery/announcement_system.dm @@ -90,6 +90,8 @@ GLOBAL_LIST_EMPTY(announcement_systems) message = CompileText(newhead, user, rank) else if(message_type == "ARRIVALS_BROKEN") message = "The arrivals shuttle has been damaged. Docking for repairs..." + else if(message_type == "DESPAWN") + message = CompileText("%PERSON, %RANK, has entered cryogenic storage.", user, rank) broadcast(message, channels) diff --git a/code/game/machinery/sleepers.dm b/code/game/machinery/sleepers.dm index c6415bdd04a9..6c842761c9c5 100644 --- a/code/game/machinery/sleepers.dm +++ b/code/game/machinery/sleepers.dm @@ -24,6 +24,8 @@ ///Message sent when a user enters the machine. var/enter_message = span_boldnotice("You feel cool air surround you. You go numb as your senses turn inward.") + var/resist_time = 0 SECONDS + ///List of currently available chems. var/list/available_chems = list() ///Used when emagged to scramble which chem is used, eg: mutadone -> morphine @@ -62,6 +64,13 @@ update_appearance() reset_chem_buttons() +/obj/machinery/sleeper/on_set_panel_open(old_value) + . = ..() + if(panel_open) + set_machine_stat(machine_stat | MAINT) + else + set_machine_stat(machine_stat & ~MAINT) + /obj/machinery/sleeper/RefreshParts() . = ..() var/matterbin_rating @@ -72,7 +81,7 @@ available_chems.Cut() for(var/datum/stock_part/servo/servos in component_parts) - for(var/i in 1 to servos.tier) + for(var/i in 1 to min(servos.tier, length(possible_chems))) available_chems |= possible_chems[i] reset_chem_buttons() @@ -82,8 +91,15 @@ return ..() /obj/machinery/sleeper/container_resist_act(mob/living/user) - visible_message(span_notice("[occupant] emerges from [src]!"), - span_notice("You climb out of [src]!")) + if(resist_time > 0) + to_chat(user, span_notice("You pull at the release lever.")) + if(!do_after(user, resist_time, src)) + return + user.visible_message( + span_notice("[occupant] emerges from [src]!"), + span_notice("You climb out of [src]!"), + visible_message_flags = ALWAYS_SHOW_SELF_MESSAGE, + ) open_machine() /obj/machinery/sleeper/Exited(atom/movable/gone, direction) @@ -367,3 +383,178 @@ log_combat(user, occupant, "sprayed [chem] into", addition = "via [src]") return TRUE return ..() + +GLOBAL_LIST_INIT(cryo_sleepers, list()) + +#define IS_SPAWNING "spawning" + +/obj/machinery/sleeper/cryo + name = "cryogenic pod" + desc = "An enclosed machine designed to put subjects in a state of suspended animation for long-term storage." + icon = 'maplestation_modules/icons/obj/machines/sleeper.dmi' + icon_state = "cryopod" + base_icon_state = "cryopod" + // circuit = /obj/item/circuitboard/machine/sleeper/cryo + enter_message = span_boldnotice("You feel a cold chill as you enter the pod. \ + You feel your body go numb as you enter a state of suspended animation.") + possible_chems = null + state_open = FALSE + density = TRUE + resist_time = 0.5 SECONDS + + var/throw_alert = TRUE + +/obj/machinery/sleeper/cryo/Initialize(mapload) + . = ..() + AddElement(/datum/element/empprotection, EMP_PROTECT_ALL) + GLOB.cryo_sleepers += src + open_machine() + +/obj/machinery/sleeper/cryo/Destroy() + GLOB.cryo_sleepers -= src + return ..() + +/obj/machinery/sleeper/cryo/examine(mob/user) + . = ..() + if(isliving(occupant) && user != occupant) + var/mob/living/occupant_l = occupant + var/obj/item/card/id/their_id = occupant_l.get_idcard() + . += span_notice("Inside, you can see [occupant][their_id ? ", the [their_id.assignment]" : ""][HAS_TRAIT(occupant, TRAIT_KNOCKEDOUT) ? " - sound asleep" : ""].") + +/obj/machinery/sleeper/cryo/set_occupant(atom/movable/new_occupant) + var/mob/living/old_occupant = occupant + . = ..() + var/mob/living/new_occupant_l = new_occupant + var/skey = REF(src) + if(istype(old_occupant)) + old_occupant.remove_status_effect(/datum/status_effect/grouped/stasis, skey) + // REMOVE_TRAIT(old_occupant, TRAIT_KNOCKEDOUT, IS_SPAWNING) + // REMOVE_TRAIT(old_occupant, TRAIT_MUTE, skey) + REMOVE_TRAIT(old_occupant, TRAIT_BLOCK_HEADSET_USE, skey) + REMOVE_TRAIT(old_occupant, TRAIT_SOFTSPOKEN, skey) + UnregisterSignal(old_occupant, COMSIG_MOB_CLIENT_PRE_LIVING_MOVE) + if(throw_alert) + old_occupant.clear_alert(skey) + if(istype(new_occupant_l)) + new_occupant_l.apply_status_effect(/datum/status_effect/grouped/stasis, skey) + // ADD_TRAIT(new_occupant_l, TRAIT_MUTE, skey) + ADD_TRAIT(new_occupant_l, TRAIT_BLOCK_HEADSET_USE, skey) + ADD_TRAIT(new_occupant_l, TRAIT_SOFTSPOKEN, skey) + RegisterSignal(new_occupant_l, COMSIG_MOB_CLIENT_PRE_LIVING_MOVE, PROC_REF(early_move_check)) + if(throw_alert) + new_occupant_l.throw_alert(skey, /atom/movable/screen/alert/cryosleep) + +/obj/machinery/sleeper/cryo/proc/early_move_check(mob/living/mob_occupant, new_loc, direct) + SIGNAL_HANDLER + + if(mob_occupant.incapacitated(IGNORE_STASIS) || DOING_INTERACTION_WITH_TARGET(mob_occupant, src)) + return NONE + INVOKE_ASYNC(src, TYPE_PROC_REF(/atom, relaymove), mob_occupant, direct) + return COMSIG_MOB_CLIENT_BLOCK_PRE_LIVING_MOVE + +/obj/machinery/sleeper/cryo/close_machine(mob/user, density_to_set) + . = ..() + if(isliving(occupant)) + playsound(src, 'sound/effects/spray.ogg', 5, TRUE, frequency = 0.5) + +/obj/machinery/sleeper/cryo/close_machine(mob/user, density_to_set) + . = ..() + if(isliving(occupant)) + playsound(src, 'sound/machines/fan_stop.ogg', 50, TRUE) + +/obj/machinery/sleeper/cryo/JoinPlayerHere(mob/living/joining_mob, buckle) + if(occupant || !ishuman(joining_mob)) + return ..() + throw_alert = FALSE + if(state_open) + close_machine() + set_occupant(joining_mob) + joining_mob.forceMove(src) + ADD_TRAIT(joining_mob, TRAIT_KNOCKEDOUT, IS_SPAWNING) + addtimer(TRAIT_CALLBACK_REMOVE(joining_mob, TRAIT_KNOCKEDOUT, IS_SPAWNING), rand(8, 12) * 1 SECONDS) + throw_alert = TRUE + +/obj/machinery/sleeper/cryo/default_deconstruction_crowbar(obj/item/crowbar, ignore_panel = 0, custom_deconstruct = FALSE) + return FALSE + +/obj/machinery/sleeper/cryo/default_deconstruction_screwdriver(mob/living/user, icon_state, base_icon_state, obj/item/screwdriver) + return FALSE + +/obj/machinery/sleeper/cryo/default_change_direction_wrench(mob/living/user, obj/item/wrench) + return FALSE + +/obj/machinery/sleeper/cryo/open_machine(drop = TRUE, density_to_set = FALSE) + density_to_set = TRUE + return ..() + +/// Checks if this can generically be used as a latejoin spawnpoint +/obj/machinery/sleeper/cryo/proc/can_latejoin(datum/job/joining) + if(!isnull(occupant)) + return FALSE + if(istype(joining, /datum/job/prisoner)) + if(!istype(get_area(src), /area/station/security/prison)) + return FALSE + else + if(!istype(get_area(src), /area/station/commons)) + return FALSE + return TRUE + +/// Checks if the passed item should avoid deletion when being despawned +/obj/machinery/sleeper/cryo/proc/saveable_item(obj/item/save_me) + if(save_me.resistance_flags & INDESTRUCTIBLE) + return TRUE + if(GLOB.steal_item_handler.objectives_by_path[save_me.type]) + return TRUE + return FALSE + +/obj/machinery/sleeper/cryo/proc/despawn_occupant() + if(!isliving(occupant)) + return + var/drop_loc = drop_location() + var/mob/living/mob_occupant = occupant + + set_occupant(null) + mob_occupant.ghostize(FALSE) + + for(var/obj/item/save_me in mob_occupant.get_all_contents()) + if(saveable_item(save_me)) + mob_occupant.transferItemToLoc(save_me, drop_loc, force = TRUE, silent = TRUE) + + qdel(mob_occupant) + open_machine() + + var/datum/record/associated_record = find_record(mob_occupant.real_name) + var/obj/machinery/announcement_system/announcer = pick(GLOB.announcement_systems) + if(!QDELETED(associated_record) && !QDELETED(announcer)) + announcer.announce("DESPAWN", mob_occupant.name, associated_record.rank, list()) + + deadchat_broadcast( + " has entered cryogenic storage.", + "[mob_occupant.real_name] ([associated_record?.rank || "Unknown"])", + turf_target = get_turf(src), + message_type = DEADCHAT_ARRIVALRATTLE, + ) + +#undef IS_SPAWNING + +/atom/movable/screen/alert/cryosleep + name = "Cryosleep" + desc = "Click this button to despawn your character." + mouse_over_pointer = MOUSE_HAND_POINTER + icon_state = "cold" + +/atom/movable/screen/alert/cryosleep/Click(location, control, params) + . = ..() + if(!.) + return . + var/obj/machinery/sleeper/cryo/sleeper = owner.loc + if(!istype(sleeper)) + stack_trace("[type] was clicked by [usr] without being in a sleeper.") + return FALSE + + var/are_you_sure = tgui_alert(usr, "Are you sure you want to despawn your character?", "Despawn Character", list("Yes", "No"), 5 SECONDS) + if(are_you_sure != "Yes" || QDELETED(src) || QDELETED(sleeper) || sleeper.occupant != usr) + return FALSE + + sleeper.despawn_occupant() + return TRUE diff --git a/code/modules/jobs/job_types/_job.dm b/code/modules/jobs/job_types/_job.dm index b94ccc2f9730..2c0598b65654 100644 --- a/code/modules/jobs/job_types/_job.dm +++ b/code/modules/jobs/job_types/_job.dm @@ -516,9 +516,16 @@ log_mapping("Job [title] ([type]) couldn't find a round start spawn point.") /// Finds a valid latejoin spawn point, checking for events and special conditions. -/datum/job/proc/get_latejoin_spawn_point() +/datum/job/proc/get_latejoin_spawn_point(datum/preferences/prefs) if(length(GLOB.jobspawn_overrides[title])) //We're doing something special today. return pick(GLOB.jobspawn_overrides[title]) + if(prefs?.read_preference(/datum/preference/choiced/preferred_latejoin_spawn) == SPAWNPOINT_CRYO) + var/list/common_sleepers = list() + for(var/obj/machinery/sleeper/cryo/sleeper as anything in GLOB.cryo_sleepers) + if(sleeper.can_latejoin(src)) + common_sleepers += sleeper + if(length(common_sleepers)) + return pick(common_sleepers) if(length(SSjob.latejoin_trackers)) return pick(SSjob.latejoin_trackers) return SSjob.get_last_resort_spawn_points() diff --git a/code/modules/mob/dead/new_player/new_player.dm b/code/modules/mob/dead/new_player/new_player.dm index 582f119bb037..c501d79d67f2 100644 --- a/code/modules/mob/dead/new_player/new_player.dm +++ b/code/modules/mob/dead/new_player/new_player.dm @@ -178,7 +178,7 @@ return FALSE mind.late_joiner = TRUE - var/atom/destination = mind.assigned_role.get_latejoin_spawn_point() + var/atom/destination = mind.assigned_role.get_latejoin_spawn_point(client.prefs) if(!destination) CRASH("Failed to find a latejoin spawn point.") var/mob/living/character = create_character(destination) diff --git a/maplestation.dme b/maplestation.dme index d61fe738b457..ebd5f00edb2c 100644 --- a/maplestation.dme +++ b/maplestation.dme @@ -6397,6 +6397,7 @@ #include "maplestation_modules\code\modules\client\preferences\ready_anominity.dm" #include "maplestation_modules\code\modules\client\preferences\runechat_color.dm" #include "maplestation_modules\code\modules\client\preferences\sound_frequency.dm" +#include "maplestation_modules\code\modules\client\preferences\spawn_location.dm" #include "maplestation_modules\code\modules\client\preferences\toggle_radio.dm" #include "maplestation_modules\code\modules\client\preferences\toggle_speech.dm" #include "maplestation_modules\code\modules\client\preferences\species\lizard.dm" diff --git a/maplestation_modules/code/modules/client/preferences/height.dm b/maplestation_modules/code/modules/client/preferences/height.dm index 6df336f29f6a..e5d77e44fb1b 100644 --- a/maplestation_modules/code/modules/client/preferences/height.dm +++ b/maplestation_modules/code/modules/client/preferences/height.dm @@ -68,11 +68,7 @@ target.update_transform(resize_amount) /datum/preference/choiced/mob_size/is_accessible(datum/preferences/preferences) - if(!..(preferences)) - return FALSE - - var/datum/job/fav_job = preferences.get_highest_priority_job() - return !istype(fav_job, /datum/job/ai) && !istype(fav_job, /datum/job/cyborg) + return ..() && !has_silicon_prioritized(preferences) /datum/preference/choiced/mob_size/create_default_value(datum/preferences/preferences) return HEIGHT_NO_CHANGE @@ -118,11 +114,7 @@ target.set_mob_height(height_actual) /datum/preference/choiced/mob_height/is_accessible(datum/preferences/preferences) - if(!..(preferences)) - return FALSE - - var/datum/job/fav_job = preferences.get_highest_priority_job() - return !istype(fav_job, /datum/job/ai) && !istype(fav_job, /datum/job/cyborg) + return ..() && !has_silicon_prioritized(preferences) /datum/preference/choiced/mob_height/create_default_value(datum/preferences/preferences) return DEFAULT_HEIGHT @@ -158,3 +150,8 @@ return return ..() + +/datum/preference/proc/has_silicon_prioritized(datum/preferences/preferences) + // If you have a silicon job, don't show the height preference + var/datum/job/fav_job = preferences.get_highest_priority_job() + return istype(fav_job, /datum/job/ai) || istype(fav_job, /datum/job/cyborg) diff --git a/maplestation_modules/code/modules/client/preferences/spawn_location.dm b/maplestation_modules/code/modules/client/preferences/spawn_location.dm new file mode 100644 index 000000000000..3b1f7c0e8b75 --- /dev/null +++ b/maplestation_modules/code/modules/client/preferences/spawn_location.dm @@ -0,0 +1,20 @@ +/datum/preference/choiced/preferred_latejoin_spawn + savefile_key = "preferred_latejoin_spawn" + savefile_identifier = PREFERENCE_CHARACTER + category = PREFERENCE_CATEGORY_SECONDARY_FEATURES + can_randomize = FALSE + +/datum/preference/choiced/preferred_latejoin_spawn/create_default_value() + return SPAWNPOINT_ARRIVALS + +/datum/preference/choiced/preferred_latejoin_spawn/init_possible_values() + return list( + SPAWNPOINT_ARRIVALS, + SPAWNPOINT_CRYO, + ) + +/datum/preference/choiced/preferred_latejoin_spawn/apply_to_human(mob/living/carbon/human/target, value) + return + +/datum/preference/choiced/preferred_latejoin_spawn/is_accessible(datum/preferences/preferences) + return ..() && !has_silicon_prioritized(preferences) diff --git a/maplestation_modules/icons/obj/machines/sleeper.dmi b/maplestation_modules/icons/obj/machines/sleeper.dmi new file mode 100644 index 000000000000..27388313bf1e Binary files /dev/null and b/maplestation_modules/icons/obj/machines/sleeper.dmi differ diff --git a/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/character_preferences/_latejoin_spawn.tsx b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/character_preferences/_latejoin_spawn.tsx new file mode 100644 index 000000000000..920662e60b04 --- /dev/null +++ b/tgui/packages/tgui/interfaces/PreferencesMenu/preferences/features/character_preferences/_latejoin_spawn.tsx @@ -0,0 +1,11 @@ +import { FeatureChoiced } from '../base'; +import { FeatureDropdownInput } from '../dropdowns'; + +export const preferred_latejoin_spawn: FeatureChoiced = { + name: 'Latejoin Preference', + description: + 'Determines the method of arrivals when joining midround. \ + This indicates preference - it does not guarantee a specific spawn point, \ + particularly for maps which may not support all options.', + component: FeatureDropdownInput, +}; diff --git a/tgui/packages/tgui/interfaces/Sleeper.jsx b/tgui/packages/tgui/interfaces/Sleeper.jsx index dd8501f47d43..0be5e8baa405 100644 --- a/tgui/packages/tgui/interfaces/Sleeper.jsx +++ b/tgui/packages/tgui/interfaces/Sleeper.jsx @@ -91,32 +91,34 @@ export const Sleeper = (props) => { )} -
act('door')} - /> - } - > - {chems.map((chem) => ( -
+ {chems.length > 0 && ( +
act('door')} + /> + } + > + {chems.map((chem) => ( +
+ )} );