diff --git a/_maps/map_files/generic/CentCom.dmm b/_maps/map_files/generic/CentCom.dmm
index 7e095329af..6129d263fd 100644
--- a/_maps/map_files/generic/CentCom.dmm
+++ b/_maps/map_files/generic/CentCom.dmm
@@ -2108,10 +2108,6 @@
},
/turf/closed/indestructible/riveted,
/area/space)
-"fy" = (
-/obj/effect/turf_decal/delivery,
-/turf/open/floor/plasteel,
-/area/tdome/arena_source)
"fz" = (
/turf/open/floor/plasteel,
/area/tdome/arena_source)
@@ -4830,7 +4826,7 @@
pixel_x = 25;
specialfunctions = 4
},
-/turf/open/floor/wood,
+/turf/open/indestructible/hotelwood,
/area/centcom/holding)
"mb" = (
/obj/structure/table/reinforced,
@@ -6429,7 +6425,7 @@
/obj/machinery/light{
dir = 8
},
-/turf/open/floor/wood,
+/turf/open/indestructible/hotelwood,
/area/centcom/holding)
"oX" = (
/obj/structure/bookcase/random,
@@ -6800,7 +6796,7 @@
/obj/effect/turf_decal/tile/green{
dir = 8
},
-/turf/open/floor/plasteel/white,
+/turf/open/indestructible/hotelwood,
/area/centcom/holding)
"pH" = (
/obj/structure/table/wood,
@@ -7316,7 +7312,7 @@
color = "#596479";
dir = 1
},
-/turf/open/floor/wood,
+/turf/open/indestructible/hotelwood,
/area/centcom/holding)
"qQ" = (
/obj/machinery/door/airlock/centcom{
@@ -8702,7 +8698,7 @@
damtype = "stamina";
force = 30
},
-/turf/open/floor/wood,
+/turf/open/indestructible/hotelwood,
/area/centcom/holding)
"tX" = (
/obj/machinery/door/airlock{
@@ -8717,7 +8713,7 @@
/area/centcom/supplypod)
"tZ" = (
/obj/structure/chair/wood/normal,
-/turf/open/floor/wood,
+/turf/open/indestructible/hotelwood,
/area/centcom/holding)
"uc" = (
/obj/effect/turf_decal/tile/green{
@@ -9330,7 +9326,7 @@
/obj/effect/turf_decal/tile/green{
dir = 8
},
-/turf/open/floor/plasteel/white,
+/turf/open/indestructible/hotelwood,
/area/centcom/holding)
"vt" = (
/obj/structure/rack,
@@ -9338,7 +9334,7 @@
damtype = "stamina";
force = 30
},
-/turf/open/floor/wood,
+/turf/open/indestructible/hotelwood,
/area/centcom/holding)
"vu" = (
/obj/structure/chair/stool,
@@ -10363,7 +10359,7 @@
/obj/machinery/light{
dir = 8
},
-/turf/open/floor/grass,
+/turf/open/indestructible/hotelwood,
/area/centcom/holding)
"yg" = (
/obj/structure/chair,
@@ -10611,7 +10607,7 @@
/obj/structure/table/wood/bar,
/obj/structure/safe/floor,
/obj/item/seeds/cherry/bomb,
-/turf/open/floor/wood,
+/turf/open/indestructible/hotelwood,
/area/centcom/holding)
"yN" = (
/obj/structure/table/reinforced,
@@ -11058,6 +11054,9 @@
},
/turf/open/floor/plating,
/area/syndicate_mothership)
+"zT" = (
+/turf/open/indestructible/boss/air,
+/area/centcom/holding)
"zU" = (
/obj/structure/closet/crate/freezer,
/turf/open/floor/plasteel/cafeteria,
@@ -11342,7 +11341,7 @@
pixel_y = 25;
specialfunctions = 4
},
-/turf/open/floor/wood,
+/turf/open/indestructible/hotelwood,
/area/centcom/holding)
"AD" = (
/obj/machinery/door/airlock/centcom{
@@ -11583,12 +11582,12 @@
/obj/effect/turf_decal/tile/green{
dir = 8
},
-/turf/open/floor/plasteel/white,
+/turf/open/indestructible/hotelwood,
/area/centcom/holding)
"Bs" = (
/obj/structure/table/wood,
/obj/machinery/computer/libraryconsole/bookmanagement,
-/turf/open/floor/wood,
+/turf/open/indestructible/hotelwood,
/area/centcom/holding)
"Bu" = (
/obj/structure/table/wood,
@@ -12465,11 +12464,11 @@
/obj/machinery/vr_sleeper{
dir = 4
},
-/turf/open/floor/wood,
+/turf/open/indestructible/hotelwood,
/area/centcom/holding)
"CV" = (
/obj/structure/chair/stool,
-/turf/open/floor/wood,
+/turf/open/indestructible/hotelwood,
/area/centcom/holding)
"CX" = (
/obj/structure/closet/secure_closet/security,
@@ -12663,12 +12662,16 @@
/obj/machinery/vr_sleeper{
dir = 8
},
-/turf/open/floor/wood,
+/turf/open/indestructible/hotelwood,
/area/centcom/holding)
"Dk" = (
/obj/structure/table,
/turf/open/floor/plasteel/cafeteria,
/area/syndicate_mothership)
+"Dl" = (
+/obj/structure/mineral_door/paperframe,
+/turf/open/indestructible/hotelwood,
+/area/centcom/holding)
"Do" = (
/obj/effect/turf_decal/tile/bar,
/obj/effect/turf_decal/tile/bar{
@@ -13475,21 +13478,21 @@
/obj/structure/table/wood,
/obj/item/instrument/piano_synth,
/obj/item/instrument/guitar,
-/turf/open/floor/carpet/black,
+/turf/open/indestructible/hotelwood,
/area/centcom/holding)
"Fb" = (
/obj/structure/piano,
/obj/machinery/light{
dir = 8
},
-/turf/open/floor/carpet/black,
+/turf/open/indestructible/hotelwood,
/area/centcom/holding)
"Fc" = (
/obj/structure/sign/barsign{
pixel_y = 32
},
/obj/structure/chair/stool,
-/turf/open/floor/carpet/black,
+/turf/open/indestructible/hotelwood,
/area/centcom/holding)
"Fg" = (
/obj/structure/flora/grass/brown,
@@ -13506,11 +13509,11 @@
/obj/machinery/light{
dir = 1
},
-/turf/open/floor/wood,
+/turf/open/indestructible/hotelwood,
/area/centcom/holding)
"Fj" = (
/obj/machinery/vending/cigarette,
-/turf/open/floor/wood,
+/turf/open/indestructible/hotelwood,
/area/centcom/holding)
"Fm" = (
/obj/machinery/shower{
@@ -13798,7 +13801,7 @@
/obj/structure/window/reinforced{
dir = 4
},
-/turf/open/floor/wood,
+/turf/open/indestructible/hotelwood,
/area/centcom/holding)
"FX" = (
/turf/open/floor/plasteel/stairs,
@@ -13972,7 +13975,7 @@
/obj/machinery/light{
dir = 1
},
-/turf/open/floor/wood,
+/turf/open/indestructible/hotelwood,
/area/centcom/holding)
"Gu" = (
/obj/machinery/door/airlock/silver{
@@ -14345,7 +14348,7 @@
/obj/structure/chair/wood/wings{
dir = 8
},
-/turf/open/floor/wood,
+/turf/open/indestructible/hotelwood,
/area/centcom/holding)
"Ha" = (
/obj/effect/turf_decal/tile/brown{
@@ -14431,7 +14434,7 @@
/obj/machinery/light{
dir = 4
},
-/turf/open/floor/grass,
+/turf/open/indestructible/hotelwood,
/area/centcom/holding)
"Hn" = (
/obj/structure/sink{
@@ -14653,7 +14656,7 @@
/area/space)
"HH" = (
/obj/machinery/light,
-/turf/open/floor/wood,
+/turf/open/indestructible/hotelwood,
/area/centcom/holding)
"HI" = (
/obj/structure/sink{
@@ -14777,7 +14780,7 @@
/obj/effect/turf_decal/tile/green{
dir = 8
},
-/turf/open/floor/plasteel/white,
+/turf/open/indestructible/hotelwood,
/area/centcom/holding)
"HR" = (
/obj/structure/sink{
@@ -15117,10 +15120,6 @@
},
/turf/open/floor/plasteel,
/area/tdome/tdomeobserve)
-"Is" = (
-/obj/effect/turf_decal/delivery,
-/turf/open/floor/plasteel,
-/area/tdome/arena)
"It" = (
/turf/open/floor/plasteel,
/area/tdome/arena)
@@ -16220,7 +16219,7 @@
/obj/structure/window/reinforced{
dir = 1
},
-/turf/open/floor/wood,
+/turf/open/indestructible/hotelwood,
/area/centcom/holding)
"KU" = (
/obj/structure/closet/emcloset,
@@ -16577,7 +16576,7 @@
/obj/effect/mob_spawn/human/ghostcafe{
dir = 8
},
-/turf/open/floor/wood,
+/turf/open/indestructible/hotelwood,
/area/centcom/holding)
"Mt" = (
/obj/structure/window/reinforced{
@@ -16586,7 +16585,7 @@
/obj/structure/window/reinforced{
dir = 1
},
-/turf/open/floor/carpet/black,
+/turf/open/indestructible/boss/air,
/area/centcom/holding)
"Mu" = (
/obj/machinery/light{
@@ -16602,7 +16601,7 @@
/obj/effect/turf_decal/tile/green{
dir = 8
},
-/turf/open/floor/plasteel/white,
+/turf/open/indestructible/hotelwood,
/area/centcom/holding)
"Mv" = (
/obj/structure/table/reinforced,
@@ -16618,7 +16617,7 @@
damtype = "stamina";
force = 30
},
-/turf/open/floor/wood,
+/turf/open/indestructible/hotelwood,
/area/centcom/holding)
"My" = (
/obj/docking_port/stationary{
@@ -16687,11 +16686,11 @@
/obj/machinery/light/small{
dir = 1
},
-/turf/open/floor/wood,
+/turf/open/indestructible/hotelwood,
/area/centcom/holding)
"MM" = (
/obj/structure/window/reinforced,
-/turf/open/floor/carpet/black,
+/turf/open/indestructible/boss/air,
/area/centcom/holding)
"MP" = (
/obj/machinery/light{
@@ -16703,7 +16702,7 @@
/obj/machinery/light{
dir = 4
},
-/turf/open/floor/carpet/black,
+/turf/open/indestructible/hotelwood,
/area/centcom/holding)
"MS" = (
/obj/structure/table,
@@ -16750,7 +16749,7 @@
/obj/structure/window/reinforced{
dir = 1
},
-/turf/open/floor/carpet/black,
+/turf/open/indestructible/boss/air,
/area/centcom/holding)
"Nk" = (
/obj/machinery/door/airlock/centcom{
@@ -16772,7 +16771,7 @@
/obj/item/storage/fancy/candle_box,
/obj/item/storage/fancy/candle_box,
/obj/item/storage/box/lights/mixed,
-/turf/open/floor/wood,
+/turf/open/indestructible/hotelwood,
/area/centcom/holding)
"Nn" = (
/obj/structure/closet/secure_closet/hydroponics{
@@ -16788,7 +16787,7 @@
/obj/effect/turf_decal/tile/green{
dir = 8
},
-/turf/open/floor/plasteel/white,
+/turf/open/indestructible/hotelwood,
/area/centcom/holding)
"Nu" = (
/turf/open/floor/wood,
@@ -16806,7 +16805,7 @@
/obj/machinery/light{
dir = 1
},
-/turf/open/floor/wood,
+/turf/open/indestructible/hotelwood,
/area/centcom/holding)
"Nz" = (
/obj/effect/turf_decal/tile/brown{
@@ -16826,7 +16825,7 @@
/obj/item/reagent_containers/medspray/synthflesh,
/obj/item/reagent_containers/medspray/synthflesh,
/obj/item/reagent_containers/medspray/synthflesh,
-/turf/open/floor/wood,
+/turf/open/indestructible/hotelwood,
/area/centcom/holding)
"NF" = (
/obj/structure/ladder/unbreakable/binary,
@@ -16858,13 +16857,13 @@
/obj/effect/turf_decal/tile/green{
dir = 8
},
-/turf/open/floor/plasteel/white,
+/turf/open/indestructible/hotelwood,
/area/centcom/holding)
"NT" = (
/obj/structure/window/paperframe{
CanAtmosPass = 0
},
-/turf/open/floor/wood,
+/turf/open/indestructible/hotelwood,
/area/centcom/holding)
"NU" = (
/obj/machinery/door/airlock/centcom{
@@ -16934,7 +16933,7 @@
/area/centcom/control)
"Ol" = (
/obj/structure/table/wood/fancy,
-/turf/open/floor/wood,
+/turf/open/indestructible/hotelwood,
/area/centcom/holding)
"Om" = (
/obj/effect/turf_decal/tile/brown,
@@ -17003,7 +17002,7 @@
/obj/machinery/light{
dir = 1
},
-/turf/open/floor/wood,
+/turf/open/indestructible/hotelwood,
/area/centcom/holding)
"OH" = (
/obj/effect/spawner/structure/window/reinforced,
@@ -17013,7 +17012,7 @@
/obj/structure/mineral_door/paperframe{
name = "Dojo"
},
-/turf/open/floor/wood,
+/turf/open/indestructible/hotelwood,
/area/centcom/holding)
"OM" = (
/obj/machinery/light{
@@ -17036,7 +17035,7 @@
/obj/item/clothing/under/kilt,
/obj/structure/closet,
/obj/item/clothing/under/roman,
-/turf/open/floor/wood,
+/turf/open/indestructible/hotelwood,
/area/centcom/holding)
"OV" = (
/obj/machinery/light{
@@ -17060,14 +17059,14 @@
/area/centcom/supplypod)
"Ph" = (
/obj/structure/closet/crate/bin,
-/turf/open/floor/wood,
+/turf/open/indestructible/hotelwood,
/area/centcom/holding)
"Pl" = (
/obj/structure/window/reinforced,
/obj/structure/window/reinforced{
dir = 4
},
-/turf/open/floor/carpet/black,
+/turf/open/indestructible/boss/air,
/area/centcom/holding)
"Pn" = (
/turf/closed/indestructible/fakedoor{
@@ -17078,7 +17077,7 @@
/obj/structure/window/reinforced{
dir = 8
},
-/turf/open/floor/carpet/black,
+/turf/open/indestructible/boss/air,
/area/centcom/holding)
"Pq" = (
/obj/structure/urinal{
@@ -17119,7 +17118,7 @@
/obj/structure/window/reinforced{
dir = 4
},
-/turf/open/floor/carpet/black,
+/turf/open/indestructible/boss/air,
/area/centcom/holding)
"PD" = (
/turf/open/floor/plasteel/cafeteria,
@@ -17131,7 +17130,7 @@
/obj/machinery/light{
dir = 4
},
-/turf/open/floor/wood,
+/turf/open/indestructible/hotelwood,
/area/centcom/holding)
"PG" = (
/obj/structure/table/reinforced,
@@ -17150,7 +17149,7 @@
/obj/effect/turf_decal/tile/green{
dir = 8
},
-/turf/open/floor/plasteel/white,
+/turf/open/indestructible/hotelwood,
/area/centcom/holding)
"PJ" = (
/obj/effect/turf_decal/stripes/line{
@@ -17160,7 +17159,7 @@
/area/syndicate_mothership)
"PL" = (
/obj/machinery/autolathe,
-/turf/open/floor/wood,
+/turf/open/indestructible/hotelwood,
/area/centcom/holding)
"PM" = (
/obj/machinery/vending/clothing{
@@ -17180,7 +17179,7 @@
/obj/effect/turf_decal/tile/green{
dir = 8
},
-/turf/open/floor/plasteel/white,
+/turf/open/indestructible/hotelwood,
/area/centcom/holding)
"PP" = (
/obj/machinery/door/airlock/external{
@@ -17214,7 +17213,7 @@
/area/holodeck/rec_center/firingrange)
"PX" = (
/obj/machinery/computer/arcade/battle,
-/turf/open/floor/wood,
+/turf/open/indestructible/hotelwood,
/area/centcom/holding)
"PY" = (
/obj/effect/turf_decal/tile/green{
@@ -17227,7 +17226,7 @@
/obj/effect/turf_decal/tile/green{
dir = 8
},
-/turf/open/floor/plasteel/white,
+/turf/open/indestructible/hotelwood,
/area/centcom/holding)
"PZ" = (
/obj/effect/turf_decal/delivery,
@@ -17256,7 +17255,7 @@
/obj/structure/flora/ausbushes/ppflowers,
/obj/structure/flora/ausbushes/palebush,
/obj/structure/window/reinforced/fulltile,
-/turf/open/floor/grass,
+/turf/open/indestructible/hotelwood,
/area/centcom/holding)
"Qm" = (
/obj/singularity/wizard/mapped,
@@ -17311,7 +17310,7 @@
pixel_y = -25;
specialfunctions = 4
},
-/turf/open/floor/wood,
+/turf/open/indestructible/hotelwood,
/area/centcom/holding)
"QH" = (
/obj/machinery/chem_master/condimaster{
@@ -17329,7 +17328,7 @@
/obj/effect/turf_decal/tile/green{
dir = 8
},
-/turf/open/floor/plasteel/white,
+/turf/open/indestructible/hotelwood,
/area/centcom/holding)
"QI" = (
/obj/structure/toilet{
@@ -17346,7 +17345,7 @@
/obj/structure/flora/ausbushes/ppflowers,
/obj/structure/flora/ausbushes/palebush,
/obj/structure/window/reinforced/fulltile,
-/turf/open/floor/grass,
+/turf/open/indestructible/hotelwood,
/area/centcom/holding)
"QN" = (
/obj/machinery/light{
@@ -17401,7 +17400,7 @@
/area/holodeck/rec_center/basketball)
"Ra" = (
/obj/machinery/door/window/eastright,
-/turf/open/floor/carpet/black,
+/turf/open/indestructible/boss/air,
/area/centcom/holding)
"Rb" = (
/obj/effect/turf_decal/stripes/corner{
@@ -17421,7 +17420,7 @@
/obj/effect/turf_decal/tile/green{
dir = 8
},
-/turf/open/floor/plasteel/white,
+/turf/open/indestructible/hotelwood,
/area/centcom/holding)
"Re" = (
/obj/structure/mineral_door/paperframe,
@@ -17441,7 +17440,7 @@
/obj/structure/chair/wood/normal{
dir = 1
},
-/turf/open/floor/wood,
+/turf/open/indestructible/hotelwood,
/area/centcom/holding)
"Rj" = (
/obj/machinery/vending/hydroseeds,
@@ -17455,7 +17454,7 @@
/obj/effect/turf_decal/tile/green{
dir = 8
},
-/turf/open/floor/plasteel/white,
+/turf/open/indestructible/hotelwood,
/area/centcom/holding)
"Rl" = (
/obj/structure/mirror{
@@ -17469,7 +17468,7 @@
/obj/structure/chair/wood/wings{
dir = 3
},
-/turf/open/floor/wood,
+/turf/open/indestructible/hotelwood,
/area/centcom/holding)
"Ro" = (
/obj/structure/closet{
@@ -17488,14 +17487,14 @@
/obj/item/tank/internals/plasmaman/belt/full,
/obj/item/tank/internals/plasmaman/belt/full,
/obj/item/tank/internals/plasmaman/belt/full,
-/turf/open/floor/wood,
+/turf/open/indestructible/hotelwood,
/area/centcom/holding)
"Rq" = (
/obj/machinery/light{
dir = 1;
light_color = "#cee5d2"
},
-/turf/open/floor/wood,
+/turf/open/indestructible/hotelwood,
/area/centcom/holding)
"Ru" = (
/obj/structure/fireplace,
@@ -17542,7 +17541,7 @@
pixel_x = -3;
pixel_y = 3
},
-/turf/open/floor/wood,
+/turf/open/indestructible/hotelwood,
/area/centcom/holding)
"RR" = (
/turf/open/floor/plasteel,
@@ -17556,13 +17555,13 @@
damtype = "stamina";
force = 30
},
-/turf/open/floor/wood,
+/turf/open/indestructible/hotelwood,
/area/centcom/holding)
"RX" = (
/obj/structure/chair/comfy/brown{
color = "#596479"
},
-/turf/open/floor/wood,
+/turf/open/indestructible/hotelwood,
/area/centcom/holding)
"RZ" = (
/obj/effect/turf_decal/tile/bar,
@@ -17582,7 +17581,7 @@
/turf/open/floor/plasteel/dark,
/area/syndicate_mothership)
"Sd" = (
-/turf/open/floor/carpet/black,
+/turf/open/indestructible/hotelwood,
/area/centcom/holding)
"Sf" = (
/obj/structure/chair{
@@ -17616,7 +17615,7 @@
/obj/machinery/defibrillator_mount/loaded{
pixel_y = 28
},
-/turf/open/floor/wood,
+/turf/open/indestructible/hotelwood,
/area/centcom/holding)
"Sw" = (
/obj/machinery/hydroponics/constructable,
@@ -17633,7 +17632,7 @@
/obj/effect/turf_decal/tile/green{
dir = 8
},
-/turf/open/floor/plasteel/white,
+/turf/open/indestructible/hotelwood,
/area/centcom/holding)
"Sy" = (
/obj/effect/turf_decal/tile/brown{
@@ -17715,7 +17714,7 @@
/obj/item/wallframe/newscaster,
/obj/item/paper_bin,
/obj/item/pen/fountain,
-/turf/open/floor/wood,
+/turf/open/indestructible/hotelwood,
/area/centcom/holding)
"SV" = (
/obj/effect/turf_decal/tile/bar,
@@ -17737,11 +17736,11 @@
/obj/effect/turf_decal/tile/green{
dir = 8
},
-/turf/open/floor/plasteel/white,
+/turf/open/indestructible/hotelwood,
/area/centcom/holding)
"SY" = (
/obj/structure/table/wood,
-/turf/open/floor/wood,
+/turf/open/indestructible/hotelwood,
/area/centcom/holding)
"SZ" = (
/obj/machinery/door/airlock/wood{
@@ -17752,7 +17751,7 @@
/area/centcom/holding)
"Tb" = (
/obj/structure/closet/crate/freezer/blood,
-/turf/open/floor/wood,
+/turf/open/indestructible/hotelwood,
/area/centcom/holding)
"Tc" = (
/obj/machinery/button/door{
@@ -17762,7 +17761,7 @@
pixel_y = -25;
specialfunctions = 4
},
-/turf/open/floor/wood,
+/turf/open/indestructible/hotelwood,
/area/centcom/holding)
"Tj" = (
/obj/effect/turf_decal/tile/bar,
@@ -17777,7 +17776,7 @@
/obj/item/candle/infinite{
pixel_y = 6
},
-/turf/open/floor/wood,
+/turf/open/indestructible/hotelwood,
/area/centcom/holding)
"To" = (
/turf/open/indestructible/airblock,
@@ -17788,7 +17787,7 @@
/obj/item/stack/sheet/metal/fifty,
/obj/item/storage/toolbox/mechanical,
/obj/item/multitool,
-/turf/open/floor/wood,
+/turf/open/indestructible/hotelwood,
/area/centcom/holding)
"Tr" = (
/obj/structure/closet/chefcloset,
@@ -17800,7 +17799,7 @@
/obj/structure/flora/ausbushes/ppflowers,
/obj/structure/flora/ausbushes/palebush,
/obj/structure/window/reinforced/fulltile,
-/turf/open/floor/grass,
+/turf/open/indestructible/hotelwood,
/area/centcom/holding)
"Tw" = (
/obj/structure/closet{
@@ -17817,7 +17816,7 @@
/obj/item/clothing/head/helmet/space/plasmaman,
/obj/item/clothing/head/helmet/space/plasmaman,
/obj/item/clothing/head/helmet/space/plasmaman,
-/turf/open/floor/wood,
+/turf/open/indestructible/hotelwood,
/area/centcom/holding)
"Tz" = (
/obj/effect/light_emitter,
@@ -17847,7 +17846,7 @@
/obj/structure/mirror{
pixel_y = 28
},
-/turf/open/floor/wood,
+/turf/open/indestructible/hotelwood,
/area/centcom/holding)
"TM" = (
/mob/living/simple_animal/bot/medbot{
@@ -17856,7 +17855,7 @@
radio_key = null;
stationary_mode = 1
},
-/turf/open/floor/wood,
+/turf/open/indestructible/hotelwood,
/area/centcom/holding)
"TO" = (
/obj/effect/turf_decal/tile/bar,
@@ -17876,11 +17875,11 @@
/area/syndicate_mothership)
"Ud" = (
/obj/effect/landmark/holding_facility,
-/turf/open/floor/wood,
+/turf/open/indestructible/hotelwood,
/area/centcom/holding)
"Uf" = (
/obj/structure/closet/secure_closet,
-/turf/open/floor/wood,
+/turf/open/indestructible/hotelwood,
/area/centcom/holding)
"Ug" = (
/obj/machinery/door/poddoor/shuttledock{
@@ -17899,7 +17898,7 @@
damtype = "stamina";
force = 30
},
-/turf/open/floor/wood,
+/turf/open/indestructible/hotelwood,
/area/centcom/holding)
"Uj" = (
/obj/machinery/door/airlock/centcom{
@@ -17934,7 +17933,7 @@
/obj/effect/turf_decal/tile/green{
dir = 8
},
-/turf/open/floor/plasteel/white,
+/turf/open/indestructible/hotelwood,
/area/centcom/holding)
"Un" = (
/obj/machinery/door/airlock/centcom{
@@ -17978,11 +17977,11 @@
desc = "Swipe your ID on the closet to claim it. First come first serve, this one is wooden and fancy. Store your stuff here.";
name = "Personal ID-Locked Closet"
},
-/turf/open/floor/wood,
+/turf/open/indestructible/hotelwood,
/area/centcom/holding)
"UE" = (
/obj/structure/chair/stool/bar,
-/turf/open/floor/wood,
+/turf/open/indestructible/hotelwood,
/area/centcom/holding)
"UG" = (
/obj/structure/flora/tree/pine,
@@ -18027,11 +18026,11 @@
/obj/structure/chair/wood/wings{
dir = 1
},
-/turf/open/floor/wood,
+/turf/open/indestructible/hotelwood,
/area/centcom/holding)
"UV" = (
/obj/machinery/computer/arcade,
-/turf/open/floor/wood,
+/turf/open/indestructible/hotelwood,
/area/centcom/holding)
"UW" = (
/obj/effect/turf_decal/tile/brown{
@@ -18115,7 +18114,7 @@
/obj/structure/flora/ausbushes/palebush,
/obj/structure/window/reinforced/fulltile,
/obj/machinery/light,
-/turf/open/floor/grass,
+/turf/open/indestructible/hotelwood,
/area/centcom/holding)
"Vv" = (
/obj/structure/table,
@@ -18165,7 +18164,7 @@
damtype = "stamina";
force = 30
},
-/turf/open/floor/wood,
+/turf/open/indestructible/hotelwood,
/area/centcom/holding)
"VO" = (
/turf/closed/indestructible/riveted,
@@ -18201,7 +18200,7 @@
/area/space)
"Wb" = (
/obj/machinery/door/window/westleft,
-/turf/open/floor/carpet/black,
+/turf/open/indestructible/boss/air,
/area/centcom/holding)
"Wc" = (
/obj/machinery/door/airlock/centcom{
@@ -18233,6 +18232,10 @@
},
/turf/open/floor/plating,
/area/syndicate_mothership)
+"Wl" = (
+/obj/machinery/door/airlock/wood,
+/turf/open/indestructible/hotelwood,
+/area/centcom/holding)
"Wr" = (
/turf/open/floor/plasteel/dark,
/area/centcom/supplypod)
@@ -18243,6 +18246,12 @@
},
/turf/open/floor/wood,
/area/centcom/holding)
+"Ww" = (
+/obj/structure/bodycontainer/crematorium{
+ dir = 4
+ },
+/turf/open/indestructible/hotelwood,
+/area/centcom/holding)
"WC" = (
/obj/structure/table/reinforced,
/obj/item/pen,
@@ -18283,7 +18292,7 @@
/obj/structure/extinguisher_cabinet{
pixel_y = 32
},
-/turf/open/floor/wood,
+/turf/open/indestructible/hotelwood,
/area/centcom/holding)
"WN" = (
/obj/machinery/button/door{
@@ -18293,7 +18302,7 @@
pixel_y = 25;
specialfunctions = 4
},
-/turf/open/floor/wood,
+/turf/open/indestructible/hotelwood,
/area/centcom/holding)
"WO" = (
/obj/effect/turf_decal/tile/brown,
@@ -18337,11 +18346,11 @@
/obj/structure/flora/ausbushes/fullgrass,
/obj/structure/flora/ausbushes/palebush,
/obj/structure/window/reinforced/fulltile,
-/turf/open/floor/grass,
+/turf/open/indestructible/hotelwood,
/area/centcom/holding)
"Xe" = (
/obj/machinery/vending/autodrobe,
-/turf/open/floor/wood,
+/turf/open/indestructible/hotelwood,
/area/centcom/holding)
"Xg" = (
/obj/effect/turf_decal/tile/red{
@@ -18355,9 +18364,6 @@
},
/turf/open/floor/holofloor,
/area/holodeck/rec_center/basketball)
-"Xk" = (
-/turf/open/floor/wood,
-/area/centcom/holding)
"Xl" = (
/obj/structure/closet/syndicate/personal,
/obj/effect/turf_decal/stripes/line{
@@ -18368,7 +18374,7 @@
"Xn" = (
/obj/structure/bed,
/obj/item/bedsheet/random,
-/turf/open/floor/wood,
+/turf/open/indestructible/hotelwood,
/area/centcom/holding)
"Xo" = (
/obj/machinery/vending/dinnerware,
@@ -18393,7 +18399,7 @@
/area/centcom/supplypod/loading/four)
"Xs" = (
/obj/structure/chair/comfy/brown,
-/turf/open/floor/wood,
+/turf/open/indestructible/hotelwood,
/area/centcom/holding)
"Xt" = (
/obj/machinery/door/airlock/centcom{
@@ -18416,13 +18422,7 @@
/area/holodeck/rec_center/firingrange)
"Xw" = (
/obj/structure/table/wood/fancy/royalblue,
-/turf/open/floor/wood,
-/area/centcom/holding)
-"Xx" = (
-/obj/machinery/light{
- dir = 4
- },
-/turf/open/floor/wood,
+/turf/open/indestructible/hotelwood,
/area/centcom/holding)
"Xy" = (
/obj/machinery/door/airlock/external{
@@ -18444,7 +18444,7 @@
pixel_y = 25;
specialfunctions = 4
},
-/turf/open/floor/wood,
+/turf/open/indestructible/hotelwood,
/area/centcom/holding)
"XE" = (
/obj/machinery/door/airlock/centcom{
@@ -18461,12 +18461,12 @@
/obj/structure/chair/wood/wings{
dir = 4
},
-/turf/open/floor/wood,
+/turf/open/indestructible/hotelwood,
/area/centcom/holding)
"XT" = (
/obj/structure/table/wood,
/obj/item/reagent_containers/food/snacks/sashimi,
-/turf/open/floor/wood,
+/turf/open/indestructible/hotelwood,
/area/centcom/holding)
"XU" = (
/obj/machinery/computer/secure_data{
@@ -18477,7 +18477,7 @@
"XX" = (
/obj/structure/table/wood,
/obj/item/reagent_containers/food/drinks/bottle/sake,
-/turf/open/floor/wood,
+/turf/open/indestructible/hotelwood,
/area/centcom/holding)
"XY" = (
/obj/machinery/door/poddoor/shutters{
@@ -18494,7 +18494,7 @@
pixel_y = -25;
specialfunctions = 4
},
-/turf/open/floor/wood,
+/turf/open/indestructible/hotelwood,
/area/centcom/holding)
"Yc" = (
/obj/effect/turf_decal/stripes/line,
@@ -18512,12 +18512,12 @@
/obj/machinery/defibrillator_mount/loaded{
pixel_y = 28
},
-/turf/open/floor/wood,
+/turf/open/indestructible/hotelwood,
/area/centcom/holding)
"Yf" = (
/obj/structure/table/wood,
/obj/item/reagent_containers/food/snacks/chawanmushi,
-/turf/open/floor/wood,
+/turf/open/indestructible/hotelwood,
/area/centcom/holding)
"Yg" = (
/obj/effect/turf_decal/stripes/corner{
@@ -18529,7 +18529,7 @@
/obj/structure/extinguisher_cabinet{
pixel_x = -27
},
-/turf/open/floor/wood,
+/turf/open/indestructible/hotelwood,
/area/centcom/holding)
"Yi" = (
/obj/structure/dresser,
@@ -18537,13 +18537,13 @@
/area/syndicate_mothership)
"Ym" = (
/obj/machinery/computer/arcade/orion_trail,
-/turf/open/floor/wood,
+/turf/open/indestructible/hotelwood,
/area/centcom/holding)
"Yo" = (
/obj/machinery/light{
dir = 8
},
-/turf/open/floor/wood,
+/turf/open/indestructible/hotelwood,
/area/centcom/holding)
"Ys" = (
/obj/structure/table/reinforced,
@@ -18585,7 +18585,7 @@
/area/centcom/holding)
"YL" = (
/obj/machinery/vending/clothing,
-/turf/open/floor/wood,
+/turf/open/indestructible/hotelwood,
/area/centcom/holding)
"YN" = (
/obj/structure/window/reinforced{
@@ -18598,7 +18598,7 @@
/obj/structure/chair/comfy/brown{
dir = 1
},
-/turf/open/floor/wood,
+/turf/open/indestructible/hotelwood,
/area/centcom/holding)
"YQ" = (
/obj/structure/table,
@@ -18609,7 +18609,7 @@
/obj/structure/window/reinforced{
dir = 1
},
-/turf/open/floor/carpet/black,
+/turf/open/indestructible/boss/air,
/area/centcom/holding)
"YV" = (
/obj/machinery/light{
@@ -18620,10 +18620,7 @@
damtype = "stamina";
force = 30
},
-/turf/open/floor/wood,
-/area/centcom/holding)
-"YW" = (
-/turf/open/floor/plating,
+/turf/open/indestructible/hotelwood,
/area/centcom/holding)
"Za" = (
/obj/machinery/door/airlock/wood{
@@ -18638,7 +18635,7 @@
/obj/item/twohanded/required/kirbyplants{
icon_state = "plant-10"
},
-/turf/open/floor/wood,
+/turf/open/indestructible/hotelwood,
/area/centcom/holding)
"Zi" = (
/turf/open/floor/plasteel,
@@ -18677,7 +18674,7 @@
radio_key = null;
stationary_mode = 1
},
-/turf/open/floor/wood,
+/turf/open/indestructible/hotelwood,
/area/centcom/holding)
"Zz" = (
/obj/effect/landmark/start/nukeop_leader,
@@ -18749,7 +18746,7 @@
/obj/structure/window/reinforced{
dir = 8
},
-/turf/open/floor/carpet/black,
+/turf/open/indestructible/boss/air,
/area/centcom/holding)
"ZV" = (
/obj/effect/turf_decal/tile/brown,
@@ -43132,13 +43129,13 @@ Rm
Tn
UT
yd
-Xk
-Xk
+Sd
+Sd
XM
NT
UV
CV
-Xk
+Sd
NT
CT
oV
@@ -43148,15 +43145,15 @@ CT
oV
CT
Nd
-Xk
-Xk
-Xk
+Sd
+Ww
+Sd
Nd
aa
Nd
Uf
-Xk
-Xk
+Sd
+Sd
Nd
aa
aa
@@ -43385,35 +43382,35 @@ Pq
ZW
ZW
Za
-Xk
-Xk
-Xk
+Sd
+Sd
+Sd
Tu
-Xk
-Xk
+Sd
+Sd
Tn
NT
RQ
-Xk
-Xk
+Sd
+Sd
NT
-Xk
-Xk
-Xk
-Xk
-Xk
-Xk
-Xk
+Sd
+Sd
+Sd
+Sd
+Sd
+Sd
+Sd
Nd
Gs
-Xk
+Sd
HH
Nd
aa
Nd
MJ
-Xk
-YW
+Sd
+Sd
Nd
aa
aa
@@ -43642,35 +43639,35 @@ Pa
ZW
ZW
Nd
-Xk
-Xk
-Xk
-Xk
-Xk
-Xk
+Sd
+Sd
+Sd
+Sd
+Sd
+Sd
GY
NT
UV
CV
-Xk
+Sd
NT
Dj
PF
Dj
-Xk
+Sd
Dj
PF
Dj
Nd
-Xk
-Xk
-Xk
+Sd
+Sd
+Sd
Nd
aa
Nd
ma
-YW
-Xk
+Sd
+Sd
Nd
aa
aa
@@ -43899,17 +43896,17 @@ SB
ZW
Nw
Nd
-Xk
-Xk
-Xk
+Sd
+Sd
+Sd
Ph
-Xk
+Sd
Tu
Vu
Nd
Gs
-Xk
-Xk
+Sd
+Sd
Nd
Nd
Nd
@@ -44156,34 +44153,34 @@ Nd
Nd
Nd
Nd
-Xk
-Xk
+Sd
+Sd
XM
QL
-Xk
-Xk
+Sd
+Sd
XM
NT
PX
CV
-Xk
+Sd
NT
-Xk
+Sd
Yo
-Xk
-Xk
-Xk
+Sd
+Sd
+Sd
Yo
-Xk
+Sd
Nd
-Xk
-Xk
+Sd
+Sd
Yo
-Xk
-Xk
+Sd
+Sd
Yo
-Xk
-Xk
+Sd
+Sd
WE
Nd
aa
@@ -44409,38 +44406,38 @@ Nd
Nd
py
Nd
-Xk
+Sd
Yo
-Xk
-XL
-Xk
-Xk
+Sd
+Wl
+Sd
+Sd
Tn
Tu
-Xk
-Xk
+Sd
+Sd
Tn
NT
Zh
-Xk
-Xk
-Re
-Xk
-Xk
-Xk
-Xk
-Xk
-Xk
-Xk
+Sd
+Sd
+Dl
+Sd
+Sd
+Sd
+Sd
+Sd
+Sd
+Sd
Qu
-Xk
-Xk
-Xk
-Xk
-Xk
-Xk
-Xk
-Xk
+Sd
+Sd
+Sd
+Sd
+Sd
+Sd
+Sd
+Sd
Zu
Nd
aa
@@ -44659,45 +44656,45 @@ aa
aa
Nd
PL
-Xk
+Sd
Yo
-Xk
-Xk
-Xk
-Xk
+Sd
+Sd
+Sd
+Sd
Yh
-Xk
+Sd
Nd
Nd
Nd
Gs
-Xk
+Sd
GY
Tu
-Xk
-Xk
+Sd
+Sd
GY
NT
Ym
CV
-Xk
+Sd
NT
-Xk
-Xx
-Xk
-Xk
-Xk
-Xx
-Xk
+Sd
+MR
+Sd
+Sd
+Sd
+MR
+Sd
Nd
-Xk
-Xk
-Xk
-Xk
-Xk
-Xk
-Xk
-Xk
+Sd
+Sd
+Sd
+Sd
+Sd
+Sd
+Sd
+Sd
PM
Nd
aa
@@ -44916,7 +44913,7 @@ aa
aa
Nd
Tq
-Xk
+Sd
MG
YN
Nd
@@ -44927,17 +44924,17 @@ Nd
Nd
Fa
KT
-Xk
-Xk
-Xk
-Xk
-Xk
-Xk
+Sd
+Sd
+Sd
+Sd
+Sd
+Sd
HH
Nd
-Xk
-Xk
-Xk
+Sd
+Sd
+Sd
Nd
Nd
Nd
@@ -45172,8 +45169,8 @@ aa
aa
aa
Nd
-Xk
-Xk
+Sd
+Sd
Rh
Mm
Nd
@@ -45184,17 +45181,17 @@ Nd
Fb
Sd
KT
-Xk
-Xk
+Sd
+Sd
Sd
Sd
Sd
Sd
Sd
Re
-Xk
-Xk
-Xk
+Sd
+Sd
+Sd
NT
vt
YV
@@ -45207,8 +45204,8 @@ UD
tZ
SY
Nd
-Xk
-Xk
+Sd
+Sd
Nd
SY
Ri
@@ -45429,8 +45426,8 @@ aa
aa
aa
Nd
-Xk
-Xk
+Sd
+Sd
Rh
ZT
Nd
@@ -45441,8 +45438,8 @@ Nd
Fc
Sd
KT
-Xk
-Xk
+Sd
+Sd
Sd
Sd
Sd
@@ -45451,24 +45448,24 @@ Sd
Nd
Gs
Zx
-Xk
+Sd
OL
-Xk
-Xk
-Xk
-Xk
-Xk
-Xk
+Sd
+Sd
+Sd
+Sd
+Sd
+Sd
Nd
Gs
-Xk
-Xk
+Sd
+Sd
lS
-Xk
-Xk
+Sd
+Sd
RP
-Xk
-Xk
+Sd
+Sd
HH
Nd
aa
@@ -45698,34 +45695,34 @@ Nd
MR
Sd
FW
-Xk
-Xk
+Sd
+Sd
Sd
Sd
Sd
Sd
Sd
Re
-Xk
-Xk
-Xk
+Sd
+Sd
+Sd
NT
So
XM
-Xk
+Sd
XM
XM
-Xk
+Sd
Nd
Xn
-Xk
+Sd
Ya
Nd
-Xk
-Xk
+Sd
+Sd
Nd
XD
-Xk
+Sd
Xn
Nd
aa
@@ -45944,9 +45941,9 @@ aa
aa
Nd
yM
-Xk
+Sd
Yo
-Xk
+Sd
Nd
SG
Fh
@@ -45955,12 +45952,12 @@ Nd
Nd
Sd
FX
-Xk
-Xk
-Xk
-Xk
-Xk
-Xk
+Sd
+Sd
+Sd
+Sd
+Sd
+Sd
HH
Nd
WM
@@ -45972,14 +45969,14 @@ Po
Wb
Po
ZU
-Xk
+Sd
Nd
Nd
Nd
Nd
Nd
-Xk
-Xk
+Sd
+Sd
Nd
Nd
Nd
@@ -46201,9 +46198,9 @@ aa
aa
Nd
OG
-Xk
-Xk
-Xk
+Sd
+Sd
+Sd
Nd
zX
Fh
@@ -46213,30 +46210,30 @@ Nd
Nd
Nd
Gs
-Xk
+Sd
XM
Tu
-Xk
-Xk
+Sd
+Sd
XM
NT
-Xk
+Sd
Ud
Ud
NT
YU
-Sd
-Sd
-Sd
+zT
+zT
+zT
MM
-Xk
+Sd
Nd
UD
tZ
SY
Nd
-Xk
-Xk
+Sd
+Sd
Nd
SY
Ri
@@ -46458,9 +46455,9 @@ aa
aa
Nd
TK
-Xk
-Xk
-Xk
+Sd
+Sd
+Sd
Nd
QA
Fh
@@ -46469,12 +46466,12 @@ ED
Yo
Yf
UE
-Xk
-Xk
+Sd
+Sd
Tn
Xd
-Xk
-Xk
+Sd
+Sd
Tn
NT
Ro
@@ -46482,21 +46479,21 @@ Ud
Ud
NT
YU
-Sd
-Sd
-Sd
+zT
+zT
+zT
MM
TM
Nd
Gs
-Xk
-Xk
+Sd
+Sd
uh
-Xk
-Xk
+Sd
+Sd
zW
-Xk
-Xk
+Sd
+Sd
HH
Nd
aa
@@ -46715,23 +46712,23 @@ aa
aa
Nd
YL
-Xk
-Xk
-Xk
+Sd
+Sd
+Sd
Nd
Xo
Fh
Fh
py
-Xk
+Sd
SY
UE
-Xk
-Xk
+Sd
+Sd
GY
Tu
-Xk
-Xk
+Sd
+Sd
GY
NT
Tw
@@ -46739,21 +46736,21 @@ Ud
Ud
NT
YU
-Sd
-Sd
-Sd
+zT
+zT
+zT
MM
-Xk
+Sd
Nd
Xn
-Xk
+Sd
Tc
Nd
-Xk
-Xk
+Sd
+Sd
Nd
AC
-Xk
+Sd
Xn
Nd
aa
@@ -46972,22 +46969,22 @@ aa
aa
Nd
Xe
-Xk
-Xk
-Xk
+Sd
+Sd
+Sd
Nd
TB
Fh
Fh
BV
-Xk
+Sd
XT
UE
-Xk
-Xk
-Xk
+Sd
+Sd
+Sd
Ph
-Xk
+Sd
Qk
Vu
Nd
@@ -47000,7 +46997,7 @@ PA
Ra
PA
Pl
-Xk
+Sd
Nd
Nd
Nd
@@ -47229,42 +47226,42 @@ aa
aa
Nd
Ny
-Xk
-Xk
-Xk
+Sd
+Sd
+Sd
Nd
Vz
Fh
YJ
QT
-Xk
+Sd
SY
UE
-Xk
-Xk
-Xk
-Xk
-Xk
-Xk
+Sd
+Sd
+Sd
+Sd
+Sd
+Sd
XM
NT
-Xk
-Xk
-Xk
+Sd
+Sd
+Sd
NT
Ye
GY
-Xk
+Sd
GY
GY
-Xk
+Sd
Nd
Xs
Ol
YO
Nd
-Xk
-Xk
+Sd
+Sd
Nd
RX
Xw
@@ -47487,44 +47484,44 @@ aa
Nd
Bs
Ri
-Xk
-Xk
+Sd
+Sd
XL
Fh
Fh
Fh
XL
-Xk
+Sd
XX
UE
-Xk
-Xk
-Xk
+Sd
+Sd
+Sd
Tu
-Xk
-Xk
+Sd
+Sd
Tn
NT
-Xk
-Xk
-Xk
+Sd
+Sd
+Sd
OL
-Xk
-Xk
-Xk
-Xk
-Xk
-Xk
+Sd
+Sd
+Sd
+Sd
+Sd
+Sd
Nd
Gs
-Xk
-Xk
+Sd
+Sd
SZ
-Xk
-Xk
+Sd
+Sd
Ws
-Xk
-Xk
+Sd
+Sd
HH
Nd
aa
@@ -47743,8 +47740,8 @@ aa
aa
Nd
SU
-Xk
-Xx
+Sd
+MR
Nm
Nd
SN
@@ -47758,13 +47755,13 @@ Fi
Tn
UT
Hm
-Xk
-Xk
+Sd
+Sd
GY
NT
-Xk
+Sd
Ms
-Xk
+Sd
NT
vt
Mx
@@ -47777,8 +47774,8 @@ Ru
Of
QF
Nd
-Xk
-Xk
+Sd
+Sd
Nd
WN
Ur
@@ -48032,12 +48029,12 @@ Nd
Nd
Kf
WV
-Xk
+Sd
Nd
Nd
Nd
Nd
-Xk
+Sd
zY
Rv
Nd
@@ -60356,14 +60353,14 @@ GM
HW
HW
Il
-Is
+IF
IE
IX
Jh
Jh
Js
IE
-Is
+IF
JI
JP
JZ
@@ -63954,14 +63951,14 @@ GM
HW
HW
Il
-Is
+IF
IJ
IY
Jk
Jk
Jt
IJ
-Is
+IF
JI
JP
Kc
@@ -78178,14 +78175,14 @@ fa
fn
fr
fx
-fy
+fF
fE
fL
fN
fN
fS
fE
-fy
+fF
ab
aa
aa
@@ -81776,14 +81773,14 @@ dA
dA
dA
fx
-fy
+fF
fJ
fM
fQ
fQ
fT
fJ
-fy
+fF
ab
aa
aa
diff --git a/code/__HELPERS/game.dm b/code/__HELPERS/game.dm
index 222002f512..65c7145d8f 100644
--- a/code/__HELPERS/game.dm
+++ b/code/__HELPERS/game.dm
@@ -444,12 +444,8 @@
candidates -= M
/proc/pollGhostCandidates(Question, jobbanType, datum/game_mode/gametypeCheck, be_special_flag = 0, poll_time = 300, ignore_category = null, flashwindow = TRUE)
- var/list/candidates = list()
-
- for(var/mob/dead/observer/G in GLOB.player_list)
- if(G.can_reenter_round(TRUE))
- candidates += G
-
+ var/datum/element/ghost_role_eligibility/eligibility = SSdcs.GetElement(/datum/element/ghost_role_eligibility)
+ var/list/candidates = eligibility.get_all_ghost_role_eligible()
return pollCandidates(Question, jobbanType, gametypeCheck, be_special_flag, poll_time, ignore_category, flashwindow, candidates)
/proc/pollCandidates(Question, jobbanType, datum/game_mode/gametypeCheck, be_special_flag = 0, poll_time = 300, ignore_category = null, flashwindow = TRUE, list/group = null)
diff --git a/code/_globalvars/misc.dm b/code/_globalvars/misc.dm
index af31e2b5a5..ec3593ee9d 100644
--- a/code/_globalvars/misc.dm
+++ b/code/_globalvars/misc.dm
@@ -23,6 +23,8 @@ GLOBAL_VAR_INIT(bsa_unlock, FALSE) //BSA unlocked by head ID swipes
GLOBAL_LIST_EMPTY(player_details) // ckey -> /datum/player_details
+GLOBAL_LIST_EMPTY(clientless_round_timeouts) // ckey -> time that ckey can rejoin round
+
// All religion stuff
GLOBAL_VAR(religion)
GLOBAL_VAR(deity)
diff --git a/code/datums/action.dm b/code/datums/action.dm
index 77aa729eb1..cb56c26b91 100644
--- a/code/datums/action.dm
+++ b/code/datums/action.dm
@@ -141,6 +141,17 @@
current_button.add_overlay(mutable_appearance(icon_icon, button_icon_state))
current_button.button_icon_state = button_icon_state
+/datum/action/ghost
+ icon_icon = 'icons/mob/mob.dmi'
+ button_icon_state = "ghost"
+ name = "Ghostize"
+ desc = "Turn into a ghost and freely come back to your body."
+
+/datum/action/ghost/Trigger()
+ if(!..())
+ return 0
+ var/mob/M = target
+ M.ghostize(1)
//Presets for item actions
/datum/action/item_action
diff --git a/code/datums/elements/_element.dm b/code/datums/elements/_element.dm
index 8f9b97db22..17e2b12232 100644
--- a/code/datums/elements/_element.dm
+++ b/code/datums/elements/_element.dm
@@ -11,7 +11,7 @@
if(type == /datum/element)
return ELEMENT_INCOMPATIBLE
if(element_flags & ELEMENT_DETACH)
- RegisterSignal(target, COMSIG_PARENT_QDELETING, .proc/Detach)
+ RegisterSignal(target, COMSIG_PARENT_QDELETING, .proc/Detach, override = TRUE)
/datum/element/proc/Detach(datum/source, force)
UnregisterSignal(source, COMSIG_PARENT_QDELETING)
@@ -36,4 +36,4 @@
*/
/datum/proc/RemoveElement(eletype, ...)
var/datum/element/ele = SSdcs.GetElement(arglist(args))
- ele.Detach(src)
\ No newline at end of file
+ ele.Detach(src)
diff --git a/code/datums/elements/ghost_role_eligibility.dm b/code/datums/elements/ghost_role_eligibility.dm
new file mode 100644
index 0000000000..8ecb579bc8
--- /dev/null
+++ b/code/datums/elements/ghost_role_eligibility.dm
@@ -0,0 +1,54 @@
+/datum/element/ghost_role_eligibility
+ element_flags = ELEMENT_DETACH
+ var/list/timeouts = list()
+ var/list/mob/eligible_mobs = list()
+
+/datum/element/ghost_role_eligibility/Attach(datum/target,penalize = FALSE)
+ . = ..()
+ if(!ismob(target))
+ return ELEMENT_INCOMPATIBLE
+ var/mob/M = target
+ if(!(M in eligible_mobs))
+ eligible_mobs += M
+ if(penalize) //penalizing them from making a ghost role / midround antag comeback right away.
+ var/penalty = CONFIG_GET(number/suicide_reenter_round_timer) MINUTES
+ var/roundstart_quit_limit = CONFIG_GET(number/roundstart_suicide_time_limit) MINUTES
+ if(world.time < roundstart_quit_limit) //add up the time difference to their antag rolling penalty if they quit before half a (ingame) hour even passed.
+ penalty += roundstart_quit_limit - world.time
+ if(penalty)
+ penalty += world.realtime
+ if(penalty - SSshuttle.realtimeofstart > SSshuttle.auto_call + SSshuttle.emergencyCallTime + SSshuttle.emergencyDockTime + SSshuttle.emergencyEscapeTime)
+ penalty = CANT_REENTER_ROUND
+ if(!(M.ckey in timeouts))
+ timeouts += M.ckey
+ timeouts[M.ckey] = 0
+ timeouts[M.ckey] = max(timeouts[M.ckey],penalty)
+
+/datum/element/ghost_role_eligibility/Detach(mob/M)
+ . = ..()
+ if(M in eligible_mobs)
+ eligible_mobs -= M
+
+/datum/element/ghost_role_eligibility/proc/get_all_ghost_role_eligible(silent = FALSE)
+ var/list/candidates = list()
+ for(var/m in eligible_mobs)
+ var/mob/M = m
+ if(M.can_reenter_round(TRUE))
+ candidates += M
+ return candidates
+
+/mob/proc/can_reenter_round(silent = FALSE)
+ var/datum/element/ghost_role_eligibility/eli = SSdcs.GetElement(/datum/element/ghost_role_eligibility)
+ return eli.can_reenter_round(src,silent)
+
+/datum/element/ghost_role_eligibility/proc/can_reenter_round(var/mob/M,silent = FALSE)
+ if(!(M in eligible_mobs))
+ return FALSE
+ if(!(M.ckey in timeouts))
+ return TRUE
+ var/timeout = timeouts[M.ckey]
+ if(timeout != CANT_REENTER_ROUND && timeout <= world.realtime)
+ return TRUE
+ if(!silent && M.client)
+ to_chat(M, "You are unable to reenter the round[timeout != CANT_REENTER_ROUND ? " yet. Your ghost role blacklist will expire in [DisplayTimeText(timeout - world.realtime)]" : ""].")
+ return FALSE
diff --git a/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm b/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm
index c89562c9f9..92a02f5920 100644
--- a/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm
+++ b/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm
@@ -17,10 +17,10 @@
var/list/living_antags = list()
var/list/dead_players = list()
var/list/list_observers = list()
+ var/list/ghost_eligible = list()
/datum/dynamic_ruleset/midround/from_ghosts
weight = 0
- required_type = /mob/dead/observer
/// Whether the ruleset should call generate_ruleset_body or not.
var/makeBody = TRUE
@@ -34,6 +34,8 @@
living_players = trim_list(mode.current_players[CURRENT_LIVING_PLAYERS])
living_antags = trim_list(mode.current_players[CURRENT_LIVING_ANTAGS])
list_observers = trim_list(mode.current_players[CURRENT_OBSERVERS])
+ var/datum/element/ghost_role_eligibility/eligibility = SSdcs.GetElement(/datum/element/ghost_role_eligibility)
+ ghost_eligible = trim_list(eligibility.get_all_ghost_role_eligible())
/datum/dynamic_ruleset/midround/proc/trim_list(list/L = list())
var/list/trimmed_list = L.Copy()
@@ -70,6 +72,25 @@
continue
return trimmed_list
+/datum/dynamic_ruleset/midround/from_ghosts/trim_list(list/L = list())
+ var/list/trimmed_list = L.Copy()
+ for(var/mob/M in trimmed_list)
+ if (!M.client) // Are they connected?
+ trimmed_list.Remove(M)
+ continue
+ if(!mode.check_age(M.client, minimum_required_age))
+ trimmed_list.Remove(M)
+ continue
+ if(antag_flag_override)
+ if(!(antag_flag_override in M.client.prefs.be_special) || jobban_isbanned(M.ckey, antag_flag_override))
+ trimmed_list.Remove(M)
+ continue
+ else
+ if(!(antag_flag in M.client.prefs.be_special) || jobban_isbanned(M.ckey, antag_flag))
+ trimmed_list.Remove(M)
+ continue
+ return trimmed_list
+
// You can then for example prompt dead players in execute() to join as strike teams or whatever
// Or autotator someone
@@ -91,11 +112,15 @@
return FALSE
return TRUE
+/datum/dynamic_ruleset/midround/from_ghosts/ready(forced = FALSE)
+ if (required_candidates > ghost_eligible.len)
+ SSblackbox.record_feedback("tally","dynamic",1,"Times rulesets rejected due to not enough ghosts")
+ return FALSE
+ return ..()
+
+
/datum/dynamic_ruleset/midround/from_ghosts/execute()
- var/list/possible_candidates = list()
- possible_candidates.Add(dead_players)
- possible_candidates.Add(list_observers)
- var/application_successful = send_applications(possible_candidates)
+ var/application_successful = send_applications(ghost_eligible)
return assigned.len > 0 && application_successful
/// This sends a poll to ghosts if they want to be a ghost spawn from a ruleset.
@@ -303,9 +328,6 @@
var/datum/mind/wizard
/datum/dynamic_ruleset/midround/from_ghosts/wizard/ready(forced = FALSE)
- if (required_candidates > (dead_players.len + list_observers.len))
- SSblackbox.record_feedback("tally","dynamic",1,"Times rulesets rejected due to not enough ghosts")
- return FALSE
if(GLOB.wizardstart.len == 0)
log_admin("Cannot accept Wizard ruleset. Couldn't find any wizard spawn points.")
message_admins("Cannot accept Wizard ruleset. Couldn't find any wizard spawn points.")
@@ -366,12 +388,6 @@
required_candidates = operative_cap[indice_pop]
return ..()
-/datum/dynamic_ruleset/midround/from_ghosts/nuclear/ready(forced = FALSE)
- if (required_candidates > (dead_players.len + list_observers.len))
- SSblackbox.record_feedback("tally","dynamic",1,"Times rulesets rejected due to not enough ghosts")
- return FALSE
- return ..()
-
/datum/dynamic_ruleset/midround/from_ghosts/nuclear/finish_setup(mob/new_character, index)
new_character.mind.special_role = "Nuclear Operative"
new_character.mind.assigned_role = "Nuclear Operative"
@@ -404,12 +420,6 @@
repeatable = TRUE
property_weights = list("story_potential" = -1, "trust" = 2, "chaos" = 2, "extended" = -2, "valid" = 2)
-/datum/dynamic_ruleset/midround/from_ghosts/blob/ready(forced = FALSE)
- if (required_candidates > (dead_players.len + list_observers.len))
- SSblackbox.record_feedback("tally","dynamic",1,"Times rulesets rejected due to not enough ghosts")
- return FALSE
- return ..()
-
/datum/dynamic_ruleset/midround/from_ghosts/blob/generate_ruleset_body(mob/applicant)
var/body = applicant.become_overmind()
return body
@@ -437,12 +447,6 @@
property_weights = list("story_potential" = -1, "trust" = 1, "chaos" = 2, "extended" = -2, "valid" = 2)
var/list/vents = list()
-/datum/dynamic_ruleset/midround/from_ghosts/xenomorph/ready(forced = FALSE)
- if (required_candidates > (dead_players.len + list_observers.len))
- SSblackbox.record_feedback("tally","dynamic",1,"Times rulesets rejected due to not enough ghosts")
- return FALSE
- return ..()
-
/datum/dynamic_ruleset/midround/from_ghosts/xenomorph/execute()
// 50% chance of being incremented by one
required_candidates += prob(50)
@@ -539,12 +543,6 @@
property_weights = list("story_potential" = 1, "extended" = 1, "valid" = -2)
high_population_requirement = 5
-/datum/dynamic_ruleset/midround/from_ghosts/sentient_disease/ready(forced = FALSE)
- if (required_candidates > (dead_players.len + list_observers.len))
- SSblackbox.record_feedback("tally","dynamic",1,"Times rulesets rejected due to not enough ghosts")
- return FALSE
- return ..()
-
/datum/dynamic_ruleset/midround/from_ghosts/sentient_disease/generate_ruleset_body(mob/applicant)
var/mob/camera/disease/virus = new /mob/camera/disease(SSmapping.get_station_center())
applicant.transfer_ckey(virus, FALSE)
@@ -583,9 +581,6 @@
return ..()
/datum/dynamic_ruleset/midround/from_ghosts/revenant/ready(forced = FALSE)
- if(required_candidates > (dead_players.len + list_observers.len))
- SSblackbox.record_feedback("tally","dynamic",1,"Times rulesets rejected due to not enough ghosts")
- return FALSE
for(var/mob/living/L in GLOB.dead_mob_list) //look for any dead bodies
var/turf/T = get_turf(L)
if(T && is_station_level(T.z))
@@ -632,9 +627,6 @@
var/list/spawn_locs = list()
/datum/dynamic_ruleset/midround/from_ghosts/slaughter_demon/ready(forced = FALSE)
- if(required_candidates > (dead_players.len + list_observers.len))
- SSblackbox.record_feedback("tally","dynamic",1,"Times rulesets rejected due to not enough ghosts")
- return FALSE
for(var/obj/effect/landmark/carpspawn/L in GLOB.landmarks_list)
if(isturf(L.loc))
spawn_locs += L.loc
@@ -685,9 +677,6 @@
repeatable = TRUE
/datum/dynamic_ruleset/midround/from_ghosts/abductors/ready(forced = FALSE)
- if(required_candidates > (dead_players.len + list_observers.len))
- SSblackbox.record_feedback("tally","dynamic",1,"Times rulesets rejected due to not enough ghosts")
- return FALSE
team = new /datum/team/abductor_team
if(team.team_number > ABDUCTOR_MAX_TEAMS)
return FALSE
@@ -726,9 +715,6 @@
var/spawn_loc
/datum/dynamic_ruleset/midround/from_ghosts/ninja/ready(forced = FALSE)
- if(required_candidates > (dead_players.len + list_observers.len))
- SSblackbox.record_feedback("tally","dynamic",1,"Times rulesets rejected due to not enough ghosts")
- return FALSE
if(!spawn_loc)
var/list/spawn_locs = list()
for(var/obj/effect/landmark/carpspawn/L in GLOB.landmarks_list)
diff --git a/code/game/machinery/cryopod.dm b/code/game/machinery/cryopod.dm
index 98dd91d3bd..e9d3006b06 100644
--- a/code/game/machinery/cryopod.dm
+++ b/code/game/machinery/cryopod.dm
@@ -491,4 +491,4 @@
//Attacks/effects.
/obj/machinery/cryopod/blob_act()
- return //Sorta gamey, but we don't really want these to be destroyed.
\ No newline at end of file
+ return //Sorta gamey, but we don't really want these to be destroyed.
diff --git a/code/game/objects/items/holy_weapons.dm b/code/game/objects/items/holy_weapons.dm
index 7a83893f8b..c6c5547e54 100644
--- a/code/game/objects/items/holy_weapons.dm
+++ b/code/game/objects/items/holy_weapons.dm
@@ -479,10 +479,10 @@
possessed = TRUE
- var/list/mob/dead/observer/candidates = pollGhostCandidates("Do you want to play as the spirit of [user.real_name]'s blade?", ROLE_PAI, null, FALSE, 100, POLL_IGNORE_POSSESSED_BLADE)
+ var/list/mob/candidates = pollGhostCandidates("Do you want to play as the spirit of [user.real_name]'s blade?", ROLE_PAI, null, FALSE, 100, POLL_IGNORE_POSSESSED_BLADE)
if(LAZYLEN(candidates))
- var/mob/dead/observer/C = pick(candidates)
+ var/mob/C = pick(candidates)
var/mob/living/simple_animal/shade/S = new(src)
S.real_name = name
S.name = name
diff --git a/code/game/objects/structures/ghost_role_spawners.dm b/code/game/objects/structures/ghost_role_spawners.dm
index fd6030453c..705ca9a884 100644
--- a/code/game/objects/structures/ghost_role_spawners.dm
+++ b/code/game/objects/structures/ghost_role_spawners.dm
@@ -626,7 +626,13 @@
O.equip(new_spawn, FALSE, new_spawn.client)
SSjob.equip_loadout(null, new_spawn, FALSE)
SSquirks.AssignQuirks(new_spawn, new_spawn.client, TRUE, TRUE, null, FALSE, new_spawn)
+ new_spawn.AddElement(/datum/element/ghost_role_eligibility)
+ ADD_TRAIT(new_spawn, TRAIT_SIXTHSENSE, GHOSTROLE_TRAIT)
ADD_TRAIT(new_spawn,TRAIT_EXEMPT_HEALTH_EVENTS,GHOSTROLE_TRAIT)
+ to_chat(new_spawn,"You maybe sharing your cafe with some ninja-captured individuals, so make sure to only interact with the ghosts you hear as a ghost!")
+ to_chat(new_spawn,"You can turn yourself into a ghost and freely reenter your body with the ghost action.")
+ var/datum/action/ghost/G = new(new_spawn)
+ G.Grant(new_spawn)
/datum/outfit/ghostcafe
name = "ID, jumpsuit and shoes"
diff --git a/code/modules/admin/verbs/one_click_antag.dm b/code/modules/admin/verbs/one_click_antag.dm
index 09a8f692d8..7675f858ee 100644
--- a/code/modules/admin/verbs/one_click_antag.dm
+++ b/code/modules/admin/verbs/one_click_antag.dm
@@ -137,9 +137,9 @@
/datum/admins/proc/makeWizard()
- var/list/mob/dead/observer/candidates = pollGhostCandidates("Do you wish to be considered for the position of a Wizard Foundation 'diplomat'?", ROLE_WIZARD, null)
+ var/list/mob/candidates = pollGhostCandidates("Do you wish to be considered for the position of a Wizard Foundation 'diplomat'?", ROLE_WIZARD, null)
- var/mob/dead/observer/selected = pick_n_take(candidates)
+ var/mob/selected = pick_n_take(candidates)
var/mob/living/carbon/human/new_character = makeBody(selected)
new_character.mind.make_Wizard()
@@ -214,9 +214,9 @@
/datum/admins/proc/makeNukeTeam()
var/datum/game_mode/nuclear/temp = new
- var/list/mob/dead/observer/candidates = pollGhostCandidates("Do you wish to be considered for a nuke team being sent in?", ROLE_OPERATIVE, temp)
- var/list/mob/dead/observer/chosen = list()
- var/mob/dead/observer/theghost = null
+ var/list/mob/candidates = pollGhostCandidates("Do you wish to be considered for a nuke team being sent in?", ROLE_OPERATIVE, temp)
+ var/list/mob/chosen = list()
+ var/mob/theghost = null
if(candidates.len)
var/numagents = 5
@@ -378,7 +378,7 @@
ertemplate.enforce_human = prefs["enforce_human"]["value"] == "Yes" ? TRUE : FALSE
ertemplate.opendoors = prefs["open_armory"]["value"] == "Yes" ? TRUE : FALSE
- var/list/mob/dead/observer/candidates = pollGhostCandidates("Do you wish to be considered for [ertemplate.polldesc] ?", "deathsquad", null)
+ var/list/mob/candidates = pollGhostCandidates("Do you wish to be considered for [ertemplate.polldesc] ?", "deathsquad", null)
var/teamSpawned = FALSE
if(candidates.len > 0)
@@ -404,7 +404,7 @@
numagents--
continue // This guy's unlucky, not enough spawn points, we skip him.
var/spawnloc = spawnpoints[numagents]
- var/mob/dead/observer/chosen_candidate = pick(candidates)
+ var/mob/chosen_candidate = pick(candidates)
candidates -= chosen_candidate
if(!chosen_candidate.key)
continue
diff --git a/code/modules/antagonists/blob/blob/powers.dm b/code/modules/antagonists/blob/blob/powers.dm
index 73c0776ad7..aeb1392432 100644
--- a/code/modules/antagonists/blob/blob/powers.dm
+++ b/code/modules/antagonists/blob/blob/powers.dm
@@ -166,7 +166,7 @@
if(!can_buy(40))
return
- var/list/mob/dead/observer/candidates = pollGhostCandidates("Do you want to play as a [blob_reagent_datum.name] blobbernaut?", ROLE_BLOB, null, ROLE_BLOB, 50) //players must answer rapidly
+ var/list/mob/candidates = pollGhostCandidates("Do you want to play as a [blob_reagent_datum.name] blobbernaut?", ROLE_BLOB, null, ROLE_BLOB, 50) //players must answer rapidly
if(LAZYLEN(candidates)) //if we got at least one candidate, they're a blobbernaut now.
B.max_integrity = initial(B.max_integrity) * 0.25 //factories that produced a blobbernaut have much lower health
B.obj_integrity = min(B.obj_integrity, B.max_integrity)
@@ -181,7 +181,7 @@
blobber.update_icons()
blobber.adjustHealth(blobber.maxHealth * 0.5)
blob_mobs += blobber
- var/mob/dead/observer/C = pick(candidates)
+ var/mob/C = pick(candidates)
C.transfer_ckey(blobber)
SEND_SOUND(blobber, sound('sound/effects/blobattack.ogg'))
SEND_SOUND(blobber, sound('sound/effects/attackblob.ogg'))
diff --git a/code/modules/client/client_defines.dm b/code/modules/client/client_defines.dm
index ae9932e96f..361b2a7517 100644
--- a/code/modules/client/client_defines.dm
+++ b/code/modules/client/client_defines.dm
@@ -80,7 +80,3 @@
var/next_keysend_reset = 0
var/next_keysend_trip_reset = 0
var/keysend_tripped = FALSE
-
- // stops players from coming back through ghost/midround roles after suicide/cryo
- // for a duration set by CONFIG_GET(number/suicide_reenter_round_timer) and CONFIG_GET(number/roundstart_suicide_time_limit)
- var/reenter_round_timeout = 0
diff --git a/code/modules/events/holiday/xmas.dm b/code/modules/events/holiday/xmas.dm
index 65d96ad150..ea63ee611f 100644
--- a/code/modules/events/holiday/xmas.dm
+++ b/code/modules/events/holiday/xmas.dm
@@ -75,7 +75,7 @@
/datum/round_event/santa/start()
var/list/candidates = pollGhostCandidates("Santa is coming to town! Do you want to be Santa?", poll_time=150)
if(LAZYLEN(candidates))
- var/mob/dead/observer/C = pick(candidates)
+ var/mob/C = pick(candidates)
santa = new /mob/living/carbon/human(pick(GLOB.blobstart))
C.transfer_ckey(santa, FALSE)
diff --git a/code/modules/mob/dead/observer/login.dm b/code/modules/mob/dead/observer/login.dm
index bf86a97574..1b328dbc69 100644
--- a/code/modules/mob/dead/observer/login.dm
+++ b/code/modules/mob/dead/observer/login.dm
@@ -18,6 +18,3 @@
update_icon(preferred_form)
updateghostimages()
-
- client.reenter_round_timeout = max(client.reenter_round_timeout, clientless_round_timeout)
- clientless_round_timeout = client.reenter_round_timeout
diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm
index 0846cf1ea1..f1c4316c65 100644
--- a/code/modules/mob/dead/observer/observer.dm
+++ b/code/modules/mob/dead/observer/observer.dm
@@ -19,7 +19,6 @@ GLOBAL_VAR_INIT(observer_default_invisibility, INVISIBILITY_OBSERVER)
hud_type = /datum/hud/ghost
movement_type = GROUND | FLYING
var/can_reenter_corpse
- var/clientless_round_timeout = 0 //mobs will lack a client as long as their player is disconnected. See client_defines.dm "reenter_round_timeout"
var/datum/hud/living/carbon/hud = null // hud
var/bootime = 0
var/started_as_observer //This variable is set to 1 when you enter the game as an observer.
@@ -135,7 +134,7 @@ GLOBAL_VAR_INIT(observer_default_invisibility, INVISIBILITY_OBSERVER)
AA.onNewMob(src)
. = ..()
-
+ AddElement(/datum/element/ghost_role_eligibility)
grant_all_languages()
/mob/dead/observer/get_photo_description(obj/item/camera/camera)
@@ -270,23 +269,12 @@ Works together with spawning an observer, noted above.
var/mob/dead/observer/ghost = new(src) // Transfer safety to observer spawning proc.
SStgui.on_transfer(src, ghost) // Transfer NanoUIs.
ghost.can_reenter_corpse = can_reenter_corpse
- if(penalize) //penalizing them from making a ghost role / midround antag comeback right away.
- var/penalty = CONFIG_GET(number/suicide_reenter_round_timer) MINUTES
- var/roundstart_quit_limit = CONFIG_GET(number/roundstart_suicide_time_limit) MINUTES
- if(world.time < roundstart_quit_limit) //add up the time difference to their antag rolling penalty if they quit before half a (ingame) hour even passed.
- penalty += roundstart_quit_limit - world.time
- if(penalty)
- penalty += world.realtime
- if(penalty - SSshuttle.realtimeofstart > SSshuttle.auto_call + SSshuttle.emergencyCallTime + SSshuttle.emergencyDockTime + SSshuttle.emergencyEscapeTime)
- penalty = CANT_REENTER_ROUND
- if(client)
- client.reenter_round_timeout = penalty
- else //A disconnected player (quite likely for cryopods)
- ghost.clientless_round_timeout = penalty
if (client && client.prefs && client.prefs.auto_ooc)
if (!(client.prefs.chat_toggles & CHAT_OOC))
client.prefs.chat_toggles ^= CHAT_OOC
transfer_ckey(ghost, FALSE)
+ ghost.AddElement(/datum/element/ghost_role_eligibility,penalize) // technically already run earlier, but this adds the penalty
+ // needs to be done AFTER the ckey transfer, too
return ghost
/*
@@ -343,15 +331,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
return
ghostize(0, penalize = TRUE)
-/mob/dead/observer/proc/can_reenter_round(silent = FALSE)
- var/timeout = clientless_round_timeout
- if(client)
- timeout = client.reenter_round_timeout
- if(timeout != CANT_REENTER_ROUND && timeout <= world.realtime)
- return TRUE
- if(!silent && client)
- to_chat(src, "You are unable to reenter the round[timeout != CANT_REENTER_ROUND ? " yet. Your ghost role blacklist will expire in [DisplayTimeText(timeout - world.realtime)]" : ""].")
- return FALSE
+
/mob/dead/observer/Move(NewLoc, direct)
if(updatedir)
diff --git a/code/modules/mob/living/simple_animal/guardian/guardian.dm b/code/modules/mob/living/simple_animal/guardian/guardian.dm
index 1bd434b233..62c8588ac8 100644
--- a/code/modules/mob/living/simple_animal/guardian/guardian.dm
+++ b/code/modules/mob/living/simple_animal/guardian/guardian.dm
@@ -424,9 +424,9 @@ GLOBAL_LIST_EMPTY(parasites) //all currently existing/living guardians
var/mob/living/simple_animal/hostile/guardian/G = input(src, "Pick the guardian you wish to reset", "Guardian Reset") as null|anything in guardians
if(G)
to_chat(src, "You attempt to reset [G.real_name]'s personality...")
- var/list/mob/dead/observer/candidates = pollGhostCandidates("Do you want to play as [src.real_name]'s [G.real_name]?", ROLE_PAI, null, FALSE, 100)
+ var/list/mob/candidates = pollGhostCandidates("Do you want to play as [src.real_name]'s [G.real_name]?", ROLE_PAI, null, FALSE, 100)
if(LAZYLEN(candidates))
- var/mob/dead/observer/C = pick(candidates)
+ var/mob/C = pick(candidates)
to_chat(G, "Your user reset you, and your body was taken over by a ghost. Looks like they weren't happy with your performance.")
to_chat(src, "Your [G.real_name] has been successfully reset.")
message_admins("[key_name_admin(C)] has taken control of ([key_name_admin(G)])")
@@ -498,10 +498,10 @@ GLOBAL_LIST_EMPTY(parasites) //all currently existing/living guardians
return
used = TRUE
to_chat(user, "[use_message]")
- var/list/mob/dead/observer/candidates = pollGhostCandidates("Do you want to play as the [mob_name] of [user.real_name]?", ROLE_PAI, null, FALSE, 100, POLL_IGNORE_HOLOPARASITE)
+ var/list/mob/candidates = pollGhostCandidates("Do you want to play as the [mob_name] of [user.real_name]?", ROLE_PAI, null, FALSE, 100, POLL_IGNORE_HOLOPARASITE)
if(LAZYLEN(candidates))
- var/mob/dead/observer/C = pick(candidates)
+ var/mob/C = pick(candidates)
spawn_guardian(user, C.key)
else
to_chat(user, "[failure_message]")
diff --git a/tgstation.dme b/tgstation.dme
index 7e7d69d6f1..33a4251dd7 100755
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -470,6 +470,7 @@
#include "code\datums\elements\_element.dm"
#include "code\datums\elements\cleaning.dm"
#include "code\datums\elements\earhealing.dm"
+#include "code\datums\elements\ghost_role_eligibility.dm"
#include "code\datums\helper_datums\events.dm"
#include "code\datums\helper_datums\getrev.dm"
#include "code\datums\helper_datums\icon_snapshot.dm"