diff --git a/_maps/map_files/generic/centcomm.dmm b/_maps/map_files/generic/centcomm.dmm index f0648fbd6ca..9a1fe1a38fe 100644 --- a/_maps/map_files/generic/centcomm.dmm +++ b/_maps/map_files/generic/centcomm.dmm @@ -1870,6 +1870,10 @@ /obj/item/kirbyplants, /turf/simulated/floor/wood, /area/centcom/specops) +"gZ" = ( +/obj/machinery/light, +/turf/simulated/floor/backrooms_carpet, +/area/backrooms) "ha" = ( /obj/structure/chair/comfy/shuttle{ dir = 4 @@ -4350,6 +4354,9 @@ }, /turf/simulated/floor/plasteel/freezer, /area/admin) +"oy" = ( +/turf/simulated/wall/indestructible/backrooms, +/area/backrooms) "oz" = ( /obj/machinery/door/airlock/centcom{ aiControlDisabled = 1; @@ -4516,6 +4523,12 @@ icon_state = "cafeteria" }, /area/tdome/tdomeobserve) +"oZ" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/backrooms_carpet, +/area/backrooms) "pa" = ( /turf/simulated/floor/mineral/titanium, /area/shuttle/trade/sol) @@ -5402,6 +5415,9 @@ /obj/effect/landmark/spawner/syndie, /turf/simulated/floor/wood, /area/syndicate_mothership) +"sd" = ( +/turf/simulated/floor/backrooms_carpet, +/area/backrooms) "se" = ( /obj/structure/chair/comfy/shuttle{ dir = 4 @@ -5782,6 +5798,10 @@ /obj/effect/spawner/window/reinforced, /turf/simulated/floor/plating, /area/trader_station/sol) +"tI" = ( +/obj/effect/landmark/spawner/backrooms, +/turf/simulated/floor/backrooms_carpet, +/area/backrooms) "tJ" = ( /obj/machinery/door/poddoor{ density = 0; @@ -7861,6 +7881,12 @@ /obj/effect/landmark/spawner/tdomeobserve, /turf/simulated/floor/plasteel/dark, /area/tdome/tdomeobserve) +"BU" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/backrooms_carpet, +/area/backrooms) "BV" = ( /obj/effect/mapping_helpers/airlock/access/all/syndicate, /obj/machinery/door/airlock/external{ @@ -11952,6 +11978,12 @@ /obj/effect/turf_decal/delivery, /turf/simulated/floor/plasteel/dark, /area/centcom/specops) +"PV" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/backrooms_carpet, +/area/backrooms) "PW" = ( /obj/structure/chair/comfy/shuttle, /obj/machinery/light{ @@ -54803,39 +54835,39 @@ aN aN aN aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN +oy +oy +oy +oy +oy +oy +oy +oy +oy +oy +oy +oy +oy +oy +oy +oy +oy +oy +oy +oy +oy +oy +oy +oy +oy +oy +oy +oy +oy +oy +oy +oy +oy aN aN aN @@ -55060,39 +55092,39 @@ aN aN aN aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN +oy +sd +oy +sd +sd +oy +sd +sd +sd +sd +sd +sd +sd +sd +oy +sd +oy +sd +BU +sd +sd +sd +sd +sd +BU +sd +sd +sd +sd +sd +sd +sd +oy aN aN aN @@ -55317,39 +55349,39 @@ aN aN aN aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN +oy +sd +oy +sd +sd +oy +oy +oy +sd +oy +sd +sd +sd +sd +oy +sd +oy +sd +oy +sd +sd +sd +sd +sd +sd +sd +oy +oy +oy +oy +oy +oy +oy aN aN aN @@ -55574,39 +55606,39 @@ aN aN aN aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN +oy +sd +oy +sd +sd +oy +sd +sd +sd +oy +sd +sd +tI +gZ +oy +sd +oy +sd +oy +sd +sd +sd +sd +sd +sd +sd +oy +sd +BU +sd +sd +sd +oy aN aN aN @@ -55831,39 +55863,39 @@ aN aN aN aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN +oy +sd +oy +sd +sd +BU +sd +sd +sd +oy +sd +sd +sd +sd +oy +sd +oy +sd +oy +sd +sd +sd +sd +sd +sd +sd +sd +sd +sd +sd +oy +sd +oy aN aN aN @@ -56088,39 +56120,39 @@ aN aN aN aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN +oy +sd +oy +sd +sd +sd +sd +sd +sd +oy +sd +sd +sd +sd +oy +sd +sd +sd +oy +sd +sd +sd +sd +sd +sd +sd +sd +sd +sd +sd +oy +sd +oy aN aN aN @@ -56345,39 +56377,39 @@ aN aN aN aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN +oy +sd +sd +sd +sd +sd +sd +sd +sd +oy +oy +sd +sd +sd +oy +oy +oy +oy +oy +sd +sd +sd +sd +sd +sd +sd +oy +sd +sd +sd +sd +sd +oy aN aN aN @@ -56602,39 +56634,39 @@ aN aN aN aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN +oy +sd +oy +sd +sd +sd +sd +sd +sd +sd +sd +sd +sd +sd +oy +sd +sd +sd +sd +sd +sd +tI +sd +sd +sd +sd +oy +sd +sd +oy +oy +oy +oy aN aN aN @@ -56859,39 +56891,39 @@ aN aN aN aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN +oy +sd +oy +sd +sd +tI +sd +sd +sd +sd +sd +sd +sd +sd +oy +sd +oy +PV +sd +sd +sd +sd +sd +sd +sd +sd +oy +sd +sd +oy +sd +sd +oy aN aN aN @@ -57116,39 +57148,39 @@ aN aN aN aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN +oy +oy +oy +sd +sd +sd +sd +sd +sd +oy +sd +sd +sd +gZ +oy +sd +sd +sd +sd +sd +sd +sd +sd +sd +sd +gZ +oy +sd +sd +oy +sd +sd +oy aN aN aN @@ -57373,39 +57405,39 @@ aN aN aN aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN +oy +sd +sd +sd +sd +sd +sd +sd +sd +oy +sd +sd +sd +sd +oy +sd +sd +sd +sd +sd +sd +sd +sd +sd +sd +sd +oy +sd +sd +oy +sd +gZ +oy aN aN aN @@ -57630,39 +57662,39 @@ aN aN aN aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN +oy +sd +sd +sd +sd +sd +sd +sd +sd +oy +sd +oy +oy +sd +oy +sd +oy +PV +sd +sd +sd +sd +sd +sd +sd +sd +oy +sd +sd +oy +sd +sd +oy aN aN aN @@ -57887,39 +57919,39 @@ aN aN aN aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN +oy +sd +sd +sd +sd +oZ +sd +sd +sd +oy +sd +sd +sd +sd +oy +sd +sd +sd +sd +sd +sd +sd +sd +sd +sd +sd +oy +sd +sd +sd +sd +sd +oy aN aN aN @@ -58144,39 +58176,39 @@ aN aN aN aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN +oy +sd +oy +oy +oy +oy +oy +oy +oy +oy +oy +oy +oy +oy +oy +oy +oy +oy +oy +oy +oy +oy +oy +oy +oy +oy +oy +oy +oy +sd +oy +oy +oy aN aN aN @@ -58401,39 +58433,39 @@ aN aN aN aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN +oy +sd +sd +sd +sd +BU +sd +sd +sd +sd +sd +sd +sd +sd +sd +sd +oy +sd +sd +sd +sd +sd +BU +sd +sd +oy +sd +sd +sd +sd +sd +sd +oy aN aN aN @@ -58658,39 +58690,39 @@ aN aN aN aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN +oy +sd +sd +sd +sd +sd +sd +sd +sd +sd +sd +sd +sd +sd +sd +sd +oy +sd +sd +sd +sd +sd +sd +sd +sd +oy +sd +oy +sd +sd +sd +sd +oy aN aN aN @@ -58915,39 +58947,39 @@ aN aN aN aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN +oy +PV +sd +sd +sd +sd +sd +sd +sd +sd +oy +oy +oy +oy +oy +oy +oy +sd +sd +sd +sd +sd +sd +sd +sd +oy +sd +sd +sd +sd +sd +gZ +oy aN aN aN @@ -59172,39 +59204,39 @@ aN aN aN aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN +oy +sd +sd +sd +sd +sd +sd +sd +sd +gZ +oy +sd +sd +BU +sd +sd +oy +sd +sd +oy +oy +oy +sd +sd +sd +oy +PV +sd +sd +sd +sd +sd +oy aN aN aN @@ -59429,39 +59461,39 @@ aN aN aN aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN +oy +sd +sd +sd +sd +sd +sd +sd +sd +sd +oy +sd +sd +sd +sd +sd +sd +sd +sd +oy +sd +sd +sd +sd +sd +oy +sd +sd +sd +sd +sd +sd +oy aN aN aN @@ -59686,39 +59718,39 @@ aN aN aN aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN +oy +sd +sd +sd +sd +tI +sd +sd +sd +sd +oy +sd +sd +tI +sd +sd +sd +sd +sd +oy +sd +sd +sd +sd +sd +sd +sd +sd +tI +sd +sd +sd +oy aN aN aN @@ -59943,39 +59975,39 @@ aN aN aN aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN +oy +sd +sd +sd +sd +sd +sd +sd +sd +sd +sd +sd +sd +sd +sd +sd +oy +sd +sd +oy +oy +oy +PV +sd +sd +sd +sd +sd +sd +sd +sd +sd +oy aN aN aN @@ -60200,39 +60232,39 @@ aN aN aN aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN +oy +PV +sd +sd +sd +sd +sd +sd +sd +sd +oy +sd +sd +sd +sd +sd +oy +PV +sd +oy +sd +sd +sd +sd +sd +oy +sd +sd +sd +sd +sd +sd +oy aN aN aN @@ -60457,39 +60489,39 @@ aN aN aN aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN +oy +sd +sd +sd +sd +sd +sd +sd +sd +gZ +oy +sd +sd +sd +sd +sd +oy +sd +sd +oy +sd +sd +sd +sd +sd +oy +PV +sd +sd +sd +sd +sd +oy aN aN aN @@ -60714,39 +60746,39 @@ aN aN aN aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN +oy +sd +sd +sd +sd +sd +sd +sd +sd +sd +oy +sd +sd +sd +sd +oy +oy +sd +sd +oy +oy +oy +sd +sd +sd +oy +sd +sd +sd +sd +sd +gZ +oy aN aN aN @@ -60971,39 +61003,39 @@ aN aN aN aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN +oy +sd +oy +oy +oy +sd +sd +sd +oy +oy +oy +oy +PV +sd +sd +oy +sd +sd +sd +oy +sd +sd +sd +sd +sd +oy +sd +oy +sd +sd +sd +sd +oy aN aN aN @@ -61228,39 +61260,39 @@ aN aN aN aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN +oy +oy +oy +sd +sd +sd +sd +sd +sd +sd +sd +sd +sd +sd +sd +oy +sd +sd +sd +oy +sd +sd +oZ +sd +sd +oy +sd +sd +sd +sd +sd +sd +oy aN aN aN @@ -61485,39 +61517,39 @@ aN aN aN aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN +oy +sd +oy +PV +sd +sd +sd +sd +sd +sd +sd +oy +sd +sd +oy +oy +oy +oy +oy +oy +oy +oy +oy +oy +oy +oy +oy +oy +oy +oy +oy +oy +oy aN aN aN @@ -61742,39 +61774,39 @@ aN aN aN aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN +oy +sd +oy +sd +sd +sd +sd +sd +sd +sd +sd +oy +sd +sd +oy +sd +sd +sd +sd +sd +sd +oy +sd +sd +sd +sd +BU +sd +sd +sd +sd +sd +oy aN aN aN @@ -61999,39 +62031,39 @@ aN aN aN aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN +oy +sd +oy +sd +sd +sd +tI +sd +sd +sd +gZ +oy +sd +sd +oy +sd +sd +oy +sd +sd +sd +sd +sd +sd +sd +sd +sd +sd +sd +sd +sd +sd +oy aN aN aN @@ -62256,39 +62288,39 @@ aN aN aN aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN +oy +sd +sd +sd +sd +sd +sd +sd +sd +sd +sd +oy +sd +sd +oy +sd +gZ +oy +PV +sd +sd +sd +sd +sd +sd +sd +sd +tI +sd +sd +sd +gZ +oy aN aN aN @@ -62513,39 +62545,39 @@ aN aN aN aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN +oy +sd +oy +sd +sd +sd +sd +sd +sd +sd +sd +oy +sd +sd +oy +sd +sd +oy +sd +sd +sd +sd +sd +sd +sd +sd +sd +sd +sd +sd +sd +sd +oy aN aN aN @@ -62770,39 +62802,39 @@ aN aN aN aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN +oy +sd +oy +sd +sd +sd +oZ +sd +sd +sd +sd +oy +sd +sd +sd +sd +sd +oy +sd +sd +sd +oy +sd +sd +sd +sd +oZ +sd +sd +sd +sd +sd +oy aN aN aN @@ -63027,39 +63059,39 @@ aN aN aN aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN -aN +oy +oy +oy +oy +oy +oy +oy +oy +oy +oy +oy +oy +oy +oy +oy +oy +oy +oy +oy +oy +oy +oy +oy +oy +oy +oy +oy +oy +oy +oy +oy +oy +oy aN aN aN diff --git a/code/__DEFINES/icon_smoothing_defines.dm b/code/__DEFINES/icon_smoothing_defines.dm index 3f916b25c61..961c11e3fcb 100644 --- a/code/__DEFINES/icon_smoothing_defines.dm +++ b/code/__DEFINES/icon_smoothing_defines.dm @@ -102,6 +102,7 @@ DEFINE_BITFIELD(smoothing_flags, list( #define SMOOTH_GROUP_REGULAR_WALLS S_OBJ(17) ///turf/simulated/wall, /obj/structure/falsewall #define SMOOTH_GROUP_REINFORCED_WALLS S_OBJ(18) ///turf/simulated/wall/r_wall, /obj/structure/falsewall/reinforced #define SMOOTH_GROUP_CULT_WALLS S_OBJ(19) ///turf/simulated/wall/cult +#define SMOOTH_GROUP_BACKROOMS_WALLS S_OBJ(20) ///turf/simulated/wall/backrooms, /obj/structure/falsewall/backrooms #define SMOOTH_GROUP_WINDOW_FULLTILE S_OBJ(21) ///turf/simulated/indestructible/fakeglass, /obj/structure/window/full/basic, /obj/structure/window/full/plasmabasic, /obj/structure/window/full/plasmareinforced, /obj/structure/window/full/reinforced #define SMOOTH_GROUP_WINDOW_FULLTILE_BRASS S_OBJ(22) ///obj/structure/window/brass/fulltile diff --git a/code/_globalvars/mapping_vars.dm b/code/_globalvars/mapping_vars.dm index dc095a33d16..a78a017e735 100644 --- a/code/_globalvars/mapping_vars.dm +++ b/code/_globalvars/mapping_vars.dm @@ -22,6 +22,7 @@ GLOBAL_LIST_EMPTY(newplayer_start) GLOBAL_LIST_EMPTY(latejoin) GLOBAL_LIST_EMPTY(prisonwarp) //prisoners go to these GLOBAL_LIST_EMPTY(syndieprisonwarp) //contractor targets go to these +GLOBAL_LIST_EMPTY(backroomswarp) //backrooms hallucinators go to these GLOBAL_LIST_EMPTY(xeno_spawn)//Aliens spawn at these. GLOBAL_LIST_EMPTY(ertdirector) GLOBAL_LIST_EMPTY(emergencyresponseteamspawn) diff --git a/code/game/area/centcom_areas.dm b/code/game/area/centcom_areas.dm index 98674bf344a..7feeaf9dee4 100644 --- a/code/game/area/centcom_areas.dm +++ b/code/game/area/centcom_areas.dm @@ -135,3 +135,9 @@ requires_power = FALSE has_gravity = TRUE hide_attacklogs = TRUE + +/area/backrooms + name = "Backrooms" + icon_state = "yellow" + requires_power = FALSE + dynamic_lighting = DYNAMIC_LIGHTING_FORCED diff --git a/code/game/objects/effects/landmarks.dm b/code/game/objects/effects/landmarks.dm index f03b08668d8..ad651d5f080 100644 --- a/code/game/objects/effects/landmarks.dm +++ b/code/game/objects/effects/landmarks.dm @@ -118,6 +118,14 @@ INITIALIZE_IMMEDIATE(/obj/effect/landmark/newplayer_start) //Without this you sp name = "bubblegum_arena_exit" icon_state = "bubblegumjumpscare" +/obj/effect/landmark/spawner/backrooms + name = "backrooms_spawn" + icon_state = "Assistant" + +/obj/effect/landmark/spawner/backrooms/Initialize(mapload) + spawner_list = GLOB.backroomswarp + return ..() + /obj/effect/landmark/spawner/syndie name = "Syndicate-Spawn" icon_state = "Syndie" diff --git a/code/game/objects/structures/false_walls.dm b/code/game/objects/structures/false_walls.dm index 27df94912bd..a056b993004 100644 --- a/code/game/objects/structures/false_walls.dm +++ b/code/game/objects/structures/false_walls.dm @@ -405,6 +405,15 @@ smoothing_groups = list(SMOOTH_GROUP_WALLS, SMOOTH_GROUP_PLASTITANIUM_WALLS) canSmoothWith = list(SMOOTH_GROUP_PLASTITANIUM_WALLS, SMOOTH_GROUP_AIRLOCK, SMOOTH_GROUP_SHUTTLE_PARTS) +/obj/structure/falsewall/backrooms + desc = "A strange wall that looks like cheap wallpaper and drywall." + icon = 'icons/turf/walls/backrooms_wall.dmi' + icon_state = "backrooms_wall-0" + base_icon_state = "backrooms_wall" + smoothing_flags = SMOOTH_BITMASK + smoothing_groups = list(SMOOTH_GROUP_WALLS, SMOOTH_GROUP_BACKROOMS_WALLS) + canSmoothWith = list(SMOOTH_GROUP_BACKROOMS_WALLS) + /obj/structure/falsewall/brass name = "clockwork wall" desc = "A huge chunk of warm metal. The clanging of machinery emanates from within." diff --git a/code/game/turfs/simulated/floor/misc_floor.dm b/code/game/turfs/simulated/floor/misc_floor.dm index 9e5a4241d59..3d010e13cbb 100644 --- a/code/game/turfs/simulated/floor/misc_floor.dm +++ b/code/game/turfs/simulated/floor/misc_floor.dm @@ -308,6 +308,14 @@ break_tile_to_plating() hotspot_expose(1000,CELL_VOLUME) +// Carpet used in the backrooms hallucination +/turf/simulated/floor/backrooms_carpet + name = "backrooms carpet" + desc = "An old, musty carpet. It smells faintly mildewy." + icon = 'icons/turf/floors.dmi' + icon_state = "backrooms_carpet" + baseturf = /turf/simulated/floor/backrooms_carpet + /turf/open/floor/plating/rust //SDMM supports colors, this is simply for easier mapping //and should be removed on initialize diff --git a/code/game/turfs/simulated/walls_indestructible.dm b/code/game/turfs/simulated/walls_indestructible.dm index 6fdf37f2d1e..07863679a69 100644 --- a/code/game/turfs/simulated/walls_indestructible.dm +++ b/code/game/turfs/simulated/walls_indestructible.dm @@ -302,3 +302,13 @@ GLOBAL_DATUM(title_splash, /turf/simulated/wall/indestructible/splashscreen) smoothing_groups = list(SMOOTH_GROUP_SIMULATED_TURFS, SMOOTH_GROUP_WALLS, SMOOTH_GROUP_SYNDICATE_WALLS) canSmoothWith = list(SMOOTH_GROUP_SYNDICATE_WALLS, SMOOTH_GROUP_AIRLOCK, SMOOTH_GROUP_SHUTTLE_PARTS) +/turf/simulated/wall/indestructible/backrooms + name = "wall" + desc = "A strange wall that looks like cheap wallpaper and drywall." + icon = 'icons/turf/walls/backrooms_wall.dmi' + icon_state = "backrooms_wall-0" + base_icon_state = "backrooms_wall" + explosion_block = 4 + smoothing_flags = SMOOTH_BITMASK + smoothing_groups = list(SMOOTH_GROUP_BACKROOMS_WALLS) + canSmoothWith = list(SMOOTH_GROUP_BACKROOMS_WALLS, SMOOTH_GROUP_AIRLOCK, SMOOTH_GROUP_SHUTTLE_PARTS) diff --git a/code/modules/hallucinations/effects/backrooms.dm b/code/modules/hallucinations/effects/backrooms.dm new file mode 100644 index 00000000000..ef34b3957fc --- /dev/null +++ b/code/modules/hallucinations/effects/backrooms.dm @@ -0,0 +1,58 @@ +GLOBAL_VAR_INIT(backrooms_occupied, FALSE) + +/** + * # Hallucination - Backrooms + * + * Temporarily sends the target to the backrooms. Their body's movement matches their movement in the backrooms. + */ + +/datum/hallucination_manager/backrooms + // this is the total length of the hallucination, if it's too short it cuts off the end + trigger_time = 14 SECONDS + // Human that will see the hallucination + var/mob/living/carbon/human/human_owner + // Item that will copy the owner's visible contents + var/obj/item/clone_base + +/datum/hallucination_manager/backrooms/on_spawn() + if(!ishuman(owner)) + return + human_owner = owner + // One person at a time in the backrooms, no backroom brawls allowed. + if(GLOB.backrooms_occupied) + return + GLOB.backrooms_occupied = TRUE + fade_out_trigger() + +/datum/hallucination_manager/backrooms/proc/fade_out_trigger() + human_owner.overlay_fullscreen("sleepblind", /atom/movable/screen/fullscreen/center/blind/sleeping, animated = 1 SECONDS) + trigger_timer = addtimer(CALLBACK(src, PROC_REF(do_hallucination_trigger)), 1 SECONDS, TIMER_STOPPABLE) + +/datum/hallucination_manager/backrooms/proc/do_hallucination_trigger() + human_owner.clear_fullscreen("sleepblind") + RegisterSignal(human_owner, COMSIG_MOVABLE_MOVED, PROC_REF(follow_movement)) + var/obj/spawn_location = pick(GLOB.backroomswarp) + clone_base = new(spawn_location) + clone_base.vis_contents += human_owner + human_owner.reset_perspective(clone_base) + trigger_timer = addtimer(CALLBACK(src, PROC_REF(fade_in_trigger)), 12 SECONDS, TIMER_STOPPABLE) + +/datum/hallucination_manager/backrooms/proc/fade_in_trigger() + human_owner.overlay_fullscreen("sleepblind", /atom/movable/screen/fullscreen/center/blind/sleeping, animated = 1 SECONDS) + trigger_timer = addtimer(CALLBACK(src, PROC_REF(end_fade_trigger)), 1 SECONDS, TIMER_STOPPABLE) + +/datum/hallucination_manager/backrooms/proc/end_fade_trigger() + human_owner.clear_fullscreen("sleepblind") + +/datum/hallucination_manager/backrooms/Destroy(force) + GLOB.backrooms_occupied = FALSE + UnregisterSignal(human_owner, COMSIG_MOVABLE_MOVED) + human_owner.reset_perspective(human_owner) + human_owner = null + QDEL_NULL(clone_base) + return ..() + +/datum/hallucination_manager/backrooms/proc/follow_movement(source, atom/old_loc, dir, forced) + // signal is called above in on_spawn so that whenever our human moves, we also move the clone + SIGNAL_HANDLER // COMSIG_MOVABLE_MOVED + step_towards(clone_base, get_step(get_turf(clone_base), dir)) diff --git a/code/modules/hallucinations/hallucination_manager.dm b/code/modules/hallucinations/hallucination_manager.dm index d8fb12d4ee0..60c7ad6c77d 100644 --- a/code/modules/hallucinations/hallucination_manager.dm +++ b/code/modules/hallucinations/hallucination_manager.dm @@ -28,7 +28,7 @@ RegisterSignal(owner, COMSIG_PARENT_QDELETING, PROC_REF(signal_qdel)) spawn_hallucination() -/datum/hallucination_manager/Destroy(force, ...) +/datum/hallucination_manager/Destroy(force) . = ..() owner = null QDEL_NULL(hallucination_list) @@ -38,8 +38,9 @@ var/turf/spawn_location = get_spawn_location() if(!spawn_location) return - initial_hallucination = new initial_hallucination(spawn_location, owner) - hallucination_list |= initial_hallucination + if(initial_hallucination) + initial_hallucination = new initial_hallucination(spawn_location, owner) + hallucination_list |= initial_hallucination on_spawn() trigger_timer = addtimer(CALLBACK(src, PROC_REF(on_trigger)), trigger_time, TIMER_DELETE_ME) diff --git a/code/modules/hallucinations/hallucinations.dm b/code/modules/hallucinations/hallucinations.dm index 9849594fbef..59172b6a1b9 100644 --- a/code/modules/hallucinations/hallucinations.dm +++ b/code/modules/hallucinations/hallucinations.dm @@ -27,8 +27,9 @@ GLOBAL_LIST_INIT(hallucinations, list( /obj/effect/hallucination/assault = 10, /obj/effect/hallucination/fake_grenade/spawner = 10, /obj/effect/hallucination/loose_energy_ball = 10, - /datum/hallucination_manager/blind_rush = 1, /datum/hallucination_manager/xeno_pounce = 10, + /datum/hallucination_manager/backrooms = 1, + /datum/hallucination_manager/blind_rush = 1, /datum/hallucination_manager/waves = 2, /obj/effect/hallucination/blob = 10, ) diff --git a/icons/turf/floors.dmi b/icons/turf/floors.dmi index 720c03b1c50..8d0bc1d7b9b 100644 Binary files a/icons/turf/floors.dmi and b/icons/turf/floors.dmi differ diff --git a/icons/turf/walls/backrooms_wall.dmi b/icons/turf/walls/backrooms_wall.dmi new file mode 100644 index 00000000000..af01ff0a014 Binary files /dev/null and b/icons/turf/walls/backrooms_wall.dmi differ diff --git a/paradise.dme b/paradise.dme index 5342916e865..94f084b0272 100644 --- a/paradise.dme +++ b/paradise.dme @@ -2006,6 +2006,7 @@ #include "code\modules\games\unum.dm" #include "code\modules\hallucinations\hallucination_manager.dm" #include "code\modules\hallucinations\hallucinations.dm" +#include "code\modules\hallucinations\effects\backrooms.dm" #include "code\modules\hallucinations\effects\blind_rush_hallucination.dm" #include "code\modules\hallucinations\effects\common.dm" #include "code\modules\hallucinations\effects\grenades.dm"