diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1.dmm
index 33e27edd..0f2fd353 100644
--- a/_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1.dmm
+++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1.dmm
@@ -409,7 +409,7 @@
"jf" = (/obj/effect/mob_spawn/human/lavaland_syndicate{dir = 4; icon_state = "sleeper_s"},/obj/machinery/airalarm/syndicate{pixel_y = 24},/turf/open/floor/plasteel/grimy,/area/ruin/unpowered/syndicate_lava_base/dormitories)
"jg" = (/obj/effect/mapping_helpers/no_lava,/obj/effect/turf_decal/stripes/line{dir = 8},/turf/open/floor/plating{baseturfs = /turf/open/lava/smooth/lava_land_surface; initial_gas_mix = "o2=14;n2=23;TEMP=300"},/area/ruin/unpowered/syndicate_lava_base/outdoors)
"jh" = (/obj/effect/decal/cleanable/dirt,/obj/effect/turf_decal/stripes/line{dir = 4},/obj/machinery/light/small{dir = 1},/turf/open/floor/plating{baseturfs = /turf/open/lava/smooth/lava_land_surface; initial_gas_mix = "o2=14;n2=23;TEMP=300"},/area/ruin/unpowered/syndicate_lava_base/arrivals)
-"ji" = (/obj/machinery/vending/snack/random{extended_inventory = 1},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/turf_decal/tile/red{dir = 1},/obj/effect/turf_decal/tile/red{dir = 4},/obj/effect/turf_decal/tile/red{dir = 8},/turf/open/floor/plasteel,/area/ruin/unpowered/syndicate_lava_base/main)
+"ji" = (/obj/machinery/vending/snack/random{extended_inventory = 1; free = 1},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/turf_decal/tile/red{dir = 1},/obj/effect/turf_decal/tile/red{dir = 4},/obj/effect/turf_decal/tile/red{dir = 8},/turf/open/floor/plasteel,/area/ruin/unpowered/syndicate_lava_base/main)
"jj" = (/obj/structure/cable/yellow{icon_state = "1-2"},/obj/machinery/atmospherics/components/unary/vent_pump/on,/obj/effect/turf_decal/tile/red{dir = 1},/turf/open/floor/plasteel,/area/ruin/unpowered/syndicate_lava_base/main)
"jk" = (/obj/effect/turf_decal/stripes/line{dir = 8},/obj/effect/mapping_helpers/no_lava,/turf/open/floor/plating{baseturfs = /turf/open/lava/smooth/lava_land_surface; initial_gas_mix = "o2=14;n2=23;TEMP=300"},/area/ruin/unpowered/syndicate_lava_base/outdoors)
"jl" = (/turf/open/floor/plasteel,/area/ruin/unpowered/syndicate_lava_base/main)
@@ -418,7 +418,7 @@
"jp" = (/obj/effect/decal/cleanable/dirt,/obj/effect/turf_decal/tile/red,/obj/effect/turf_decal/tile/red{dir = 4},/obj/effect/turf_decal/tile/red{dir = 8},/turf/open/floor/plasteel,/area/ruin/unpowered/syndicate_lava_base/main)
"jq" = (/obj/machinery/light/small{dir = 8},/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer3{dir = 1},/obj/structure/bed,/obj/effect/spawner/lootdrop/bedsheet,/turf/open/floor/plasteel/grimy,/area/ruin/unpowered/syndicate_lava_base/dormitories)
"jr" = (/obj/machinery/atmospherics/components/unary/vent_pump/on{dir = 1},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3,/turf/open/floor/plasteel/grimy,/area/ruin/unpowered/syndicate_lava_base/dormitories)
-"js" = (/obj/machinery/vending/cola/random{extended_inventory = 1},/obj/effect/decal/cleanable/dirt,/obj/effect/turf_decal/tile/red{dir = 1},/obj/effect/turf_decal/tile/red{dir = 8},/turf/open/floor/plasteel,/area/ruin/unpowered/syndicate_lava_base/main)
+"js" = (/obj/machinery/vending/cola/random{extended_inventory = 1; free = 1},/obj/effect/decal/cleanable/dirt,/obj/effect/turf_decal/tile/red{dir = 1},/obj/effect/turf_decal/tile/red{dir = 8},/turf/open/floor/plasteel,/area/ruin/unpowered/syndicate_lava_base/main)
"jt" = (/obj/structure/cable/yellow{icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{dir = 4},/obj/effect/decal/cleanable/dirt,/turf/open/floor/plasteel,/area/ruin/unpowered/syndicate_lava_base/main)
"ju" = (/turf/closed/wall/mineral/plastitanium/nodiagonal,/area/ruin/unpowered/syndicate_lava_base/engineering)
"jv" = (/obj/effect/turf_decal/delivery,/obj/machinery/door/firedoor,/obj/structure/cable/yellow{icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{dir = 4},/obj/machinery/door/airlock/engineering{dir = 4; name = "Engineering"; req_access_txt = "150"},/turf/open/floor/plasteel,/area/ruin/unpowered/syndicate_lava_base/engineering)
@@ -577,7 +577,7 @@
"mS" = (/turf/closed/wall/mineral/plastitanium/explosive,/area/ruin/unpowered/syndicate_lava_base/telecomms)
"mT" = (/turf/closed/wall/mineral/plastitanium/nodiagonal,/area/ruin/unpowered/syndicate_lava_base/arrivals)
"mU" = (/obj/effect/decal/cleanable/dirt,/obj/effect/turf_decal/tile/red{dir = 1},/obj/effect/turf_decal/tile/red{dir = 4},/turf/open/floor/plasteel,/area/ruin/unpowered/syndicate_lava_base/arrivals)
-"mX" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{dir = 4},/obj/structure/cable/yellow{icon_state = "4-8"},/obj/effect/turf_decal/tile/red{dir = 1},/obj/effect/turf_decal/tile/red{dir = 4},/obj/machinery/vending/kink,/turf/open/floor/plasteel,/area/ruin/unpowered/syndicate_lava_base/arrivals)
+"mX" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{dir = 4},/obj/structure/cable/yellow{icon_state = "4-8"},/obj/effect/turf_decal/tile/red{dir = 1},/obj/effect/turf_decal/tile/red{dir = 4},/obj/machinery/vending/kink{free = 1},/turf/open/floor/plasteel,/area/ruin/unpowered/syndicate_lava_base/arrivals)
"mY" = (/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 1},/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer3{dir = 1},/obj/structure/cable/yellow{icon_state = "4-8"},/obj/effect/turf_decal/tile/red{dir = 1},/turf/open/floor/plasteel,/area/ruin/unpowered/syndicate_lava_base/arrivals)
"mZ" = (/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{dir = 4},/obj/structure/cable/yellow{icon_state = "4-8"},/obj/machinery/door/airlock/medical/glass{dir = 4; name = "Medbay"},/turf/open/floor/plasteel/white,/area/ruin/unpowered/syndicate_lava_base/medbay)
"na" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{dir = 4},/obj/structure/cable/yellow{icon_state = "4-8"},/turf/open/floor/plasteel/white/side{dir = 8},/area/ruin/unpowered/syndicate_lava_base/medbay)
@@ -690,6 +690,7 @@
"JA" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer3{dir = 1},/obj/structure/cable/yellow{icon_state = "4-8"},/obj/effect/turf_decal/tile/red{dir = 1},/obj/effect/turf_decal/tile/red{dir = 4},/turf/open/floor/plasteel,/area/ruin/unpowered/syndicate_lava_base/arrivals)
"LX" = (/obj/machinery/hydroponics/constructable,/obj/effect/turf_decal/loading_area{dir = 1; icon_state = "drain"; name = "drain"},/obj/effect/decal/cleanable/dirt,/turf/open/floor/plasteel/dark,/area/ruin/unpowered/syndicate_lava_base/arrivals)
"Mn" = (/turf/closed/wall/mineral/plastitanium/explosive,/area/ruin/unpowered/syndicate_lava_base/bar)
+"MY" = (/obj/effect/decal/cleanable/dirt,/obj/effect/turf_decal/tile/red{dir = 1},/obj/effect/turf_decal/tile/red{dir = 4},/obj/machinery/atm{pixel_y = 30},/turf/open/floor/plasteel,/area/ruin/unpowered/syndicate_lava_base/arrivals)
"NH" = (/obj/machinery/air_sensor{frequency = 1442; id_tag = "syndie_lavaland_tox_sensor"},/turf/open/floor/plating/airless,/area/ruin/unpowered/syndicate_lava_base/engineering)
"NZ" = (/obj/structure/table,/obj/item/storage/toolbox/syndicate,/obj/item/multitool,/obj/machinery/button/door{id = "lavalandsyndi_telecomms"; name = "Telecomms Blast Door Control"; pixel_x = 26; req_access_txt = "150"},/turf/open/floor/plasteel/dark,/area/ruin/unpowered/syndicate_lava_base/telecomms)
"Ov" = (/obj/effect/decal/cleanable/dirt,/obj/effect/mapping_helpers/no_lava,/obj/effect/turf_decal/stripes/line{dir = 6},/turf/open/floor/plating{baseturfs = /turf/open/lava/smooth/lava_land_surface; initial_gas_mix = "o2=14;n2=23;TEMP=300"},/area/ruin/unpowered/syndicate_lava_base/outdoors)
@@ -760,7 +761,7 @@ aaabababababababababababdGleopjyorjZjNlhlilZlkouovllozjyjDkQaDlnmElooAnclqlrlslt
aaabababababababababababhalwlwjyjyoHjZlzlAlBlCaklElFuBjyjDkQlHlImElKkQlLlMlNlOEZlPSulQlRnGjuabababaa
aaababababmnmnmnRuRuRuRumnlTgsmOjynSlVlWlXlYlZmajymcjyjyTpkQmeUgmfYjkUncmhmimjmkmlDGjujujujuabababaa
aaabababiimnmMmnmpmpIaNZmnmsmsmTjymvmumvjyvxmxjyjyjyjymzocmAmBmCmEmEutncmGmHmImJmKnjjuababababababaa
-aaabababmnmMmMmPTimQmRWtmSzVzVyqmUmUEFZvjyjyMnjyvDXamXmYzymZnauXnbnbRancjuneRVngsZNHjuababababababaa
+aaabababmnmMmMmPTimQmRWtmSzVzVyqMYmUEFZvjyjyMnjyvDXamXmYzymZnauXnbnbRancjuneRVngsZNHjuababababababaa
aaabababmnFbnkaEnknlnmmonnrFnonpBkamnrpiQmjPJAnsntRsfDnwhWnynzloRYmECDZInDnEtWnFnGRDjuababababababaa
aaabababmnmMmMmnnInJnKnLmnmTnQmTfPfPaoarPanTnUnXnXnXfKauhXmTobfkaVcDszjujuofOYjujujuhBababababababaa
aaabababgmmnmMmnoiojokmnmnmTGYPaPaPaPaJccIPamTgWgWgWgWgXmTmTmTmTmTmTmTmTotFlFRpVabababababababababaa
diff --git a/_maps/RandomRuins/SpaceRuins/listeningstation.dmm b/_maps/RandomRuins/SpaceRuins/listeningstation.dmm
index 902f182e..0478a690 100644
--- a/_maps/RandomRuins/SpaceRuins/listeningstation.dmm
+++ b/_maps/RandomRuins/SpaceRuins/listeningstation.dmm
@@ -42,13 +42,13 @@
"aP" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/atmospherics/components/unary/vent_pump/on{dir = 1},/obj/structure/extinguisher_cabinet{pixel_y = -29},/turf/open/floor/plasteel,/area/ruin/space/has_grav/listeningstation)
"aQ" = (/obj/effect/decal/cleanable/dirt,/obj/effect/turf_decal/tile/green{dir = 1},/obj/effect/turf_decal/tile/green{dir = 4},/obj/effect/turf_decal/tile/green,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 10},/turf/open/floor/plasteel,/area/ruin/space/has_grav/listeningstation)
"aR" = (/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4; piping_layer = 3; pixel_x = 5; pixel_y = 5},/obj/machinery/door/airlock{dir = 4; name = "Personal Quarters"},/turf/open/floor/plasteel,/area/ruin/space/has_grav/listeningstation)
-"aS" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4; piping_layer = 3; pixel_x = 5; pixel_y = 5},/obj/effect/turf_decal/tile/red{dir = 4},/turf/open/floor/plasteel,/area/ruin/space/has_grav/listeningstation)
+"aS" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4; piping_layer = 3; pixel_x = 5; pixel_y = 5},/obj/effect/turf_decal/tile/red{dir = 4},/obj/machinery/atm{pixel_y = 30},/turf/open/floor/plasteel,/area/ruin/space/has_grav/listeningstation)
"aT" = (/obj/machinery/atmospherics/pipe/manifold/supply/hidden,/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 2; piping_layer = 3; pixel_x = 5; pixel_y = 5},/obj/effect/turf_decal/tile/red{dir = 1},/obj/effect/turf_decal/tile/red{dir = 4},/turf/open/floor/plasteel,/area/ruin/space/has_grav/listeningstation)
"aU" = (/obj/effect/turf_decal/stripes/red/corner{dir = 8},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{piping_layer = 3; pixel_x = 5; pixel_y = 5},/turf/open/floor/plasteel,/area/ruin/space/has_grav/listeningstation)
"aV" = (/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 1},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4; piping_layer = 3; pixel_x = 5; pixel_y = 5},/obj/effect/turf_decal/tile/red{dir = 1},/obj/effect/turf_decal/tile/red{dir = 4},/obj/structure/sign/poster/contraband/random{pixel_y = 30},/turf/open/floor/plasteel,/area/ruin/space/has_grav/listeningstation)
"aW" = (/obj/machinery/light/small{dir = 1},/obj/machinery/firealarm{dir = 2; pixel_y = 24},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 1; piping_layer = 3; pixel_x = 5; pixel_y = 5},/obj/effect/turf_decal/tile/red{dir = 1},/obj/effect/turf_decal/tile/red{dir = 4},/turf/open/floor/plasteel,/area/ruin/space/has_grav/listeningstation)
"aX" = (/obj/structure/closet/firecloset/full{anchored = 1},/obj/effect/turf_decal/loading_area{icon_state = "drain"; name = "drain"},/turf/open/floor/mineral/plastitanium,/area/ruin/space/has_grav/listeningstation)
-"aY" = (/obj/machinery/vending/snack/random{extended_inventory = 1},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/structure/sign/poster/contraband/random{pixel_x = 32},/obj/effect/turf_decal/tile/red{dir = 1},/turf/open/floor/plasteel,/area/ruin/space/has_grav/listeningstation)
+"aY" = (/obj/machinery/vending/snack/random{extended_inventory = 1; free = 1},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/structure/sign/poster/contraband/random{pixel_x = 32},/obj/effect/turf_decal/tile/red{dir = 1},/turf/open/floor/plasteel,/area/ruin/space/has_grav/listeningstation)
"aZ" = (/turf/closed/mineral/random,/area/ruin/space/has_grav/listeningstation)
"ba" = (/obj/machinery/vending/boozeomat/syndicate_access,/turf/closed/wall/mineral/plastitanium/nodiagonal,/area/ruin/space/has_grav/listeningstation)
"bb" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/door/airlock/public/glass{dir = 4; name = "Botany"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4; piping_layer = 3; pixel_x = 5; pixel_y = 5},/turf/open/floor/plasteel/dark,/area/ruin/space/has_grav/listeningstation)
@@ -71,7 +71,7 @@
"bs" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/open/floor/plasteel,/area/ruin/space/has_grav/listeningstation)
"bt" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4; piping_layer = 3; pixel_x = 5; pixel_y = 5},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 10},/turf/open/floor/wood,/area/ruin/space/has_grav/listeningstation)
"bu" = (/obj/machinery/atmospherics/components/unary/vent_scrubber/on{dir = 8; piping_layer = 3; pixel_x = 5; pixel_y = 5},/turf/open/floor/wood,/area/ruin/space/has_grav/listeningstation)
-"bv" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/machinery/vending/cola/shamblers,/turf/open/floor/plasteel,/area/ruin/space/has_grav/listeningstation)
+"bv" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/machinery/vending/cola/shamblers{free = 1},/turf/open/floor/plasteel,/area/ruin/space/has_grav/listeningstation)
"bw" = (/obj/structure/closet/secure_closet/hydroponics{req_access = null},/obj/item/reagent_containers/spray/pestspray{pixel_x = 3; pixel_y = 4},/obj/item/shovel/spade,/obj/effect/decal/cleanable/dirt,/obj/item/storage/bag/plants,/obj/effect/turf_decal/tile/green{dir = 8},/obj/effect/turf_decal/tile/green{dir = 1},/obj/effect/turf_decal/tile/green,/turf/open/floor/plasteel,/area/ruin/space/has_grav/listeningstation)
"bx" = (/obj/effect/turf_decal/tile/green,/obj/effect/turf_decal/tile/green{dir = 8},/turf/open/floor/plasteel,/area/ruin/space/has_grav/listeningstation)
"by" = (/obj/machinery/power/terminal{dir = 1},/obj/structure/cable{icon_state = "0-2"; pixel_y = 1},/obj/structure/reagent_dispensers/fueltank,/obj/item/clothing/head/welding,/obj/item/weldingtool/largetank,/obj/effect/decal/cleanable/dirt,/turf/open/floor/plating,/area/ruin/space/has_grav/listeningstation)
diff --git a/_maps/RandomRuins/SpaceRuins/wizardden.dmm b/_maps/RandomRuins/SpaceRuins/wizardden.dmm
new file mode 100644
index 00000000..59de2fcc
--- /dev/null
+++ b/_maps/RandomRuins/SpaceRuins/wizardden.dmm
@@ -0,0 +1,277 @@
+"a" = (/turf/open/space/basic,/area/space)
+"f" = (/obj/structure/fans/tiny/invisible,/turf/open/floor/fakepit,/area/ruin/space/has_grav/powered/wiz_home)
+"h" = (/obj/structure/bed,/obj/item/bedsheet/wiz,/obj/machinery/light_switch{pixel_y = -24},/turf/open/floor/wood,/area/ruin/space/has_grav/powered/wiz_home)
+"j" = (/obj/structure/table/wood,/obj/item/book/codex_gigas,/obj/machinery/light{dir = 8},/turf/open/floor/wood,/area/ruin/space/has_grav/powered/wiz_home)
+"p" = (/obj/machinery/door/airlock/external,/obj/effect/mapping_helpers/airlock/cyclelink_helper,/turf/open/floor/plating,/area/ruin/space/has_grav/powered/wiz_home)
+"t" = (/obj/structure/table/wood,/obj/item/gun/magic/staff,/turf/open/floor/wood,/area/ruin/space/has_grav/powered/wiz_home)
+"v" = (/obj/structure/destructible/cult/tome,/turf/open/floor/wood,/area/ruin/space/has_grav/powered/wiz_home)
+"w" = (/turf/closed/indestructible/wood,/area/ruin/space/has_grav/powered/wiz_home)
+"y" = (/turf/open/floor/carpet,/area/ruin/space/has_grav/powered/wiz_home)
+"z" = (/obj/structure/table/wood,/obj/item/storage/pill_bottle/dice{icon_state = "magicdicebag"},/turf/open/floor/wood,/area/ruin/space/has_grav/powered/wiz_home)
+"B" = (/obj/structure/chair/wood/wings{dir = 1},/turf/open/floor/carpet,/area/ruin/space/has_grav/powered/wiz_home)
+"G" = (/obj/structure/showcase{desc = "A historical figure of great importance to the wizard federation. He spent his long life learning magic, stealing artifacts, and harassing idiots with swords. May he rest forever, Rodney."; icon = 'icons/mob/mob.dmi'; icon_state = "nim"; name = "wizard of yendor showcase"},/turf/open/floor/wood,/area/ruin/space/has_grav/powered/wiz_home)
+"I" = (/obj/machinery/vending/magivend_novirus,/turf/open/floor/wood,/area/ruin/space/has_grav/powered/wiz_home)
+"K" = (/obj/item/clothing/shoes/sandal/marisa,/obj/item/clothing/suit/wizrobe/marisa,/obj/item/clothing/head/wizard/marisa,/obj/effect/decal/remains/human,/turf/open/floor/carpet,/area/ruin/space/has_grav/powered/wiz_home)
+"P" = (/obj/structure/table/wood,/obj/item/book/granter/spell/smoke,/turf/open/floor/wood,/area/ruin/space/has_grav/powered/wiz_home)
+"S" = (/obj/machinery/light,/turf/open/floor/wood,/area/ruin/space/has_grav/powered/wiz_home)
+"U" = (/obj/machinery/light{dir = 4},/turf/open/floor/wood,/area/ruin/space/has_grav/powered/wiz_home)
+"V" = (/turf/open/floor/wood,/area/ruin/space/has_grav/powered/wiz_home)
+"W" = (/obj/structure/destructible/cult/talisman{desc = "An altar dedicated to the Wizards' Federation"},/obj/item/kitchen/knife/ritual,/turf/open/floor/wood,/area/ruin/space/has_grav/powered/wiz_home)
+"X" = (/obj/structure/table/wood,/obj/item/spellbook{name = "Magical Grimoire"; owner = "Chloe Zadovsky"; uses = 0},/turf/open/floor/wood,/area/ruin/space/has_grav/powered/wiz_home)
+"Y" = (/obj/machinery/door/airlock/external,/obj/effect/mapping_helpers/airlock/cyclelink_helper{dir = 1},/turf/open/floor/plating,/area/ruin/space/has_grav/powered/wiz_home)
+
+(1,1,1) = {"
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aawwwwwwwwwwaaa
+aawztPvWVVIwaaa
+aawXKyByyyVwaaa
+aawjyyyyyyUwaaa
+aawVVVhGSVVwaaa
+aawwwwwwwpwwaaa
+aaaaaaaawfwaaaa
+aaaaaaaawYwaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+"}
+(1,1,2) = {"
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+"}
+(1,1,3) = {"
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+"}
+(1,1,4) = {"
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+"}
+(1,1,5) = {"
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+"}
+(1,1,6) = {"
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+"}
+(1,1,7) = {"
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+"}
+(1,1,8) = {"
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+"}
+(1,1,9) = {"
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+"}
+(1,1,10) = {"
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+"}
+(1,1,11) = {"
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+"}
+(1,1,12) = {"
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+"}
+(1,1,13) = {"
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+"}
+(1,1,14) = {"
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+"}
+(1,1,15) = {"
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaa
+"}
diff --git a/_maps/map_files/BoxStation/BoxStation.dmm b/_maps/map_files/BoxStation/BoxStation.dmm
index 6a47ebdb..a5806b0f 100644
--- a/_maps/map_files/BoxStation/BoxStation.dmm
+++ b/_maps/map_files/BoxStation/BoxStation.dmm
@@ -1670,7 +1670,7 @@
"aGf" = (/obj/machinery/shower{pixel_y = 19},/obj/effect/turf_decal/loading_area{dir = 1; icon_state = "drain"; name = "drain"},/turf/open/floor/plasteel/freezer,/area/crew_quarters/toilet)
"aGg" = (/obj/machinery/cryopod{dir = 4},/obj/effect/turf_decal/stripes/line{dir = 4},/turf/open/floor/plasteel/freezer,/area/crew_quarters/cryopod)
"aGh" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 6},/turf/open/floor/plasteel/yellowsiding{dir = 1},/area/crew_quarters/fitness/pool)
-"aGi" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{icon_state = "4-8"},/turf/open/floor/plating,/area/maintenance/starboard/fore)
+"aGi" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/open/floor/plating,/area/maintenance/starboard/fore)
"aGj" = (/obj/machinery/light{dir = 1; pixel_y = 16},/turf/open/floor/carpet,/area/crew_quarters/theatre)
"aGk" = (/obj/structure/cable{icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/cable{icon_state = "2-4"},/obj/structure/disposalpipe/sorting/mail{dir = 4; sortType = 19},/turf/open/floor/plating,/area/maintenance/starboard/fore)
"aGl" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/effect/turf_decal/tile/neutral,/obj/effect/turf_decal/tile/neutral{dir = 4},/turf/open/floor/plasteel,/area/crew_quarters/dorms)
@@ -2047,7 +2047,7 @@
"aNs" = (/turf/open/floor/plasteel/showroomfloor,/area/crew_quarters/kitchen)
"aNt" = (/obj/structure/cable{icon_state = "1-2"},/obj/machinery/door/firedoor,/obj/machinery/door/airlock/vault{req_access_txt = "53"},/turf/open/floor/plasteel/dark,/area/ai_monitored/turret_protected/ai_upload)
"aNu" = (/obj/machinery/atmospherics/components/unary/vent_scrubber/on{dir = 1},/turf/open/floor/plasteel,/area/hallway/primary/central)
-"aNv" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/plasticflaps/opaque,/obj/machinery/navbeacon{codes_txt = "delivery;dir=2"; freq = 1400; location = "Kitchen"},/obj/machinery/navbeacon{codes_txt = "delivery;dir=2"; freq = 1400; location = "Kitchen"},/turf/open/floor/plating,/area/crew_quarters/kitchen)
+"aNv" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/plasticflaps/opaque,/obj/machinery/navbeacon{codes_txt = "delivery;dir=2"; freq = 1400; location = "Kitchen"},/turf/open/floor/plating,/area/crew_quarters/kitchen)
"aNw" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/closed/wall,/area/crew_quarters/kitchen)
"aNx" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/plasticflaps/opaque,/obj/machinery/navbeacon{codes_txt = "delivery;dir=2"; freq = 1400; location = "Hydroponics"},/obj/effect/turf_decal/bot,/turf/open/floor/plasteel,/area/maintenance/starboard/fore)
"aNy" = (/obj/effect/turf_decal/loading_area{dir = 8; icon_state = "drain"; name = "drain"},/obj/structure/disposalpipe/segment{dir = 5},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 5},/obj/structure/cable{icon_state = "1-4"},/turf/open/floor/plasteel,/area/hallway/primary/central)
diff --git a/_maps/map_files/PubbyStation/PubbyStation.dmm b/_maps/map_files/PubbyStation/PubbyStation.dmm
index b345d475..b26e26c8 100644
--- a/_maps/map_files/PubbyStation/PubbyStation.dmm
+++ b/_maps/map_files/PubbyStation/PubbyStation.dmm
@@ -20165,7 +20165,6 @@
},
/area/hallway/secondary/exit/departure_lounge)
"aOh" = (
-/obj/structure/chair,
/obj/machinery/light{
dir = 1
},
@@ -20176,6 +20175,9 @@
/obj/effect/turf_decal/tile/neutral{
dir = 4
},
+/obj/machinery/atm{
+ pixel_y = 30
+ },
/turf/open/floor/plasteel{
heat_capacity = 1e+006
},
@@ -25501,9 +25503,6 @@
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
dir = 4
},
-/obj/structure/extinguisher_cabinet{
- pixel_y = 30
- },
/obj/effect/turf_decal/tile/neutral{
dir = 1
},
@@ -25514,6 +25513,9 @@
/obj/effect/turf_decal/tile/neutral{
dir = 8
},
+/obj/machinery/atm{
+ pixel_y = 30
+ },
/turf/open/floor/plasteel/dark,
/area/crew_quarters/bar)
"aZb" = (
@@ -41964,6 +41966,9 @@
/obj/effect/turf_decal/tile/purple{
dir = 4
},
+/obj/machinery/atm{
+ pixel_y = 30
+ },
/turf/open/floor/plasteel,
/area/hallway/primary/aft)
"bHn" = (
@@ -53371,9 +53376,7 @@
/turf/open/floor/plasteel,
/area/crew_quarters/dorms)
"coo" = (
-/obj/machinery/atmospherics/pipe/simple/supply/hidden{
- dir = 5
- },
+/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden,
/obj/machinery/airalarm{
dir = 1;
pixel_y = -22
@@ -58566,6 +58569,13 @@
/obj/structure/grille,
/turf/open/space/basic,
/area/space/nearstation)
+"gZw" = (
+/obj/machinery/door/firedoor,
+/obj/machinery/atm{
+ pixel_y = 30
+ },
+/turf/open/floor/plasteel,
+/area/hallway/primary/central)
"heC" = (
/obj/machinery/power/apc/highcap/five_k{
dir = 8;
@@ -59568,6 +59578,12 @@
},
/turf/open/floor/plating,
/area/maintenance/department/crew_quarters/dorms)
+"jKu" = (
+/obj/machinery/atm{
+ pixel_y = 30
+ },
+/turf/open/floor/plasteel/dark,
+/area/chapel/main/monastery)
"jLW" = (
/obj/machinery/atmospherics/pipe/simple/purple/visible,
/turf/closed/wall/r_wall,
@@ -59765,6 +59781,20 @@
icon_state = "platingdmg3"
},
/area/maintenance/department/crew_quarters/dorms)
+"kks" = (
+/obj/machinery/atmospherics/pipe/simple/cyan/hidden{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/blue{
+ dir = 4
+ },
+/obj/machinery/atm{
+ pixel_y = 30
+ },
+/turf/open/floor/plasteel/white/corner{
+ dir = 1
+ },
+/area/hallway/secondary/entry)
"kkQ" = (
/obj/machinery/vending/cola/pwr_game,
/turf/open/floor/plating{
@@ -61151,6 +61181,21 @@
},
/turf/open/floor/plating,
/area/science/xenobiology)
+"nFk" = (
+/obj/structure/disposalpipe/segment{
+ dir = 4
+ },
+/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/blue{
+ dir = 1
+ },
+/obj/machinery/atm{
+ pixel_y = 30
+ },
+/turf/open/floor/plasteel,
+/area/hallway/primary/central)
"nGi" = (
/obj/structure/chair{
dir = 4
@@ -63383,6 +63428,15 @@
},
/turf/open/floor/plasteel,
/area/hallway/primary/aft)
+"tcR" = (
+/obj/effect/turf_decal/stripes/line{
+ dir = 8
+ },
+/obj/machinery/atm{
+ pixel_y = 30
+ },
+/turf/open/floor/plasteel,
+/area/hallway/secondary/entry)
"tcY" = (
/obj/structure/cable{
icon_state = "4-8"
@@ -82030,7 +82084,7 @@ bOw
bQg
bQe
bWV
-bXJ
+jKu
bXJ
bZm
bYB
@@ -84797,7 +84851,7 @@ aIC
pvK
aKD
gmO
-aQt
+aHz
aOh
aWK
aRE
@@ -86351,7 +86405,7 @@ azW
abG
aHz
aYG
-aZA
+kks
aGp
bbR
bbR
@@ -86363,7 +86417,7 @@ aaa
aaa
aaa
aYG
-bbR
+tcR
bbR
aJu
baK
@@ -93530,7 +93584,7 @@ aEz
aFx
aGk
awR
-aHQ
+nFk
aIO
aJO
aKT
@@ -103804,7 +103858,7 @@ aym
awr
aAO
aBP
-com
+coo
apX
aET
aaH
@@ -104318,9 +104372,9 @@ ayn
azv
col
aBR
-coo
+bns
apX
-aGV
+gZw
aDZ
aGD
aDZ
diff --git a/_maps/map_files/generic/CentCom.dmm b/_maps/map_files/generic/CentCom.dmm
index ff2a7786..1a5e715e 100644
--- a/_maps/map_files/generic/CentCom.dmm
+++ b/_maps/map_files/generic/CentCom.dmm
@@ -12900,6 +12900,23 @@
},
/turf/open/floor/plasteel/dark,
/area/centcom/ferry)
+"Cl" = (
+/obj/structure/flora/ausbushes/grassybush,
+/obj/structure/flora/ausbushes/sparsegrass,
+/obj/structure/flora/ausbushes/fernybush,
+/obj/item/storage/backpack/duffelbag/drone{
+ pixel_y = 2
+ },
+/obj/effect/decal/cleanable/ash{
+ name = "ashes of drone (760)"
+ },
+/obj/item/clothing/head/hardhat/weldhat,
+/turf/open/floor/plasteel{
+ dir = 6;
+ icon_state = "asteroid8";
+ name = "sand"
+ },
+/area/centcom/control)
"Cn" = (
/obj/structure/table/reinforced,
/obj/machinery/chem_dispenser/drinks/beer/fullupgrade,
@@ -18945,6 +18962,9 @@
/obj/structure/table/wood,
/obj/structure/window/reinforced/spawner/north,
/obj/structure/window/reinforced/spawner/west,
+/obj/item/rupee{
+ desc = "A gift, right?"
+ },
/turf/open/floor/plasteel/grimy,
/area/centcom/ferry)
"RD" = (
@@ -62724,7 +62744,7 @@ io
io
io
qw
-WI
+Cl
Wk
WI
lN
diff --git a/code/__DEFINES/colors.dm b/code/__DEFINES/colors.dm
index fd29e892..90c73dac 100644
--- a/code/__DEFINES/colors.dm
+++ b/code/__DEFINES/colors.dm
@@ -17,6 +17,7 @@
#define COLOR_FLOORTILE_GRAY "#8D8B8B"
#define COLOR_ALMOST_BLACK "#333333"
+#define COLOR_SILVER "#C0C0C0"
#define COLOR_BLACK "#000000"
#define COLOR_RED "#FF0000"
#define COLOR_RED_LIGHT "#FF3333"
@@ -63,4 +64,4 @@
#define COLOR_ASSEMBLY_LBLUE "#5D99BE"
#define COLOR_ASSEMBLY_BLUE "#38559E"
#define COLOR_ASSEMBLY_PURPLE "#6F6192"
-#define COLOR_ASSEMBLY_PINK "#ff4adc"
\ No newline at end of file
+#define COLOR_ASSEMBLY_PINK "#ff4adc"
diff --git a/code/__DEFINES/layers.dm b/code/__DEFINES/layers.dm
index 4598932b..c1648d34 100644
--- a/code/__DEFINES/layers.dm
+++ b/code/__DEFINES/layers.dm
@@ -6,6 +6,10 @@
#define PLANE_SPACE -95
#define PLANE_SPACE_PARALLAX -90
+#define OPENSPACE_LAYER 17 //Openspace layer over all
+#define OPENSPACE_PLANE -4 //Openspace plane below all turfs
+#define OPENSPACE_BACKDROP_PLANE -3 //Black square just over openspace plane to guaranteed cover all in openspace turf
+
#define FLOOR_PLANE -2
#define GAME_PLANE -1
#define BLACKNESS_PLANE 0 //To keep from conflicts with SEE_BLACKNESS internals
@@ -87,9 +91,6 @@
#define ABOVE_LIGHTING_PLANE 16
#define ABOVE_LIGHTING_LAYER 16
-#define FLOOR_OPENSPACE_PLANE 17
-#define OPENSPACE_LAYER 17
-
#define BYOND_LIGHTING_PLANE 18
#define BYOND_LIGHTING_LAYER 18
diff --git a/code/_onclick/hud/parallax.dm b/code/_onclick/hud/parallax.dm
index 8592383a..c96d687e 100644
--- a/code/_onclick/hud/parallax.dm
+++ b/code/_onclick/hud/parallax.dm
@@ -8,7 +8,7 @@
var/last_parallax_shift //world.time of last update
var/parallax_throttle = 0 //ds between updates
var/parallax_movedir = 0
- var/parallax_layers_max = 3
+ var/parallax_layers_max = 4
var/parallax_animate_timer
/datum/hud/proc/create_parallax(mob/viewmob)
@@ -22,6 +22,8 @@
C.parallax_layers_cached += new /obj/screen/parallax_layer/layer_1(null, C.view)
C.parallax_layers_cached += new /obj/screen/parallax_layer/layer_2(null, C.view)
C.parallax_layers_cached += new /obj/screen/parallax_layer/planet(null, C.view)
+ if(SSparallax.random_layer)
+ C.parallax_layers_cached += new SSparallax.random_layer
C.parallax_layers_cached += new /obj/screen/parallax_layer/layer_3(null, C.view)
C.parallax_layers = C.parallax_layers_cached.Copy()
@@ -64,12 +66,12 @@
switch(C.prefs.parallax)
if (PARALLAX_INSANE)
C.parallax_throttle = FALSE
- C.parallax_layers_max = 4
+ C.parallax_layers_max = 5
return TRUE
if (PARALLAX_MED)
C.parallax_throttle = PARALLAX_DELAY_MED
- C.parallax_layers_max = 2
+ C.parallax_layers_max = 3
return TRUE
if (PARALLAX_LOW)
@@ -81,7 +83,7 @@
return FALSE
C.parallax_throttle = PARALLAX_DELAY_DEFAULT
- C.parallax_layers_max = 3
+ C.parallax_layers_max = 4
return TRUE
/datum/hud/proc/update_parallax_pref(mob/viewmob)
@@ -167,7 +169,7 @@
/datum/hud/proc/update_parallax()
var/client/C = mymob.client
var/turf/posobj = get_turf(C.eye)
- if(!posobj)
+ if(!posobj)
return
var/area/areaobj = posobj.loc
@@ -296,6 +298,20 @@
speed = 1.4
layer = 3
+/obj/screen/parallax_layer/random
+ blend_mode = BLEND_OVERLAY
+ speed = 3
+ layer = 3
+
+/obj/screen/parallax_layer/random/space_gas
+ icon_state = "space_gas"
+
+/obj/screen/parallax_layer/random/space_gas/Initialize(mapload, view)
+ src.add_atom_colour(SSparallax.random_parallax_color, ADMIN_COLOUR_PRIORITY)
+
+/obj/screen/parallax_layer/random/asteroids
+ icon_state = "asteroids"
+
/obj/screen/parallax_layer/planet
icon_state = "planet"
blend_mode = BLEND_OVERLAY
@@ -304,11 +320,11 @@
layer = 30
/obj/screen/parallax_layer/planet/update_status(mob/M)
- var/turf/T = get_turf(M)
- if(is_station_level(T.z))
- invisibility = 0
- else
- invisibility = INVISIBILITY_ABSTRACT
+ var/client/C = M.client
+ var/turf/posobj = get_turf(C.eye)
+ if(!posobj)
+ return
+ invisibility = is_station_level(posobj.z) ? 0 : INVISIBILITY_ABSTRACT
/obj/screen/parallax_layer/planet/update_o()
return //Shit wont move
diff --git a/code/_onclick/hud/plane_master.dm b/code/_onclick/hud/plane_master.dm
index b2bc0592..ac749409 100644
--- a/code/_onclick/hud/plane_master.dm
+++ b/code/_onclick/hud/plane_master.dm
@@ -18,7 +18,7 @@
/obj/screen/plane_master/openspace
name = "open space plane master"
- plane = FLOOR_OPENSPACE_PLANE
+ plane = OPENSPACE_BACKDROP_PLANE
appearance_flags = PLANE_MASTER
blend_mode = BLEND_MULTIPLY
alpha = 255
diff --git a/code/controllers/subsystem/parallax.dm b/code/controllers/subsystem/parallax.dm
index 64299fda..af5b13ce 100644
--- a/code/controllers/subsystem/parallax.dm
+++ b/code/controllers/subsystem/parallax.dm
@@ -7,9 +7,15 @@ SUBSYSTEM_DEF(parallax)
var/list/currentrun
var/planet_x_offset = 128
var/planet_y_offset = 128
+ var/random_layer
+ var/random_parallax_color
-/datum/controller/subsystem/parallax/Initialize(timeofday)
+//These are cached per client so needs to be done asap so people joining at roundstart do not miss these.
+/datum/controller/subsystem/parallax/PreInit()
. = ..()
+ if(prob(70)) //70% chance to pick a special extra layer
+ random_layer = pick(/obj/screen/parallax_layer/random/space_gas, /obj/screen/parallax_layer/random/asteroids)
+ random_parallax_color = pick(COLOR_TEAL, COLOR_GREEN, COLOR_SILVER, COLOR_YELLOW, COLOR_CYAN, COLOR_ORANGE, COLOR_PURPLE)//Special color for random_layer1. Has to be done here so everyone sees the same color.
planet_y_offset = rand(100, 160)
planet_x_offset = rand(100, 160)
diff --git a/code/game/area/areas/ruins/space.dm b/code/game/area/areas/ruins/space.dm
index 74b9e3a1..fbcc8abb 100644
--- a/code/game/area/areas/ruins/space.dm
+++ b/code/game/area/areas/ruins/space.dm
@@ -58,6 +58,9 @@
/area/ruin/space/has_grav/powered/cat_man
name = "Kitty Den"
+/area/ruin/space/has_grav/powered/wiz_home/area/ruin/space/has_grav/powered/wiz_home
+ name = "Wizard's Cabin"
+
/area/ruin/space/has_grav/powered/authorship
name = "Authorship"
@@ -178,13 +181,6 @@
name = "Mech Transport"
icon_state = "green"
-
-//Ruin of gas the lizard
-
-/area/ruin/space/has_grav/gasthelizard
- name = "Gas the lizard"
-
-
//Ruin of Deep Storage
/area/ruin/space/has_grav/deepstorage
diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm
index d9948b8e..656bbc51 100644
--- a/code/game/objects/objs.dm
+++ b/code/game/objects/objs.dm
@@ -31,6 +31,8 @@
var/renamedByPlayer = FALSE //set when a player uses a pen on a renamable object
+ vis_flags = VIS_INHERIT_PLANE //when this be added to vis_contents of something it inherit something.plane, important for visualisation of obj in openspace.
+
/obj/vv_edit_var(vname, vval)
switch(vname)
if("anchored")
diff --git a/code/game/turfs/openspace/openspace.dm b/code/game/turfs/openspace/openspace.dm
index e68aabcd..ede97c0b 100644
--- a/code/game/turfs/openspace/openspace.dm
+++ b/code/game/turfs/openspace/openspace.dm
@@ -1,7 +1,20 @@
+GLOBAL_DATUM_INIT(openspace_backdrop_one_for_all, /atom/movable/openspace_backdrop, new)
+
+/atom/movable/openspace_backdrop
+ name = "openspace_backdrop"
+
+ anchored = TRUE
+
+ icon = 'icons/turf/floors.dmi'
+ icon_state = "grey"
+ plane = OPENSPACE_BACKDROP_PLANE
+ mouse_opacity = MOUSE_OPACITY_TRANSPARENT
+ layer = SPLASHSCREEN_LAYER
+
/turf/open/openspace
name = "open space"
desc = "Watch your step!"
- icon_state = "grey"
+ icon_state = "transparent"
baseturfs = /turf/open/openspace
CanAtmosPassVertical = ATMOS_PASS_YES
//mouse_opacity = MOUSE_OPACITY_TRANSPARENT
@@ -14,8 +27,11 @@
/turf/open/openspace/Initialize() // handle plane and layer here so that they don't cover other obs/turfs in Dream Maker
. = ..()
- plane = FLOOR_OPENSPACE_PLANE
+ plane = OPENSPACE_PLANE
layer = OPENSPACE_LAYER
+
+ vis_contents += GLOB.openspace_backdrop_one_for_all //Special grey square for projecting backdrop darkness filter on it.
+
return INITIALIZE_HINT_LATELOAD
/turf/open/openspace/LateInitialize()
diff --git a/code/game/turfs/space/space.dm b/code/game/turfs/space/space.dm
index 983f37d1..d415e230 100644
--- a/code/game/turfs/space/space.dm
+++ b/code/game/turfs/space/space.dm
@@ -18,7 +18,7 @@
light_power = 0.25
dynamic_lighting = DYNAMIC_LIGHTING_DISABLED
bullet_bounce_sound = null
-
+ vis_flags = VIS_INHERIT_ID //when this be added to vis_contents of something it be associated with something on clicking, important for visualisation of turf in openspace and interraction with openspace that show you turf.
/turf/open/space/basic/New() //Do not convert to Initialize
//This is used to optimize the map loader
diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm
index d1394e7c..ff47a484 100644
--- a/code/game/turfs/turf.dm
+++ b/code/game/turfs/turf.dm
@@ -32,6 +32,8 @@
//IE if the turf is supposed to be water, set TRUE.
var/tiled_dirt = FALSE // use smooth tiled dirt decal
+
+ vis_flags = VIS_INHERIT_PLANE|VIS_INHERIT_ID //when this be added to vis_contents of something it inherit something.plane and be associated with something on clicking, important for visualisation of turf in openspace and interraction with openspace that show you turf.
/turf/vv_edit_var(var_name, new_value)
var/static/list/banned_edits = list("x", "y", "z")
diff --git a/code/modules/atmospherics/gasmixtures/gas_types.dm b/code/modules/atmospherics/gasmixtures/gas_types.dm
index 06a62f52..9bd41404 100644
--- a/code/modules/atmospherics/gasmixtures/gas_types.dm
+++ b/code/modules/atmospherics/gasmixtures/gas_types.dm
@@ -203,6 +203,7 @@ GLOBAL_LIST_INIT(nonreactive_gases, typecacheof(list(/datum/gas/oxygen, /datum/g
anchored = TRUE // should only appear in vis_contents, but to be safe
layer = FLY_LAYER
appearance_flags = TILE_BOUND
+ vis_flags = NONE
/obj/effect/overlay/gas/New(state, alph)
. = ..()
diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm
index ed901ee6..3a56fcff 100644
--- a/code/modules/mob/mob_defines.dm
+++ b/code/modules/mob/mob_defines.dm
@@ -142,3 +142,5 @@
var/typing_indicator_timerid
/// Current state of our typing indicator. Used for cut overlay, DO NOT RUNTIME ASSIGN OTHER THAN FROM SHOW/CLEAR. Used to absolutely ensure we do not get stuck overlays.
var/mutable_appearance/typing_indicator_current
+
+ vis_flags = VIS_INHERIT_PLANE //when this be added to vis_contents of something it inherit something.plane, important for visualisation of mob in openspace.
diff --git a/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm b/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm
index 18f2c761..4fefc0fd 100644
--- a/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/alcohol_reagents.dm
@@ -14,7 +14,7 @@
taste_description = "alcohol"
var/boozepwr = 65 //Higher numbers equal higher hardness, higher hardness equals more intense alcohol poisoning
pH = 7.33
- hydration = 1 * REAGENTS_METABOLISM
+ hydration = 1
/*
Boozepwr Chart
diff --git a/code/modules/reagents/chemistry/reagents/drink_reagents.dm b/code/modules/reagents/chemistry/reagents/drink_reagents.dm
index d250f025..ed5fba9d 100644
--- a/code/modules/reagents/chemistry/reagents/drink_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/drink_reagents.dm
@@ -11,7 +11,7 @@
glass_icon_state = "glass_orange"
glass_name = "glass of orange juice"
glass_desc = "Vitamins! Yay!"
- hydration = 4 * REAGENTS_METABOLISM
+ hydration = 4
pH = 3.3
/datum/reagent/consumable/orangejuice/on_mob_life(mob/living/carbon/M)
@@ -28,7 +28,7 @@
glass_icon_state = "glass_red"
glass_name = "glass of tomato juice"
glass_desc = "Are you sure this is tomato juice?"
- hydration = 4 * REAGENTS_METABOLISM
+ hydration = 4
/datum/reagent/consumable/tomatojuice/on_mob_life(mob/living/carbon/M)
if(M.getFireLoss() && prob(20))
@@ -45,7 +45,7 @@
glass_name = "glass of lime juice"
glass_desc = "A glass of sweet-sour lime juice."
pH = 2.2
- hydration = 3 * REAGENTS_METABOLISM
+ hydration = 4
/datum/reagent/consumable/limejuice/on_mob_life(mob/living/carbon/M)
if(M.getToxLoss() && prob(20))
@@ -61,7 +61,7 @@
glass_icon_state = "carrotjuice"
glass_name = "glass of carrot juice"
glass_desc = "It's just like a carrot but without crunching."
- hydration = 4 * REAGENTS_METABOLISM
+ hydration = 4
/datum/reagent/consumable/carrotjuice/on_mob_life(mob/living/carbon/M)
M.adjust_blurriness(-1)
@@ -83,7 +83,7 @@
glass_icon_state = "berryjuice"
glass_name = "glass of berry juice"
glass_desc = "Berry juice. Or maybe it's jam. Who cares?"
- hydration = 4 * REAGENTS_METABOLISM
+ hydration = 4
/datum/reagent/consumable/applejuice
name = "Apple Juice"
@@ -91,7 +91,7 @@
color = "#ECFF56" // rgb: 236, 255, 86
taste_description = "apples"
pH = 3.2 // ~ 2.7 -> 3.7
- hydration = 4 * REAGENTS_METABOLISM
+ hydration = 4
/datum/reagent/consumable/poisonberryjuice
name = "Poison Berry Juice"
@@ -101,7 +101,7 @@
glass_icon_state = "poisonberryjuice"
glass_name = "glass of berry juice"
glass_desc = "Berry juice. Or maybe it's poison. Who cares?"
- hydration = 2 * REAGENTS_METABOLISM
+ hydration = 4
/datum/reagent/consumable/poisonberryjuice/on_mob_life(mob/living/carbon/M)
M.adjustToxLoss(1, 0)
@@ -116,7 +116,7 @@
glass_icon_state = "glass_red"
glass_name = "glass of watermelon juice"
glass_desc = "A glass of watermelon juice."
- hydration = 4 * REAGENTS_METABOLISM
+ hydration = 4
/datum/reagent/consumable/lemonjuice
name = "Lemon Juice"
@@ -127,7 +127,7 @@
glass_name = "glass of lemon juice"
glass_desc = "Sour..."
pH = 2
- hydration = 4 * REAGENTS_METABOLISM
+ hydration = 4
/datum/reagent/consumable/strawberryjuice
name = "Strawberry Juice"
@@ -136,7 +136,7 @@
taste_description = "strawberry"
glass_name = "glass of strawberry juice"
glass_desc = "Refreshing seasonal summer drink."
- hydration = 4 * REAGENTS_METABOLISM
+ hydration = 4
/datum/reagent/consumable/banana
name = "Banana Juice"
@@ -146,7 +146,7 @@
glass_icon_state = "banana"
glass_name = "glass of banana juice"
glass_desc = "The raw essence of a banana. HONK."
- hydration = 1 * REAGENTS_METABOLISM
+ hydration = 4
/datum/reagent/consumable/banana/on_mob_life(mob/living/carbon/M)
if((ishuman(M) && M.job == "Clown") || ismonkey(M))
@@ -210,7 +210,7 @@
description = "The juice of a bunch of grapes. Guaranteed non-alcoholic."
color = "#290029" // dark purple
taste_description = "grape soda"
- hydration = 2 * REAGENTS_METABOLISM
+ hydration = 4
/datum/reagent/consumable/milk
name = "Milk"
@@ -221,7 +221,7 @@
glass_name = "milk drum"
glass_desc = "White and nutritious goodness!"
pH = 6.5
- hydration = 2 * REAGENTS_METABOLISM
+ hydration = 3
/datum/reagent/consumable/milk/on_mob_life(mob/living/carbon/M)
if(HAS_TRAIT(M, TRAIT_CALCIUM_HEALER))
@@ -243,7 +243,7 @@
glass_icon_state = "glass_white"
glass_name = "glass of soy milk"
glass_desc = "White and nutritious soy goodness!"
- hydration = 2 * REAGENTS_METABOLISM
+ hydration = 3
/datum/reagent/consumable/soymilk/on_mob_life(mob/living/carbon/M)
if(M.getBruteLoss() && prob(20))
@@ -260,7 +260,7 @@
glass_icon_state = "glass_white"
glass_name = "glass of coconut milk"
glass_desc = "White and nutritious goodness!"
- hydration = 4 * REAGENTS_METABOLISM
+ hydration = 3
/datum/reagent/consumable/coconutmilk/on_mob_life(mob/living/carbon/M)
if(M.getBruteLoss() && prob(20))
@@ -276,7 +276,7 @@
glass_icon_state = "glass_white"
glass_name = "glass of cream"
glass_desc = "Ewwww..."
- hydration = 2 * REAGENTS_METABOLISM
+ hydration = 3
/datum/reagent/consumable/cream/on_mob_life(mob/living/carbon/M)
if(M.getBruteLoss() && prob(20))
@@ -294,7 +294,7 @@
glass_icon_state = "glass_brown"
glass_name = "glass of coffee"
glass_desc = "Don't drop it, or you'll send scalding liquid and glass shards everywhere."
- hydration = 2 * REAGENTS_METABOLISM
+ hydration = 3
/datum/reagent/consumable/coffee/overdose_process(mob/living/M)
M.Jitter(5)
@@ -320,7 +320,7 @@
glass_icon_state = "teaglass"
glass_name = "glass of tea"
glass_desc = "Drinking it from here would not seem right."
- hydration = 2 * REAGENTS_METABOLISM
+ hydration = 4
/datum/reagent/consumable/tea/on_mob_life(mob/living/carbon/M)
M.dizziness = max(0,M.dizziness-2)
@@ -341,7 +341,7 @@
glass_icon_state = "lemonpitcher"
glass_name = "pitcher of lemonade"
glass_desc = "This drink leaves you feeling nostalgic for some reason."
- hydration = 4 * REAGENTS_METABOLISM
+ hydration = 4
/datum/reagent/consumable/tea/arnold_palmer
name = "Arnold Palmer"
@@ -353,7 +353,7 @@
glass_icon_state = "arnold_palmer"
glass_name = "Arnold Palmer"
glass_desc = "You feel like taking a few golf swings after a few swigs of this."
- hydration = 4 * REAGENTS_METABOLISM
+ hydration = 4
/datum/reagent/consumable/tea/arnold_palmer/on_mob_life(mob/living/carbon/M)
if(prob(5))
@@ -370,7 +370,7 @@
glass_icon_state = "icedcoffeeglass"
glass_name = "iced coffee"
glass_desc = "A drink to perk you up and refresh you!"
- hydration = 2 * REAGENTS_METABOLISM
+ hydration = 3
/datum/reagent/consumable/icecoffee/on_mob_life(mob/living/carbon/M)
M.dizziness = max(0,M.dizziness-5)
@@ -390,7 +390,7 @@
glass_icon_state = "icedteaglass"
glass_name = "iced tea"
glass_desc = "All natural, antioxidant-rich flavour sensation."
- hydration = 2 * REAGENTS_METABOLISM
+ hydration = 3
/datum/reagent/consumable/icetea/on_mob_life(mob/living/carbon/M)
M.dizziness = max(0,M.dizziness-2)
@@ -410,7 +410,7 @@
glass_icon_state = "glass_brown"
glass_name = "glass of Space Cola"
glass_desc = "A glass of refreshing Space Cola."
- hydration = 2 * REAGENTS_METABOLISM
+ hydration = 3
/datum/reagent/consumable/space_cola/on_mob_life(mob/living/carbon/M)
M.drowsyness = max(0,M.drowsyness-5)
@@ -426,7 +426,7 @@
glass_icon_state = "nuka_colaglass"
glass_name = "glass of Nuka Cola"
glass_desc = "Don't cry, Don't raise your eye, It's only nuclear wasteland."
- hydration = 2 * REAGENTS_METABOLISM
+ hydration = 3
/datum/reagent/consumable/nuka_cola/on_mob_metabolize(mob/living/L)
..()
@@ -471,7 +471,7 @@
glass_icon_state = "dr_gibb_glass"
glass_name = "glass of Dr. Gibb"
glass_desc = "Dr. Gibb. Not as dangerous as the glass_name might imply."
- hydration = 2 * REAGENTS_METABOLISM
+ hydration = 3
/datum/reagent/consumable/dr_gibb/on_mob_life(mob/living/carbon/M)
M.drowsyness = max(0,M.drowsyness-6)
@@ -486,7 +486,7 @@
glass_icon_state = "space-up_glass"
glass_name = "glass of Space-Up"
glass_desc = "Space-up. It helps you keep your cool."
- hydration = 5 * REAGENTS_METABOLISM
+ hydration = 3
/datum/reagent/consumable/space_up/on_mob_life(mob/living/carbon/M)
M.adjust_bodytemperature(-8 * TEMPERATURE_DAMAGE_COEFFICIENT, BODYTEMP_NORMAL)
@@ -500,7 +500,7 @@
glass_icon_state = "glass_yellow"
glass_name = "glass of lemon-lime"
glass_desc = "You're pretty certain a real fruit has never actually touched this."
- hydration = 2 * REAGENTS_METABOLISM
+ hydration = 3
/datum/reagent/consumable/lemon_lime/on_mob_life(mob/living/carbon/M)
M.adjust_bodytemperature(-8 * TEMPERATURE_DAMAGE_COEFFICIENT, BODYTEMP_NORMAL)
@@ -514,7 +514,7 @@
glass_icon_state = "glass_red"
glass_name = "glass of Pwr Game"
glass_desc = "Goes well with a Vlad's salad."
- hydration = 2 * REAGENTS_METABOLISM
+ hydration = 3
/datum/reagent/consumable/pwr_game/on_mob_life(mob/living/carbon/M)
M.adjust_bodytemperature(-8 * TEMPERATURE_DAMAGE_COEFFICIENT, BODYTEMP_NORMAL)
@@ -528,7 +528,7 @@
glass_icon_state = "glass_red"
glass_name = "glass of Shambler's juice"
glass_desc = "Mmm mm, shambly."
- hydration = 2 * REAGENTS_METABOLISM
+ hydration = 3
/datum/reagent/consumable/shamblers/on_mob_life(mob/living/carbon/M)
M.adjust_bodytemperature(-8 * TEMPERATURE_DAMAGE_COEFFICIENT, BODYTEMP_NORMAL)
@@ -543,7 +543,7 @@
glass_icon_state = "grey_bull_glass"
glass_name = "glass of Grey Bull"
glass_desc = "Surprisingly it isnt grey."
- hydration = 2 * REAGENTS_METABOLISM
+ hydration = 3
/datum/reagent/consumable/grey_bull/on_mob_metabolize(mob/living/L)
..()
@@ -569,7 +569,7 @@
glass_icon_state = "glass_clear"
glass_name = "glass of soda water"
glass_desc = "Soda water. Why not make a scotch and soda?"
- hydration = 4 * REAGENTS_METABOLISM
+ hydration = 4
/datum/reagent/consumable/sodawater/on_mob_life(mob/living/carbon/M)
M.dizziness = max(0,M.dizziness-5)
@@ -585,7 +585,7 @@
glass_icon_state = "glass_clear"
glass_name = "glass of tonic water"
glass_desc = "Quinine tastes funny, but at least it'll keep that Space Malaria away."
- hydration = 4 * REAGENTS_METABOLISM
+ hydration = 4
/datum/reagent/consumable/tonic/on_mob_life(mob/living/carbon/M)
M.dizziness = max(0,M.dizziness-5)
@@ -604,7 +604,7 @@
glass_icon_state = "iceglass"
glass_name = "glass of ice"
glass_desc = "Generally, you're supposed to put something else in there too..."
- hydration = 5 * REAGENTS_METABOLISM //ice is water dummy, just as good.
+ hydration = 5
/datum/reagent/consumable/ice/on_mob_life(mob/living/carbon/M)
M.adjust_bodytemperature(-5 * TEMPERATURE_DAMAGE_COEFFICIENT, BODYTEMP_NORMAL)
@@ -619,7 +619,7 @@
glass_icon_state = "soy_latte"
glass_name = "soy latte"
glass_desc = "A nice and refreshing beverage while you're reading."
- hydration = 2 * REAGENTS_METABOLISM
+ hydration = 3
/datum/reagent/consumable/soy_latte/on_mob_life(mob/living/carbon/M)
M.dizziness = max(0,M.dizziness-5)
@@ -641,7 +641,7 @@
glass_icon_state = "cafe_latte"
glass_name = "cafe latte"
glass_desc = "A nice, strong and refreshing beverage while you're reading."
- hydration = 2 * REAGENTS_METABOLISM
+ hydration = 3
/datum/reagent/consumable/cafe_latte/on_mob_life(mob/living/carbon/M)
M.dizziness = max(0,M.dizziness-5)
@@ -663,7 +663,7 @@
glass_icon_state = "doctorsdelightglass"
glass_name = "Doctor's Delight"
glass_desc = "The space doctor's favorite. Guaranteed to restore bodily injury; side effects include cravings and hunger."
- hydration = 2 * REAGENTS_METABOLISM
+ hydration = 3
/datum/reagent/consumable/doctor_delight/on_mob_life(mob/living/carbon/M)
M.adjustBruteLoss(-0.5, 0)
@@ -730,7 +730,7 @@
glass_icon_state = "pumpkin_latte"
glass_name = "pumpkin latte"
glass_desc = "A mix of coffee and pumpkin juice."
- hydration = 2 * REAGENTS_METABOLISM
+ hydration = 3
/datum/reagent/consumable/gibbfloats
name = "Gibb Floats"
@@ -742,14 +742,14 @@
glass_icon_state = "gibbfloats"
glass_name = "Gibbfloat"
glass_desc = "Dr. Gibb with ice cream on top."
- hydration = 3 * REAGENTS_METABOLISM
+ hydration = 3
/datum/reagent/consumable/pumpkinjuice
name = "Pumpkin Juice"
description = "Juiced from real pumpkin."
color = "#FFA500"
taste_description = "pumpkin"
- hydration = 2 * REAGENTS_METABOLISM
+ hydration = 3
/datum/reagent/consumable/blumpkinjuice
name = "Blumpkin Juice"
@@ -766,7 +766,7 @@
glass_icon_state = "triplecitrus" //needs own sprite mine are trash
glass_name = "glass of triple citrus"
glass_desc = "A mixture of citrus juices. Tangy, yet smooth."
- hydration = 2 * REAGENTS_METABOLISM
+ hydration = 3
/datum/reagent/consumable/grape_soda
name = "Grape soda"
@@ -775,7 +775,7 @@
taste_description = "grape soda"
glass_name = "glass of grape juice"
glass_desc = "It's grape (soda)!"
- hydration = 2 * REAGENTS_METABOLISM
+ hydration = 3
/datum/reagent/consumable/grape_soda/on_mob_life(mob/living/carbon/M)
M.adjust_bodytemperature(-5 * TEMPERATURE_DAMAGE_COEFFICIENT, BODYTEMP_NORMAL)
@@ -788,7 +788,7 @@
color = "#7D4E29"
quality = DRINK_NICE
taste_description = "chocolate milk"
- hydration = 2 * REAGENTS_METABOLISM
+ hydration = 3
/datum/reagent/consumable/menthol
name = "Menthol"
@@ -810,7 +810,7 @@
taste_description = "sweet pomegranates"
glass_name = "glass of grenadine"
glass_desc = "Delicious flavored syrup."
- hydration = 1 * REAGENTS_METABOLISM
+ hydration = 4
/datum/reagent/consumable/parsnipjuice
name = "Parsnip Juice"
@@ -818,7 +818,7 @@
color = "#FFA500"
taste_description = "parsnip"
glass_name = "glass of parsnip juice"
- hydration = 1 * REAGENTS_METABOLISM
+ hydration = 4
/datum/reagent/consumable/pineapplejuice
name = "Pineapple Juice"
@@ -827,7 +827,7 @@
taste_description = "pineapple"
glass_name = "glass of pineapple juice"
glass_desc = "Tart, tropical, and hotly debated."
- hydration = 2 * REAGENTS_METABOLISM
+ hydration = 4
/datum/reagent/consumable/peachjuice //Intended to be extremely rare due to being the limiting ingredients in the blazaam drink
name = "Peach Juice"
@@ -835,7 +835,7 @@
color = "#E78108"
taste_description = "peaches"
glass_name = "glass of peach juice"
- hydration = 2 * REAGENTS_METABOLISM
+ hydration = 4
/datum/reagent/consumable/cream_soda
name = "Cream Soda"
@@ -846,7 +846,7 @@
glass_icon_state = "cream_soda"
glass_name = "Cream Soda"
glass_desc = "A classic space-American vanilla flavored soft drink."
- hydration = 2 * REAGENTS_METABOLISM
+ hydration = 4
/datum/reagent/consumable/cream_soda/on_mob_life(mob/living/carbon/M)
M.adjust_bodytemperature(-5 * TEMPERATURE_DAMAGE_COEFFICIENT, BODYTEMP_NORMAL)
@@ -888,7 +888,7 @@
taste_description = "sweet strawberry and milk cream"
glass_name = "tall glass of strawberry milk"
glass_desc = "Delicious flavored strawberry syrup mixed with milk."
- hydration = 3 * REAGENTS_METABOLISM
+ hydration = 4
/datum/reagent/consumable/pinkmilk/on_mob_life(mob/living/carbon/M)
if(prob(15))
@@ -905,7 +905,7 @@
taste_description = "sweet tea with a hint of strawberry"
glass_name = "mug of strawberry tea"
glass_desc = "Delicious traditional tea flavored with strawberries."
- hydration = 2 * REAGENTS_METABOLISM
+ hydration = 4
/datum/reagent/consumable/tea/pinktea/on_mob_life(mob/living/carbon/M)
if(prob(10))
@@ -921,7 +921,7 @@
glass_icon_state = "monkey_energy_glass"
glass_name = "glass of Monkey Energy"
glass_desc = "You can unleash the ape, but without the pop of the can?"
- hydration = 1 * REAGENTS_METABOLISM
+ hydration = 4
/datum/reagent/consumable/monkey_energy/on_mob_life(mob/living/carbon/M)
M.Jitter(20)
@@ -939,7 +939,7 @@
glass_icon_state = "glass_yellow"
glass_name = "glass of bungo juice"
glass_desc = "Exotic! You feel like you are on vacation already."
- hydration = 1 * REAGENTS_METABOLISM
+ hydration = 5
/datum/reagent/consumable/aloejuice
name = "Aloe Juice"
@@ -949,7 +949,7 @@
glass_icon_state = "glass_yellow"
glass_name = "glass of aloe juice"
glass_desc = "A healthy and refreshing juice."
- hydration = 2 * REAGENTS_METABOLISM
+ hydration = 5
/datum/reagent/consumable/aloejuice/on_mob_life(mob/living/M)
if(prob(30))
@@ -984,7 +984,7 @@
glass_icon_state = "wockyslush"
glass_name = "Wocky Slush"
glass_desc = "That thang bleedin' to the-... ya know I mean?"
- hydration = 3 * REAGENTS_METABOLISM
+ hydration = 3
/datum/reagent/consumable/wockyslush/on_mob_life(mob/living/carbon/M)
M.emote(pick("twitch","giggle","stare"))
diff --git a/code/modules/reagents/chemistry/reagents/food_reagents.dm b/code/modules/reagents/chemistry/reagents/food_reagents.dm
index bb200cdc..b5384f8a 100644
--- a/code/modules/reagents/chemistry/reagents/food_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/food_reagents.dm
@@ -18,6 +18,7 @@
/datum/reagent/consumable/on_mob_life(mob/living/carbon/M)
current_cycle++
M.nutrition += nutriment_factor
+ M.thirst += hydration
holder.remove_reagent(type, metabolization_rate)
/datum/reagent/consumable/reaction_mob(mob/living/M, method=TOUCH, reac_volume)
diff --git a/code/modules/reagents/chemistry/reagents/other_reagents.dm b/code/modules/reagents/chemistry/reagents/other_reagents.dm
index 83f8b666..b6094aae 100644
--- a/code/modules/reagents/chemistry/reagents/other_reagents.dm
+++ b/code/modules/reagents/chemistry/reagents/other_reagents.dm
@@ -258,7 +258,7 @@
glass_name = "glass of water"
glass_desc = "The father of all refreshments."
shot_glass_icon_state = "shotglassclear"
- hydration = 10 * REAGENTS_METABOLISM
+ hydration = 5
/*
* Water reaction to turf
diff --git a/code/modules/uplink/uplink_items.dm b/code/modules/uplink/uplink_items.dm
index f7a618fe..4319215c 100644
--- a/code/modules/uplink/uplink_items.dm
+++ b/code/modules/uplink/uplink_items.dm
@@ -1773,7 +1773,7 @@ datum/uplink_item/stealthy_weapons/taeclowndo_shoes
cost = 2
restricted_roles = list("Curator")
limited_stock = 1 //please don't spam deadchat
-
+/* Disabled because this is waaaay too chaotic for hyper
/datum/uplink_item/role_restricted/his_grace
name = "His Grace"
desc = "An incredibly dangerous weapon recovered from a station overcome by the grey tide. Once activated, He will thirst for blood and must be used to kill to sate that thirst. \
@@ -1784,24 +1784,24 @@ datum/uplink_item/stealthy_weapons/taeclowndo_shoes
cost = 20
restricted_roles = list("Chaplain")
surplus = 5 //Very low chance to get it in a surplus crate even without being the chaplain
-
-///datum/uplink_item/role_restricted/clockwork_slab
-/datum/uplink_item/dangerous/clockwork_slab
+*/
+/datum/uplink_item/role_restricted/clockwork_slab
name = "Clockwork Slab"
desc = "A reverse engineered clockwork slab. Is this really a good idea?"
item = /obj/item/clockwork/slab/traitor
cost = 20
refundable = TRUE
- //restricted_roles = list("Chaplain","Curator")
+ restricted_roles = list("Chaplain","Curator")
+ cant_discount = TRUE
-///datum/uplink_item/role_restricted/arcane_tome
-/datum/uplink_item/dangerous/arcane_tome
+/datum/uplink_item/role_restricted/arcane_tome
name = "Arcane Tome"
desc = "A 'replica' of a Nar'sian tome. This is probably a bad idea..."
item = /obj/item/tome/traitor
cost = 20
refundable = TRUE
- //restricted_roles = list("Chaplain","Curator")
+ restricted_roles = list("Chaplain","Curator")
+ cant_discount = TRUE
/datum/uplink_item/role_restricted/explosive_hot_potato
name = "Exploding Hot Potato"
diff --git a/code/modules/vending/magivend.dm b/code/modules/vending/magivend.dm
index 30c6ae61..a8ec8340 100644
--- a/code/modules/vending/magivend.dm
+++ b/code/modules/vending/magivend.dm
@@ -16,3 +16,22 @@
contraband = list(/obj/item/reagent_containers/glass/bottle/wizarditis = 1) //No one can get to the machine to hack it anyways; for the lulz - Microwave
armor = list("melee" = 100, "bullet" = 100, "laser" = 100, "energy" = 100, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 50, "magic" = 100)
resistance_flags = FIRE_PROOF
+
+/obj/machinery/vending/magivend_novirus
+ name = "\improper MagiVend"
+ desc = "A magic vending machine."
+ icon_state = "MagiVend"
+ product_slogans = "Sling spells the proper way with MagiVend!;Be your own Houdini! Use MagiVend!"
+ vend_reply = "Have an enchanted evening!"
+ product_ads = "EI NATH;Destroy the station!;Admin conspiracies since forever!;Space-time bending hardware!;Now-magic proofing venders!"
+ products = list(/obj/item/clothing/head/wizard = 1,
+ /obj/item/clothing/suit/wizrobe = 1,
+ /obj/item/clothing/head/wizard/red = 1,
+ /obj/item/clothing/suit/wizrobe/red = 1,
+ /obj/item/clothing/head/wizard/yellow = 1,
+ /obj/item/clothing/suit/wizrobe/yellow = 1,
+ /obj/item/clothing/shoes/sandal/magic = 1,
+ /obj/item/staff = 2)
+ contraband = list(/obj/item/coin/antagtoken = 1)
+ armor = list("melee" = 100, "bullet" = 100, "laser" = 100, "energy" = 100, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 50, "magic" = 100)
+ resistance_flags = FIRE_PROOF
\ No newline at end of file
diff --git a/hyperstation/code/controllers/subsystem/economy.dm b/hyperstation/code/controllers/subsystem/economy.dm
index b69e29c8..e30e05c7 100644
--- a/hyperstation/code/controllers/subsystem/economy.dm
+++ b/hyperstation/code/controllers/subsystem/economy.dm
@@ -3,7 +3,8 @@ SUBSYSTEM_DEF(economy)
wait = 5 MINUTES
init_order = INIT_ORDER_ECONOMY
runlevels = RUNLEVEL_GAME
+ flags = SS_NO_FIRE //Let's not forget this. This subsystem does not use fire and was needlessly using CPU.
var/roundstart_paychecks = 5
var/budget_pool = 35000
var/list/generated_accounts = list()
- var/list/bank_accounts = list() //List of normal accounts (not department accounts)
\ No newline at end of file
+ var/list/bank_accounts = list() //List of normal accounts (not department accounts)
diff --git a/hyperstation/code/game/objects/items/cosmetics.dm b/hyperstation/code/game/objects/items/cosmetics.dm
index 711707f1..e3026747 100644
--- a/hyperstation/code/game/objects/items/cosmetics.dm
+++ b/hyperstation/code/game/objects/items/cosmetics.dm
@@ -53,9 +53,11 @@
/obj/item/nailpolish/attack(mob/M, mob/user)
if(!ismob(M))
return
-
if(ishuman(M))
var/mob/living/carbon/human/H = M
+ if(H.nail_style) //to stop stacking bugs
+ to_chat(user, "Remove the old nail polish first!")
+
if(H == user)
user.visible_message("[user] does [user.p_their()] nails with \the [src].", \
"You take a moment to apply \the [src]. Perfect!")
diff --git a/hyperstation/code/obj/fleshlight.dm b/hyperstation/code/obj/fleshlight.dm
index efdf51c0..7a12d3bf 100644
--- a/hyperstation/code/obj/fleshlight.dm
+++ b/hyperstation/code/obj/fleshlight.dm
@@ -1,5 +1,6 @@
//Hyperstation 13 fleshlight
-//dont forget to credit us!
+//Humbley request this doesnt get ported to other code bases, we strive to make things unique on our server and we dont have alot of coders
+//but if you absolutely must. please give us some credit~ <3
/obj/item/fleshlight
name = "fleshlight"
@@ -93,6 +94,7 @@
var/paired = 0
var/obj/item/portalunderwear
var/useable = FALSE
+ var/option = ""
/obj/item/portallight/examine(mob/user)
. = ..()
@@ -109,11 +111,20 @@
if(!useable)
to_chat(user, "It seems the device has failed or your partner is not wearing their device.")
+ if(C == user)//if your using it on yourself, more options! otherwise, just fuck.
+ option = input(usr, "Choose action", "Portal Fleshlight", "Fuck") in list("Fuck", "Lick", "Touch")
+ else
+ option = "Fuck"
+
var/obj/item/organ/genital/vagina/V = portalunderwear.loc
if(!V)
return
var/mob/living/carbon/human/M = V.owner
- if(P&&P.is_exposed())
+
+ if(option == "Fuck"&&!P.is_exposed()) //we are trying to fuck with no penis!
+ to_chat(user, "You don't see anywhere to use this on.")
+ return
+ else //other options dont need checks
inuse = 1
if(!(C == user)) //if we are targeting someone else.
C.visible_message("[user] is trying to use [src] on [C]'s penis.", "[user] is trying to use [src] on your penis.")
@@ -123,35 +134,44 @@
return
//checked if not used on yourself, if not, carry on.
- playsound(src, 'sound/lewd/slaps.ogg', 30, 1, -1) //slapping sound
+ if(option == "Fuck")
+ playsound(src, 'sound/lewd/slaps.ogg', 30, 1, -1) //slapping sound for fuck.
+
inuse = 0
- if(!(C == user)) //lewd flavour text
+ if(!(C == user))
C.visible_message("[user] pumps [src] on [C]'s penis.", "[user] pumps [src] up and down on your penis.")
else
- user.visible_message("[user] pumps [src] on their penis.", "You pump the fleshlight on your penis.")
+ if(option == "Fuck")
+ user.visible_message("[user] pumps [src] on their penis.", "You pump the fleshlight on your penis.")
+ if(option == "Lick")
+ user.visible_message("[user] licks into [src].", "You lick into [src].")
+ if(option == "Touch")
+ user.visible_message("[user] touches softly against [src].", "You touch softly on [src].")
+
- if(prob(30)) //30% chance to make them moan.
- C.emote("moan")
if(prob(30)) //30% chance to make your partner moan.
M.emote("moan")
- to_chat(M, "You feel a [P.shape] shaped penis pumping through the portal into your vagina.")//message your partner and kinky!
- M.adjustArousalLoss(20)
- M.do_jitter_animation() //make your partner shake too!
-
- C.do_jitter_animation()
-
- C.adjustArousalLoss(20) //make the target more aroused.
+ if(option == "Fuck")// normal fuck
+ to_chat(M, "You feel a [P.shape] shaped penis pumping through the portal into your vagina.")//message your partner and kinky!
+ if(prob(30)) //30% chance to make them moan.
+ C.emote("moan")
+ if(prob(30)) //30% chance to make your partner moan.
+ M.emote("moan")
+ C.adjustArousalLoss(20)
+ M.adjustArousalLoss(20)
+ M.do_jitter_animation() //make your partner shake too!
+ if(option == "Lick")
+ to_chat(M, "You feel a tongue lick you through the portal against your vagina.")
+ M.adjustArousalLoss(10)
+ if(option == "Touch")
+ to_chat(M, "You feel someone touching your vagina through the portal.")
+ M.adjustArousalLoss(5)
if (C.getArousalLoss() >= 100 && ishuman(C) && C.has_dna())
var/mob/living/carbon/human/O = C
O.mob_climax_partner(P, M, TRUE, FALSE, FALSE, TRUE) //climax with their partner remotely!
return
-
- else
- to_chat(user, "You don't see anywhere to use this on.")
-
- inuse = 0
..()
/obj/item/portallight/proc/updatesleeve()
@@ -162,11 +182,12 @@
var/mob/living/carbon/human/H = V.owner
if(H) //if the portal panties are on someone.
-
+ sleeve = mutable_appearance('hyperstation/icons/obj/fleshlight.dmi', "portal_sleeve_normal")
if(H.dna.species.name == "Lizardperson") // lizard nerd
sleeve = mutable_appearance('hyperstation/icons/obj/fleshlight.dmi', "portal_sleeve_lizard")
- else
- sleeve = mutable_appearance('hyperstation/icons/obj/fleshlight.dmi', "portal_sleeve_normal")
+
+ if(H.dna.species.name == "Slimeperson") // slime nerd
+ sleeve = mutable_appearance('hyperstation/icons/obj/fleshlight.dmi', "portal_sleeve_slime")
sleeve.color = "#" + H.dna.features["mcolor"]
add_overlay(sleeve)
diff --git a/hyperstation/icons/obj/fleshlight.dmi b/hyperstation/icons/obj/fleshlight.dmi
index 0115dfc0..434d9aca 100644
Binary files a/hyperstation/icons/obj/fleshlight.dmi and b/hyperstation/icons/obj/fleshlight.dmi differ
diff --git a/icons/effects/parallax.dmi b/icons/effects/parallax.dmi
index 22f091ff..fb996d5e 100644
Binary files a/icons/effects/parallax.dmi and b/icons/effects/parallax.dmi differ
diff --git a/modular_citadel/code/modules/reagents/reagents/cit_reagents.dm b/modular_citadel/code/modules/reagents/reagents/cit_reagents.dm
index 7f8b9d47..5bce8969 100644
--- a/modular_citadel/code/modules/reagents/reagents/cit_reagents.dm
+++ b/modular_citadel/code/modules/reagents/reagents/cit_reagents.dm
@@ -12,7 +12,6 @@
glass_icon_state = "semen"
glass_name = "chalice of semen"
glass_desc = "In the Sumerian mythology, Enki - the God of water, was believed to have created the Tigris and Euphrates rivers by masturbating and ejaculating into their empty riverbeds."
- hydration = 2 * REAGENTS_METABOLISM //thats one way to stay hydrated...
/datum/reagent/consumable/semen/reaction_turf(turf/T, reac_volume)
if(!istype(T))
@@ -56,7 +55,6 @@
color = "#AAAAAA77"
can_synth = FALSE
nutriment_factor = 0.5 * REAGENTS_METABOLISM
- hydration = 1 * REAGENTS_METABOLISM //thats one way to stay hydrated...
/obj/effect/decal/cleanable/femcum
name = "female ejaculate"