diff --git a/_maps/RandomRuins/SpaceRuins/hilbertshoteltestingsite.dmm b/_maps/RandomRuins/SpaceRuins/hilbertshoteltestingsite.dmm new file mode 100644 index 0000000000..a89d1422d2 --- /dev/null +++ b/_maps/RandomRuins/SpaceRuins/hilbertshoteltestingsite.dmm @@ -0,0 +1,970 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"a" = ( +/turf/open/space/basic, +/area/template_noop) +"b" = ( +/turf/open/floor/plating/asteroid/airless, +/area/ruin/unpowered/no_grav) +"c" = ( +/turf/closed/wall/r_wall/rust, +/area/ruin/space/has_grav/hilbertresearchfacility) +"d" = ( +/turf/closed/wall/r_wall, +/area/ruin/space/has_grav/hilbertresearchfacility) +"e" = ( +/obj/machinery/porta_turret/syndicate{ + desc = "A ballistic machine gun auto-turret that fires bluespace bullets."; + lethal_projectile = /obj/item/projectile/magic/teleport; + name = "displacement turret"; + stun_projectile = /obj/item/projectile/magic/teleport + }, +/turf/open/floor/plasteel/grimy{ + icon_state = "engine" + }, +/area/ruin/space/has_grav/hilbertresearchfacility) +"f" = ( +/turf/open/floor/plasteel/grimy{ + icon_state = "engine" + }, +/area/ruin/space/has_grav/hilbertresearchfacility) +"g" = ( +/obj/structure/table/glass, +/turf/open/floor/plasteel/grimy{ + icon_state = "engine" + }, +/area/ruin/space/has_grav/hilbertresearchfacility) +"h" = ( +/obj/structure/table/glass, +/obj/item/stack/sheet/bluespace_crystal{ + amount = 37 + }, +/turf/open/floor/plasteel/grimy{ + icon_state = "engine" + }, +/area/ruin/space/has_grav/hilbertresearchfacility) +"i" = ( +/obj/structure/table/glass, +/obj/item/bodybag/bluespace, +/turf/open/floor/plasteel/grimy{ + icon_state = "engine" + }, +/area/ruin/space/has_grav/hilbertresearchfacility) +"j" = ( +/turf/open/floor/plasteel/stairs/left, +/area/ruin/space/has_grav/hilbertresearchfacility) +"k" = ( +/turf/open/floor/plasteel/stairs/medium, +/area/ruin/space/has_grav/hilbertresearchfacility) +"l" = ( +/turf/open/floor/plasteel/stairs/right, +/area/ruin/space/has_grav/hilbertresearchfacility) +"m" = ( +/obj/structure/table/glass, +/obj/item/reagent_containers/syringe/bluespace, +/turf/open/floor/plasteel/grimy{ + icon_state = "engine" + }, +/area/ruin/space/has_grav/hilbertresearchfacility) +"n" = ( +/obj/structure/table/glass, +/obj/item/stock_parts/matter_bin/bluespace, +/turf/open/floor/plasteel/grimy{ + icon_state = "engine" + }, +/area/ruin/space/has_grav/hilbertresearchfacility) +"o" = ( +/turf/open/floor/plasteel/vaporwave, +/area/ruin/space/has_grav/hilbertresearchfacility) +"p" = ( +/obj/structure/table/glass, +/obj/item/stack/cable_coil/blue, +/turf/open/floor/plasteel/grimy{ + icon_state = "engine" + }, +/area/ruin/space/has_grav/hilbertresearchfacility) +"q" = ( +/obj/structure/table/glass, +/obj/item/storage/backpack/holding, +/turf/open/floor/plasteel/grimy{ + icon_state = "engine" + }, +/area/ruin/space/has_grav/hilbertresearchfacility) +"r" = ( +/obj/structure/table/glass, +/obj/item/reagent_containers/glass/beaker/bluespace, +/turf/open/floor/plasteel/grimy{ + icon_state = "engine" + }, +/area/ruin/space/has_grav/hilbertresearchfacility) +"s" = ( +/obj/structure/table/glass, +/obj/item/stock_parts/subspace/crystal, +/obj/item/stock_parts/subspace/transmitter, +/turf/open/floor/plasteel/grimy{ + icon_state = "engine" + }, +/area/ruin/space/has_grav/hilbertresearchfacility) +"t" = ( +/obj/structure/displaycase{ + start_showpiece_type = /obj/item/hilbertshotel + }, +/turf/open/floor/plasteel/vaporwave, +/area/ruin/space/has_grav/hilbertresearchfacility) +"u" = ( +/obj/structure/table/glass, +/obj/item/analyzer, +/turf/open/floor/plasteel/grimy{ + icon_state = "engine" + }, +/area/ruin/space/has_grav/hilbertresearchfacility) +"v" = ( +/obj/structure/table/glass, +/obj/item/stock_parts/subspace/amplifier, +/turf/open/floor/plasteel/grimy{ + icon_state = "engine" + }, +/area/ruin/space/has_grav/hilbertresearchfacility) +"w" = ( +/obj/item/paper/crumpled/docslogs, +/obj/item/pen, +/turf/open/floor/plasteel/vaporwave, +/area/ruin/space/has_grav/hilbertresearchfacility) +"x" = ( +/obj/structure/table/glass, +/obj/item/assembly/signaler, +/turf/open/floor/plasteel/grimy{ + icon_state = "engine" + }, +/area/ruin/space/has_grav/hilbertresearchfacility) +"y" = ( +/obj/structure/table/glass, +/obj/item/slimecross/industrial/bluespace, +/turf/open/floor/plasteel/grimy{ + icon_state = "engine" + }, +/area/ruin/space/has_grav/hilbertresearchfacility) +"z" = ( +/obj/machinery/door/airlock/vault{ + name = "secured door"; + req_access = 207 + }, +/obj/effect/mapping_helpers/airlock/locked, +/turf/open/floor/plasteel/grimy{ + icon_state = "engine" + }, +/area/ruin/space/has_grav/hilbertresearchfacility) +"A" = ( +/obj/structure/filingcabinet, +/turf/open/floor/plasteel/grimy, +/area/ruin/space/has_grav/hilbertresearchfacility) +"B" = ( +/turf/open/floor/plasteel/grimy, +/area/ruin/space/has_grav/hilbertresearchfacility) +"C" = ( +/obj/structure/table/reinforced, +/turf/open/floor/plasteel/grimy, +/area/ruin/space/has_grav/hilbertresearchfacility) +"D" = ( +/obj/item/twohanded/required/kirbyplants/random, +/turf/open/floor/plasteel/grimy, +/area/ruin/space/has_grav/hilbertresearchfacility) +"E" = ( +/obj/structure/chair/office, +/turf/open/floor/plasteel/grimy, +/area/ruin/space/has_grav/hilbertresearchfacility) +"F" = ( +/obj/machinery/door/window/eastleft, +/turf/open/floor/plasteel/grimy, +/area/ruin/space/has_grav/hilbertresearchfacility) +"G" = ( +/obj/structure/table/reinforced, +/obj/item/pen, +/turf/open/floor/plasteel/grimy, +/area/ruin/space/has_grav/hilbertresearchfacility) +"H" = ( +/obj/structure/table/reinforced, +/obj/item/paper/crumpled/robertsworkjournal, +/turf/open/floor/plasteel/grimy, +/area/ruin/space/has_grav/hilbertresearchfacility) +"I" = ( +/obj/machinery/door/airlock/highsecurity{ + req_access = 207 + }, +/obj/effect/mapping_helpers/airlock/locked, +/turf/open/floor/plasteel/grimy, +/area/ruin/space/has_grav/hilbertresearchfacility) +"J" = ( +/turf/closed/mineral/random, +/area/ruin/unpowered/no_grav) +"K" = ( +/turf/open/floor/plasteel/stairs/right{ + initial_gas_mix = "TEMP=2.7" + }, +/area/ruin/unpowered/no_grav) +"U" = ( +/turf/open/floor/plasteel/stairs/medium{ + initial_gas_mix = "TEMP=2.7" + }, +/area/ruin/unpowered/no_grav) +"X" = ( +/turf/open/floor/plasteel/stairs/left{ + initial_gas_mix = "TEMP=2.7" + }, +/area/ruin/unpowered/no_grav) + +(1,1,1) = {" +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +"} +(2,1,1) = {" +a +a +a +a +a +a +a +a +a +a +a +b +b +b +a +a +a +a +a +a +a +a +a +a +a +a +"} +(3,1,1) = {" +a +a +a +a +a +a +a +a +a +a +b +J +J +J +a +a +a +a +a +a +a +a +a +a +a +a +"} +(4,1,1) = {" +a +a +a +J +b +J +b +b +a +b +J +b +b +b +b +a +a +a +a +a +a +a +a +a +a +a +"} +(5,1,1) = {" +a +a +b +J +J +J +b +J +b +J +b +b +J +J +J +b +a +a +a +a +a +a +a +a +a +a +"} +(6,1,1) = {" +a +a +b +c +c +c +c +c +d +d +c +d +d +c +d +d +b +a +a +a +a +a +a +a +a +a +"} +(7,1,1) = {" +a +a +b +d +e +f +f +m +r +g +g +f +f +f +e +c +b +a +a +a +a +a +a +a +a +a +"} +(8,1,1) = {" +a +a +b +d +f +f +f +f +f +f +f +f +f +f +f +d +J +b +b +b +b +b +a +a +a +a +"} +(9,1,1) = {" +a +a +J +d +f +f +f +f +f +f +f +f +f +f +f +c +J +b +b +J +b +b +b +a +a +a +"} +(10,1,1) = {" +a +a +J +c +f +f +f +f +f +f +f +f +f +f +f +c +J +b +J +b +b +J +b +a +a +a +"} +(11,1,1) = {" +a +a +J +c +g +f +f +n +s +v +f +f +f +f +f +c +J +J +J +J +J +J +b +a +a +a +"} +(12,1,1) = {" +a +a +J +c +g +f +j +o +o +o +j +f +f +f +c +d +d +c +c +d +c +J +b +a +a +a +"} +(13,1,1) = {" +a +a +J +c +h +f +k +o +t +o +k +f +f +f +c +A +B +C +B +D +c +J +J +a +a +a +"} +(14,1,1) = {" +a +a +J +c +g +f +l +o +o +w +l +f +f +f +d +B +B +G +B +B +c +J +b +b +a +a +"} +(15,1,1) = {" +a +a +J +c +i +f +f +p +u +x +f +f +f +f +d +B +E +H +B +B +c +J +J +J +a +a +"} +(16,1,1) = {" +a +b +J +c +f +f +f +f +f +f +f +f +f +f +c +B +B +C +B +B +c +b +J +b +a +a +"} +(17,1,1) = {" +a +b +J +d +f +f +f +f +f +f +f +f +f +f +c +C +F +C +B +B +c +b +b +b +a +a +"} +(18,1,1) = {" +a +b +J +d +f +f +f +f +f +f +f +f +f +f +d +B +B +B +B +B +d +b +b +b +b +a +"} +(19,1,1) = {" +a +b +J +d +f +f +f +f +f +f +f +f +f +f +z +B +B +B +B +B +d +b +b +b +b +a +"} +(20,1,1) = {" +a +a +b +c +e +f +g +q +g +y +g +f +e +f +c +B +B +B +B +B +d +b +b +b +b +a +"} +(21,1,1) = {" +a +a +b +c +c +c +c +c +c +d +d +c +c +c +d +B +B +B +B +B +d +X +b +b +b +a +"} +(22,1,1) = {" +a +a +b +b +J +J +b +b +J +J +J +J +J +J +d +D +B +B +B +B +I +U +b +b +b +a +"} +(23,1,1) = {" +a +a +a +b +b +J +J +b +b +b +b +J +b +J +c +d +d +c +d +c +d +K +b +b +b +a +"} +(24,1,1) = {" +a +a +a +a +b +b +J +J +J +b +b +b +b +J +b +b +J +J +J +J +b +b +b +b +b +a +"} +(25,1,1) = {" +a +a +a +a +a +b +b +b +J +J +J +J +b +b +b +b +b +b +a +J +J +J +b +J +b +a +"} +(26,1,1) = {" +a +a +a +a +a +a +a +a +b +b +b +a +b +b +b +b +b +a +a +a +J +J +J +J +J +a +"} +(27,1,1) = {" +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +"} diff --git a/_maps/templates/hilbertshotel.dmm b/_maps/templates/hilbertshotel.dmm new file mode 100644 index 0000000000..87fff9e42d --- /dev/null +++ b/_maps/templates/hilbertshotel.dmm @@ -0,0 +1,545 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"a" = ( +/turf/open/space/bluespace, +/area/hilbertshotel) +"b" = ( +/turf/closed/indestructible/hotelwall, +/area/hilbertshotel) +"c" = ( +/obj/machinery/jukebox{ + req_access = null + }, +/turf/open/indestructible/hotelwood, +/area/hilbertshotel) +"d" = ( +/turf/open/indestructible/hotelwood, +/area/hilbertshotel) +"e" = ( +/obj/structure/table/wood, +/turf/open/indestructible/hotelwood, +/area/hilbertshotel) +"f" = ( +/obj/structure/table/wood, +/obj/structure/showcase/machinery/tv, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/open/indestructible/hotelwood, +/area/hilbertshotel) +"g" = ( +/obj/structure/dresser, +/turf/open/indestructible/hotelwood, +/area/hilbertshotel) +"h" = ( +/obj/structure/table/wood/fancy, +/turf/open/indestructible/hotelwood, +/area/hilbertshotel) +"i" = ( +/obj/structure/table/wood/fancy, +/obj/structure/mirror{ + pixel_y = 24 + }, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/open/indestructible/hotelwood, +/area/hilbertshotel) +"j" = ( +/obj/structure/table/wood/fancy, +/obj/item/flashlight/lamp/green, +/turf/open/indestructible/hotelwood, +/area/hilbertshotel) +"k" = ( +/obj/structure/chair/comfy/brown{ + dir = 4 + }, +/obj/machinery/light/small{ + dir = 8 + }, +/turf/open/indestructible/hotelwood, +/area/hilbertshotel) +"l" = ( +/obj/structure/table/wood/poker, +/turf/open/indestructible/hotelwood, +/area/hilbertshotel) +"m" = ( +/obj/structure/chair/comfy/brown{ + dir = 8 + }, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/open/indestructible/hotelwood, +/area/hilbertshotel) +"n" = ( +/obj/effect/spawner/xmastree, +/turf/open/indestructible/hotelwood, +/area/hilbertshotel) +"o" = ( +/obj/structure/chair/comfy/brown{ + dir = 1 + }, +/turf/open/indestructible/hotelwood, +/area/hilbertshotel) +"p" = ( +/obj/structure/mineral_door/wood, +/turf/open/indestructible/hotelwood, +/area/hilbertshotel) +"q" = ( +/obj/structure/bed, +/obj/item/bedsheet/random, +/turf/open/indestructible/hotelwood, +/area/hilbertshotel) +"r" = ( +/obj/structure/closet/cabinet{ + anchored = 1 + }, +/turf/open/indestructible/hotelwood, +/area/hilbertshotel) +"s" = ( +/obj/structure/table/wood/fancy, +/obj/item/reagent_containers/food/snacks/grown/poppy, +/turf/open/indestructible/hotelwood, +/area/hilbertshotel) +"t" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/turf/open/indestructible/hotelwood, +/area/hilbertshotel) +"u" = ( +/obj/structure/mineral_door/paperframe, +/turf/open/indestructible/hotelwood, +/area/hilbertshotel) +"v" = ( +/obj/structure/extinguisher_cabinet{ + pixel_x = 32 + }, +/turf/open/indestructible/hotelwood, +/area/hilbertshotel) +"w" = ( +/turf/open/indestructible/hoteltile, +/area/hilbertshotel) +"x" = ( +/obj/structure/curtain, +/turf/open/indestructible/hoteltile, +/area/hilbertshotel) +"y" = ( +/obj/machinery/door/window/northleft, +/turf/open/indestructible/hotelwood, +/area/hilbertshotel) +"z" = ( +/obj/structure/table/reinforced, +/turf/open/indestructible/hotelwood, +/area/hilbertshotel) +"A" = ( +/obj/structure/mirror{ + pixel_x = -32 + }, +/obj/structure/sink{ + dir = 8; + pixel_x = -12; + pixel_y = 2 + }, +/turf/open/indestructible/hoteltile, +/area/hilbertshotel) +"B" = ( +/obj/structure/chair/stool/bar, +/turf/open/indestructible/hotelwood, +/area/hilbertshotel) +"C" = ( +/obj/machinery/shower{ + dir = 8 + }, +/turf/open/indestructible/hoteltile, +/area/hilbertshotel) +"D" = ( +/obj/machinery/light_switch{ + pixel_x = 32 + }, +/turf/open/indestructible/hotelwood, +/area/hilbertshotel) +"E" = ( +/obj/structure/table/reinforced, +/obj/item/soap/deluxe, +/turf/open/indestructible/hoteltile, +/area/hilbertshotel) +"F" = ( +/obj/structure/window/reinforced/tinted{ + dir = 8 + }, +/obj/structure/window/reinforced/tinted{ + dir = 1 + }, +/turf/open/indestructible/hoteltile, +/area/hilbertshotel) +"G" = ( +/obj/machinery/light_switch{ + pixel_x = -32 + }, +/turf/open/indestructible/hotelwood, +/area/hilbertshotel) +"H" = ( +/obj/structure/table/reinforced, +/obj/machinery/microwave, +/turf/open/indestructible/hotelwood, +/area/hilbertshotel) +"I" = ( +/turf/closed/indestructible/hoteldoor, +/area/hilbertshotel) +"J" = ( +/obj/machinery/light/small, +/turf/open/indestructible/hotelwood, +/area/hilbertshotel) +"K" = ( +/obj/structure/closet/crate/bin, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/open/indestructible/hotelwood, +/area/hilbertshotel) +"L" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/turf/open/indestructible/hoteltile, +/area/hilbertshotel) +"M" = ( +/obj/structure/table/reinforced, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/open/indestructible/hotelwood, +/area/hilbertshotel) +"N" = ( +/obj/structure/table/reinforced, +/obj/item/soap/deluxe, +/obj/machinery/light/small{ + dir = 8 + }, +/turf/open/indestructible/hoteltile, +/area/hilbertshotel) +"O" = ( +/obj/item/bikehorn/rubberducky, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/open/indestructible/hoteltile, +/area/hilbertshotel) +"P" = ( +/obj/machinery/light/small, +/turf/open/indestructible/hoteltile, +/area/hilbertshotel) +"Q" = ( +/obj/machinery/smartfridge/food, +/turf/open/indestructible/hotelwood, +/area/hilbertshotel) +"R" = ( +/obj/structure/toilet{ + dir = 8 + }, +/obj/structure/window/reinforced/tinted{ + dir = 1 + }, +/obj/structure/window/reinforced/tinted{ + dir = 8 + }, +/turf/open/indestructible/hoteltile, +/area/hilbertshotel) +"S" = ( +/obj/structure/window/reinforced/tinted{ + dir = 8 + }, +/turf/open/indestructible/hoteltile, +/area/hilbertshotel) +"T" = ( +/obj/structure/window/reinforced/tinted{ + dir = 8 + }, +/obj/structure/window/reinforced/tinted, +/turf/open/indestructible/hoteltile, +/area/hilbertshotel) +"U" = ( +/obj/structure/table/reinforced, +/obj/structure/sink/kitchen, +/obj/machinery/light/small, +/turf/open/indestructible/hotelwood, +/area/hilbertshotel) +"V" = ( +/obj/structure/table/reinforced, +/obj/effect/spawner/lootdrop/three_course_meal, +/turf/open/indestructible/hotelwood, +/area/hilbertshotel) + +(1,1,1) = {" +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +"} +(2,1,1) = {" +a +b +b +b +b +b +I +b +b +b +b +b +b +b +a +"} +(3,1,1) = {" +a +b +d +d +k +d +d +t +d +y +t +H +z +b +a +"} +(4,1,1) = {" +a +b +e +d +l +o +d +d +B +z +d +d +z +b +a +"} +(5,1,1) = {" +a +b +f +d +l +o +d +d +B +V +d +d +U +b +a +"} +(6,1,1) = {" +a +b +e +d +l +o +d +d +B +z +d +d +z +b +a +"} +(7,1,1) = {" +a +b +c +d +m +d +D +K +v +z +M +Q +z +b +a +"} +(8,1,1) = {" +a +b +b +b +b +p +b +b +b +b +b +b +b +b +a +"} +(9,1,1) = {" +a +b +g +d +t +d +G +u +w +A +N +A +E +b +a +"} +(10,1,1) = {" +a +b +h +d +d +d +d +b +w +w +w +w +w +b +a +"} +(11,1,1) = {" +a +b +i +d +n +d +J +b +L +w +R +w +P +b +a +"} +(12,1,1) = {" +a +b +h +d +d +d +r +b +x +F +S +T +x +b +a +"} +(13,1,1) = {" +a +b +d +d +d +d +d +b +w +w +w +w +w +b +a +"} +(14,1,1) = {" +a +b +d +j +q +q +s +b +w +C +O +C +w +b +a +"} +(15,1,1) = {" +a +b +b +b +b +b +b +b +b +b +b +b +b +b +a +"} +(16,1,1) = {" +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +"} diff --git a/_maps/templates/hilbertshotelempty.dmm b/_maps/templates/hilbertshotelempty.dmm new file mode 100644 index 0000000000..a0482c93ba --- /dev/null +++ b/_maps/templates/hilbertshotelempty.dmm @@ -0,0 +1,289 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"a" = ( +/turf/open/space/bluespace, +/area/hilbertshotel) +"b" = ( +/turf/closed/indestructible/hotelwall, +/area/hilbertshotel) +"c" = ( +/turf/open/indestructible/hotelwood, +/area/hilbertshotel) +"d" = ( +/turf/open/indestructible/hoteltile, +/area/hilbertshotel) +"e" = ( +/turf/closed/indestructible/hoteldoor, +/area/hilbertshotel) + +(1,1,1) = {" +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +"} +(2,1,1) = {" +a +b +b +b +b +b +e +b +b +b +b +b +b +b +a +"} +(3,1,1) = {" +a +b +c +c +c +c +c +c +c +c +c +c +c +b +a +"} +(4,1,1) = {" +a +b +c +c +c +c +c +c +c +c +c +c +c +b +a +"} +(5,1,1) = {" +a +b +c +c +c +c +c +c +c +c +c +c +c +b +a +"} +(6,1,1) = {" +a +b +c +c +c +c +c +c +c +c +c +c +c +b +a +"} +(7,1,1) = {" +a +b +c +c +c +c +c +c +c +c +c +c +c +b +a +"} +(8,1,1) = {" +a +b +b +b +b +c +b +b +b +b +b +b +b +b +a +"} +(9,1,1) = {" +a +b +c +c +c +c +c +c +d +d +d +d +d +b +a +"} +(10,1,1) = {" +a +b +c +c +c +c +c +b +d +d +d +d +d +b +a +"} +(11,1,1) = {" +a +b +c +c +c +c +c +b +d +d +d +d +d +b +a +"} +(12,1,1) = {" +a +b +c +c +c +c +c +b +d +d +d +d +d +b +a +"} +(13,1,1) = {" +a +b +c +c +c +c +c +b +d +d +d +d +d +b +a +"} +(14,1,1) = {" +a +b +c +c +c +c +c +b +d +d +d +d +d +b +a +"} +(15,1,1) = {" +a +b +b +b +b +b +b +b +b +b +b +b +b +b +a +"} +(16,1,1) = {" +a +a +a +a +a +a +a +a +a +a +a +a +a +a +a +"} diff --git a/_maps/templates/hilbertshotellore.dmm b/_maps/templates/hilbertshotellore.dmm new file mode 100644 index 0000000000..f6be66bd06 --- /dev/null +++ b/_maps/templates/hilbertshotellore.dmm @@ -0,0 +1,639 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"aa" = ( +/turf/open/space/bluespace, +/area/hilbertshotel) +"ab" = ( +/turf/closed/indestructible/hotelwall, +/area/hilbertshotel) +"ac" = ( +/obj/structure/table/wood/fancy, +/obj/structure/mirror{ + broken = 1; + desc = "Oh no, seven years of bad luck!"; + icon_state = "mirror_broke"; + pixel_y = 24 + }, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/open/indestructible/hotelwood, +/area/hilbertshotel) +"ad" = ( +/turf/open/indestructible/hotelwood, +/area/hilbertshotel) +"ae" = ( +/obj/structure/table/wood, +/turf/open/indestructible/hotelwood, +/area/hilbertshotel) +"af" = ( +/obj/structure/table/wood, +/obj/structure/showcase/machinery/tv, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/open/indestructible/hotelwood, +/area/hilbertshotel) +"ag" = ( +/obj/structure/dresser, +/turf/open/indestructible/hotelwood, +/area/hilbertshotel) +"ah" = ( +/obj/structure/table/wood/fancy, +/turf/open/indestructible/hotelwood, +/area/hilbertshotel) +"ai" = ( +/obj/structure/table/wood/poker, +/obj/item/toy/cards/deck, +/turf/open/indestructible/hotelwood, +/area/hilbertshotel) +"aj" = ( +/obj/structure/table/wood/fancy, +/obj/item/flashlight/lamp/green, +/turf/open/indestructible/hotelwood, +/area/hilbertshotel) +"ak" = ( +/obj/structure/chair/comfy/brown{ + dir = 4 + }, +/obj/machinery/light/small{ + dir = 8 + }, +/turf/open/indestructible/hotelwood, +/area/hilbertshotel) +"al" = ( +/obj/structure/table/wood/poker, +/turf/open/indestructible/hotelwood, +/area/hilbertshotel) +"am" = ( +/obj/structure/chair/comfy/brown{ + dir = 8 + }, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/open/indestructible/hotelwood, +/area/hilbertshotel) +"an" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/turf/open/indestructible/hotelwood, +/area/hilbertshotel) +"ap" = ( +/obj/structure/bed, +/obj/item/bedsheet/random, +/turf/open/indestructible/hotelwood, +/area/hilbertshotel) +"aq" = ( +/obj/structure/chair/comfy/brown{ + dir = 1 + }, +/turf/open/indestructible/hotelwood, +/area/hilbertshotel) +"ar" = ( +/obj/structure/mineral_door/wood, +/turf/open/indestructible/hotelwood, +/area/hilbertshotel) +"as" = ( +/turf/closed/indestructible/hoteldoor, +/area/hilbertshotel) +"at" = ( +/obj/effect/decal/cleanable/cobweb, +/turf/open/indestructible/hotelwood, +/area/hilbertshotel) +"au" = ( +/obj/machinery/light_switch{ + pixel_x = -32 + }, +/turf/open/indestructible/hotelwood, +/area/hilbertshotel) +"av" = ( +/obj/machinery/light/small, +/turf/open/indestructible/hotelwood, +/area/hilbertshotel) +"aw" = ( +/obj/structure/closet/cabinet{ + anchored = 1 + }, +/turf/open/indestructible/hotelwood, +/area/hilbertshotel) +"ax" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/turf/open/indestructible/hotelwood, +/area/hilbertshotel) +"ay" = ( +/obj/structure/closet/crate/bin, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/open/indestructible/hotelwood, +/area/hilbertshotel) +"az" = ( +/obj/structure/mineral_door/paperframe, +/turf/open/indestructible/hotelwood, +/area/hilbertshotel) +"aA" = ( +/obj/structure/chair/stool/bar, +/turf/open/indestructible/hotelwood, +/area/hilbertshotel) +"aB" = ( +/obj/structure/extinguisher_cabinet{ + pixel_x = 32 + }, +/turf/open/indestructible/hotelwood, +/area/hilbertshotel) +"aC" = ( +/turf/open/indestructible/hoteltile, +/area/hilbertshotel) +"aD" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/turf/open/indestructible/hoteltile, +/area/hilbertshotel) +"aE" = ( +/obj/structure/curtain, +/turf/open/indestructible/hoteltile, +/area/hilbertshotel) +"aF" = ( +/obj/machinery/door/window/northleft, +/turf/open/indestructible/hotelwood, +/area/hilbertshotel) +"aG" = ( +/obj/structure/table/reinforced, +/turf/open/indestructible/hotelwood, +/area/hilbertshotel) +"aH" = ( +/obj/structure/table/reinforced, +/obj/item/pen, +/turf/open/indestructible/hotelwood, +/area/hilbertshotel) +"aI" = ( +/obj/structure/mirror{ + pixel_x = -32 + }, +/obj/structure/sink{ + dir = 8; + pixel_x = -12; + pixel_y = 2 + }, +/turf/open/indestructible/hoteltile, +/area/hilbertshotel) +"aJ" = ( +/obj/structure/window/reinforced/tinted{ + dir = 8 + }, +/obj/structure/window/reinforced/tinted{ + dir = 1 + }, +/turf/open/indestructible/hoteltile, +/area/hilbertshotel) +"aK" = ( +/obj/machinery/shower{ + dir = 8 + }, +/turf/open/indestructible/hoteltile, +/area/hilbertshotel) +"aL" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/indestructible/hotelwood, +/area/hilbertshotel) +"aM" = ( +/obj/structure/table/wood/poker, +/obj/effect/decal/cleanable/dirt, +/turf/open/indestructible/hotelwood, +/area/hilbertshotel) +"aN" = ( +/obj/structure/toilet{ + dir = 8 + }, +/obj/structure/window/reinforced/tinted{ + dir = 1 + }, +/obj/structure/window/reinforced/tinted{ + dir = 8 + }, +/turf/open/indestructible/hoteltile, +/area/hilbertshotel) +"aO" = ( +/obj/structure/window/reinforced/tinted{ + dir = 8 + }, +/turf/open/indestructible/hoteltile, +/area/hilbertshotel) +"aP" = ( +/obj/item/bikehorn/rubberducky, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/open/indestructible/hoteltile, +/area/hilbertshotel) +"aQ" = ( +/obj/structure/table/reinforced, +/obj/machinery/microwave, +/turf/open/indestructible/hotelwood, +/area/hilbertshotel) +"aR" = ( +/obj/machinery/smartfridge/food, +/turf/open/indestructible/hotelwood, +/area/hilbertshotel) +"aS" = ( +/obj/structure/window/reinforced/tinted{ + dir = 8 + }, +/obj/structure/window/reinforced/tinted, +/turf/open/indestructible/hoteltile, +/area/hilbertshotel) +"aT" = ( +/obj/structure/table/reinforced, +/obj/structure/sink/kitchen, +/obj/machinery/light/small, +/turf/open/indestructible/hotelwood, +/area/hilbertshotel) +"aU" = ( +/obj/structure/bed, +/obj/item/bedsheet/random, +/obj/effect/decal/cleanable/dirt, +/turf/open/indestructible/hotelwood, +/area/hilbertshotel) +"aV" = ( +/obj/machinery/light/small, +/turf/open/indestructible/hoteltile, +/area/hilbertshotel) +"aW" = ( +/obj/machinery/jukebox{ + req_access = null + }, +/turf/open/indestructible/hotelwood, +/area/hilbertshotel) +"aX" = ( +/obj/machinery/light_switch{ + pixel_x = 32 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/indestructible/hotelwood, +/area/hilbertshotel) +"aY" = ( +/obj/structure/chair/stool/bar, +/obj/effect/decal/cleanable/blood, +/obj/effect/decal/cleanable/vomit, +/obj/effect/mob_spawn/human/doctorhilbert, +/turf/open/indestructible/hotelwood, +/area/hilbertshotel) +"aZ" = ( +/obj/effect/decal/cleanable/dirt, +/turf/open/indestructible/hoteltile, +/area/hilbertshotel) +"ba" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/cobweb/cobweb2, +/turf/open/indestructible/hoteltile, +/area/hilbertshotel) +"bb" = ( +/obj/structure/mirror{ + pixel_x = -32 + }, +/obj/structure/sink{ + dir = 8; + pixel_x = -12; + pixel_y = 2 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/indestructible/hoteltile, +/area/hilbertshotel) +"bc" = ( +/obj/effect/decal/cleanable/blood, +/turf/open/indestructible/hoteltile, +/area/hilbertshotel) +"bd" = ( +/obj/machinery/shower{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/indestructible/hoteltile, +/area/hilbertshotel) +"be" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/indestructible/hotelwood, +/area/hilbertshotel) +"bf" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/open/indestructible/hotelwood, +/area/hilbertshotel) +"bg" = ( +/obj/structure/table/reinforced, +/obj/machinery/light/small{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/open/indestructible/hotelwood, +/area/hilbertshotel) +"bh" = ( +/obj/structure/table/reinforced, +/obj/machinery/light/small{ + dir = 8 + }, +/obj/item/soap/homemade{ + name = "used soap" + }, +/turf/open/indestructible/hoteltile, +/area/hilbertshotel) +"bi" = ( +/obj/effect/decal/cleanable/vomit, +/turf/open/indestructible/hoteltile, +/area/hilbertshotel) +"bj" = ( +/obj/structure/table/reinforced, +/obj/item/soap/homemade{ + name = "used soap" + }, +/turf/open/indestructible/hoteltile, +/area/hilbertshotel) +"bk" = ( +/obj/structure/table/reinforced, +/obj/item/analyzer/hilbertsanalyzer, +/turf/open/indestructible/hotelwood, +/area/hilbertshotel) +"bl" = ( +/obj/structure/table/reinforced, +/obj/item/paper/crumpled/bloody/docsdeathnote, +/turf/open/indestructible/hotelwood, +/area/hilbertshotel) + +(1,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(2,1,1) = {" +aa +ab +ab +ab +ab +ab +as +ab +ab +ab +ab +ab +ab +ab +aa +"} +(3,1,1) = {" +aa +ab +at +aL +ak +ad +aL +an +ad +aF +be +aQ +aG +ab +aa +"} +(4,1,1) = {" +aa +ab +ae +ad +al +aq +ad +ad +aA +aH +ad +aL +aG +ab +aa +"} +(5,1,1) = {" +aa +ab +af +ad +ai +aq +aL +ad +aY +bl +ad +aL +aT +ab +aa +"} +(6,1,1) = {" +aa +ab +ae +ad +aM +aq +ad +ad +aA +bk +bf +bf +aG +ab +aa +"} +(7,1,1) = {" +aa +ab +aW +aL +am +ad +aX +ay +aB +aG +bg +aR +aG +ab +aa +"} +(8,1,1) = {" +aa +ab +ab +ab +ab +ar +ab +ab +ab +ab +ab +ab +ab +ab +aa +"} +(9,1,1) = {" +aa +ab +ag +ad +an +ad +au +az +aC +bb +bh +aI +bj +ab +aa +"} +(10,1,1) = {" +aa +ab +ah +ad +aL +aL +ad +ab +aZ +aZ +aC +aZ +aZ +ab +aa +"} +(11,1,1) = {" +aa +ab +ac +ad +ad +aL +av +ab +aD +aC +aN +bi +aV +ab +aa +"} +(12,1,1) = {" +aa +ab +ah +ad +aL +ad +aw +ab +aE +aJ +aO +aS +aE +ab +aa +"} +(13,1,1) = {" +aa +ab +ad +ad +aL +ad +ad +ab +aC +bc +aZ +aZ +aC +ab +aa +"} +(14,1,1) = {" +aa +ab +ax +aj +ap +aU +ah +ab +ba +bd +aP +aK +aC +ab +aa +"} +(15,1,1) = {" +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +aa +"} +(16,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} diff --git a/_maps/templates/hilbertshotelstorage.dmm b/_maps/templates/hilbertshotelstorage.dmm new file mode 100644 index 0000000000..756e2e5155 --- /dev/null +++ b/_maps/templates/hilbertshotelstorage.dmm @@ -0,0 +1,23 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"a" = ( +/turf/closed/indestructible/hotelwall, +/area/hilbertshotelstorage) +"b" = ( +/turf/open/indestructible/hotelwood, +/area/hilbertshotelstorage) + +(1,1,1) = {" +a +a +a +"} +(2,1,1) = {" +a +b +a +"} +(3,1,1) = {" +a +a +a +"} diff --git a/code/controllers/subsystem/mapping.dm b/code/controllers/subsystem/mapping.dm index a2c60618ac..e9a1a0e0c6 100644 --- a/code/controllers/subsystem/mapping.dm +++ b/code/controllers/subsystem/mapping.dm @@ -33,6 +33,7 @@ SUBSYSTEM_DEF(mapping) var/list/z_list var/datum/space_level/transit var/datum/space_level/empty_space + var/num_of_res_levels = 1 //dlete dis once #39770 is resolved /datum/controller/subsystem/mapping/proc/HACK_LoadMapConfig() @@ -446,6 +447,11 @@ GLOBAL_LIST_EMPTY(the_station_areas) for(var/i in levels_by_trait(ZTRAIT_RESERVED)) if(reserve.Reserve(width, height, i)) return reserve + //If we didn't return at this point, theres a good chance we ran out of room on the exisiting reserved z levels, so lets try a new one + num_of_res_levels += 1 + var/newReserved = add_new_zlevel("Transit/Reserved [num_of_res_levels]", list(ZTRAIT_RESERVED = TRUE)) + if(reserve.Reserve(width, height, newReserved)) + return reserve else if(!level_trait(z, ZTRAIT_RESERVED)) qdel(reserve) @@ -478,6 +484,7 @@ GLOBAL_LIST_EMPTY(the_station_areas) LAZYINITLIST(unused_turfs["[T.z]"]) unused_turfs["[T.z]"] |= T T.flags_1 |= UNUSED_RESERVATION_TURF_1 + GLOB.areas_by_type[world.area].contents += T CHECK_TICK //DO NOT CALL THIS PROC DIRECTLY, CALL wipe_reservations(). diff --git a/code/datums/ruins/space.dm b/code/datums/ruins/space.dm index 058c820f7a..23580ca5d1 100644 --- a/code/datums/ruins/space.dm +++ b/code/datums/ruins/space.dm @@ -281,3 +281,10 @@ suffix = "cloning_facility.dmm" name = "Ancient Cloning Lab" description = "An experimental cloning lab snapped off from an ancient ship. The cloner model inside lacks many modern functionalities and security measures." + + +/datum/map_template/ruin/space/hilbertresearchfacility + id = "hilbert_facility" + suffix = "hilbertshoteltestingsite.dmm" + name = "Hilbert Research Facility" + description = "A research facility of great bluespace discoveries. Long since abandoned, willingly or not..." diff --git a/code/game/objects/items/blueprints.dm b/code/game/objects/items/blueprints.dm index 699efaac2e..10fbab56be 100644 --- a/code/game/objects/items/blueprints.dm +++ b/code/game/objects/items/blueprints.dm @@ -153,7 +153,9 @@ /area/centcom, /area/asteroid, /area/tdome, - /area/wizard_station + /area/wizard_station, + /area/hilbertshotel, + /area/hilbertshotelstorage ) for (var/type in SPECIALS) if ( istype(A,type) ) diff --git a/code/modules/ruins/spaceruin_code/hilbertshotel.dm b/code/modules/ruins/spaceruin_code/hilbertshotel.dm new file mode 100644 index 0000000000..5e6fdc8f89 --- /dev/null +++ b/code/modules/ruins/spaceruin_code/hilbertshotel.dm @@ -0,0 +1,530 @@ +GLOBAL_VAR_INIT(hhStorageTurf, null) +GLOBAL_VAR_INIT(hhmysteryRoomNumber, 1337) + +/obj/item/hilbertshotel + name = "Hilbert's Hotel" + desc = "A sphere of what appears to be an intricate network of bluespace. Observing it in detail seems to give you a headache as you try to comprehend the infinite amount of infinitesimally distinct points on its surface." + icon_state = "hilbertshotel" + w_class = WEIGHT_CLASS_SMALL + resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF + var/datum/map_template/hilbertshotel/hotelRoomTemp + var/datum/map_template/hilbertshotel/empty/hotelRoomTempEmpty + var/datum/map_template/hilbertshotel/lore/hotelRoomTempLore + var/list/activeRooms = list() + var/list/storedRooms = list() + var/storageTurf + //Lore Stuff + var/ruinSpawned = FALSE + var/mysteryRoom + +/obj/item/hilbertshotel/Initialize() + . = ..() + //Load templates + hotelRoomTemp = new() + hotelRoomTempEmpty = new() + hotelRoomTempLore = new() + var/area/currentArea = get_area(src) + if(currentArea.type == /area/ruin/space/has_grav/hilbertresearchfacility) + ruinSpawned = TRUE + +/obj/item/hilbertshotel/Destroy() + ejectRooms() + return ..() + +/obj/item/hilbertshotel/attack(mob/living/M, mob/living/user) + if(M.mind) + to_chat(user, "You invite [M] to the hotel.") + promptAndCheckIn(M) + else + to_chat(user, "[M] is not intelligent enough to understand how to use this device!") + +/obj/item/hilbertshotel/attack_self(mob/user) + . = ..() + promptAndCheckIn(user) + +/obj/item/hilbertshotel/proc/promptAndCheckIn(mob/user) + var/chosenRoomNumber = input(user, "What number room will you be checking into?", "Room Number") as null|num + if(!chosenRoomNumber) + return + if(chosenRoomNumber > SHORT_REAL_LIMIT) + to_chat(user, "You have to check out the first [SHORT_REAL_LIMIT] rooms before you can go to a higher numbered one!") + return + if((chosenRoomNumber < 1) || (chosenRoomNumber != round(chosenRoomNumber))) + to_chat(user, "That is not a valid room number!") + return + if(ismob(loc)) + if(user == loc) //Not always the same as user + forceMove(get_turf(user)) + if(!storageTurf) //Blame subsystems for not allowing this to be in Initialize + if(!GLOB.hhStorageTurf) + var/datum/map_template/hilbertshotelstorage/storageTemp = new() + var/datum/turf_reservation/storageReservation = SSmapping.RequestBlockReservation(3, 3) + storageTemp.load(locate(storageReservation.bottom_left_coords[1], storageReservation.bottom_left_coords[2], storageReservation.bottom_left_coords[3])) + GLOB.hhStorageTurf = locate(storageReservation.bottom_left_coords[1]+1, storageReservation.bottom_left_coords[2]+1, storageReservation.bottom_left_coords[3]) + else + storageTurf = GLOB.hhStorageTurf + if(tryActiveRoom(chosenRoomNumber, user)) + return + if(tryStoredRoom(chosenRoomNumber, user)) + return + sendToNewRoom(chosenRoomNumber, user) + + +/obj/item/hilbertshotel/proc/tryActiveRoom(var/roomNumber, var/mob/user) + if(activeRooms["[roomNumber]"]) + var/datum/turf_reservation/roomReservation = activeRooms["[roomNumber]"] + do_sparks(3, FALSE, get_turf(user)) + user.forceMove(locate(roomReservation.bottom_left_coords[1] + hotelRoomTemp.landingZoneRelativeX, roomReservation.bottom_left_coords[2] + hotelRoomTemp.landingZoneRelativeY, roomReservation.bottom_left_coords[3])) + return TRUE + else + return FALSE + +/obj/item/hilbertshotel/proc/tryStoredRoom(var/roomNumber, var/mob/user) + if(storedRooms["[roomNumber]"]) + var/datum/turf_reservation/roomReservation = SSmapping.RequestBlockReservation(hotelRoomTemp.width, hotelRoomTemp.height) + hotelRoomTempEmpty.load(locate(roomReservation.bottom_left_coords[1], roomReservation.bottom_left_coords[2], roomReservation.bottom_left_coords[3])) + var/turfNumber = 1 + for(var/i=0, iAs the sphere breaks apart, you're suddenly ejected into the depths of space!") + var/max = world.maxx-TRANSITIONEDGE + var/min = 1+TRANSITIONEDGE + var/list/possible_transtitons = list() + for(var/AZ in SSmapping.z_list) + var/datum/space_level/D = AZ + if (D.linkage == CROSSLINKED) + possible_transtitons += D.z_value + var/_z = pick(possible_transtitons) + var/_x = rand(min,max) + var/_y = rand(min,max) + var/turf/T = locate(_x, _y, _z) + A.forceMove(T) + qdel(room) + + if(storedRooms.len) + for(var/x in storedRooms) + var/list/atomList = storedRooms[x] + for(var/atom/movable/A in atomList) + var/max = world.maxx-TRANSITIONEDGE + var/min = 1+TRANSITIONEDGE + var/list/possible_transtitons = list() + for(var/AZ in SSmapping.z_list) + var/datum/space_level/D = AZ + if (D.linkage == CROSSLINKED) + possible_transtitons += D.z_value + var/_z = pick(possible_transtitons) + var/_x = rand(min,max) + var/_y = rand(min,max) + var/turf/T = locate(_x, _y, _z) + A.forceMove(T) + +//Template Stuff +/datum/map_template/hilbertshotel + name = "Hilbert's Hotel Room" + mappath = '_maps/templates/hilbertshotel.dmm' + var/landingZoneRelativeX = 2 + var/landingZoneRelativeY = 8 + +/datum/map_template/hilbertshotel/empty + name = "Empty Hilbert's Hotel Room" + mappath = '_maps/templates/hilbertshotelempty.dmm' + +/datum/map_template/hilbertshotel/lore + name = "Doctor Hilbert's Deathbed" + mappath = '_maps/templates/hilbertshotellore.dmm' + +/datum/map_template/hilbertshotelstorage + name = "Hilbert's Hotel Storage" + mappath = '_maps/templates/hilbertshotelstorage.dmm' + + +//Turfs and Areas +/turf/closed/indestructible/hotelwall + name = "hotel wall" + desc = "A wall designed to protect the security of the hotel's guests." + icon_state = "hotelwall" + canSmoothWith = list(/turf/closed/indestructible/hotelwall) + explosion_block = INFINITY + +/turf/open/indestructible/hotelwood + desc = "Stylish dark wood with extra reinforcement. Secured firmly to the floor to prevent tampering." + icon_state = "wood" + footstep = FOOTSTEP_WOOD + tiled_dirt = FALSE + +/turf/open/indestructible/hoteltile + desc = "Smooth tile with extra reinforcement. Secured firmly to the floor to prevent tampering." + icon_state = "showroomfloor" + footstep = FOOTSTEP_FLOOR + tiled_dirt = FALSE + +/turf/open/space/bluespace + name = "\proper bluespace hyperzone" + icon_state = "bluespace" + baseturfs = /turf/open/space/bluespace + flags_1 = NOJAUNT_1 + explosion_block = INFINITY + var/obj/item/hilbertshotel/parentSphere + +/turf/open/space/bluespace/Entered(atom/movable/A) + . = ..() + A.forceMove(get_turf(parentSphere)) + do_sparks(3, FALSE, get_turf(A)) + +/turf/closed/indestructible/hoteldoor + name = "Hotel Door" + icon_state = "hoteldoor" + explosion_block = INFINITY + var/obj/item/hilbertshotel/parentSphere + +/turf/closed/indestructible/hoteldoor/proc/promptExit(mob/living/user) + if(!isliving(user)) + return + if(!user.mind) + return + if(!parentSphere) + to_chat(user, "The door seems to be malfunctioning and refuses to operate!") + return + if(alert(user, "Hilbert's Hotel would like to remind you that while we will do everything we can to protect the belongings you leave behind, we make no guarantees of their safety while you're gone, especially that of the health of any living creatures. With that in mind, are you ready to leave?", "Exit", "Leave", "Stay") == "Leave") + if(!user.canmove || (get_dist(get_turf(src), get_turf(user)) > 1)) //no teleporting around if they're dead or moved away during the prompt. + return + user.forceMove(get_turf(parentSphere)) + do_sparks(3, FALSE, get_turf(user)) + +/turf/closed/indestructible/hoteldoor/attack_ghost(mob/dead/observer/user) + if(!isobserver(user) || !parentSphere) + return ..() + user.forceMove(get_turf(parentSphere)) + +//If only this could be simplified... +/turf/closed/indestructible/hoteldoor/attack_tk(mob/user) + return //need to be close. + +/turf/closed/indestructible/hoteldoor/attack_hand(mob/user) + promptExit(user) + +/turf/closed/indestructible/hoteldoor/attack_animal(mob/user) + promptExit(user) + +/turf/closed/indestructible/hoteldoor/attack_paw(mob/user) + promptExit(user) + +/turf/closed/indestructible/hoteldoor/attack_hulk(mob/living/carbon/human/user, does_attack_animation) + promptExit(user) + +/turf/closed/indestructible/hoteldoor/attack_larva(mob/user) + promptExit(user) + +/turf/closed/indestructible/hoteldoor/attack_slime(mob/user) + promptExit(user) + +/turf/closed/indestructible/hoteldoor/attack_robot(mob/user) + if(get_dist(get_turf(src), get_turf(user)) <= 1) + promptExit(user) + +/turf/closed/indestructible/hoteldoor/AltClick(mob/user) + . = ..() + if(get_dist(get_turf(src), get_turf(user)) <= 1) + to_chat(user, "You peak through the door's bluespace peephole...") + user.reset_perspective(parentSphere) + user.set_machine(src) + var/datum/action/peepholeCancel/PHC = new + user.overlay_fullscreen("remote_view", /obj/screen/fullscreen/impaired, 1) + PHC.Grant(user) + +/turf/closed/indestructible/hoteldoor/check_eye(mob/user) + if(get_dist(get_turf(src), get_turf(user)) >= 2) + user.unset_machine() + for(var/datum/action/peepholeCancel/PHC in user.actions) + PHC.Trigger() + +/datum/action/peepholeCancel + name = "Cancel View" + desc = "Stop looking through the bluespace peephole." + button_icon_state = "cancel_peephole" + +/datum/action/peepholeCancel/Trigger() + . = ..() + to_chat(owner, "You move away from the peephole.") + owner.reset_perspective() + owner.clear_fullscreen("remote_view", 0) + qdel(src) + +/area/hilbertshotel + name = "Hilbert's Hotel Room" + icon_state = "hilbertshotel" + requires_power = FALSE + has_gravity = TRUE + noteleport = TRUE + hidden = TRUE + unique = FALSE + dynamic_lighting = DYNAMIC_LIGHTING_FORCED + ambientsounds = list('sound/ambience/servicebell.ogg') + var/roomnumber = 0 + var/obj/item/hilbertshotel/parentSphere + var/datum/turf_reservation/reservation + var/turf/storageTurf + +/area/hilbertshotel/Entered(atom/movable/AM) + . = ..() + if(istype(AM, /obj/item/hilbertshotel)) + relocate(AM) + var/list/obj/item/hilbertshotel/hotels = AM.GetAllContents(/obj/item/hilbertshotel) + for(var/obj/item/hilbertshotel/H in hotels) + if(parentSphere == H) + relocate(H) + +/area/hilbertshotel/proc/relocate(obj/item/hilbertshotel/H) + if(prob(0.135685)) //Because screw you + qdel(H) + return + var/turf/targetturf = find_safe_turf() + if(!targetturf) + if(GLOB.blobstart.len > 0) + targetturf = get_turf(pick(GLOB.blobstart)) + else + CRASH("Unable to find a blobstart landmark") + var/turf/T = get_turf(H) + var/area/A = T.loc + log_game("[H] entered itself. Moving it to [loc_name(targetturf)].") + message_admins("[H] entered itself. Moving it to [ADMIN_VERBOSEJMP(targetturf)].") + for(var/mob/M in A) + to_chat(M, "[H] almost implodes in upon itself, but quickly rebounds, shooting off into a random point in space!") + H.forceMove(targetturf) + +/area/hilbertshotel/Exited(atom/movable/AM) + . = ..() + if(ismob(AM)) + var/mob/M = AM + if(M.mind) + var/stillPopulated = FALSE + var/list/currentLivingMobs = GetAllContents(/mob/living) //Got to catch anyone hiding in anything + for(var/mob/living/L in currentLivingMobs) //Check to see if theres any sentient mobs left. + if(L.mind) + stillPopulated = TRUE + break + if(!stillPopulated) + storeRoom() + +/area/hilbertshotel/proc/storeRoom() + var/roomSize = (reservation.top_right_coords[1]-reservation.bottom_left_coords[1]+1)*(reservation.top_right_coords[2]-reservation.bottom_left_coords[2]+1) + var/storage[roomSize] + var/turfNumber = 1 + var/obj/item/abstracthotelstorage/storageObj = new(storageTurf) + storageObj.roomNumber = roomnumber + storageObj.parentSphere = parentSphere + storageObj.name = "Room [roomnumber] Storage" + for(var/i=0, i