diff --git a/_maps/RandomRuins/SpaceRuins/BlueMoon/ninja_zen.dmm b/_maps/RandomRuins/SpaceRuins/BlueMoon/ninja_zen.dmm
new file mode 100644
index 0000000000000..1244849b9f503
--- /dev/null
+++ b/_maps/RandomRuins/SpaceRuins/BlueMoon/ninja_zen.dmm
@@ -0,0 +1,4246 @@
+//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
+// Ninja dojo extracted from Paradise SS220 CentComm.dmm
+
+"mVX" = (
+/turf/space,
+/area/space)
+
+"mNj" = (
+/turf/simulated/wall/indestructible/rock,
+/area/space)
+
+"ykS" = (
+/turf/simulated/floor/indestructible/snow,
+/area/ruin/space/ninja_zen)
+
+"emN" = (
+/obj/structure/flora/rock/icy,
+/turf/simulated/floor/indestructible/snow,
+/area/ruin/space/ninja_zen)
+
+"sQx" = (
+/obj/structure/flora/ausbushes/brflowers,
+/turf/simulated/floor/indestructible/snow,
+/area/ruin/space/ninja_zen)
+
+"tdj" = (
+/obj/structure/flora/grass/both,
+/turf/simulated/floor/indestructible/snow,
+/area/ruin/space/ninja_zen)
+
+"rns" = (
+/obj/structure/flora/tree/dead,
+/turf/simulated/floor/indestructible/snow,
+/area/ruin/space/ninja_zen)
+
+"kQk" = (
+/obj/structure/flora/grass/brown,
+/turf/simulated/floor/indestructible/snow,
+/area/ruin/space/ninja_zen)
+
+"ycO" = (
+/obj/structure/flora/tree/pine{
+ pixel_x = 1
+ },
+/turf/simulated/floor/indestructible/snow,
+/area/ruin/space/ninja_zen)
+
+"adW" = (
+/obj/structure/energy_caltrops/noselfdestroy,
+/obj/structure/flora/grass/both,
+/turf/simulated/floor/indestructible/snow,
+/area/ruin/space/ninja_zen)
+
+"awu" = (
+/obj/structure/energy_caltrops/noselfdestroy,
+/obj/structure/flora/grass/both,
+/obj/structure/flora/ausbushes/brflowers,
+/turf/simulated/floor/indestructible/snow,
+/area/ruin/space/ninja_zen)
+
+"axc" = (
+/obj/structure/energy_caltrops/noselfdestroy,
+/turf/simulated/floor/indestructible/snow,
+/area/ruin/space/ninja_zen)
+
+"hGJ" = (
+/obj/structure/flora/grass/both,
+/obj/structure/flora/ausbushes/brflowers,
+/turf/simulated/floor/indestructible/snow,
+/area/ruin/space/ninja_zen)
+
+"aIz" = (
+/obj/structure/flora/grass/both,
+/obj/structure/flora/tree/pine{
+ pixel_x = 1
+ },
+/turf/simulated/floor/indestructible/snow,
+/area/ruin/space/ninja_zen)
+
+"jSw" = (
+/turf/simulated/wall/indestructible/rock,
+/area/ruin/space/ninja_zen)
+
+"dMb" = (
+/turf/simulated/wall/indestructible/rock/dark,
+/area/ruin/space/ninja_zen)
+
+"aYy" = (
+/obj/structure/flora/tree/pine{
+ pixel_x = 1
+ },
+/obj/structure/flora/ausbushes/brflowers,
+/turf/simulated/floor/indestructible/snow,
+/area/ruin/space/ninja_zen)
+
+"bRM" = (
+/turf/simulated/floor/indestructible{
+ icon_state = "floorgrime"
+ },
+/area/ruin/space/ninja_zen)
+
+"nhl" = (
+/obj/machinery/door/airlock/survival_pod{
+ },
+/turf/simulated/floor/indestructible{
+ icon_state = "floorgrime"
+ },
+/area/ruin/space/ninja_zen)
+
+"bhg" = (
+/obj/structure/railing{
+ dir = 1
+ },
+/turf/simulated/floor/plasteel{
+ dir = 4;
+ icon_state = "rampbottom";
+ tag = "icon-stage_stairs"
+ },
+/area/ruin/space/ninja_zen)
+
+"bht" = (
+/obj/machinery/light/small{
+ dir = 1
+ },
+/turf/simulated/floor/indestructible{
+ icon_state = "floor"
+ },
+/area/ruin/space/ninja_zen)
+
+"bhL" = (
+/obj/structure/showcase{
+ desc = "This one is empty";
+ icon = 'icons/obj/ninjaobjects.dmi';
+ icon_state = "ninjastasis-none";
+ name = "Suit energy supply";
+ pixel_x = 10
+ },
+/turf/simulated/floor/indestructible{
+ icon_state = "floorgrime"
+ },
+/area/ruin/space/ninja_zen)
+
+"bDR" = (
+/obj/structure/railing,
+/turf/simulated/floor/plasteel{
+ dir = 4;
+ icon_state = "rampbottom";
+ tag = "icon-stage_stairs"
+ },
+/area/ruin/space/ninja_zen)
+
+"bEB" = (
+/obj/structure/showcase{
+ desc = "This one has an old damaged suit in it. Not working...";
+ icon = 'icons/obj/ninjaobjects.dmi';
+ icon_state = "ninjastasis-m";
+ name = "Suit energy supply"
+ },
+/turf/simulated/floor/indestructible{
+ icon_state = "floorgrime"
+ },
+/area/ruin/space/ninja_zen)
+
+"bGZ" = (
+/obj/machinery/power/smes/magical{
+ color = "#444455";
+ desc = "Может показаться, что он сломан и не работает, но на самом деле он специально настроен для подзарядки костюма посредством использования на нём перчаток";
+ name = "SpiderClan power storage unit";
+ resistance_flags = 371
+ },
+/turf/simulated/floor/indestructible{
+ icon_state = "floorgrime"
+ },
+/area/ruin/space/ninja_zen)
+
+"bHo" = (
+/obj/effect/turf_decal/box,
+/obj/structure/ninjatele{
+ pixel_y = 25
+ },
+/turf/simulated/floor/indestructible{
+ icon_state = "floorgrime"
+ },
+/area/ruin/space/ninja_zen)
+
+"bHR" = (
+/obj/machinery/ninja_mindscan_machine,
+/turf/simulated/floor/indestructible{
+ icon_state = "floorgrime"
+ },
+/area/ruin/space/ninja_zen)
+
+"bJL" = (
+/obj/structure/ninjatele{
+ pixel_y = 25
+ },
+/obj/effect/turf_decal/box,
+/turf/simulated/floor/indestructible{
+ icon_state = "floorgrime"
+ },
+/area/ruin/space/ninja_zen)
+
+"eFv" = (
+/obj/effect/turf_decal{
+ icon = 'icons/obj/ninjaobjects.dmi';
+ icon_state = "wallkatana";
+ name = "Katanas"
+ },
+/turf/simulated/wall/indestructible/reinforced/rusted,
+/area/ruin/space/ninja_zen)
+
+"ceS" = (
+/obj/machinery/light/small{
+ dir = 8
+ },
+/turf/simulated/floor/indestructible{
+ icon_state = "floor"
+ },
+/area/ruin/space/ninja_zen)
+
+"bRx" = (
+/turf/simulated/floor/indestructible{
+ icon_state = "floor"
+ },
+/area/ruin/space/ninja_zen)
+
+"nWf" = (
+/turf/simulated/wall/indestructible/reinforced/rusted,
+/area/ruin/space/ninja_zen)
+
+"cfa" = (
+/obj/item/grown/log/tree{
+ pixel_x = 3;
+ pixel_y = -3
+ },
+/obj/item/grown/log/tree,
+/obj/item/grown/log/tree{
+ pixel_x = -3;
+ pixel_y = 3
+ },
+/turf/simulated/floor/indestructible/snow,
+/area/ruin/space/ninja_zen)
+
+"buy" = (
+/obj/structure/chair/stool,
+/obj/effect/turf_decal/weather/snow/corner{
+ dir = 5
+ },
+/obj/effect/turf_decal/weather/snow/corner{
+ dir = 8
+ },
+/turf/simulated/floor/indestructible/asteroid,
+/area/ruin/space/ninja_zen)
+
+"chj" = (
+/obj/structure/bookcase,
+/obj/item/book/manual,
+/obj/item/book/manual,
+/obj/item/book/manual,
+/turf/simulated/floor/indestructible{
+ icon_state = "floorgrime"
+ },
+/area/ruin/space/ninja_zen)
+
+"cig" = (
+/obj/structure/railing/corner,
+/obj/machinery/light/small{
+ dir = 4;
+ tag = "icon-bulb1 (EAST)"
+ },
+/turf/simulated/floor/indestructible{
+ icon_state = "floorgrime"
+ },
+/area/ruin/space/ninja_zen)
+
+"civ" = (
+/obj/structure/railing/corner{
+ dir = 8
+ },
+/turf/simulated/floor/indestructible{
+ icon_state = "floor"
+ },
+/area/ruin/space/ninja_zen)
+
+"bBY" = (
+/obj/machinery/door/airlock/survival_pod{
+ },
+/turf/simulated/floor/indestructible{
+ icon_state = "floor"
+ },
+/area/ruin/space/ninja_zen)
+
+"cjy" = (
+/obj/structure/chair{
+ dir = 1
+ },
+/turf/simulated/floor/indestructible{
+ icon_state = "floorgrime"
+ },
+/area/ruin/space/ninja_zen)
+
+"cjQ" = (
+/obj/machinery/door/window/brigdoor{
+ color = "#00f700";
+ dir = 8;
+;
+ icon_state = "rightsecure";
+ name = "Riot Control"
+ },
+/turf/simulated/floor/indestructible{
+ icon_state = "floorgrime"
+ },
+/area/ruin/space/ninja_zen)
+
+"ckq" = (
+/obj/item/grown/log/tree{
+ pixel_x = 3;
+ pixel_y = -3
+ },
+/obj/item/grown/log/tree,
+/obj/item/grown/log/tree{
+ pixel_x = -3;
+ pixel_y = 3
+ },
+/obj/item/hatchet/wooden,
+/turf/simulated/floor/indestructible/snow,
+/area/ruin/space/ninja_zen)
+
+"ckC" = (
+/obj/structure/chair/stool,
+/obj/effect/turf_decal/weather/snow/corner{
+ dir = 10
+ },
+/obj/effect/turf_decal/weather/snow/corner{
+ dir = 1
+ },
+/turf/simulated/floor/indestructible/asteroid,
+/area/ruin/space/ninja_zen)
+
+"hxT" = (
+/obj/effect/turf_decal/weather/snow/corner{
+ dir = 1
+ },
+/turf/simulated/floor/indestructible/asteroid,
+/area/ruin/space/ninja_zen)
+
+"cli" = (
+/obj/item/shard,
+/turf/simulated/floor/indestructible/asteroid,
+/area/ruin/space/ninja_zen)
+
+"pqv" = (
+/obj/effect/turf_decal/weather/snow/corner{
+ dir = 5
+ },
+/turf/simulated/floor/indestructible/asteroid,
+/area/ruin/space/ninja_zen)
+
+"bYb" = (
+/obj/structure/chair/stool,
+/turf/simulated/floor/indestructible/snow,
+/area/ruin/space/ninja_zen)
+
+"byG" = (
+/obj/structure/flora/grass/both,
+/obj/item/storage/fancy/cigarettes/cigpack_robustgold,
+/turf/simulated/floor/indestructible/snow,
+/area/ruin/space/ninja_zen)
+
+"cBU" = (
+/obj/machinery/hydroponics/soil,
+/turf/simulated/floor/indestructible/snow,
+/area/ruin/space/ninja_zen)
+
+"cCT" = (
+/obj/structure/bookcase,
+/obj/item/book/manual,
+/obj/item/book/manual,
+/turf/simulated/floor/indestructible{
+ icon_state = "floorgrime"
+ },
+/area/ruin/space/ninja_zen)
+
+"cDk" = (
+/obj/structure/railing{
+ dir = 4
+ },
+/turf/simulated/floor/indestructible{
+ icon_state = "floorgrime"
+ },
+/area/ruin/space/ninja_zen)
+
+"cDU" = (
+/obj/item/flag/ninja,
+/turf/simulated/floor/indestructible{
+ icon_state = "floorgrime"
+ },
+/area/ruin/space/ninja_zen)
+
+"cEg" = (
+/obj/item/twohanded/required/kirbyplants{
+ icon_state = "plant-34";
+ tag = "icon-plant-34"
+ },
+/turf/simulated/floor/indestructible{
+ icon_state = "floorgrime"
+ },
+/area/ruin/space/ninja_zen)
+
+"byZ" = (
+/obj/structure/railing{
+ dir = 8
+ },
+/turf/simulated/floor/indestructible{
+ icon_state = "floorgrime"
+ },
+/area/ruin/space/ninja_zen)
+
+"bAh" = (
+/obj/machinery/light/small{
+ dir = 4;
+ tag = "icon-bulb1 (EAST)"
+ },
+/obj/structure/sign/poster/contraband/hacking_guide{
+ pixel_x = 32
+ },
+/turf/simulated/floor/indestructible{
+ icon_state = "floor"
+ },
+/area/ruin/space/ninja_zen)
+
+"gVw" = (
+/obj/item/radio/intercom/syndicate/directional/west,
+/turf/simulated/floor/indestructible{
+ icon_state = "floorgrime"
+ },
+/area/ruin/space/ninja_zen)
+
+"nEN" = (
+/obj/effect/baseturf_helper/asteroid/snow{
+ baseturf = /turf/simulated/floor/indestructible/snow;
+ name = "snow baseturf editor"
+ },
+/turf/simulated/wall/indestructible/reinforced/rusted,
+/area/ruin/space/ninja_zen)
+
+"cES" = (
+/obj/structure/window/plasmareinforced{
+ color = "#00f700";
+ dir = 8
+ },
+/obj/machinery/ninja_clonepod{
+ pixel_x = 3
+ },
+/turf/simulated/floor/indestructible{
+ icon_state = "floorgrime"
+ },
+/area/ruin/space/ninja_zen)
+
+"cHK" = (
+/obj/item/broken_bottle,
+/obj/effect/turf_decal/weather/snow/corner{
+ dir = 8
+ },
+/turf/simulated/floor/indestructible/asteroid,
+/area/ruin/space/ninja_zen)
+
+"cHT" = (
+/obj/structure/bonfire/dense,
+/turf/simulated/floor/indestructible/asteroid,
+/area/ruin/space/ninja_zen)
+
+"kQT" = (
+/obj/effect/turf_decal/weather/snow/corner{
+ dir = 4
+ },
+/turf/simulated/floor/indestructible/asteroid,
+/area/ruin/space/ninja_zen)
+
+"cQF" = (
+/obj/structure/railing/corner{
+ dir = 4
+ },
+/obj/machinery/light/small{
+ dir = 4;
+ tag = "icon-bulb1 (EAST)"
+ },
+/turf/simulated/floor/indestructible{
+ icon_state = "floorgrime"
+ },
+/area/ruin/space/ninja_zen)
+
+"cQJ" = (
+/obj/structure/railing/corner{
+ dir = 1
+ },
+/turf/simulated/floor/indestructible{
+ icon_state = "floorgrime"
+ },
+/area/ruin/space/ninja_zen)
+
+"cRm" = (
+/obj/structure/table/abductor{
+ color = "#99ff99";
+ name = "table"
+ },
+/obj/structure/sign/poster/contraband/cc64k_ad{
+ pixel_y = 32
+ },
+/obj/machinery/ninja_bloodscan_machine,
+/turf/simulated/floor/indestructible{
+ icon_state = "floorgrime"
+ },
+/area/ruin/space/ninja_zen)
+
+"bGP" = (
+/obj/structure/table/abductor{
+ color = "#99ff99";
+ name = "table"
+ },
+/obj/item/toy/figure/ninja{
+ pixel_x = 8;
+ pixel_y = 14
+ },
+/obj/item/storage/box/syringes{
+ pixel_x = -1;
+ pixel_y = 12
+ },
+/obj/item/storage/fancy/vials,
+/turf/simulated/floor/indestructible{
+ icon_state = "floor"
+ },
+/area/ruin/space/ninja_zen)
+
+"bNc" = (
+/obj/machinery/door/window/brigdoor{
+ color = "#00f700";
+ dir = 8;
+;
+ name = "Riot Control"
+ },
+/turf/simulated/floor/indestructible{
+ icon_state = "floorgrime"
+ },
+/area/ruin/space/ninja_zen)
+
+"cRn" = (
+/obj/item/lighter/zippo/ninja,
+/turf/simulated/floor/indestructible/snow,
+/area/ruin/space/ninja_zen)
+
+"ova" = (
+/obj/effect/turf_decal/weather/snow/corner{
+ dir = 8
+ },
+/turf/simulated/floor/indestructible/asteroid,
+/area/ruin/space/ninja_zen)
+
+"cUD" = (
+/obj/effect/turf_decal/weather/snow/corner,
+/turf/simulated/floor/indestructible/asteroid,
+/area/ruin/space/ninja_zen)
+
+"cVb" = (
+/obj/effect/turf_decal/weather/snow/corner{
+ dir = 6
+ },
+/obj/item/shard,
+/turf/simulated/floor/indestructible/asteroid,
+/area/ruin/space/ninja_zen)
+
+"diG" = (
+/obj/effect/turf_decal/weather/snow/corner{
+ dir = 9
+ },
+/obj/effect/turf_decal/weather/snow/corner{
+ dir = 4
+ },
+/turf/simulated/floor/indestructible/asteroid,
+/area/ruin/space/ninja_zen)
+
+"diH" = (
+/obj/machinery/hydroponics/soil,
+/obj/item/seeds/wheat/rice,
+/turf/simulated/floor/indestructible/snow,
+/area/ruin/space/ninja_zen)
+
+"dmv" = (
+/obj/effect/turf_decal/sand{
+ alpha = 128
+ },
+/turf/simulated/floor/indestructible{
+ icon_state = "floorgrime"
+ },
+/area/ruin/space/ninja_zen)
+
+"cmJ" = (
+/obj/effect/turf_decal/sand{
+ alpha = 128
+ },
+/turf/simulated/floor/plating/asteroid{
+ icon_state = "asteroidfloor";
+ name = "floor"
+ },
+/area/ruin/space/ninja_zen)
+
+"qDI" = (
+/obj/effect/turf_decal{
+ dir = 1;
+ icon = 'icons/obj/ninjaobjects.dmi';
+ icon_state = "wallkatana";
+ name = "Katanas"
+ },
+/turf/simulated/wall/indestructible/reinforced/rusted,
+/area/ruin/space/ninja_zen)
+
+"dnL" = (
+/obj/machinery/light/small{
+ dir = 8
+ },
+/turf/simulated/floor/indestructible{
+ icon_state = "floorgrime"
+ },
+/area/ruin/space/ninja_zen)
+
+"dov" = (
+/obj/structure/chair/stool,
+/obj/effect/turf_decal/weather/snow/corner{
+ dir = 6
+ },
+/obj/effect/turf_decal/weather/snow/corner{
+ dir = 8
+ },
+/turf/simulated/floor/indestructible/asteroid,
+/area/ruin/space/ninja_zen)
+
+"drh" = (
+/obj/effect/turf_decal/weather/snow/corner{
+ dir = 9
+ },
+/turf/simulated/floor/indestructible/asteroid,
+/area/ruin/space/ninja_zen)
+
+"drz" = (
+/obj/effect/turf_decal/weather/snow/corner{
+ dir = 6
+ },
+/turf/simulated/floor/indestructible/asteroid,
+/area/ruin/space/ninja_zen)
+
+"dsX" = (
+/obj/structure/railing{
+ dir = 1
+ },
+/turf/simulated/floor/plasteel{
+ dir = 8;
+ icon_state = "rampbottom";
+ tag = "icon-stage_stairs"
+ },
+/area/ruin/space/ninja_zen)
+
+"coI" = (
+/obj/machinery/door/airlock/survival_pod{
+ },
+/obj/effect/turf_decal/sand{
+ alpha = 128
+ },
+/turf/simulated/floor/plating/asteroid{
+ icon_state = "asteroidfloor";
+ name = "floor"
+ },
+/area/ruin/space/ninja_zen)
+
+"dtK" = (
+/turf/simulated/floor/plating/asteroid{
+ icon_state = "asteroidfloor";
+ name = "floor"
+ },
+/area/ruin/space/ninja_zen)
+
+"dtL" = (
+/obj/machinery/light/small{
+ dir = 4
+ },
+/turf/simulated/floor/plating/asteroid{
+ icon_state = "asteroidplating";
+ name = "floor"
+ },
+/area/ruin/space/ninja_zen)
+
+"duf" = (
+/obj/item/tank/internals/oxygen/ninja{
+ pixel_x = -3;
+ pixel_y = 3
+ },
+/obj/item/tank/internals/oxygen/ninja,
+/obj/item/tank/internals/oxygen/ninja{
+ pixel_x = 3;
+ pixel_y = -3
+ },
+/obj/structure/rack,
+/turf/simulated/floor/indestructible{
+ icon_state = "floorgrime"
+ },
+/area/ruin/space/ninja_zen)
+
+"cqi" = (
+/obj/structure/table/abductor{
+ color = "#99ff99";
+ name = "table"
+ },
+/obj/item/storage/box/manacles{
+ pixel_x = 1;
+ pixel_y = 5
+ },
+/obj/item/storage/box/manacles{
+ pixel_x = -3;
+ pixel_y = 2
+ },
+/turf/simulated/floor/indestructible{
+ icon_state = "floorgrime"
+ },
+/area/ruin/space/ninja_zen)
+
+"duk" = (
+/obj/structure/sign/poster/official/air2{
+ pixel_y = -32
+ },
+/obj/machinery/portable_atmospherics/canister/oxygen{
+ maximum_pressure = 50000
+ },
+/turf/simulated/floor/indestructible{
+ icon_state = "floorgrime"
+ },
+/area/ruin/space/ninja_zen)
+
+"dum" = (
+/obj/structure/rack,
+/obj/item/tank/internals/emergency_oxygen/double/ninja{
+ pixel_x = -3;
+ pixel_y = 3
+ },
+/obj/item/tank/internals/emergency_oxygen/double/ninja,
+/obj/item/tank/internals/emergency_oxygen/double/ninja{
+ pixel_x = 3;
+ pixel_y = -3
+ },
+/turf/simulated/floor/indestructible{
+ icon_state = "floorgrime"
+ },
+/area/ruin/space/ninja_zen)
+
+"cxG" = (
+/obj/effect/turf_decal/weather/snow/corner{
+ dir = 9
+ },
+/turf/simulated/floor/indestructible/beach/water/deep/dense,
+/area/ruin/space/ninja_zen)
+
+"kjK" = (
+/obj/effect/turf_decal/weather/snow/corner{
+ dir = 1
+ },
+/turf/simulated/floor/indestructible/beach/water/deep/dense,
+/area/ruin/space/ninja_zen)
+
+"dvt" = (
+/obj/effect/turf_decal/weather/snow/corner{
+ dir = 5
+ },
+/turf/simulated/floor/indestructible/beach/water/deep/dense,
+/area/ruin/space/ninja_zen)
+
+"dEs" = (
+/obj/structure/flora/straw_bail,
+/turf/simulated/floor/indestructible/snow,
+/area/ruin/space/ninja_zen)
+
+"cMD" = (
+/obj/machinery/door/airlock/survival_pod{
+ },
+/turf/simulated/floor/plating/asteroid{
+ icon_state = "asteroidwarning";
+ name = "floor"
+ },
+/area/ruin/space/ninja_zen)
+
+"gGY" = (
+/turf/simulated/floor/indestructible/beach/water/deep/dense,
+/area/ruin/space/ninja_zen)
+
+"dLF" = (
+/obj/structure/railing{
+ dir = 4
+ },
+/obj/effect/turf_decal/weather/snow/corner{
+ dir = 9
+ },
+/turf/simulated/floor/indestructible/beach/water/deep/dense,
+/area/ruin/space/ninja_zen)
+
+"dRA" = (
+/obj/effect/turf_decal/siding/thinplating{
+ dir = 8
+ },
+/turf/simulated/floor/wood/cherry,
+/area/ruin/space/ninja_zen)
+
+"dYC" = (
+/obj/effect/turf_decal/siding/thinplating{
+ dir = 4
+ },
+/turf/simulated/floor/wood/cherry,
+/area/ruin/space/ninja_zen)
+
+"dMC" = (
+/obj/effect/turf_decal/weather/snow/corner{
+ dir = 1
+ },
+/obj/structure/railing{
+ dir = 8
+ },
+/turf/simulated/floor/indestructible/beach/water/deep/dense,
+/area/ruin/space/ninja_zen)
+
+"dGF" = (
+/mob/living/simple_animal/hostile/carp/koi,
+/turf/simulated/floor/indestructible/beach/water/deep/dense,
+/area/ruin/space/ninja_zen)
+
+"dJG" = (
+/obj/effect/mapping_helpers/light{
+ light_power = 3
+ },
+/turf/simulated/floor/indestructible/beach/water/deep/dense,
+/area/ruin/space/ninja_zen)
+
+"lpu" = (
+/obj/effect/turf_decal/weather/snow/corner,
+/turf/simulated/floor/indestructible/beach/water/deep/dense,
+/area/ruin/space/ninja_zen)
+
+"dSA" = (
+/obj/structure/railing{
+ dir = 4
+ },
+/turf/simulated/floor/indestructible/beach/water/deep/dense,
+/area/ruin/space/ninja_zen)
+
+"dTy" = (
+/obj/structure/railing{
+ dir = 8
+ },
+/turf/simulated/floor/indestructible/beach/water/deep/dense,
+/area/ruin/space/ninja_zen)
+
+"dKH" = (
+/obj/effect/turf_decal/weather/snow/corner{
+ dir = 1
+ },
+/obj/effect/mapping_helpers/light{
+ light_power = 3
+ },
+/turf/simulated/floor/indestructible/beach/water/deep/dense,
+/area/ruin/space/ninja_zen)
+
+"dVZ" = (
+/obj/effect/mapping_helpers/light{
+ light_power = 3
+ },
+/obj/effect/turf_decal/weather/snow/corner{
+ dir = 1
+ },
+/turf/simulated/floor/indestructible/beach/water/deep/dense,
+/area/ruin/space/ninja_zen)
+
+"dTO" = (
+/obj/structure/railing{
+ dir = 4
+ },
+/obj/effect/turf_decal/weather/snow/corner{
+ dir = 1
+ },
+/turf/simulated/floor/indestructible/beach/water/deep/dense,
+/area/ruin/space/ninja_zen)
+
+"dUz" = (
+/obj/structure/railing{
+ dir = 8
+ },
+/obj/effect/turf_decal/weather/snow/corner{
+ dir = 1
+ },
+/turf/simulated/floor/indestructible/beach/water/deep/dense,
+/area/ruin/space/ninja_zen)
+
+"dXa" = (
+/obj/effect/turf_decal/weather/snow/corner{
+ dir = 6
+ },
+/turf/simulated/floor/indestructible/beach/water/deep/dense,
+/area/ruin/space/ninja_zen)
+
+"dYY" = (
+/obj/effect/turf_decal/weather/snow/corner{
+ dir = 10
+ },
+/turf/simulated/floor/indestructible/beach/water/deep/dense,
+/area/ruin/space/ninja_zen)
+
+"eaU" = (
+/obj/effect/turf_decal/weather/snow/corner,
+/obj/structure/railing{
+ dir = 8
+ },
+/turf/simulated/floor/indestructible/beach/water/deep/dense,
+/area/ruin/space/ninja_zen)
+
+"eia" = (
+/obj/effect/turf_decal/weather/snow/corner,
+/obj/structure/railing{
+ dir = 4
+ },
+/turf/simulated/floor/indestructible/beach/water/deep/dense,
+/area/ruin/space/ninja_zen)
+
+"ejI" = (
+/obj/structure/flora/grass/both,
+/mob/living/simple_animal/pet/penguin/emperor,
+/turf/simulated/floor/indestructible/snow,
+/area/ruin/space/ninja_zen)
+
+"ejV" = (
+/mob/living/simple_animal/pet/penguin/baby,
+/turf/simulated/floor/indestructible/snow,
+/area/ruin/space/ninja_zen)
+
+"ekh" = (
+/obj/structure/flora/tree/dead,
+/obj/structure/flora/ausbushes/brflowers,
+/turf/simulated/floor/indestructible/snow,
+/area/ruin/space/ninja_zen)
+
+"eph" = (
+/obj/structure/railing{
+ dir = 4
+ },
+/obj/effect/turf_decal/weather/snow/corner,
+/turf/simulated/floor/indestructible/beach/water/deep/dense,
+/area/ruin/space/ninja_zen)
+
+"epx" = (
+/obj/effect/turf_decal/siding/thinplating{
+ dir = 4
+ },
+/obj/effect/turf_decal/weather/snow/corner{
+ dir = 4
+ },
+/turf/simulated/floor/wood/cherry,
+/area/ruin/space/ninja_zen)
+
+"eqJ" = (
+/obj/structure/railing{
+ dir = 8
+ },
+/obj/structure/flora/grass/both,
+/turf/simulated/floor/indestructible/snow,
+/area/ruin/space/ninja_zen)
+
+"hFk" = (
+/turf/simulated/wall/mineral/wood,
+/area/ruin/space/ninja_zen)
+
+"hDU" = (
+/obj/effect/turf_decal/siding/wood{
+ dir = 1
+ },
+/obj/effect/turf_decal/siding/wood,
+/obj/structure/mineral_door/wood/paperframe,
+/turf/simulated/floor/plasteel{
+ dir = 1;
+ icon_state = "sepia"
+ },
+/area/ruin/space/ninja_zen)
+
+"ery" = (
+/obj/effect/mapping_helpers/light{
+ light_power = 3
+ },
+/obj/effect/turf_decal/weather/snow/corner{
+ dir = 4
+ },
+/turf/simulated/floor/indestructible/asteroid,
+/area/ruin/space/ninja_zen)
+
+"eLT" = (
+/obj/effect/turf_decal/siding/wood{
+ dir = 4
+ },
+/obj/item/twohanded/required/kirbyplants{
+ icon_state = "plant-34";
+ tag = "icon-plant-34"
+ },
+/obj/effect/turf_decal/siding/wood/corner{
+ dir = 4
+ },
+/turf/simulated/floor/wood{
+ icon_state = "fancy-wood-oak"
+ },
+/area/ruin/space/ninja_zen)
+
+"eNb" = (
+/obj/effect/turf_decal/siding/wood{
+ dir = 1
+ },
+/turf/simulated/floor/carpet/green,
+/area/ruin/space/ninja_zen)
+
+"esx" = (
+/obj/machinery/light{
+ dir = 1;
+ switchcount = 50
+ },
+/obj/effect/turf_decal/siding/wood{
+ dir = 1
+ },
+/turf/simulated/floor/carpet/green,
+/area/ruin/space/ninja_zen)
+
+"euF" = (
+/obj/effect/turf_decal/siding/wood{
+ dir = 1
+ },
+/obj/effect/turf_decal/siding/wood/corner{
+ dir = 4
+ },
+/turf/simulated/floor/carpet/green,
+/area/ruin/space/ninja_zen)
+
+"nXT" = (
+/obj/effect/turf_decal/siding/wood{
+ dir = 4
+ },
+/obj/effect/turf_decal/siding/wood{
+ dir = 8
+ },
+/obj/structure/mineral_door/wood/paperframe,
+/turf/simulated/floor/plasteel{
+ dir = 1;
+ icon_state = "sepia"
+ },
+/area/ruin/space/ninja_zen)
+
+"eyD" = (
+/obj/effect/turf_decal/siding/wood{
+ dir = 1
+ },
+/obj/effect/turf_decal/siding/wood/corner{
+ dir = 1
+ },
+/obj/effect/turf_decal/siding/wood/corner{
+ dir = 4
+ },
+/turf/simulated/floor/wood{
+ icon_state = "fancy-wood-oak"
+ },
+/area/ruin/space/ninja_zen)
+
+"nYn" = (
+/turf/simulated/floor/wood{
+ icon_state = "fancy-wood-oak"
+ },
+/area/ruin/space/ninja_zen)
+
+"fCS" = (
+/turf/simulated/floor/carpet/blue,
+/area/ruin/space/ninja_zen)
+
+"eKi" = (
+/obj/machinery/light{
+ dir = 1;
+ switchcount = 50
+ },
+/turf/simulated/floor/carpet/blue,
+/area/ruin/space/ninja_zen)
+
+"eyZ" = (
+/obj/item/flag/ninja,
+/obj/effect/turf_decal/siding/wood{
+ dir = 10
+ },
+/turf/simulated/floor/wood{
+ icon_state = "fancy-wood-oak"
+ },
+/area/ruin/space/ninja_zen)
+
+"eAy" = (
+/obj/item/storage/firstaid/brute{
+ pixel_x = 4;
+ pixel_y = 4
+ },
+/obj/item/storage/firstaid/regular,
+/obj/structure/table/wood/fancy/royalblue,
+/obj/effect/turf_decal/siding/wood,
+/turf/simulated/floor/wood{
+ icon_state = "fancy-wood-oak"
+ },
+/area/ruin/space/ninja_zen)
+
+"eAK" = (
+/obj/structure/rack,
+/obj/item/toy/katana{
+ desc = "Not really usefull in a real fight";
+ name = "training katana"
+ },
+/obj/effect/turf_decal/siding/wood,
+/turf/simulated/floor/wood{
+ icon_state = "fancy-wood-oak"
+ },
+/area/ruin/space/ninja_zen)
+
+"eBc" = (
+/obj/structure/rack,
+/obj/item/twohanded/bostaff,
+/obj/effect/turf_decal/siding/wood,
+/turf/simulated/floor/wood{
+ icon_state = "fancy-wood-oak"
+ },
+/area/ruin/space/ninja_zen)
+
+"eCv" = (
+/obj/structure/rack,
+/obj/item/twohanded/bamboospear,
+/obj/effect/turf_decal/siding/wood,
+/turf/simulated/floor/wood{
+ icon_state = "fancy-wood-oak"
+ },
+/area/ruin/space/ninja_zen)
+
+"eFk" = (
+/obj/structure/rack,
+/obj/item/oar{
+ desc = "Редко можно увидеть весло с именем. В чём его тайна? Почему его зовут так? Может это связано с некой древней легендой? Или лодочник, что владел им раньше просто оставил на нём свою подпись? Эта информация сокрыта за туманом времени...";
+ name = "Миямото Мусаси"
+ },
+/obj/effect/turf_decal/siding/wood,
+/turf/simulated/floor/wood{
+ icon_state = "fancy-wood-oak"
+ },
+/area/ruin/space/ninja_zen)
+
+"eHj" = (
+/obj/item/storage/firstaid/ancient{
+ pixel_x = 3;
+ pixel_y = 5
+ },
+/obj/item/storage/firstaid/fire,
+/obj/structure/table/wood/fancy/royalblue,
+/obj/effect/turf_decal/siding/wood,
+/turf/simulated/floor/wood{
+ icon_state = "fancy-wood-oak"
+ },
+/area/ruin/space/ninja_zen)
+
+"eIx" = (
+/obj/item/flag/ninja,
+/obj/effect/turf_decal/siding/wood{
+ dir = 6
+ },
+/turf/simulated/floor/wood{
+ icon_state = "fancy-wood-oak"
+ },
+/area/ruin/space/ninja_zen)
+
+"eIy" = (
+/obj/effect/turf_decal/siding/wood{
+ dir = 1
+ },
+/obj/effect/turf_decal/siding/wood/corner{
+ dir = 1
+ },
+/turf/simulated/floor/carpet/green,
+/area/ruin/space/ninja_zen)
+
+"fbH" = (
+/obj/effect/turf_decal/siding/wood{
+ dir = 5
+ },
+/turf/simulated/floor/carpet/green,
+/area/ruin/space/ninja_zen)
+
+"gwP" = (
+/obj/effect/turf_decal/siding/wood{
+ dir = 4
+ },
+/obj/item/flag/ninja,
+/turf/simulated/floor/wood{
+ icon_state = "fancy-wood-oak"
+ },
+/area/ruin/space/ninja_zen)
+
+"nIG" = (
+/turf/simulated/floor/carpet/green,
+/area/ruin/space/ninja_zen)
+
+"eKa" = (
+/obj/effect/turf_decal/siding/wood/corner,
+/turf/simulated/floor/carpet/green,
+/area/ruin/space/ninja_zen)
+
+"hnm" = (
+/obj/effect/turf_decal/siding/wood,
+/turf/simulated/floor/carpet/green,
+/area/ruin/space/ninja_zen)
+
+"fwi" = (
+/obj/effect/turf_decal/siding/wood,
+/obj/effect/turf_decal/siding/wood/corner,
+/turf/simulated/floor/carpet/green,
+/area/ruin/space/ninja_zen)
+
+"fCu" = (
+/obj/effect/turf_decal/siding/wood,
+/obj/effect/turf_decal/siding/wood/corner{
+ dir = 8
+ },
+/obj/machinery/light/small{
+ brightness_range = 2;
+ light_range = 2;
+ nightshift_light_range = 2;
+ tag = "icon-bulb1 (WEST)";
+ throw_range = 2
+ },
+/obj/effect/turf_decal/siding/wood/corner,
+/turf/simulated/floor/wood{
+ icon_state = "fancy-wood-oak"
+ },
+/area/ruin/space/ninja_zen)
+
+"fFD" = (
+/obj/effect/turf_decal/siding/wood/corner{
+ dir = 8
+ },
+/turf/simulated/floor/carpet/green,
+/area/ruin/space/ninja_zen)
+
+"glc" = (
+/obj/effect/turf_decal/siding/wood{
+ dir = 4
+ },
+/turf/simulated/floor/carpet/green,
+/area/ruin/space/ninja_zen)
+
+"nct" = (
+/obj/structure/window/full/paperframe,
+/turf/simulated/floor/wood{
+ icon_state = "fancy-wood-cherry"
+ },
+/area/ruin/space/ninja_zen)
+
+"tcW" = (
+/turf/simulated/floor/indestructible/asteroid,
+/area/ruin/space/ninja_zen)
+
+"nFg" = (
+/obj/effect/turf_decal/siding/wood{
+ dir = 4
+ },
+/obj/item/twohanded/required/kirbyplants{
+ icon_state = "plant-34";
+ tag = "icon-plant-34"
+ },
+/turf/simulated/floor/wood{
+ icon_state = "fancy-wood-oak"
+ },
+/area/ruin/space/ninja_zen)
+
+"nPr" = (
+/obj/effect/turf_decal/siding/wood{
+ dir = 4
+ },
+/obj/machinery/light/small{
+ dir = 4;
+ tag = "icon-bulb1 (EAST)"
+ },
+/turf/simulated/floor/carpet/green,
+/area/ruin/space/ninja_zen)
+
+"ncR" = (
+/obj/effect/turf_decal/siding/wood{
+ dir = 1
+ },
+/obj/effect/turf_decal/siding/wood,
+/obj/effect/turf_decal/siding/wood/corner{
+ dir = 8
+ },
+/obj/structure/mineral_door/wood/paperframe,
+/turf/simulated/floor/plasteel{
+ dir = 1;
+ icon_state = "sepia"
+ },
+/area/ruin/space/ninja_zen)
+
+"eOx" = (
+/obj/effect/turf_decal/siding/wood{
+ dir = 1
+ },
+/obj/effect/turf_decal/siding/wood,
+/obj/effect/turf_decal/siding/wood/corner,
+/obj/structure/mineral_door/wood/paperframe,
+/turf/simulated/floor/plasteel{
+ dir = 1;
+ icon_state = "sepia"
+ },
+/area/ruin/space/ninja_zen)
+
+"eOI" = (
+/obj/effect/turf_decal/siding/wood{
+ dir = 9
+ },
+/turf/simulated/floor/wood/fancy/light,
+/area/ruin/space/ninja_zen)
+
+"ePJ" = (
+/obj/effect/turf_decal/siding/wood{
+ dir = 1
+ },
+/turf/simulated/floor/wood/fancy/light,
+/area/ruin/space/ninja_zen)
+
+"eQT" = (
+/obj/effect/turf_decal/siding/wood{
+ dir = 1
+ },
+/obj/effect/turf_decal/siding/wood/corner{
+ dir = 1
+ },
+/turf/simulated/floor/wood/fancy/light,
+/area/ruin/space/ninja_zen)
+
+"eRw" = (
+/obj/effect/turf_decal/siding/wood{
+ dir = 5
+ },
+/turf/simulated/floor/wood/fancy/light,
+/area/ruin/space/ninja_zen)
+
+"eTW" = (
+/obj/machinery/light/small{
+ dir = 4;
+ tag = "icon-bulb1 (EAST)"
+ },
+/turf/simulated/floor/carpet/blue,
+/area/ruin/space/ninja_zen)
+
+"ggg" = (
+/obj/effect/turf_decal/siding/wood{
+ dir = 8
+ },
+/obj/machinery/light/small{
+ dir = 8
+ },
+/turf/simulated/floor/carpet/green,
+/area/ruin/space/ninja_zen)
+
+"feM" = (
+/obj/structure/flora/grass/both,
+/obj/effect/mapping_helpers/light{
+ light_power = 3
+ },
+/turf/simulated/floor/indestructible/snow,
+/area/ruin/space/ninja_zen)
+
+"fhO" = (
+/obj/effect/mapping_helpers/light{
+ light_power = 3
+ },
+/obj/structure/flora/tree/pine{
+ pixel_x = 1
+ },
+/turf/simulated/floor/indestructible/snow,
+/area/ruin/space/ninja_zen)
+
+"fiS" = (
+/obj/effect/turf_decal/siding/wood/corner{
+ dir = 4
+ },
+/turf/simulated/floor/carpet/green,
+/area/ruin/space/ninja_zen)
+
+"fjA" = (
+/obj/effect/turf_decal/siding{
+ color = "#444444";
+ dir = 9
+ },
+/obj/effect/turf_decal/tile{
+ alpha = 128;
+ color = "#363636";
+ icon_state = "diagonal_edge"
+ },
+/turf/simulated/floor/plasteel,
+/area/ruin/space/ninja_zen)
+
+"fjX" = (
+/obj/effect/turf_decal/siding{
+ color = "#444444";
+ dir = 1
+ },
+/obj/effect/turf_decal/tile{
+ alpha = 128;
+ color = "#363636";
+ icon_state = "diagonal_edge"
+ },
+/turf/simulated/floor/plasteel,
+/area/ruin/space/ninja_zen)
+
+"fkF" = (
+/obj/effect/turf_decal/siding{
+ color = "#444444";
+ dir = 1
+ },
+/obj/effect/turf_decal/tile{
+ alpha = 128;
+ color = "#363636";
+ icon_state = "diagonal_edge"
+ },
+/obj/machinery/light{
+ dir = 1;
+ switchcount = 50
+ },
+/turf/simulated/floor/plasteel,
+/area/ruin/space/ninja_zen)
+
+"fnn" = (
+/obj/effect/turf_decal/siding{
+ color = "#444444";
+ dir = 1
+ },
+/obj/effect/turf_decal/tile{
+ alpha = 128;
+ color = "#363636";
+ icon_state = "diagonal_edge"
+ },
+/obj/effect/landmark/ninja_spawn,
+/turf/simulated/floor/plasteel,
+/area/ruin/space/ninja_zen)
+
+"fom" = (
+/obj/structure/bed,
+/obj/effect/turf_decal/siding{
+ color = "#444444";
+ dir = 5
+ },
+/obj/effect/turf_decal/tile{
+ alpha = 128;
+ color = "#363636";
+ icon_state = "diagonal_edge"
+ },
+/obj/item/bedsheet/black,
+/turf/simulated/floor/plasteel,
+/area/ruin/space/ninja_zen)
+
+"nsA" = (
+/obj/effect/turf_decal/siding/wood{
+ dir = 8
+ },
+/turf/simulated/floor/wood{
+ icon_state = "fancy-wood-oak"
+ },
+/area/ruin/space/ninja_zen)
+
+"nyJ" = (
+/obj/effect/turf_decal/siding/wood{
+ dir = 4
+ },
+/turf/simulated/floor/wood{
+ icon_state = "fancy-wood-oak"
+ },
+/area/ruin/space/ninja_zen)
+
+"idL" = (
+/obj/structure/chair/sofa/corp/left{
+ dir = 4
+ },
+/turf/simulated/floor/wood{
+ icon_state = "fancy-wood-oak"
+ },
+/area/ruin/space/ninja_zen)
+
+"foD" = (
+/obj/machinery/light/small{
+ dir = 1
+ },
+/turf/simulated/floor/wood{
+ icon_state = "fancy-wood-oak"
+ },
+/area/ruin/space/ninja_zen)
+
+"foG" = (
+/obj/effect/turf_decal/siding/wood{
+ dir = 4
+ },
+/obj/effect/turf_decal/siding/wood/corner{
+ dir = 4
+ },
+/turf/simulated/floor/wood{
+ icon_state = "fancy-wood-oak"
+ },
+/area/ruin/space/ninja_zen)
+
+"eRk" = (
+/obj/effect/turf_decal/siding/wood{
+ dir = 8
+ },
+/turf/simulated/floor/wood/fancy/light,
+/area/ruin/space/ninja_zen)
+
+"fqF" = (
+/obj/effect/turf_decal/siding{
+ color = "#444444";
+ dir = 9
+ },
+/turf/simulated/floor/plasteel{
+ dir = 1;
+ icon_state = "tatami";
+ name = "Tatami"
+ },
+/area/ruin/space/ninja_zen)
+
+"fsX" = (
+/obj/effect/turf_decal/siding{
+ color = "#444444";
+ dir = 1
+ },
+/turf/simulated/floor/plasteel{
+ dir = 1;
+ icon_state = "tatami";
+ name = "Tatami"
+ },
+/area/ruin/space/ninja_zen)
+
+"fts" = (
+/obj/effect/turf_decal/siding{
+ color = "#444444";
+ dir = 5
+ },
+/turf/simulated/floor/plasteel{
+ dir = 1;
+ icon_state = "tatami";
+ name = "Tatami"
+ },
+/area/ruin/space/ninja_zen)
+
+"kfM" = (
+/obj/effect/turf_decal/siding/wood{
+ dir = 4
+ },
+/turf/simulated/floor/wood/fancy/light,
+/area/ruin/space/ninja_zen)
+
+"fvn" = (
+/obj/effect/turf_decal/siding/wood/corner{
+ dir = 1
+ },
+/turf/simulated/floor/carpet/green,
+/area/ruin/space/ninja_zen)
+
+"gyV" = (
+/obj/effect/turf_decal/siding/wood{
+ dir = 4
+ },
+/obj/item/twohanded/required/kirbyplants{
+ icon_state = "plant-34";
+ tag = "icon-plant-34"
+ },
+/obj/effect/turf_decal/siding/wood/corner,
+/turf/simulated/floor/wood{
+ icon_state = "fancy-wood-oak"
+ },
+/area/ruin/space/ninja_zen)
+
+"gEA" = (
+/obj/effect/turf_decal/siding/wood,
+/obj/effect/turf_decal/siding/wood/corner{
+ dir = 8
+ },
+/obj/effect/turf_decal/siding/wood/corner,
+/turf/simulated/floor/carpet/green,
+/area/ruin/space/ninja_zen)
+
+"fxA" = (
+/obj/effect/turf_decal/tile{
+ alpha = 128;
+ color = "#363636";
+ icon_state = "diagonal_edge"
+ },
+/obj/effect/turf_decal/siding{
+ color = "#444444";
+ dir = 10
+ },
+/turf/simulated/floor/plasteel,
+/area/ruin/space/ninja_zen)
+
+"fxY" = (
+/obj/effect/turf_decal/tile{
+ alpha = 128;
+ color = "#363636";
+ icon_state = "diagonal_edge"
+ },
+/obj/effect/turf_decal/siding{
+ color = "#444444"
+ },
+/obj/structure/table/abductor{
+ color = "#99ff99";
+ name = "table"
+ },
+/turf/simulated/floor/plasteel,
+/area/ruin/space/ninja_zen)
+
+"fxZ" = (
+/obj/effect/turf_decal/siding{
+ color = "#444444"
+ },
+/obj/effect/turf_decal/tile{
+ alpha = 128;
+ color = "#363636";
+ icon_state = "diagonal_edge"
+ },
+/obj/structure/table/abductor{
+ color = "#99ff99";
+ name = "table"
+ },
+/obj/item/storage/box/lights/mixed,
+/turf/simulated/floor/plasteel,
+/area/ruin/space/ninja_zen)
+
+"gFq" = (
+/obj/effect/turf_decal/siding{
+ color = "#444444"
+ },
+/obj/effect/turf_decal/tile{
+ alpha = 128;
+ color = "#363636";
+ icon_state = "diagonal_edge"
+ },
+/turf/simulated/floor/plasteel,
+/area/ruin/space/ninja_zen)
+
+"fCL" = (
+/obj/effect/turf_decal/siding{
+ color = "#444444";
+ dir = 6
+ },
+/obj/effect/turf_decal/tile{
+ alpha = 128;
+ color = "#363636";
+ icon_state = "diagonal_edge"
+ },
+/obj/structure/dresser,
+/turf/simulated/floor/plasteel,
+/area/ruin/space/ninja_zen)
+
+"gSH" = (
+/obj/structure/chair/sofa/corp/right{
+ dir = 4
+ },
+/turf/simulated/floor/wood{
+ icon_state = "fancy-wood-oak"
+ },
+/area/ruin/space/ninja_zen)
+
+"fCP" = (
+/obj/structure/table/wood,
+/obj/item/reagent_containers/food/drinks/drinkingglass/devilskiss{
+ pixel_x = -6
+ },
+/turf/simulated/floor/wood{
+ icon_state = "fancy-wood-oak"
+ },
+/area/ruin/space/ninja_zen)
+
+"gLj" = (
+/obj/effect/turf_decal/siding/wood/corner,
+/obj/structure/railing/corner,
+/obj/effect/turf_decal/siding/wood{
+ dir = 4
+ },
+/obj/effect/turf_decal/siding/wood/corner,
+/turf/simulated/floor/wood{
+ icon_state = "fancy-wood-oak"
+ },
+/area/ruin/space/ninja_zen)
+
+"hbV" = (
+/obj/effect/turf_decal/siding/wood,
+/obj/structure/railing,
+/turf/simulated/floor/carpet/blue,
+/area/ruin/space/ninja_zen)
+
+"gQs" = (
+/obj/effect/turf_decal/siding/wood{
+ dir = 8
+ },
+/obj/structure/railing/corner{
+ dir = 8
+ },
+/obj/effect/turf_decal/siding/wood/corner{
+ dir = 8
+ },
+/turf/simulated/floor/wood/fancy/light,
+/area/ruin/space/ninja_zen)
+
+"pOr" = (
+/obj/effect/turf_decal/siding{
+ color = "#444444";
+ dir = 8
+ },
+/turf/simulated/floor/plasteel{
+ dir = 1;
+ icon_state = "tatami_nolines";
+ name = "Tatami"
+ },
+/area/ruin/space/ninja_zen)
+
+"fnh" = (
+/turf/simulated/floor/plasteel{
+ dir = 1;
+ icon_state = "tatami_nolines";
+ name = "Tatami"
+ },
+/area/ruin/space/ninja_zen)
+
+"hSY" = (
+/obj/effect/turf_decal/siding{
+ color = "#444444";
+ dir = 4
+ },
+/turf/simulated/floor/plasteel{
+ dir = 1;
+ icon_state = "tatami_nolines";
+ name = "Tatami"
+ },
+/area/ruin/space/ninja_zen)
+
+"gXC" = (
+/obj/effect/turf_decal/siding/wood{
+ dir = 4
+ },
+/obj/structure/railing/corner,
+/obj/effect/turf_decal/siding/wood/corner,
+/turf/simulated/floor/wood/fancy/light,
+/area/ruin/space/ninja_zen)
+
+"hlQ" = (
+/obj/effect/turf_decal/siding/wood{
+ dir = 4
+ },
+/obj/item/flag/ninja,
+/obj/effect/turf_decal/siding/wood/corner,
+/turf/simulated/floor/wood{
+ icon_state = "fancy-wood-oak"
+ },
+/area/ruin/space/ninja_zen)
+
+"fCQ" = (
+/obj/effect/turf_decal/siding/wood/corner{
+ dir = 8
+ },
+/obj/effect/turf_decal/siding/wood{
+ dir = 6
+ },
+/obj/effect/turf_decal/siding/wood/corner{
+ dir = 8
+ },
+/turf/simulated/floor/carpet/green,
+/area/ruin/space/ninja_zen)
+
+"fDl" = (
+/obj/structure/flora/grass/green,
+/turf/simulated/floor/indestructible/snow,
+/area/ruin/space/ninja_zen)
+
+"mUx" = (
+/obj/effect/turf_decal/siding/wood,
+/obj/effect/turf_decal/siding/wood{
+ dir = 1
+ },
+/obj/structure/mineral_door/wood/paperframe,
+/turf/simulated/floor/plasteel{
+ dir = 1;
+ icon_state = "sepia"
+ },
+/area/ruin/space/ninja_zen)
+
+"hfX" = (
+/obj/effect/turf_decal/siding/thinplating{
+ dir = 8
+ },
+/obj/structure/railing{
+ dir = 8
+ },
+/turf/simulated/floor/plasteel{
+ icon_state = "rampbottom";
+ tag = "icon-stage_stairs"
+ },
+/area/ruin/space/ninja_zen)
+
+"fDZ" = (
+/obj/effect/turf_decal/siding/thinplating{
+ dir = 4
+ },
+/obj/structure/railing{
+ dir = 4
+ },
+/turf/simulated/floor/plasteel{
+ icon_state = "rampbottom";
+ tag = "icon-stage_stairs"
+ },
+/area/ruin/space/ninja_zen)
+
+"mhh" = (
+/obj/item/twohanded/required/kirbyplants{
+ icon_state = "plant-34";
+ tag = "icon-plant-34"
+ },
+/turf/simulated/floor/wood{
+ icon_state = "fancy-wood-oak"
+ },
+/area/ruin/space/ninja_zen)
+
+"mhN" = (
+/obj/effect/turf_decal/siding/wood{
+ dir = 8
+ },
+/obj/structure/railing{
+ dir = 8
+ },
+/turf/simulated/floor/wood/fancy/light,
+/area/ruin/space/ninja_zen)
+
+"mGy" = (
+/obj/effect/turf_decal/siding{
+ color = "#444444";
+ dir = 8
+ },
+/turf/simulated/floor/plasteel{
+ dir = 1;
+ icon_state = "tatami";
+ name = "Tatami"
+ },
+/area/ruin/space/ninja_zen)
+
+"fzw" = (
+/turf/simulated/floor/plasteel{
+ dir = 1;
+ icon_state = "tatami";
+ name = "Tatami"
+ },
+/area/ruin/space/ninja_zen)
+
+"mHR" = (
+/obj/effect/turf_decal/siding{
+ color = "#444444";
+ dir = 4
+ },
+/turf/simulated/floor/plasteel{
+ dir = 1;
+ icon_state = "tatami";
+ name = "Tatami"
+ },
+/area/ruin/space/ninja_zen)
+
+"fER" = (
+/obj/effect/turf_decal/siding/wood{
+ dir = 4
+ },
+/obj/structure/railing{
+ dir = 4
+ },
+/turf/simulated/floor/wood/fancy/light,
+/area/ruin/space/ninja_zen)
+
+"fFf" = (
+/obj/machinery/chem_dispenser/beer/upgraded,
+/obj/structure/table/wood/poker,
+/obj/effect/turf_decal/siding/wood{
+ dir = 9
+ },
+/turf/simulated/floor/carpet/black,
+/area/ruin/space/ninja_zen)
+
+"fGm" = (
+/obj/machinery/chem_dispenser/soda/upgraded,
+/obj/structure/table/wood/poker,
+/obj/effect/turf_decal/siding/wood{
+ dir = 1
+ },
+/turf/simulated/floor/carpet/black,
+/area/ruin/space/ninja_zen)
+
+"fGE" = (
+/obj/machinery/vending/boozeomat,
+/obj/effect/turf_decal/siding/wood{
+ dir = 1
+ },
+/turf/simulated/floor/carpet/black,
+/area/ruin/space/ninja_zen)
+
+"fJE" = (
+/obj/structure/fermenting_barrel,
+/obj/effect/turf_decal/siding/wood{
+ dir = 1
+ },
+/obj/effect/turf_decal/siding/wood/corner{
+ dir = 4
+ },
+/turf/simulated/floor/carpet/black,
+/area/ruin/space/ninja_zen)
+
+"kuh" = (
+/turf/simulated/floor/carpet/black,
+/area/ruin/space/ninja_zen)
+
+"hIm" = (
+/obj/item/twohanded/required/kirbyplants{
+ icon_state = "plant-34";
+ tag = "icon-plant-34"
+ },
+/obj/effect/turf_decal/siding/wood{
+ dir = 8
+ },
+/obj/effect/turf_decal/siding/wood/corner{
+ dir = 1
+ },
+/turf/simulated/floor/wood{
+ icon_state = "fancy-wood-oak"
+ },
+/area/ruin/space/ninja_zen)
+
+"ggC" = (
+/obj/effect/turf_decal/siding{
+ color = "#444444";
+ dir = 9
+ },
+/turf/simulated/floor/plasteel{
+ dir = 1;
+ icon_state = "sepia"
+ },
+/area/ruin/space/ninja_zen)
+
+"fLb" = (
+/obj/effect/turf_decal/siding{
+ color = "#444444";
+ dir = 5
+ },
+/obj/structure/safe/floor,
+/obj/item/reagent_containers/food/snacks/chinese/rice,
+/obj/item/reagent_containers/food/snacks/chinese/rice,
+/obj/item/reagent_containers/food/snacks/chinese/rice,
+/obj/item/reagent_containers/food/snacks/grown/rice,
+/obj/item/reagent_containers/food/snacks/grown/rice,
+/obj/item/reagent_containers/food/snacks/grown/rice,
+/obj/item/seeds/wheat/rice,
+/obj/item/seeds/wheat/rice,
+/obj/item/seeds/wheat/rice,
+/obj/item/seeds/wheat/rice,
+/obj/item/clothing/head/rice_hat,
+/obj/item/reagent_containers/food/condiment/rice,
+/obj/item/reagent_containers/food/condiment/rice,
+/obj/item/reagent_containers/food/condiment/rice,
+/obj/item/reagent_containers/food/condiment/rice,
+/obj/item/reagent_containers/food/condiment/rice,
+/obj/item/reagent_containers/food/snacks/grown/rice,
+/turf/simulated/floor/plasteel{
+ dir = 1;
+ icon_state = "sepia"
+ },
+/area/ruin/space/ninja_zen)
+
+"mEY" = (
+/obj/structure/flora/junglebush,
+/turf/simulated/floor/indestructible/grass,
+/area/ruin/space/ninja_zen)
+
+"fNY" = (
+/obj/effect/turf_decal/siding/green{
+ dir = 4
+ },
+/obj/structure/flora/ausbushes/sparsegrass,
+/turf/simulated/floor/indestructible/grass,
+/area/ruin/space/ninja_zen)
+
+"fPl" = (
+/obj/structure/flora/junglebush,
+/obj/effect/turf_decal/siding/green{
+ dir = 8
+ },
+/turf/simulated/floor/indestructible/grass,
+/area/ruin/space/ninja_zen)
+
+"hLh" = (
+/turf/simulated/floor/indestructible/grass,
+/area/ruin/space/ninja_zen)
+
+"maD" = (
+/obj/item/flag/ninja,
+/turf/simulated/floor/wood{
+ icon_state = "fancy-wood-oak"
+ },
+/area/ruin/space/ninja_zen)
+
+"hVd" = (
+/obj/structure/chair{
+ dir = 4
+ },
+/turf/simulated/floor/carpet/black,
+/area/ruin/space/ninja_zen)
+
+"hXp" = (
+/obj/effect/turf_decal/siding/wood{
+ dir = 8
+ },
+/obj/effect/turf_decal/siding/wood/corner{
+ dir = 1
+ },
+/turf/simulated/floor/carpet/cyan,
+/area/ruin/space/ninja_zen)
+
+"fQx" = (
+/obj/effect/turf_decal/siding/wood{
+ dir = 4
+ },
+/obj/effect/turf_decal/siding/wood/corner{
+ dir = 4
+ },
+/turf/simulated/floor/carpet/cyan,
+/area/ruin/space/ninja_zen)
+
+"fRd" = (
+/obj/structure/chair/sofa/corp/right{
+ dir = 8
+ },
+/turf/simulated/floor/carpet/black,
+/area/ruin/space/ninja_zen)
+
+"fUp" = (
+/obj/structure/flora/grass/both,
+/obj/structure/flora/grass/green,
+/turf/simulated/floor/indestructible/snow,
+/area/ruin/space/ninja_zen)
+
+"nVI" = (
+/obj/effect/mapping_helpers/light{
+ light_power = 3
+ },
+/turf/simulated/floor/indestructible/snow,
+/area/ruin/space/ninja_zen)
+
+"qim" = (
+/obj/effect/turf_decal/siding/wood{
+ dir = 8
+ },
+/turf/simulated/floor/carpet/black,
+/area/ruin/space/ninja_zen)
+
+"huE" = (
+/obj/item/flag/ninja,
+/obj/effect/turf_decal/siding/wood{
+ dir = 8
+ },
+/turf/simulated/floor/wood{
+ icon_state = "fancy-wood-oak"
+ },
+/area/ruin/space/ninja_zen)
+
+"ico" = (
+/obj/effect/turf_decal/siding{
+ color = "#444444";
+ dir = 10
+ },
+/obj/structure/toilet{
+ dir = 1;
+ layer = 4
+ },
+/turf/simulated/floor/plasteel{
+ dir = 1;
+ icon_state = "sepia"
+ },
+/area/ruin/space/ninja_zen)
+
+"fVE" = (
+/obj/effect/turf_decal/siding{
+ color = "#444444";
+ dir = 6
+ },
+/obj/structure/mirror{
+ pixel_y = -30
+ },
+/obj/structure/sink{
+ dir = 1
+ },
+/turf/simulated/floor/plasteel{
+ dir = 1;
+ icon_state = "sepia"
+ },
+/area/ruin/space/ninja_zen)
+
+"igq" = (
+/obj/structure/flora/junglebush,
+/obj/structure/flora/rock/pile/largejungle{
+ icon_state = "rocks1"
+ },
+/obj/structure/flora/tree/jungle/small,
+/turf/simulated/floor/indestructible/grass,
+/area/ruin/space/ninja_zen)
+
+"iiB" = (
+/obj/effect/turf_decal/siding/green{
+ dir = 4
+ },
+/obj/structure/flora/ausbushes/ywflowers,
+/obj/structure/flora/ausbushes/brflowers,
+/turf/simulated/floor/indestructible/grass,
+/area/ruin/space/ninja_zen)
+
+"uQK" = (
+/obj/effect/mapping_helpers/light{
+ light_power = 3
+ },
+/turf/simulated/floor/indestructible/asteroid,
+/area/ruin/space/ninja_zen)
+
+"fYV" = (
+/obj/effect/turf_decal/siding/green{
+ dir = 8
+ },
+/obj/structure/flora/ausbushes/reedbush,
+/turf/simulated/floor/indestructible/grass,
+/area/ruin/space/ninja_zen)
+
+"fGl" = (
+/obj/structure/flora/rock/pile/largejungle{
+ icon_state = "rocks2"
+ },
+/obj/structure/flora/tree/jungle/small,
+/turf/simulated/floor/indestructible/grass,
+/area/ruin/space/ninja_zen)
+
+"ipE" = (
+/obj/structure/flora/ausbushes/sparsegrass,
+/turf/simulated/floor/indestructible/grass,
+/area/ruin/space/ninja_zen)
+
+"fNy" = (
+/obj/structure/chair{
+ dir = 4
+ },
+/obj/effect/turf_decal/siding/wood,
+/turf/simulated/floor/carpet/black,
+/area/ruin/space/ninja_zen)
+
+"fZi" = (
+/obj/effect/turf_decal/siding/wood{
+ dir = 8
+ },
+/obj/effect/turf_decal/siding/wood/corner{
+ dir = 8
+ },
+/turf/simulated/floor/carpet/cyan,
+/area/ruin/space/ninja_zen)
+
+"hJH" = (
+/obj/structure/railing/corner,
+/obj/effect/turf_decal/siding/wood{
+ dir = 4
+ },
+/obj/effect/turf_decal/siding/wood/corner,
+/turf/simulated/floor/carpet/cyan,
+/area/ruin/space/ninja_zen)
+
+"fZo" = (
+/obj/structure/chair/sofa/corp/left{
+ dir = 8
+ },
+/obj/structure/railing,
+/obj/effect/turf_decal/siding/wood,
+/turf/simulated/floor/carpet/black,
+/area/ruin/space/ninja_zen)
+
+"iDq" = (
+/obj/machinery/light/small{
+ dir = 4;
+ tag = "icon-bulb1 (EAST)"
+ },
+/obj/effect/turf_decal/siding/wood{
+ dir = 8
+ },
+/obj/item/twohanded/required/kirbyplants{
+ icon_state = "plant-34";
+ tag = "icon-plant-34"
+ },
+/turf/simulated/floor/wood{
+ icon_state = "fancy-wood-oak"
+ },
+/area/ruin/space/ninja_zen)
+
+"xKJ" = (
+/obj/effect/turf_decal/siding/green,
+/obj/structure/flora/ausbushes/ywflowers,
+/obj/structure/flora/junglebush,
+/turf/simulated/floor/indestructible/grass,
+/area/ruin/space/ninja_zen)
+
+"iEE" = (
+/obj/effect/turf_decal/siding/green,
+/obj/structure/flora/ausbushes/lavendergrass,
+/obj/structure/flora/ausbushes/fernybush,
+/turf/simulated/floor/indestructible/grass,
+/area/ruin/space/ninja_zen)
+
+"iFV" = (
+/obj/effect/turf_decal/siding/green{
+ dir = 6
+ },
+/obj/structure/flora/ausbushes/ppflowers,
+/obj/structure/flora/junglebush,
+/turf/simulated/floor/indestructible/grass,
+/area/ruin/space/ninja_zen)
+
+"gaR" = (
+/obj/structure/flora/junglebush,
+/obj/effect/turf_decal/siding/green{
+ dir = 10
+ },
+/turf/simulated/floor/indestructible/grass,
+/area/ruin/space/ninja_zen)
+
+"gbQ" = (
+/obj/structure/flora/junglebush,
+/obj/effect/turf_decal/siding/green,
+/turf/simulated/floor/indestructible/grass,
+/area/ruin/space/ninja_zen)
+
+"gcK" = (
+/obj/effect/turf_decal/siding/green,
+/obj/structure/flora/ausbushes/palebush,
+/obj/structure/flora/junglebush,
+/turf/simulated/floor/indestructible/grass,
+/area/ruin/space/ninja_zen)
+
+"tdM" = (
+/obj/effect/turf_decal/siding/wood{
+ dir = 8
+ },
+/obj/machinery/light/small{
+ brightness_range = 2;
+ dir = 8;
+ light_range = 2;
+ nightshift_light_range = 2;
+ tag = "icon-bulb1 (WEST)";
+ throw_range = 2
+ },
+/obj/structure/railing/corner{
+ dir = 1
+ },
+/obj/item/radio/intercom/syndicate/directional/west,
+/turf/simulated/floor/wood/fancy/light,
+/area/ruin/space/ninja_zen)
+
+"gdi" = (
+/obj/effect/turf_decal/siding/wood{
+ dir = 4
+ },
+/obj/structure/railing/corner{
+ dir = 4
+ },
+/obj/machinery/light/small{
+ dir = 4;
+ tag = "icon-bulb1 (EAST)"
+ },
+/turf/simulated/floor/wood/fancy/light,
+/area/ruin/space/ninja_zen)
+
+"jOk" = (
+/obj/structure/table/abductor{
+ color = "#99ff99";
+ name = "table"
+ },
+/obj/item/stack/nanopaste{
+ pixel_x = -7
+ },
+/obj/item/storage/toolbox/surgery,
+/obj/machinery/light/small{
+ dir = 8
+ },
+/turf/simulated/floor/plasteel/freezer,
+/area/ruin/space/ninja_zen)
+
+"lkT" = (
+/obj/effect/turf_decal/siding/wood{
+ dir = 8
+ },
+/turf/simulated/floor/carpet/cyan,
+/area/ruin/space/ninja_zen)
+
+"gfR" = (
+/obj/effect/turf_decal/siding/wood{
+ dir = 4
+ },
+/obj/structure/railing{
+ dir = 4
+ },
+/turf/simulated/floor/carpet/cyan,
+/area/ruin/space/ninja_zen)
+
+"ggV" = (
+/obj/effect/baseturf_helper/asteroid/snow{
+ baseturf = /turf/simulated/floor/indestructible/snow;
+ name = "snow baseturf editor"
+ },
+/obj/effect/turf_decal/siding/wood{
+ dir = 8
+ },
+/turf/simulated/floor/carpet/black,
+/area/ruin/space/ninja_zen)
+
+"ghk" = (
+/obj/structure/table/wood/fancy/green,
+/obj/item/reagent_containers/food/snacks/chinese/chowmein{
+ pixel_x = 4;
+ pixel_y = 4
+ },
+/obj/item/reagent_containers/food/snacks/chinese/tao,
+/turf/simulated/floor/wood/fancy/light,
+/area/ruin/space/ninja_zen)
+
+"ghl" = (
+/obj/structure/table/wood/fancy/green,
+/obj/item/reagent_containers/food/snacks/ricepudding,
+/turf/simulated/floor/wood/fancy/light,
+/area/ruin/space/ninja_zen)
+
+"glB" = (
+/obj/effect/turf_decal/siding/wood{
+ dir = 1
+ },
+/obj/effect/turf_decal/siding/wood/corner{
+ dir = 1
+ },
+/turf/simulated/floor/carpet/black,
+/area/ruin/space/ninja_zen)
+
+"gAs" = (
+/obj/effect/turf_decal/siding/wood{
+ dir = 1
+ },
+/obj/item/radio/intercom/syndicate/directional/north,
+/turf/simulated/floor/carpet/black,
+/area/ruin/space/ninja_zen)
+
+"gmb" = (
+/obj/effect/turf_decal/siding/wood{
+ dir = 1
+ },
+/obj/effect/turf_decal/siding/wood/corner{
+ dir = 4
+ },
+/turf/simulated/floor/carpet/black,
+/area/ruin/space/ninja_zen)
+
+"gnr" = (
+/obj/structure/railing{
+ dir = 1
+ },
+/turf/simulated/floor/plasteel{
+ dir = 4;
+ icon_state = "rampbottom";
+ tag = "icon-stage_stairs"
+ },
+/area/ruin/space/ninja_zen)
+
+"goz" = (
+/obj/effect/baseturf_helper/asteroid/snow{
+ baseturf = /turf/simulated/floor/indestructible/snow;
+ name = "snow baseturf editor"
+ },
+/turf/simulated/floor/indestructible/asteroid,
+/area/ruin/space/ninja_zen)
+
+"gpp" = (
+/obj/structure/railing{
+ dir = 1
+ },
+/turf/simulated/floor/plasteel{
+ dir = 8;
+ icon_state = "rampbottom";
+ tag = "icon-stage_stairs"
+ },
+/area/ruin/space/ninja_zen)
+
+"lbe" = (
+/obj/effect/turf_decal/siding/wood{
+ dir = 8
+ },
+/obj/effect/turf_decal/siding/wood{
+ dir = 4
+ },
+/obj/structure/mineral_door/wood/paperframe,
+/turf/simulated/floor/plasteel{
+ dir = 1;
+ icon_state = "sepia"
+ },
+/area/ruin/space/ninja_zen)
+
+"gAV" = (
+/mob/living/carbon/human/lesser/wolpin,
+/turf/simulated/floor/plasteel{
+ dir = 1;
+ icon_state = "tatami";
+ name = "Tatami"
+ },
+/area/ruin/space/ninja_zen)
+
+"eWL" = (
+/obj/machinery/defibrillator_mount/loaded{
+ pixel_x = -30
+ },
+/obj/machinery/optable,
+/obj/machinery/shower{
+ pixel_y = 20
+ },
+/turf/simulated/floor/plasteel/freezer,
+/area/ruin/space/ninja_zen)
+
+"fqO" = (
+/turf/simulated/floor/plasteel/freezer,
+/area/ruin/space/ninja_zen)
+
+"gpK" = (
+/obj/structure/table/wood/fancy/green,
+/obj/item/reagent_containers/food/snacks/chimichanga,
+/turf/simulated/floor/wood/fancy/light,
+/area/ruin/space/ninja_zen)
+
+"kag" = (
+/obj/structure/table/wood/fancy/green,
+/obj/item/reagent_containers/food/drinks/tea{
+ desc = "Don't drink it with sugar!";
+ name = "Green tea";
+ pixel_y = 7
+ },
+/turf/simulated/floor/wood/fancy/light,
+/area/ruin/space/ninja_zen)
+
+"ksB" = (
+/obj/effect/turf_decal/siding/wood,
+/obj/effect/turf_decal/siding/wood/corner{
+ dir = 8
+ },
+/turf/simulated/floor/carpet/black,
+/area/ruin/space/ninja_zen)
+
+"gtO" = (
+/obj/effect/turf_decal/siding/wood,
+/turf/simulated/floor/carpet/black,
+/area/ruin/space/ninja_zen)
+
+"gud" = (
+/obj/effect/turf_decal/siding/wood,
+/obj/effect/turf_decal/siding/wood/corner,
+/turf/simulated/floor/carpet/black,
+/area/ruin/space/ninja_zen)
+
+"gvL" = (
+/obj/structure/railing,
+/turf/simulated/floor/plasteel{
+ dir = 4;
+ icon_state = "rampbottom";
+ tag = "icon-stage_stairs"
+ },
+/area/ruin/space/ninja_zen)
+
+"eSC" = (
+/obj/structure/railing,
+/turf/simulated/floor/plasteel{
+ dir = 8;
+ icon_state = "rampbottom";
+ tag = "icon-stage_stairs"
+ },
+/area/ruin/space/ninja_zen)
+
+"foC" = (
+/obj/machinery/computer/operating,
+/turf/simulated/floor/plasteel/freezer,
+/area/ruin/space/ninja_zen)
+
+"gvQ" = (
+/obj/structure/closet/crate/medical,
+/obj/item/reagent_containers/glass/bottle/morphine,
+/obj/item/storage/box/beakers,
+/obj/item/robot_parts/l_arm,
+/obj/item/robot_parts/r_arm,
+/obj/item/clothing/mask/surgical,
+/obj/item/reagent_containers/iv_bag/bloodsynthetic/oxygenis,
+/obj/item/tank/internals/anesthetic,
+/obj/item/clothing/mask/breath/medical,
+/obj/item/robot_parts/l_leg,
+/obj/item/robot_parts/r_leg,
+/turf/simulated/floor/plasteel/freezer,
+/area/ruin/space/ninja_zen)
+
+"lIw" = (
+/obj/effect/mapping_helpers/light{
+ light_power = 3
+ },
+/obj/structure/flora/ausbushes/brflowers,
+/turf/simulated/floor/indestructible/snow,
+/area/ruin/space/ninja_zen)
+
+"gxr" = (
+/obj/effect/turf_decal/siding/wood{
+ dir = 10
+ },
+/turf/simulated/floor/wood/fancy/light,
+/area/ruin/space/ninja_zen)
+
+"lKY" = (
+/obj/effect/turf_decal/siding/wood,
+/turf/simulated/floor/wood/fancy/light,
+/area/ruin/space/ninja_zen)
+
+"gyg" = (
+/obj/effect/turf_decal/siding/wood{
+ dir = 6
+ },
+/turf/simulated/floor/wood/fancy/light,
+/area/ruin/space/ninja_zen)
+
+"gza" = (
+/obj/machinery/light/small{
+ dir = 4;
+ tag = "icon-bulb1 (EAST)"
+ },
+/obj/item/twohanded/required/kirbyplants{
+ icon_state = "plant-34";
+ tag = "icon-plant-34"
+ },
+/obj/effect/turf_decal/siding/wood{
+ dir = 8
+ },
+/turf/simulated/floor/wood{
+ icon_state = "fancy-wood-oak"
+ },
+/area/ruin/space/ninja_zen)
+
+"dCF" = (
+/obj/effect/turf_decal/siding/green{
+ dir = 1
+ },
+/obj/structure/flora/ausbushes/brflowers,
+/obj/structure/flora/bush,
+/obj/structure/flora/junglebush,
+/turf/simulated/floor/indestructible/grass,
+/area/ruin/space/ninja_zen)
+
+"dHT" = (
+/obj/structure/flora/junglebush,
+/obj/effect/turf_decal/siding/green{
+ dir = 1
+ },
+/turf/simulated/floor/indestructible/grass,
+/area/ruin/space/ninja_zen)
+
+"gzb" = (
+/obj/structure/flora/junglebush,
+/obj/effect/turf_decal/siding/green{
+ dir = 5
+ },
+/turf/simulated/floor/indestructible/grass,
+/area/ruin/space/ninja_zen)
+
+"lVo" = (
+/obj/structure/flora/rock/jungle,
+/obj/effect/turf_decal/siding/green{
+ dir = 9
+ },
+/turf/simulated/floor/indestructible/grass,
+/area/ruin/space/ninja_zen)
+
+"gzT" = (
+/obj/effect/turf_decal/siding/green{
+ dir = 1
+ },
+/turf/simulated/floor/indestructible/grass,
+/area/ruin/space/ninja_zen)
+
+"ebp" = (
+/obj/effect/turf_decal/siding/green{
+ dir = 1
+ },
+/obj/structure/flora/ausbushes/sunnybush,
+/turf/simulated/floor/indestructible/grass,
+/area/ruin/space/ninja_zen)
+
+"evL" = (
+/obj/effect/turf_decal/siding/wood{
+ dir = 8
+ },
+/obj/machinery/light/small{
+ brightness_range = 2;
+ dir = 8;
+ light_range = 2;
+ nightshift_light_range = 2;
+ tag = "icon-bulb1 (WEST)";
+ throw_range = 2
+ },
+/obj/structure/railing/corner{
+ dir = 8
+ },
+/turf/simulated/floor/wood/fancy/light,
+/area/ruin/space/ninja_zen)
+
+"gLb" = (
+/obj/effect/turf_decal/siding/wood{
+ dir = 4
+ },
+/obj/structure/railing/corner,
+/obj/machinery/light/small{
+ dir = 4;
+ tag = "icon-bulb1 (EAST)"
+ },
+/turf/simulated/floor/wood/fancy/light,
+/area/ruin/space/ninja_zen)
+
+"gLh" = (
+/obj/machinery/bodyscanner{
+ dir = 4;
+ layer = 3.5
+ },
+/obj/machinery/light/small{
+ dir = 8
+ },
+/turf/simulated/floor/plasteel/freezer,
+/area/ruin/space/ninja_zen)
+
+"gLX" = (
+/obj/effect/turf_decal/weather/snow/corner{
+ dir = 10
+ },
+/turf/simulated/floor/indestructible/asteroid,
+/area/ruin/space/ninja_zen)
+
+"gNB" = (
+/obj/effect/mapping_helpers/light{
+ light_power = 3
+ },
+/obj/structure/flora/grass/both,
+/turf/simulated/floor/indestructible/snow,
+/area/ruin/space/ninja_zen)
+
+"gPe" = (
+/obj/effect/turf_decal/siding{
+ color = "#444444";
+ dir = 9
+ },
+/obj/structure/toilet,
+/turf/simulated/floor/plasteel{
+ dir = 1;
+ icon_state = "sepia"
+ },
+/area/ruin/space/ninja_zen)
+
+"mfb" = (
+/obj/effect/turf_decal/siding{
+ color = "#444444";
+ dir = 5
+ },
+/obj/structure/mirror{
+ pixel_y = 30
+ },
+/obj/structure/sink{
+ pixel_y = 25
+ },
+/turf/simulated/floor/plasteel{
+ dir = 1;
+ icon_state = "sepia"
+ },
+/area/ruin/space/ninja_zen)
+
+"gQr" = (
+/obj/structure/flora/ausbushes/lavendergrass,
+/turf/simulated/floor/indestructible/grass,
+/area/ruin/space/ninja_zen)
+
+"gQL" = (
+/obj/structure/flora/rock/pile/largejungle{
+ icon_state = "rocks3"
+ },
+/obj/structure/flora/tree/jungle/small,
+/turf/simulated/floor/indestructible/grass,
+/area/ruin/space/ninja_zen)
+
+"gAB" = (
+/obj/structure/flora/junglebush,
+/obj/effect/turf_decal/siding/green{
+ dir = 4
+ },
+/turf/simulated/floor/indestructible/grass,
+/area/ruin/space/ninja_zen)
+
+"rMi" = (
+/obj/effect/turf_decal/siding/green{
+ dir = 8
+ },
+/obj/structure/flora/ausbushes/ywflowers,
+/obj/structure/flora/junglebush,
+/turf/simulated/floor/indestructible/grass,
+/area/ruin/space/ninja_zen)
+
+"dFC" = (
+/obj/structure/chair{
+ dir = 4
+ },
+/obj/effect/turf_decal/siding/wood{
+ dir = 1
+ },
+/turf/simulated/floor/carpet/black,
+/area/ruin/space/ninja_zen)
+
+"gUj" = (
+/obj/structure/railing/corner{
+ dir = 4
+ },
+/obj/effect/turf_decal/siding/wood{
+ dir = 4
+ },
+/obj/effect/turf_decal/siding/wood/corner{
+ dir = 4
+ },
+/turf/simulated/floor/carpet/cyan,
+/area/ruin/space/ninja_zen)
+
+"mqz" = (
+/obj/structure/chair/sofa/corp/right{
+ dir = 8
+ },
+/obj/structure/railing{
+ dir = 1
+ },
+/obj/effect/turf_decal/siding/wood{
+ dir = 1
+ },
+/turf/simulated/floor/carpet/black,
+/area/ruin/space/ninja_zen)
+
+"wFR" = (
+/obj/effect/turf_decal/siding/wood{
+ dir = 10
+ },
+/obj/machinery/vending/chinese,
+/turf/simulated/floor/carpet/black,
+/area/ruin/space/ninja_zen)
+
+"jen" = (
+/obj/effect/turf_decal/siding/wood,
+/obj/machinery/vending/snack,
+/turf/simulated/floor/carpet/black,
+/area/ruin/space/ninja_zen)
+
+"nfS" = (
+/obj/machinery/light,
+/obj/effect/turf_decal/siding/wood,
+/obj/machinery/vending/cola,
+/turf/simulated/floor/carpet/black,
+/area/ruin/space/ninja_zen)
+
+"mzP" = (
+/obj/effect/turf_decal/siding/wood,
+/obj/effect/turf_decal/siding/wood/corner,
+/obj/structure/table/wood/poker,
+/obj/item/deck/cards/black,
+/turf/simulated/floor/carpet/black,
+/area/ruin/space/ninja_zen)
+
+"mDX" = (
+/obj/item/twohanded/required/kirbyplants{
+ icon_state = "plant-34";
+ tag = "icon-plant-34"
+ },
+/obj/effect/turf_decal/siding/wood{
+ dir = 8
+ },
+/obj/effect/turf_decal/siding/wood/corner{
+ dir = 8
+ },
+/turf/simulated/floor/wood{
+ icon_state = "fancy-wood-oak"
+ },
+/area/ruin/space/ninja_zen)
+
+"hdn" = (
+/obj/effect/turf_decal/siding{
+ color = "#444444";
+ dir = 10
+ },
+/turf/simulated/floor/plasteel{
+ dir = 1;
+ icon_state = "sepia"
+ },
+/area/ruin/space/ninja_zen)
+
+"mEn" = (
+/obj/effect/turf_decal/siding{
+ color = "#444444";
+ dir = 6
+ },
+/turf/simulated/floor/plasteel{
+ dir = 1;
+ icon_state = "sepia"
+ },
+/area/ruin/space/ninja_zen)
+
+"smo" = (
+/obj/structure/flora/ausbushes/brflowers,
+/obj/structure/flora/junglebush,
+/turf/simulated/floor/indestructible/grass,
+/area/ruin/space/ninja_zen)
+
+"dQw" = (
+/obj/structure/flora/bush,
+/turf/simulated/floor/indestructible/grass,
+/area/ruin/space/ninja_zen)
+
+"mQp" = (
+/obj/effect/turf_decal/siding/wood{
+ dir = 4
+ },
+/obj/effect/turf_decal/siding/wood/corner,
+/turf/simulated/floor/carpet/cyan,
+/area/ruin/space/ninja_zen)
+
+"mRT" = (
+/obj/structure/chair/sofa/corp/left{
+ dir = 8
+ },
+/turf/simulated/floor/carpet/black,
+/area/ruin/space/ninja_zen)
+
+"hdz" = (
+/obj/structure/railing{
+ dir = 8
+ },
+/turf/simulated/floor/plasteel{
+ dir = 1;
+ icon_state = "rampbottom"
+ },
+/area/ruin/space/ninja_zen)
+
+"heo" = (
+/obj/structure/railing{
+ dir = 4
+ },
+/turf/simulated/floor/plasteel{
+ dir = 1;
+ icon_state = "rampbottom"
+ },
+/area/ruin/space/ninja_zen)
+
+"hiM" = (
+/obj/effect/turf_decal/tile{
+ alpha = 128;
+ color = "#363636";
+ icon_state = "diagonal_edge"
+ },
+/obj/effect/turf_decal/siding{
+ color = "#444444";
+ dir = 9
+ },
+/turf/simulated/floor/plasteel,
+/area/ruin/space/ninja_zen)
+
+"njt" = (
+/obj/effect/turf_decal/tile{
+ alpha = 128;
+ color = "#363636";
+ icon_state = "diagonal_edge"
+ },
+/obj/effect/turf_decal/siding{
+ color = "#444444";
+ dir = 1
+ },
+/obj/structure/table/abductor{
+ color = "#99ff99";
+ name = "table"
+ },
+/turf/simulated/floor/plasteel,
+/area/ruin/space/ninja_zen)
+
+"hlC" = (
+/obj/effect/turf_decal/tile{
+ alpha = 128;
+ color = "#363636";
+ icon_state = "diagonal_edge"
+ },
+/obj/effect/turf_decal/siding{
+ color = "#444444";
+ dir = 1
+ },
+/obj/structure/table/abductor{
+ color = "#99ff99";
+ name = "table"
+ },
+/obj/item/storage/box/lights/mixed,
+/turf/simulated/floor/plasteel,
+/area/ruin/space/ninja_zen)
+
+"hnC" = (
+/obj/effect/turf_decal/tile{
+ alpha = 128;
+ color = "#363636";
+ icon_state = "diagonal_edge"
+ },
+/obj/effect/turf_decal/siding{
+ color = "#444444";
+ dir = 1
+ },
+/turf/simulated/floor/plasteel,
+/area/ruin/space/ninja_zen)
+
+"hqm" = (
+/obj/effect/turf_decal/tile{
+ alpha = 128;
+ color = "#363636";
+ icon_state = "diagonal_edge"
+ },
+/obj/effect/turf_decal/siding{
+ color = "#444444";
+ dir = 5
+ },
+/obj/structure/dresser,
+/turf/simulated/floor/plasteel,
+/area/ruin/space/ninja_zen)
+
+"hqp" = (
+/obj/structure/table/wood,
+/obj/item/reagent_containers/food/drinks/drinkingglass/devilskiss{
+ pixel_x = -6;
+ pixel_y = 7
+ },
+/turf/simulated/floor/wood{
+ icon_state = "fancy-wood-oak"
+ },
+/area/ruin/space/ninja_zen)
+
+"eeN" = (
+/obj/effect/turf_decal/siding/wood/corner{
+ dir = 4
+ },
+/obj/structure/railing/corner{
+ dir = 4
+ },
+/obj/effect/turf_decal/siding/wood{
+ dir = 4
+ },
+/obj/effect/turf_decal/siding/wood/corner{
+ dir = 4
+ },
+/turf/simulated/floor/wood{
+ icon_state = "fancy-wood-oak"
+ },
+/area/ruin/space/ninja_zen)
+
+"gmt" = (
+/obj/effect/turf_decal/siding/wood{
+ dir = 1
+ },
+/obj/structure/railing{
+ dir = 1
+ },
+/turf/simulated/floor/carpet/red,
+/area/ruin/space/ninja_zen)
+
+"rGt" = (
+/obj/effect/turf_decal/siding/wood{
+ dir = 8
+ },
+/obj/structure/railing/corner{
+ dir = 1
+ },
+/obj/effect/turf_decal/siding/wood/corner{
+ dir = 1
+ },
+/turf/simulated/floor/wood/fancy/light,
+/area/ruin/space/ninja_zen)
+
+"hsS" = (
+/obj/effect/turf_decal/siding/wood{
+ dir = 4
+ },
+/obj/structure/railing/corner{
+ dir = 4
+ },
+/obj/effect/turf_decal/siding/wood/corner{
+ dir = 4
+ },
+/turf/simulated/floor/wood/fancy/light,
+/area/ruin/space/ninja_zen)
+
+"nlx" = (
+/obj/effect/turf_decal/siding/wood{
+ dir = 4
+ },
+/obj/item/flag/ninja,
+/obj/effect/turf_decal/siding/wood/corner{
+ dir = 4
+ },
+/turf/simulated/floor/wood{
+ icon_state = "fancy-wood-oak"
+ },
+/area/ruin/space/ninja_zen)
+
+"nly" = (
+/obj/effect/turf_decal/siding/wood{
+ dir = 5
+ },
+/obj/effect/turf_decal/siding/wood/corner{
+ dir = 1
+ },
+/turf/simulated/floor/carpet/green,
+/area/ruin/space/ninja_zen)
+
+"htL" = (
+/obj/structure/flora/grass/brown,
+/obj/structure/flora/grass/both,
+/turf/simulated/floor/indestructible/snow,
+/area/ruin/space/ninja_zen)
+
+"lLo" = (
+/obj/effect/turf_decal/tile{
+ alpha = 128;
+ color = "#363636";
+ icon_state = "diagonal_edge"
+ },
+/obj/effect/turf_decal/siding{
+ color = "#444444"
+ },
+/turf/simulated/floor/plasteel,
+/area/ruin/space/ninja_zen)
+
+"hua" = (
+/obj/machinery/light,
+/obj/effect/turf_decal/tile{
+ alpha = 128;
+ color = "#363636";
+ icon_state = "diagonal_edge"
+ },
+/obj/effect/turf_decal/siding{
+ color = "#444444"
+ },
+/turf/simulated/floor/plasteel,
+/area/ruin/space/ninja_zen)
+
+"nnl" = (
+/obj/effect/turf_decal/tile{
+ alpha = 128;
+ color = "#363636";
+ icon_state = "diagonal_edge"
+ },
+/obj/effect/turf_decal/siding{
+ color = "#444444"
+ },
+/obj/effect/landmark/ninja_spawn,
+/turf/simulated/floor/plasteel,
+/area/ruin/space/ninja_zen)
+
+"euj" = (
+/obj/effect/turf_decal/tile{
+ alpha = 128;
+ color = "#363636";
+ icon_state = "diagonal_edge"
+ },
+/obj/effect/turf_decal/siding{
+ color = "#444444";
+ dir = 6
+ },
+/obj/structure/bed,
+/obj/item/bedsheet/black,
+/turf/simulated/floor/plasteel,
+/area/ruin/space/ninja_zen)
+
+"huw" = (
+/obj/machinery/light/small{
+ brightness_range = 2;
+ light_range = 2;
+ nightshift_light_range = 2;
+ tag = "icon-bulb1 (WEST)";
+ throw_range = 2
+ },
+/turf/simulated/floor/wood{
+ icon_state = "fancy-wood-oak"
+ },
+/area/ruin/space/ninja_zen)
+
+"nzn" = (
+/obj/effect/turf_decal/siding/wood{
+ dir = 4
+ },
+/obj/effect/turf_decal/siding/wood/corner,
+/turf/simulated/floor/wood{
+ icon_state = "fancy-wood-oak"
+ },
+/area/ruin/space/ninja_zen)
+
+"okZ" = (
+/turf/simulated/floor/carpet/red,
+/area/ruin/space/ninja_zen)
+
+"huG" = (
+/obj/effect/turf_decal/siding{
+ color = "#444444";
+ dir = 10
+ },
+/turf/simulated/floor/plasteel{
+ dir = 1;
+ icon_state = "tatami_nolines";
+ name = "Tatami"
+ },
+/area/ruin/space/ninja_zen)
+
+"jHk" = (
+/obj/effect/turf_decal/siding{
+ color = "#444444"
+ },
+/turf/simulated/floor/plasteel{
+ dir = 1;
+ icon_state = "tatami_nolines";
+ name = "Tatami"
+ },
+/area/ruin/space/ninja_zen)
+
+"hvD" = (
+/obj/effect/turf_decal/siding{
+ color = "#444444";
+ dir = 6
+ },
+/turf/simulated/floor/plasteel{
+ dir = 1;
+ icon_state = "tatami_nolines";
+ name = "Tatami"
+ },
+/area/ruin/space/ninja_zen)
+
+"hwh" = (
+/obj/structure/flora/tree/pine{
+ pixel_x = 1
+ },
+/obj/structure/flora/grass/both,
+/turf/simulated/floor/indestructible/snow,
+/area/ruin/space/ninja_zen)
+
+"hES" = (
+/obj/effect/turf_decal/siding/wood{
+ dir = 1
+ },
+/obj/effect/turf_decal/siding/wood,
+/obj/effect/turf_decal/siding/wood/corner{
+ dir = 1
+ },
+/obj/structure/mineral_door/wood/paperframe,
+/turf/simulated/floor/plasteel{
+ dir = 1;
+ icon_state = "sepia"
+ },
+/area/ruin/space/ninja_zen)
+
+"ePB" = (
+/obj/effect/turf_decal/siding/wood{
+ dir = 1
+ },
+/obj/effect/turf_decal/siding/wood,
+/obj/effect/turf_decal/siding/wood/corner{
+ dir = 4
+ },
+/obj/structure/mineral_door/wood/paperframe,
+/turf/simulated/floor/plasteel{
+ dir = 1;
+ icon_state = "sepia"
+ },
+/area/ruin/space/ninja_zen)
+
+"hFV" = (
+/obj/effect/turf_decal/siding/wood,
+/obj/effect/turf_decal/siding/wood/corner{
+ dir = 8
+ },
+/turf/simulated/floor/wood/fancy/light,
+/area/ruin/space/ninja_zen)
+
+"hJr" = (
+/obj/machinery/light/small{
+ dir = 4;
+ tag = "icon-bulb1 (EAST)"
+ },
+/turf/simulated/floor/carpet/red,
+/area/ruin/space/ninja_zen)
+
+"hZr" = (
+/obj/structure/flora/grass/brown,
+/obj/structure/flora/grass/brown,
+/turf/simulated/floor/indestructible/snow,
+/area/ruin/space/ninja_zen)
+
+"hmH" = (
+/obj/structure/flora/ausbushes/ywflowers,
+/turf/simulated/floor/indestructible/snow,
+/area/ruin/space/ninja_zen)
+
+"ibG" = (
+/obj/machinery/light/small{
+ dir = 1
+ },
+/obj/effect/turf_decal/siding/wood{
+ dir = 1
+ },
+/obj/effect/turf_decal/siding/wood/corner{
+ dir = 1
+ },
+/obj/effect/turf_decal/siding/wood/corner{
+ dir = 4
+ },
+/turf/simulated/floor/wood{
+ icon_state = "fancy-wood-oak"
+ },
+/area/ruin/space/ninja_zen)
+
+"iCc" = (
+/obj/machinery/light,
+/obj/effect/turf_decal/siding/wood,
+/turf/simulated/floor/carpet/green,
+/area/ruin/space/ninja_zen)
+
+"fwy" = (
+/obj/effect/turf_decal/siding/wood,
+/obj/effect/turf_decal/siding/wood/corner{
+ dir = 8
+ },
+/obj/effect/turf_decal/siding/wood/corner,
+/turf/simulated/floor/wood{
+ icon_state = "fancy-wood-oak"
+ },
+/area/ruin/space/ninja_zen)
+
+"iFF" = (
+/obj/machinery/light,
+/turf/simulated/floor/carpet/red,
+/area/ruin/space/ninja_zen)
+
+"oaT" = (
+/obj/item/flag/ninja,
+/obj/effect/turf_decal/siding/wood{
+ dir = 9
+ },
+/turf/simulated/floor/wood{
+ icon_state = "fancy-wood-oak"
+ },
+/area/ruin/space/ninja_zen)
+
+"obR" = (
+/obj/structure/table/wood/fancy/red,
+/obj/item/storage/firstaid/brute{
+ pixel_x = 4;
+ pixel_y = 4
+ },
+/obj/item/storage/firstaid/regular,
+/obj/effect/turf_decal/siding/wood{
+ dir = 1
+ },
+/turf/simulated/floor/wood{
+ icon_state = "fancy-wood-oak"
+ },
+/area/ruin/space/ninja_zen)
+
+"oha" = (
+/obj/structure/rack,
+/obj/item/oar,
+/obj/effect/turf_decal/siding/wood{
+ dir = 1
+ },
+/turf/simulated/floor/wood{
+ icon_state = "fancy-wood-oak"
+ },
+/area/ruin/space/ninja_zen)
+
+"oiF" = (
+/obj/structure/rack,
+/obj/item/twohanded/bamboospear,
+/obj/effect/turf_decal/siding/wood{
+ dir = 1
+ },
+/turf/simulated/floor/wood{
+ icon_state = "fancy-wood-oak"
+ },
+/area/ruin/space/ninja_zen)
+
+"iKK" = (
+/obj/structure/rack,
+/obj/item/twohanded/bostaff,
+/obj/effect/turf_decal/siding/wood{
+ dir = 1
+ },
+/turf/simulated/floor/wood{
+ icon_state = "fancy-wood-oak"
+ },
+/area/ruin/space/ninja_zen)
+
+"iLk" = (
+/obj/structure/rack,
+/obj/machinery/light,
+/obj/item/toy/katana{
+ desc = "Говорят тому, кто будет орудовать этой катаной в настоящей битве — не светит победы даже в бою с пьяницей вооружённым веслом";
+ name = "Сасаки Кадзиро"
+ },
+/obj/effect/turf_decal/siding/wood{
+ dir = 1
+ },
+/turf/simulated/floor/wood{
+ icon_state = "fancy-wood-oak"
+ },
+/area/ruin/space/ninja_zen)
+
+"iMb" = (
+/obj/structure/table/wood/fancy/red,
+/obj/item/storage/firstaid/ancient{
+ pixel_x = 3;
+ pixel_y = 5
+ },
+/obj/item/storage/firstaid/fire,
+/obj/effect/turf_decal/siding/wood{
+ dir = 1
+ },
+/turf/simulated/floor/wood{
+ icon_state = "fancy-wood-oak"
+ },
+/area/ruin/space/ninja_zen)
+
+"iMF" = (
+/obj/item/flag/ninja,
+/obj/effect/turf_decal/siding/wood{
+ dir = 5
+ },
+/turf/simulated/floor/wood{
+ icon_state = "fancy-wood-oak"
+ },
+/area/ruin/space/ninja_zen)
+
+"iNj" = (
+/obj/effect/turf_decal/siding/wood,
+/obj/effect/turf_decal/siding/wood/corner{
+ dir = 8
+ },
+/turf/simulated/floor/carpet/green,
+/area/ruin/space/ninja_zen)
+
+"ooz" = (
+/obj/effect/turf_decal/siding/wood/corner{
+ dir = 8
+ },
+/obj/effect/turf_decal/siding/wood{
+ dir = 6
+ },
+/turf/simulated/floor/carpet/green,
+/area/ruin/space/ninja_zen)
+
+"knG" = (
+/obj/machinery/light/small{
+ dir = 1
+ },
+/obj/effect/turf_decal/siding/wood{
+ dir = 4
+ },
+/obj/item/twohanded/required/kirbyplants{
+ icon_state = "plant-34";
+ tag = "icon-plant-34"
+ },
+/turf/simulated/floor/wood/fancy/light,
+/area/ruin/space/ninja_zen)
+
+"gmQ" = (
+/obj/machinery/light/small{
+ dir = 1
+ },
+/obj/effect/turf_decal/siding/wood{
+ dir = 8
+ },
+/obj/item/twohanded/required/kirbyplants{
+ icon_state = "plant-34";
+ tag = "icon-plant-34"
+ },
+/turf/simulated/floor/wood/fancy/light,
+/area/ruin/space/ninja_zen)
+
+"kKo" = (
+/obj/effect/turf_decal/siding/wood{
+ dir = 4
+ },
+/obj/item/flag/ninja,
+/turf/simulated/floor/wood/fancy/light,
+/area/ruin/space/ninja_zen)
+
+"oQl" = (
+/obj/effect/turf_decal/siding/wood{
+ dir = 8
+ },
+/obj/item/flag/ninja,
+/turf/simulated/floor/wood/fancy/light,
+/area/ruin/space/ninja_zen)
+
+"kSn" = (
+/obj/effect/turf_decal/siding/wood{
+ dir = 4
+ },
+/obj/item/twohanded/required/kirbyplants{
+ icon_state = "plant-34";
+ tag = "icon-plant-34"
+ },
+/turf/simulated/floor/wood/fancy/light,
+/area/ruin/space/ninja_zen)
+
+"kSU" = (
+/obj/effect/turf_decal/siding/wood{
+ dir = 8
+ },
+/obj/item/twohanded/required/kirbyplants{
+ icon_state = "plant-34";
+ tag = "icon-plant-34"
+ },
+/turf/simulated/floor/wood/fancy/light,
+/area/ruin/space/ninja_zen)
+
+"plK" = (
+/obj/item/twohanded/required/kirbyplants{
+ icon_state = "plant-22";
+ tag = "icon-plant-22"
+ },
+/turf/simulated/floor/indestructible/snow,
+/area/ruin/space/ninja_zen)
+
+"meN" = (
+/obj/structure/flora/grass/both,
+/obj/structure/flora/grass/both,
+/turf/simulated/floor/indestructible/snow,
+/area/ruin/space/ninja_zen)
+
+"mfc" = (
+/obj/structure/marker_beacon{
+ icon_state = "markerjade-on"
+ },
+/obj/effect/turf_decal/weather/snow/corner{
+ dir = 6
+ },
+/turf/simulated/floor/indestructible/asteroid,
+/area/ruin/space/ninja_zen)
+
+"mfn" = (
+/obj/structure/marker_beacon{
+ icon_state = "markerjade-on"
+ },
+/obj/effect/turf_decal/weather/snow/corner{
+ dir = 10
+ },
+/turf/simulated/floor/indestructible/asteroid,
+/area/ruin/space/ninja_zen)
+
+"myy" = (
+/obj/effect/mapping_helpers/light{
+ light_power = 3
+ },
+/obj/effect/turf_decal/weather/snow/corner{
+ dir = 6
+ },
+/turf/simulated/floor/indestructible/asteroid,
+/area/ruin/space/ninja_zen)
+
+"eul" = (
+/turf/simulated/floor/shuttle/transparent_floor,
+/area/shuttle/ninja)
+
+"myE" = (
+/obj/effect/mapping_helpers/light{
+ light_power = 3
+ },
+/obj/effect/turf_decal/weather/snow/corner{
+ dir = 10
+ },
+/turf/simulated/floor/indestructible/asteroid,
+/area/ruin/space/ninja_zen)
+
+"mBj" = (
+/obj/effect/turf_decal/weather/snow/corner{
+ dir = 8
+ },
+/obj/effect/turf_decal/weather/snow/corner{
+ dir = 4
+ },
+/turf/simulated/floor/indestructible/asteroid,
+/area/ruin/space/ninja_zen)
+
+"whe" = (
+/turf/simulated/wall/shuttle/nosmooth{
+ dir = 9;
+ icon = 'icons/turf/walls/shuttle/ninja_shuttle_wall.dmi';
+ icon_state = "ninja_walls_corners"
+ },
+/area/shuttle/ninja)
+
+"tlW" = (
+/obj/structure/shuttle/engine/huge{
+ dir = 1;
+ opacity = 0
+ },
+/turf/simulated/floor/shuttle/transparent_floor,
+/area/shuttle/ninja)
+
+"rug" = (
+/turf/simulated/wall/shuttle/nosmooth{
+ dir = 5;
+ icon = 'icons/turf/walls/shuttle/ninja_shuttle_wall.dmi';
+ icon_state = "ninja_walls_corners"
+ },
+/area/shuttle/ninja)
+
+"xDA" = (
+/turf/simulated/wall/shuttle/nosmooth{
+ dir = 10;
+ icon = 'icons/turf/walls/shuttle/ninja_shuttle_wall.dmi';
+ icon_state = "ninja_walls_corners"
+ },
+/area/shuttle/ninja)
+
+"tbW" = (
+/turf/simulated/wall/shuttle/nosmooth{
+ dir = 1;
+ icon = 'icons/turf/walls/shuttle/ninja_shuttle_wall.dmi';
+ icon_state = "ninja_walls_T_alt"
+ },
+/area/shuttle/ninja)
+
+"gLw" = (
+/turf/simulated/wall/shuttle/nosmooth{
+ dir = 4;
+ icon = 'icons/turf/walls/shuttle/ninja_shuttle_wall.dmi';
+ icon_state = "ninja_walls_direction"
+ },
+/area/shuttle/ninja)
+
+"kgk" = (
+/obj/machinery/door/airlock/hatch{
+;
+ frequency = 1331;
+ id_tag = "ninja_outer";
+ name = "Ship External Access"
+ },
+/obj/structure/fans/tiny/invisible,
+/turf/simulated/floor/shuttle{
+ icon_state = "floor13"
+ },
+/area/shuttle/ninja)
+
+"uHf" = (
+/obj/machinery/access_button{
+ command = "cycle_exterior";
+ frequency = 1331;
+ master_tag = "ninja_airlock";
+ name = "interior access button";
+ pixel_x = -12
+ },
+/turf/simulated/wall/shuttle/nosmooth{
+ dir = 8;
+ icon = 'icons/turf/walls/shuttle/ninja_shuttle_wall.dmi';
+ icon_state = "ninja_walls_direction"
+ },
+/area/shuttle/ninja)
+
+"vNF" = (
+/turf/simulated/wall/shuttle/nosmooth{
+ dir = 4;
+ icon = 'icons/turf/walls/shuttle/ninja_shuttle_wall.dmi';
+ icon_state = "ninja_walls_T_alt"
+ },
+/area/shuttle/ninja)
+
+"mCK" = (
+/obj/structure/shuttle/engine/platform{
+ layer = 2.9
+ },
+/turf/simulated/floor/shuttle/transparent_floor,
+/area/shuttle/ninja)
+
+"tIe" = (
+/obj/structure/shuttle/engine/platform{
+ layer = 2.9
+ },
+/obj/structure/shuttle/engine/large{
+ dir = 1;
+ opacity = 0
+ },
+/turf/simulated/floor/shuttle/transparent_floor,
+/area/shuttle/ninja)
+
+"bpJ" = (
+/turf/simulated/wall/shuttle/nosmooth{
+ dir = 8;
+ icon = 'icons/turf/walls/shuttle/ninja_shuttle_wall.dmi';
+ icon_state = "ninja_walls_T_alt"
+ },
+/area/shuttle/ninja)
+
+"uNo" = (
+/obj/machinery/access_button{
+ command = "cycle_exterior";
+ frequency = 1331;
+ master_tag = "ninja_airlock";
+ name = "interior access button";
+ pixel_x = 10
+ },
+/turf/simulated/wall/shuttle/nosmooth{
+ dir = 4;
+ icon = 'icons/turf/walls/shuttle/ninja_shuttle_wall.dmi';
+ icon_state = "ninja_walls_direction"
+ },
+/area/shuttle/ninja)
+
+"xaJ" = (
+/obj/machinery/door/airlock/hatch{
+;
+ frequency = 1331;
+ id_tag = "ninja_outer";
+ name = "Ship External Access"
+ },
+/obj/docking_port/mobile{
+ dheight = 2;
+ dir = 2;
+ dwidth = 4;
+ height = 10;
+ id = "ombra";
+ name = "Spider Clan Ombra";
+ port_direction = 2;
+ preferred_direction = 2;
+ roundstart_move = "ombra_home";
+ width = 21
+ },
+/obj/structure/fans/tiny/invisible,
+/obj/docking_port/stationary{
+ area_type = /area/ruin/space/ninja_zen;
+ dheight = 2;
+ dir = 2;
+ dwidth = 4;
+ height = 10;
+ id = "ombra_home";
+ name = "Spider Clan Facility";
+ turf_type = /turf/simulated/floor/indestructible/snow;
+ width = 21
+ },
+/turf/simulated/floor/shuttle{
+ icon_state = "floor13"
+ },
+/area/shuttle/ninja)
+
+"rAu" = (
+/turf/simulated/wall/shuttle/nosmooth{
+ dir = 8;
+ icon = 'icons/turf/walls/shuttle/ninja_shuttle_wall.dmi';
+ icon_state = "ninja_walls_direction"
+ },
+/area/shuttle/ninja)
+
+"bQF" = (
+/turf/simulated/wall/shuttle/nosmooth{
+ dir = 6;
+ icon = 'icons/turf/walls/shuttle/ninja_shuttle_wall.dmi';
+ icon_state = "ninja_walls_corners"
+ },
+/area/shuttle/ninja)
+
+"xfs" = (
+/turf/simulated/wall/shuttle/nosmooth/interior{
+ dir = 5;
+ icon = 'icons/turf/walls/shuttle/ninja_shuttle_wall.dmi';
+ icon_state = "ninja_walls_corners";
+ underlay_floor_icon = 'icons/turf/shuttle/floors.dmi';
+ underlay_floor_icon_state = "floor13"
+ },
+/area/shuttle/ninja)
+
+"xhP" = (
+/turf/simulated/floor/shuttle{
+ icon_state = "floor13"
+ },
+/area/shuttle/ninja)
+
+"kMS" = (
+/obj/machinery/light/small{
+ dir = 1
+ },
+/obj/machinery/airlock_sensor{
+ frequency = 1331;
+ id_tag = "ninja_sensor";
+ pixel_x = -12;
+ pixel_y = 25;
+ req_access = list(150)
+ },
+/turf/simulated/floor/shuttle{
+ icon_state = "floor13"
+ },
+/area/shuttle/ninja)
+
+"hNg" = (
+/turf/simulated/wall/shuttle/nosmooth{
+ icon = 'icons/turf/walls/shuttle/ninja_shuttle_wall.dmi';
+ icon_state = "ninja_walls_direction"
+ },
+/area/shuttle/ninja)
+
+"xIi" = (
+/obj/structure/shuttle/engine/heater{
+ dir = 1;
+ icon_state = "heater3x3_side_inv";
+ tag = "icon-heater (NORTH)"
+ },
+/obj/structure/shuttle/engine/platform{
+ dir = 1;
+ layer = 2.9
+ },
+/obj/structure/window/plasmareinforced{
+ color = "#00f700"
+ },
+/turf/simulated/floor/shuttle/plating,
+/area/shuttle/ninja)
+
+"aTQ" = (
+/obj/structure/shuttle/engine/heater{
+ dir = 1;
+ icon_state = "heater3x3";
+ tag = "icon-heater (NORTH)"
+ },
+/obj/structure/shuttle/engine/platform{
+ dir = 1;
+ layer = 2.9
+ },
+/obj/structure/window/plasmareinforced{
+ color = "#00f700"
+ },
+/turf/simulated/floor/shuttle/plating,
+/area/shuttle/ninja)
+
+"uLd" = (
+/obj/structure/shuttle/engine/platform{
+ dir = 1;
+ layer = 2.9
+ },
+/obj/structure/window/plasmareinforced{
+ color = "#00f700"
+ },
+/obj/structure/shuttle/engine/heater{
+ dir = 1;
+ icon_state = "heater3x3_side";
+ tag = "icon-heater (NORTH)"
+ },
+/turf/simulated/floor/shuttle/plating,
+/area/shuttle/ninja)
+
+"rCS" = (
+/obj/structure/shuttle/engine/platform{
+ dir = 1;
+ layer = 2.9
+ },
+/obj/structure/window/plasmareinforced{
+ color = "#00f700"
+ },
+/obj/structure/shuttle/engine/heater{
+ dir = 1;
+ icon_state = "heater2x2";
+ tag = "icon-heater (NORTH)"
+ },
+/turf/simulated/floor/shuttle/plating,
+/area/shuttle/ninja)
+
+"mBi" = (
+/obj/structure/shuttle/engine/platform{
+ dir = 1;
+ layer = 2.9
+ },
+/obj/structure/window/plasmareinforced{
+ color = "#00f700"
+ },
+/obj/structure/shuttle/engine/heater{
+ dir = 1;
+ icon_state = "heater2x2_side";
+ tag = "icon-heater (NORTH)"
+ },
+/turf/simulated/floor/shuttle/plating,
+/area/shuttle/ninja)
+
+"sIh" = (
+/obj/structure/shuttle/engine/platform{
+ dir = 1;
+ layer = 2.9
+ },
+/obj/structure/window/plasmareinforced{
+ color = "#00f700"
+ },
+/obj/structure/shuttle/engine/heater{
+ dir = 1;
+ icon_state = "heater3x3_side_inv";
+ tag = "icon-heater (NORTH)"
+ },
+/turf/simulated/floor/shuttle/plating,
+/area/shuttle/ninja)
+
+"pyh" = (
+/obj/structure/shuttle/engine/platform{
+ dir = 1;
+ layer = 2.9
+ },
+/obj/structure/window/plasmareinforced{
+ color = "#00f700"
+ },
+/obj/structure/shuttle/engine/heater{
+ dir = 1;
+ icon_state = "heater3x3";
+ tag = "icon-heater (NORTH)"
+ },
+/turf/simulated/floor/shuttle/plating,
+/area/shuttle/ninja)
+
+"oyc" = (
+/obj/machinery/light/small{
+ dir = 1
+ },
+/obj/machinery/airlock_sensor{
+ frequency = 1331;
+ id_tag = "ninja_sensor";
+ pixel_x = 12;
+ pixel_y = 25;
+ req_access = list(150)
+ },
+/turf/simulated/floor/shuttle{
+ icon_state = "floor13"
+ },
+/area/shuttle/ninja)
+
+"bYi" = (
+/turf/simulated/wall/shuttle/nosmooth/interior{
+ dir = 9;
+ icon = 'icons/turf/walls/shuttle/ninja_shuttle_wall.dmi';
+ icon_state = "ninja_walls_corners";
+ underlay_floor_icon = 'icons/turf/shuttle/floors.dmi';
+ underlay_floor_icon_state = "floor13"
+ },
+/area/shuttle/ninja)
+
+"mFm" = (
+/obj/structure/marker_beacon{
+ icon_state = "markerjade-on"
+ },
+/turf/simulated/floor/indestructible/snow,
+/area/ruin/space/ninja_zen)
+
+"dUN" = (
+/obj/machinery/atmospherics/unary/vent_pump/high_volume{
+ dir = 4;
+ frequency = 1331;
+ id_tag = "ninja_pump"
+ },
+/obj/machinery/access_button{
+ command = "cycle_interior";
+ frequency = 1331;
+ master_tag = "ninja_airlock";
+ name = "interior access button";
+ pixel_x = 23;
+ pixel_y = 25
+ },
+/turf/simulated/floor/shuttle{
+ icon_state = "floor13"
+ },
+/area/shuttle/ninja)
+
+"uFB" = (
+/obj/machinery/door/airlock/hatch{
+;
+ frequency = 1331;
+ id_tag = "ninja_inner";
+ locked = 1;
+ name = "Ship External Access"
+ },
+/obj/machinery/atmospherics/pipe/simple/visible{
+ dir = 4
+ },
+/obj/structure/fans/tiny/invisible,
+/turf/simulated/floor/shuttle{
+ icon_state = "floor13"
+ },
+/area/shuttle/ninja)
+
+"nzK" = (
+/obj/machinery/access_button{
+ command = "cycle_interior";
+ frequency = 1331;
+ master_tag = "ninja_airlock";
+ name = "interior access button";
+ pixel_x = -25;
+ pixel_y = 25
+ },
+/obj/machinery/atmospherics/pipe/simple/visible{
+ dir = 4
+ },
+/turf/simulated/floor/shuttle{
+ icon_state = "floor13"
+ },
+/area/shuttle/ninja)
+
+"lrJ" = (
+/obj/machinery/atmospherics/pipe/manifold/visible{
+ dir = 1
+ },
+/turf/simulated/floor/shuttle{
+ icon_state = "floor13"
+ },
+/area/shuttle/ninja)
+
+"ubF" = (
+/obj/machinery/atmospherics/pipe/simple/visible{
+ dir = 4
+ },
+/obj/machinery/suit_storage_unit/standard_unit{
+ req_access = null
+ },
+/turf/simulated/floor/shuttle{
+ icon_state = "floor13"
+ },
+/area/shuttle/ninja)
+
+"uFn" = (
+/obj/structure/table/abductor{
+ color = "#99ff99";
+ name = "table"
+ },
+/obj/machinery/atmospherics/pipe/simple/visible{
+ dir = 4
+ },
+/obj/machinery/embedded_controller/radio/airlock/airlock_controller{
+ frequency = 1331;
+ id_tag = "ninja_airlock";
+ pixel_y = 3;
+ tag_airpump = "ninja_pump";
+ tag_chamber_sensor = "ninja_sensor";
+ tag_exterior_door = "ninja_outer";
+ tag_interior_door = "ninja_inner"
+ },
+/turf/simulated/floor/shuttle{
+ icon_state = "floor13"
+ },
+/area/shuttle/ninja)
+
+"bLb" = (
+/obj/structure/table/abductor{
+ color = "#99ff99";
+ name = "table"
+ },
+/obj/machinery/atmospherics/pipe/simple/visible{
+ dir = 4
+ },
+/obj/item/tank/internals/emergency_oxygen/double/ninja,
+/turf/simulated/floor/shuttle{
+ icon_state = "floor13"
+ },
+/area/shuttle/ninja)
+
+"wos" = (
+/obj/machinery/access_button{
+ command = "cycle_interior";
+ frequency = 1331;
+ master_tag = "ninja_airlock";
+ name = "interior access button";
+ pixel_x = 23;
+ pixel_y = 25
+ },
+/obj/machinery/atmospherics/pipe/simple/visible{
+ dir = 4
+ },
+/turf/simulated/floor/shuttle{
+ icon_state = "floor13"
+ },
+/area/shuttle/ninja)
+
+"pUJ" = (
+/obj/machinery/atmospherics/unary/vent_pump/high_volume{
+ dir = 8;
+ frequency = 1331;
+ id_tag = "ninja_pump"
+ },
+/obj/machinery/access_button{
+ command = "cycle_interior";
+ frequency = 1331;
+ master_tag = "ninja_airlock";
+ name = "interior access button";
+ pixel_x = -25;
+ pixel_y = 25
+ },
+/turf/simulated/floor/shuttle{
+ icon_state = "floor13"
+ },
+/area/shuttle/ninja)
+
+"wQF" = (
+/turf/simulated/wall/shuttle/nosmooth{
+ dir = 1;
+ icon = 'icons/turf/walls/shuttle/ninja_shuttle_wall.dmi';
+ icon_state = "ninja_walls_direction"
+ },
+/area/shuttle/ninja)
+
+"wSF" = (
+/obj/structure/window/plasmareinforced{
+ color = "#00f700";
+ dir = 4
+ },
+/obj/structure/window/plasmareinforced{
+ color = "#00f700";
+ dir = 1
+ },
+/obj/structure/chair/comfy/shuttle/dark,
+/turf/simulated/floor/shuttle{
+ icon_state = "floor13"
+ },
+/area/shuttle/ninja)
+
+"iVW" = (
+/obj/machinery/atmospherics/pipe/simple/visible,
+/turf/simulated/floor/shuttle{
+ icon_state = "floor13"
+ },
+/area/shuttle/ninja)
+
+"byl" = (
+/obj/structure/window/plasmareinforced{
+ color = "#00f700";
+ dir = 1
+ },
+/obj/structure/window/plasmareinforced{
+ color = "#00f700";
+ dir = 8
+ },
+/obj/structure/chair/comfy/shuttle/dark,
+/turf/simulated/floor/shuttle{
+ icon_state = "floor13"
+ },
+/area/shuttle/ninja)
+
+"fAv" = (
+/obj/machinery/door/window/brigdoor{
+ color = "#00f700";
+;
+ name = "Riot Control"
+ },
+/obj/machinery/light/spot{
+ dir = 8;
+ tag = "icon-tube1 (WEST)"
+ },
+/turf/simulated/floor/shuttle{
+ icon_state = "floor13"
+ },
+/area/shuttle/ninja)
+
+"lxP" = (
+/obj/machinery/door/window/brigdoor{
+ color = "#00f700";
+ dir = 8;
+;
+ name = "Riot Control"
+ },
+/obj/machinery/light/spot{
+ dir = 4;
+ tag = "icon-tube1 (EAST)"
+ },
+/turf/simulated/floor/shuttle{
+ icon_state = "floor13"
+ },
+/area/shuttle/ninja)
+
+"odX" = (
+/obj/machinery/atmospherics/unary/tank/air/ninja{
+ dir = 1
+ },
+/turf/simulated/wall/shuttle/nosmooth/interior{
+ dir = 5;
+ icon = 'icons/turf/walls/shuttle/ninja_shuttle_wall.dmi';
+ icon_state = "ninja_walls_corners";
+ underlay_floor_icon = 'icons/turf/shuttle/floors.dmi';
+ underlay_floor_icon_state = "floor13"
+ },
+/area/shuttle/ninja)
+
+"pvn" = (
+/obj/structure/chair/comfy/shuttle/dark,
+/turf/simulated/floor/shuttle{
+ icon_state = "floor13"
+ },
+/area/shuttle/ninja)
+
+"acK" = (
+/obj/machinery/atmospherics/unary/tank/air/ninja{
+ dir = 1
+ },
+/turf/simulated/wall/shuttle/nosmooth/interior{
+ dir = 9;
+ icon = 'icons/turf/walls/shuttle/ninja_shuttle_wall.dmi';
+ icon_state = "ninja_walls_corners";
+ underlay_floor_icon = 'icons/turf/shuttle/floors.dmi';
+ underlay_floor_icon_state = "floor13"
+ },
+/area/shuttle/ninja)
+
+"gfP" = (
+/turf/simulated/wall/shuttle/nosmooth{
+ dir = 4;
+ icon = 'icons/turf/walls/shuttle/ninja_shuttle_wall.dmi';
+ icon_state = "ninja_walls_corners"
+ },
+/area/shuttle/ninja)
+
+"cHW" = (
+/obj/machinery/computer/shuttle/ninja,
+/turf/simulated/floor/shuttle{
+ icon_state = "floor13"
+ },
+/area/shuttle/ninja)
+
+"psd" = (
+/obj/machinery/computer/camera_advanced/shuttle_docker/ninja,
+/turf/simulated/floor/shuttle{
+ icon_state = "floor13"
+ },
+/area/shuttle/ninja)
+
+"rgH" = (
+/turf/simulated/wall/shuttle/nosmooth{
+ icon = 'icons/turf/walls/shuttle/ninja_shuttle_wall.dmi';
+ icon_state = "ninja_walls_corners"
+ },
+/area/shuttle/ninja)
+
+"mll" = (
+/turf/simulated/wall/shuttle/nosmooth{
+ dir = 6;
+ icon = 'icons/turf/walls/shuttle/ninja_shuttle_wall.dmi';
+ icon_state = "ninja_walls_T_alt"
+ },
+/area/shuttle/ninja)
+
+"pYK" = (
+/obj/structure/grille,
+/obj/structure/window/full/shuttle/ninja,
+/turf/simulated/floor/shuttle/plating,
+/area/shuttle/ninja)
+
+"htX" = (
+/turf/simulated/wall/shuttle/nosmooth{
+ dir = 10;
+ icon = 'icons/turf/walls/shuttle/ninja_shuttle_wall.dmi';
+ icon_state = "ninja_walls_T_alt"
+ },
+/area/shuttle/ninja)
+
+"nQm" = (
+/obj/structure/flora/tree/dead,
+/obj/structure/flora/grass/both,
+/turf/simulated/floor/indestructible/snow,
+/area/ruin/space/ninja_zen)
+
+(1,1,1) = {"
+mVXmVXmVXmVXmVXmVXmVXmVXmVXmNjmNjykSykSykSykSykSykSemNykSsQxykSykSykSykSykSykSykSykStdjtdjykSykSrnstdjkQkykSmNjmNjmVXmVXmVXmVXmVXmVXmVXmVXmVXmVXmVXmVXmVX
+mVXmVXmVXmVXmVXmVXmVXmVXmNjmNjykSykSykSycOykSadWawuaxcykSycOykSykSadWaxcykSykSrnssQxadWykSadWhGJykSadWykSykSkQkmNjmNjmNjmVXmVXmVXmVXmVXmVXmVXmVXmVXmVXmVX
+mVXmVXmVXmVXmVXmVXmVXmVXmNjykSadWykSadWykSadWykSykSrnsykSadWadWadWykSycOykSadWykSykSykSaIzykStdjtdjykSadWykSykSykSemNmNjmNjmVXmVXmVXmVXmVXmVXmVXmVXmVXmVX
+mVXmVXmVXmVXmVXmVXmVXmVXmNjtdjykSykSykSykStdjykSykStdjykSjSwjSwjSwjSwjSwjSwjSwjSwjSwykStdjtdjykStdjsQxhGJaIzhGJawutdjykSmNjmNjmVXmVXmVXmVXmVXmVXmVXmVXmVX
+mVXmVXmVXmVXmVXmVXmVXmVXmNjykStdjadWadWykSsQxrnstdjadWjSwjSwdMbdMbdMbdMbdMbdMbdMbjSwjSwjSwjSwjSwjSwjSwtdjykSadWkQkkQkaYyykSmNjmNjmVXmVXmVXmVXmVXmVXmVXmVX
+mVXmVXmVXmVXmVXmVXmVXmVXmNjemNykSycOykSykSadWykSadWjSwjSwdMbdMbbRMnhlbhgbhtbhLdMbdMbdMbdMbdMbdMbdMbjSwjSwykSadWykStdjykStdjtdjmNjmVXmVXmVXmVXmVXmVXmVXmVX
+mVXmVXmVXmVXmVXmVXmVXmVXmNjykSykSadWykStdjykSykSjSwjSwdMbdMbbRMbRMnhlbDRbRMbEBdMbbGZbHobHRbHRbJLdMbdMbjSwkQkycOykSykSadWtdjykSmNjmVXmVXmVXmVXmVXmVXmVXmVX
+mVXmVXmVXmVXmVXmVXmVXmVXmNjykSadWsQxadWykSadWykSjSwdMbdMbbRMbRMbRMdMbdMbnhldMbdMbeFvceSbRxbRMbRMnWfdMbjSwcfatdjtdjbuytdjrnsykSmNjmNjmVXmVXmVXmVXmVXmVXmVX
+mVXmVXmVXmVXmVXmVXmVXmVXmNjtdjtdjtdjtdjawuykSadWjSwdMbchjbRMcigdMbdMbdMbcivbRMbBYbhgbRxcjycjybRMcjQdMbjSwckqckChxTclipqvbYbykSbyGmNjmNjmVXmVXmVXmVXmVXmVX
+mVXmVXmVXmVXmVXmVXmVXmVXmNjykSadWykStdjsQxcBUcBUjSwdMbcCTbRMcDkcDUdMbcEgbyZbAhnWfnWfgVwnWfnENbRxcESdMbjSwtdjykScHKcHTkQTbYbycOykStdjmNjmNjmVXmVXmVXmVXmVX
+mVXmVXmVXmVXmVXmVXmVXmVXmNjykSrnsykSrnstdjtdjykSjSwdMbcCTbRMcQFdMbdMbdMbcQJbRMbBYbDRbRMcRmbGPbRMbNcdMbjSwcRnbYbovacUDcVbykSykStdjycOtdjmNjmNjmNjmVXmVXmVX
+mVXmVXmVXmVXmVXmVXmVXmNjmNjykSykSdiGadWykScBUdiHjSwdMbdMbdmvdmvcmJdMbdMbdMbdMbdMbqDIdnLbRMbRxbRMnWfdMbjSwtdjykSdovbYbykSrnstdjykSykStdjemNtdjmNjmNjmNjmVX
+mVXmVXmVXmVXmVXmVXmNjmNjykSykSdrhdrzykSykSykStdjjSwjSwdMbdMbcmJcmJdsXcoIdtKdtLdMbdMbdufcqidukdumdMbdMbjSwtdjykSykSykScxGkjKkjKkjKkjKdvttdjykSrnsemNmNjmVX
+mVXmVXmVXmVXmVXmNjmNjykSykSdrhkQTykSykSemNcBUcBUdEsjSwjSwdMbdMbdMbdMbdMbcMDcMDdMbdMbdMbdMbdMbdMbdMbjSwjSwykScxGkjKkjKgGYgGYgGYgGYgGYgGYkjKkjKkjKkjKmNjmVX
+mVXmVXmVXmVXmNjmNjykSykSdLFdRAdYCdMCkjKkjKkjKkjKkjKdvtjSwjSwjSwjSwjSwjSwdRAdYCjSwjSwjSwjSwjSwjSwjSwjSwcxGkjKgGYgGYdGFdJGgGYlpulpulpugGYdJGgGYgGYgGYmNjmVX
+mVXmVXmVXmNjmNjykSykScxGdSAdRAdYCdTygGYgGYdJGgGYdGFgGYdKHkjKkjKkjKdVZdTOdRAdYCdUzdVZkjKkjKkjKdVZkjKkjKgGYdJGdGFgGYgGYlpudXaykStdjykSdYYlpulpulpulpumNjmVX
+mVXmVXmNjmNjykScxGkjKgGYdSAdRAdYCeaUlpulpulpulpulpulpulpulpulpulpulpueiadRAdYCeaUlpulpulpulpulpulpulpulpulpulpulpudXaemNejIejVekhtdjtdjykSsQxycOtdjmNjmVX
+mVXmNjmNjcxGkjKgGYdJGgGYephdRAepxeqJhFkhFkhFkhFkhFkhFkhFkhFkhFkhFkhFkhFkhDUhDUhFkhFkhFkhFkhFkhFkhFkhFkhFkhFkhFkhFkhFkhFkhFkhFkhFkhFkhFkhFkykSykSemNmNjmVX
+mNjmNjgGYgGYdGFgGYgGYdXaykSovaerytdjhFkeLTeNbeNbeNbeNbesxeNbeNbeuFnXTeyDnYnnYneyDnXTfCSfCSeKieyZeAyeAKeBceCveFkeHjeIxeKifCSfCSnXTeIyfbHhFkykStdjtdjmNjmNj
+mNjgGYdJGgGYgGYlpudXaykStdjovakQTykShFkgwPnIGeKahnmhnmhnmhnmhnmfwinXTfCunYnnYnfCunXTfCSfCSfCSfCSfCSfCSfCSfCSfCSfCSfCSfCSfCSfCSnXTfFDglcncttdjykSykStdjmNj
+lpulpulpulpudXaykSykSemNdrhtcWdrzykShFknFgnIGnPrhFkhFkhFkhFkhFkhFkhFkhFkncReOxhFkhFkhFkhFkfCSeOIePJePJePJePJePJeQTeRweTWhFkhFkhFkgggglcnctykSfeMykStdjykS
+emNtdjykStdjykSykSykStdjovadrzfhOykShFkgwPnIGfiSeuFnXTfjAfjXfkFfnnfomhFknsAnyJhFkidLfoDfoGfCSeRkfqFfsXfsXfsXfsXftskfMfCSncteLTeNbfvnglcncttdjykStdjykStdj
+tdjykSykStdjykSykSykSdrhkQTtdjykSykShFkgyVnIGnIGgEAnXTfxAfxYfxZgFqfCLhFknsAnyJhFkgSHfCPgLjhbVgQspOrfnhfnhfnhfnhhSYgXChbVncthlQnIGnIGfCQhFkykSykSsQxycOykS
+ykSrnstdjykSykSykSfDlovadrzhFkhFkhFkhFkhFkmUxmUxhFkhFkhDUhFkhFknctncthFkhfXfDZhFknctncthFkmhhmhNmGyfzwfzwfzwfzwmHRfERmhhhFkhFkeOxncRhFkhFkykSrnssQxykSemN
+ykStdjtdjemNycOfDldrhdrztdjhFkfFffGmfGEfJEkuhkuhhImhFkggCfLbnctmEYmEYfNYtcWtcWfPlhLhmEYnctmaDmhNpOrfnhfnhfnhfnhhSYfERmaDncthVdhXpfQxfRdhFkykShGJtdjykSmNj
+ykStdjykSfDlfUpdrhdrznVItdjhFkqimkuhkuhkuhkuhkuhhuEhFkicofVEnctmEYigqiiBtcWuQKfYVfGlipEnctmhhmhNmGyfzwfzwfzwfzwmHRfERmhhnctfNyfZihJHfZohFkykSykSykSmNjmNj
+ykSykSfDltdjdrhkQTtdjykSykSnctqimeOIePJePJeRwkuhiDqhFkhFkhFkhFkxKJiEEiFVtcWtcWgaRgbQgcKhFkhFktdMpOrfnhfnhfnhfnhhSYgdihFkhFkjOklkTgfRmaDncttdjsQxemNmNjmVX
+mNjykSykStdjovakQTrnsykSykSnctggVeRkghkghlkfMkuhglBgAsgmbnXTgnrtcWuQKtcWgoztcWtcWtcWtcWgpplbeeRkmGyfzwgAVfzwfzwmHRkfMhFkeWLfqOlkTgfRmhhncttdjnVImNjmNjmVX
+mNjmNjrnstdjovakQTykSykSykSnctqimeRkgpKkagkfMkuhksBgtOgudnXTgvLtcWtcWtcWtcWtcWtcWuQKtcWeSClbeeRkpOrfnhfnhfnhfnhhSYkfMhFkfoCgvQlkTgfRmhhncttdjlIwmNjmVXmVX
+mVXmNjmNjtdjovakQTtdjykSykSnctqimgxrlKYlKYgygkuhgzahFkhFkhFkhFkdCFdHTgzbtcWtcWlVogzTebphFkhFkevLmGyfzwfzwfzwfzwmHRgLbhFkhFkgLhlkTgfRmaDnctykStdjmNjmVXmVX
+mVXmVXmNjtdjgLXtcWpqvgNBykShFkqimkuhkuhkuhkuhkuhhuEhFkgPemfbnctgQrgQLgABuQKtcWrMigQLipEnctmhhmhNpOrfnhfnhfnhfnhhSYfERmhhnctdFChXpgUjmqzhFkykSykSmNjmNjmVX
+mVXmNjmNjkQkykSgLXtcWpqvykShFkwFRjennfSmzPkuhkuhmDXhFkhdnmEnnctmEYsmogABtcWtcWfPldQwmEYnctmaDmhNmGyfzwfzwfzwfzwmHRfERmaDncthVdfZimQpmRThFktdjykSykSmNjmVX
+mVXmNjykSykSkQkrnsovakQTykShFkhFkhFkhFkhFkmUxmUxhFkhFkmUxhFkhFknctncthFkhdzheohFknctncthFkmhhmhNpOrfnhfnhfnhfnhhSYfERmhhhFkhFkeOxncRhFkhFkykSycOykSmNjmNj
+mNjmNjykSykSykSkQkovakQTtdjykSykSykShFkeLTnIGnIGeIynXThiMnjthlChnChqmhFknsAnyJhFkidLhqpeeNgmtrGtmGyfzwfzwfzwfzwmHRhsSgmtnctnlxnIGnIGnlyhFksQxtdjtdjykSmNj
+mNjykSycOhtLtdjkQkovakQTykSykSnVIykShFkgwPnIGeKahnmnXTfxAlLohuannleujhFknsAnyJhFkgSHhuwnznokZeRkhuGjHkjHkjHkjHkhvDkfMokZnctgyVhnmfFDglcnctykStdjhGJykSmNj
+ykSykSykSykSykStdjovakQThwhykSykSykShFknFgnIGnPrhFkhFkhFkhFkhFkhFkhFkhFkhESePBhFkhFkhFkhFkokZgxrlKYlKYlKYlKYlKYhFVgyghJrhFkhFkhFkgggglcnctykSnVItdjykSmNj
+ykSykSykSfDlykShZrovakQTykSykShmHykShFkgwPnIGfiSeNbeNbeNbeNbeNbeuFnXTibGnYnnYnibGnXTokZokZokZokZokZokZokZokZokZokZokZokZokZokZnXTfvnglcnctykSykSykSykSemN
+ykSrnsykSykSkQkykSovakQTykSykSykSykShFkgyVhnmhnmhnmhnmiCchnmhnmfwinXTfwynYnnYnfwynXTokZokZiFFoaTobRohaoiFiKKiLkiMbiMFiFFokZokZnXTiNjoozhFkykStdjrnstdjykS
+fDlykSemNykSykSrnsovakQTykSykSykSykShFkhFkhFkhFkhFkhFkhFkhFkhFkhFkhFkhFkhDUhDUhFkhFkhFkhFkhFkhFkhFkhFkhFkhFkhFkhFkhFkhFkhFkhFkhFkhFkhFkhFktdjykStdjykSykS
+ykSfDlykSykSykStdjovakQTtdjrnssQxnVIykSykSykSykSykSykSykSykSykSykShFkhFknYnnYnhFkhFkykStdjykSykSykStdjykStdjykSykSykSykSycOykSykSykSykSykSykSykSykSykSmNj
+ykSykSykStdjykStdjgLXtcWpqvykSykSykSsQxhmHemNykSykSykSsQxykSykSykShFkknGnYnnYngmQhFkykStdjykStdjtdjykStdjtdjycOykSnVIykSykStdjhGJnVIykStdjykStdjsQxykSmNj
+ykSykSykSycOykSykSykSgLXtcWhxThxTpqvtdjykSykShmHykSykSnVIykSsQxykSnctkKonYnnYnoQlncttdjtdjykSnVIykStdjykStdjykStdjtdjtdjykSsQxykSykSsQxykSykStdjykSmNjmNj
+mNjykStdjykSykSfDlykSrnsgLXcUDcUDtcWhxTpqvtdjykSykSykShmHykSykSykShFkkSnnYnnYnkSUhFkykSykSykStdjykSykSsQxtdjykStdjycOykSykStdjtdjrnsykSykSykSsQxmNjmNjmVX
+mNjmNjykStdjykSfDlykSykSykStdjtdjgLXcUDtcWhxTpqvykSykSsQxemNykSykShFkhFknYnnYnhFkhFkykStdjykSykSycOykSykStdjykShGJykStdjykStdjtdjtdjemNykStdjmNjmNjmVXmVX
+mVXmNjmNjmNjykSemNykSfDlykSykSykStdjtdjgLXcUDtcWpqvtdjykSykSykSykSykShFkhDUhDUhFkykSykSykSykStdjykSykSykSykSykSsQxykStdjsQxykStdjykSykStdjmNjmNjmVXmVXmVX
+mVXmVXmVXmNjmNjykSykSykSfDlkQkykSykSykSykStdjgLXtcWpqvtdjykSrnsykSykSplKhfXfDZplKykSykSrnsykSsQxtdjykSykStdjykSycOykSykStdjykSykSykSmNjmNjmNjmVXmVXmVXmVX
+mVXmVXmVXmVXmNjmNjmNjykSykSykSykSykSykSkQkykSrnsgLXtcWpqvykSdrhhxThxThxTtcWtcWhxThxThxTpqvykSykSykStdjykSykSsQxsQxtdjykStdjtdjykSmNjmNjmVXmVXmVXmVXmVXmVX
+mVXmVXmVXmVXmVXmVXmNjmNjykSykSykSykSykSykSykSkQktdjgLXtcWhxTtcWcUDcUDcUDcUDcUDcUDcUDcUDtcWpqvykSykSykSykSrnsykSykSykSykSykSykSmNjmNjmVXmVXmVXmVXmVXmVXmVX
+mVXmVXmVXmVXmVXmVXmVXmNjmNjmNjycOykSmeNtdjykSykSkQktdjovatcWmfcykSykSykSykSykSykSykSykSmfntcWpqvykSykSykSykSykSykStdjykSmNjmNjmNjmVXmVXmVXmVXmVXmVXmVXmVX
+mVXmVXmVXmVXmVXmVXmVXmVXmVXmNjykSykStdjykSykSykSykSykSovamyyykSeuleuleulykSykSeuleuleulykSmyEkQTykSykStdjtdjykSykSykSykSmNjmVXmVXmVXmVXmVXmVXmVXmVXmVXmVX
+mVXmVXmVXmVXmVXmVXmVXmVXmVXmNjtdjykSykSykSykSykSykSykSmBjykSwheeultlWeuleuleuleultlWeulrugykSmBjykSykSykSykStdjycOykStdjmNjmVXmVXmVXmVXmVXmVXmVXmVXmVXmVX
+mVXmVXmVXmVXmVXmVXmVXmVXmVXmNjykSycOtdjykSnVIxDAtbWgLwkgkuHfvNFmCKmCKmCKtIemCKmCKmCKmCKbpJuNoxaJrAutbWbQFnVItdjykSykSykSmNjmVXmVXmVXmVXmVXmVXmVXmVXmVXmVX
+mVXmVXmVXmVXmVXmVXmVXmVXmVXmNjtdjtdjtdjykSykSykSxDAxfsxhPkMShNgxIiaTQuLdrCSmBisIhpyhuLdhNgoycxhPbYibQFykSykSmFmykStdjykSmNjmVXmVXmVXmVXmVXmVXmVXmVXmVXmVX
+mVXmVXmVXmVXmVXmVXmVXmVXmVXmNjtdjtdjykSmFmykSykSykSxDAxfsdUNuFBnzKlrJubFuFnbLbubFlrJwosuFBpUJbYibQFykSykSykSykSykSykSykSmNjmVXmVXmVXmVXmVXmVXmVXmVXmVXmVX
+mVXmVXmVXmVXmVXmVXmVXmVXmVXmNjykStdjtdjykSykSykSykSnVIxDAxfswQFwSFiVWxhPxhPxhPxhPiVWbylwQFbYibQFnVIykSykSykSykSykStdjtdjmNjmVXmVXmVXmVXmVXmVXmVXmVXmVXmVX
+mVXmVXmVXmVXmVXmVXmVXmVXmVXmNjykStdjtdjykSykSykSmFmykSykSxDAvNFfAviVWxhPxhPxhPxhPiVWlxPbpJbQFykSykSmFmykSykSykStdjtdjykSmNjmVXmVXmVXmVXmVXmVXmVXmVXmVXmVX
+mVXmVXmVXmVXmVXmVXmVXmVXmVXmNjtdjtdjykSykSykSykSykSykSykSykSxDAtbWodXxhPpvnpvnxhPacKtbWbQFykSykSykSykSykSykStdjykSykSykSmNjmVXmVXmVXmVXmVXmVXmVXmVXmVXmVX
+mVXmVXmVXmVXmVXmVXmVXmVXmVXmNjtdjemNtdjykSykStdjtdjtdjykSykSnVIxDAgfPxfscHWpsdbYirgHbQFnVIykSykSykSykSykSykStdjykStdjemNmNjmVXmVXmVXmVXmVXmVXmVXmVXmVXmVX
+mVXmVXmVXmVXmVXmVXmVXmVXmVXmNjykSykStdjtdjrnsykSykSykSykSmFmykSykSxDAmllpYKpYKhtXbQFykSykSmFmykSykSykSykSrnsykStdjtdjykSmNjmVXmVXmVXmVXmVXmVXmVXmVXmVXmVX
+mVXmVXmVXmVXmVXmVXmVXmVXmVXmNjmNjykSemNykSykStdjtdjykSrnsykSykSykSykSykStdjykSykSykSykSykSykSrnsykSykSykStdjykSykSykSmNjmNjmVXmVXmVXmVXmVXmVXmVXmVXmVXmVX
+mVXmVXmVXmVXmVXmVXmVXmVXmVXmVXmNjmNjykSykSykSykSykSykSykStdjtdjykSrnsykSykSykSykSnQmykStdjykSykSykSykSykSykSykSykSmNjmNjmVXmVXmVXmVXmVXmVXmVXmVXmVXmVXmVX
+mVXmVXmVXmVXmVXmVXmVXmVXmVXmVXmVXmNjmNjykSykStdjtdjykStdjykSykSykSykSykStdjykSykSykSykSykStdjykStdjykSykStdjykSmNjmNjmVXmVXmVXmVXmVXmVXmVXmVXmVXmVXmVXmVX
+mVXmVXmVXmVXmVXmVXmVXmVXmVXmVXmVXmVXmNjmNjykSykSykSykSemNtdjtdjtdjykStdjykStdjemNtdjykSykStdjykSemNykSykSykSmNjmNjmVXmVXmVXmVXmVXmVXmVXmVXmVXmVXmVXmVXmVX
+mVXmVXmVXmVXmVXmVXmVXmVXmVXmVXmVXmVXmVXmNjmNjykSykSykSykSykSykSykSykSykSykSykSykSykSykSykStdjykSykSykSykSmNjmNjmVXmVXmVXmVXmVXmVXmVXmVXmVXmVXmVXmVXmVXmVX
+"}
diff --git a/_maps/RandomRuins/SpaceRuins/ninja_zen.dmm b/_maps/RandomRuins/SpaceRuins/ninja_zen.dmm
new file mode 100644
index 0000000000000..e41970697e71f
--- /dev/null
+++ b/_maps/RandomRuins/SpaceRuins/ninja_zen.dmm
@@ -0,0 +1,41 @@
+//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE
+// Minimal Ninja Dojo - only types that exist in BlueMoon. Like Wizard's Den (space ruin, always placed).
+
+"a" = (
+/turf/open/space,
+/area/space)
+
+"b" = (
+/turf/closed/indestructible/rock,
+/area/ruin/space/ninja_zen)
+
+"c" = (
+/turf/open/floor/plasteel,
+/area/ruin/space/ninja_zen)
+
+"d" = (
+/obj/effect/landmark/ninja_spawn,
+/turf/open/floor/plasteel,
+/area/ruin/space/ninja_zen)
+
+"e" = (
+/obj/effect/landmark/ninja_spawn,
+/turf/open/floor/plasteel,
+/area/ruin/space/ninja_zen)
+
+"f" = (
+/obj/machinery/cryopod/ninja,
+/turf/open/floor/plasteel,
+/area/ruin/space/ninja_zen)
+
+(1,1,1) = {"aaaaaaaaaaa",
+"abbbbbbbbba",
+"abcccccccba",
+"abcccccccba",
+"abcdcecccba",
+"abcccccccba",
+"abcccccccba",
+"abccccfccba",
+"abcccccccba",
+"abbbbbbbbba",
+"aaaaaaaaaaa"}
diff --git a/_maps/map_files/generic/CentCom.dmm b/_maps/map_files/generic/CentCom.dmm
index 783d23729540b..4b34e5ebfc675 100644
--- a/_maps/map_files/generic/CentCom.dmm
+++ b/_maps/map_files/generic/CentCom.dmm
@@ -12,6 +12,31 @@
"aad" = (
/turf/open/space,
/area/space)
+"nJA" = (
+/turf/open/space,
+/area/space)
+"nJB" = (
+/turf/closed/indestructible/rock,
+/area/ninja/outpost)
+"nJC" = (
+/turf/open/floor/plasteel,
+/area/ninja/outpost)
+"nJD" = (
+/obj/effect/landmark/ninja_spawn,
+/turf/open/floor/plasteel,
+/area/ninja/outpost)
+"nJE" = (
+/obj/effect/landmark/ninja_spawn,
+/turf/open/floor/plasteel,
+/area/ninja/outpost)
+"nJF" = (
+/obj/machinery/cryopod/ninja,
+/turf/open/floor/plasteel,
+/area/ninja/outpost)
+"nJG" = (
+/obj/structure/ninjatele,
+/turf/open/floor/plasteel,
+/area/ninja/outpost)
"aae" = (
/obj/structure/window/reinforced{
dir = 4
@@ -41072,6 +41097,149 @@ aaa
aaa
aaa
"}
+(45,195,1) = {"
+nJB
+nJB
+nJB
+nJB
+nJB
+nJB
+nJB
+nJB
+nJB
+nJB
+nJB
+"}
+(46,195,1) = {"
+nJB
+nJC
+nJC
+nJC
+nJC
+nJC
+nJC
+nJC
+nJC
+nJC
+nJB
+"}
+(47,195,1) = {"
+nJB
+nJC
+nJC
+nJC
+nJC
+nJC
+nJC
+nJC
+nJC
+nJC
+nJB
+"}
+(48,195,1) = {"
+nJB
+nJC
+nJD
+nJG
+nJC
+nJC
+nJC
+nJE
+nJC
+nJC
+nJB
+"}
+(49,195,1) = {"
+nJB
+nJC
+nJC
+nJC
+nJC
+nJC
+nJC
+nJC
+nJC
+nJC
+nJB
+"}
+(50,195,1) = {"
+nJB
+nJC
+nJC
+nJC
+nJC
+nJC
+nJC
+nJC
+nJC
+nJC
+nJB
+"}
+(51,195,1) = {"
+nJB
+nJC
+nJC
+nJC
+nJC
+nJC
+nJC
+nJC
+nJC
+nJC
+nJB
+"}
+(52,195,1) = {"
+nJB
+nJC
+nJC
+nJC
+nJC
+nJC
+nJC
+nJF
+nJC
+nJC
+nJB
+"}
+(53,195,1) = {"
+nJB
+nJC
+nJC
+nJC
+nJC
+nJC
+nJC
+nJC
+nJC
+nJC
+nJB
+"}
+(54,195,1) = {"
+nJB
+nJC
+nJC
+nJC
+nJC
+nJC
+nJC
+nJC
+nJC
+nJC
+nJB
+"}
+(55,195,1) = {"
+nJB
+nJB
+nJB
+nJB
+nJB
+nJB
+nJB
+nJB
+nJB
+nJB
+nJB
+"}
(36,1,1) = {"
aaa
aaa
diff --git a/code/__BLUEMOONCODE/_DEFINES/gamemode.dm b/code/__BLUEMOONCODE/_DEFINES/gamemode.dm
index 2be27cb81a907..7f2560892afba 100644
--- a/code/__BLUEMOONCODE/_DEFINES/gamemode.dm
+++ b/code/__BLUEMOONCODE/_DEFINES/gamemode.dm
@@ -7,3 +7,6 @@
#define ROUNDTYPE_EXTENDED "Extended"
#define ROUNDTYPE_MAX_COMBO 2
+
+// Space Ninja (SS220 port)
+#define SPECIAL_ROLE_SPACE_NINJA "Space Ninja"
diff --git a/code/__DEFINES/ninja_ss220.dm b/code/__DEFINES/ninja_ss220.dm
new file mode 100644
index 0000000000000..18b385fc936f3
--- /dev/null
+++ b/code/__DEFINES/ninja_ss220.dm
@@ -0,0 +1,31 @@
+//ninjacost() extraCheckFlag defines
+#define N_STEALTH_CANCEL 1
+#define N_ADRENALINE 2
+#define N_HEAL 3
+
+#define NINJA_INIT_LOCK_PHASE 6
+#define NINJA_INIT_ICON_GENERATE_PHASE 8
+#define NINJA_INIT_MODULES_PHASE 9
+#define NINJA_INIT_COMPLETE_PHASE 14
+
+#define NINJA_DEINIT_LOGOFF_PHASE 1
+#define NINJA_DEINIT_MODULES_PHASE 4
+#define NINJA_DEINIT_ICON_REGENERATE_PHASE 7
+#define NINJA_DEINIT_UNLOCK_PHASE 9
+#define NINJA_DEINIT_COMPLETE_PHASE 13
+
+//ninja alpha defines
+#define NINJA_ALPHA_NORMAL 255
+#define NINJA_ALPHA_SPIRIT_FORM 64
+// not actually invisible anymore
+#define NINJA_ALPHA_INVISIBILITY 20
+
+//ninja suit tgui related flags
+#define NINJA_TGUI_MAIN_SCREEN_STATE 0
+#define NINJA_TGUI_LOADING_STATE 1
+
+//ninjaDrainAct() defines for non numerical returns
+#define INVALID_DRAIN "INVALID" //This one is if the drain proc needs to cancel, eg missing variables, etc, it's important.
+#define DRAIN_RD_HACK_FAILED "RDHACKFAIL"
+#define DRAIN_MOB_SHOCK "MOBSHOCK"
+#define DRAIN_MOB_SHOCK_FAILED "MOBSHOCKFAIL"
diff --git a/code/__DEFINES/space_ninja_ss220.dm b/code/__DEFINES/space_ninja_ss220.dm
new file mode 100644
index 0000000000000..a4ed04cbe5da4
--- /dev/null
+++ b/code/__DEFINES/space_ninja_ss220.dm
@@ -0,0 +1,6 @@
+// Used to determine objectives preset for the ninja
+#define NINJA_TYPE_GENERIC "generic"
+#define NINJA_TYPE_PROTECTOR "protector"
+#define NINJA_TYPE_HACKER "hacker"
+#define NINJA_TYPE_KILLER "killer"
+
diff --git a/code/_globalvars/lists/mapping.dm b/code/_globalvars/lists/mapping.dm
index f9067dc3b2789..39d9132083cfd 100644
--- a/code/_globalvars/lists/mapping.dm
+++ b/code/_globalvars/lists/mapping.dm
@@ -24,6 +24,7 @@ GLOBAL_LIST_EMPTY(generic_event_spawns) //list of all spawns for events
GLOBAL_LIST_EMPTY(jobspawn_overrides) //These will take precedence over normal spawnpoints if created.
GLOBAL_LIST_EMPTY(wizardstart)
+GLOBAL_LIST_EMPTY(ninjastart)
GLOBAL_LIST_EMPTY(nukeop_start)
GLOBAL_LIST_EMPTY(nukeop_leader_start)
GLOBAL_LIST_EMPTY(syndiop_start)
diff --git a/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm b/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm
index 749916485c986..6cd9b47e98d92 100644
--- a/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm
+++ b/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm
@@ -1014,24 +1014,23 @@
cost = 10
requirements = list(101,101,101,101,60,50,30,20,10,10) //BLUEMOON CHANGES
repeatable = TRUE
- var/list/spawn_locs = list()
-/datum/dynamic_ruleset/midround/from_ghosts/space_ninja/execute()
- for(var/obj/effect/landmark/carpspawn/carp_spawn in GLOB.landmarks_list)
- if(!isturf(carp_spawn.loc))
- stack_trace("Carp spawn found not on a turf: [carp_spawn.type] on [isnull(carp_spawn.loc) ? "null" : carp_spawn.loc.type]")
- continue
- spawn_locs += carp_spawn.loc
- if(!spawn_locs.len)
- message_admins("No valid spawn locations found, aborting...")
- return MAP_ERROR
+/datum/dynamic_ruleset/midround/from_ghosts/space_ninja/ready(forced = FALSE)
+ if(required_candidates > (dead_players.len + list_observers.len))
+ return FALSE
+ if(!length(GLOB.ninjastart))
+ log_admin("Cannot accept Space Ninja ruleset. No ninja spawn points (Ninja Dojo on CentCom may not have loaded).")
+ message_admins("Cannot accept Space Ninja ruleset. No ninja spawn points.")
+ return FALSE
return ..()
+/datum/dynamic_ruleset/midround/from_ghosts/space_ninja/finish_setup(mob/new_character, index)
+ ..()
+ new_character.forceMove(pick(GLOB.ninjastart))
+
/datum/dynamic_ruleset/midround/from_ghosts/space_ninja/generate_ruleset_body(mob/applicant)
- var/mob/living/carbon/human/ninja = create_space_ninja(pick(spawn_locs))
+ var/mob/living/carbon/human/ninja = create_space_ninja(pick(GLOB.ninjastart))
ninja.key = applicant.key
- ninja.mind.add_antag_datum(/datum/antagonist/ninja)
-
message_admins("[ADMIN_LOOKUPFLW(ninja)] has been made into a Space Ninja by the midround ruleset.")
log_game("DYNAMIC: [key_name(ninja)] was spawned as a Space Ninja by the midround ruleset.")
return ninja
diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm
index 90cdf080a9899..4b88252366093 100644
--- a/code/game/gamemodes/game_mode.dm
+++ b/code/game/gamemodes/game_mode.dm
@@ -55,6 +55,9 @@
/// Associative list of current players, in order: living players, living antagonists, dead players and observers.
var/list/list/current_players = list(CURRENT_LIVING_PLAYERS = list(), CURRENT_LIVING_ANTAGS = list(), CURRENT_DEAD_PLAYERS = list(), CURRENT_OBSERVERS = list())
+ /// Space ninja gamemode: list of ninja minds (SS220 port).
+ var/list/datum/mind/space_ninjas = list()
+
/datum/game_mode/proc/announce() //Shows the gamemode's name and a fast description.
to_chat(world, "The gamemode is: [name]!")
to_chat(world, "[announce_text]")
diff --git a/code/game/gamemodes/spaceninja/space_ninja.dm b/code/game/gamemodes/spaceninja/space_ninja.dm
new file mode 100644
index 0000000000000..902b519e39c8d
--- /dev/null
+++ b/code/game/gamemodes/spaceninja/space_ninja.dm
@@ -0,0 +1,115 @@
+/datum/game_mode/space_ninja
+ name = "Space Ninja"
+ config_tag = "space-ninja"
+ required_players = 25
+ required_enemies = 1
+ recommended_enemies = 1
+ var/finished = FALSE
+ var/but_wait_theres_more = FALSE
+ var/datum/mind/pre_ninja
+
+/datum/game_mode/space_ninja/announce()
+ to_chat(world, ">Текущий игровой режим — Космический Ниндзя!")
+ to_chat(world, "На станцию проник опасный наёмник из клана Паука. Более известный как Космический Ниндзя. Какие бы он не преследовал цели, станция в опасности!")
+
+/datum/game_mode/space_ninja/can_start()
+ if(!..())
+ return FALSE
+ if(!length(GLOB.ninjastart))
+ stack_trace("A starting location for ninja could not be found, please report this bug!")
+ return FALSE
+ var/list/datum/mind/possible_ninjas = get_players_for_role(ROLE_NINJA)
+ if(!length(possible_ninjas))
+ return FALSE
+ pre_ninja = pick(possible_ninjas)
+ return TRUE
+
+/datum/game_mode/space_ninja/pre_setup()
+ space_ninjas |= pre_ninja
+ pre_ninja.assigned_role = SPECIAL_ROLE_SPACE_NINJA //So they aren't chosen for other jobs.
+ pre_ninja.special_role = SPECIAL_ROLE_SPACE_NINJA
+ pre_ninja.offstation_role = TRUE //ninja can't be targeted as a victim for some pity traitors
+ pre_ninja.set_original_mob(pre_ninja.current)
+ pre_ninja?.current.loc = pick(GLOB.ninjastart)
+ ..()
+ return TRUE
+
+/datum/game_mode/space_ninja/post_setup()
+ var/datum/antagonist/ninja/ninja_datum = new
+ ninja_datum.change_species(pre_ninja.current)
+ pre_ninja?.add_antag_datum(ninja_datum)
+ ..()
+
+// Checks if the game should end due to all Ninjas being dead, or MMI'd/Borged
+/datum/game_mode/space_ninja/check_finished()
+ var/ninjas_alive = 0
+
+ for(var/datum/mind/ninja in space_ninjas)
+ if(!iscarbon(ninja.current))
+ continue
+ if(ninja.current.stat == DEAD)
+ continue
+ if(is_mmi(ninja.current)) // ninja is in an MMI, don't count them as alive
+ continue
+ ninjas_alive++
+
+ if(ninjas_alive || but_wait_theres_more)
+ return ..()
+ else
+ finished = TRUE
+ return TRUE
+
+/datum/game_mode/space_ninja/declare_completion(ragin = FALSE)
+ if(finished && !ragin)
+ SSticker.mode_result = "ninja loss - ninja killed"
+ to_chat(world, span_warning(span_bold(span_fontsize3(" Ниндзя был[(length(space_ninjas)>1)?"и":""] убит[(length(space_ninjas)>1)?"ы":""] экипажем! Клан Паука ещё не скоро отмоется от этого позора!"))))
+ ..()
+ return TRUE
+
+/datum/game_mode/proc/auto_declare_completion_ninja()
+ if(!length(space_ninjas))
+ return FALSE
+
+ var/list/text = list(span_bold(span_fontsize3("
Космическим[(length(space_ninjas) > 1)?"и":""] Ниндзя был[(length(space_ninjas) > 1)?"и":""]:")))
+
+ for(var/datum/mind/ninja in space_ninjas)
+
+ text += "
[ninja.get_display_key()] был [ninja.name] ("
+ if(ninja.current)
+ if(ninja.current.stat == DEAD)
+ text += "Умер"
+ else
+ text += "Выжил"
+ if(ninja.current.real_name != ninja.name)
+ text += " как [ninja.current.real_name]"
+ else
+ text += "Тело уничтожено"
+ text += ")"
+ text += "
"
+
+ var/datum/antagonist/ninja/ninja_datum = ninja.has_antag_datum(/datum/antagonist/ninja)
+ if(ninja_datum)
+ text += "Выбранные способности: [ninja_datum.purchased_abilities]"
+
+ var/count = 1
+ var/ninjawin = TRUE
+ for(var/datum/objective/objective in ninja.get_all_objectives())
+ if(objective.check_completion())
+ text += "
Цель #[count]: [objective.explanation_text] Успех!"
+ SSblackbox.record_feedback("nested tally", "ninja_objective", 1, list("[objective.type]", "SUCCESS"))
+ else
+ text += "
Цель #[count]: [objective.explanation_text] Провал."
+ SSblackbox.record_feedback("nested tally", "ninja_objective", 1, list("[objective.type]", "FAIL"))
+ ninjawin = FALSE
+ count++
+
+ if(ninja.current && ninja.current.stat != DEAD && ninjawin)
+ text += "
Ниндзя успешно выполнил свои задачи!"
+ SSblackbox.record_feedback("tally", "ninja_success", 1, "SUCCESS")
+ else
+ text += "
Ниндзя провалился!"
+ SSblackbox.record_feedback("tally", "ninja_success", 1, "FAIL")
+ text += "
"
+
+ return text.Join("")
+
diff --git a/code/modules/admin/verbs/one_click_antag.dm b/code/modules/admin/verbs/one_click_antag.dm
index 680f1fb16bfc7..7800364e48760 100644
--- a/code/modules/admin/verbs/one_click_antag.dm
+++ b/code/modules/admin/verbs/one_click_antag.dm
@@ -26,6 +26,7 @@
Make CentCom Response Team (Requires Ghosts)
Make Abductor Team (Requires Ghosts)
Make Revenant (Requires Ghost)
+ Make Ninja (Requires Ghost)
"}
//Make Qareen (Requires Ghost)
Temporary removed. - Gardelin0
@@ -353,7 +354,9 @@
return TRUE
/datum/admins/proc/makeSpaceNinja()
- new /datum/round_event/ghost_role/space_ninja()
+ var/datum/round_event_control/space_ninja/C = locate(/datum/round_event_control/space_ninja) in SSevents.control
+ if(C)
+ C.runEvent(random = FALSE, admin_forced = TRUE)
return TRUE
// DEATH SQUADS
diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm
index f789b58bdff31..3ce93689230cc 100644
--- a/code/modules/admin/verbs/randomverbs.dm
+++ b/code/modules/admin/verbs/randomverbs.dm
@@ -429,8 +429,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
var/list/ninja_spawn = list()
for(var/obj/effect/landmark/carpspawn/L in GLOB.landmarks_list)
ninja_spawn += L
- var/datum/antagonist/ninja/ninjadatum = new_character.mind.has_antag_datum(/datum/antagonist/ninja)
- ninjadatum.equip_space_ninja()
+ new_character.mind.add_antag_datum(/datum/antagonist/ninja)
if(ninja_spawn.len)
new_character.forceMove(pick(ninja_spawn))
diff --git a/code/modules/antagonists/space_ninja/machinery/ninja_teleporter.dm b/code/modules/antagonists/space_ninja/machinery/ninja_teleporter.dm
new file mode 100644
index 0000000000000..128bf7b17d474
--- /dev/null
+++ b/code/modules/antagonists/space_ninja/machinery/ninja_teleporter.dm
@@ -0,0 +1,82 @@
+// Консоль в додзё: телепорт на станцию в случайную точку из списка (как scroll of teleportation) и кнопка «Убраться прочь» после выполнения остальных целей.
+
+/proc/ninja_other_objectives_complete(mob/living/carbon/human/ninja)
+ if(!ninja?.mind)
+ return FALSE
+ var/list/objectives = ninja.mind.get_all_objectives()
+ if(!length(objectives))
+ return FALSE
+ for(var/datum/objective/O in objectives)
+ if(istype(O, /datum/objective/ninja_leave))
+ continue
+ if(!O.completed && !O.check_completion())
+ return FALSE
+ return TRUE
+
+/// TRUE, если выполнено не менее min_count целей (цель «Убраться прочь» не учитывается).
+/proc/ninja_completed_objectives_count(mob/living/carbon/human/ninja, min_count = 3)
+ if(!ninja?.mind || min_count <= 0)
+ return FALSE
+ var/completed = 0
+ for(var/datum/objective/O in ninja.mind.get_all_objectives())
+ if(istype(O, /datum/objective/ninja_leave))
+ continue
+ if(O.completed || O.check_completion())
+ completed++
+ if(completed >= min_count)
+ return TRUE
+ return FALSE
+
+/obj/structure/ninjatele
+ name = "Терминал внедрения"
+ desc = "Консоль для телепортации на станцию в случайное место из сетки сканов (как свиток телепортации)."
+ icon = 'icons/obj/ninjaobjects.dmi'
+ icon_state = "teleconsole"
+ anchored = TRUE
+
+/obj/structure/ninjatele/attack_hand(mob/user, list/params)
+ if(!is_ninja(user))
+ return
+ var/mob/living/carbon/human/ninja = user
+ var/choice = tgui_alert(ninja, "Телепортироваться на станцию в случайную точку?", "Терминал внедрения", list("Телепорт на станцию", "Отмена"))
+ if(choice != "Телепорт на станцию" || !ninja.can_interact_with(src))
+ return
+ add_fingerprint(ninja)
+ ninja_teleport_to_station(ninja)
+
+/obj/structure/ninjatele/proc/ninja_teleport_to_station(mob/living/carbon/human/ninja)
+ if(!length(GLOB.teleportlocs))
+ to_chat(ninja, span_warning("Сетка сканов станции недоступна."))
+ return
+ var/area_name = pick(GLOB.teleportlocs)
+ var/area/thearea = GLOB.teleportlocs[area_name]
+ var/list/L = list()
+ for(var/turf/T in get_area_turfs(thearea.type))
+ if(!is_blocked_turf(T))
+ L += T
+ if(!length(L))
+ to_chat(ninja, span_warning("Не удалось найти подходящую точку в выбранной зоне."))
+ return
+ var/turf/dest = pick(L)
+ var/turf/T = get_turf(ninja)
+ if(do_teleport(ninja, dest, forceMove = TRUE, channel = TELEPORT_CHANNEL_MAGIC, forced = TRUE))
+ ninja.log_message("Ninja VOID-shifted from [COORD(T)] to [COORD(ninja)].", LOG_GAME)
+ playsound(ninja.loc, 'sound/effects/phasein.ogg', 25, TRUE)
+ playsound(ninja.loc, 'sound/effects/sparks2.ogg', 50, TRUE)
+ new /obj/effect/temp_visual/dir_setting/ninja/phase(get_turf(ninja), ninja.dir)
+ to_chat(ninja, span_boldnotice("Телепортация на станцию успешна."))
+
+/// Вызывается из способности костюма «Убраться прочь» или при необходимости из консоли. Завершает раунд для ниндзя.
+/proc/ninja_leave_round(mob/living/carbon/human/ninja)
+ if(!ninja?.mind)
+ return
+ var/datum/objective/ninja_leave/leave_obj = locate(/datum/objective/ninja_leave) in ninja.mind.get_all_objectives()
+ if(leave_obj)
+ leave_obj.completed = TRUE
+ ninja.visible_message(span_boldnotice("[ninja] растворяется в дыму и исчезает в никуда!"))
+ playsound(ninja, 'sound/effects/smoke.ogg', 30, TRUE)
+ var/turf/T = get_turf(ninja)
+ new /obj/effect/particle_effect/smoke(T)
+ ninja.log_message("Ninja left the round (all objectives complete).", LOG_GAME)
+ ninja.ghostize(FALSE, penalize = FALSE, voluntary = TRUE)
+ addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(qdel), ninja), 1)
diff --git a/code/modules/antagonists/space_ninja/ninja_zen.dm b/code/modules/antagonists/space_ninja/ninja_zen.dm
new file mode 100644
index 0000000000000..e3f92d1f9b42b
--- /dev/null
+++ b/code/modules/antagonists/space_ninja/ninja_zen.dm
@@ -0,0 +1,71 @@
+// Личный додзё космического ниндзя: консоль телепорта на станцию (в случайную точку из списка как scroll) и кнопка «Убраться прочь» после выполнения всех целей.
+
+// Область додзё (основная комната со спавном).
+/area/ninja/outpost
+ name = "SpiderClan Dojo"
+ icon_state = "ninja_dojo"
+ ambientsounds = list('sound/ambience/ambifailure.ogg', 'sound/ambience/ambigen4.ogg', 'sound/ambience/ambimaint2.ogg', 'sound/ambience/ambimystery.ogg', 'sound/ambience/ambitech2.ogg')
+ requires_power = FALSE
+ has_gravity = STANDARD_GRAVITY
+ sound_environment = SOUND_AREA_MEDIUM_SOFTFLOOR
+
+// Область «холдинга» / пещеры (криопод для модуля «второй шанс», оборудование под цели).
+/area/ninja/holding
+ name = "SpiderClan Holding Facility"
+ icon_state = "ninja_holding"
+ ambientsounds = list('sound/ambience/ambifailure.ogg', 'sound/ambience/ambigen4.ogg', 'sound/ambience/ambimaint2.ogg', 'sound/ambience/ambimystery.ogg', 'sound/ambience/ambitech2.ogg')
+ requires_power = FALSE
+ has_gravity = STANDARD_GRAVITY
+ sound_environment = SOUND_AREA_MEDIUM_SOFTFLOOR
+
+// Внешняя территория клана (космос/астероиды вокруг аутпоста).
+/area/ninja/outside
+ name = "SpiderClan Territory"
+ icon_state = "ninja_outside"
+ sound_environment = SOUND_AREA_ASTEROID
+
+// Совместимость: телепорт призрака ищет и эту область.
+/area/ruin/space/ninja_zen
+ name = "Ninja Dojo"
+ icon_state = "ninja_dojo"
+ requires_power = FALSE
+ has_gravity = STANDARD_GRAVITY
+ sound_environment = SOUND_AREA_MEDIUM_SOFTFLOOR
+
+// Криопод для выхода ниндзя из раунда и капсула «второй шанс» (вики SS220).
+/obj/machinery/cryopod/ninja
+ name = "крио-стазис Клана Паука"
+ desc = "Капсула долговременной заморозки. Позволяет покинуть раунд и вернуться к Клану после выполнения целей. Только для космических ниндзя."
+ icon_state = "cryopod-open"
+ tele = TRUE
+ time_till_despawn = 15 SECONDS
+ on_store_message = "отбыл к Клану Паука."
+ on_store_name = "Клан Паука"
+
+/obj/machinery/cryopod/ninja/close_machine(atom/movable/target)
+ if(isliving(target) && !is_ninja(target))
+ to_chat(target, span_warning("Только космический ниндзя может использовать эту капсулу."))
+ return
+ return ..()
+
+/obj/machinery/cryopod/ninja/MouseDrop_T(mob/living/target, mob/user)
+ if(isliving(target))
+ if(target == user && !is_ninja(user))
+ to_chat(user, span_warning("Только космический ниндзя может использовать эту капсулу."))
+ return
+ if(target != user && !is_ninja(target))
+ to_chat(user, span_warning("В капсулу Клана можно поместить только ниндзя."))
+ return
+ return ..()
+
+// Ландмарк точки спавна ниндзя в додзё (по аналогии с wizardstart).
+/obj/effect/landmark/ninja_spawn
+ name = "ninja spawn"
+ icon_state = "snukeop_spawn"
+
+/obj/effect/landmark/ninja_spawn/Initialize(mapload)
+ . = ..()
+ GLOB.ninjastart += get_turf(src)
+ return INITIALIZE_HINT_QDEL
+
+// Додзё на карте ЦК (CentCom.dmm): область area/ninja/outpost, спавны, криопод, терминал внедрения (телепорт как у scroll + «Убраться прочь» после выполнения целей).
diff --git a/code/modules/antagonists/space_ninja/space_ninja.dm b/code/modules/antagonists/space_ninja/space_ninja.dm
index 02a271aae5f4f..d8dbeeda308dc 100644
--- a/code/modules/antagonists/space_ninja/space_ninja.dm
+++ b/code/modules/antagonists/space_ninja/space_ninja.dm
@@ -49,6 +49,7 @@
/datum/antagonist/ninja/proc/addMemories()
antag_memory += "Я - элитный наёмник Клана Паука. КОСМИЧЕСКИЙ НИНДЗЯ!
"
antag_memory += "Сюрприз - моё оружие. Тени - мой доспех. Без них я ничто. (//чтобы использовать свой костюм, подключите его с помощью кнопки на вашем UI)!
"
+ antag_memory += "У меня есть личный корабль (додзё) в космосе с крио-стазисом: после выполнения целей могу вернуться на корабль и уйти в крио, чтобы покинуть раунд.
"
/datum/objective/cyborg_hijack
explanation_text = "Конвертируйте одного станционного робота в киборга-саботёра с помощью ваших перчаток."
@@ -66,6 +67,12 @@
/datum/objective/terror_message
explanation_text = "Взломайте консоль капитана, используя перчатки, чтобы наслать на станцию ещё одну угрозу. ИИ получит уведомление в тот момент, когда вы начнёте!"
+/datum/objective/ninja_leave
+ explanation_text = "Уберитесь прочь со станции после выполнения остальных целей."
+
+/datum/objective/ninja_leave/check_completion()
+ return completed
+
/**
* Proc that adds all the ninja's objectives to the antag datum.
*
@@ -108,15 +115,16 @@
var/datum/objective/communicationobjective = new /datum/objective/terror_message()
objectives += communicationobjective
- //Survival until end
- var/datum/objective/survival = new /datum/objective/survive()
- survival.owner = owner
- objectives += survival
+ // Убраться прочь со станции после выполнения всех 6 целей (способность в костюме)
+ var/datum/objective/ninja_leave/leaveobjective = new /datum/objective/ninja_leave()
+ leaveobjective.owner = owner
+ objectives += leaveobjective
/datum/antagonist/ninja/greet()
SEND_SOUND(owner.current, sound('sound/ambience/antag/ninja_greeting.ogg'))
to_chat(owner.current, "Я - элитный наёмник могучего Клана Паука. КОСМИЧЕСКИЙ НИНДЗЯ!")
to_chat(owner.current, "Сюрприз - моё оружие. Тени - мой доспех. Без них я ничто. (//чтобы использовать свой костюм, подключите его с помощью кнопки на вашем UI)!")
+ to_chat(owner.current, span_notice("Твой личный корабль (додзё) — в космосе. На нём есть крио-стазис: после выполнения целей вернись на корабль и ляг в капсулу, чтобы покинуть раунд."))
owner.announce_objectives()
/datum/antagonist/ninja/on_gain()
diff --git a/code/modules/antagonists/space_ninja_backup/space_ninja.dm b/code/modules/antagonists/space_ninja_backup/space_ninja.dm
new file mode 100644
index 0000000000000..858e537143780
--- /dev/null
+++ b/code/modules/antagonists/space_ninja_backup/space_ninja.dm
@@ -0,0 +1,168 @@
+/datum/antagonist/ninja
+ name = "Space Ninja"
+ antagpanel_category = "Space Ninja"
+ job_rank = ROLE_NINJA
+ antag_hud_type = ANTAG_HUD_NINJA
+ antag_hud_name = "space_ninja"
+ show_name_in_check_antagonists = TRUE
+ show_to_ghosts = TRUE
+ antag_moodlet = /datum/mood_event/focused
+ ///Whether or not this ninja will obtain objectives
+ var/give_objectives = TRUE
+ ///Whether or not this ninja receives the standard equipment
+ var/give_equipment = FALSE
+ ///
+ var/ninja_outfit
+
+/proc/is_ninja(mob/living/M)
+ return M && M.mind && M.mind.has_antag_datum(/datum/antagonist/ninja)
+
+/datum/antagonist/ninja/apply_innate_effects(mob/living/mob_override)
+ var/mob/living/ninja = mob_override || owner.current
+ add_antag_hud(antag_hud_type, antag_hud_name, ninja)
+
+/datum/antagonist/ninja/remove_innate_effects(mob/living/mob_override)
+ var/mob/living/ninja = mob_override || owner.current
+ remove_antag_hud(antag_hud_type, ninja)
+
+/**
+ * Proc that equips the space ninja outfit on a given individual. By default this is the owner of the antagonist datum.
+ *
+ * Proc that equips the space ninja outfit on a given individual. By default this is the owner of the antagonist datum.
+ * Arguments:
+ * * ninja - The human to receive the gear
+ * * Returns a proc call on the given human which will equip them with all the gear.
+ */
+
+/datum/antagonist/ninja/proc/equip_space_ninja_pre(mob/living/carbon/human/ninja = owner.current) // Ниндзя спавнится в космосе. Значит, экипируем его в первичный комплект заранее, чтобы не сдулся.
+ if(!isobserver(ninja))
+ ninja.equipOutfit(/datum/outfit/ninja_pre)
+
+/datum/antagonist/ninja/proc/equip_space_ninja(mob/living/carbon/human/ninja = owner.current)
+ return ninja.equipOutfit(ninja_outfit)
+
+/**
+ * Proc that adds the proper memories to the antag datum
+ *
+ * Proc that adds the ninja starting memories to the owner of the antagonist datum.
+ */
+/datum/antagonist/ninja/proc/addMemories()
+ antag_memory += "Я - элитный наёмник Клана Паука. КОСМИЧЕСКИЙ НИНДЗЯ!
"
+ antag_memory += "Сюрприз - моё оружие. Тени - мой доспех. Без них я ничто. (//чтобы использовать свой костюм, подключите его с помощью кнопки на вашем UI)!
"
+ antag_memory += "У меня есть личный корабль (додзё) в космосе с крио-стазисом: после выполнения целей могу вернуться на корабль и уйти в крио, чтобы покинуть раунд.
"
+
+/datum/objective/cyborg_hijack
+ explanation_text = "Конвертируйте одного станционного робота в киборга-саботёра с помощью ваших перчаток."
+
+/datum/objective/door_jack
+ ///How many doors that need to be opened using the gloves to pass the objective
+ var/doors_required = 0
+
+/datum/objective/plant_explosive
+ var/area/detonation_location
+
+/datum/objective/security_scramble
+ explanation_text = "Взломайте консоль охраны, используя перчатки, чтобы установить арест на весь экипаж. ИИ получит уведомление в тот момент, когда вы начнёте!"
+
+/datum/objective/terror_message
+ explanation_text = "Взломайте консоль капитана, используя перчатки, чтобы наслать на станцию ещё одну угрозу. ИИ получит уведомление в тот момент, когда вы начнёте!"
+
+/**
+ * Proc that adds all the ninja's objectives to the antag datum.
+ *
+ * Proc that adds all the ninja's objectives to the antag datum. Called when the datum is gained.
+ */
+/datum/antagonist/ninja/proc/addObjectives()
+ //Cyborg Hijack: Flag set to complete in the DrainAct in ninjaDrainAct.dm
+ var/datum/objective/hijack = new /datum/objective/cyborg_hijack()
+ objectives += hijack
+
+ //Research stealing
+ var/datum/objective/download/research = new /datum/objective/download()
+ research.owner = owner
+ research.gen_amount_goal()
+ objectives += research
+
+ //Door jacks, flag will be set to complete on when the last door is hijacked
+ var/datum/objective/door_jack/doorobjective = new /datum/objective/door_jack()
+ doorobjective.doors_required = rand(15,40)
+ doorobjective.explanation_text = "Взломайте [doorobjective.doors_required] станционных шлюзов с помощью ваших перчаток."
+ objectives += doorobjective
+
+ //Explosive plant, the bomb will register its completion on priming
+ var/datum/objective/plant_explosive/bombobjective = new /datum/objective/plant_explosive()
+ for(var/sanity in 1 to 100) // 100 checks at most.
+ var/area/selected_area = pick(GLOB.sortedAreas)
+ if(!is_station_level(selected_area.z) || !selected_area.area_flags == VALID_TERRITORY)
+ continue
+ bombobjective.detonation_location = selected_area
+ break
+ if(bombobjective.detonation_location)
+ bombobjective.explanation_text = "Детонируйте взрывпакет в локации: [bombobjective.detonation_location]. В других местах взрывчатка не будет работать!"
+ objectives += bombobjective
+
+ //Security Scramble, set to complete upon using your gloves on a security console
+ var/datum/objective/securityobjective = new /datum/objective/security_scramble()
+ objectives += securityobjective
+
+ //Message of Terror, set to complete upon using your gloves a communication console
+ var/datum/objective/communicationobjective = new /datum/objective/terror_message()
+ objectives += communicationobjective
+
+ //Survival until end
+ var/datum/objective/survival = new /datum/objective/survive()
+ survival.owner = owner
+ objectives += survival
+
+/datum/antagonist/ninja/greet()
+ SEND_SOUND(owner.current, sound('sound/ambience/antag/ninja_greeting.ogg'))
+ to_chat(owner.current, "Я - элитный наёмник могучего Клана Паука. КОСМИЧЕСКИЙ НИНДЗЯ!")
+ to_chat(owner.current, "Сюрприз - моё оружие. Тени - мой доспех. Без них я ничто. (//чтобы использовать свой костюм, подключите его с помощью кнопки на вашем UI)!")
+ to_chat(owner.current, span_notice("Твой личный корабль (додзё) — в космосе. На нём есть крио-стазис: после выполнения целей вернись на корабль и ляг в капсулу, чтобы покинуть раунд."))
+ owner.announce_objectives()
+
+/datum/antagonist/ninja/on_gain()
+ if(give_objectives)
+ addObjectives()
+ addMemories()
+
+ equip_space_ninja_pre()
+ choosePath()
+
+
+ owner.current.mind.assigned_role = ROLE_NINJA
+ owner.current.mind.special_role = ROLE_NINJA
+ var/mob/living/carbon/human/H = owner.current
+ var/load_character = alert(H.client, "Желаете загрузить текущего своего выбранного персонажа?", "Играть своим персонажем!", "Да", "Нет")
+ if(load_character == "Да")
+ H.load_client_appearance(H.client)
+ return ..()
+
+/datum/antagonist/ninja/admin_add(datum/mind/new_owner,mob/admin)
+ new_owner.assigned_role = ROLE_NINJA
+ new_owner.special_role = ROLE_NINJA
+ new_owner.add_antag_datum(src)
+ message_admins("[key_name_admin(admin)] has ninja'ed [key_name_admin(new_owner)].")
+ log_admin("[key_name(admin)] has ninja'ed [key_name(new_owner)].")
+
+
+/datum/antagonist/ninja/proc/choosePath(mob/living/carbon/human/ninja = owner.current)
+ if(!isobserver(ninja))
+ //var/type = tgui_alert(ninja, "Выберите предпочительную экипировку", "Космический ниндзя", list("Путь Ёкая", "Путь Паука", "Путь Мудрости"))
+ var/choices = list("Путь Ёкая", "Путь Паука", "Путь Мудрости")
+ var/choice = input(ninja, "Выберите предпочительную экипировку", "Космический ниндзя") in choices
+ switch(choice)
+ if("Путь Ёкая")
+ give_equipment = TRUE
+ ninja_outfit = /datum/outfit/ninja_ronin
+ if("Путь Паука")
+ give_equipment = TRUE
+ ninja_outfit = /datum/outfit/ninja
+ if("Путь Мудрости")
+ give_equipment = TRUE
+ ninja_outfit = /datum/outfit/ninja_wisdom
+
+ if(give_equipment)
+ ninja.delete_equipment()
+ equip_space_ninja(ninja)
+
diff --git a/code/modules/events/ninja_ss220.dm b/code/modules/events/ninja_ss220.dm
new file mode 100644
index 0000000000000..b4359f5524c57
--- /dev/null
+++ b/code/modules/events/ninja_ss220.dm
@@ -0,0 +1,26 @@
+/datum/event/space_ninja
+ name = "Космический ниндзя"
+
+/datum/event/space_ninja/proc/get_ninja()
+ var/image/I = new('icons/mob/ninja_previews.dmi', "ninja_preview_new_hood_green")
+ var/list/candidates = SSghost_spawns.poll_candidates("Do you wish to be considered for the position of a Spider Clan Assassin'?", ROLE_NINJA, source = I)
+ if(length(candidates))
+ var/mob/dead/observer/selected = pick(candidates)
+ candidates -= selected
+ var/mob/living/carbon/human/new_character = makeBody(selected)
+ new_character.mind.make_Space_Ninja()
+ return TRUE
+ else
+ return FALSE
+
+/datum/event/space_ninja/start()
+ processing = 0 //so it won't fire again in next tick
+ var/list/check_list = num_station_players()
+ for(var/mob/new_player/lobby_player in check_list)
+ check_list -= lobby_player
+ if(length(check_list) < 25)
+ message_admins("Space Ninja event failed to start. Not enough players.")
+ return
+ if(!get_ninja())
+ message_admins("Space Ninja event failed to find players. Retrying in 30s.")
+ addtimer(CALLBACK(src, PROC_REF(get_ninja)), 5 SECONDS)
diff --git a/code/modules/events/space_ninja.dm b/code/modules/events/space_ninja.dm
index 8ae8c1bd1f233..e76f5c3805331 100644
--- a/code/modules/events/space_ninja.dm
+++ b/code/modules/events/space_ninja.dm
@@ -4,7 +4,7 @@
max_occurrences = 1
weight = 10
earliest_start = 45 MINUTES
- min_players = 35
+ min_players = 0
dynamic_should_hijack = TRUE
category = EVENT_CATEGORY_INVASION
description = "A space ninja infiltrates the station."
@@ -14,17 +14,11 @@
role_name = "Space Ninja"
/datum/round_event/ghost_role/space_ninja/spawn_role()
- var/list/spawn_locs = list()
- for(var/obj/effect/landmark/carpspawn/carp_spawn in GLOB.landmarks_list)
- if(!isturf(carp_spawn.loc))
- stack_trace("Carp spawn found not on a turf: [carp_spawn.type] on [isnull(carp_spawn.loc) ? "null" : carp_spawn.loc.type]")
- continue
- spawn_locs += carp_spawn.loc
- if(!spawn_locs.len)
- message_admins("No valid spawn locations found, aborting...")
+ // Додзё на уровне ЦК (CentCom.dmm), точки в GLOB.ninjastart заполняются при загрузке карты.
+ if(!length(GLOB.ninjastart))
+ message_admins("Ninja Dojo has no spawn points (CentCom may not have loaded).")
return MAP_ERROR
- //selecting a candidate player
var/list/candidates = get_candidates(ROLE_NINJA, null, ROLE_NINJA)
if(!candidates.len)
return NOT_ENOUGH_PLAYERS
@@ -32,8 +26,7 @@
var/mob/dead/selected_candidate = pick(candidates)
var/key = selected_candidate.key
- //spawn the ninja and assign the candidate
- var/mob/living/carbon/human/ninja = create_space_ninja(pick(spawn_locs))
+ var/mob/living/carbon/human/ninja = create_space_ninja(pick(GLOB.ninjastart))
ninja.key = key
ninja.mind.add_antag_datum(/datum/antagonist/ninja)
spawned_mobs += ninja
diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm
index e78136bd1fc3d..834a5f265943f 100644
--- a/code/modules/mob/dead/observer/observer.dm
+++ b/code/modules/mob/dead/observer/observer.dm
@@ -492,7 +492,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
var/list/L = list()
for(var/turf/T in get_area_turfs(thearea.type))
- L+=T
+ L += T
if(!L || !L.len)
to_chat(usr, "No area available.")
diff --git a/code/modules/ninja/suit/ninja_equipment_actions/ninja_leave_round.dm b/code/modules/ninja/suit/ninja_equipment_actions/ninja_leave_round.dm
new file mode 100644
index 0000000000000..5ac09094a191c
--- /dev/null
+++ b/code/modules/ninja/suit/ninja_equipment_actions/ninja_leave_round.dm
@@ -0,0 +1,17 @@
+// Способность «Убраться прочь» выдаётся костюмом после выполнения всех целей (кроме одноимённой). Появляется в панели способностей с оповещением в чат.
+
+/datum/action/item_action/ninja_leave_round
+ name = "Убраться прочь"
+ desc = "Покинуть станцию и завершить миссию. Доступно после выполнения всех 6 целей."
+ button_icon_state = "ninja_exit"
+ icon_icon = 'icons/mob/actions/actions_ninja.dmi'
+ background_icon_state = "background_green"
+
+/datum/action/item_action/ninja_leave_round/Trigger(trigger_flags)
+ . = ..()
+ if(!. || !iscarbon(owner))
+ return
+ var/mob/living/carbon/human/ninja = owner
+ if(!ninja?.mind)
+ return
+ ninja_leave_round(ninja)
diff --git a/code/modules/ninja/suit/suit.dm b/code/modules/ninja/suit/suit.dm
index da1eab6343aa7..19226a666e9d9 100644
--- a/code/modules/ninja/suit/suit.dm
+++ b/code/modules/ninja/suit/suit.dm
@@ -58,6 +58,8 @@
var/s_busy = FALSE
///Whether or not the adrenaline boost ability is available
var/a_boost = TRUE
+ /// Выдана ли способность «Убраться прочь» (появляется после выполнения всех целей, кроме одноимённой)
+ var/leave_ability_granted = FALSE
/obj/item/clothing/suit/space/space_ninja/examine(mob/user)
. = ..()
if(!s_initialized)
@@ -113,6 +115,12 @@
else
cell.charge = 0
cancel_stealth()
+ // Способность «Убраться прочь» появляется после выполнения всех 6 целей (кроме цели «Убраться прочь»)
+ if(!leave_ability_granted && ninja_completed_objectives_count(affecting, 6))
+ leave_ability_granted = TRUE
+ var/datum/action/item_action/ninja_leave_round/A = new(target = src)
+ A.Grant(affecting)
+ to_chat(affecting, span_boldnotice("Все 6 целей выполнены. Доступна способность «Убраться прочь» — покиньте станцию и завершите миссию."))
/obj/item/clothing/suit/space/space_ninja/ui_action_click(mob/user, action)
if(IS_NINJA_SUIT_INITIALIZATION(action))
diff --git a/icons/obj/ninjaobjects.dmi b/icons/obj/ninjaobjects.dmi
index 31d00b5936914..773068125619a 100644
Binary files a/icons/obj/ninjaobjects.dmi and b/icons/obj/ninjaobjects.dmi differ
diff --git a/tgstation.dme b/tgstation.dme
index a0db1c74b1829..ec94d643b1ec1 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -2084,6 +2084,8 @@
#include "code\modules\antagonists\slaughter\slaughterevent.dm"
#include "code\modules\antagonists\space_dragon\space_dragon.dm"
#include "code\modules\antagonists\space_ninja\space_ninja.dm"
+#include "code\modules\antagonists\space_ninja\ninja_zen.dm"
+#include "code\modules\antagonists\space_ninja\machinery\ninja_teleporter.dm"
#include "code\modules\antagonists\survivalist\survivalist.dm"
#include "code\modules\antagonists\swarmer\swarmer.dm"
#include "code\modules\antagonists\swarmer\swarmer_event.dm"
@@ -3476,6 +3478,7 @@
#include "code\modules\ninja\suit\ninja_equipment_actions\ninja_status_read.dm"
#include "code\modules\ninja\suit\ninja_equipment_actions\ninja_stealth.dm"
#include "code\modules\ninja\suit\ninja_equipment_actions\ninja_suit_initialisation.dm"
+#include "code\modules\ninja\suit\ninja_equipment_actions\ninja_leave_round.dm"
#include "code\modules\ninja\suit\ninja_equipment_actions\ninja_sword_recall.dm"
#include "code\modules\NTNet\netdata.dm"
#include "code\modules\NTNet\network.dm"