diff --git a/_maps/map_files/BoxStation/BoxStation.dmm b/_maps/map_files/BoxStation/BoxStation.dmm index b6463f7147..fe03105469 100644 --- a/_maps/map_files/BoxStation/BoxStation.dmm +++ b/_maps/map_files/BoxStation/BoxStation.dmm @@ -3984,7 +3984,12 @@ /turf/open/floor/plasteel, /area/security/brig) "aiA" = ( -/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/airlock/external{ + req_access_txt = "13" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 4 + }, /turf/open/floor/plating, /area/maintenance/fore/secondary) "aiB" = ( @@ -6153,11 +6158,8 @@ /turf/open/floor/plating, /area/maintenance/fore/secondary) "anE" = ( -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 4 - }, -/obj/machinery/door/airlock/external{ - req_access_txt = "13" +/obj/structure/cable{ + icon_state = "4-8" }, /turf/open/floor/plating, /area/maintenance/fore/secondary) @@ -6165,8 +6167,13 @@ /turf/open/floor/plating, /area/maintenance/fore/secondary) "anG" = ( -/obj/structure/sign/warning/vacuum/external{ - pixel_y = 32 +/obj/machinery/power/apc{ + areastring = "/area/crew_quarters/fitness"; + name = "Pool Room APC"; + pixel_y = -23 + }, +/obj/structure/cable{ + icon_state = "0-8" }, /turf/open/floor/plating, /area/maintenance/fore/secondary) @@ -6327,7 +6334,7 @@ dir = 10 }, /turf/closed/wall, -/area/maintenance/fore/secondary) +/area/crew_quarters/fitness/pool) "aof" = ( /turf/closed/wall/r_wall, /area/maintenance/solars/starboard/fore) @@ -7161,14 +7168,10 @@ /turf/open/floor/plating, /area/maintenance/fore/secondary) "aqs" = ( -/obj/machinery/door/airlock{ - id_tag = "Room Two"; - name = "Room Seven - Luxury Suite" - }, -/obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/open/floor/plasteel/dark, -/area/crew_quarters/dorms) +/obj/machinery/door/firedoor, +/turf/open/floor/plasteel, +/area/crew_quarters/fitness) "aqu" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -48098,6 +48101,10 @@ }, /turf/open/floor/plasteel, /area/engine/engine_smes) +"cnT" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/crew_quarters/fitness/pool) "cnU" = ( /obj/structure/cable{ icon_state = "4-8" @@ -50849,6 +50856,9 @@ /obj/structure/chair/wood/normal, /turf/open/floor/wood, /area/maintenance/bar) +"cxu" = ( +/turf/open/floor/plasteel, +/area/crew_quarters/fitness/pool) "cxA" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -53025,6 +53035,22 @@ }, /turf/open/floor/plasteel, /area/engine/engineering) +"cTn" = ( +/turf/open/floor/plasteel/yellowsiding/corner{ + dir = 8 + }, +/area/crew_quarters/fitness/pool) +"cTs" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/crew_quarters/fitness/pool) +"cTB" = ( +/obj/structure/table/glass, +/obj/item/clothing/under/shorts/blue{ + desc = "So comfy and easy to wear!" + }, +/turf/open/floor/plasteel, +/area/crew_quarters/fitness/pool) "cTD" = ( /obj/structure/cable{ icon_state = "1-2" @@ -53330,6 +53356,10 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel/dark, /area/crew_quarters/toilet) +"dDf" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/crew_quarters/fitness/pool) "dHb" = ( /obj/structure/chair/comfy/black{ dir = 4 @@ -53393,6 +53423,16 @@ }, /turf/open/floor/carpet, /area/crew_quarters/heads/captain) +"dYi" = ( +/obj/structure/closet/athletic_mixed, +/obj/item/toy/poolnoodle/yellow, +/obj/item/toy/poolnoodle/red, +/obj/item/toy/poolnoodle/blue, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/crew_quarters/fitness/pool) "eaI" = ( /obj/structure/table/reinforced, /obj/item/radio/intercom{ @@ -53402,6 +53442,9 @@ /obj/item/stock_parts/cell/high, /turf/open/floor/plasteel/white, /area/science/circuit) +"ebQ" = ( +/turf/open/floor/plasteel, +/area/crew_quarters/fitness/pool) "edH" = ( /obj/structure/cable{ icon_state = "1-2" @@ -53443,6 +53486,9 @@ /obj/effect/turf_decal/tile/red, /turf/open/floor/plasteel, /area/hallway/primary/fore) +"elD" = ( +/turf/open/pool, +/area/crew_quarters/fitness/pool) "epV" = ( /obj/structure/bed, /obj/machinery/button/door{ @@ -53479,10 +53525,12 @@ "evR" = ( /turf/open/floor/plating, /area/maintenance/bar) +"ewJ" = ( +/turf/open/floor/plasteel/yellowsiding, +/area/crew_quarters/fitness/pool) "ewZ" = ( -/obj/structure/chair/sofa/right, -/turf/open/floor/carpet, -/area/crew_quarters/dorms) +/turf/open/pool, +/area/crew_quarters/fitness/pool) "eyM" = ( /obj/machinery/mineral/ore_redemption{ input_dir = 2; @@ -53491,6 +53539,15 @@ /obj/machinery/door/firedoor, /turf/open/floor/plasteel, /area/quartermaster/miningdock) +"eBq" = ( +/obj/machinery/light, +/turf/open/floor/plasteel/yellowsiding{ + dir = 1 + }, +/area/crew_quarters/fitness/pool) +"eHh" = ( +/turf/open/floor/plasteel/yellowsiding, +/area/crew_quarters/fitness/pool) "eHI" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 8 @@ -53611,12 +53668,20 @@ }, /turf/open/floor/plasteel, /area/quartermaster/miningdock) +"eWj" = ( +/turf/open/floor/plasteel/yellowsiding{ + dir = 8 + }, +/area/crew_quarters/fitness/pool) "eXm" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 8 }, /turf/open/floor/plasteel, /area/engine/gravity_generator) +"eXY" = ( +/turf/open/pool, +/area/crew_quarters/fitness/pool) "fbm" = ( /obj/structure/chair/comfy/brown{ dir = 4 @@ -53633,6 +53698,10 @@ /obj/effect/turf_decal/stripes/line, /turf/open/floor/plasteel, /area/engine/gravity_generator) +"fbR" = ( +/obj/machinery/pool/drain, +/turf/open/pool, +/area/crew_quarters/fitness/pool) "fcG" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 5 @@ -53655,6 +53724,12 @@ /obj/item/storage/fancy/donut_box, /turf/open/floor/plasteel/white, /area/science/circuit) +"fmH" = ( +/obj/structure/cable{ + icon_state = "4-8" + }, +/turf/open/floor/plating, +/area/maintenance/fore/secondary) "fnC" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 4 @@ -53738,6 +53813,9 @@ }, /turf/open/floor/carpet, /area/crew_quarters/cryopod) +"fwe" = ( +/turf/open/floor/plasteel, +/area/crew_quarters/fitness/pool) "fxa" = ( /obj/structure/chair/wood/normal, /turf/open/floor/wood{ @@ -53836,13 +53914,10 @@ }, /area/crew_quarters/theatre) "fOc" = ( -/obj/structure/bed, -/obj/item/bedsheet/random, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ - dir = 8 +/turf/open/floor/plasteel/yellowsiding{ + dir = 1 }, -/turf/open/floor/carpet, -/area/crew_quarters/dorms) +/area/crew_quarters/fitness/pool) "fPs" = ( /obj/structure/table/reinforced, /obj/machinery/door/firedoor, @@ -53856,13 +53931,6 @@ /turf/open/floor/plasteel/cafeteria, /area/crew_quarters/kitchen) "fQF" = ( -/obj/structure/sign/warning/fire{ - desc = "A sign that states the labeled room's number."; - dir = 5; - icon_state = "roomnum"; - name = "Room Number 7"; - pixel_y = 24 - }, /obj/structure/chair/sofa/right, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -54016,6 +54084,13 @@ }, /turf/open/floor/wood, /area/crew_quarters/bar) +"gno" = ( +/obj/structure/closet/athletic_mixed, +/obj/item/toy/poolnoodle/yellow, +/obj/item/toy/poolnoodle/red, +/obj/item/toy/poolnoodle/blue, +/turf/open/floor/plasteel, +/area/crew_quarters/fitness/pool) "gtL" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 10 @@ -54055,6 +54130,9 @@ "gJg" = ( /turf/closed/wall/mineral/titanium, /area/space/nearstation) +"gJT" = ( +/turf/open/floor/plasteel, +/area/crew_quarters/fitness/pool) "gKk" = ( /obj/machinery/vr_sleeper{ dir = 4 @@ -54095,9 +54173,15 @@ /turf/open/floor/plating, /area/crew_quarters/fitness) "gQn" = ( -/obj/machinery/light/small, -/turf/open/floor/mineral/titanium/blue, -/area/crew_quarters/dorms) +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/airalarm{ + dir = 4; + pixel_x = -23 + }, +/turf/open/floor/plasteel/yellowsiding{ + dir = 4 + }, +/area/crew_quarters/fitness/pool) "gSH" = ( /obj/structure/grille, /turf/closed/wall/r_wall, @@ -54147,14 +54231,14 @@ /turf/open/floor/plasteel, /area/quartermaster/office) "haX" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 10 - }, /obj/effect/spawner/structure/window/reinforced, /obj/machinery/door/poddoor/shutters/preopen{ id = "holoprivacy"; name = "Holodeck Shutters" }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 4 + }, /turf/open/floor/plating, /area/crew_quarters/fitness) "hcd" = ( @@ -54242,6 +54326,10 @@ /obj/effect/landmark/carpspawn, /turf/open/space/basic, /area/space) +"hsi" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/crew_quarters/fitness/pool) "htr" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -54261,6 +54349,10 @@ }, /turf/open/floor/plasteel/grimy, /area/security/detectives_office) +"hxK" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/crew_quarters/fitness/pool) "hzw" = ( /obj/effect/turf_decal/tile/red{ dir = 1 @@ -54338,6 +54430,9 @@ }, /turf/open/floor/wood, /area/crew_quarters/theatre) +"hSk" = ( +/turf/open/floor/plasteel, +/area/crew_quarters/fitness/pool) "hSU" = ( /obj/structure/chair/sofa/left, /obj/structure/window{ @@ -54376,6 +54471,16 @@ }, /turf/open/floor/plasteel/dark, /area/hydroponics) +"icK" = ( +/obj/structure/chair/comfy/black{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/crew_quarters/fitness/pool) +"idP" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/closed/wall, +/area/crew_quarters/fitness) "idX" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 4 @@ -54386,32 +54491,20 @@ /turf/open/floor/plasteel, /area/hallway/primary/central) "iep" = ( -/obj/structure/mirror{ - pixel_y = 32 - }, -/obj/structure/sink{ - dir = 1; - pixel_y = 25 - }, -/obj/structure/toilet{ +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel/yellowsiding{ dir = 4 }, -/turf/open/floor/mineral/titanium/blue, -/area/crew_quarters/dorms) +/area/crew_quarters/fitness/pool) "ier" = ( -/obj/machinery/button/door{ - id = "Room Two"; - name = "Door Bolt Control"; - normaldoorcontrol = 1; - pixel_x = 7; - pixel_y = -24; - specialfunctions = 4 +/turf/open/floor/plasteel/yellowsiding{ + dir = 1 }, -/obj/structure/chair/comfy/brown{ - dir = 8 - }, -/turf/open/floor/carpet, -/area/crew_quarters/dorms) +/area/crew_quarters/fitness/pool) +"ifI" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/crew_quarters/fitness/pool) "igT" = ( /obj/structure/table/wood/poker, /obj/item/toy/cards/deck{ @@ -54450,6 +54543,10 @@ /obj/structure/falsewall, /turf/open/floor/plating, /area/maintenance/bar) +"inX" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/crew_quarters/fitness/pool) "ioB" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 4 @@ -54583,6 +54680,9 @@ }, /turf/open/floor/carpet, /area/crew_quarters/theatre) +"iLt" = ( +/turf/open/pool, +/area/crew_quarters/fitness/pool) "iMG" = ( /obj/item/twohanded/required/kirbyplants{ icon_state = "plant-14" @@ -54761,6 +54861,9 @@ }, /turf/open/floor/plasteel, /area/engine/gravity_generator) +"jiN" = ( +/turf/open/pool, +/area/crew_quarters/fitness/pool) "jiR" = ( /obj/effect/turf_decal/tile/blue, /obj/effect/turf_decal/tile/blue{ @@ -54878,6 +54981,9 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/closed/wall, /area/security/execution/transfer) +"jvc" = ( +/turf/open/pool, +/area/crew_quarters/fitness/pool) "jvN" = ( /obj/effect/turf_decal/tile/blue{ dir = 4 @@ -54891,6 +54997,9 @@ }, /turf/open/floor/wood, /area/crew_quarters/heads/captain) +"jwJ" = ( +/turf/open/floor/plasteel, +/area/crew_quarters/fitness/pool) "jzi" = ( /obj/structure/grille, /obj/structure/lattice, @@ -54974,6 +55083,13 @@ }, /turf/open/floor/wood, /area/maintenance/port/aft) +"jKX" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/crew_quarters/fitness/pool) +"jLH" = ( +/turf/open/pool, +/area/crew_quarters/fitness/pool) "jLM" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -55031,6 +55147,11 @@ }, /turf/open/floor/plasteel, /area/science/circuit) +"jTh" = ( +/turf/open/floor/plasteel/yellowsiding{ + dir = 8 + }, +/area/crew_quarters/fitness/pool) "jVl" = ( /obj/structure/cable{ icon_state = "4-8" @@ -55060,11 +55181,11 @@ /turf/open/floor/circuit, /area/ai_monitored/nuke_storage) "jYI" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 6 +/obj/machinery/atmospherics/components/unary/vent_scrubber/on, +/turf/open/floor/plasteel/yellowsiding{ + dir = 1 }, -/turf/open/floor/carpet, -/area/crew_quarters/dorms) +/area/crew_quarters/fitness/pool) "kay" = ( /obj/structure/table, /obj/item/reagent_containers/food/snacks/bluecherrycupcake{ @@ -55084,6 +55205,10 @@ }, /turf/open/floor/plasteel, /area/crew_quarters/dorms) +"kcw" = ( +/obj/machinery/pool/controller, +/turf/open/floor/plasteel/yellowsiding, +/area/crew_quarters/fitness/pool) "kdm" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -55126,18 +55251,25 @@ /turf/open/floor/plating, /area/maintenance/starboard/fore) "khB" = ( -/obj/machinery/door/airlock/external{ - req_access_txt = "13" - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 8 +/obj/machinery/door/airlock/maintenance{ + name = "Dormitories Maintenance"; + req_access_txt = "12" }, /turf/open/floor/plating, /area/maintenance/fore/secondary) +"kjx" = ( +/obj/structure/chair/comfy/black{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/crew_quarters/fitness/pool) "klu" = ( /obj/structure/lattice, /turf/open/space/basic, /area/space) +"knl" = ( +/turf/open/pool, +/area/crew_quarters/fitness/pool) "knx" = ( /obj/machinery/door/airlock/public/glass{ name = "Central Access" @@ -55158,6 +55290,10 @@ /obj/machinery/door/firedoor, /turf/open/floor/plasteel/dark, /area/hallway/primary/central) +"knN" = ( +/obj/structure/table/glass, +/turf/open/floor/plasteel, +/area/crew_quarters/fitness/pool) "kob" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/disposalpipe/segment, @@ -55243,6 +55379,10 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/closed/wall/r_wall, /area/science/mixing) +"kBi" = ( +/obj/structure/table/glass, +/turf/open/floor/plasteel, +/area/crew_quarters/fitness/pool) "kCk" = ( /obj/structure/mirror{ pixel_y = 32 @@ -55261,6 +55401,12 @@ /obj/structure/lattice, /turf/closed/wall/r_wall, /area/ai_monitored/nuke_storage) +"kDV" = ( +/turf/open/pool, +/area/crew_quarters/fitness/pool) +"kER" = ( +/turf/open/pool, +/area/crew_quarters/fitness/pool) "kHJ" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 6 @@ -55309,6 +55455,14 @@ }, /turf/open/space, /area/solar/port/aft) +"kLE" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on, +/obj/structure/table/glass, +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/crew_quarters/fitness/pool) "kLR" = ( /obj/machinery/door/poddoor/shutters/preopen{ desc = "Privacy shutters for the Private Study. Stops people spying in on your game."; @@ -55556,6 +55710,11 @@ /obj/item/folder/blue, /turf/open/floor/plasteel/dark, /area/hallway/primary/central) +"lWW" = ( +/turf/open/floor/plasteel/yellowsiding{ + dir = 1 + }, +/area/crew_quarters/fitness/pool) "lYU" = ( /obj/effect/turf_decal/tile/red{ dir = 8 @@ -55587,6 +55746,9 @@ /obj/item/reagent_containers/food/snacks/cherrycupcake, /turf/open/floor/wood, /area/crew_quarters/bar) +"maQ" = ( +/turf/open/floor/plasteel, +/area/crew_quarters/fitness/pool) "mbD" = ( /obj/structure/closet{ name = "Suit Closet" @@ -55612,16 +55774,32 @@ /obj/item/clothing/under/lawyer/red, /turf/open/floor/plasteel, /area/crew_quarters/fitness) +"mes" = ( +/turf/open/floor/plasteel/yellowsiding/corner{ + dir = 1 + }, +/area/crew_quarters/fitness/pool) +"meB" = ( +/turf/open/pool, +/area/crew_quarters/fitness/pool) "mfb" = ( /obj/structure/toilet{ dir = 8 }, /turf/open/floor/mineral/titanium/blue, /area/crew_quarters/dorms) +"mhk" = ( +/turf/open/floor/plasteel/yellowsiding{ + dir = 8 + }, +/area/crew_quarters/fitness/pool) "mjr" = ( /obj/structure/reagent_dispensers/keg/milk, /turf/open/floor/wood, /area/crew_quarters/bar) +"mkX" = ( +/turf/open/floor/plasteel, +/area/crew_quarters/fitness/pool) "mlr" = ( /obj/structure/cable{ icon_state = "1-2" @@ -55637,6 +55815,13 @@ }, /turf/open/floor/wood, /area/crew_quarters/bar) +"moy" = ( +/turf/closed/wall, +/area/crew_quarters/fitness/pool) +"mpC" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/crew_quarters/fitness/pool) "mpI" = ( /obj/structure/table/wood, /turf/open/floor/wood{ @@ -55654,6 +55839,9 @@ /obj/item/reagent_containers/glass/beaker, /turf/open/floor/plating, /area/maintenance/bar) +"mrD" = ( +/turf/open/floor/plasteel/yellowsiding, +/area/crew_quarters/fitness/pool) "mrR" = ( /obj/effect/spawner/lootdrop/keg, /turf/open/floor/wood, @@ -55688,6 +55876,12 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel/freezer, /area/crew_quarters/toilet) +"mFq" = ( +/turf/open/pool, +/area/crew_quarters/fitness/pool) +"mGC" = ( +/turf/open/floor/plasteel/yellowsiding, +/area/crew_quarters/fitness/pool) "mHC" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 8 @@ -55704,6 +55898,9 @@ /obj/item/clothing/gloves/boxing, /turf/open/floor/plasteel, /area/crew_quarters/locker) +"mJb" = ( +/turf/open/floor/plasteel, +/area/crew_quarters/fitness/pool) "mNi" = ( /obj/machinery/light_switch{ pixel_x = -20 @@ -55716,6 +55913,10 @@ /obj/structure/table/wood, /turf/open/floor/wood, /area/maintenance/bar) +"mQL" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/crew_quarters/fitness/pool) "mQR" = ( /obj/machinery/camera{ c_tag = "Gravity Generator Room"; @@ -55741,6 +55942,9 @@ }, /turf/open/floor/plasteel, /area/crew_quarters/fitness) +"mWc" = ( +/turf/open/floor/plasteel, +/area/crew_quarters/fitness/pool) "mXB" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel, @@ -55823,6 +56027,10 @@ /obj/structure/closet/athletic_mixed, /turf/open/floor/plasteel, /area/crew_quarters/fitness) +"nqi" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/crew_quarters/fitness/pool) "nrR" = ( /obj/machinery/door/airlock{ name = "Unisex Restrooms" @@ -55862,6 +56070,9 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plating, /area/maintenance/starboard/fore) +"nvQ" = ( +/turf/closed/wall, +/area/crew_quarters/fitness/pool) "nxv" = ( /obj/machinery/power/apc{ areastring = "/area/construction"; @@ -56012,6 +56223,9 @@ }, /turf/open/floor/plasteel/dark, /area/hallway/primary/central) +"ogC" = ( +/turf/open/pool, +/area/crew_quarters/fitness/pool) "ohX" = ( /obj/structure/table/wood, /obj/machinery/airalarm{ @@ -56020,6 +56234,9 @@ }, /turf/open/floor/wood, /area/security/vacantoffice) +"ois" = ( +/turf/open/floor/plasteel/yellowsiding, +/area/crew_quarters/fitness/pool) "olr" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel/white, @@ -56042,6 +56259,9 @@ }, /turf/open/floor/plasteel, /area/crew_quarters/dorms) +"opo" = ( +/turf/open/floor/plasteel, +/area/crew_quarters/fitness/pool) "orw" = ( /obj/structure/table, /obj/structure/cable{ @@ -56188,6 +56408,10 @@ }, /turf/open/floor/plasteel, /area/crew_quarters/fitness) +"paJ" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/crew_quarters/fitness/pool) "phu" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 4; @@ -56223,6 +56447,17 @@ }, /turf/open/floor/plating, /area/crew_quarters/abandoned_gambling_den) +"pjC" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/crew_quarters/fitness/pool) +"pjY" = ( +/obj/structure/table/glass, +/obj/item/clothing/under/shorts/blue{ + desc = "So comfy and easy to wear!" + }, +/turf/open/floor/plasteel, +/area/crew_quarters/fitness/pool) "poa" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 4 @@ -56238,6 +56473,16 @@ }, /turf/open/floor/plasteel, /area/science/mixing) +"poJ" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on, +/obj/item/radio/intercom{ + pixel_y = 25 + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/crew_quarters/fitness/pool) "ppY" = ( /obj/effect/turf_decal/tile/blue, /obj/effect/turf_decal/tile/blue{ @@ -56265,13 +56510,15 @@ /turf/open/space/basic, /area/space/nearstation) "prU" = ( -/obj/item/radio/intercom{ - dir = 4; - name = "Station Intercom (General)"; - pixel_x = 27 +/turf/open/pool, +/area/crew_quarters/fitness/pool) +"psr" = ( +/obj/structure/pool/ladder{ + dir = 2; + pixel_y = 16 }, -/turf/open/floor/carpet, -/area/crew_quarters/dorms) +/turf/open/pool, +/area/crew_quarters/fitness/pool) "ptV" = ( /obj/structure/cable{ icon_state = "4-8" @@ -56317,6 +56564,9 @@ }, /turf/open/space, /area/solar/starboard/aft) +"pGe" = ( +/turf/open/floor/plasteel, +/area/crew_quarters/fitness/pool) "pHl" = ( /obj/structure/table, /obj/item/storage/box/beakers{ @@ -56349,6 +56599,20 @@ }, /turf/open/floor/plasteel, /area/hydroponics) +"pIN" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/cable{ + icon_state = "2-4" + }, +/turf/open/floor/plating, +/area/maintenance/fore/secondary) +"pJT" = ( +/turf/open/pool, +/area/crew_quarters/fitness/pool) "pLn" = ( /obj/machinery/conveyor/inverted{ dir = 5; @@ -56477,12 +56741,12 @@ }, /turf/open/floor/plasteel/dark, /area/bridge/meeting_room) +"pXP" = ( +/turf/open/pool, +/area/crew_quarters/fitness/pool) "pZv" = ( -/obj/machinery/shower{ - dir = 8 - }, -/turf/open/floor/mineral/titanium/blue, -/area/crew_quarters/dorms) +/turf/open/pool, +/area/crew_quarters/fitness/pool) "qbx" = ( /obj/structure/table/wood/fancy, /obj/item/reagent_containers/food/drinks/soda_cans/starkist{ @@ -56491,6 +56755,11 @@ }, /turf/open/floor/plasteel, /area/crew_quarters/fitness) +"qen" = ( +/turf/open/floor/plasteel/yellowsiding{ + dir = 8 + }, +/area/crew_quarters/fitness/pool) "qeQ" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -56549,12 +56818,8 @@ /turf/open/floor/plasteel, /area/engine/gravity_generator) "qoP" = ( -/obj/machinery/airalarm{ - pixel_y = 23 - }, -/obj/structure/chair/sofa/left, -/turf/open/floor/carpet, -/area/crew_quarters/dorms) +/turf/open/pool, +/area/crew_quarters/fitness/pool) "qpA" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -56564,12 +56829,21 @@ }, /turf/open/floor/plasteel/grimy, /area/security/detectives_office) +"qpD" = ( +/turf/open/floor/plasteel, +/area/crew_quarters/fitness/pool) +"qty" = ( +/turf/open/pool, +/area/crew_quarters/fitness/pool) "qux" = ( /obj/structure/chair/sofa/left{ dir = 1 }, /turf/open/floor/plasteel, /area/crew_quarters/fitness) +"quP" = ( +/turf/open/pool, +/area/crew_quarters/fitness/pool) "quT" = ( /obj/structure/lattice, /obj/structure/grille/broken, @@ -56625,6 +56899,13 @@ }, /turf/open/floor/carpet, /area/bridge/meeting_room) +"qDe" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/plasteel/yellowsiding/corner, +/area/crew_quarters/fitness/pool) "qEv" = ( /obj/structure/table/wood/fancy, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, @@ -56675,16 +56956,18 @@ }, /turf/open/floor/plating, /area/security/prison) +"qMZ" = ( +/turf/open/pool, +/area/crew_quarters/fitness/pool) "qNs" = ( -/obj/structure/table/wood, -/obj/item/flashlight/lamp/green{ - on = 0; - pixel_x = -7; - pixel_y = 12 +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/light{ + dir = 8 }, -/obj/machinery/atmospherics/components/unary/vent_pump/on, -/turf/open/floor/carpet, -/area/crew_quarters/dorms) +/turf/open/floor/plasteel/yellowsiding/corner{ + dir = 4 + }, +/area/crew_quarters/fitness/pool) "qOf" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 8 @@ -56718,6 +57001,9 @@ }, /turf/closed/wall/r_wall, /area/science/circuit) +"rdr" = ( +/turf/open/floor/plasteel, +/area/crew_quarters/fitness/pool) "reZ" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/closed/wall/r_wall, @@ -56736,6 +57022,9 @@ /obj/machinery/vending/cola/space_up, /turf/open/floor/plasteel/dark, /area/hallway/primary/central) +"rhB" = ( +/turf/open/pool, +/area/crew_quarters/fitness/pool) "riA" = ( /obj/effect/turf_decal/tile/red{ dir = 1 @@ -56756,11 +57045,29 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/starboard) +"rkt" = ( +/obj/structure/sign/warning/vacuum/external{ + pixel_y = 32 + }, +/turf/open/floor/plating, +/area/maintenance/fore/secondary) +"rlZ" = ( +/obj/machinery/pool/filter{ + pixel_y = 16 + }, +/turf/open/pool, +/area/crew_quarters/fitness/pool) "rmX" = ( /obj/structure/table, /obj/item/reagent_containers/food/drinks/beer, /turf/open/floor/plating, /area/maintenance/starboard/aft) +"rnn" = ( +/turf/closed/wall, +/area/crew_quarters/fitness/pool) +"rrz" = ( +/turf/open/pool, +/area/crew_quarters/fitness/pool) "rsv" = ( /obj/structure/lattice/catwalk, /obj/structure/cable{ @@ -56886,6 +57193,12 @@ }, /turf/open/floor/mineral/titanium/blue, /area/crew_quarters/toilet) +"rOV" = ( +/turf/open/pool, +/area/crew_quarters/fitness/pool) +"rSl" = ( +/turf/open/floor/plasteel, +/area/crew_quarters/fitness/pool) "rTQ" = ( /obj/machinery/vr_sleeper{ dir = 8 @@ -56901,12 +57214,33 @@ dir = 8 }, /area/crew_quarters/fitness) +"rUi" = ( +/turf/closed/wall, +/area/crew_quarters/fitness/pool) +"rUl" = ( +/turf/open/floor/plasteel/yellowsiding{ + dir = 1 + }, +/area/crew_quarters/fitness/pool) "rUQ" = ( /obj/effect/turf_decal/stripes/line{ dir = 6 }, /turf/open/floor/plating, /area/space/nearstation) +"rZe" = ( +/turf/open/floor/plasteel, +/area/crew_quarters/fitness/pool) +"saF" = ( +/obj/structure/closet/athletic_mixed, +/obj/item/toy/poolnoodle/yellow, +/obj/item/toy/poolnoodle/red, +/obj/item/toy/poolnoodle/blue, +/obj/machinery/light{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/crew_quarters/fitness/pool) "saK" = ( /obj/structure/closet/crate, /obj/item/target/alien, @@ -56919,6 +57253,12 @@ /obj/item/gun/energy/laser/practice, /turf/open/floor/plasteel/white, /area/science/circuit) +"sby" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel/yellowsiding{ + dir = 4 + }, +/area/crew_quarters/fitness/pool) "sdL" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 5 @@ -56935,6 +57275,9 @@ }, /turf/open/floor/wood, /area/crew_quarters/theatre) +"sfL" = ( +/turf/open/floor/plasteel, +/area/crew_quarters/fitness/pool) "sgV" = ( /obj/machinery/atmospherics/components/binary/pump/on{ dir = 4; @@ -57065,6 +57408,9 @@ }, /turf/open/floor/plasteel, /area/crew_quarters/fitness) +"svI" = ( +/turf/open/floor/plasteel, +/area/crew_quarters/fitness/pool) "sxs" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/table, @@ -57118,6 +57464,9 @@ dir = 1 }, /area/hallway/primary/starboard) +"sKF" = ( +/turf/open/pool, +/area/crew_quarters/fitness/pool) "sLr" = ( /obj/structure/table, /obj/effect/spawner/lootdrop/maintenance, @@ -57143,6 +57492,9 @@ }, /turf/open/floor/plasteel, /area/crew_quarters/fitness) +"sNP" = ( +/turf/open/pool, +/area/crew_quarters/fitness/pool) "sOs" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -57191,13 +57543,15 @@ }, /turf/closed/wall/r_wall, /area/engine/gravity_generator) +"sYU" = ( +/turf/open/floor/plasteel, +/area/crew_quarters/fitness/pool) "sZa" = ( /obj/effect/turf_decal/stripes/line{ dir = 5 }, /obj/machinery/camera{ - c_tag = "Bar Backroom"; - dir = 2 + c_tag = "Bar Backroom" }, /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 4 @@ -57215,6 +57569,9 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/closed/wall, /area/hallway/secondary/service) +"tdy" = ( +/turf/open/pool, +/area/crew_quarters/fitness/pool) "tdF" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable{ @@ -57237,6 +57594,10 @@ icon_state = "wood-broken5" }, /area/maintenance/bar) +"tmI" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/crew_quarters/fitness/pool) "tqg" = ( /obj/machinery/cryopod{ dir = 4 @@ -57302,6 +57663,12 @@ }, /turf/open/floor/plasteel, /area/hydroponics) +"tsV" = ( +/turf/open/pool, +/area/crew_quarters/fitness/pool) +"ttU" = ( +/turf/closed/wall, +/area/crew_quarters/fitness/pool) "tuj" = ( /obj/structure/light_construct{ dir = 1 @@ -57320,6 +57687,9 @@ /obj/effect/landmark/start/assistant, /turf/open/floor/wood, /area/crew_quarters/bar) +"tuT" = ( +/turf/open/pool, +/area/crew_quarters/fitness) "tAb" = ( /obj/structure/cable{ icon_state = "4-8" @@ -57454,12 +57824,10 @@ /turf/open/floor/plasteel/white, /area/science/mixing) "tOU" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 +/turf/open/floor/plasteel/yellowsiding{ + dir = 1 }, -/obj/machinery/light/small, -/turf/open/floor/carpet, -/area/crew_quarters/dorms) +/area/crew_quarters/fitness/pool) "tPT" = ( /obj/machinery/chem_dispenser/drinks/beer, /obj/structure/table/wood, @@ -57523,6 +57891,10 @@ }, /turf/closed/wall/r_wall, /area/maintenance/disposal/incinerator) +"tYJ" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/crew_quarters/fitness/pool) "uaw" = ( /obj/machinery/power/apc{ areastring = "/area/storage/art"; @@ -57535,6 +57907,12 @@ }, /turf/open/floor/wood, /area/maintenance/bar) +"ubU" = ( +/turf/open/pool, +/area/crew_quarters/fitness/pool) +"ucF" = ( +/turf/open/pool, +/area/crew_quarters/fitness/pool) "udi" = ( /obj/structure/cable{ icon_state = "4-8" @@ -57687,6 +58065,10 @@ }, /turf/open/floor/plating, /area/maintenance/port/aft) +"uvF" = ( +/obj/machinery/door/firedoor, +/turf/open/floor/plasteel, +/area/crew_quarters/fitness) "uvZ" = ( /obj/structure/mineral_door/wood, /turf/open/floor/wood, @@ -57722,6 +58104,12 @@ /obj/machinery/atmospherics/pipe/manifold/supply/hidden, /turf/open/floor/plasteel, /area/crew_quarters/dorms) +"uEr" = ( +/obj/structure/pool/Rboard, +/turf/open/floor/plasteel/yellowsiding{ + dir = 8 + }, +/area/crew_quarters/fitness/pool) "uNu" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -57816,6 +58204,9 @@ dir = 4 }, /area/crew_quarters/fitness) +"vcw" = ( +/turf/open/floor/plasteel/yellowsiding, +/area/crew_quarters/fitness/pool) "vdz" = ( /obj/machinery/shower{ dir = 8 @@ -57881,6 +58272,9 @@ /obj/structure/cable, /turf/open/floor/carpet, /area/crew_quarters/cryopod) +"vwj" = ( +/turf/open/pool, +/area/crew_quarters/fitness/pool) "vxh" = ( /obj/structure/table, /obj/effect/spawner/lootdrop/maintenance{ @@ -57934,6 +58328,10 @@ }, /turf/open/floor/plasteel, /area/hydroponics) +"vBS" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/crew_quarters/fitness/pool) "vCb" = ( /obj/machinery/rnd/production/techfab/department/service, /turf/open/floor/plasteel, @@ -57946,6 +58344,10 @@ /obj/effect/turf_decal/stripes/line, /turf/open/floor/plating, /area/space/nearstation) +"vEZ" = ( +/obj/structure/pool/Lboard, +/turf/open/pool, +/area/crew_quarters/fitness/pool) "vFt" = ( /obj/machinery/portable_atmospherics/pump, /turf/open/floor/plating, @@ -58036,6 +58438,9 @@ /obj/item/coin/gold, /turf/open/floor/plating, /area/maintenance/starboard/aft) +"vPp" = ( +/turf/open/pool, +/area/crew_quarters/fitness/pool) "vPE" = ( /obj/machinery/light{ dir = 4 @@ -58066,6 +58471,12 @@ }, /turf/open/floor/plasteel/grimy, /area/security/detectives_office) +"vTh" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel/yellowsiding{ + dir = 4 + }, +/area/crew_quarters/fitness/pool) "vUR" = ( /obj/effect/turf_decal/stripes/line, /turf/open/floor/plating, @@ -58126,6 +58537,9 @@ "wkN" = ( /turf/closed/wall, /area/science/circuit) +"wlH" = ( +/turf/open/pool, +/area/crew_quarters/fitness/pool) "woR" = ( /obj/machinery/cryopod{ dir = 1 @@ -58217,6 +58631,16 @@ }, /turf/open/floor/mineral/titanium/blue, /area/crew_quarters/toilet) +"wwQ" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/firealarm{ + dir = 4; + pixel_x = -24 + }, +/turf/open/floor/plasteel/yellowsiding{ + dir = 4 + }, +/area/crew_quarters/fitness/pool) "wyM" = ( /obj/machinery/door/airlock{ name = "Theatre Backstage"; @@ -58310,6 +58734,9 @@ /obj/effect/turf_decal/tile/neutral, /turf/open/floor/plasteel, /area/crew_quarters/dorms) +"wHg" = ( +/turf/open/pool, +/area/crew_quarters/fitness/pool) "wHz" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 5 @@ -58336,6 +58763,11 @@ /obj/effect/turf_decal/stripes/corner, /turf/open/floor/plasteel, /area/hydroponics) +"wQy" = ( +/turf/open/floor/plasteel/yellowsiding{ + dir = 1 + }, +/area/crew_quarters/fitness/pool) "wUY" = ( /obj/structure/table, /obj/item/stack/packageWrap, @@ -58430,6 +58862,9 @@ }, /turf/open/floor/plating, /area/hallway/secondary/service) +"xiQ" = ( +/turf/open/floor/plasteel, +/area/crew_quarters/fitness/pool) "xkk" = ( /obj/structure/piano, /obj/structure/window/reinforced, @@ -58448,6 +58883,10 @@ }, /turf/open/floor/plating, /area/maintenance/port/aft) +"xmO" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/crew_quarters/fitness/pool) "xpx" = ( /obj/effect/turf_decal/tile/blue, /obj/effect/turf_decal/tile/blue{ @@ -58475,6 +58914,9 @@ }, /turf/open/floor/plating, /area/security/brig) +"xrD" = ( +/turf/open/floor/plasteel/yellowsiding, +/area/crew_quarters/fitness/pool) "xzh" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -58522,6 +58964,9 @@ }, /turf/open/space/basic, /area/space/nearstation) +"xPF" = ( +/turf/open/pool, +/area/crew_quarters/fitness/pool) "xWM" = ( /obj/structure/grille/broken, /turf/open/floor/plating, @@ -58549,6 +58994,19 @@ /obj/machinery/suit_storage_unit/rd, /turf/open/floor/plasteel, /area/science/mixing) +"ydH" = ( +/obj/machinery/door/airlock/external{ + req_access_txt = "13" + }, +/obj/effect/mapping_helpers/airlock/cyclelink_helper{ + dir = 8 + }, +/turf/open/floor/plating, +/area/maintenance/fore/secondary) +"ygu" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/crew_quarters/fitness/pool) "yiN" = ( /obj/effect/turf_decal/tile/green{ dir = 1 @@ -93088,7 +93546,7 @@ aif aif aif aif -aif +pIN bkV fvk alK @@ -93340,12 +93798,12 @@ abp abp hlY ahn -aiA -aiA +ahn aiA ahn +ahn hYW -anF +fmH aod ahn apx @@ -93597,12 +94055,12 @@ unE abp nea ahn -aaa -aaf -aaf +ahn +rkt ahn ahn -anE +ahn +fmH aod aoK sgV @@ -93854,9 +94312,9 @@ aaa adR ahn ahn -aaa -aaa -aaa +ahn +ydH +ahn aaf ahn anG @@ -94111,13 +94569,13 @@ aaa gXs aaa aaa -aaa -aaa -aaa +jmC +jmC +jmC aaa ahn khB -ahn +rnn ahn ahn ahn @@ -94372,16 +94830,16 @@ aaa aaa aaa aaa -aag -aag -aag -arf -iep +rnn +poJ +qDe +wwQ +vTh gQn -arf -myt +vTh +vTh qNs -lMx +idP sjw clO asZ @@ -94629,16 +95087,16 @@ aaa aaa aaa aaa -aaa -aaa -aaa -arf -pZv -tQk -cVp -jdT -ier -arf +inX +mJb +mrD +rlZ +qty +qty +qty +qty +lWW +arj arm vYa aya @@ -94886,14 +95344,14 @@ aaa aaa aaa aaa -aaa -aaa -aaa -arf -arf -arf -arf -iES +inX +mJb +mrD +qty +qty +qty +tuT +qty jYI aqs hVw @@ -95143,16 +95601,16 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -arf -ewZ -jdT -tOU -arf +inX +mJb +mrD +qty +qty +qty +qty +qty +lWW +uvF fQF qbx qux @@ -95400,16 +95858,16 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -arf -qoP -prU -fOc -arf +inX +mJb +kcw +qty +qty +fbR +qty +qty +lWW +arj oSO sAI fJa @@ -95657,16 +96115,16 @@ aaa aaa aaa aaa -aaa -aaa -aae -aaa -aaa -arf -arf -arf -arf -arf +inX +mJb +mrD +qty +qty +qty +qty +qty +eBq +arj mTp qEv kRk @@ -95914,15 +96372,15 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -gXs +inX +mJb +mrD +qty +qty +qty +qty +qty +lWW kHJ rEV rEV @@ -96171,15 +96629,15 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -gXs -gXs +inX +icK +mrD +psr +qty +qty +qty +qty +lWW aqu aro aro @@ -96428,15 +96886,15 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -gXs -gXs -aaa +inX +kBi +mrD +qty +qty +vEZ +qty +qty +lWW aqu aro aro @@ -96685,15 +97143,15 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -gXs -gXs -aaa -aaa +inX +kjx +cTn +qen +qen +uEr +qen +qen +mes aqu aro aro @@ -96942,15 +97400,15 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -gXs -gXs -aaa -aaa -aaa +rnn +saF +mJb +mJb +mJb +mJb +mJb +mJb +mJb aqu aro aro @@ -97199,15 +97657,15 @@ aaa aaa aaa aaa -aaa -aaa -aaa -gXs -gXs -aaa -aaa -aaa -aaa +inX +inX +gno +mJb +mJb +mJb +mJb +mJb +kBi aqu aro aro @@ -97457,14 +97915,14 @@ aaa aaa aaa aaa -aaa -aaf -aaf -aaa -aaa -aaa -aaa -aaa +inX +inX +dYi +mJb +mJb +cTB +cTB +kLE haX rEV rEV @@ -97712,19 +98170,19 @@ aaS aaS aaS aaS -aaS -aaS -aaf -aaf -aaa -aaa -aaa -aaa -aaa -aaa aaa aaa aaa +inX +rnn +inX +inX +inX +inX +rnn +arj +arj +arj arj cRz avD @@ -97970,8 +98428,8 @@ aaf aaa aaf aaa -aaS -aaf +aaa +aaa aaa aaa aaa @@ -98227,7 +98685,7 @@ ads adS aeG aaa -aaS +aaa aaa aaa aaa diff --git a/code/__DEFINES/pool.dm b/code/__DEFINES/pool.dm new file mode 100644 index 0000000000..6d1c9f22df --- /dev/null +++ b/code/__DEFINES/pool.dm @@ -0,0 +1,10 @@ +//TODO: move these to their own file +#define POOL_FRIGID 1 +#define POOL_COOL 2 +#define POOL_NORMAL 3 +#define POOL_WARM 4 +#define POOL_SCALDING 5 + +#define POOL_REAGENT_TICK_INTERVAL 5 + +GLOBAL_LIST_INIT(blacklisted_pool_reagents, list("plasma")) \ No newline at end of file diff --git a/code/game/area/Space_Station_13_areas.dm b/code/game/area/Space_Station_13_areas.dm index fa66306302..b38709fee0 100644 --- a/code/game/area/Space_Station_13_areas.dm +++ b/code/game/area/Space_Station_13_areas.dm @@ -461,6 +461,10 @@ NOTE: there are two lists of areas in the end of this file: centcom and station name = "Recreation Area" icon_state = "fitness" +/area/crew_quarters/fitness/pool + name = "Pool Area" + icon_state = "pool" + /area/crew_quarters/cafeteria name = "Cafeteria" icon_state = "cafeteria" diff --git a/code/game/sound.dm b/code/game/sound.dm index e7562476a8..11e026109a 100644 --- a/code/game/sound.dm +++ b/code/game/sound.dm @@ -184,6 +184,8 @@ soundin = pick('sound/items/bikehorn.ogg', 'sound/items/AirHorn2.ogg', 'sound/misc/sadtrombone.ogg', 'sound/items/AirHorn.ogg', 'sound/effects/reee.ogg', 'sound/items/WEEOO1.ogg', 'sound/voice/beepsky/iamthelaw.ogg', 'sound/voice/beepsky/creep.ogg','sound/magic/Fireball.ogg' ,'sound/effects/pray.ogg', 'sound/voice/hiss1.ogg','sound/machines/buzz-sigh.ogg', 'sound/machines/ping.ogg', 'sound/weapons/flashbang.ogg', 'sound/weapons/bladeslice.ogg') if("goose") soundin = pick('sound/creatures/goose1.ogg', 'sound/creatures/goose2.ogg', 'sound/creatures/goose3.ogg', 'sound/creatures/goose4.ogg') + if("water_wade") + soundin = pick('sound/effects/water_wade1.ogg', 'sound/effects/water_wade2.ogg', 'sound/effects/water_wade3.ogg', 'sound/effects/water_wade4.ogg') //START OF CIT CHANGES - adds random vore sounds if ("struggle_sound") soundin = pick( 'sound/vore/pred/struggle_01.ogg','sound/vore/pred/struggle_02.ogg','sound/vore/pred/struggle_03.ogg', diff --git a/code/modules/mob/living/simple_animal/hostile/sharks.dm b/code/modules/mob/living/simple_animal/hostile/sharks.dm new file mode 100644 index 0000000000..2c13223b0e --- /dev/null +++ b/code/modules/mob/living/simple_animal/hostile/sharks.dm @@ -0,0 +1,91 @@ +//shameless copies of carps. + +/mob/living/simple_animal/hostile/shark + name = "Space Shark" + desc = "The best terror of the seas, next to the kraken." + icon_state = "shark" + icon_living = "shark" + icon = 'icons/mob/sharks.dmi' + icon_dead = "shark_dead" + icon_gib = "carp_gib" + environment_smash = 0 + speak_chance = 0 + turns_per_move = 3 + butcher_results = list(/obj/item/reagent_containers/food/snacks/meat = 3) + response_help = "pets" + response_disarm = "gently pushes aside" + response_harm = "hits" + speed = 0 + maxHealth = 75 + health = 75 + harm_intent_damage = 18 + melee_damage_lower = 18 + melee_damage_upper = 18 + attacktext = "maims" + attack_sound = 'sound/weapons/bite.ogg' + gold_core_spawnable = 1 + //Space shark aren't affected by cold. + atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) + minbodytemp = 0 + maxbodytemp = 1500 + + faction = list("shark") + +/mob/living/simple_animal/hostile/shark/Process_Spacemove(var/movement_dir = 0) + return 1 //No drifting in space for space sharks....either! + +/mob/living/simple_animal/hostile/shark/FindTarget() + . = ..() + if(.) + emote("me", 1, "growls at [.]!") + +/mob/living/simple_animal/hostile/shark/AttackingTarget() + . =..() + var/mob/living/carbon/L = . + if(istype(L)) + if(prob(25)) + L.Knockdown(20) + L.visible_message("\the [src] knocks down \the [L]!") + + +/mob/living/simple_animal/hostile/shark/laser + name = "Laser-Shark" + desc = "NOW we've jumped the shark." + icon_state = "lasershark" + icon_living = "lasershark" + icon_dead = "lasershark_dead" + icon_gib = "carp_gib" + ranged = 1 + retreat_distance = 3 + minimum_distance = 0 //Between shots they can and will close in to nash + projectiletype = /obj/item/projectile/beam/laser/heavylaser + projectilesound = 'sound/weapons/lasercannonfire.ogg' + maxHealth = 50 + health = 50 + +/mob/living/simple_animal/hostile/shark/kawaii + name = "Kawaii Shark" + desc = "Senpai~ Notice me.." + icon_state = "kawaiishark" + icon_living = "kawaiishark" + icon_dead = "kawaiishark_dead" + speak = list("Oh Senpai","Notice me senpai!","Oh my...","Kawaii~") + speak_emote = list("lovingly says","says") + speak_chance = 2 + turns_per_move = 3 + butcher_results = list(/mob/living/simple_animal/butterfly = 3) + maxHealth = 50 + health = 50 + maxbodytemp = INFINITY + + harm_intent_damage = 0 + melee_damage_lower = 0 + melee_damage_upper = 0 + attacktext = "violently hugs" + vision_range = 0 + +/mob/living/simple_animal/hostile/shark/kawaii/death() + visible_message("[src] says : Senpai, you noticed~!") + LoseAggro() + ..() + walk(src, 0) diff --git a/code/modules/pool/pool_controller.dm b/code/modules/pool/pool_controller.dm new file mode 100644 index 0000000000..5235803a0f --- /dev/null +++ b/code/modules/pool/pool_controller.dm @@ -0,0 +1,336 @@ +//Originally stolen from paradise. Credits to tigercat2000. +//Modified a lot by Kokojo and Tortellini Tony for hippiestation. +//Heavily refactored by tgstation +/obj/machinery/pool + icon = 'icons/obj/machines/pool.dmi' + anchored = TRUE + +/obj/machinery/pool/controller + name = "\improper Pool Controller" + desc = "An advanced substance generation and fluid tank management system that can refill the contents of a pool to a completely different substance in minutes." + icon_state = "poolc_3" + density = TRUE + use_power = TRUE + idle_power_usage = 75 + var/list/linkedturfs //List contains all of the linked pool turfs to this controller, assignment happens on initialize + var/list/mobs_in_pool = list()//List contains all the mobs currently in the pool. + var/temperature = POOL_NORMAL //1-5 Frigid Cool Normal Warm Scalding + var/srange = 6 //The range of the search for pool turfs, change this for bigger or smaller pools. + var/list/linkedmist = list() //Used to keep track of created mist + var/misted = FALSE //Used to check for mist. + var/cur_reagent = "water" + var/drainable = FALSE + var/drained = FALSE + var/bloody = 0 + var/obj/machinery/pool/drain/linked_drain = null + var/obj/machinery/pool/filter/linked_filter = null + var/interact_delay = 0 //cooldown on messing with settings + var/reagent_delay = 0 //cooldown on reagent ticking + var/shocked = FALSE//Shocks morons, like an airlock. + var/tempunlocked = FALSE + var/old_rcolor + +/obj/machinery/pool/controller/Initialize() + . = ..() + START_PROCESSING(SSprocessing, src) + create_reagents(100) + wires = new /datum/wires/poolcontroller(src) + scan_things() + +/obj/machinery/pool/controller/proc/scan_things() + for(var/turf/open/pool/W in range(srange,src)) + LAZYADD(linkedturfs, W) + W.controller = src + for(var/obj/machinery/pool/drain/pooldrain in range(srange,src)) + linked_drain = pooldrain + linked_drain.pool_controller = src + for(var/obj/machinery/pool/filter/F in range(srange, src)) + linked_filter = F + linked_filter.pool_controller = src + +/obj/machinery/pool/controller/Destroy() + STOP_PROCESSING(SSprocessing, src) + linked_drain = null + linked_filter = null + linkedturfs.Cut() + mobs_in_pool.Cut() + return ..() + +/obj/machinery/pool/controller/emag_act(user as mob) //Emag_act, this is called when it is hit with a cryptographic sequencer. + if(!(obj_flags & EMAGGED)) //If it is not already emagged, emag it. + to_chat(user, "You disable the [src]'s safety features.") + do_sparks(5, TRUE, src) + obj_flags |= EMAGGED + tempunlocked = TRUE + drainable = TRUE + log_game("[key_name(user)] emagged [src]") + message_admins("[key_name_admin(user)] emagged [src]") + else + to_chat(user, "The interface on [src] is already too damaged to short it again.") + return + +/obj/machinery/pool/controller/attackby(obj/item/W, mob/user) + if(shocked && !(stat & NOPOWER)) + shock(user,50) + if(stat & (BROKEN)) + return + + if(istype(W,/obj/item/reagent_containers)) + if(W.reagents.total_volume >= 100) //check if there's enough reagent + for(var/datum/reagent/R in W.reagents.reagent_list) + if(R.name in GLOB.blacklisted_pool_reagents) + to_chat(user, "\The [src] cannot accept [R.name].") + reagents.clear_reagents() + return + if(R.reagent_state == SOLID) + to_chat(user, "The pool cannot accept reagents in solid form!.") + reagents.clear_reagents() + return + reagents.clear_reagents() + W.reagents.copy_to(reagents, 100) + W.reagents.clear_reagents() + user.visible_message("\The [src] makes a slurping noise.", "All of the contents of \the [W] are quickly suctioned out by the machine!\The [src] beeps unpleasantly as it rejects the beaker. It must not have enough in it.") + return + else if(panel_open && is_wire_tool(W)) + wires.interact(user) + else + return ..() + +/obj/machinery/pool/controller/screwdriver_act(mob/living/user, obj/item/W) + . = ..() + if(.) + return TRUE + cut_overlays() + panel_open = !panel_open + to_chat(user, "You [panel_open ? "open" : "close"] the maintenance panel.") + W.play_tool_sound(src) + if(panel_open) + add_overlay("wires") + return TRUE + +//procs +/obj/machinery/pool/controller/proc/shock(mob/user, prb) + if(stat & (BROKEN|NOPOWER)) // unpowered, no shock + return FALSE + if(!prob(prb)) + return FALSE + var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread + s.set_up(5, 1, src) + s.start() + if(electrocute_mob(user, get_area(src), src, 0.7)) + return TRUE + else + return FALSE + +/obj/machinery/pool/controller/proc/poolreagent() + if(reagents.reagent_list.len > 0) + for(var/turf/open/pool/W in linkedturfs) + for(var/mob/living/carbon/human/swimee in W) + for(var/datum/reagent/R in reagents.reagent_list) + if(R.reagent_state == SOLID) + R.reagent_state = LIQUID + swimee.reagents.add_reagent(R.name, 0.5) //osmosis + reagents.reaction(swimee, VAPOR, 0.03) //3 percent + for(var/obj/objects in W) + if(W.reagents) + W.reagents.reaction(objects, VAPOR, 1) + reagent_delay = world.time + POOL_REAGENT_TICK_INTERVAL + changecolor() + + +/obj/machinery/pool/controller/process() + updateUsrDialog() + if(stat & (NOPOWER|BROKEN)) + return + if (!drained) + updatePool() + if(reagent_delay <= world.time) + poolreagent() + +/obj/machinery/pool/controller/proc/updatePool() + if(!drained) + for(var/mob/living/M in mobs_in_pool) + switch(temperature) //Apply different effects based on what the temperature is set to. + if(POOL_SCALDING) //Scalding + M.adjust_bodytemperature(50,0,500) + if(POOL_WARM) //Warm + M.adjust_bodytemperature(20,0,360) //Heats up mobs till the termometer shows up + if(POOL_NORMAL) //Normal temp does nothing, because it's just room temperature water. + if(POOL_COOL) + M.adjust_bodytemperature(-20,250) //Cools mobs till the termometer shows up + if(POOL_FRIGID) //Freezing + M.adjust_bodytemperature(-60) //cool mob at -35k per cycle, less would not affect the mob enough. + if(M.bodytemperature <= 50 && !M.stat) + M.apply_status_effect(/datum/status_effect/freon) + if(ishuman(M)) + var/mob/living/carbon/human/drownee = M + if(!drownee || drownee.stat == DEAD) + return + if(drownee.lying && !drownee.internal) + if(drownee.stat != CONSCIOUS) + drownee.adjustOxyLoss(9) + else + drownee.adjustOxyLoss(4) + if(prob(35)) + to_chat(drownee, "You're drowning!") + +/* not sure what to do about this part + for(var/obj/effect/decal/cleanable/decal in W) + CHECK_TICK + animate(decal, alpha = 10, time = 20) + QDEL_IN(decal, 25) + if(istype(decal,/obj/effect/decal/cleanable/blood) || istype(decal, /obj/effect/decal/cleanable/trail_holder)) + bloody = TRUE + */ + changecolor() + +/obj/machinery/pool/controller/proc/changecolor() + if(drained) + return + var/rcolor + if(reagents.reagent_list.len) + rcolor = mix_color_from_reagents(reagents.reagent_list) + if(rcolor == old_rcolor) + return // small performance upgrade hopefully? + old_rcolor = rcolor + for(var/X in linkedturfs) + var/turf/open/pool/color1 = X + if(bloody) + if(rcolor) + color1.watereffect.color = BlendRGB(rgb(150, 20, 20), rcolor, 0.5) + color1.watertop.color = color1.watereffect.color + else + color1.watereffect.color = rgb(150, 20, 20) + color1.watertop.color = color1.watereffect.color + else if(!bloody && rcolor) + color1.watereffect.color = rcolor + color1.watertop.color = color1.watereffect.color + else + color1.watereffect.color = null + color1.watertop.color = null + +/obj/machinery/pool/controller/proc/miston() //Spawn /obj/effect/mist (from the shower) on all linked pool tiles + for(var/X in linkedturfs) + var/turf/open/pool/W = X + if(W.filled) + var/M = new /obj/effect/mist(W) + if(misted) + return + linkedmist += M + misted = TRUE //var just to keep track of when the mist on proc has been called. + +/obj/machinery/pool/controller/proc/mistoff() //Delete all /obj/effect/mist from all linked pool tiles. + for(var/M in linkedmist) + qdel(M) + misted = FALSE //no mist left, turn off the tracking var + +/obj/machinery/pool/controller/proc/handle_temp() + interact_delay = world.time + 10 + mistoff() + icon_state = "poolc_[temperature]" + if(temperature == POOL_SCALDING) + miston() + update_icon() + +/obj/machinery/pool/controller/proc/CanUpTemp(mob/user) + if(temperature == POOL_WARM && (tempunlocked || issilicon(user) || IsAdminGhost(user)) || temperature < POOL_WARM) + return TRUE + return FALSE + +/obj/machinery/pool/controller/proc/CanDownTemp(mob/user) + if(temperature == POOL_COOL && (tempunlocked || issilicon(user) || IsAdminGhost(user)) || temperature > POOL_COOL) + return TRUE + return FALSE + +/obj/machinery/pool/controller/Topic(href, href_list) + if(..()) + return + if(interact_delay > world.time) + return + if(href_list["IncreaseTemp"]) + if(CanUpTemp(usr)) + temperature++ + handle_temp() + if(href_list["DecreaseTemp"]) + if(CanDownTemp(usr)) + temperature-- + handle_temp() + if(href_list["Activate Drain"]) + if((drainable || issilicon(usr) || IsAdminGhost(usr)) && !linked_drain.active) + mistoff() + interact_delay = world.time + 60 + linked_drain.active = TRUE + linked_drain.timer = 15 + if(!linked_drain.status) + new /obj/effect/whirlpool(linked_drain.loc) + temperature = POOL_NORMAL + else + new /obj/effect/waterspout(linked_drain.loc) + temperature = POOL_NORMAL + handle_temp() + bloody = FALSE + updateUsrDialog() + +/obj/machinery/pool/controller/proc/temp2text() + switch(temperature) + if(POOL_FRIGID) + return "Frigid" + if(POOL_COOL) + return "Cool" + if(POOL_NORMAL) + return "Normal" + if(POOL_WARM) + return "Warm" + if(POOL_SCALDING) + return "Scalding" + else + return "Outside of possible range." + +/obj/machinery/pool/controller/ui_interact(mob/user) + . = ..() + if(.) + return + if(shocked && !(stat & NOPOWER)) + shock(user,50) + if(panel_open && !isAI(user)) + return wires.interact(user) + if(stat & (NOPOWER|BROKEN)) + return + var/datum/browser/popup = new(user, "Pool Controller", name, 300, 450) + var/dat = "" + if(interact_delay > world.time) + dat += "[(interact_delay - world.time)] seconds left until [src] can operate again.
" + dat += text({" +

Temperature

+
+ Current temperature: [temp2text()]
+ [CanUpTemp(user) ? "Increase Temperature
" : "Increase Temperature
"] + [CanDownTemp(user) ? "Decrease Temperature
" : "Decrease Temperature
"] +
+

Drain

+
+ Drain status: [(issilicon(user) || IsAdminGhost(user) || drainable) ? "Enabled" : "Disabled"] +
Pool status: "}) + if(!drained) + dat += "Full
" + else + dat += "Drained
" + if((issilicon(user) || IsAdminGhost(user) || drainable) && !linked_drain.active) + dat += "[drained ? "Fill" : "Drain"] Pool
" + popup.set_content(dat) + popup.open() + +/obj/machinery/pool/controller/proc/reset(wire) + switch(wire) + if(WIRE_SHOCK) + if(!wires.is_cut(wire)) + shocked = FALSE diff --git a/code/modules/pool/pool_drain.dm b/code/modules/pool/pool_drain.dm new file mode 100644 index 0000000000..7739b7d0c1 --- /dev/null +++ b/code/modules/pool/pool_drain.dm @@ -0,0 +1,129 @@ +/obj/machinery/pool/drain + name = "drain" + icon_state = "drain" + desc = "A suction system to remove the contents of the pool, and sometimes small objects. Do not insert fingers." + anchored = TRUE + var/active = FALSE + var/status = FALSE //1 is drained, 0 is full. + var/srange = 6 + var/timer = 0 + var/cooldown + var/obj/machinery/pool/controller/pool_controller = null + +/obj/machinery/pool/drain/Initialize() + START_PROCESSING(SSprocessing, src) + . = ..() + +/obj/machinery/pool/drain/Destroy() + pool_controller.linked_drain = null + pool_controller = null + return ..() + +/obj/machinery/pool/drain/process() + if(!status) //don't pool/drain an empty pool. + for(var/obj/item/absorbo in orange(1,src)) + if(absorbo.w_class == WEIGHT_CLASS_TINY) + step_towards(absorbo, src) + var/dist = get_dist(src, absorbo) + if(dist == 0) + absorbo.forceMove(pool_controller.linked_filter) + if(active) + if(status) //if filling up, get back to normal position + if(timer > 0) + playsound(src, 'sound/effects/fillingwatter.ogg', 100, TRUE) + timer-- + for(var/obj/whirlo in orange(1,src)) + if(!whirlo.anchored ) + step_away(whirlo,src) + for(var/mob/living/carbon/human/whirlm in orange(2,src)) + step_away(whirlm,src) + else if(!timer) + for(var/turf/open/pool/undrained in range(5,src)) + undrained.filled = TRUE + undrained.update_icon() + for(var/obj/effect/waterspout/undrained3 in range(1,src)) + qdel(undrained3) + pool_controller.drained = FALSE + if(pool_controller.bloody < 1000) + pool_controller.bloody /= 2 + if(pool_controller.bloody > 1000) + pool_controller.bloody /= 4 + pool_controller.changecolor() + status = FALSE + active = FALSE + return + if(!status) //if draining, change everything. + if(timer > 0) + playsound(src, 'sound/effects/pooldrain.ogg', 100, TRUE) + playsound(src, "water_wade", 60, TRUE) + timer-- + for(var/obj/whirlo in orange(2,src)) + if(!whirlo.anchored ) + step_towards(whirlo,src) + for(var/mob/living/carbon/human/whirlm in orange(2,src)) + step_towards(whirlm,src) + if(prob(20)) + whirlm.Knockdown(40) + for(var/i in list(1,2,4,8,4,2,1)) //swirl! + whirlm.dir = i + sleep(1) + if(whirlm.forceMove(loc)) + if(whirlm.health <= -50) //If very damaged, gib. + whirlm.gib() + if(whirlm.stat != CONSCIOUS || whirlm.lying) // If + whirlm.adjustBruteLoss(5) + playsound(src, pick('sound/misc/crack.ogg','sound/misc/crunch.ogg'), 50, TRUE) + to_chat(whirlm, "You're caught in the drain!") + continue + else + playsound(src, pick('sound/misc/crack.ogg','sound/misc/crunch.ogg'), 50, TRUE) + whirlm.apply_damage(4, BRUTE, pick("l_leg", "r_leg")) //drain should only target the legs + to_chat(whirlm, "Your legs are caught in the drain!") + continue + + else if(!timer) + for(var/turf/open/pool/drained in range(5,src)) + drained.filled = FALSE + drained.update_icon() + for(var/obj/effect/whirlpool/drained3 in range(1,src)) + qdel(drained3) + for(var/obj/machinery/pool/controller/drained4 in range(5,src)) + drained4.drained = TRUE + drained4.mistoff() + status = TRUE + active = FALSE + +/obj/machinery/pool/filter + name = "Filter" + icon_state = "filter" + desc = "The part of the pool where all the IDs, ATV keys, and pens, and other dangerous things get trapped." + var/obj/machinery/pool/controller/pool_controller = null + +/obj/machinery/pool/filter/Destroy() + pool_controller.linked_filter = null + pool_controller = null + return ..() + +/obj/machinery/pool/filter/emag_act(user as mob) + if(!(obj_flags & EMAGGED)) + to_chat(user, "You disable the [src]'s shark filter! Run!") + obj_flags |= EMAGGED + do_sparks(5, TRUE, src) + icon_state = "filter_b" + addtimer(CALLBACK(src, /obj/machinery/pool/filter/proc/spawn_shark), 50) + log_game("[key_name(user)] emagged the pool filter and spawned a shark") + message_admins("[key_name_admin(user)] emagged the pool filter and spawned a shark") + +/obj/machinery/pool/filter/proc/spawn_shark() + if(prob(50)) + new /mob/living/simple_animal/hostile/shark(loc) + else + if(prob(50)) + new /mob/living/simple_animal/hostile/shark/kawaii(loc) + else + new /mob/living/simple_animal/hostile/shark/laser(loc) + +/obj/machinery/pool/filter/attack_hand(mob/user) + to_chat(user, "You search the filter.") + for(var/obj/O in contents) + O.forceMove(loc) diff --git a/code/modules/pool/pool_effects.dm b/code/modules/pool/pool_effects.dm new file mode 100644 index 0000000000..8d5192cd30 --- /dev/null +++ b/code/modules/pool/pool_effects.dm @@ -0,0 +1,29 @@ +/obj/effect/splash + name = "splash" + desc = "Wataaa!." + icon = 'icons/turf/pool.dmi' + icon_state = "splash" + layer = ABOVE_ALL_MOB_LAYER + +/obj/effect/whirlpool + name = "Whirlpool" + icon = 'icons/effects/96x96.dmi' + icon_state = "whirlpool" + layer = 5 + anchored = TRUE + mouse_opacity = 0 + pixel_x = -32 + pixel_y = -32 + alpha = 90 + +/obj/effect/waterspout + name = "Waterspout" + icon = 'icons/effects/96x96.dmi' + icon_state = "waterspout" + color = "#3399AA" + layer = 5 + anchored = TRUE + mouse_opacity = 0 + pixel_x = -32 + pixel_y = -32 + alpha = 120 diff --git a/code/modules/pool/pool_main.dm b/code/modules/pool/pool_main.dm new file mode 100644 index 0000000000..5db9176223 --- /dev/null +++ b/code/modules/pool/pool_main.dm @@ -0,0 +1,201 @@ +/turf/open/pool + icon = 'icons/turf/pool.dmi' + name = "poolwater" + desc = "You're safer here than in the deep." + icon_state = "pool_tile" + heat_capacity = INFINITY + var/filled = TRUE + var/next_splash = 1 + var/obj/effect/overlay/water/watereffect + var/obj/effect/overlay/water/top/watertop + var/obj/machinery/pool/controller/controller + + +/turf/open/pool/Initialize() + watereffect = new /obj/effect/overlay/water(src) + watertop = new /obj/effect/overlay/water/top(src) + . = ..() + +/turf/open/pool/Destroy() + QDEL_NULL(watereffect) + QDEL_NULL(watertop) + controller = null + return ..() + +/turf/open/pool/proc/update_icon_pool() + if(!filled) + name = "drained pool" + desc = "No diving!" + QDEL_NULL(watereffect) + QDEL_NULL(watertop) + else + name = "poolwater" + desc = "You're safer here than in the deep." + watereffect = new /obj/effect/overlay/water(src) + watertop = new /obj/effect/overlay/water/top(src) + +/obj/effect/overlay/water + name = "water" + icon = 'icons/turf/pool.dmi' + icon_state = "bottom" + density = 0 + mouse_opacity = 0 + layer = ABOVE_MOB_LAYER + anchored = TRUE + +/obj/effect/overlay/water/top + icon_state = "top" + layer = BELOW_MOB_LAYER + +/mob/living + var/swimming = FALSE + +//Put people out of the water +/turf/open/floor/MouseDrop_T(mob/living/M, mob/living/user) + if(user.stat || user.lying || !Adjacent(user) || !M.Adjacent(user)|| !iscarbon(M)) + if(issilicon(M)) + var/turf/T = get_turf(M) + if(istype(T, /turf/open/pool)) + M.visible_message("[M] begins to float.", \ + "You start your emergency floaters.") + if(do_mob(user, M, 20)) + M.forceMove(src) + to_chat(user, "You get out of the pool.") + return ..() + if(!M.swimming) //can't put yourself up if you are not swimming + return ..() + if(user == M) + M.visible_message("[user] is getting out the pool", \ + "You start getting out of the pool.") + if(do_mob(user, M, 20)) + M.swimming = FALSE + M.forceMove(src) + to_chat(user, "You get out of the pool.") + else + user.visible_message("[M] is being pulled to the poolborder by [user].", \ + "You start getting [M] out of the pool.") + if(do_mob(user, M, 20)) + M.swimming = FALSE + M.forceMove(src) + to_chat(user, "You get [M] out of the pool.") + return + +/turf/open/floor/CanPass(atom/movable/A, turf/T) + if(!has_gravity(src)) + return ..() + else if(istype(A, /mob/living) || istype(A, /obj/structure)) //This check ensures that only specific types of objects cannot pass into the water. Items will be able to get tossed out. + if(istype(A, /mob/living/simple_animal) || istype(A, /mob/living/carbon/monkey)) + return ..() + if (istype(A, /obj/structure) && istype(A.pulledby, /mob/living/carbon/human)) + return ..() + if(istype(get_turf(A), /turf/open/pool) && !istype(T, /turf/open/pool)) //!(locate(/obj/structure/pool/ladder) in get_turf(A).loc) + return FALSE + return ..() + +//put people in water, including you +/turf/open/pool/MouseDrop_T(mob/living/M, mob/living/user) + if(!has_gravity(src)) + return + if(user.stat || user.lying || !Adjacent(user) || !M.Adjacent(user)|| !iscarbon(M)) + return + if(!iscarbon(user)) // no silicons or drones in mechas. + return + if(M.swimming) //can't lower yourself again + return + else + if(user == M) + M.visible_message("[user] is descending in the pool", \ + "You start lowering yourself in the pool.") + if(do_mob(user, M, 20)) + M.swimming = TRUE + M.forceMove(src) + to_chat(user, "You lower yourself in the pool.") + else + user.visible_message("[M] is being put in the pool by [user].", \ + "You start lowering [M] in the pool.") + if(do_mob(user, M, 20)) + M.swimming = TRUE + M.forceMove(src) + to_chat(user, "You lower [M] in the pool.") + return + +//What happens if you don't drop in it like a good person would, you fool. +/turf/open/pool/Exited(atom/A, turf/NL) + ..() + if(!istype(NL, /turf/open/pool) && isliving(A)) + var/mob/living/M = A + M.swimming = FALSE + controller.mobs_in_pool.Remove(M) + +/turf/open/pool/Entered(atom/A, turf/OL) + ..() + if(isliving(A)) + var/mob/living/M = A + if(!M.mob_has_gravity()) + return + if(!M.swimming) + M.swimming = TRUE + controller.mobs_in_pool.Add(M) + if(locate(/obj/structure/pool/ladder) in M.loc) + return + if(iscarbon(M)) + var/mob/living/carbon/H = M + if(filled) + if (H.wear_mask && H.wear_mask.flags_cover & MASKCOVERSMOUTH) + H.visible_message("[H] falls in the water!", + "You fall in the water!") + playsound(src, 'sound/effects/splash.ogg', 60, TRUE, 1) + H.Knockdown(20) + return + else + H.Knockdown(60) + H.adjustOxyLoss(5) + H.emote("cough") + H.visible_message("[H] falls in and takes a drink!", + "You fall in and swallow some water!") + playsound(src, 'sound/effects/splash.ogg', 60, TRUE, 1) + else if(!istype(H.head, /obj/item/clothing/head/helmet)) + if(prob(75)) + H.visible_message("[H] falls in the drained pool!", + "You fall in the drained pool!") + H.adjustBruteLoss(7) + H.Knockdown(80) + playsound(src, 'sound/effects/woodhit.ogg', 60, TRUE, 1) + else + H.visible_message("[H] falls in the drained pool, and cracks his skull!", + "You fall in the drained pool, and crack your skull!") + H.apply_damage(15, BRUTE, "head") + H.Knockdown(200) // This should hurt. And it does. + playsound(src, 'sound/effects/woodhit.ogg', 60, TRUE, 1) + playsound(src, 'sound/misc/crack.ogg', 100, TRUE) + else + H.visible_message("[H] falls in the drained pool, but had an helmet!", + "You fall in the drained pool, but you had an helmet!") + H.Knockdown(40) + playsound(src, 'sound/effects/woodhit.ogg', 60, TRUE, 1) + else if(filled) + M.adjustStaminaLoss(1) + playsound(src, "water_wade", 20, TRUE) + return + +/turf/open/pool/attack_hand(mob/living/user) + if(user.stat == CONSCIOUS && !(user.lying || user.resting) && Adjacent(user) && user.swimming && filled && next_splash < world.time) //not drained, user alive and close, and user in water. + if(user.x == x && user.y == y) + return + else + playsound(src, 'sound/effects/watersplash.ogg', 8, TRUE, 1) + next_splash = world.time + 25 + var/obj/effect/splash/S = new /obj/effect/splash(user.loc) + animate(S, alpha = 0, time = 8) + S.Move(src) + QDEL_IN(S, 20) + for(var/mob/living/carbon/human/L in src) + if(!L.wear_mask && !user.stat) //Do not affect those underwater or dying. + L.emote("cough") + L.adjustStaminaLoss(4) //You need to give em a break! + +/turf/open/pool/attackby(obj/item/W, mob/living/user) + if(istype(W, /obj/item/mop) && filled) + W.reagents.add_reagent("water", 5) + to_chat(user, "You wet [W] in [src].") + playsound(loc, 'sound/effects/slosh.ogg', 25, TRUE) diff --git a/code/modules/pool/pool_noodles.dm b/code/modules/pool/pool_noodles.dm new file mode 100644 index 0000000000..d40aa8eca4 --- /dev/null +++ b/code/modules/pool/pool_noodles.dm @@ -0,0 +1,44 @@ +//Pool noodles + +/obj/item/toy/poolnoodle + icon = 'icons/obj/toy.dmi' + icon_state = "noodle" + name = "pool noodle" + desc = "A strange, bulky, bendable toy that can annoy people." + force = 0 + color = "#000000" + w_class = WEIGHT_CLASS_SMALL + throwforce = 1 + throw_speed = 10 //weeee + hitsound = 'sound/weapons/tap.ogg' + attack_verb = list("flogged", "poked", "jabbed", "slapped", "annoyed") + lefthand_file = 'icons/mob/inhands/items_lefthand.dmi' + righthand_file = 'icons/mob/inhands/items_righthand.dmi' + +/obj/item/toy/poolnoodle/attack(target as mob, mob/living/user as mob) + ..() + if(prob(80)) + user.emote("spin") + if(prob(5)) + user.emote("spin") + +/obj/item/toy/poolnoodle/red + item_state = "noodlered" + +/obj/item/toy/poolnoodle/blue + item_state = "noodleblue" + +/obj/item/toy/poolnoodle/yellow + item_state = "noodleyellow" + +/obj/item/toy/poolnoodle/red/Initialize() + . = ..() + color = "#ff4c4c" + +/obj/item/toy/poolnoodle/blue/Initialize() + . = ..() + color = "#3232ff" + +/obj/item/toy/poolnoodle/yellow/Initialize() + . = ..() + color = "#ffff66" diff --git a/code/modules/pool/pool_structures.dm b/code/modules/pool/pool_structures.dm new file mode 100644 index 0000000000..9e89f39397 --- /dev/null +++ b/code/modules/pool/pool_structures.dm @@ -0,0 +1,149 @@ +/obj/structure/pool + name = "pool" + icon = 'icons/obj/machines/pool.dmi' + anchored = TRUE + resistance_flags = UNACIDABLE|INDESTRUCTIBLE + +/obj/structure/pool/ladder + name = "Ladder" + icon_state = "ladder" + desc = "Are you getting in or are you getting out?." + layer = ABOVE_MOB_LAYER + dir = EAST + +/obj/structure/pool/ladder/attack_hand(mob/living/user as mob) + if(Adjacent(user) && user.y == y && user.swimming == 0) + user.swimming = TRUE + user.forceMove(get_step(user, get_dir(user, src))) //Either way, you're getting IN or OUT of the pool. + else if(user.loc == loc && user.swimming == TRUE) + user.swimming = FALSE + user.forceMove(get_step(user, turn(dir, 180))) + +/obj/structure/pool/Rboard + name = "JumpBoard" + density = FALSE + icon_state = "boardright" + desc = "The less-loved portion of the jumping board." + dir = EAST + +/obj/structure/pool/Rboard/CheckExit(atom/movable/O as mob|obj, target as turf) + if(istype(O) && O.pass_flags & PASSGLASS) + return TRUE + if(get_dir(O.loc, target) == dir) + return FALSE + return TRUE + +/obj/structure/pool/Lboard + name = "JumpBoard" + icon_state = "boardleft" + desc = "Get on there to jump!" + layer = FLY_LAYER + dir = WEST + var/jumping = FALSE + var/timer + +/obj/structure/pool/Lboard/proc/backswim(obj/O, mob/living/user) //Puts the sprite back to it's maiden condition after a jump. + if(jumping) + for(var/mob/living/jumpee in loc) //hackzors. + playsound(jumpee, 'sound/effects/splash.ogg', 60, TRUE, 1) + jumpee.layer = 4 + jumpee.pixel_x = 0 + jumpee.pixel_y = 0 + jumpee.Stun(2) + jumpee.swimming = TRUE + +/obj/structure/pool/Lboard/attack_hand(mob/living/user) + if(iscarbon(user)) + var/mob/living/carbon/jumper = user + if(jumping) + to_chat(user, "Someone else is already making a jump!") + return + var/turf/T = get_turf(src) + if(user.swimming) + return + else + for(var/obj/machinery/pool/controller/pc in range(4,src)) //Clunky as fuck I know. + if(pc.drained) + to_chat(user, "That would be suicide") //TODO: make this a suicide action. + return + if(Adjacent(jumper)) + jumper.visible_message("[user] climbs up \the [src]!", \ + "You climb up \the [src] and prepares to jump!") + jumper.Stun(40) + jumping = TRUE + jumper.layer = RIPPLE_LAYER + jumper.pixel_x = 3 + jumper.pixel_y = 7 + jumper.dir=8 + sleep(1) + jumper.loc = T + addtimer(CALLBACK(src, .proc/dive, jumper), 10) + +/obj/structure/pool/Lboard/proc/dive(mob/living/carbon/jumper) + switch(rand(1, 100)) + if(1 to 20) + jumper.visible_message("[jumper] goes for a small dive!", \ + "You go for a small dive.") + sleep(15) + backswim() + var/atom/throw_target = get_edge_target_turf(src, dir) + jumper.throw_at(throw_target, 1, 1) + + if(21 to 40) + jumper.visible_message("[jumper] goes for a dive!", \ + "You're going for a dive!") + sleep(20) + backswim() + var/atom/throw_target = get_edge_target_turf(src, dir) + jumper.throw_at(throw_target, 2, 1) + + if(41 to 60) + jumper.visible_message("[jumper] goes for a long dive! Stay far away!", \ + "You're going for a long dive!!") + sleep(25) + backswim() + var/atom/throw_target = get_edge_target_turf(src, dir) + jumper.throw_at(throw_target, 3, 1) + + if(61 to 80) + jumper.visible_message("[jumper] goes for an awesome dive! Don't stand in [jumper.p_their()] way!", \ + "You feel like this dive will be awesome") + sleep(30) + backswim() + var/atom/throw_target = get_edge_target_turf(src, dir) + jumper.throw_at(throw_target, 4, 1) + if(81 to 91) + sleep(20) + backswim() + jumper.visible_message("[jumper] misses [jumper.p_their()] step!", \ + "You misstep!") + var/atom/throw_target = get_edge_target_turf(src, dir) + jumper.throw_at(throw_target, 0, 1) + jumper.Knockdown(100) + jumper.adjustBruteLoss(10) + + if(91 to 100) + jumper.visible_message("[jumper] is preparing for the legendary dive! Can he make it?", \ + "You start preparing for a legendary dive!") + jumper.SpinAnimation(7,1) + + sleep(30) + if(prob(75)) + backswim() + jumper.visible_message("[jumper] fails!", \ + "You can't quite do it!") + var/atom/throw_target = get_edge_target_turf(src, dir) + jumper.throw_at(throw_target, 1, 1) + else + jumper.fire_stacks = min(1,jumper.fire_stacks + 1) + jumper.IgniteMob() + sleep(5) + backswim() + jumper.visible_message("[jumper] bursts into flames of pure awesomness!", \ + "No one can stop you now!") + var/atom/throw_target = get_edge_target_turf(src, dir) + jumper.throw_at(throw_target, 6, 1) + addtimer(CALLBACK(src, .proc/togglejumping), 35) + +/obj/structure/pool/Lboard/proc/togglejumping() + jumping = FALSE diff --git a/code/modules/pool/pool_wires.dm b/code/modules/pool/pool_wires.dm new file mode 100644 index 0000000000..7e98383606 --- /dev/null +++ b/code/modules/pool/pool_wires.dm @@ -0,0 +1,59 @@ +#define POOL_WIRE_DRAIN "drain" +#define POOL_WIRE_TEMP "temp" + + +/datum/wires/poolcontroller + holder_type = /obj/machinery/pool/controller + proper_name = "Pool" + +/datum/wires/poolcontroller/New(atom/holder) + wires = list( + POOL_WIRE_DRAIN, WIRE_SHOCK, WIRE_ZAP, POOL_WIRE_TEMP + ) + add_duds(3) + ..() + +/datum/wires/poolcontroller/interactable(mob/user) + var/obj/machinery/pool/controller/P = holder + if(P.panel_open) + return TRUE + +/datum/wires/poolcontroller/get_status() + var/obj/machinery/pool/controller/P = holder + var/list/status = list() + status += "The blue light is [P.drainable ? "on" : "off"]." + status += "The red light is [P.tempunlocked ? "on" : "off"]." + status += "The yellow light is [P.shocked ? "on" : "off"]." + return status + +/datum/wires/poolcontroller/on_pulse(wire) + var/obj/machinery/pool/controller/P = holder + switch(wire) + if(POOL_WIRE_DRAIN) + P.drainable = FALSE + if(POOL_WIRE_TEMP) + P.tempunlocked = FALSE + if(WIRE_SHOCK) + P.shocked = !P.shocked + addtimer(CALLBACK(P, /obj/machinery/autolathe.proc/reset, wire), 60) + +/datum/wires/poolcontroller/on_cut(wire, mend) + var/obj/machinery/pool/controller/P = holder + switch(wire) + if(POOL_WIRE_DRAIN) + if(mend) + P.drainable = FALSE + else + P.drainable = TRUE + if(POOL_WIRE_TEMP) + if(mend) + P.tempunlocked = FALSE + else + P.tempunlocked = TRUE + if(WIRE_ZAP) + P.shock(usr, 50) + if(WIRE_SHOCK) + if(mend) + P.stat &= ~NOPOWER + else + P.stat |= NOPOWER \ No newline at end of file diff --git a/icons/effects/96x96.dmi b/icons/effects/96x96.dmi index c0b5ef5b40..b60ff97b2b 100644 Binary files a/icons/effects/96x96.dmi and b/icons/effects/96x96.dmi differ diff --git a/icons/mob/inhands/items_lefthand.dmi b/icons/mob/inhands/items_lefthand.dmi index 71c453856a..4ca4a351c6 100644 Binary files a/icons/mob/inhands/items_lefthand.dmi and b/icons/mob/inhands/items_lefthand.dmi differ diff --git a/icons/mob/inhands/items_righthand.dmi b/icons/mob/inhands/items_righthand.dmi index 0ca09ad810..8546a78a73 100644 Binary files a/icons/mob/inhands/items_righthand.dmi and b/icons/mob/inhands/items_righthand.dmi differ diff --git a/icons/mob/sharks.dmi b/icons/mob/sharks.dmi new file mode 100644 index 0000000000..e1b9228ba9 Binary files /dev/null and b/icons/mob/sharks.dmi differ diff --git a/icons/obj/machines/pool.dmi b/icons/obj/machines/pool.dmi new file mode 100644 index 0000000000..2bfb4f8c40 Binary files /dev/null and b/icons/obj/machines/pool.dmi differ diff --git a/icons/obj/toy.dmi b/icons/obj/toy.dmi index d5cae1db93..698c1f7a34 100644 Binary files a/icons/obj/toy.dmi and b/icons/obj/toy.dmi differ diff --git a/icons/turf/areas.dmi b/icons/turf/areas.dmi index fe60cf6c0d..26740117fe 100644 Binary files a/icons/turf/areas.dmi and b/icons/turf/areas.dmi differ diff --git a/icons/turf/pool.dmi b/icons/turf/pool.dmi new file mode 100644 index 0000000000..211776ed93 Binary files /dev/null and b/icons/turf/pool.dmi differ diff --git a/sound/effects/fillingwatter.ogg b/sound/effects/fillingwatter.ogg new file mode 100644 index 0000000000..e1d2e19276 Binary files /dev/null and b/sound/effects/fillingwatter.ogg differ diff --git a/sound/effects/pooldrain.ogg b/sound/effects/pooldrain.ogg new file mode 100644 index 0000000000..8576dedc3d Binary files /dev/null and b/sound/effects/pooldrain.ogg differ diff --git a/sound/effects/splash.ogg b/sound/effects/splash.ogg new file mode 100644 index 0000000000..22f17c0790 Binary files /dev/null and b/sound/effects/splash.ogg differ diff --git a/sound/effects/water_wade1.ogg b/sound/effects/water_wade1.ogg new file mode 100644 index 0000000000..27527f9d8b Binary files /dev/null and b/sound/effects/water_wade1.ogg differ diff --git a/sound/effects/water_wade2.ogg b/sound/effects/water_wade2.ogg new file mode 100644 index 0000000000..f9c15cab64 Binary files /dev/null and b/sound/effects/water_wade2.ogg differ diff --git a/sound/effects/water_wade3.ogg b/sound/effects/water_wade3.ogg new file mode 100644 index 0000000000..3daccae01a Binary files /dev/null and b/sound/effects/water_wade3.ogg differ diff --git a/sound/effects/water_wade4.ogg b/sound/effects/water_wade4.ogg new file mode 100644 index 0000000000..7ba705f499 Binary files /dev/null and b/sound/effects/water_wade4.ogg differ diff --git a/sound/effects/watersplash.ogg b/sound/effects/watersplash.ogg new file mode 100644 index 0000000000..a9a6e48608 Binary files /dev/null and b/sound/effects/watersplash.ogg differ diff --git a/sound/misc/crack.ogg b/sound/misc/crack.ogg new file mode 100644 index 0000000000..1fb5738051 Binary files /dev/null and b/sound/misc/crack.ogg differ diff --git a/sound/misc/crunch.ogg b/sound/misc/crunch.ogg new file mode 100644 index 0000000000..c73e1fae60 Binary files /dev/null and b/sound/misc/crunch.ogg differ diff --git a/tgstation.dme b/tgstation.dme index 4372f525b3..0787449030 100755 --- a/tgstation.dme +++ b/tgstation.dme @@ -76,6 +76,7 @@ #include "code\__DEFINES\obj_flags.dm" #include "code\__DEFINES\pinpointers.dm" #include "code\__DEFINES\pipe_construction.dm" +#include "code\__DEFINES\pool.dm" #include "code\__DEFINES\preferences.dm" #include "code\__DEFINES\procpath.dm" #include "code\__DEFINES\profile.dm" @@ -2352,6 +2353,7 @@ #include "code\modules\mob\living\simple_animal\hostile\netherworld.dm" #include "code\modules\mob\living\simple_animal\hostile\pirate.dm" #include "code\modules\mob\living\simple_animal\hostile\russian.dm" +#include "code\modules\mob\living\simple_animal\hostile\sharks.dm" #include "code\modules\mob\living\simple_animal\hostile\skeleton.dm" #include "code\modules\mob\living\simple_animal\hostile\statue.dm" #include "code\modules\mob\living\simple_animal\hostile\stickman.dm" @@ -2500,6 +2502,13 @@ #include "code\modules\photography\photos\album.dm" #include "code\modules\photography\photos\frame.dm" #include "code\modules\photography\photos\photo.dm" +#include "code\modules\pool\pool_controller.dm" +#include "code\modules\pool\pool_drain.dm" +#include "code\modules\pool\pool_effects.dm" +#include "code\modules\pool\pool_main.dm" +#include "code\modules\pool\pool_noodles.dm" +#include "code\modules\pool\pool_structures.dm" +#include "code\modules\pool\pool_wires.dm" #include "code\modules\power\apc.dm" #include "code\modules\power\cable.dm" #include "code\modules\power\cell.dm"