diff --git a/.github/workflows/compile_changelogs.yml b/.github/workflows/compile_changelogs.yml new file mode 100644 index 00000000000..4894870752b --- /dev/null +++ b/.github/workflows/compile_changelogs.yml @@ -0,0 +1,36 @@ +name: Compile changelogs + +on: + schedule: + - cron: "0 0 * * *" + +jobs: + compile: + name: "Compile changelogs" + runs-on: ubuntu-latest + steps: + - name: "Setup python" + uses: actions/setup-python@v1 + with: + python-version: '3.x' + - name: "Install deps" + run: | + python -m pip install --upgrade pip + python -m pip install pyyaml + - name: "Checkout" + uses: actions/checkout@v1 + with: + fetch-depth: 25 + - name: "Compile" + run: | + python tools/ss13_genchangelog.py html/changelog.html html/changelogs + - name: Commit + run: | + git config --local user.email "action@github.com" + git config --local user.name "Changelogs" + git pull origin master + git commit -m "Automatic changelog compile [ci skip]" -a || true + - name: "Push" + uses: ad-m/github-push-action@master + with: + github_token: ${{ secrets.GITHUB_MASTER_KEY }} diff --git a/SQL/database_changelog.txt b/SQL/database_changelog.txt index 680acb2ae08..f84268b8a34 100644 --- a/SQL/database_changelog.txt +++ b/SQL/database_changelog.txt @@ -1,13 +1,32 @@ Any time you make a change to the schema files, remember to increment the database schema version. Generally increment the minor number, major should be reserved for significant changes to the schema. Both values go up to 255. -The latest database version is 5.6; The query to update the schema revision table is: +The latest database version is 5.7; The query to update the schema revision table is: -INSERT INTO `schema_revision` (`major`, `minor`) VALUES (5, 6); +INSERT INTO `schema_revision` (`major`, `minor`) VALUES (5, 7); or -INSERT INTO `SS13_schema_revision` (`major`, `minor`) VALUES (5, 6); +INSERT INTO `SS13_schema_revision` (`major`, `minor`) VALUES (5, 7); In any query remember to add a prefix to the table names if you use one. +----------------------------------------------------- + +Version 5.7, 10 January 2020 by Atlanta-Ned +Added ticket table for tracking ahelp tickets in the database. + +DROP TABLE IF EXISTS `ticket`; +CREATE TABLE `ticket` ( + `id` int(11) unsigned NOT NULL AUTO_INCREMENT, + `server_ip` int(10) unsigned NOT NULL, + `server_port` smallint(5) unsigned NOT NULL, + `round_id` int(11) unsigned NOT NULL, + `ticket` smallint(11) unsigned NOT NULL, + `action` varchar(20) NOT NULL DEFAULT 'Message', + `message` text NOT NULL, + `timestamp` datetime NOT NULL, + `recipient` varchar(32) DEFAULT NULL, + `sender` varchar(32) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; ----------------------------------------------------- diff --git a/SQL/tgstation_schema.sql b/SQL/tgstation_schema.sql index 7a5db181e84..a9b2c65fef1 100644 --- a/SQL/tgstation_schema.sql +++ b/SQL/tgstation_schema.sql @@ -537,6 +537,24 @@ CREATE TABLE `achievement_metadata` ( PRIMARY KEY (`achievement_key`) ) ENGINE=InnoDB; +-- +-- Table structure for table `ticket` +-- +DROP TABLE IF EXISTS `ticket`; +CREATE TABLE `ticket` ( + `id` int(11) unsigned NOT NULL AUTO_INCREMENT, + `server_ip` int(10) unsigned NOT NULL, + `server_port` smallint(5) unsigned NOT NULL, + `round_id` int(11) unsigned NOT NULL, + `ticket` smallint(11) unsigned NOT NULL, + `action` varchar(20) NOT NULL DEFAULT 'Message', + `message` text NOT NULL, + `timestamp` datetime NOT NULL, + `recipient` varchar(32) DEFAULT NULL, + `sender` varchar(32) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + /*!40101 SET SQL_MODE=@OLD_SQL_MODE */; /*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; /*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; diff --git a/SQL/tgstation_schema_prefixed.sql b/SQL/tgstation_schema_prefixed.sql index 3122bab69fb..845a23ea7d1 100644 --- a/SQL/tgstation_schema_prefixed.sql +++ b/SQL/tgstation_schema_prefixed.sql @@ -537,6 +537,24 @@ CREATE TABLE `SS13_achievement_metadata` ( PRIMARY KEY (`achievement_key`) ) ENGINE=InnoDB; +-- +-- Table structure for table `SS13_ticket` +-- +DROP TABLE IF EXISTS `SS13_ticket`; +CREATE TABLE `SS13_ticket` ( + `id` int(11) unsigned NOT NULL AUTO_INCREMENT, + `server_ip` int(10) unsigned NOT NULL, + `server_port` smallint(5) unsigned NOT NULL, + `round_id` int(11) unsigned NOT NULL, + `ticket` smallint(11) unsigned NOT NULL, + `action` varchar(20) NOT NULL DEFAULT 'Message', + `message` text NOT NULL, + `timestamp` datetime NOT NULL, + `recipient` varchar(32) DEFAULT NULL, + `sender` varchar(32) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + /*!40101 SET SQL_MODE=@OLD_SQL_MODE */; /*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; /*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; diff --git a/_maps/RandomRuins/SpaceRuins/abandonedzoo.dmm b/_maps/RandomRuins/SpaceRuins/abandonedzoo.dmm index ba317a2263b..670864f7d0a 100644 --- a/_maps/RandomRuins/SpaceRuins/abandonedzoo.dmm +++ b/_maps/RandomRuins/SpaceRuins/abandonedzoo.dmm @@ -3,11 +3,7 @@ /turf/template_noop, /area/template_noop) "ab" = ( -/obj/machinery/power/shieldwallgen{ - active = 2; - anchored = 1; - power = 1 - }, +/obj/machinery/power/shieldwallgen/anchored, /obj/structure/cable, /turf/open/floor/plating/airless, /area/ruin/space/has_grav/abandonedzoo) @@ -153,11 +149,7 @@ /turf/open/floor/plasteel/dark, /area/ruin/space/has_grav/abandonedzoo) "aE" = ( -/obj/machinery/power/shieldwallgen{ - active = 2; - anchored = 1; - power = 1 - }, +/obj/machinery/power/shieldwallgen/anchored, /obj/structure/cable, /turf/open/floor/plating, /area/ruin/space/has_grav/abandonedzoo) @@ -248,7 +240,6 @@ /obj/machinery/power/apc/unlocked{ dir = 8; environ = 0; - equipment = 0; lighting = 0; name = "Worn-out APC"; pixel_x = -25 @@ -367,11 +358,8 @@ /turf/open/floor/plasteel/dark/side, /area/ruin/space/has_grav/abandonedzoo) "bf" = ( -/obj/machinery/power/smes/magical{ - desc = "A high-capacity superconducting magnetic energy storage (SMES) unit."; - name = "power storage unit" - }, /obj/structure/cable, +/obj/machinery/power/smes/engineering, /turf/open/floor/plasteel/dark/side, /area/ruin/space/has_grav/abandonedzoo) "bg" = ( @@ -435,13 +423,13 @@ /turf/open/floor/plasteel/dark/side, /area/ruin/space/has_grav/abandonedzoo) "bs" = ( -/obj/machinery/power/shieldwallgen, /obj/structure/cable, +/obj/machinery/power/shieldwallgen/anchored, /turf/open/floor/plating, /area/ruin/space/has_grav/abandonedzoo) "bt" = ( -/obj/machinery/power/shieldwallgen, /obj/structure/cable, +/obj/machinery/power/shieldwallgen/anchored, /turf/open/floor/plating/airless, /area/ruin/space/has_grav/abandonedzoo) "bu" = ( @@ -496,6 +484,7 @@ /area/ruin/space/has_grav/abandonedzoo) "bD" = ( /obj/item/clothing/mask/facehugger/dead, +/obj/structure/alien/weeds, /turf/open/floor/plating/airless, /area/ruin/space/has_grav/abandonedzoo) "bE" = ( @@ -654,7 +643,7 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, -/turf/open/floor/plasteel/dark, +/turf/open/floor/plating, /area/ruin/space/has_grav/abandonedzoo) "wF" = ( /obj/machinery/door/airlock/hatch{ @@ -690,6 +679,11 @@ "KN" = ( /turf/template_noop, /area/space/nearstation) +"Ng" = ( +/obj/structure/alien/weeds, +/obj/structure/alien/weeds/node, +/turf/open/floor/plating/airless, +/area/ruin/space/has_grav/abandonedzoo) (1,1,1) = {" ab @@ -979,7 +973,7 @@ bl at ac bB -bB +Ng bD bH ac @@ -1002,7 +996,7 @@ ac bC bH bH -bX +bB bT aa "} @@ -1022,7 +1016,7 @@ aL aD bD bB -bX +Ng bO bU bW @@ -1043,7 +1037,7 @@ aQ ac bB bB -bX +bB bX bP aa diff --git a/_maps/map_files/BoxStation/BoxStation.dmm b/_maps/map_files/BoxStation/BoxStation.dmm index 93df6599a9e..46d4c0e27e6 100644 --- a/_maps/map_files/BoxStation/BoxStation.dmm +++ b/_maps/map_files/BoxStation/BoxStation.dmm @@ -13003,6 +13003,18 @@ /obj/structure/cable, /turf/open/floor/plating, /area/maintenance/starboard/fore) +"aGC" = ( +/obj/machinery/button/door{ + id = "xenobio5"; + layer = 3.3; + name = "Xenobio Pen 5 Blast Doors"; + pixel_y = 4; + req_access_txt = "55" + }, +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/turf/open/floor/plating, +/area/science/xenobiology) "aGD" = ( /obj/structure/table/wood, /obj/structure/mirror{ @@ -19486,6 +19498,13 @@ /obj/structure/cable, /turf/open/floor/plating, /area/maintenance/port) +"aYb" = ( +/obj/machinery/camera/autoname{ + icon_state = "camera"; + dir = 8 + }, +/turf/open/floor/engine, +/area/science/xenobiology) "aYc" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 6 @@ -27295,6 +27314,7 @@ dir = 4 }, /obj/structure/cable, +/obj/effect/landmark/start/paramedic, /turf/open/floor/plasteel/white, /area/medical/medbay/central) "bsz" = ( @@ -31893,13 +31913,10 @@ /turf/open/floor/engine, /area/science/xenobiology) "bEn" = ( -/obj/machinery/camera{ - c_tag = "Xenobiology Test Chamber"; - network = list("xeno","rd") - }, /obj/machinery/light{ dir = 1 }, +/obj/machinery/camera/autoname, /turf/open/floor/engine, /area/science/xenobiology) "bEo" = ( @@ -33542,13 +33559,27 @@ /area/science/xenobiology) "bIO" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, +/obj/machinery/computer/camera_advanced/xenobio{ + icon_state = "computer"; + dir = 8 + }, +/obj/structure/window/reinforced{ + dir = 4; + layer = 2.9 + }, +/obj/effect/turf_decal/tile/purple{ + dir = 4 + }, +/obj/effect/turf_decal/tile/purple, /turf/open/floor/plasteel/white, /area/science/xenobiology) "bIP" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, -/obj/structure/chair/comfy/black, +/obj/structure/chair/comfy/black{ + dir = 8 + }, /turf/open/floor/plasteel/white, /area/science/xenobiology) "bIQ" = ( @@ -33884,6 +33915,7 @@ id = "misclab"; name = "test chamber blast door" }, +/obj/machinery/atmospherics/pipe/simple/general/visible, /turf/open/floor/engine, /area/science/xenobiology) "bJN" = ( @@ -34296,9 +34328,12 @@ /turf/open/floor/plasteel, /area/engine/atmos) "bKW" = ( -/obj/item/wrench, /obj/effect/turf_decal/stripes/line, /obj/structure/cable, +/obj/machinery/camera/autoname{ + icon_state = "camera"; + dir = 5 + }, /turf/open/floor/plasteel, /area/science/xenobiology) "bKX" = ( @@ -34346,11 +34381,13 @@ req_access_txt = "55" }, /obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/pipe/simple/general/visible, /turf/open/floor/plasteel, /area/science/xenobiology) "bLb" = ( /obj/effect/turf_decal/stripes/line, /obj/structure/cable, +/obj/item/wrench, /turf/open/floor/plasteel, /area/science/xenobiology) "bLc" = ( @@ -34683,6 +34720,7 @@ /area/medical/medbay/central) "bLX" = ( /obj/machinery/atmospherics/pipe/manifold4w/scrubbers, +/obj/effect/landmark/start/paramedic, /turf/open/floor/plasteel/white, /area/medical/medbay/central) "bLY" = ( @@ -34744,18 +34782,37 @@ /turf/open/floor/plasteel/white, /area/science/xenobiology) "bMl" = ( -/obj/machinery/processor/slime, /obj/effect/turf_decal/stripes/line, +/obj/item/radio/intercom{ + pixel_y = 23 + }, +/obj/structure/table/glass, +/obj/item/storage/box/beakers{ + pixel_x = 2; + pixel_y = 7 + }, +/obj/item/storage/box/syringes{ + pixel_y = 5 + }, +/obj/item/reagent_containers/glass/beaker/large{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/item/reagent_containers/dropper, +/obj/item/reagent_containers/dropper, /turf/open/floor/plasteel, /area/science/xenobiology) "bMm" = ( -/obj/machinery/monkey_recycler, /obj/machinery/firealarm{ pixel_y = 24 }, /obj/effect/turf_decal/stripes/line{ dir = 10 }, +/obj/machinery/portable_atmospherics/canister/bz, +/obj/machinery/atmospherics/components/unary/portables_connector/visible{ + dir = 8 + }, /turf/open/floor/plasteel, /area/science/xenobiology) "bMn" = ( @@ -34768,26 +34825,46 @@ pixel_y = 5 }, /obj/effect/turf_decal/stripes/line, +/obj/item/stack/sheet/mineral/plasma{ + pixel_y = 4 + }, +/obj/item/stack/sheet/mineral/plasma{ + pixel_y = 4 + }, +/obj/item/stack/sheet/mineral/plasma{ + pixel_y = 4 + }, +/obj/item/stack/sheet/mineral/plasma{ + pixel_y = 4 + }, /turf/open/floor/plasteel, /area/science/xenobiology) "bMo" = ( -/obj/machinery/smartfridge/extract/preloaded, /obj/effect/turf_decal/stripes/line, +/obj/machinery/requests_console{ + department = "Science"; + departmentType = 2; + name = "Science Requests Console"; + pixel_y = 27; + receive_ore_updates = 1 + }, +/obj/machinery/chem_master, /turf/open/floor/plasteel, /area/science/xenobiology) "bMp" = ( -/obj/structure/closet/l3closet/scientist, /obj/machinery/light_switch{ pixel_y = 28 }, -/obj/item/extinguisher, /obj/effect/turf_decal/stripes/line, +/obj/machinery/monkey_recycler, /turf/open/floor/plasteel, /area/science/xenobiology) "bMq" = ( -/obj/structure/closet/l3closet/scientist, -/obj/item/extinguisher, /obj/effect/turf_decal/stripes/line, +/obj/structure/table/glass, +/obj/item/slime_scanner, +/obj/item/clothing/gloves/color/latex, +/obj/item/clothing/glasses/science, /turf/open/floor/plasteel, /area/science/xenobiology) "bMr" = ( @@ -35497,13 +35574,6 @@ }, /turf/open/floor/plasteel, /area/science/misc_lab) -"bOz" = ( -/obj/structure/chair/stool, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/turf/open/floor/plasteel/white, -/area/science/xenobiology) "bOB" = ( /obj/machinery/atmospherics/pipe/simple/general/visible{ dir = 4 @@ -35914,15 +35984,16 @@ /area/medical/virology) "bPx" = ( /obj/machinery/disposal/bin, -/obj/structure/sign/warning/deathsposal{ - pixel_y = -32 - }, /obj/structure/disposalpipe/trunk{ dir = 4 }, /obj/effect/turf_decal/stripes/line{ dir = 1 }, +/obj/structure/sign/warning/deathsposal{ + pixel_x = -31; + pixel_y = 0 + }, /turf/open/floor/plasteel, /area/science/xenobiology) "bPy" = ( @@ -35930,23 +36001,12 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, -/obj/structure/chair/comfy/black, +/obj/structure/chair/comfy/black{ + dir = 4 + }, /turf/open/floor/plasteel/white, /area/science/xenobiology) "bPz" = ( -/obj/structure/table/glass, -/obj/item/storage/box/beakers{ - pixel_x = 2; - pixel_y = 7 - }, -/obj/item/storage/box/syringes{ - pixel_y = 5 - }, -/obj/item/storage/box/monkeycubes{ - pixel_x = 2; - pixel_y = -2 - }, -/obj/item/storage/box/monkeycubes, /obj/machinery/light, /obj/structure/disposalpipe/segment{ dir = 4 @@ -35954,22 +36014,39 @@ /obj/effect/turf_decal/stripes/line{ dir = 1 }, +/obj/machinery/smartfridge/extract/preloaded, /turf/open/floor/plasteel, /area/science/xenobiology) "bPA" = ( -/obj/machinery/computer/camera_advanced/xenobio{ - dir = 1 - }, /obj/structure/disposalpipe/segment{ dir = 4 }, /obj/effect/turf_decal/stripes/line{ dir = 1 }, +/obj/structure/table/glass, +/obj/item/storage/box/monkeycubes, +/obj/machinery/button/door{ + name = "Containment Blast Doors"; + pixel_x = 1; + pixel_y = -26; + req_access_txt = "55"; + id = "xenobiomain" + }, /turf/open/floor/plasteel, /area/science/xenobiology) "bPB" = ( /obj/structure/table/glass, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/obj/structure/window/reinforced{ + dir = 4; + layer = 2.9 + }, /obj/item/paper_bin{ pixel_y = 4 }, @@ -35980,12 +36057,6 @@ /obj/item/pen{ pixel_x = -4 }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 5 - }, /turf/open/floor/plasteel, /area/science/xenobiology) "bPC" = ( @@ -36005,71 +36076,38 @@ /obj/effect/turf_decal/stripes/line{ dir = 9 }, -/obj/machinery/portable_atmospherics/canister/bz, +/obj/machinery/atmospherics/components/unary/thermomachine/freezer/on{ + dir = 8 + }, /turf/open/floor/plasteel, /area/science/xenobiology) "bPG" = ( -/obj/machinery/chem_master, -/obj/item/radio/intercom{ - pixel_y = -29 - }, /obj/machinery/light, /obj/effect/turf_decal/stripes/line{ dir = 1 }, +/obj/structure/reagent_dispensers/watertank, +/obj/machinery/camera/autoname{ + icon_state = "camera"; + dir = 1 + }, /turf/open/floor/plasteel, /area/science/xenobiology) "bPH" = ( -/obj/machinery/requests_console{ - department = "Science"; - departmentType = 2; - name = "Science Requests Console"; - pixel_y = -30; - receive_ore_updates = 1 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/structure/table/reinforced, -/obj/item/slime_scanner, -/obj/item/clothing/gloves/color/latex, -/obj/item/clothing/glasses/science, -/turf/open/floor/plasteel, -/area/science/xenobiology) -"bPI" = ( -/obj/structure/reagent_dispensers/watertank, /obj/effect/turf_decal/stripes/line{ dir = 1 }, +/obj/structure/rack, +/obj/item/clothing/suit/hooded/wintercoat, +/obj/item/clothing/shoes/winterboots, /turf/open/floor/plasteel, /area/science/xenobiology) "bPJ" = ( -/obj/structure/table/glass, -/obj/item/stack/sheet/mineral/plasma{ - pixel_y = 4 - }, -/obj/item/stack/sheet/mineral/plasma{ - pixel_y = 4 - }, -/obj/item/stack/sheet/mineral/plasma{ - pixel_y = 4 - }, -/obj/item/stack/sheet/mineral/plasma{ - pixel_y = 4 - }, -/obj/item/reagent_containers/glass/beaker{ - pixel_x = 8; - pixel_y = 2 - }, -/obj/item/reagent_containers/glass/beaker/large{ - pixel_x = -3; - pixel_y = 3 - }, -/obj/item/reagent_containers/dropper, /obj/effect/turf_decal/stripes/line{ dir = 1 }, -/obj/item/reagent_containers/dropper, +/obj/structure/closet/l3closet/scientist, +/obj/item/extinguisher, /turf/open/floor/plasteel, /area/science/xenobiology) "bPK" = ( @@ -36413,6 +36451,10 @@ }, /obj/effect/turf_decal/stripes/line, /obj/structure/cable, +/obj/machinery/door/poddoor/preopen{ + id = "xenobiomain"; + name = "containment blast door" + }, /turf/open/floor/plasteel/white, /area/science/xenobiology) "bQM" = ( @@ -36421,22 +36463,26 @@ dir = 1 }, /obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/stripes/corner{ + dir = 8 + }, +/obj/machinery/door/poddoor/preopen{ + id = "xenobiomain"; + name = "containment blast door" + }, /turf/open/floor/plasteel/white, /area/science/xenobiology) "bQN" = ( /obj/machinery/door/firedoor, -/obj/machinery/light{ - dir = 4 - }, -/obj/machinery/camera{ - c_tag = "Xenobiology North"; - dir = 8; - network = list("ss13","rd") - }, /obj/effect/turf_decal/stripes/line{ dir = 1 }, /obj/effect/turf_decal/stripes/line, +/obj/machinery/atmospherics/pipe/simple/general/visible, +/obj/machinery/door/poddoor/preopen{ + id = "xenobiomain"; + name = "containment blast door" + }, /turf/open/floor/plasteel/white, /area/science/xenobiology) "bQO" = ( @@ -36793,17 +36839,23 @@ /turf/open/floor/plasteel, /area/security/checkpoint/engineering) "bRT" = ( -/obj/structure/disposalpipe/trunk{ +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 4; + external_pressure_bound = 140; + name = "killroom vent"; + pressure_checks = 0 + }, +/obj/machinery/camera/autoname{ + icon_state = "camera"; dir = 4 }, -/obj/structure/disposaloutlet, -/turf/open/floor/engine, +/turf/open/floor/plasteel/freezer, /area/science/xenobiology) "bRU" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 +/obj/machinery/atmospherics/pipe/manifold/general/visible{ + dir = 1 }, -/turf/open/floor/engine, +/turf/open/floor/plasteel/freezer, /area/science/xenobiology) "bRV" = ( /obj/machinery/disposal/bin, @@ -36816,40 +36868,26 @@ }, /turf/open/floor/plasteel, /area/science/xenobiology) -"bRW" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/door/poddoor/preopen{ - id = "xenobio3"; - name = "containment blast door" - }, -/obj/effect/spawner/structure/window/reinforced, -/obj/structure/cable, -/turf/open/floor/engine, -/area/science/xenobiology) "bRY" = ( -/obj/structure/window/reinforced, -/obj/structure/table/reinforced, /obj/machinery/button/door{ - id = "xenobio8"; - name = "Containment Blast Doors"; + id = "xenobio11"; + layer = 3.3; + name = "Xenobio Pen 11 Blast Doors"; pixel_y = 4; req_access_txt = "55" }, -/obj/effect/turf_decal/stripes/line{ - dir = 10 - }, -/turf/open/floor/plasteel, +/obj/structure/cable, +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, /area/science/xenobiology) "bSa" = ( +/obj/structure/cable, /obj/machinery/door/poddoor/preopen{ - id = "xenobio8"; - name = "containment blast door" + id = "xenobio11"; + name = "Xenobio Pen 11 Blast Door" }, /obj/effect/spawner/structure/window/reinforced, -/obj/structure/cable, -/turf/open/floor/engine, +/turf/open/floor/plating, /area/science/xenobiology) "bSc" = ( /obj/structure/table, @@ -37108,6 +37146,18 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/engine/atmos) +"bSO" = ( +/obj/machinery/button/door{ + id = "xenobio7"; + layer = 3.3; + name = "Xenobio Pen 7 Blast Doors"; + pixel_y = 4; + req_access_txt = "55" + }, +/obj/structure/cable, +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/science/xenobiology) "bSP" = ( /obj/machinery/atmospherics/pipe/manifold/cyan/visible{ dir = 4 @@ -37204,32 +37254,20 @@ /turf/open/floor/plasteel/white, /area/medical/virology) "bTa" = ( -/obj/machinery/door/window/northleft{ - dir = 4; - name = "Containment Pen"; - req_access_txt = "55" - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/effect/turf_decal/delivery, +/obj/structure/sign/warning/coldtemp, +/obj/effect/spawner/structure/window/reinforced, /obj/structure/cable, -/turf/open/floor/plasteel, +/turf/open/floor/plating, /area/science/xenobiology) "bTb" = ( -/obj/machinery/door/window/northleft{ - base_state = "right"; - dir = 8; - icon_state = "right"; - name = "Containment Pen"; - req_access_txt = "55" +/obj/machinery/atmospherics/components/unary/vent_pump/siphon/on{ + name = "killroom vent"; + icon_state = "vent_map_siphon_on-2"; + dir = 1; + external_pressure_bound = 120 }, -/obj/machinery/door/poddoor/preopen{ - id = "xenobio3"; - name = "containment blast door" - }, -/obj/structure/cable, -/turf/open/floor/engine, +/obj/machinery/light, +/turf/open/floor/plasteel/freezer, /area/science/xenobiology) "bTc" = ( /obj/structure/disposalpipe/segment, @@ -37241,27 +37279,26 @@ base_state = "right"; dir = 8; icon_state = "right"; - name = "Containment Pen"; + name = "Containment Pen 11"; req_access_txt = "55" }, /obj/effect/turf_decal/stripes/line{ dir = 8 }, /obj/effect/turf_decal/delivery, -/obj/structure/cable, /turf/open/floor/plasteel, /area/science/xenobiology) "bTe" = ( /obj/machinery/door/window/northleft{ dir = 4; - name = "Containment Pen"; + name = "Containment Pen 11"; req_access_txt = "55" }, -/obj/machinery/door/poddoor/preopen{ - id = "xenobio8"; - name = "containment blast door" - }, /obj/structure/cable, +/obj/machinery/door/poddoor/preopen{ + id = "xenobio11"; + name = "Xenobio Pen 11 Blast Door" + }, /turf/open/floor/engine, /area/science/xenobiology) "bTg" = ( @@ -37589,31 +37626,6 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel, /area/tcommsat/computer) -"bUd" = ( -/obj/structure/table/reinforced, -/obj/machinery/button/door{ - id = "xenobio3"; - name = "Containment Blast Doors"; - pixel_y = 4; - req_access_txt = "55" - }, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 5 - }, -/turf/open/floor/plasteel, -/area/science/xenobiology) -"bUe" = ( -/obj/machinery/door/poddoor/preopen{ - id = "xenobio3"; - name = "containment blast door" - }, -/obj/effect/spawner/structure/window/reinforced, -/obj/structure/cable, -/turf/open/floor/engine, -/area/science/xenobiology) "bUg" = ( /obj/structure/window/reinforced{ dir = 1 @@ -37628,23 +37640,24 @@ /turf/open/floor/plasteel, /area/science/xenobiology) "bUh" = ( +/obj/structure/cable, +/obj/machinery/door/poddoor/preopen{ + id = "xenobio11"; + name = "Xenobio Pen 11 Blast Door" + }, /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/door/poddoor/preopen{ - id = "xenobio8"; - name = "containment blast door" - }, /obj/effect/spawner/structure/window/reinforced, -/obj/structure/cable, -/turf/open/floor/engine, +/turf/open/floor/plating, /area/science/xenobiology) "bUi" = ( -/obj/structure/disposalpipe/trunk{ - dir = 8 +/obj/machinery/light{ + dir = 4 }, -/obj/structure/disposaloutlet{ - dir = 1 +/obj/machinery/camera/autoname{ + icon_state = "camera"; + dir = 8 }, /turf/open/floor/engine, /area/science/xenobiology) @@ -37980,16 +37993,21 @@ /turf/open/floor/plasteel, /area/hallway/primary/aft) "bVi" = ( -/obj/structure/sign/warning/electricshock, -/turf/closed/wall, -/area/science/xenobiology) -"bVj" = ( -/obj/machinery/light{ +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk{ dir = 8 }, -/turf/open/floor/plasteel/white, +/obj/structure/window/reinforced, +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/obj/structure/cable, +/turf/open/floor/plasteel, /area/science/xenobiology) "bVk" = ( +/obj/machinery/light{ + dir = 4 + }, /obj/structure/sink{ dir = 8; pixel_x = 11 @@ -38295,37 +38313,44 @@ /turf/open/floor/plating, /area/medical/virology) "bWl" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/door/poddoor/preopen{ - id = "xenobio2"; - name = "containment blast door" - }, -/obj/effect/spawner/structure/window/reinforced, /obj/structure/cable, +/obj/machinery/door/poddoor/preopen{ + id = "xenobio5"; + name = "Xenobio Pen 5 Blast Door" + }, +/obj/machinery/door/window/northleft{ + base_state = "right"; + dir = 8; + icon_state = "right"; + name = "Containment Pen 5"; + req_access_txt = "55" + }, /turf/open/floor/engine, /area/science/xenobiology) "bWm" = ( -/obj/structure/window/reinforced, -/obj/structure/table/reinforced, -/obj/machinery/button/door{ - id = "xenobio7"; - name = "Containment Blast Doors"; - pixel_y = 4; +/obj/machinery/door/window/northleft{ + base_state = "right"; + dir = 8; + icon_state = "right"; + name = "Containment Pen 10"; req_access_txt = "55" }, /obj/effect/turf_decal/stripes/line{ - dir = 10 + dir = 8 }, +/obj/effect/turf_decal/delivery, /turf/open/floor/plasteel, /area/science/xenobiology) "bWn" = ( -/obj/machinery/door/poddoor/preopen{ - id = "xenobio7"; - name = "containment blast door" +/obj/machinery/door/window/northleft{ + dir = 4; + name = "Containment Pen 10"; + req_access_txt = "55" + }, +/obj/machinery/door/poddoor/preopen{ + id = "xenobio10"; + name = "Xenobio Pen 10 Blast Door" }, -/obj/effect/spawner/structure/window/reinforced, /obj/structure/cable, /turf/open/floor/engine, /area/science/xenobiology) @@ -38647,32 +38672,26 @@ /turf/open/floor/engine, /area/science/xenobiology) "bXf" = ( -/obj/machinery/door/window/northleft{ - base_state = "right"; - dir = 8; - icon_state = "right"; - name = "Containment Pen"; - req_access_txt = "55" - }, -/obj/machinery/door/poddoor/preopen{ - id = "xenobio2"; - name = "containment blast door" - }, /obj/structure/cable, -/turf/open/floor/engine, +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/preopen{ + id = "xenobio5"; + name = "Xenobio Pen 5 Blast Door" + }, +/turf/open/floor/plating, /area/science/xenobiology) "bXg" = ( -/obj/machinery/door/window/northleft{ - dir = 4; - name = "Containment Pen"; - req_access_txt = "55" - }, -/obj/machinery/door/poddoor/preopen{ - id = "xenobio7"; - name = "containment blast door" - }, /obj/structure/cable, -/turf/open/floor/engine, +/obj/machinery/door/poddoor/preopen{ + id = "xenobio10"; + name = "Xenobio Pen 10 Blast Door" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/sign/warning/electricshock, +/turf/open/floor/plating, /area/science/xenobiology) "bXh" = ( /obj/structure/filingcabinet/chestdrawer, @@ -38967,33 +38986,14 @@ /obj/structure/closet/secure_closet/personal/patient, /turf/open/floor/plasteel/white, /area/medical/virology) -"bYf" = ( -/obj/structure/table/reinforced, -/obj/machinery/button/door{ - id = "xenobio2"; - name = "Containment Blast Doors"; - pixel_y = 4; - req_access_txt = "55" - }, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 5 - }, -/turf/open/floor/plasteel, -/area/science/xenobiology) "bYh" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, +/obj/structure/cable, /obj/machinery/door/poddoor/preopen{ - id = "xenobio7"; - name = "containment blast door" + id = "xenobio9"; + name = "Xenobio Pen 9 Blast Door" }, /obj/effect/spawner/structure/window/reinforced, -/obj/structure/cable, -/turf/open/floor/engine, +/turf/open/floor/plating, /area/science/xenobiology) "bYi" = ( /obj/machinery/door/poddoor/preopen{ @@ -39291,19 +39291,6 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/closed/wall/r_wall, /area/medical/virology) -"bZa" = ( -/obj/structure/sink{ - dir = 4; - pixel_x = -12; - pixel_y = 2 - }, -/obj/machinery/camera{ - c_tag = "Xenobiology South"; - dir = 4; - network = list("ss13","rd") - }, -/turf/open/floor/plasteel/white, -/area/science/xenobiology) "bZb" = ( /obj/machinery/light{ dir = 4 @@ -39560,39 +39547,25 @@ /turf/open/floor/plating, /area/maintenance/aft) "bZV" = ( +/obj/structure/cable, +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/preopen{ + id = "xenobio4"; + name = "Xenobio Pen 4 Blast Door" + }, +/turf/open/floor/plating, +/area/science/xenobiology) +"bZX" = ( +/obj/structure/cable, +/obj/machinery/door/poddoor/preopen{ + id = "xenobio9"; + name = "Xenobio Pen 9 Blast Door" + }, /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/door/poddoor/preopen{ - id = "xenobio1"; - name = "containment blast door" - }, /obj/effect/spawner/structure/window/reinforced, -/obj/structure/cable, -/turf/open/floor/engine, -/area/science/xenobiology) -"bZW" = ( -/obj/structure/window/reinforced, -/obj/structure/table/reinforced, -/obj/machinery/button/door{ - id = "xenobio6"; - name = "Containment Blast Doors"; - pixel_y = 4; - req_access_txt = "55" - }, -/obj/effect/turf_decal/stripes/line{ - dir = 10 - }, -/turf/open/floor/plasteel, -/area/science/xenobiology) -"bZX" = ( -/obj/machinery/door/poddoor/preopen{ - id = "xenobio6"; - name = "containment blast door" - }, -/obj/effect/spawner/structure/window/reinforced, -/obj/structure/cable, -/turf/open/floor/engine, +/turf/open/floor/plating, /area/science/xenobiology) "bZZ" = ( /obj/effect/turf_decal/stripes/corner, @@ -39960,32 +39933,26 @@ /turf/open/floor/plating, /area/maintenance/aft) "caV" = ( -/obj/machinery/door/window/northleft{ - base_state = "right"; - dir = 8; - icon_state = "right"; - name = "Containment Pen"; - req_access_txt = "55" +/obj/structure/disposalpipe/segment{ + dir = 4 }, /obj/machinery/door/poddoor/preopen{ - id = "xenobio1"; - name = "containment blast door" + id = "xenobio3"; + name = "Xenobio Pen 3 Blast Door" }, +/obj/effect/spawner/structure/window/reinforced, /obj/structure/cable, -/turf/open/floor/engine, +/obj/structure/sign/warning/electricshock, +/turf/open/floor/plating, /area/science/xenobiology) "caW" = ( -/obj/machinery/door/window/northleft{ - dir = 4; - name = "Containment Pen"; - req_access_txt = "55" - }, -/obj/machinery/door/poddoor/preopen{ - id = "xenobio6"; - name = "containment blast door" - }, /obj/structure/cable, -/turf/open/floor/engine, +/obj/machinery/door/poddoor/preopen{ + id = "xenobio8"; + name = "Xenobio Pen 8 Blast Door" + }, +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, /area/science/xenobiology) "caX" = ( /obj/machinery/sparker{ @@ -40296,40 +40263,42 @@ /turf/open/floor/plating, /area/maintenance/aft) "cbR" = ( -/obj/structure/table/reinforced, -/obj/machinery/button/door{ - id = "xenobio1"; - name = "Containment Blast Doors"; - pixel_y = 4; +/obj/machinery/door/window/northleft{ + dir = 4; + name = "Containment Pen 3"; req_access_txt = "55" }, -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/machinery/light, /obj/effect/turf_decal/stripes/line{ - dir = 5 + dir = 4 }, +/obj/effect/turf_decal/delivery, /turf/open/floor/plasteel, /area/science/xenobiology) "cbS" = ( -/obj/machinery/door/poddoor/preopen{ - id = "xenobio1"; - name = "containment blast door" +/obj/machinery/door/window/northleft{ + base_state = "right"; + dir = 8; + icon_state = "right"; + name = "Containment Pen 3"; + req_access_txt = "55" }, -/obj/effect/spawner/structure/window/reinforced, /obj/structure/cable, +/obj/machinery/door/poddoor/preopen{ + id = "xenobio3"; + name = "Xenobio Pen 3 Blast Door" + }, /turf/open/floor/engine, /area/science/xenobiology) "cbU" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 +/obj/machinery/door/window/northleft{ + dir = 4; + name = "Containment Pen 8"; + req_access_txt = "55" }, /obj/machinery/door/poddoor/preopen{ - id = "xenobio6"; - name = "containment blast door" + id = "xenobio8"; + name = "Xenobio Pen 8 Blast Door" }, -/obj/effect/spawner/structure/window/reinforced, /obj/structure/cable, /turf/open/floor/engine, /area/science/xenobiology) @@ -40603,8 +40572,12 @@ /turf/open/floor/plasteel/white, /area/science/xenobiology) "ccQ" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, +/obj/structure/sink{ + dir = 4; + pixel_x = -12; + pixel_y = 0 + }, +/turf/open/floor/plasteel/white, /area/science/xenobiology) "ccR" = ( /obj/item/paper_bin{ @@ -41107,16 +41080,16 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/sign/warning/biohazard, /turf/closed/wall/r_wall, -/area/medical/chemistry) +/area/maintenance/starboard/aft) "ceI" = ( /obj/structure/cable, /obj/effect/spawner/structure/window/reinforced, /turf/open/space/basic, -/area/medical/chemistry) +/area/maintenance/starboard/aft) "ceJ" = ( /obj/structure/disposalpipe/segment, /turf/closed/wall/r_wall, -/area/medical/chemistry) +/area/maintenance/starboard/aft) "ceM" = ( /obj/machinery/meter, /obj/structure/disposalpipe/segment, @@ -41288,19 +41261,6 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel/white, /area/medical/chemistry) -"cfr" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on{ - external_pressure_bound = 140; - name = "killroom vent"; - pressure_checks = 0 - }, -/obj/machinery/camera{ - c_tag = "Xenobiology Kill Room"; - dir = 4; - network = list("ss13","rd") - }, -/turf/open/floor/circuit/telecomms, -/area/science/xenobiology) "cfu" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/closed/wall/r_wall, @@ -41320,15 +41280,6 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating/airless, /area/maintenance/solars/port/aft) -"cfy" = ( -/obj/structure/rack, -/obj/item/clothing/shoes/winterboots, -/obj/item/clothing/suit/hooded/wintercoat, -/obj/effect/turf_decal/stripes/line{ - dir = 9 - }, -/turf/open/floor/plasteel, -/area/science/xenobiology) "cfD" = ( /obj/structure/disposalpipe/segment, /obj/machinery/door/airlock/maintenance{ @@ -41508,9 +41459,6 @@ }, /turf/open/floor/plasteel/white, /area/medical/chemistry) -"cgi" = ( -/turf/open/floor/circuit/telecomms, -/area/science/xenobiology) "cgj" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ @@ -41519,16 +41467,27 @@ /turf/closed/wall/r_wall, /area/maintenance/starboard/aft) "cgk" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/structure/sign/warning/biohazard, -/turf/open/floor/plating, +/obj/machinery/disposal/bin, +/obj/structure/window/reinforced, +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/turf/open/floor/plasteel, /area/science/xenobiology) "cgl" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/siphon/on{ - external_pressure_bound = 120; - name = "killroom vent" +/obj/machinery/door/poddoor/preopen{ + id = "xenobio2"; + name = "Xenobio Pen 2 Blast Door" }, -/turf/open/floor/circuit/telecomms, +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating, /area/science/xenobiology) "cgm" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ @@ -41537,29 +41496,14 @@ /obj/structure/cable, /turf/open/floor/plating, /area/maintenance/starboard/aft) -"cgn" = ( -/obj/machinery/atmospherics/components/unary/thermomachine/freezer/on, -/obj/effect/turf_decal/stripes/line{ - dir = 9 - }, -/turf/open/floor/plasteel, -/area/science/xenobiology) "cgo" = ( -/obj/machinery/atmospherics/pipe/manifold/supply/hidden, -/obj/structure/disposalpipe/segment{ - dir = 5 - }, /obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/disposalpipe/segment, /turf/open/floor/plating, /area/maintenance/starboard/aft) "cgp" = ( -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 10 - }, -/obj/structure/cable, +/obj/structure/closet/wardrobe/mixed, /turf/open/floor/plating, /area/maintenance/starboard/aft) "cgr" = ( @@ -41864,13 +41808,6 @@ /obj/structure/cable, /turf/open/floor/plasteel, /area/maintenance/disposal/incinerator) -"cho" = ( -/obj/machinery/light, -/obj/machinery/atmospherics/pipe/simple/general/visible{ - dir = 5 - }, -/turf/open/floor/circuit/telecomms, -/area/science/xenobiology) "chp" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -41880,52 +41817,33 @@ }, /turf/closed/wall/r_wall, /area/maintenance/starboard/aft) -"chq" = ( -/obj/machinery/atmospherics/pipe/simple/general/visible{ - dir = 4 - }, -/turf/open/floor/circuit/telecomms, -/area/science/xenobiology) "chr" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/research{ - name = "Kill Chamber"; +/obj/machinery/door/window/northleft{ + dir = 4; + name = "Containment Pen 2"; req_access_txt = "55" }, -/obj/machinery/atmospherics/pipe/simple/general/visible{ +/obj/effect/turf_decal/stripes/line{ dir = 4 }, -/turf/open/floor/plating, +/obj/effect/turf_decal/delivery, +/turf/open/floor/plasteel, /area/science/xenobiology) "chs" = ( -/obj/machinery/light, -/obj/machinery/atmospherics/pipe/manifold/general/visible, -/turf/open/floor/circuit/telecomms, -/area/science/xenobiology) -"cht" = ( -/obj/machinery/atmospherics/pipe/simple/general/visible{ - dir = 4 - }, -/obj/structure/disposalpipe/segment, -/turf/open/floor/plasteel/white, -/area/science/xenobiology) -"chu" = ( -/obj/machinery/atmospherics/pipe/simple/general/visible{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/turf/open/floor/plasteel/white, -/area/science/xenobiology) -"chv" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/structure/disposalpipe/segment{ - dir = 5 +/obj/machinery/door/window/northleft{ + base_state = "right"; + dir = 8; + icon_state = "right"; + name = "Containment Pen 2"; + req_access_txt = "55" }, /obj/structure/cable, -/turf/open/floor/plating, -/area/maintenance/starboard/aft) +/obj/machinery/door/poddoor/preopen{ + id = "xenobio2"; + name = "Xenobio Pen 2 Blast Door" + }, +/turf/open/floor/engine, +/area/science/xenobiology) "chw" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 10 @@ -42264,21 +42182,12 @@ }, /turf/open/floor/plasteel/white, /area/medical/chemistry) -"ciI" = ( -/obj/structure/disposalpipe/segment, -/turf/open/floor/plating, -/area/maintenance/starboard/aft) "ciJ" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plating{ icon_state = "platingdmg3" }, /area/maintenance/starboard/aft) -"ciK" = ( -/obj/structure/rack, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/open/floor/plating, -/area/maintenance/starboard/aft) "ciL" = ( /obj/effect/spawner/structure/window/reinforced/tinted, /turf/open/floor/plating, @@ -42543,23 +42452,6 @@ }, /turf/open/floor/plasteel/white, /area/medical/chemistry) -"cjB" = ( -/obj/machinery/atmospherics/pipe/simple/general/visible{ - dir = 9 - }, -/obj/structure/table, -/obj/item/folder/white, -/obj/item/pen, -/obj/effect/turf_decal/stripes/line{ - dir = 9 - }, -/turf/open/floor/plasteel, -/area/science/xenobiology) -"cjC" = ( -/obj/structure/grille, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/open/floor/plating, -/area/maintenance/starboard/aft) "cjD" = ( /turf/closed/wall/r_wall, /area/maintenance/solars/starboard/aft) @@ -42804,37 +42696,16 @@ /obj/structure/cable, /turf/open/floor/plasteel, /area/maintenance/disposal/incinerator) -"ckl" = ( -/obj/machinery/vending/wardrobe/chem_wardrobe, -/obj/machinery/light{ - dir = 8 - }, -/obj/machinery/light{ - dir = 8 - }, -/turf/open/floor/plasteel/white, -/area/medical/chemistry) "ckm" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 8 }, /turf/open/floor/plasteel/white, /area/medical/chemistry) -"ckn" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/structure/disposalpipe/segment, -/turf/open/floor/plating, -/area/science/xenobiology) "cko" = ( /obj/structure/disposalpipe/segment, /turf/closed/wall, /area/maintenance/starboard/aft) -"ckp" = ( -/obj/structure/rack, -/obj/effect/spawner/lootdrop/maintenance/two, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/open/floor/plating, -/area/maintenance/starboard/aft) "ckr" = ( /obj/structure/reagent_dispensers/fueltank, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, @@ -43134,12 +43005,6 @@ }, /turf/open/floor/plating, /area/maintenance/starboard/aft) -"cls" = ( -/obj/structure/rack, -/obj/effect/spawner/lootdrop/maintenance/three, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/open/floor/plating, -/area/maintenance/starboard/aft) "clt" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -43357,7 +43222,7 @@ }, /area/maintenance/starboard/aft) "cmr" = ( -/obj/structure/closet/toolcloset, +/obj/structure/rack, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 5 }, @@ -43661,11 +43526,6 @@ /obj/structure/cable, /turf/open/floor/plating, /area/maintenance/starboard/aft) -"cnJ" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/spawner/lootdrop/maintenance, -/turf/open/floor/plating, -/area/maintenance/starboard/aft) "cnX" = ( /obj/structure/extinguisher_cabinet{ pixel_x = -5; @@ -44598,20 +44458,12 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/closed/wall/r_wall, /area/engine/engineering) -"csk" = ( -/obj/structure/disposalpipe/segment, -/turf/open/floor/plating/airless, -/area/space/nearstation) "csl" = ( /obj/structure/transit_tube/curved{ dir = 4 }, /turf/open/space, /area/space/nearstation) -"csm" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plasteel/white, -/area/medical/chemistry) "csn" = ( /obj/structure/transit_tube/horizontal, /turf/open/space, @@ -46592,11 +46444,6 @@ }, /turf/open/floor/plasteel, /area/crew_quarters/bar) -"czQ" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/structure/disposalpipe/segment, -/turf/open/floor/plating, -/area/maintenance/starboard/aft) "czR" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/cable, @@ -46611,15 +46458,9 @@ }, /area/maintenance/starboard/aft) "czU" = ( -/obj/structure/disposalpipe/segment{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/structure/cable, -/turf/open/floor/plating, -/area/maintenance/starboard/aft) +/obj/structure/disposalpipe/segment, +/turf/open/floor/plating/airless, +/area/space/nearstation) "czW" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 9 @@ -46647,24 +46488,8 @@ /turf/open/floor/plating, /area/maintenance/starboard/aft) "czZ" = ( -/obj/structure/chair, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/turf/open/floor/plating, -/area/maintenance/starboard/aft) -"cAa" = ( -/obj/structure/chair, -/obj/item/storage/fancy/cigarettes, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/disposalpipe/segment, /turf/open/floor/plating, /area/maintenance/starboard/aft) "cAb" = ( @@ -47185,6 +47010,9 @@ /obj/structure/disposalpipe/segment, /obj/effect/landmark/event_spawn, /obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/general/visible{ + dir = 4 + }, /turf/open/floor/plasteel/white, /area/science/xenobiology) "cBH" = ( @@ -48659,9 +48487,6 @@ }, /turf/open/floor/plating, /area/hallway/secondary/entry) -"cMl" = ( -/turf/open/space, -/area/space/nearstation) "cMm" = ( /obj/effect/spawner/structure/window/plasma/reinforced, /turf/open/floor/plating, @@ -48843,6 +48668,18 @@ }, /turf/closed/wall, /area/maintenance/starboard/aft) +"cSb" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/delivery, +/obj/machinery/door/window/northleft{ + dir = 4; + name = "Containment Pen 5"; + req_access_txt = "55" + }, +/turf/open/floor/plasteel, +/area/science/xenobiology) "cSz" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -49152,26 +48989,14 @@ /obj/structure/cable, /turf/open/floor/plating, /area/science/xenobiology) -"cTY" = ( -/obj/structure/sign/poster/official/safety_internals{ - pixel_x = -32 - }, -/turf/open/floor/plasteel/white, -/area/science/xenobiology) -"cTZ" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 8 - }, -/turf/open/floor/plasteel/white, -/area/science/xenobiology) "cVb" = ( /turf/closed/wall, /area/hallway/secondary/service) "cVu" = ( +/obj/structure/cable, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 5 }, -/obj/structure/cable, /turf/open/floor/plating, /area/maintenance/starboard/aft) "cYY" = ( @@ -49206,6 +49031,18 @@ /mob/living/carbon/monkey, /turf/open/floor/engine, /area/science/genetics) +"ddD" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/table, +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/obj/structure/cable, +/obj/item/toy/plush/slimeplushie, +/turf/open/floor/plasteel, +/area/science/xenobiology) "dfx" = ( /obj/structure/disposalpipe/segment, /turf/open/floor/plating, @@ -49223,10 +49060,39 @@ /obj/machinery/chem_heater, /turf/open/floor/plasteel/white, /area/medical/chemistry) +"dni" = ( +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/cable, +/obj/structure/chair{ + dir = 1 + }, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) +"dnY" = ( +/obj/structure/cable, +/obj/machinery/door/poddoor/preopen{ + id = "xenobio10"; + name = "Xenobio Pen 10 Blast Door" + }, +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/science/xenobiology) "dqu" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/closed/wall/r_wall, /area/maintenance/disposal/incinerator) +"dqL" = ( +/obj/machinery/atmospherics/pipe/simple/general/visible{ + dir = 9 + }, +/obj/structure/cable, +/turf/open/floor/plasteel/white, +/area/science/xenobiology) "dtc" = ( /obj/machinery/photocopier, /turf/open/floor/wood, @@ -49251,6 +49117,14 @@ }, /turf/open/floor/plating, /area/maintenance/starboard/aft) +"dxb" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "dyk" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 8 @@ -49280,6 +49154,13 @@ /obj/effect/turf_decal/tile/blue, /turf/open/floor/plasteel/white, /area/medical/medbay/central) +"dBM" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/processor/slime, +/turf/open/floor/plasteel/white, +/area/science/xenobiology) "dCG" = ( /obj/structure/sign/warning/vacuum/external{ pixel_x = -32 @@ -49355,6 +49236,20 @@ /obj/structure/table/reinforced, /turf/open/floor/plasteel/white, /area/science/mixing) +"dOm" = ( +/obj/machinery/door/window/northleft{ + base_state = "right"; + dir = 8; + icon_state = "right"; + name = "Containment Pen 6"; + req_access_txt = "55" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/delivery, +/turf/open/floor/plasteel, +/area/science/xenobiology) "dPH" = ( /obj/machinery/light, /obj/structure/cable, @@ -49386,6 +49281,12 @@ }, /turf/open/floor/plasteel/white, /area/medical/chemistry) +"egr" = ( +/obj/machinery/atmospherics/pipe/simple/general/visible{ + dir = 6 + }, +/turf/open/floor/plasteel/white, +/area/science/xenobiology) "eja" = ( /obj/effect/turf_decal/bot, /obj/machinery/computer/nanite_chamber_control{ @@ -49454,6 +49355,16 @@ /obj/structure/grille, /turf/open/space/basic, /area/space/nearstation) +"eSG" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/machinery/camera/autoname{ + icon_state = "camera"; + dir = 5 + }, +/turf/open/floor/engine, +/area/science/xenobiology) "eUr" = ( /obj/machinery/door/poddoor/preopen{ id = "testlab"; @@ -49481,6 +49392,24 @@ }, /turf/closed/wall/r_wall, /area/science/mixing/chamber) +"fep" = ( +/obj/structure/window/reinforced, +/turf/open/floor/engine, +/area/science/xenobiology) +"fif" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/cable, +/obj/structure/chair{ + dir = 1 + }, +/obj/item/storage/fancy/cigarettes, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "flc" = ( /obj/item/assembly/prox_sensor{ pixel_x = -4; @@ -49519,6 +49448,20 @@ /obj/structure/cable, /turf/open/floor/plasteel, /area/hallway/secondary/service) +"fpR" = ( +/obj/machinery/door/window/northleft{ + base_state = "right"; + dir = 8; + icon_state = "right"; + name = "Containment Pen 9"; + req_access_txt = "55" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/delivery, +/turf/open/floor/plasteel, +/area/science/xenobiology) "fqQ" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -49590,6 +49533,10 @@ /obj/structure/table, /turf/open/floor/plasteel, /area/hydroponics) +"fGg" = ( +/obj/effect/landmark/start/paramedic, +/turf/open/floor/plasteel/white, +/area/medical/sleeper) "fGF" = ( /obj/machinery/portable_atmospherics/scrubber, /obj/effect/turf_decal/bot, @@ -49598,6 +49545,20 @@ }, /turf/open/floor/plasteel, /area/science/mixing) +"fJT" = ( +/obj/machinery/door/window/northleft{ + base_state = "right"; + dir = 8; + icon_state = "right"; + name = "Containment Pen 7"; + req_access_txt = "55" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/delivery, +/turf/open/floor/plasteel, +/area/science/xenobiology) "fPm" = ( /obj/structure/disposalpipe/segment{ dir = 6 @@ -49629,6 +49590,18 @@ /obj/item/stack/sheet/glass/fifty, /turf/open/floor/plating, /area/maintenance/department/medical/morgue) +"gdq" = ( +/obj/machinery/button/door{ + id = "xenobio2"; + layer = 3.3; + name = "Xenobio Pen 2 Blast Doors"; + pixel_y = 4; + req_access_txt = "55" + }, +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/turf/open/floor/plating, +/area/science/xenobiology) "gjb" = ( /obj/machinery/vending/cigarette, /obj/effect/turf_decal/tile/red, @@ -49691,6 +49664,18 @@ }, /turf/closed/wall, /area/maintenance/starboard) +"gCA" = ( +/obj/machinery/button/door{ + id = "xenobio8"; + layer = 3.3; + name = "Xenobio Pen 8 Blast Doors"; + pixel_y = 4; + req_access_txt = "55" + }, +/obj/structure/cable, +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/science/xenobiology) "gES" = ( /obj/effect/turf_decal/tile/neutral{ dir = 1 @@ -49704,6 +49689,13 @@ }, /turf/open/floor/plasteel, /area/vacant_room/commissary) +"gGJ" = ( +/obj/machinery/camera/autoname{ + icon_state = "camera"; + dir = 5 + }, +/turf/open/floor/engine, +/area/science/xenobiology) "gHj" = ( /obj/effect/turf_decal/tile/purple{ dir = 1 @@ -49822,6 +49814,12 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/plating, /area/maintenance/fore) +"hnW" = ( +/obj/effect/spawner/structure/window/reinforced{ + pixel_w = 1 + }, +/turf/closed/wall, +/area/maintenance/starboard/aft) "hox" = ( /obj/machinery/door/firedoor/heavy, /turf/open/floor/plasteel/white/side{ @@ -49834,6 +49832,20 @@ }, /turf/open/floor/plasteel/white, /area/medical/chemistry) +"hAo" = ( +/obj/machinery/door/window/northleft{ + base_state = "right"; + dir = 8; + icon_state = "right"; + name = "Containment Pen 8"; + req_access_txt = "55" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/delivery, +/turf/open/floor/plasteel, +/area/science/xenobiology) "hAK" = ( /obj/structure/table, /obj/item/storage/box/disks_nanite, @@ -49843,6 +49855,12 @@ /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, /turf/open/floor/plating, /area/maintenance/starboard/aft) +"hDb" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/engine, +/area/science/xenobiology) "hFg" = ( /obj/machinery/door/airlock/external{ name = "Port Docking Bay 1"; @@ -49851,6 +49869,30 @@ /obj/effect/mapping_helpers/airlock/cyclelink_helper, /turf/open/floor/plating, /area/hallway/secondary/entry) +"hGP" = ( +/obj/machinery/button/door{ + id = "xenobio3"; + layer = 3.3; + name = "Xenobio Pen 3 Blast Doors"; + pixel_y = 4; + req_access_txt = "55" + }, +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/turf/open/floor/plating, +/area/science/xenobiology) +"hHq" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/research/glass{ + name = "Kill Chamber"; + normalspeed = 0; + req_access_txt = "55" + }, +/obj/machinery/atmospherics/pipe/simple/general/visible{ + dir = 4 + }, +/turf/open/floor/plasteel/freezer, +/area/science/xenobiology) "hJq" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/door/airlock/medical/glass{ @@ -49858,7 +49900,7 @@ req_access_txt = "5; 33" }, /turf/open/floor/plating, -/area/medical/chemistry) +/area/maintenance/starboard/aft) "hQK" = ( /obj/machinery/light/small{ dir = 8 @@ -49907,6 +49949,22 @@ }, /turf/open/floor/plasteel/white, /area/medical/chemistry) +"iiu" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/machinery/computer/camera_advanced/xenobio{ + icon_state = "computer"; + dir = 4 + }, +/obj/effect/turf_decal/tile/purple{ + dir = 8 + }, +/obj/effect/turf_decal/tile/purple{ + dir = 1 + }, +/turf/open/floor/plasteel/white, +/area/science/xenobiology) "ijc" = ( /obj/structure/table, /obj/item/stack/sheet/metal/fifty, @@ -49979,12 +50037,35 @@ /obj/structure/reagent_dispensers/cooking_oil, /turf/open/floor/plasteel/showroomfloor, /area/crew_quarters/kitchen) +"iOI" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/rack, +/obj/item/wirecutters, +/obj/item/screwdriver, +/obj/item/storage/box/lights/tubes, +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/turf/open/floor/plasteel, +/area/science/xenobiology) "iQF" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/cable, /turf/open/floor/plasteel, /area/engine/engineering) +"iSv" = ( +/obj/machinery/door/window/northleft{ + dir = 4; + name = "Containment Pen 4"; + req_access_txt = "55" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/delivery, +/turf/open/floor/plasteel, +/area/science/xenobiology) "iTt" = ( /obj/item/radio/intercom{ desc = "Talk through this. It looks like it has been modified to not broadcast."; @@ -50009,6 +50090,11 @@ /obj/structure/cable, /turf/open/floor/plasteel, /area/hallway/secondary/service) +"jdH" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/lootdrop/maintenance/four, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "jiK" = ( /obj/structure/closet/toolcloset, /obj/effect/turf_decal/tile/yellow, @@ -50080,12 +50166,20 @@ /obj/structure/cable, /turf/open/floor/plating, /area/maintenance/fore) +"jsw" = ( +/obj/structure/disposalpipe/segment, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "jsP" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 4 }, /turf/open/floor/plasteel/white, /area/medical/chemistry) +"jtt" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/medical/chemistry) "jxy" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -50171,6 +50265,20 @@ /obj/item/stack/cable_coil, /turf/open/floor/plasteel/dark, /area/engine/engineering) +"jQV" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/open/floor/engine, +/area/science/xenobiology) +"jUW" = ( +/obj/machinery/camera/autoname{ + dir = 4; + icon_state = "camera" + }, +/obj/structure/cable, +/turf/open/floor/plasteel/white, +/area/science/xenobiology) "jVc" = ( /obj/effect/turf_decal/tile/blue{ dir = 4 @@ -50218,6 +50326,10 @@ }, /turf/open/floor/plasteel/white, /area/medical/chemistry) +"keQ" = ( +/obj/effect/decal/cleanable/dirt, +/turf/closed/wall, +/area/maintenance/starboard/aft) "keW" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/disposalpipe/sorting/mail{ @@ -50279,6 +50391,12 @@ "kul" = ( /turf/closed/wall, /area/engine/engine_smes) +"kvJ" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "kwA" = ( /obj/machinery/atmospherics/components/unary/portables_connector/visible{ dir = 8 @@ -50364,6 +50482,25 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/closed/wall, /area/security/detectives_office) +"kKM" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/machinery/disposal/bin, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/obj/machinery/light, +/obj/machinery/camera/autoname{ + icon_state = "camera"; + dir = 1 + }, +/obj/structure/cable, +/turf/open/floor/plasteel, +/area/science/xenobiology) "kLd" = ( /obj/machinery/disposal/bin, /obj/structure/disposalpipe/trunk{ @@ -50371,6 +50508,10 @@ }, /turf/open/floor/plasteel/dark, /area/hallway/primary/central) +"kLj" = ( +/obj/machinery/atmospherics/pipe/simple/general/visible, +/turf/open/floor/engine, +/area/science/xenobiology) "kLM" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 8 @@ -50464,6 +50605,18 @@ dir = 8 }, /area/science/research) +"kZR" = ( +/obj/structure/closet/toolcloset, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) +"lar" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/cable, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "lcg" = ( /obj/machinery/light{ dir = 4 @@ -50599,6 +50752,25 @@ }, /turf/open/floor/plasteel/white, /area/science/mixing) +"lOR" = ( +/obj/machinery/door/window/northleft{ + base_state = "right"; + dir = 8; + icon_state = "right"; + name = "Containment Pen 1"; + req_access_txt = "55" + }, +/obj/machinery/door/poddoor/preopen{ + id = "xenobio1"; + name = "Xenobio Pen 1 Blast Door" + }, +/obj/structure/cable, +/turf/open/floor/engine, +/area/science/xenobiology) +"lOY" = ( +/obj/structure/lattice/catwalk, +/turf/closed/wall/r_wall, +/area/maintenance/disposal/incinerator) "lQm" = ( /obj/machinery/camera{ c_tag = "Nanite Lab"; @@ -50623,6 +50795,13 @@ }, /turf/open/floor/plasteel, /area/science/misc_lab) +"lSv" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "lST" = ( /obj/structure/table, /obj/machinery/recharger, @@ -50633,6 +50812,27 @@ }, /turf/open/floor/plasteel, /area/science/misc_lab) +"lVv" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/door/poddoor/preopen{ + id = "xenobio4"; + name = "Xenobio Pen 4 Blast Door" + }, +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/turf/open/floor/plating, +/area/science/xenobiology) +"lVC" = ( +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/obj/structure/disposaloutlet{ + dir = 4 + }, +/turf/open/floor/engine, +/area/science/xenobiology) "lWA" = ( /obj/machinery/door/airlock/external{ name = "External Access"; @@ -50728,6 +50928,27 @@ }, /turf/open/floor/plasteel/white, /area/science/mixing) +"mPl" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/table/glass, +/obj/item/storage/box/monkeycubes{ + pixel_x = 2; + pixel_y = -2 + }, +/obj/machinery/button/door{ + name = "Containment Blast Doors"; + pixel_x = 1; + pixel_y = -26; + req_access_txt = "55"; + id = "xenobiomain" + }, +/turf/open/floor/plasteel, +/area/science/xenobiology) "mSf" = ( /obj/structure/chair/office{ dir = 1 @@ -50820,6 +51041,10 @@ /obj/structure/cable, /turf/open/floor/plating, /area/construction) +"nxx" = ( +/obj/structure/sign/warning/biohazard, +/turf/closed/wall/r_wall, +/area/science/xenobiology) "nzh" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel/dark, @@ -50890,6 +51115,16 @@ /obj/structure/cable, /turf/open/floor/carpet, /area/crew_quarters/heads/hos) +"nPP" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/disposalpipe/segment, +/obj/structure/cable, +/obj/machinery/door/poddoor/preopen{ + id = "xenobiomain"; + name = "containment blast door" + }, +/turf/open/floor/plating, +/area/science/xenobiology) "nQI" = ( /obj/machinery/light_switch{ pixel_x = -23 @@ -50982,13 +51217,19 @@ /obj/structure/cable, /turf/open/floor/plating, /area/maintenance/starboard/aft) -"nZl" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/structure/cable, -/turf/open/floor/plating{ - icon_state = "platingdmg3" +"nYU" = ( +/obj/machinery/door/window/northleft{ + dir = 4; + name = "Containment Pen 9"; + req_access_txt = "55" }, -/area/maintenance/starboard/aft) +/obj/machinery/door/poddoor/preopen{ + id = "xenobio9"; + name = "Xenobio Pen 9 Blast Door" + }, +/obj/structure/cable, +/turf/open/floor/engine, +/area/science/xenobiology) "ofT" = ( /obj/machinery/computer/bounty, /turf/open/floor/plasteel, @@ -51072,6 +51313,13 @@ /obj/machinery/light, /turf/open/floor/plating, /area/engine/engineering) +"oHH" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/components/binary/pump{ + dir = 8 + }, +/turf/open/floor/plasteel/white, +/area/science/xenobiology) "oHU" = ( /obj/machinery/atmospherics/pipe/simple/general/visible{ dir = 10 @@ -51096,6 +51344,25 @@ }, /turf/open/floor/plasteel, /area/science/mixing) +"oUU" = ( +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/floor/plasteel/white, +/area/science/xenobiology) +"oVV" = ( +/obj/machinery/button/door{ + id = "xenobio10"; + layer = 3.3; + name = "Xenobio Pen 10 Blast Doors"; + pixel_y = 4; + req_access_txt = "55" + }, +/obj/structure/cable, +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/science/xenobiology) "oXE" = ( /obj/machinery/door/airlock/maintenance{ id_tag = "commissarydoor"; @@ -51134,6 +51401,13 @@ }, /turf/open/floor/plasteel/white, /area/medical/chemistry) +"oZn" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "pfj" = ( /obj/machinery/power/apc{ areastring = "/area/storage/tools"; @@ -51160,6 +51434,18 @@ }, /turf/open/floor/plasteel, /area/storage/tools) +"pfy" = ( +/obj/machinery/button/door{ + id = "xenobio6"; + layer = 3.3; + name = "Xenobio Pen 6 Blast Doors"; + pixel_y = 4; + req_access_txt = "55" + }, +/obj/structure/cable, +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/science/xenobiology) "pgP" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -51197,6 +51483,29 @@ dir = 1 }, /area/engine/break_room) +"pmx" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/obj/machinery/door/poddoor/preopen{ + id = "xenobio1"; + name = "Xenobio Pen 1 Blast Door" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/sign/warning/electricshock, +/turf/open/floor/plating, +/area/science/xenobiology) +"pnj" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/chair/stool, +/turf/open/floor/plasteel/white, +/area/science/xenobiology) "poM" = ( /obj/machinery/holopad, /obj/effect/turf_decal/bot, @@ -51210,6 +51519,27 @@ /obj/item/toner, /turf/open/floor/plasteel, /area/quartermaster/office) +"pqR" = ( +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/obj/structure/disposaloutlet{ + dir = 8 + }, +/turf/open/floor/engine, +/area/science/xenobiology) +"prl" = ( +/obj/machinery/door/window/northleft{ + dir = 4; + name = "Containment Pen 1"; + req_access_txt = "55" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/delivery, +/turf/open/floor/plasteel, +/area/science/xenobiology) "prC" = ( /obj/item/radio/intercom{ pixel_x = -29 @@ -51240,6 +51570,15 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel/grimy, /area/security/detectives_office) +"pvI" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/siphon/on{ + name = "killroom vent"; + icon_state = "vent_map_siphon_on-2"; + dir = 1; + external_pressure_bound = 120 + }, +/turf/open/floor/plasteel/freezer, +/area/science/xenobiology) "pwd" = ( /obj/machinery/light/small{ dir = 8 @@ -51253,6 +51592,13 @@ }, /turf/open/floor/plasteel/white, /area/medical/chemistry) +"pxV" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 10 + }, +/obj/structure/cable, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "pzA" = ( /obj/effect/turf_decal/tile/neutral{ dir = 1 @@ -51296,6 +51642,15 @@ /obj/machinery/portable_atmospherics/scrubber, /turf/open/floor/plasteel, /area/science/mixing) +"pCj" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/obj/machinery/door/poddoor/preopen{ + id = "xenobio6"; + name = "Xenobio Pen 6 Blast Door" + }, +/turf/open/floor/plating, +/area/science/xenobiology) "pDu" = ( /obj/machinery/computer/nanite_cloud_controller, /obj/effect/turf_decal/bot, @@ -51398,6 +51753,15 @@ }, /turf/open/floor/plasteel/white, /area/science/genetics) +"pPs" = ( +/obj/structure/cable, +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/preopen{ + id = "xenobio3"; + name = "Xenobio Pen 3 Blast Door" + }, +/turf/open/floor/plating, +/area/science/xenobiology) "pSN" = ( /obj/effect/turf_decal/tile/purple, /obj/effect/turf_decal/tile/purple{ @@ -51530,6 +51894,15 @@ /obj/effect/turf_decal/bot, /turf/open/floor/plasteel/dark, /area/hallway/primary/central) +"qyX" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/obj/machinery/door/poddoor/preopen{ + id = "xenobiomain"; + name = "containment blast door" + }, +/turf/open/floor/plating, +/area/science/xenobiology) "qBr" = ( /obj/item/stack/ducts/fifty, /obj/item/stack/ducts/fifty, @@ -51564,13 +51937,8 @@ /turf/open/floor/plasteel, /area/science/mixing) "qQH" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable, +/obj/effect/spawner/lootdrop/minor/bowler_or_that, +/obj/structure/rack, /turf/open/floor/plating, /area/maintenance/starboard/aft) "qRW" = ( @@ -51612,6 +51980,18 @@ /obj/item/reagent_containers/food/drinks/beer, /turf/open/floor/plating, /area/maintenance/starboard/aft) +"rox" = ( +/obj/structure/window/reinforced{ + dir = 1; + pixel_y = 2 + }, +/turf/open/floor/engine, +/area/science/xenobiology) +"ryM" = ( +/obj/structure/rack, +/obj/effect/spawner/lootdrop/maintenance/three, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "rAt" = ( /obj/effect/turf_decal/tile/red{ dir = 4 @@ -51816,6 +52196,19 @@ /obj/structure/lattice, /turf/open/space, /area/space) +"sAk" = ( +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 1; + pixel_y = 2 + }, +/obj/structure/disposaloutlet{ + dir = 8 + }, +/turf/open/floor/engine, +/area/science/xenobiology) "sHk" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 6 @@ -51867,6 +52260,18 @@ }, /turf/open/floor/engine, /area/science/misc_lab) +"sUw" = ( +/obj/machinery/button/door{ + id = "xenobio4"; + layer = 3.3; + name = "Xenobio Pen 4 Blast Doors"; + pixel_y = 4; + req_access_txt = "55" + }, +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/turf/open/floor/plating, +/area/science/xenobiology) "sXy" = ( /obj/machinery/door/airlock/external{ name = "Security External Airlock"; @@ -51877,6 +52282,18 @@ }, /turf/open/floor/plating, /area/security/main) +"sZy" = ( +/obj/machinery/button/door{ + id = "xenobio9"; + layer = 3.3; + name = "Xenobio Pen 9 Blast Doors"; + pixel_y = 4; + req_access_txt = "55" + }, +/obj/structure/cable, +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/science/xenobiology) "tal" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/closed/wall, @@ -51918,17 +52335,6 @@ /obj/machinery/dna_scannernew, /turf/open/floor/plasteel/white, /area/science/genetics) -"tfg" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/structure/cable, -/turf/open/floor/plating, -/area/maintenance/starboard/aft) "tgl" = ( /obj/effect/turf_decal/stripes/line{ dir = 8 @@ -51955,6 +52361,10 @@ }, /turf/open/floor/plasteel/white, /area/science/mixing) +"tkC" = ( +/obj/structure/grille, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "tqd" = ( /obj/machinery/light/small{ dir = 1 @@ -52014,6 +52424,10 @@ }, /turf/open/floor/plasteel, /area/security/courtroom) +"trt" = ( +/obj/machinery/atmospherics/components/unary/portables_connector/visible, +/turf/open/floor/engine, +/area/science/xenobiology) "tsw" = ( /obj/structure/table, /obj/item/storage/toolbox/emergency, @@ -52038,6 +52452,21 @@ /obj/structure/cable, /turf/open/floor/plasteel, /area/security/brig) +"twh" = ( +/obj/machinery/atmospherics/pipe/simple/general/visible{ + dir = 5 + }, +/turf/open/floor/plasteel/white, +/area/science/xenobiology) +"tCh" = ( +/obj/structure/cable, +/obj/effect/spawner/structure/window/reinforced, +/obj/machinery/door/poddoor/preopen{ + id = "xenobio2"; + name = "Xenobio Pen 2 Blast Door" + }, +/turf/open/floor/plating, +/area/science/xenobiology) "tDw" = ( /obj/machinery/light_switch{ pixel_y = 28 @@ -52064,16 +52493,42 @@ }, /turf/open/floor/plasteel/white, /area/medical/medbay/central) +"tJc" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 4; + external_pressure_bound = 140; + name = "killroom vent"; + pressure_checks = 0 + }, +/obj/machinery/light, +/turf/open/floor/plasteel/freezer, +/area/science/xenobiology) "tKG" = ( /obj/machinery/light/small{ dir = 4 }, /turf/open/floor/engine, /area/science/misc_lab) +"tLf" = ( +/obj/effect/spawner/lootdrop/two_percent_xeno_egg_spawner, +/turf/open/floor/engine, +/area/science/xenobiology) "tMl" = ( /obj/effect/turf_decal/loading_area, /turf/open/floor/plasteel/showroomfloor, /area/crew_quarters/kitchen) +"tPW" = ( +/obj/machinery/door/poddoor/preopen{ + id = "xenobio7"; + name = "Xenobio Pen 7 Blast Door" + }, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/engine, +/area/science/xenobiology) "tQk" = ( /obj/machinery/camera{ c_tag = "Auxiliary Tool Storage" @@ -52131,6 +52586,15 @@ }, /turf/open/floor/plasteel, /area/crew_quarters/locker) +"ueE" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/general/visible{ + dir = 4 + }, +/turf/open/floor/plasteel/white, +/area/science/xenobiology) "uhH" = ( /obj/item/wrench, /obj/item/weldingtool, @@ -52141,6 +52605,18 @@ /obj/structure/rack, /turf/open/floor/plasteel/dark, /area/engine/engineering) +"ujh" = ( +/obj/machinery/button/door{ + id = "xenobio1"; + layer = 3.3; + name = "Xenobio Pen 1 Blast Doors"; + pixel_y = 4; + req_access_txt = "55" + }, +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/turf/open/floor/plating, +/area/science/xenobiology) "ulo" = ( /obj/effect/turf_decal/delivery, /obj/machinery/atmospherics/pipe/simple/general/visible{ @@ -52162,6 +52638,12 @@ }, /turf/open/floor/plasteel, /area/science/mixing) +"usX" = ( +/obj/machinery/atmospherics/pipe/simple/general/visible{ + dir = 9 + }, +/turf/open/floor/plasteel/freezer, +/area/science/xenobiology) "uvi" = ( /obj/effect/turf_decal/stripes/line, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -52169,12 +52651,30 @@ }, /turf/open/floor/plasteel, /area/science/misc_lab) +"uyS" = ( +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/obj/machinery/door/poddoor/preopen{ + id = "xenobio1"; + name = "Xenobio Pen 1 Blast Door" + }, +/turf/open/floor/plating, +/area/science/xenobiology) "uzl" = ( /obj/effect/turf_decal/stripes/line{ dir = 6 }, /turf/open/floor/plasteel, /area/science/nanite) +"uzt" = ( +/obj/structure/cable, +/obj/machinery/door/poddoor/preopen{ + id = "xenobio7"; + name = "Xenobio Pen 7 Blast Door" + }, +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/science/xenobiology) "uCq" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable, @@ -52186,10 +52686,6 @@ /obj/effect/turf_decal/bot, /turf/open/floor/plasteel/dark, /area/science/nanite) -"uDP" = ( -/obj/machinery/light, -/turf/open/floor/plasteel/white, -/area/medical/chemistry) "uES" = ( /obj/machinery/door/firedoor/heavy, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ @@ -52197,6 +52693,10 @@ }, /turf/open/floor/plasteel/white, /area/science/mixing) +"uGz" = ( +/obj/machinery/vending/wardrobe/chem_wardrobe, +/turf/open/floor/plasteel/white, +/area/medical/chemistry) "uHA" = ( /obj/machinery/firealarm{ pixel_y = 24 @@ -52310,6 +52810,19 @@ dir = 8 }, /area/science/research) +"vdT" = ( +/obj/machinery/door/window/northleft{ + dir = 4; + name = "Containment Pen 7"; + req_access_txt = "55" + }, +/obj/machinery/door/poddoor/preopen{ + id = "xenobio7"; + name = "Xenobio Pen 7 Blast Door" + }, +/obj/structure/cable, +/turf/open/floor/engine, +/area/science/xenobiology) "vhn" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -52574,6 +53087,11 @@ /obj/structure/cable, /turf/open/floor/plasteel, /area/hallway/secondary/service) +"wtc" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden, +/obj/structure/cable, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "wBd" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 6 @@ -52641,9 +53159,6 @@ /obj/structure/cable, /turf/open/floor/plating, /area/maintenance/starboard/aft) -"wRd" = ( -/turf/open/space/basic, -/area/space/nearstation) "wUs" = ( /obj/structure/closet/secure_closet/detective, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ @@ -52669,6 +53184,19 @@ }, /turf/open/floor/plasteel, /area/hallway/secondary/exit) +"wYm" = ( +/obj/machinery/door/poddoor/preopen{ + id = "xenobio8"; + name = "Xenobio Pen 8 Blast Door" + }, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/sign/warning/electricshock, +/turf/open/floor/plating, +/area/science/xenobiology) "wZy" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/supply/hidden, @@ -52683,6 +53211,19 @@ /obj/structure/closet/emcloset, /turf/open/floor/plating, /area/maintenance/starboard/aft) +"xbN" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/door/poddoor/preopen{ + id = "xenobio6"; + name = "Xenobio Pen 6 Blast Door" + }, +/obj/structure/cable, +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/sign/warning/electricshock, +/turf/open/floor/plating, +/area/science/xenobiology) "xeP" = ( /obj/effect/turf_decal/tile/purple{ dir = 1 @@ -52785,6 +53326,15 @@ "xwN" = ( /turf/open/floor/plating, /area/engine/engine_smes) +"xzi" = ( +/obj/structure/cable, +/obj/machinery/door/poddoor/preopen{ + id = "xenobio6"; + name = "Xenobio Pen 6 Blast Door" + }, +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/science/xenobiology) "xzN" = ( /obj/machinery/door/airlock/external{ name = "Common Mining Shuttle Bay" @@ -52831,6 +53381,16 @@ /obj/structure/closet/radiation, /turf/open/floor/plasteel/dark, /area/science/genetics) +"xYx" = ( +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/obj/structure/window/reinforced, +/obj/structure/disposaloutlet{ + dir = 4 + }, +/turf/open/floor/engine, +/area/science/xenobiology) "xYA" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -52848,10 +53408,43 @@ }, /turf/open/floor/plasteel, /area/security/courtroom) +"xZg" = ( +/obj/machinery/door/window/northleft{ + base_state = "right"; + dir = 8; + icon_state = "right"; + name = "Containment Pen 4"; + req_access_txt = "55" + }, +/obj/structure/cable, +/obj/machinery/door/poddoor/preopen{ + id = "xenobio4"; + name = "Xenobio Pen 4 Blast Door" + }, +/turf/open/floor/engine, +/area/science/xenobiology) "yay" = ( /obj/machinery/computer/med_data, /turf/open/floor/plasteel/grimy, /area/security/detectives_office) +"yck" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/obj/machinery/door/poddoor/preopen{ + id = "xenobio5"; + name = "Xenobio Pen 5 Blast Door" + }, +/obj/structure/sign/warning/electricshock, +/turf/open/floor/plating, +/area/science/xenobiology) +"ydc" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plating, +/area/maintenance/starboard/aft) "ydA" = ( /obj/effect/turf_decal/tile/blue{ dir = 4 @@ -52895,6 +53488,25 @@ }, /turf/open/floor/plasteel/dark, /area/science/nanite) +"yjr" = ( +/obj/machinery/atmospherics/pipe/simple/general/visible{ + dir = 4 + }, +/turf/open/floor/plasteel/white, +/area/science/xenobiology) +"ylC" = ( +/obj/machinery/door/window/northleft{ + dir = 4; + name = "Containment Pen 6"; + req_access_txt = "55" + }, +/obj/machinery/door/poddoor/preopen{ + id = "xenobio6"; + name = "Xenobio Pen 6 Blast Door" + }, +/obj/structure/cable, +/turf/open/floor/engine, +/area/science/xenobiology) (1,1,1) = {" aaa @@ -90052,7 +90664,7 @@ bAs bvj bCL bxO -bDR +fGg bDR bIk bJC @@ -91874,7 +92486,7 @@ bKH bzs bzs bzs -bzs +cNW cmd cmd cmd @@ -91888,9 +92500,9 @@ cmd cmd cmd cmd -aag -aag -aag +cmd +cmd +lOY aaa aaa aaf @@ -92131,24 +92743,24 @@ bKL keW cbM cdJ -hTU +mtK cfm cgc qBr ciF cjw -ckl +uGz clk xfL vQQ jox nEk djq +bip +bip +bip hTU -aaf -aaf -aaa -aaa +aoV aaa aaa aaa @@ -92398,13 +93010,13 @@ iMP bjL bjL bjL +bjL +bjL +bjL +bjL cmi bip -bip hTU -wRd -aaa -aaa aaa aaa aaa @@ -92647,6 +93259,8 @@ bJs cdK ceH cfn +cfn +cfn cgd bjL bjL @@ -92654,14 +93268,12 @@ bjL bjL bjL bjL +bjL +bjL cmi xYA bip -uDP vjm -wRd -aaa -aaa aaa aaa aaa @@ -92904,21 +93516,21 @@ ccK ccM ceJ kdR +bjL +bjL cgf bjL bjL bjL bjL bjL +bjL +bjL cmi xYA xYA bip -bip -csm -wRd -aaa -aaa +jtt aaa aaa aaa @@ -93161,22 +93773,22 @@ ccJ bLS hJq cfp +cfp +cfp cge cfp cfp cfp +cfp +cfp ckm cln cmh cnd cnE bip -bip -csm -cMl -aaa -aaa -aaa +jtt +aoV aaa aaa aaa @@ -93418,21 +94030,21 @@ ccL ccM ceJ xUg +bjL +bjL cgf bjL bjL bjL +bjL +bjL igT cAe cmj cne xYA bip -bip -csm -wRd -aaa -aaa +jtt aaa aaa aaa @@ -93675,8 +94287,12 @@ bJs bFr ceJ bjL +bjL +bjL cgf bjL +bjL +bjL bmT bjL bjL @@ -93685,11 +94301,7 @@ lwc fPm lwc bip -bip -csm -wRd -aaa -aaa +jtt aaa aaa aaa @@ -93930,10 +94542,14 @@ caS caO ccN bHd -hTU +mtK +bip +bip bip rZB rFI +rFI +rFI jsP oBu cfn @@ -93942,11 +94558,7 @@ cgd cng bip bip -bip -csm -wRd -aaa -aaa +jtt aaa aaa aaa @@ -94187,10 +94799,14 @@ bJs bFr ccM cdN -hTU +mtK +bip +bip bip mSR haX +bip +bip ciH xYA hpH @@ -94199,11 +94815,7 @@ mSR cnf bip bip -bip -csm -wRd -aaa -aaa +jtt aaa aaa aaa @@ -94446,21 +95058,21 @@ cNY cNY rGg rGg +rGg +rGg cgj rGg rGg +rGg +rGg chp -mtK +hTU clp mSR cnf bip bip -bip -csm -wRd -aaa -aaa +jtt aaa aaa aaa @@ -94703,21 +95315,21 @@ ccO nXU nXU nXU +nXU +nXU cnH nXU +kvJ +kvJ jCq czY -mtK +hTU bip mSR lZN bip bip -bip -csm -wRd -aaa -aaa +jtt aaa aaa aaa @@ -94960,21 +95572,21 @@ bDb bDb bDb bDb +bDb +bDb +bDb +bDb cNW cNW ccq czY -mtK +hTU bip mSR cnf bip bip -bip -csm -wRd -aaa -aaa +jtt aaa aaa aaa @@ -95193,45 +95805,45 @@ byf bDb bEm bEm -bEm +tLf bDb bJH bKW bMg bIh -bOx +iiu bPx -bJN -bRT -bEm -bEm -bJN -bRT -bEm -bEm -bJN -bRT -bEm -bEm bDb -cfr -cho +bRT +tJc bDb +bEm +hDb +bEm +rox +bEm +bEm +rox +eSG +bEm +rox +bEm +bEm +rox +hDb +gGJ +uyS aaa -cNW +cOT ccq czY -cOT +jtt bip mSR cnf bip bip -bip -csm -wRd -aaa -aaa +jtt aaa aaa aaa @@ -95458,37 +96070,37 @@ bMi bIh bIP bPA -bJN +bDb bRU +usX +bDb bEm -bEm -bJN -bRU bXe bEm -bJN -bRU +rox +bXe +bEm +rox bEm bEm -bDb -cgi -chq -ccQ +rox +bEm +bEm +rox +bEm +bEm +uyS aaa cOT ccq czY -cOT +jtt bip mSR efK bip bip -bip -csm -wRd -aaa -aaa +jtt aaa aaa aaa @@ -95713,39 +96325,39 @@ bJJ bKX bMh bIh -bOx +dBM bPz -bJN +bDb bRU +pvI +bDb +pqR bEm bEm -bJN -bRU +sAk bEm bEm -bJN -bRU +sAk +bEm +bEm +sAk +bEm +bEm +sAk bEm cBz -bDb -cgi -chq -ccQ +uyS aaa cOT ccq czY -cOT +jtt bip mSR bip bip bip -bip -csm -wRd -aaa -aaa +jtt aaa aaa aaa @@ -95964,45 +96576,45 @@ bBV bDb bEn bEm -bEm -bEm +trt +kLj bJL bLa -bMi +twh bIh bPy -bPA -bJN -bRW +mPl +bDb +bRU bTb -bUe -bJN +bDb +yck bWl bXf -bWl -bJN +lVv +xZg bZV caV cbS -bDb +pPs cgl chs +tCh +pmx +lOR +uyS bDb aaa cNW ccq czY -mtK +hTU wBC mSR bip bip bip -bip -csm -wRd -aaa -aaa +jtt aaa aaa aaa @@ -96225,41 +96837,41 @@ bEm bIy bJK bKZ -bMi +yjr bIu bIO bPB -bLe -bRV +nxx +hHq bTa -bUd -bVi -bRV -bTa -bYf -bVi -bRV -bTa -cbR bDb +bVi +cSb +aGC +bRV +iSv +sUw +bRV +cbR +hGP cgk chr -bDb +gdq +cgk +prl +ujh +bIx aaa cNW cBN czY -mtK +hTU bip mSR bip bip bip -bip -csm -wRd -aaa -aaa +jtt aaa aaa aaa @@ -96482,41 +97094,41 @@ bEm bIx bJJ bLc -bMi +yjr bIh bOx bPD bQM -bMi +ueE +oUU +jUW bMk bMi -bVj bMi -bMk bMi -bZa bMi -bMk bMi -cTY -cTZ -chu +bMi +bMi +bMi +bMi +bMi ccQ -aaf -cOT -ccq -cAa +bMi +bMi +ddD +qyX +gXs cOT +fif +czY +jtt bip pxd bip bip bip -bip -csm -wRd -aaa -aaa +jtt aaa aaa aaa @@ -96739,41 +97351,41 @@ bEm bDb cTX bLb -bMk +oHH bIh bIQ bPC bQL cBG bTc -bTc -bTc -bTc -bTc -bTc -bTc -bTc -bTc ccP ccP ccP -cht -ckn -csk -czQ +ccP +ccP +ccP +ccP +ccP +ccP +ccP +ccP +ccP +ccP +ccP +ccP +iOI +nPP czU czZ -cOT +dni +czY +jtt bip bip bip bip bip -bip -csm -wRd -aaa -aaa +jtt aaa aaa aaa @@ -96999,38 +97611,38 @@ bJN bMm bNp bOx -bMi +egr bQN +dqL bMi -bMk bMi bVk bMi -bMk +bMi +bZb +bMi +bMi +bZb +bMi +bMi +bZb +bMi bMi bZb bMi bMk -bMi -cfy -cgn -cjB -ccQ -aaf +qyX +gXs cOT cgm czY -cOT +jtt bip bip bip bip bip -bip -csm -wRd -aaa -aaa +jtt aaa aaa aaa @@ -97261,33 +97873,33 @@ bLe bRY bTd bUg -bVi +oVV bWm -bTd bUg -bVi -bZW -bTd +sZy +fpR bUg -bDb -bDb -bDb +gCA +hAo +bUg +bSO +fJT +bUg +pfy +dOm +kKM bDb aaa cNW cgm czY -mtK +hTU bip bip bip bip bip -bip -csm -wRd -aaa -aaa +jtt aaa aaa aaa @@ -97511,37 +98123,41 @@ bIB bIB bJN bMo -bNp +pnj bOx bPH bJN bSa bTe bUh -bJN +dnY bWn bXg bYh -bJN +nYU bZX caW cbU -bDb -aaf -aaf -aaa +wYm +uzt +vdT +tPW +xzi +ylC +xbN +bIx aaa cNW cgm czY -mtK -bip +hTU bip bip bip iKL bip -hTU +mtK +cNW cNW cOT cOT @@ -97609,10 +98225,6 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa "} (175,1,1) = {" aaa @@ -97769,37 +98381,41 @@ bIA bJN bMn bNp -bOz +bOx bPG bJN bEm bEm -bRU -bJN +xYx bEm bEm -bRU -bJN +xYx bEm bEm -bRU -bDb -aaf -aaa -aaa +xYx +bEm +bEm +xYx +bEm +bEm +xYx +bEm +bEm +lVC +pCj aaa cOT cgm czY -cOT +jtt bip bip bip bip bip -bip -hTU -cNW +mtK +jdH +keQ cOe cqu aag @@ -97866,10 +98482,6 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa "} (176,1,1) = {" aaa @@ -98031,31 +98643,35 @@ bPJ bJN bEm bEm -bRU -bJN +fep bEm bXe -bRU -bJN +fep bEm bEm -bRU -bDb -aaf -aaa -aaa +fep +bEm +bEm +fep +bEm +bEm +fep +bEm +bEm +bEm +pCj aaa cOT cgm czY -cOT +jtt bip bip bip bip bip mtK -mtK +cNW cNW cqu cOT @@ -98123,10 +98739,6 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa "} (177,1,1) = {" aaa @@ -98284,32 +98896,36 @@ bJN bMp bNp bOx -bPI +bPJ bJN bEm +aYb +fep +bEm +jQV +fep +bEm +bEm +fep bEm bUi -bJN +fep bEm bEm -bUi -bJN +fep bEm -bEm -bUi -bDb -aaf -aaf -aaa +jQV +aYb +pCj aaa cOT cgm czY -cOT +jtt bip bip oZc -hpH +bip bip mtK cwy @@ -98380,10 +98996,6 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa "} (178,1,1) = {" aaa @@ -98555,9 +99167,13 @@ bDb bDb bDb bDb -cNW -cNW -cNW +bDb +bDb +bDb +bDb +bDb +bDb +bDb cNW cNW czX @@ -98637,10 +99253,6 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa "} (179,1,1) = {" aaa @@ -98815,6 +99427,10 @@ xaZ cOe cOe cOe +cOe +cOe +cOe +cOe czG czR czW @@ -98822,8 +99438,8 @@ cAb cko clq cmq -ciI -cnJ +jsw +jsw cri cTI cmn @@ -98894,10 +99510,6 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa "} (180,1,1) = {" aaa @@ -99071,8 +99683,12 @@ wQy nXU nXU ceM -cNZ +kvJ cgo +dxb +ydc +ydc +wtc czS cOb cAd @@ -99086,11 +99702,7 @@ cNW cNW cNW cNW -cNW -aaa -aaa -aaa -aaa +hnW aaa aaa aaa @@ -99329,7 +99941,11 @@ cNY cNY nWA cNY -tfg +cNY +oZn +cNY +cNY +lar hBY cNW cNW @@ -99408,10 +100024,6 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa "} (182,1,1) = {" aaa @@ -99587,12 +100199,16 @@ cOe cPA cNW qQH +cvO +cOe +cNW +cgm chw -ciK -cjC -ckp -cls cmr +tkC +bNB +ryM +kZR cNW cOe cmo @@ -99608,10 +100224,6 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa aae aaa aaa @@ -99844,12 +100456,16 @@ hYR ceO cNW cgp -chv -nZl -czR -czR +cvO +cOe +cNW +pxV cVu -cdr +lSv +cOe +cOe +cOe +cOe cNW cOe cou @@ -99922,10 +100538,6 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa "} (184,1,1) = {" aaa @@ -100108,6 +100720,10 @@ cNW clt cdr cNW +cNW +cNW +cNW +cNW cOe bMB cOT @@ -100179,10 +100795,6 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa "} (185,1,1) = {" aaa @@ -100366,6 +100978,10 @@ cgr cms cNW cOe +cOe +cOe +cOe +cOe bNA cNW aaf @@ -100436,10 +101052,6 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa "} (186,1,1) = {" aaa @@ -100625,10 +101237,10 @@ cOe cOe cNW cNW -aaa -aaa -aaa -aaa +cNW +cNW +cNW +cNW aaa aaa aaa diff --git a/_maps/map_files/Donutstation/Donutstation.dmm b/_maps/map_files/Donutstation/Donutstation.dmm index 76a072d3408..514f10d783a 100644 --- a/_maps/map_files/Donutstation/Donutstation.dmm +++ b/_maps/map_files/Donutstation/Donutstation.dmm @@ -970,9 +970,7 @@ /obj/machinery/atmospherics/components/unary/vent_pump/siphon/atmos/nitrous_output{ dir = 8 }, -/turf/open/floor/engine/n2o{ - initial_gas_mix = "n2o=1000;TEMP=293.15" - }, +/turf/open/floor/engine/n2o, /area/engine/atmos) "acw" = ( /turf/open/floor/engine, @@ -1042,7 +1040,8 @@ /turf/open/floor/engine/vacuum, /area/science/mixing) "acF" = ( -/turf/open/floor/engine/airless, +/obj/machinery/portable_atmospherics/canister/air, +/turf/open/floor/engine/air, /area/engine/atmos) "acG" = ( /obj/structure/disposalpipe/segment{ @@ -1182,9 +1181,7 @@ /turf/open/floor/plasteel, /area/science/storage) "acT" = ( -/turf/open/floor/engine/n2o{ - initial_gas_mix = "n2o=1000;TEMP=293.15" - }, +/turf/open/floor/engine/n2o, /area/engine/atmos) "acU" = ( /obj/structure/bookcase, @@ -1979,9 +1976,7 @@ /area/medical/virology) "aeV" = ( /obj/machinery/air_sensor/atmos/nitrous_tank, -/turf/open/floor/engine/n2o{ - initial_gas_mix = "n2o=1000;TEMP=293.15" - }, +/turf/open/floor/engine/n2o, /area/engine/atmos) "aeW" = ( /obj/effect/decal/cleanable/dirt, @@ -4602,8 +4597,7 @@ dir = 1 }, /obj/machinery/camera{ - c_tag = "Cargo - Docking Bay North"; - dir = 2 + c_tag = "Cargo - Docking Bay North" }, /turf/open/floor/plasteel, /area/quartermaster/storage) @@ -5135,12 +5129,8 @@ }, /area/crew_quarters/kitchen) "anM" = ( -/obj/machinery/atmospherics/miner/n2o{ - max_ext_kpa = 2500 - }, -/turf/open/floor/engine/n2o{ - initial_gas_mix = "n2o=1000;TEMP=293.15" - }, +/obj/machinery/portable_atmospherics/canister/nitrous_oxide, +/turf/open/floor/engine/n2o, /area/engine/atmos) "anQ" = ( /obj/structure/sign/warning/docking{ @@ -8437,9 +8427,7 @@ /obj/machinery/atmospherics/components/unary/outlet_injector/atmos/nitrous_input{ dir = 8 }, -/turf/open/floor/engine/n2o{ - initial_gas_mix = "n2o=1000;TEMP=293.15" - }, +/turf/open/floor/engine/n2o, /area/engine/atmos) "axm" = ( /obj/effect/turf_decal/tile/neutral{ @@ -8450,7 +8438,7 @@ /area/hallway/primary/central) "axn" = ( /obj/effect/landmark/xeno_spawn, -/turf/open/floor/engine/airless, +/turf/open/floor/engine/air, /area/engine/atmos) "axo" = ( /obj/machinery/atmospherics/components/unary/portables_connector/visible{ @@ -8587,9 +8575,7 @@ /obj/machinery/atmospherics/components/unary/vent_pump/siphon/atmos/toxin_output{ dir = 8 }, -/turf/open/floor/engine/plasma{ - initial_gas_mix = "plasma=1000;TEMP=293.15" - }, +/turf/open/floor/engine/plasma, /area/engine/atmos) "axE" = ( /obj/effect/turf_decal/tile/purple{ @@ -8645,9 +8631,7 @@ }, /area/science/research) "axJ" = ( -/turf/open/floor/engine/plasma{ - initial_gas_mix = "plasma=1000;TEMP=293.15" - }, +/turf/open/floor/engine/plasma, /area/engine/atmos) "axK" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3, @@ -8785,9 +8769,7 @@ /area/engine/atmos) "aya" = ( /obj/effect/landmark/xeno_spawn, -/turf/open/floor/engine/plasma{ - initial_gas_mix = "plasma=1000;TEMP=293.15" - }, +/turf/open/floor/engine/plasma, /area/engine/atmos) "ayb" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3, @@ -8799,9 +8781,7 @@ /area/science/mixing) "ayc" = ( /obj/machinery/air_sensor/atmos/toxin_tank, -/turf/open/floor/engine/plasma{ - initial_gas_mix = "plasma=1000;TEMP=293.15" - }, +/turf/open/floor/engine/plasma, /area/engine/atmos) "ayd" = ( /obj/machinery/suit_storage_unit/atmos, @@ -8833,12 +8813,8 @@ /turf/open/floor/plasteel/dark, /area/engine/atmos) "ayh" = ( -/obj/machinery/atmospherics/miner/toxins{ - max_ext_kpa = 2500 - }, -/turf/open/floor/engine/plasma{ - initial_gas_mix = "plasma=1000;TEMP=293.15" - }, +/obj/machinery/portable_atmospherics/canister/toxins, +/turf/open/floor/engine/plasma, /area/engine/atmos) "ayi" = ( /obj/machinery/light/small{ @@ -8849,17 +8825,13 @@ dir = 8; network = list("ss13","Atmospherics") }, -/turf/open/floor/engine/plasma{ - initial_gas_mix = "plasma=1000;TEMP=293.15" - }, +/turf/open/floor/engine/plasma, /area/engine/atmos) "ayj" = ( /obj/machinery/atmospherics/components/unary/outlet_injector/atmos/toxin_input{ dir = 8 }, -/turf/open/floor/engine/plasma{ - initial_gas_mix = "plasma=1000;TEMP=293.15" - }, +/turf/open/floor/engine/plasma, /area/engine/atmos) "ayk" = ( /obj/machinery/atmospherics/components/unary/portables_connector/visible{ @@ -8891,9 +8863,7 @@ /obj/machinery/atmospherics/components/unary/vent_pump/siphon/atmos/carbon_output{ dir = 8 }, -/turf/open/floor/engine/co2{ - initial_gas_mix = "co2=1000;TEMP=293.15" - }, +/turf/open/floor/engine/co2, /area/engine/atmos) "ayo" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3{ @@ -9035,15 +9005,11 @@ /turf/open/floor/plasteel/dark, /area/engine/atmos) "ayD" = ( -/turf/open/floor/engine/co2{ - initial_gas_mix = "co2=1000;TEMP=293.15" - }, +/turf/open/floor/engine/co2, /area/engine/atmos) "ayF" = ( /obj/machinery/air_sensor/atmos/carbon_tank, -/turf/open/floor/engine/co2{ - initial_gas_mix = "co2=1000;TEMP=293.15" - }, +/turf/open/floor/engine/co2, /area/engine/atmos) "ayG" = ( /obj/machinery/atmospherics/pipe/simple/general/visible{ @@ -9136,12 +9102,8 @@ /turf/open/floor/plasteel/dark, /area/engine/atmos) "ayS" = ( -/obj/machinery/atmospherics/miner/carbon_dioxide{ - max_ext_kpa = 2500 - }, -/turf/open/floor/engine/co2{ - initial_gas_mix = "co2=1000;TEMP=293.15" - }, +/obj/machinery/portable_atmospherics/canister/carbon_dioxide, +/turf/open/floor/engine/co2, /area/engine/atmos) "ayT" = ( /obj/machinery/light/small{ @@ -9152,9 +9114,7 @@ dir = 8; network = list("ss13","Atmospherics") }, -/turf/open/floor/engine/co2{ - initial_gas_mix = "co2=1000;TEMP=293.15" - }, +/turf/open/floor/engine/co2, /area/engine/atmos) "ayU" = ( /obj/structure/closet/l3closet/scientist, @@ -9302,17 +9262,13 @@ /obj/machinery/atmospherics/components/unary/outlet_injector/atmos/carbon_input{ dir = 8 }, -/turf/open/floor/engine/co2{ - initial_gas_mix = "co2=1000;TEMP=293.15" - }, +/turf/open/floor/engine/co2, /area/engine/atmos) "azj" = ( /obj/machinery/atmospherics/components/unary/outlet_injector/atmos/nitrogen_input{ dir = 1 }, -/turf/open/floor/engine/n2{ - initial_gas_mix = "n2=1000;TEMP=293.15" - }, +/turf/open/floor/engine/n2, /area/engine/atmos) "azk" = ( /obj/machinery/atmospherics/components/binary/pump{ @@ -10845,55 +10801,45 @@ /area/engine/atmos) "aDD" = ( /obj/machinery/air_sensor/atmos/nitrogen_tank, -/turf/open/floor/engine/n2{ - initial_gas_mix = "n2=1000;TEMP=293.15" - }, +/turf/open/floor/engine/n2, /area/engine/atmos) "aDE" = ( /obj/machinery/atmospherics/components/unary/outlet_injector/atmos/air_input{ dir = 1 }, -/turf/open/floor/engine/airless, +/turf/open/floor/engine/air, /area/engine/atmos) "aDF" = ( /obj/machinery/air_sensor/atmos/air_tank, -/turf/open/floor/engine/airless, +/turf/open/floor/engine/air, /area/engine/atmos) "aDG" = ( /obj/machinery/atmospherics/components/unary/vent_pump/high_volume/siphon/atmos/air_output{ dir = 1 }, -/turf/open/floor/engine/airless, +/turf/open/floor/engine/air, /area/engine/atmos) "aDH" = ( /obj/machinery/atmospherics/components/unary/vent_pump/siphon/atmos/nitrogen_output{ dir = 1 }, -/turf/open/floor/engine/n2{ - initial_gas_mix = "n2=1000;TEMP=293.15" - }, +/turf/open/floor/engine/n2, /area/engine/atmos) "aDI" = ( /obj/machinery/atmospherics/components/unary/outlet_injector/atmos/oxygen_input{ dir = 1 }, -/turf/open/floor/engine/o2{ - initial_gas_mix = "o2=1000;TEMP=293.15" - }, +/turf/open/floor/engine/o2, /area/engine/atmos) "aDJ" = ( /obj/machinery/air_sensor/atmos/oxygen_tank, -/turf/open/floor/engine/o2{ - initial_gas_mix = "o2=1000;TEMP=293.15" - }, +/turf/open/floor/engine/o2, /area/engine/atmos) "aDK" = ( /obj/machinery/atmospherics/components/unary/vent_pump/siphon/atmos/oxygen_output{ dir = 1 }, -/turf/open/floor/engine/o2{ - initial_gas_mix = "o2=1000;TEMP=293.15" - }, +/turf/open/floor/engine/o2, /area/engine/atmos) "aDL" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3, @@ -10911,7 +10857,7 @@ dir = 1; network = list("ss13","Atmospherics") }, -/turf/open/floor/engine/airless, +/turf/open/floor/engine/air, /area/engine/atmos) "aDO" = ( /obj/machinery/door/airlock/research{ @@ -31862,9 +31808,7 @@ c_tag = "Atmospherics - Nitrous Oxide Tank"; network = list("ss13","Atmospherics") }, -/turf/open/floor/engine/n2o{ - initial_gas_mix = "n2o=1000;TEMP=293.15" - }, +/turf/open/floor/engine/n2o, /area/engine/atmos) "bFr" = ( /obj/structure/disposalpipe/segment{ @@ -36573,9 +36517,7 @@ /area/maintenance/fore) "bSf" = ( /obj/machinery/light/small, -/turf/open/floor/engine/n2o{ - initial_gas_mix = "n2o=1000;TEMP=293.15" - }, +/turf/open/floor/engine/n2o, /area/engine/atmos) "bSh" = ( /obj/machinery/atmospherics/components/binary/pump, @@ -40213,22 +40155,14 @@ /turf/open/floor/plasteel/dark, /area/tcommsat/server) "cdL" = ( -/turf/open/floor/engine/n2{ - initial_gas_mix = "n2=1000;TEMP=293.15" - }, +/turf/open/floor/engine/n2, /area/engine/atmos) "cdM" = ( -/obj/machinery/atmospherics/miner/nitrogen{ - max_ext_kpa = 2500 - }, -/turf/open/floor/engine/n2{ - initial_gas_mix = "n2=1000;TEMP=293.15" - }, +/obj/machinery/portable_atmospherics/canister/nitrogen, +/turf/open/floor/engine/n2, /area/engine/atmos) "cdN" = ( -/turf/open/floor/engine/o2{ - initial_gas_mix = "o2=1000;TEMP=293.15" - }, +/turf/open/floor/engine/o2, /area/engine/atmos) "cdP" = ( /obj/effect/turf_decal/tile/yellow{ @@ -40637,12 +40571,8 @@ /turf/open/floor/plasteel, /area/hallway/primary/central) "ceK" = ( -/obj/machinery/atmospherics/miner/oxygen{ - max_ext_kpa = 2500 - }, -/turf/open/floor/engine/o2{ - initial_gas_mix = "o2=1000;TEMP=293.15" - }, +/obj/machinery/portable_atmospherics/canister/oxygen, +/turf/open/floor/engine/o2, /area/engine/atmos) "ceL" = ( /obj/machinery/light/small, @@ -40651,9 +40581,7 @@ dir = 1; network = list("ss13","Atmospherics") }, -/turf/open/floor/engine/n2{ - initial_gas_mix = "n2=1000;TEMP=293.15" - }, +/turf/open/floor/engine/n2, /area/engine/atmos) "ceM" = ( /obj/machinery/light/small, @@ -40662,9 +40590,7 @@ dir = 1; network = list("ss13","Atmospherics") }, -/turf/open/floor/engine/o2{ - initial_gas_mix = "o2=1000;TEMP=293.15" - }, +/turf/open/floor/engine/o2, /area/engine/atmos) "ceS" = ( /obj/effect/turf_decal/stripes/line{ @@ -40935,6 +40861,9 @@ }, /turf/open/floor/plasteel, /area/engine/engineering) +"cFG" = ( +/turf/open/floor/engine/air, +/area/engine/atmos) "cGH" = ( /obj/structure/girder, /obj/structure/grille/broken, @@ -89255,7 +89184,7 @@ aDw avb aDF acF -acF +cFG bPb pjJ bPb @@ -89511,8 +89440,8 @@ azD aDx aDC aDG -acF -acF +cFG +cFG acj aal bPb diff --git a/_maps/map_files/KiloStation/KiloStation.dmm b/_maps/map_files/KiloStation/KiloStation.dmm index eceb49649b9..5329d8ad395 100644 --- a/_maps/map_files/KiloStation/KiloStation.dmm +++ b/_maps/map_files/KiloStation/KiloStation.dmm @@ -1513,7 +1513,7 @@ /obj/machinery/light{ dir = 1 }, -/obj/structure/cable, +/obj/structure/cable/layer3, /turf/open/floor/plating{ icon_state = "panelscorched" }, @@ -1747,7 +1747,6 @@ /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden/layer1{ dir = 4 }, -/obj/structure/cable, /turf/open/floor/engine, /area/ai_monitored/turret_protected/aisat_interior) "acW" = ( @@ -1947,7 +1946,6 @@ /obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 1 }, -/obj/structure/cable, /turf/open/floor/plasteel/dark, /area/ai_monitored/turret_protected/aisat_interior) "adn" = ( @@ -2209,7 +2207,6 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1{ dir = 8 }, -/obj/structure/cable, /turf/open/floor/engine, /area/ai_monitored/turret_protected/aisat/foyer) "adF" = ( @@ -2370,7 +2367,6 @@ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/structure/cable, /turf/open/floor/engine, /area/ai_monitored/turret_protected/aisat/atmos) "adS" = ( @@ -2517,7 +2513,6 @@ pixel_x = -22 }, /obj/effect/decal/cleanable/dirt, -/obj/structure/cable, /turf/open/floor/plating, /area/ai_monitored/turret_protected/aisat/atmos) "aed" = ( @@ -2536,7 +2531,6 @@ /obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 1 }, -/obj/structure/cable, /turf/open/floor/plasteel/dark, /area/ai_monitored/turret_protected/aisat/atmos) "aef" = ( @@ -2623,11 +2617,6 @@ }, /turf/open/floor/plasteel, /area/bridge) -"aen" = ( -/obj/structure/lattice/catwalk, -/obj/structure/cable, -/turf/open/floor/plating/airless, -/area/space/nearstation) "aeo" = ( /obj/structure/lattice, /obj/structure/grille, @@ -2913,7 +2902,6 @@ /obj/effect/turf_decal/stripes/line{ dir = 4 }, -/obj/structure/cable, /turf/open/floor/plating/airless, /area/space/nearstation) "aeT" = ( @@ -4840,7 +4828,6 @@ name = "Abandoned External Airlock" }, /obj/effect/mapping_helpers/airlock/cyclelink_helper, -/obj/structure/cable, /turf/open/floor/plasteel/dark, /area/maintenance/fore) "ahZ" = ( @@ -5183,7 +5170,6 @@ }, /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/components/unary/vent_pump/on, -/obj/structure/cable, /turf/open/floor/plating{ icon_state = "platingdmg3" }, @@ -6593,7 +6579,6 @@ /obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 1 }, -/obj/structure/cable, /turf/open/floor/plasteel/dark, /area/maintenance/fore) "akP" = ( @@ -9451,7 +9436,6 @@ network = list("minisat") }, /obj/effect/turf_decal/stripes/line, -/obj/structure/cable, /turf/open/floor/engine, /area/ai_monitored/turret_protected/aisat_interior) "api" = ( @@ -12576,6 +12560,7 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1{ dir = 6 }, +/obj/structure/cable, /turf/open/floor/engine, /area/ai_monitored/turret_protected/aisat/atmos) "atY" = ( @@ -12670,6 +12655,7 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer1{ dir = 8 }, +/obj/structure/cable, /turf/open/floor/engine, /area/ai_monitored/turret_protected/aisat/atmos) "aug" = ( @@ -18760,30 +18746,18 @@ /turf/open/floor/plasteel, /area/engine/atmos) "aDz" = ( -/turf/open/floor/engine/n2{ - initial_gas_mix = "n2=1000;TEMP=293.15" - }, +/turf/open/floor/engine/n2, /area/engine/atmos) "aDA" = ( -/obj/machinery/atmospherics/miner/nitrogen{ - max_ext_kpa = 2500 - }, -/turf/open/floor/engine/n2{ - initial_gas_mix = "n2=1000;TEMP=293.15" - }, +/obj/machinery/portable_atmospherics/canister/nitrogen, +/turf/open/floor/engine/n2, /area/engine/atmos) "aDC" = ( -/turf/open/floor/engine/o2{ - initial_gas_mix = "o2=1000;TEMP=293.15" - }, +/turf/open/floor/engine/o2, /area/engine/atmos) "aDD" = ( -/obj/machinery/atmospherics/miner/oxygen{ - max_ext_kpa = 2500 - }, -/turf/open/floor/engine/o2{ - initial_gas_mix = "o2=1000;TEMP=293.15" - }, +/obj/machinery/portable_atmospherics/canister/oxygen, +/turf/open/floor/engine/o2, /area/engine/atmos) "aDE" = ( /obj/machinery/camera{ @@ -19603,19 +19577,13 @@ /turf/open/floor/grass, /area/medical/genetics/cloning) "aFc" = ( -/turf/open/floor/engine/co2{ - initial_gas_mix = "co2=1000;TEMP=293.15" - }, +/turf/open/floor/engine/co2, /area/engine/atmos) "aFd" = ( -/turf/open/floor/engine/plasma{ - initial_gas_mix = "plasma=1000;TEMP=293.15" - }, +/turf/open/floor/engine/plasma, /area/engine/atmos) "aFe" = ( -/turf/open/floor/engine/n2o{ - initial_gas_mix = "n2o=1000;TEMP=293.15" - }, +/turf/open/floor/engine/n2o, /area/engine/atmos) "aFf" = ( /turf/open/floor/engine/vacuum, @@ -19704,28 +19672,16 @@ /turf/open/floor/plasteel/dark, /area/medical/cryo) "aFm" = ( -/obj/machinery/atmospherics/miner/carbon_dioxide{ - max_ext_kpa = 2500 - }, -/turf/open/floor/engine/co2{ - initial_gas_mix = "co2=1000;TEMP=293.15" - }, +/obj/machinery/portable_atmospherics/canister/carbon_dioxide, +/turf/open/floor/engine/co2, /area/engine/atmos) "aFn" = ( -/obj/machinery/atmospherics/miner/toxins{ - max_ext_kpa = 2500 - }, -/turf/open/floor/engine/plasma{ - initial_gas_mix = "plasma=1000;TEMP=293.15" - }, +/obj/machinery/portable_atmospherics/canister/toxins, +/turf/open/floor/engine/plasma, /area/engine/atmos) "aFo" = ( -/obj/machinery/atmospherics/miner/n2o{ - max_ext_kpa = 2500 - }, -/turf/open/floor/engine/n2o{ - initial_gas_mix = "n2o=1000;TEMP=293.15" - }, +/obj/machinery/portable_atmospherics/canister/nitrous_oxide, +/turf/open/floor/engine/n2o, /area/engine/atmos) "aFp" = ( /obj/machinery/computer/med_data, @@ -20322,9 +20278,7 @@ name = "atmospherics camera"; network = list("ss13","engine") }, -/turf/open/floor/engine/n2{ - initial_gas_mix = "n2=1000;TEMP=293.15" - }, +/turf/open/floor/engine/n2, /area/engine/atmos) "aGl" = ( /obj/structure/table, @@ -20802,45 +20756,33 @@ /obj/machinery/atmospherics/components/unary/outlet_injector/atmos/nitrogen_input{ dir = 4 }, -/turf/open/floor/engine/n2{ - initial_gas_mix = "n2=1000;TEMP=293.15" - }, +/turf/open/floor/engine/n2, /area/engine/atmos) "aGV" = ( /obj/machinery/air_sensor/atmos/nitrogen_tank, -/turf/open/floor/engine/n2{ - initial_gas_mix = "n2=1000;TEMP=293.15" - }, +/turf/open/floor/engine/n2, /area/engine/atmos) "aGW" = ( /obj/machinery/atmospherics/components/unary/vent_pump/siphon/atmos/nitrogen_output{ dir = 4 }, -/turf/open/floor/engine/n2{ - initial_gas_mix = "n2=1000;TEMP=293.15" - }, +/turf/open/floor/engine/n2, /area/engine/atmos) "aGX" = ( /obj/machinery/atmospherics/components/unary/outlet_injector/atmos/oxygen_input{ dir = 4 }, -/turf/open/floor/engine/o2{ - initial_gas_mix = "o2=1000;TEMP=293.15" - }, +/turf/open/floor/engine/o2, /area/engine/atmos) "aGY" = ( /obj/machinery/air_sensor/atmos/oxygen_tank, -/turf/open/floor/engine/o2{ - initial_gas_mix = "o2=1000;TEMP=293.15" - }, +/turf/open/floor/engine/o2, /area/engine/atmos) "aGZ" = ( /obj/machinery/atmospherics/components/unary/vent_pump/siphon/atmos/oxygen_output{ dir = 4 }, -/turf/open/floor/engine/o2{ - initial_gas_mix = "o2=1000;TEMP=293.15" - }, +/turf/open/floor/engine/o2, /area/engine/atmos) "aHa" = ( /obj/machinery/atmospherics/components/unary/outlet_injector/atmos/air_input{ @@ -20862,67 +20804,49 @@ /obj/machinery/atmospherics/components/unary/outlet_injector/atmos/carbon_input{ dir = 1 }, -/turf/open/floor/engine/co2{ - initial_gas_mix = "co2=1000;TEMP=293.15" - }, +/turf/open/floor/engine/co2, /area/engine/atmos) "aHe" = ( /obj/machinery/air_sensor/atmos/carbon_tank, -/turf/open/floor/engine/co2{ - initial_gas_mix = "co2=1000;TEMP=293.15" - }, +/turf/open/floor/engine/co2, /area/engine/atmos) "aHf" = ( /obj/machinery/atmospherics/components/unary/vent_pump/siphon/atmos/carbon_output{ dir = 1 }, -/turf/open/floor/engine/co2{ - initial_gas_mix = "co2=1000;TEMP=293.15" - }, +/turf/open/floor/engine/co2, /area/engine/atmos) "aHg" = ( /obj/machinery/atmospherics/components/unary/outlet_injector/atmos/toxin_input{ dir = 1 }, -/turf/open/floor/engine/plasma{ - initial_gas_mix = "plasma=1000;TEMP=293.15" - }, +/turf/open/floor/engine/plasma, /area/engine/atmos) "aHh" = ( /obj/machinery/air_sensor/atmos/toxin_tank, -/turf/open/floor/engine/plasma{ - initial_gas_mix = "plasma=1000;TEMP=293.15" - }, +/turf/open/floor/engine/plasma, /area/engine/atmos) "aHi" = ( /obj/machinery/atmospherics/components/unary/vent_pump/siphon/atmos/toxin_output{ dir = 1 }, -/turf/open/floor/engine/plasma{ - initial_gas_mix = "plasma=1000;TEMP=293.15" - }, +/turf/open/floor/engine/plasma, /area/engine/atmos) "aHj" = ( /obj/machinery/atmospherics/components/unary/outlet_injector/atmos/nitrous_input{ dir = 1 }, -/turf/open/floor/engine/n2o{ - initial_gas_mix = "n2o=1000;TEMP=293.15" - }, +/turf/open/floor/engine/n2o, /area/engine/atmos) "aHk" = ( /obj/machinery/air_sensor/atmos/nitrous_tank, -/turf/open/floor/engine/n2o{ - initial_gas_mix = "n2o=1000;TEMP=293.15" - }, +/turf/open/floor/engine/n2o, /area/engine/atmos) "aHl" = ( /obj/machinery/atmospherics/components/unary/vent_pump/siphon/atmos/nitrous_output{ dir = 1 }, -/turf/open/floor/engine/n2o{ - initial_gas_mix = "n2o=1000;TEMP=293.15" - }, +/turf/open/floor/engine/n2o, /area/engine/atmos) "aHm" = ( /obj/machinery/atmospherics/components/unary/outlet_injector/atmos/mix_input{ @@ -24612,9 +24536,7 @@ /area/security/main) "aML" = ( /obj/machinery/light/floor, -/turf/open/floor/engine/n2{ - initial_gas_mix = "n2=1000;TEMP=293.15" - }, +/turf/open/floor/engine/n2, /area/engine/atmos) "aMM" = ( /obj/machinery/door/airlock/maintenance{ @@ -24658,9 +24580,7 @@ /area/science/mixing/chamber) "aMO" = ( /obj/machinery/light/floor, -/turf/open/floor/engine/o2{ - initial_gas_mix = "o2=1000;TEMP=293.15" - }, +/turf/open/floor/engine/o2, /area/engine/atmos) "aMP" = ( /obj/structure/chair{ @@ -24787,9 +24707,7 @@ name = "atmospherics camera"; network = list("ss13","engine") }, -/turf/open/floor/engine/co2{ - initial_gas_mix = "co2=1000;TEMP=293.15" - }, +/turf/open/floor/engine/co2, /area/engine/atmos) "aNa" = ( /obj/machinery/camera{ @@ -24798,9 +24716,7 @@ name = "atmospherics camera"; network = list("ss13","engine") }, -/turf/open/floor/engine/plasma{ - initial_gas_mix = "plasma=1000;TEMP=293.15" - }, +/turf/open/floor/engine/plasma, /area/engine/atmos) "aNb" = ( /obj/machinery/camera{ @@ -24809,9 +24725,7 @@ name = "atmospherics camera"; network = list("ss13","engine") }, -/turf/open/floor/engine/n2o{ - initial_gas_mix = "n2o=1000;TEMP=293.15" - }, +/turf/open/floor/engine/n2o, /area/engine/atmos) "aNc" = ( /obj/machinery/camera{ @@ -30925,15 +30839,11 @@ /area/medical/virology) "aVF" = ( /obj/effect/landmark/xeno_spawn, -/turf/open/floor/engine/o2{ - initial_gas_mix = "o2=1000;TEMP=293.15" - }, +/turf/open/floor/engine/o2, /area/engine/atmos) "aVG" = ( /obj/effect/landmark/xeno_spawn, -/turf/open/floor/engine/n2o{ - initial_gas_mix = "n2o=1000;TEMP=293.15" - }, +/turf/open/floor/engine/n2o, /area/engine/atmos) "aVH" = ( /obj/machinery/status_display/evac, @@ -33358,6 +33268,7 @@ }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer1, /mob/living/simple_animal/bot/secbot/pingsky, +/obj/structure/cable, /turf/open/floor/engine, /area/ai_monitored/turret_protected/aisat_interior) "aZi" = ( @@ -54496,9 +54407,7 @@ /area/maintenance/port) "bDR" = ( /obj/machinery/light/floor, -/turf/open/floor/engine/co2{ - initial_gas_mix = "co2=1000;TEMP=293.15" - }, +/turf/open/floor/engine/co2, /area/engine/atmos) "bDS" = ( /obj/structure/table, @@ -55678,9 +55587,7 @@ /area/maintenance/port) "bFG" = ( /obj/machinery/light/floor, -/turf/open/floor/engine/plasma{ - initial_gas_mix = "plasma=1000;TEMP=293.15" - }, +/turf/open/floor/engine/plasma, /area/engine/atmos) "bFH" = ( /obj/effect/turf_decal/stripes/corner{ @@ -57232,9 +57139,7 @@ /area/hallway/primary/port) "bId" = ( /obj/machinery/light/floor, -/turf/open/floor/engine/n2o{ - initial_gas_mix = "n2o=1000;TEMP=293.15" - }, +/turf/open/floor/engine/n2o, /area/engine/atmos) "bIe" = ( /obj/machinery/atmospherics/pipe/simple/purple/visible, @@ -57803,9 +57708,7 @@ name = "atmospherics camera"; network = list("ss13","engine") }, -/turf/open/floor/engine/o2{ - initial_gas_mix = "o2=1000;TEMP=293.15" - }, +/turf/open/floor/engine/o2, /area/engine/atmos) "bIV" = ( /turf/closed/wall, @@ -72801,6 +72704,7 @@ /obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 4 }, +/obj/structure/cable, /turf/open/floor/plasteel/dark, /area/ai_monitored/turret_protected/aisat_interior) "cfv" = ( @@ -73357,6 +73261,7 @@ /obj/effect/turf_decal/stripes/corner{ dir = 8 }, +/obj/structure/cable, /turf/open/floor/engine, /area/ai_monitored/turret_protected/aisat_interior) "cgq" = ( @@ -73626,6 +73531,7 @@ /obj/effect/turf_decal/stripes/corner{ dir = 1 }, +/obj/structure/cable, /turf/open/floor/engine, /area/ai_monitored/turret_protected/aisat_interior) "cgK" = ( @@ -74027,6 +73933,7 @@ dir = 4 }, /obj/machinery/holopad/secure, +/obj/structure/cable, /turf/open/floor/engine, /area/ai_monitored/turret_protected/aisat_interior) "chq" = ( @@ -74411,6 +74318,8 @@ dir = 5 }, /obj/structure/cable, +/obj/structure/cable_bridge, +/obj/structure/cable/layer3, /turf/open/floor/engine, /area/ai_monitored/storage/satellite) "cic" = ( @@ -93840,6 +93749,10 @@ "dvN" = ( /turf/open/floor/plating/asteroid/lowpressure, /area/space/nearstation) +"dSr" = ( +/obj/machinery/portable_atmospherics/canister/air, +/turf/open/floor/engine/air, +/area/engine/atmos) "fhz" = ( /obj/structure/cable, /obj/machinery/holopad/secure, @@ -119807,8 +119720,8 @@ aDD aMO aFM aMY +dSr bUQ -aMY bFP cCX bUZ @@ -121255,19 +121168,19 @@ adR adZ aec aee -aen +cHu cHu aeS aeS -aen +cHu aeS aeS -aen +cHu aeS aeS -aen -aen -aen +cHu +cHu +cHu ahY aiD akO diff --git a/_maps/map_files/MetaStation/MetaStation.dmm b/_maps/map_files/MetaStation/MetaStation.dmm index f17eb327158..78d7ecc42b8 100644 --- a/_maps/map_files/MetaStation/MetaStation.dmm +++ b/_maps/map_files/MetaStation/MetaStation.dmm @@ -45218,14 +45218,8 @@ /turf/open/floor/plating, /area/maintenance/starboard/secondary) "bYc" = ( -/obj/structure/window/spawner/east, -/obj/structure/window/spawner/north, -/obj/structure/window/spawner, -/obj/structure/flora/ausbushes/fullgrass, -/obj/structure/flora/ausbushes/lavendergrass, -/obj/structure/flora/ausbushes/leafybush, -/obj/structure/flora/ausbushes/palebush, -/turf/open/floor/grass, +/obj/effect/spawner/structure/window, +/turf/open/floor/plating, /area/hallway/primary/central) "bYd" = ( /obj/machinery/door/firedoor, @@ -45692,7 +45686,8 @@ dir = 4 }, /obj/machinery/airalarm{ - pixel_y = 24 + dir = 4; + pixel_x = -22 }, /turf/open/floor/plasteel, /area/security/checkpoint/medical) @@ -46178,14 +46173,6 @@ /obj/structure/table, /turf/open/floor/plasteel/white, /area/medical/medbay/central) -"caj" = ( -/obj/machinery/requests_console{ - department = "Medbay"; - departmentType = 1; - name = "Medbay RC" - }, -/turf/closed/wall, -/area/security/checkpoint/medical) "cak" = ( /obj/effect/turf_decal/tile/blue{ dir = 1 @@ -47076,24 +47063,24 @@ dir = 4; network = list("ss13","medbay") }, -/obj/structure/chair/greyscale, /obj/item/radio/intercom{ pixel_x = -28 }, /obj/effect/turf_decal/tile/blue{ - dir = 1 + dir = 8 }, -/obj/effect/turf_decal/tile/blue, /obj/effect/turf_decal/tile/blue{ dir = 4 }, /obj/effect/turf_decal/tile/blue{ - dir = 8 + dir = 1 }, +/obj/structure/chair, /turf/open/floor/plasteel/white, /area/medical/medbay/central) "cbS" = ( /obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, /turf/open/floor/plating, /area/security/checkpoint/medical) "cbT" = ( @@ -47809,55 +47796,26 @@ /turf/open/floor/plasteel/white, /area/medical/storage) "cdw" = ( -/obj/machinery/computer/security/telescreen{ - desc = "Used for monitoring medbay to ensure patient safety."; - dir = 1; - name = "Medbay Monitor"; - network = list("medbay"); - pixel_x = -29 - }, /obj/machinery/computer/med_data{ dir = 4 }, -/obj/machinery/light{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/open/floor/plasteel, -/area/security/checkpoint/medical) -"cdx" = ( -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ - dir = 1 +/obj/machinery/computer/security/telescreen{ + desc = "Used for monitoring medbay to ensure patient safety."; + dir = 4; + name = "Medbay Monitor"; + network = list("medbay"); + pixel_x = -32 }, /obj/structure/cable, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/turf/open/floor/plasteel/white, -/area/medical/medbay/central) +/turf/open/floor/plasteel, +/area/security/checkpoint/medical) "cdy" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, /obj/structure/cable, /obj/effect/landmark/start/medical_doctor, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, /turf/open/floor/plasteel/white, /area/medical/medbay/central) "cdz" = ( @@ -48251,6 +48209,10 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 1 }, +/obj/machinery/light{ + dir = 8 + }, +/obj/structure/cable, /turf/open/floor/plasteel, /area/security/checkpoint/medical) "ceB" = ( @@ -48849,44 +48811,13 @@ /turf/open/floor/plasteel/white, /area/medical/storage) "cfP" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ - dir = 1 - }, /obj/machinery/medical_kiosk, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, /obj/effect/turf_decal/tile/blue{ dir = 8 }, +/obj/effect/turf_decal/tile/blue, /turf/open/floor/plasteel/white, /area/medical/medbay/central) -"cfQ" = ( -/obj/structure/cable, -/obj/structure/window/reinforced/spawner/north, -/obj/structure/window/reinforced/spawner, -/obj/structure/flora/ausbushes/fullgrass, -/obj/structure/flora/ausbushes/lavendergrass, -/obj/structure/flora/ausbushes/reedbush, -/obj/structure/flora/ausbushes/sunnybush, -/obj/structure/window/reinforced/spawner/west, -/turf/open/floor/grass, -/area/security/checkpoint/medical) -"cfR" = ( -/obj/structure/cable, -/obj/structure/window/reinforced/spawner/east, -/obj/structure/window/reinforced/spawner/north, -/obj/structure/window/reinforced/spawner, -/obj/structure/flora/ausbushes/fullgrass, -/obj/structure/flora/ausbushes/lavendergrass, -/obj/structure/flora/ausbushes/reedbush, -/obj/structure/flora/ausbushes/sunnybush, -/turf/open/floor/grass, -/area/security/checkpoint/medical) "cfT" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/medical/glass{ @@ -49386,32 +49317,13 @@ /turf/open/floor/plasteel/white, /area/medical/storage) "cgX" = ( -/obj/structure/chair/greyscale, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue, /obj/effect/turf_decal/tile/blue{ dir = 4 }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/turf/open/floor/plasteel/white, -/area/medical/medbay/central) -"cgY" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on, -/obj/structure/chair/greyscale, /obj/effect/turf_decal/tile/blue{ dir = 1 }, -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, +/obj/structure/chair, /turf/open/floor/plasteel/white, /area/medical/medbay/central) "cgZ" = ( @@ -49420,17 +49332,15 @@ /obj/effect/turf_decal/tile/blue{ dir = 1 }, -/obj/effect/turf_decal/tile/blue, /obj/effect/turf_decal/tile/blue{ dir = 4 }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 4 }, /turf/open/floor/plasteel/white, /area/medical/medbay/central) "cha" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/sink{ dir = 8; pixel_x = 12 @@ -49438,12 +49348,12 @@ /obj/effect/turf_decal/tile/blue{ dir = 1 }, -/obj/effect/turf_decal/tile/blue, /obj/effect/turf_decal/tile/blue{ dir = 4 }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 +/obj/effect/turf_decal/tile/yellow, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 4 }, /turf/open/floor/plasteel/white, /area/medical/medbay/central) @@ -50063,10 +49973,6 @@ /obj/effect/turf_decal/tile/blue{ dir = 1 }, -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, /obj/effect/turf_decal/tile/blue{ dir = 8 }, @@ -50082,50 +49988,13 @@ }, /turf/open/floor/plasteel/white, /area/medical/medbay/central) -"cir" = ( -/obj/machinery/atmospherics/pipe/manifold/supply, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/turf/open/floor/plasteel/white, -/area/medical/medbay/central) -"cit" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 9 - }, -/obj/structure/cable, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/turf/open/floor/plasteel/white, -/area/medical/medbay/central) "ciu" = ( -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue{ +/obj/effect/turf_decal/tile/yellow{ dir = 4 }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 +/obj/effect/turf_decal/tile/yellow, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 5 }, /turf/open/floor/plasteel/white, /area/medical/medbay/central) @@ -50713,29 +50582,16 @@ /obj/effect/turf_decal/tile/blue{ dir = 1 }, -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, /obj/effect/turf_decal/tile/blue{ dir = 8 }, /turf/open/floor/plasteel/white, /area/medical/medbay/central) "cjR" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 9 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, /obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue{ +/obj/effect/turf_decal/tile/yellow{ dir = 4 }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, /turf/open/floor/plasteel/white, /area/medical/medbay/central) "cjS" = ( @@ -51348,34 +51204,21 @@ /turf/open/floor/plating, /area/medical/medbay/central) "clo" = ( -/obj/structure/chair/greyscale{ - dir = 1 - }, /obj/effect/turf_decal/tile/blue{ dir = 1 }, -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, /obj/effect/turf_decal/tile/blue{ dir = 8 }, +/obj/effect/turf_decal/tile/blue, +/obj/structure/chair{ + dir = 1 + }, /turf/open/floor/plasteel/white, /area/medical/medbay/central) "clp" = ( /obj/structure/table, /obj/machinery/light, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, /obj/item/storage/firstaid/regular{ pixel_x = 4; pixel_y = 4 @@ -51385,6 +51228,10 @@ pixel_x = -4; pixel_y = -4 }, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/effect/turf_decal/tile/blue, /turf/open/floor/plasteel/white, /area/medical/medbay/central) "clq" = ( @@ -51393,28 +51240,19 @@ pixel_y = -24 }, /obj/item/twohanded/required/kirbyplants, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, /obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, /obj/effect/turf_decal/tile/blue{ dir = 8 }, /turf/open/floor/plasteel/white, /area/medical/medbay/central) "clr" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, /obj/effect/turf_decal/tile/blue, /obj/effect/turf_decal/tile/blue{ - dir = 4 + dir = 8 }, /obj/effect/turf_decal/tile/blue{ - dir = 8 + dir = 4 }, /turf/open/floor/plasteel/white, /area/medical/medbay/central) @@ -70951,15 +70789,11 @@ /obj/structure/sign/warning/nosmoking{ pixel_y = 28 }, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue, /obj/effect/turf_decal/tile/blue{ dir = 4 }, /obj/effect/turf_decal/tile/blue{ - dir = 8 + dir = 1 }, /turf/open/floor/plasteel/white, /area/medical/medbay/central) @@ -71849,15 +71683,6 @@ /obj/structure/grille/broken, /turf/open/space/basic, /area/space/nearstation) -"dVQ" = ( -/obj/structure/window/spawner/west, -/obj/structure/window/spawner/north, -/obj/structure/window/spawner, -/obj/structure/flora/ausbushes/fullgrass, -/obj/structure/flora/ausbushes/lavendergrass, -/obj/structure/flora/ausbushes/fernybush, -/turf/open/floor/grass, -/area/hallway/primary/central) "dVT" = ( /obj/effect/turf_decal/tile/yellow{ dir = 8 @@ -72007,17 +71832,6 @@ /obj/structure/lattice, /turf/open/space/basic, /area/space/nearstation) -"eza" = ( -/obj/structure/window/spawner/west, -/obj/structure/window/spawner/east, -/obj/structure/window/spawner/north, -/obj/structure/window/spawner, -/obj/structure/flora/ausbushes/fullgrass, -/obj/structure/flora/ausbushes/lavendergrass, -/obj/structure/flora/ausbushes/brflowers, -/obj/structure/flora/ausbushes/stalkybush, -/turf/open/floor/grass, -/area/hallway/primary/central) "eAa" = ( /obj/effect/turf_decal/tile/yellow{ dir = 4 @@ -72576,6 +72390,16 @@ }, /turf/closed/wall/r_wall, /area/maintenance/disposal/incinerator) +"hcZ" = ( +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/effect/turf_decal/tile/blue, +/obj/structure/chair{ + dir = 1 + }, +/turf/open/floor/plasteel/white, +/area/medical/medbay/central) "hdb" = ( /obj/structure/bed, /obj/item/clothing/suit/straight_jacket, @@ -74363,6 +74187,14 @@ }, /turf/open/floor/plasteel/dark/corner, /area/engine/storage_shared) +"oEO" = ( +/obj/machinery/requests_console{ + department = "Medbay"; + departmentType = 1; + name = "Medbay RC" + }, +/turf/closed/wall, +/area/medical/storage) "oFI" = ( /obj/machinery/door/window/eastright{ dir = 8; @@ -74579,6 +74411,14 @@ }, /turf/open/floor/plasteel, /area/engine/break_room) +"ppb" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel/white, +/area/medical/medbay/central) "ppz" = ( /obj/machinery/vending/boozeomat/all_access, /obj/effect/decal/cleanable/cobweb, @@ -75191,6 +75031,13 @@ }, /turf/open/floor/plasteel/white, /area/medical/chemistry) +"rMv" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/white, +/area/medical/medbay/central) "rOP" = ( /obj/structure/sign/poster/official/random, /turf/closed/wall, @@ -75525,6 +75372,12 @@ /obj/machinery/meter, /turf/open/floor/engine, /area/engine/engineering) +"sWn" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 1 + }, +/turf/open/floor/plasteel/white, +/area/medical/medbay/central) "tay" = ( /turf/closed/wall, /area/medical/medbay/central) @@ -75632,6 +75485,13 @@ /obj/machinery/pinpointer_dispenser, /turf/open/floor/plating, /area/quartermaster/sorting) +"tut" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/white, +/area/medical/medbay/central) "twp" = ( /obj/effect/turf_decal/tile/yellow, /obj/effect/turf_decal/tile/yellow{ @@ -76445,6 +76305,16 @@ /obj/structure/cable, /turf/open/floor/plasteel, /area/maintenance/department/science) +"wSP" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 1 + }, +/turf/open/floor/plasteel/white, +/area/medical/medbay/central) "wYq" = ( /obj/effect/decal/cleanable/dirt/dust, /turf/open/floor/wood, @@ -100272,7 +100142,7 @@ cad cbP cdv cez -bXK +oEO tay cio cjO @@ -100526,7 +100396,7 @@ bWj bXL bXL cae -caj +bXL bXL bXL bXL @@ -100786,11 +100656,11 @@ rVd cbQ cdw ceA -cfQ +cbS cgX -cip -cjQ -clo +sWn +wSP +hcZ cmv cnE coQ @@ -101043,10 +100913,10 @@ cag caf caf ceB -cfR -cgY -cir -cdx +cbS +cgX +cbY +tut cfP cmv cnF @@ -101302,7 +101172,7 @@ cbS cbS bXL dwy -cip +cbY cdy clp cmu @@ -101559,8 +101429,8 @@ cal ceD cfT cgZ -cit -cjQ +rMv +ppb clq cmu cmu @@ -108747,7 +108617,7 @@ sKL bUb bVb bWG -dVQ +bSS bSS bSS bSS @@ -109518,7 +109388,7 @@ jZS bUd bVq bWJ -eza +bYc bZs aWf ccr diff --git a/code/__DEFINES/achievements.dm b/code/__DEFINES/achievements.dm index b610eb50cc1..acf77ed73e1 100644 --- a/code/__DEFINES/achievements.dm +++ b/code/__DEFINES/achievements.dm @@ -19,6 +19,11 @@ #define MEDAL_SELFOUCH "Hands???" #define MEDAL_SANDMAN "Mister Sandman" #define MEDAL_CLEANBOSS "Cleanboss" +#define MEDAL_RULE8 "Rule 8" +#define MEDAL_LONGSHIFT "longshift" + +//Skill medal hub IDs +#define MEDAL_LEGENDARY_MINER "Legendary Miner" //Boss medals diff --git a/code/__DEFINES/atmospherics.dm b/code/__DEFINES/atmospherics.dm index 61198aa0ae8..1a2ed41c69e 100644 --- a/code/__DEFINES/atmospherics.dm +++ b/code/__DEFINES/atmospherics.dm @@ -131,12 +131,14 @@ #define BODYTEMP_COOLING_MAX -100 /// The maximum number of degrees that your body can heat up in 1 tick, due to the environment, when in a hot area. #define BODYTEMP_HEATING_MAX 30 - -/// The limit the human body can take before it starts taking damage from heat. -#define BODYTEMP_HEAT_DAMAGE_LIMIT (BODYTEMP_NORMAL + 50) -/// The limit the human body can take before it starts taking damage from coldness. -#define BODYTEMP_COLD_DAMAGE_LIMIT (BODYTEMP_NORMAL - 50) - +/// The body temperature limit the human body can take before it starts taking damage from heat. +/// This also affects how fast the body normalises it's temperature when hot. +/// 340k is about 66c, and rather high for a human. +#define BODYTEMP_HEAT_DAMAGE_LIMIT (BODYTEMP_NORMAL + 30) +/// The body temperature limit the human body can take before it starts taking damage from cold. +/// This also affects how fast the body normalises it's temperature when cold. +/// 270k is about -3c, that is below freezing and would hurt over time. +#define BODYTEMP_COLD_DAMAGE_LIMIT (BODYTEMP_NORMAL - 40) /// what min_cold_protection_temperature is set to for space-helmet quality headwear. MUST NOT BE 0. #define SPACE_HELM_MIN_TEMP_PROTECT 2.0 diff --git a/code/__DEFINES/cinematics.dm b/code/__DEFINES/cinematics.dm index 6d85c45f1bc..f994dc82a4b 100644 --- a/code/__DEFINES/cinematics.dm +++ b/code/__DEFINES/cinematics.dm @@ -11,3 +11,4 @@ #define CINEMATIC_NUKE_FAR 11 #define CINEMATIC_NUKE_CLOWNOP 12 #define CINEMATIC_CULT_NUKE 13 +#define CINEMATIC_CULT_FAIL 14 diff --git a/code/__DEFINES/components.dm b/code/__DEFINES/components.dm index 5ea124e2a1a..943e9c005e5 100644 --- a/code/__DEFINES/components.dm +++ b/code/__DEFINES/components.dm @@ -204,7 +204,7 @@ // /mob signals #define COMSIG_MOB_DEATH "mob_death" //from base of mob/death(): (gibbed) - +#define COMSIG_MOB_STATCHANGE "mob_statchange" //from base of mob/set_stat(): (new_stat) #define COMSIG_MOB_CLICKON "mob_clickon" //from base of mob/clickon(): (atom/A, params) #define COMSIG_MOB_MIDDLECLICKON "mob_middleclickon" //from base of mob/MiddleClickOn(): (atom/A) #define COMSIG_MOB_ALTCLICKON "mob_altclickon" //from base of mob/AltClickOn(): (atom/A) diff --git a/code/__DEFINES/obj_flags.dm b/code/__DEFINES/obj_flags.dm index ecdc2f7a766..a4b07f97e20 100644 --- a/code/__DEFINES/obj_flags.dm +++ b/code/__DEFINES/obj_flags.dm @@ -51,3 +51,4 @@ #define ORGAN_FAILING (1<<2) //Failing organs perform damaging effects until replaced or fixed #define ORGAN_EXTERNAL (1<<3) //Was this organ implanted/inserted/etc, if true will not be removed during species change. #define ORGAN_VITAL (1<<4) //Currently only the brain +#define ORGAN_SYNTHETIC_EMP (1<<5) //Synthetic organ affected by an EMP. Deteriorates over time. diff --git a/code/__DEFINES/reactions.dm b/code/__DEFINES/reactions.dm index 5973eab8b82..eb151dd0475 100644 --- a/code/__DEFINES/reactions.dm +++ b/code/__DEFINES/reactions.dm @@ -33,7 +33,6 @@ #define NOBLIUM_RESEARCH_AMOUNT 1000 #define BZ_RESEARCH_SCALE 4 #define BZ_RESEARCH_MAX_AMOUNT 400 -#define MIASMA_RESEARCH_AMOUNT 40 #define STIMULUM_RESEARCH_AMOUNT 50 //Plasma fusion properties #define FUSION_ENERGY_THRESHOLD 3e9 //Amount of energy it takes to start a fusion reaction diff --git a/code/__DEFINES/say.dm b/code/__DEFINES/say.dm index b301fd79147..417fe9316a5 100644 --- a/code/__DEFINES/say.dm +++ b/code/__DEFINES/say.dm @@ -15,6 +15,7 @@ #define MODE_INTERCOM "intercom" #define MODE_KEY_INTERCOM "i" +#define MODE_TOKEN_INTERCOM ":i" #define MODE_BINARY "binary" #define MODE_KEY_BINARY "b" @@ -63,6 +64,9 @@ //Eavesdropping #define EAVESDROP_EXTRA_RANGE 1 //how much past the specified message_range does the message get starred, whispering only +/// How close intercoms can be for radio code use +#define MODE_RANGE_INTERCOM 1 + // A link given to ghost alice to follow bob #define FOLLOW_LINK(alice, bob) "(F)" #define TURF_LINK(alice, turfy) "(T)" diff --git a/code/__DEFINES/subsystems.dm b/code/__DEFINES/subsystems.dm index efd8a80e9e2..824925c0a45 100644 --- a/code/__DEFINES/subsystems.dm +++ b/code/__DEFINES/subsystems.dm @@ -20,7 +20,7 @@ * * make sure you add an update to the schema_version stable in the db changelog */ -#define DB_MINOR_VERSION 6 +#define DB_MINOR_VERSION 7 //! ## Timing subsystem diff --git a/code/__DEFINES/traits.dm b/code/__DEFINES/traits.dm index b768c6cf89a..ff60243f2cf 100644 --- a/code/__DEFINES/traits.dm +++ b/code/__DEFINES/traits.dm @@ -145,6 +145,7 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai #define TRAIT_BOOZE_SLIDER "booze-slider" #define TRAIT_QUICK_CARRY "quick-carry" #define TRAIT_QUICKER_CARRY "quicker-carry" +#define TRAIT_QUICK_BUILD "quick-build" #define TRAIT_UNINTELLIGIBLE_SPEECH "unintelligible-speech" #define TRAIT_UNSTABLE "unstable" #define TRAIT_OIL_FRIED "oil_fried" @@ -159,8 +160,9 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai #define TRAIT_PARALYSIS "paralysis" //Used for limb-based paralysis, where replacing the limb will fix it // item traits -#define TRAIT_NODROP "nodrop" -#define TRAIT_T_RAY_VISIBLE "t-ray-visible" // Visible on t-ray scanners if the atom/var/level == 1 +#define TRAIT_NODROP "nodrop" +#define TRAIT_NO_STORAGE_INSERT "no_storage_insert" //cannot be inserted in a storage. +#define TRAIT_T_RAY_VISIBLE "t-ray-visible" // Visible on t-ray scanners if the atom/var/level == 1 #define TRAIT_NO_TELEPORT "no-teleport" //you just can't //quirk traits @@ -190,6 +192,7 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai // common trait sources #define TRAIT_GENERIC "generic" +#define GENERIC_ITEM_TRAIT "generic_item" #define UNCONSCIOUS_BLIND "unconscious_blind" #define EYE_DAMAGE "eye_damage" #define GENETIC_MUTATION "genetic" diff --git a/code/__DEFINES/typeids.dm b/code/__DEFINES/typeids.dm index 8bfe6216e26..275f7719f07 100644 --- a/code/__DEFINES/typeids.dm +++ b/code/__DEFINES/typeids.dm @@ -2,7 +2,7 @@ #define TYPEID_NULL "0" #define TYPEID_NORMAL_LIST "f" //helper macros -#define GET_TYPEID(ref) ( ( (length(ref) <= 10) ? "TYPEID_NULL" : copytext(ref, 4, length(ref)-6) ) ) +#define GET_TYPEID(ref) ( ( (length(ref) <= 10) ? "TYPEID_NULL" : copytext(ref, 4, -7) ) ) #define IS_NORMAL_LIST(L) (GET_TYPEID("\ref[L]") == TYPEID_NORMAL_LIST) diff --git a/code/__HELPERS/files.dm b/code/__HELPERS/files.dm index 84d36f9db4b..ba53368ae9c 100644 --- a/code/__HELPERS/files.dm +++ b/code/__HELPERS/files.dm @@ -20,7 +20,7 @@ continue path += choice - if(copytext(path,-1,0) != "/") //didn't choose a directory, no need to iterate again + if(copytext_char(path, -1) != "/") //didn't choose a directory, no need to iterate again break var/extensions for(var/i in valid_extensions) diff --git a/code/__HELPERS/game.dm b/code/__HELPERS/game.dm index 341dbb7d601..e6424592ff6 100644 --- a/code/__HELPERS/game.dm +++ b/code/__HELPERS/game.dm @@ -196,48 +196,6 @@ return -// Better recursive loop, technically sort of not actually recursive cause that shit is retarded, enjoy. -//No need for a recursive limit either -/proc/recursive_mob_check(atom/O,client_check=1,sight_check=1,include_radio=1) - - var/list/processing_list = list(O) - var/list/processed_list = list() - var/list/found_mobs = list() - - while(processing_list.len) - - var/atom/A = processing_list[1] - var/passed = 0 - - if(ismob(A)) - var/mob/A_tmp = A - passed=1 - - if(client_check && !A_tmp.client) - passed=0 - - if(sight_check && !isInSight(A_tmp, O)) - passed=0 - - else if(include_radio && istype(A, /obj/item/radio)) - passed=1 - - if(sight_check && !isInSight(A, O)) - passed=0 - - if(passed) - found_mobs |= A - - for(var/atom/B in A) - if(!processed_list[B]) - processing_list |= B - - processing_list.Cut(1, 2) - processed_list[A] = A - - return found_mobs - - /proc/get_hearers_in_view(R, atom/source) // Returns a list of hearers in view(R) from source (ignoring luminosity). Used in saycode. var/turf/T = get_turf(source) @@ -453,7 +411,7 @@ var/list/result = list() for(var/m in group) var/mob/M = m - if(!M.key || !M.client || (ignore_category && GLOB.poll_ignore[ignore_category] && M.ckey in GLOB.poll_ignore[ignore_category])) + if(!M.key || !M.client || (ignore_category && GLOB.poll_ignore[ignore_category] && (M.ckey in GLOB.poll_ignore[ignore_category]))) continue if(be_special_flag) if(!(M.client.prefs) || !(be_special_flag in M.client.prefs.be_special)) diff --git a/code/__HELPERS/icons.dm b/code/__HELPERS/icons.dm index 1944cff9c61..53eec1504d6 100644 --- a/code/__HELPERS/icons.dm +++ b/code/__HELPERS/icons.dm @@ -981,7 +981,7 @@ world var/icon/atom_icon = new(A.icon, A.icon_state) if(!letter) - letter = copytext(A.name, 1, 2) + letter = A.name[1] if(uppercase == 1) letter = uppertext(letter) else if(uppercase == -1) @@ -1109,7 +1109,7 @@ GLOBAL_LIST_INIT(freon_color_matrix, list("#2E5E69", "#60A2A8", "#A1AFB1", rgb(0 WRITE_FILE(GLOB.iconCache[iconKey], icon) var/iconData = GLOB.iconCache.ExportText(iconKey) var/list/partial = splittext(iconData, "{") - return replacetext(copytext(partial[2], 3, -5), "\n", "") + return replacetext(copytext_char(partial[2], 3, -5), "\n", "") /proc/icon2html(thing, target, icon_state, dir, frame = 1, moving = FALSE) if (!thing) diff --git a/code/__HELPERS/mobs.dm b/code/__HELPERS/mobs.dm index b8944cdc7a6..cc18622ddc2 100644 --- a/code/__HELPERS/mobs.dm +++ b/code/__HELPERS/mobs.dm @@ -431,7 +431,7 @@ GLOBAL_LIST_EMPTY(species_list) continue if(M.stat != DEAD && !override) continue - if(speaker_key && speaker_key in ignoring) + if(speaker_key && (speaker_key in ignoring)) continue switch(message_type) diff --git a/code/__HELPERS/pronouns.dm b/code/__HELPERS/pronouns.dm index ae803b8c8f1..bfe09ba370c 100644 --- a/code/__HELPERS/pronouns.dm +++ b/code/__HELPERS/pronouns.dm @@ -28,10 +28,10 @@ . = "does" /datum/proc/p_theyve(capitalized, temp_gender) - . = p_they(capitalized, temp_gender) + "'" + copytext(p_have(temp_gender), 3) + . = p_they(capitalized, temp_gender) + "'" + copytext_char(p_have(temp_gender), 3) /datum/proc/p_theyre(capitalized, temp_gender) - . = p_they(capitalized, temp_gender) + "'" + copytext(p_are(temp_gender), 2) + . = p_they(capitalized, temp_gender) + "'" + copytext_char(p_are(temp_gender), 2) /datum/proc/p_s(temp_gender) //is this a descriptive proc name, or what? . = "s" diff --git a/code/__HELPERS/roundend.dm b/code/__HELPERS/roundend.dm index 9132a378d32..e173231ffdf 100644 --- a/code/__HELPERS/roundend.dm +++ b/code/__HELPERS/roundend.dm @@ -188,10 +188,16 @@ cb.InvokeAsync() LAZYCLEARLIST(round_end_events) + var/speed_round = FALSE + if(world.time - SSticker.round_start_time <= 300 SECONDS) + speed_round = TRUE + for(var/client/C in GLOB.clients) if(!C.credits) C.RollCredits() C.playtitlemusic(40) + if(speed_round) + C.give_award(/datum/award/achievement/misc/speed_round, C.mob) var/popcount = gather_roundend_feedback() display_report(popcount) diff --git a/code/__HELPERS/sanitize_values.dm b/code/__HELPERS/sanitize_values.dm index 5588b0309f1..9a2e18f3156 100644 --- a/code/__HELPERS/sanitize_values.dm +++ b/code/__HELPERS/sanitize_values.dm @@ -16,7 +16,7 @@ return value if(default) return default - + /proc/sanitize_inlist(value, list/List, default) if(value in List) return value @@ -52,9 +52,12 @@ var/start = 1 + (text2ascii(color, 1) == 35) var/len = length(color) var/char = "" + // RRGGBB -> RGB but awful + var/convert_to_shorthand = desired_format == 3 && length_char(color) > 3 . = "" - for(var/i = start, i <= len, i += length(char)) + var/i = start + while(i <= len) char = color[i] switch(text2ascii(char)) if(48 to 57) //numbers 0 to 9 @@ -65,6 +68,9 @@ . += lowertext(char) else break + i += length(char) + if(convert_to_shorthand && i <= len) //skip next one + i += length(color[i]) if(length_char(.) != desired_format) if(default) @@ -74,7 +80,9 @@ return crunch + . /proc/sanitize_ooccolor(color) - var/list/HSL = rgb2hsl(hex2num(copytext(color,2,4)),hex2num(copytext(color,4,6)),hex2num(copytext(color,6,8))) + if(length(color) != length_char(color)) + CRASH("Invalid characters in color '[color]'") + var/list/HSL = rgb2hsl(hex2num(copytext(color, 2, 4)), hex2num(copytext(color, 4, 6)), hex2num(copytext(color, 6, 8))) HSL[3] = min(HSL[3],0.4) var/list/RGB = hsl2rgb(arglist(HSL)) return "#[num2hex(RGB[1],2)][num2hex(RGB[2],2)][num2hex(RGB[3],2)]" diff --git a/code/__HELPERS/shell.dm b/code/__HELPERS/shell.dm index eed86a3bd10..35a8e4635b4 100644 --- a/code/__HELPERS/shell.dm +++ b/code/__HELPERS/shell.dm @@ -55,6 +55,6 @@ if(bad_chars) bad_match = url_encode(bad_chars_regex.match) scrubbed_url += bad_match - last_good = bad_chars + length(bad_match) + last_good = bad_chars + length(bad_chars_regex.match) while(bad_chars) . = scrubbed_url diff --git a/code/__HELPERS/type2type.dm b/code/__HELPERS/type2type.dm index 9495d2fb174..2026397a047 100644 --- a/code/__HELPERS/type2type.dm +++ b/code/__HELPERS/type2type.dm @@ -485,17 +485,17 @@ //assumes format #RRGGBB #rrggbb /proc/color_hex2num(A) - if(!A) + if(!A || length(A) != length_char(A)) return 0 - var/R = hex2num(copytext(A,2,4)) - var/G = hex2num(copytext(A,4,6)) - var/B = hex2num(copytext(A,6,0)) + var/R = hex2num(copytext(A, 2, 4)) + var/G = hex2num(copytext(A, 4, 6)) + var/B = hex2num(copytext(A, 6, 8)) return R+G+B //word of warning: using a matrix like this as a color value will simplify it back to a string after being set /proc/color_hex2color_matrix(string) var/length = length(string) - if(length != 7 && length != 9) + if((length != 7 && length != 9) || length != length_char(string)) return color_matrix_identity() var/r = hex2num(copytext(string, 2, 4))/255 var/g = hex2num(copytext(string, 4, 6))/255 diff --git a/code/__HELPERS/type_processing.dm b/code/__HELPERS/type_processing.dm index 50684c79532..05a0dd28552 100644 --- a/code/__HELPERS/type_processing.dm +++ b/code/__HELPERS/type_processing.dm @@ -31,8 +31,8 @@ /mob = "M" ) for (var/tn in TYPES_SHORTCUTS) - if (copytext(typename,1, length("[tn]/")+1)=="[tn]/" /*findtextEx(typename,"[tn]/",1,2)*/ ) - typename = TYPES_SHORTCUTS[tn]+copytext(typename,length("[tn]/")) + if(copytext(typename, 1, length("[tn]/") + 1) == "[tn]/" /*findtextEx(typename,"[tn]/",1,2)*/ ) + typename = TYPES_SHORTCUTS[tn] + copytext(typename, length("[tn]/")) break .[typename] = type diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm index f49e49e2895..e6feb5274ac 100644 --- a/code/__HELPERS/unsorted.dm +++ b/code/__HELPERS/unsorted.dm @@ -6,22 +6,16 @@ //Inverts the colour of an HTML string /proc/invertHTML(HTMLstring) - - if (!( istext(HTMLstring) )) + if(!istext(HTMLstring)) CRASH("Given non-text argument!") - else - if (length(HTMLstring) != 7) - CRASH("Given non-HTML argument!") + else if(length(HTMLstring) != 7) + CRASH("Given non-HTML argument!") + else if(length_char(HTMLstring) != 7) + CRASH("Given non-hex symbols in argument!") var/textr = copytext(HTMLstring, 2, 4) var/textg = copytext(HTMLstring, 4, 6) var/textb = copytext(HTMLstring, 6, 8) - var/r = hex2num(textr) - var/g = hex2num(textg) - var/b = hex2num(textb) - textr = num2hex(255 - r, 2) - textg = num2hex(255 - g, 2) - textb = num2hex(255 - b, 2) - return text("#[][][]", textr, textg, textb) + return rgb(255 - hex2num(textr), 255 - hex2num(textg), 255 - hex2num(textb)) /proc/Get_Angle(atom/movable/start,atom/movable/end)//For beams. if(!start || !end) @@ -1400,7 +1394,7 @@ GLOBAL_DATUM_INIT(dview_mob, /mob/dview, new) /proc/GUID() var/const/GUID_VERSION = "b" var/const/GUID_VARIANT = "d" - var/node_id = copytext(md5("[rand()*rand(1,9999999)][world.name][world.hub][world.hub_password][world.internet_address][world.address][world.contents.len][world.status][world.port][rand()*rand(1,9999999)]"), 1, 13) + var/node_id = copytext_char(md5("[rand()*rand(1,9999999)][world.name][world.hub][world.hub_password][world.internet_address][world.address][world.contents.len][world.status][world.port][rand()*rand(1,9999999)]"), 1, 13) var/time_high = "[num2hex(text2num(time2text(world.realtime,"YYYY")), 2)][num2hex(world.realtime, 6)]" diff --git a/code/_onclick/hud/alert.dm b/code/_onclick/hud/alert.dm index 617510c2f30..61bc30a8352 100644 --- a/code/_onclick/hud/alert.dm +++ b/code/_onclick/hud/alert.dm @@ -42,7 +42,7 @@ thealert.override_alerts = override if(override) thealert.timeout = null - thealert.mob_viewer = src + thealert.owner = src if(new_master) var/old_layer = new_master.layer @@ -97,7 +97,7 @@ var/severity = 0 var/alerttooltipstyle = "" var/override_alerts = FALSE //If it is overriding other alerts of the same type - var/mob/mob_viewer //the mob viewing this alert + var/mob/owner //Alert owner /obj/screen/alert/MouseEntered(location,control,params) @@ -227,6 +227,8 @@ or something covering your eyes." /obj/screen/alert/mind_control/Click() var/mob/living/L = usr + if(L != owner) + return to_chat(L, "[command]") /obj/screen/alert/drunk //Not implemented @@ -241,7 +243,7 @@ If you're feeling frisky, examine yourself and click the underlined item to pull icon_state = "embeddedobject" /obj/screen/alert/embeddedobject/Click() - if(isliving(usr)) + if(isliving(usr) && usr == owner) var/mob/living/carbon/human/M = usr return M.help_shake_act(M) @@ -270,7 +272,7 @@ or shoot a gun to move around via Newton's 3rd Law of Motion." /obj/screen/alert/fire/Click() var/mob/living/L = usr - if(!istype(L) || !L.can_resist()) + if(!istype(L) || !L.can_resist() || L != owner) return L.changeNext_move(CLICK_CD_RESIST) if(L.mobility_flags & MOBILITY_MOVE) @@ -330,10 +332,10 @@ or shoot a gun to move around via Newton's 3rd Law of Motion." /obj/screen/alert/bloodsense/process() var/atom/blood_target - if(!mob_viewer.mind) + if(!owner.mind) return - var/datum/antagonist/cult/antag = mob_viewer.mind.has_antag_datum(/datum/antagonist/cult,TRUE) + var/datum/antagonist/cult/antag = owner.mind.has_antag_datum(/datum/antagonist/cult,TRUE) if(!antag) return var/datum/objective/sacrifice/sac_objective = locate() in antag.cult_team.objectives @@ -370,7 +372,7 @@ or shoot a gun to move around via Newton's 3rd Law of Motion." add_overlay(narnar) return var/turf/P = get_turf(blood_target) - var/turf/Q = get_turf(mob_viewer) + var/turf/Q = get_turf(owner) if(!P || !Q || (P.z != Q.z)) //The target is on a different Z level, we cannot sense that far. icon_state = "runed_sense2" desc = "You can no longer sense your target's presence." @@ -494,7 +496,7 @@ so as to remain in compliance with the most up-to-date laws." var/atom/target = null /obj/screen/alert/hackingapc/Click() - if(!usr || !usr.client) + if(!usr || !usr.client || usr != owner) return if(!target) return @@ -520,7 +522,7 @@ so as to remain in compliance with the most up-to-date laws." timeout = 300 /obj/screen/alert/notify_cloning/Click() - if(!usr || !usr.client) + if(!usr || !usr.client || usr != owner) return var/mob/dead/observer/G = usr G.reenter_corpse() @@ -534,7 +536,7 @@ so as to remain in compliance with the most up-to-date laws." var/action = NOTIFY_JUMP /obj/screen/alert/notify_action/Click() - if(!usr || !usr.client) + if(!usr || !usr.client || usr != owner) return if(!target) return @@ -568,7 +570,7 @@ so as to remain in compliance with the most up-to-date laws." /obj/screen/alert/restrained/Click() var/mob/living/L = usr - if(!istype(L) || !L.can_resist()) + if(!istype(L) || !L.can_resist() || L != owner) return L.changeNext_move(CLICK_CD_RESIST) if((L.mobility_flags & MOBILITY_MOVE) && (L.last_special <= world.time)) @@ -576,7 +578,7 @@ so as to remain in compliance with the most up-to-date laws." /obj/screen/alert/restrained/buckled/Click() var/mob/living/L = usr - if(!istype(L) || !L.can_resist()) + if(!istype(L) || !L.can_resist() || L != owner) return L.changeNext_move(CLICK_CD_RESIST) if(L.last_special <= world.time) @@ -585,11 +587,14 @@ so as to remain in compliance with the most up-to-date laws." // PRIVATE = only edit, use, or override these if you're editing the system as a whole // Re-render all alerts - also called in /datum/hud/show_hud() because it's needed there -/datum/hud/proc/reorganize_alerts() +/datum/hud/proc/reorganize_alerts(mob/viewmob) + var/mob/screenmob = viewmob || mymob + if(!screenmob.client) + return var/list/alerts = mymob.alerts if(!hud_shown) for(var/i = 1, i <= alerts.len, i++) - mymob.client.screen -= alerts[alerts[i]] + screenmob.client.screen -= alerts[alerts[i]] return 1 for(var/i = 1, i <= alerts.len, i++) var/obj/screen/alert/alert = alerts[alerts[i]] @@ -609,7 +614,10 @@ so as to remain in compliance with the most up-to-date laws." else . = "" alert.screen_loc = . - mymob.client.screen |= alert + screenmob.client.screen |= alert + if(!viewmob) + for(var/M in mymob.observers) + reorganize_alerts(M) return 1 /obj/screen/alert/Click(location, control, params) @@ -619,6 +627,8 @@ so as to remain in compliance with the most up-to-date laws." if(paramslist["shift"]) // screen objects don't do the normal Click() stuff so we'll cheat to_chat(usr, "[name] - [desc]") return + if(usr != owner) + return if(master) return usr.client.Click(master, location, control, params) @@ -626,5 +636,5 @@ so as to remain in compliance with the most up-to-date laws." . = ..() severity = 0 master = null - mob_viewer = null + owner = null screen_loc = "" diff --git a/code/_onclick/hud/ghost.dm b/code/_onclick/hud/ghost.dm index 549b6346ce2..b301173d38a 100644 --- a/code/_onclick/hud/ghost.dm +++ b/code/_onclick/hud/ghost.dm @@ -93,3 +93,11 @@ screenmob.client.screen -= static_inventory else screenmob.client.screen += static_inventory + +//We should only see observed mob alerts. +/datum/hud/ghost/reorganize_alerts(mob/viewmob) + var/mob/dead/observer/O = mymob + if (istype(O) && O.observetarget) + return + . = ..() + diff --git a/code/_onclick/hud/hud.dm b/code/_onclick/hud/hud.dm index cde48e31ca3..abcf107d202 100644 --- a/code/_onclick/hud/hud.dm +++ b/code/_onclick/hud/hud.dm @@ -189,7 +189,7 @@ GLOBAL_LIST_INIT(available_ui_styles, list( hud_version = display_hud_version persistent_inventory_update(screenmob) screenmob.update_action_buttons(1) - reorganize_alerts() + reorganize_alerts(screenmob) screenmob.reload_fullscreen() update_parallax_pref(screenmob) diff --git a/code/controllers/configuration/config_entry.dm b/code/controllers/configuration/config_entry.dm index 49ff1c8d498..0115d5cb975 100644 --- a/code/controllers/configuration/config_entry.dm +++ b/code/controllers/configuration/config_entry.dm @@ -163,7 +163,8 @@ if(key_pos || value_mode == VALUE_MODE_FLAG) key_name = lowertext(copytext(str_val, 1, key_pos)) - key_value = copytext(str_val, key_pos + 1) + if(key_pos) + key_value = copytext(str_val, key_pos + length(str_val[key_pos])) var/new_key var/new_value var/continue_check_value diff --git a/code/controllers/configuration/configuration.dm b/code/controllers/configuration/configuration.dm index 5f874a8dd9c..e93c804ac25 100644 --- a/code/controllers/configuration/configuration.dm +++ b/code/controllers/configuration/configuration.dm @@ -111,13 +111,13 @@ if(!L) continue - var/firstchar = copytext(L, 1, 2) + var/firstchar = L[1] if(firstchar == "#") continue var/lockthis = firstchar == "@" if(lockthis) - L = copytext(L, 2) + L = copytext(L, length(firstchar) + 1) var/pos = findtext(L, " ") var/entry = null @@ -125,7 +125,7 @@ if(pos) entry = lowertext(copytext(L, 1, pos)) - value = copytext(L, pos + 1) + value = copytext(L, pos + length(L[pos])) else entry = lowertext(L) @@ -291,7 +291,7 @@ Example config: t = trim(t) if(length(t) == 0) continue - else if(copytext(t, 1, 2) == "#") + else if(t[1] == "#") continue var/pos = findtext(t, " ") @@ -300,7 +300,7 @@ Example config: if(pos) command = lowertext(copytext(t, 1, pos)) - data = copytext(t, pos + 1) + data = copytext(t, pos + length(t[pos])) else command = lowertext(t) diff --git a/code/controllers/subsystem/blackbox.dm b/code/controllers/subsystem/blackbox.dm index b1f4de116d2..c97ffa7021b 100644 --- a/code/controllers/subsystem/blackbox.dm +++ b/code/controllers/subsystem/blackbox.dm @@ -270,6 +270,25 @@ Versioning key = new_key key_type = new_key_type +/datum/controller/subsystem/blackbox/proc/LogAhelp(ticket, action, message, recipient, sender) + + if(!SSdbcore.Connect()) + return + + ticket = sanitizeSQL(ticket) + action = sanitizeSQL(action) + message = sanitizeSQL(message) + recipient = recipient ? "'[sanitizeSQL(recipient)]'" : "NULL" + sender = sender ? "'[sanitizeSQL(sender)]'" : "NULL" + var/server_ip = sanitizeSQL(world.internet_address) + var/server_port = sanitizeSQL(world.port) + var/round_id = sanitizeSQL(GLOB.round_id) + + var/datum/DBQuery/query_log_ahelp = SSdbcore.NewQuery("INSERT INTO [format_table_name("ticket")] (ticket, action, message, recipient, sender, server_ip, server_port, round_id, timestamp) VALUES ('[ticket]', '[action]', '[message]', [recipient], [sender], INET_ATON(IF('[server_ip]' LIKE '', '0', '[server_ip]')), '[server_port]','[round_id]', '[SQLtime()]')") + query_log_ahelp.Execute() + qdel(query_log_ahelp) + + /datum/controller/subsystem/blackbox/proc/ReportDeath(mob/living/L) set waitfor = FALSE if(sealed) diff --git a/code/controllers/subsystem/economy.dm b/code/controllers/subsystem/economy.dm index 0fdf902c963..078d122aa65 100644 --- a/code/controllers/subsystem/economy.dm +++ b/code/controllers/subsystem/economy.dm @@ -113,7 +113,7 @@ SUBSYSTEM_DEF(economy) D.adjust_money(medical_cash) if(ishostile(m)) var/mob/living/simple_animal/hostile/H = m - if(H.stat == DEAD && H.z in SSmapping.levels_by_trait(ZTRAIT_STATION)) + if(H.stat == DEAD && (H.z in SSmapping.levels_by_trait(ZTRAIT_STATION))) dead_monsters++ CHECK_TICK var/living_ratio = alive_crew / crew diff --git a/code/controllers/subsystem/job.dm b/code/controllers/subsystem/job.dm index e0a26570f74..5214c4b162b 100644 --- a/code/controllers/subsystem/job.dm +++ b/code/controllers/subsystem/job.dm @@ -115,7 +115,7 @@ SUBSYSTEM_DEF(job) if(flag && (!(flag in player.client.prefs.be_special))) JobDebug("FOC flag failed, Player: [player], Flag: [flag], ") continue - if(player.mind && job.title in player.mind.restricted_roles) + if(player.mind && (job.title in player.mind.restricted_roles)) JobDebug("FOC incompatible with antagonist role, Player: [player]") continue if(player.client.prefs.job_preferences[job.title] == level) @@ -151,7 +151,7 @@ SUBSYSTEM_DEF(job) JobDebug("GRJ player not enough xp, Player: [player]") continue - if(player.mind && job.title in player.mind.restricted_roles) + if(player.mind && (job.title in player.mind.restricted_roles)) JobDebug("GRJ incompatible with antagonist role, Player: [player], Job: [job.title]") continue @@ -331,7 +331,7 @@ SUBSYSTEM_DEF(job) JobDebug("DO player not enough xp, Player: [player], Job:[job.title]") continue - if(player.mind && job.title in player.mind.restricted_roles) + if(player.mind && (job.title in player.mind.restricted_roles)) JobDebug("DO incompatible with antagonist role, Player: [player], Job:[job.title]") continue diff --git a/code/controllers/subsystem/pai.dm b/code/controllers/subsystem/pai.dm index b802c6868f7..2583ae99c87 100644 --- a/code/controllers/subsystem/pai.dm +++ b/code/controllers/subsystem/pai.dm @@ -37,34 +37,34 @@ SUBSYSTEM_DEF(pai) switch(option) if("name") - t = input("Enter a name for your pAI", "pAI Name", candidate.name) as text|null + t = sanitize_name(stripped_input(usr, "Enter a name for your pAI", "pAI Name", candidate.name, MAX_NAME_LEN)) if(t) - candidate.name = copytext(sanitize_name(t),1,MAX_NAME_LEN) + candidate.name = t if("desc") - t = input("Enter a description for your pAI", "pAI Description", candidate.description) as message|null + t = stripped_multiline_input(usr, "Enter a description for your pAI", "pAI Description", candidate.description, MAX_MESSAGE_LEN) if(t) - candidate.description = copytext(sanitize(t),1,MAX_MESSAGE_LEN) + candidate.description = t if("role") - t = input("Enter a role for your pAI", "pAI Role", candidate.role) as text|null + t = stripped_input(usr, "Enter a role for your pAI", "pAI Role", candidate.role, MAX_MESSAGE_LEN) if(t) - candidate.role = copytext(sanitize(t),1,MAX_MESSAGE_LEN) + candidate.role = t if("ooc") - t = input("Enter any OOC comments", "pAI OOC Comments", candidate.comments) as message|null + t = stripped_multiline_input(usr, "Enter any OOC comments", "pAI OOC Comments", candidate.comments, MAX_MESSAGE_LEN) if(t) - candidate.comments = copytext(sanitize(t),1,MAX_MESSAGE_LEN) + candidate.comments = t if("save") candidate.savefile_save(usr) if("load") candidate.savefile_load(usr) //In case people have saved unsanitized stuff. if(candidate.name) - candidate.name = copytext(sanitize(candidate.name),1,MAX_NAME_LEN) + candidate.name = copytext_char(sanitize(candidate.name),1,MAX_NAME_LEN) if(candidate.description) - candidate.description = copytext(sanitize(candidate.description),1,MAX_MESSAGE_LEN) + candidate.description = copytext_char(sanitize(candidate.description),1,MAX_MESSAGE_LEN) if(candidate.role) - candidate.role = copytext(sanitize(candidate.role),1,MAX_MESSAGE_LEN) + candidate.role = copytext_char(sanitize(candidate.role),1,MAX_MESSAGE_LEN) if(candidate.comments) - candidate.comments = copytext(sanitize(candidate.comments),1,MAX_MESSAGE_LEN) + candidate.comments = copytext_char(sanitize(candidate.comments),1,MAX_MESSAGE_LEN) if("submit") if(candidate) diff --git a/code/controllers/subsystem/processing/networks.dm b/code/controllers/subsystem/processing/networks.dm index 0ca5472a6a2..719e97d1eed 100644 --- a/code/controllers/subsystem/processing/networks.dm +++ b/code/controllers/subsystem/processing/networks.dm @@ -46,6 +46,6 @@ PROCESSING_SUBSYSTEM_DEF(networks) var/hex = md5(string) if(!hex) return //errored - . = "[copytext(hex, 1, 9)]" //16 ^ 8 possibilities I think. + . = "[copytext_char(hex, 1, 9)]" //16 ^ 8 possibilities I think. if(interfaces_by_id[.]) return resolve_collisions? make_address("[num2text(rand(HID_RESTRICTED_END, 999999999), 12)]"):null diff --git a/code/controllers/subsystem/processing/quirks.dm b/code/controllers/subsystem/processing/quirks.dm index 55715325859..365b2320d7e 100644 --- a/code/controllers/subsystem/processing/quirks.dm +++ b/code/controllers/subsystem/processing/quirks.dm @@ -1,3 +1,4 @@ +#define EXP_ASSIGN_WAYFINDER 1200 //Used to process and handle roundstart quirks // - Quirk strings are used for faster checking in code // - Quirk datums are stored and hold different effects, as well as being a vector for applying trait string @@ -43,5 +44,5 @@ PROCESSING_SUBSYSTEM_DEF(quirks) cli.prefs.save_character() // Assign wayfinding pinpointer granting quirk if they're new - if(cli.get_exp_living(TRUE) < 1200 && !user.has_quirk(/datum/quirk/needswayfinder)) + if(cli.get_exp_living(TRUE) < EXP_ASSIGN_WAYFINDER && !user.has_quirk(/datum/quirk/needswayfinder)) user.add_quirk(/datum/quirk/needswayfinder, TRUE) diff --git a/code/controllers/subsystem/profiler.dm b/code/controllers/subsystem/profiler.dm index 2136f3cace0..ec8b243073e 100644 --- a/code/controllers/subsystem/profiler.dm +++ b/code/controllers/subsystem/profiler.dm @@ -4,7 +4,15 @@ SUBSYSTEM_DEF(profiler) name = "Profiler" init_order = INIT_ORDER_PROFILER runlevels = RUNLEVELS_DEFAULT | RUNLEVEL_LOBBY - wait = 600 + wait = 3000 + flags = SS_NO_TICK_CHECK + var/fetch_cost = 0 + var/write_cost = 0 + +/datum/controller/subsystem/profiler/stat_entry(msg) + msg += "F:[round(fetch_cost,1)]ms" + msg += "|W:[round(write_cost,1)]ms" + ..(msg) /datum/controller/subsystem/profiler/Initialize() if(CONFIG_GET(flag/auto_profile)) @@ -40,11 +48,16 @@ SUBSYSTEM_DEF(profiler) stack_trace("Auto profiling unsupported on this byond version") CONFIG_SET(flag/auto_profile, FALSE) #else + var/timer = TICK_USAGE_REAL var/current_profile_data = world.Profile(PROFILE_REFRESH,format="json") + fetch_cost = MC_AVERAGE(fetch_cost, TICK_DELTA_TO_MS(TICK_USAGE_REAL - timer)) + CHECK_TICK if(!length(current_profile_data)) //Would be nice to have explicit proc to check this stack_trace("Warning, profiling stopped manually before dump.") var/json_file = file("[GLOB.log_directory]/[PROFILER_FILENAME]") if(fexists(json_file)) fdel(json_file) + timer = TICK_USAGE_REAL WRITE_FILE(json_file, current_profile_data) + write_cost = MC_AVERAGE(write_cost, TICK_DELTA_TO_MS(TICK_USAGE_REAL - timer)) #endif diff --git a/code/datums/achievements/boss_achievements.dm b/code/datums/achievements/boss_achievements.dm index d50c6a37203..1c0cc0ad9ee 100644 --- a/code/datums/achievements/boss_achievements.dm +++ b/code/datums/achievements/boss_achievements.dm @@ -1,75 +1,90 @@ /datum/award/achievement/boss category = "Bosses" + icon = "baseboss" /datum/award/achievement/boss/tendril_exterminator name = "Tendril Exterminator" desc = "Watch your step" database_id = BOSS_MEDAL_TENDRIL + icon = "tendril" /datum/award/achievement/boss/boss_killer name = "Boss Killer" desc = "You've come a long ways from asking how to switch hands." database_id = "Boss Killer" + icon = "firstboss" /datum/award/achievement/boss/blood_miner_kill name = "Blood-drunk Miner Killer" desc = "I guess he couldn't handle his drink that well." database_id = BOSS_MEDAL_MINER + icon = "miner" /datum/award/achievement/boss/bubblegum_kill name = "Bubblegum Killer" desc = "I guess he wasn't made of candy after all" database_id = BOSS_MEDAL_BUBBLEGUM + icon = "bbgum" -/datum/award/achievement/boss/colussus_kill - name = "Colussus Killer" +/datum/award/achievement/boss/colossus_kill + name = "Colossus Killer" desc = "The bigger they are... the better the loot" database_id = BOSS_MEDAL_COLOSSUS + icon = "colossus" /datum/award/achievement/boss/drake_kill name = "Drake Killer" desc = "Now I can wear Rune Platebodies!" database_id = BOSS_MEDAL_DRAKE + icon = "drake" /datum/award/achievement/boss/hierophant_kill name = "Hierophant Killer" desc = "Hierophant, but not triumphant." database_id = BOSS_MEDAL_HIEROPHANT + icon = "hierophant" /datum/award/achievement/boss/legion_kill name = "Legion Killer" desc = "We were many..now we are none." database_id = BOSS_MEDAL_LEGION + icon = "legion" /datum/award/achievement/boss/swarmer_beacon_kill name = "Swarm Beacon Killer" desc = "GET THEM OFF OF ME!" database_id = BOSS_MEDAL_SWARMERS + icon = "swarmer" /datum/award/achievement/boss/blood_miner_crusher name = "Blood-drunk Miner Crusher" desc = "I guess he couldn't handle his drink that well." database_id = BOSS_MEDAL_MINER_CRUSHER + icon = "miner" /datum/award/achievement/boss/bubblegum_crusher name = "Bubblegum Crusher" desc = "I guess he wasn't made of candy after all" database_id = BOSS_MEDAL_BUBBLEGUM_CRUSHER + icon = "bbgum" -/datum/award/achievement/boss/colussus_crusher - name = "Colussus Crusher" +/datum/award/achievement/boss/colossus_crusher + name = "Colossus Crusher" desc = "The bigger they are... the better the loot" database_id = BOSS_MEDAL_COLOSSUS_CRUSHER + icon = "colossus" /datum/award/achievement/boss/drake_crusher name = "Drake Crusher" desc = "Now I can wear Rune Platebodies!" database_id = BOSS_MEDAL_DRAKE_CRUSHER + icon = "drake" /datum/award/achievement/boss/hierophant_crusher name = "Hierophant Crusher" desc = "Hierophant, but not triumphant." database_id = BOSS_MEDAL_HIEROPHANT_CRUSHER + icon = "hierophant" /datum/award/achievement/boss/legion_crusher name = "Legion Crusher" diff --git a/code/datums/achievements/misc_achievements.dm b/code/datums/achievements/misc_achievements.dm index a4f65925d27..3d3fe61a9f0 100644 --- a/code/datums/achievements/misc_achievements.dm +++ b/code/datums/achievements/misc_achievements.dm @@ -1,41 +1,49 @@ /datum/award/achievement/misc category = "Misc" + icon = "basemisc" /datum/award/achievement/misc/meteor_examine name = "Your Life Before Your Eyes" desc = "Take a close look at hurtling space debris" database_id = MEDAL_METEOR + icon = "meteors" /datum/award/achievement/misc/pulse name = "Jackpot" desc = "Win a pulse rifle from an arcade machine" database_id = MEDAL_PULSE + icon = "jackpot" /datum/award/achievement/misc/time_waste name = "Time waster" desc = "Speak no evil, hear no evil, see just errors" database_id = MEDAL_TIMEWASTE + icon = "timewaste" /datum/award/achievement/misc/feat_of_strength name = "Feat of Strength" desc = "If the rod is immovable, is it passing you or are you passing it?" database_id = MEDAL_RODSUPLEX + icon = "featofstrength" /datum/award/achievement/misc/round_and_full name = "Round and Full" desc = "Well at least you aren't down the river, I hear they eat people there." database_id = MEDAL_CLOWNCARKING + icon = "clownking" /datum/award/achievement/misc/the_best_driver name = "The Best Driver" desc = "100 honks later" database_id = MEDAL_THANKSALOT + icon = "clownthanks" /datum/award/achievement/misc/helbitaljanken name = "Helbitaljanken" desc = "You janked hard" database_id = MEDAL_HELBITALJANKEN - + icon = "helbital" + /datum/award/achievement/misc/getting_an_upgrade name = "Getting an upgrade" desc = "Make your first unique material item!" @@ -75,3 +83,15 @@ name = "One Lean, Mean, Cleaning Machine" desc = "How does it feel to know that your workplace values a mop bucket on wheels more than you?" // i can do better than this give me time database_id = MEDAL_CLEANBOSS + +/datum/award/achievement/misc/rule8 + name = "Rule 8" + desc = "Call an admin this is ILLEGAL!!" + database_id = MEDAL_RULE8 + icon = "rule8" + +/datum/award/achievement/misc/speed_round + name = "Long shift" + desc = "Well, that didn't take long." + database_id = MEDAL_LONGSHIFT + icon = "longshift" diff --git a/code/datums/achievements/skill_achievements.dm b/code/datums/achievements/skill_achievements.dm new file mode 100644 index 00000000000..7da936c61f4 --- /dev/null +++ b/code/datums/achievements/skill_achievements.dm @@ -0,0 +1,10 @@ +/datum/award/achievement/skill + category = "Skills" + icon = "baseskill" + +/datum/award/achievement/skill/legendary_miner + name = "Legendary miner" + desc = "No mere rock can stop me!" + database_id = MEDAL_LEGENDARY_MINER + icon = "mining" + diff --git a/code/datums/brain_damage/imaginary_friend.dm b/code/datums/brain_damage/imaginary_friend.dm index 17c26854b76..6b4766aba3a 100644 --- a/code/datums/brain_damage/imaginary_friend.dm +++ b/code/datums/brain_damage/imaginary_friend.dm @@ -152,7 +152,7 @@ to_chat(src, compose_message(speaker, message_language, raw_message, radio_freq, spans, message_mode)) /mob/camera/imaginary_friend/proc/friend_talk(message) - message = capitalize(trim(copytext(sanitize(message), 1, MAX_MESSAGE_LEN))) + message = capitalize(trim(copytext_char(sanitize(message), 1, MAX_MESSAGE_LEN))) if(!message) return diff --git a/code/datums/cinematic.dm b/code/datums/cinematic.dm index ed1b7d670ff..e26f8fba2cf 100644 --- a/code/datums/cinematic.dm +++ b/code/datums/cinematic.dm @@ -203,6 +203,20 @@ special() screen.icon_state = "summary_cult" +/datum/cinematic/cult_fail + id = CINEMATIC_CULT_FAIL + +/datum/cinematic/cult_fail/content() + screen.icon_state = "station_intact" + sleep(20) + cinematic_sound(sound('sound/creatures/narsie_rises.ogg')) + sleep(60) + cinematic_sound(sound('sound/effects/explosion_distant.ogg')) + sleep(10) + cinematic_sound(sound('sound/magic/demon_dies.ogg')) + sleep(30) + special() + /datum/cinematic/nuke_annihilation id = CINEMATIC_ANNIHILATION diff --git a/code/datums/components/gps.dm b/code/datums/components/gps.dm index 3118deb6c2a..890a854694c 100644 --- a/code/datums/components/gps.dm +++ b/code/datums/components/gps.dm @@ -133,12 +133,11 @@ GLOBAL_LIST_EMPTY(GPS_list) switch(action) if("rename") var/atom/parentasatom = parent - var/a = input("Please enter desired tag.", parentasatom.name, gpstag) as text|null + var/a = stripped_input(usr, "Please enter desired tag.", parentasatom.name, gpstag, 20) if (!a) return - a = copytext(sanitize(a), 1, 20) gpstag = a . = TRUE parentasatom.name = "global positioning system ([gpstag])" diff --git a/code/datums/components/storage/storage.dm b/code/datums/components/storage/storage.dm index ca5169aaebe..1e12ff9fd33 100644 --- a/code/datums/components/storage/storage.dm +++ b/code/datums/components/storage/storage.dm @@ -606,7 +606,7 @@ if(!stop_messages) to_chat(M, "[host] cannot hold [I]!") return FALSE - if(is_type_in_typecache(I, cant_hold)) //Check for specific items which this container can't hold. + if(is_type_in_typecache(I, cant_hold) || HAS_TRAIT(I, TRAIT_NO_STORAGE_INSERT)) //Items which this container can't hold. if(!stop_messages) to_chat(M, "[host] cannot hold [I]!") return FALSE diff --git a/code/datums/dna.dm b/code/datums/dna.dm index 6095e70fa14..231fc1ec01f 100644 --- a/code/datums/dna.dm +++ b/code/datums/dna.dm @@ -156,8 +156,8 @@ if(active) return sequence while(difficulty) - var/randnum = rand(1, length(sequence)) - sequence = copytext(sequence, 1, randnum) + "X" + copytext(sequence, randnum+1, length(sequence)+1) + var/randnum = rand(1, length_char(sequence)) + sequence = copytext_char(sequence, 1, randnum) + "X" + copytext_char(sequence, randnum + 1) difficulty-- return sequence @@ -461,14 +461,14 @@ /proc/getleftblocks(input,blocknumber,blocksize) if(blocknumber > 1) - return copytext(input,1,((blocksize*blocknumber)-(blocksize-1))) + return copytext_char(input,1,((blocksize*blocknumber)-(blocksize-1))) /proc/getrightblocks(input,blocknumber,blocksize) if(blocknumber < (length(input)/blocksize)) - return copytext(input,blocksize*blocknumber+1,length(input)+1) + return copytext_char(input,blocksize*blocknumber+1,length(input)+1) /proc/getblock(input, blocknumber, blocksize=DNA_BLOCK_SIZE) - return copytext(input, blocksize*(blocknumber-1)+1, (blocksize*blocknumber)+1) + return copytext_char(input, blocksize*(blocknumber-1)+1, (blocksize*blocknumber)+1) /proc/setblock(istring, blocknumber, replacement, blocksize=DNA_BLOCK_SIZE) if(!istring || !blocknumber || !replacement || !blocksize) diff --git a/code/datums/ductnet.dm b/code/datums/ductnet.dm index 744d9a919b0..14a74a67c49 100644 --- a/code/datums/ductnet.dm +++ b/code/datums/ductnet.dm @@ -7,7 +7,7 @@ var/capacity ///Add a duct to our network /datum/ductnet/proc/add_duct(obj/machinery/duct/D) - if(!D || D in ducts) + if(!D || (D in ducts)) return ducts += D D.duct = src @@ -52,7 +52,7 @@ for(var/A in D.ducts) var/obj/machinery/duct/M = A M.duct = src //forget your old master - + destroy_network() ///destroy the network and tell all our ducts and plumbers we are gone /datum/ductnet/proc/destroy_network(delete=TRUE) diff --git a/code/datums/elements/digitalcamo.dm b/code/datums/elements/digitalcamo.dm index e3a97002cc6..5451fbfe53b 100644 --- a/code/datums/elements/digitalcamo.dm +++ b/code/datums/elements/digitalcamo.dm @@ -8,7 +8,7 @@ /datum/element/digitalcamo/Attach(datum/target) . = ..() - if(!isliving(target) || target in attached_mobs) + if(!isliving(target) || (target in attached_mobs)) return ELEMENT_INCOMPATIBLE RegisterSignal(target, COMSIG_PARENT_EXAMINE, .proc/on_examine) RegisterSignal(target, COMSIG_LIVING_CAN_TRACK, .proc/can_track) diff --git a/code/datums/helper_datums/getrev.dm b/code/datums/helper_datums/getrev.dm index c9e96d6bc1f..fa2496ee3b1 100644 --- a/code/datums/helper_datums/getrev.dm +++ b/code/datums/helper_datums/getrev.dm @@ -44,7 +44,7 @@ for(var/line in testmerge) var/datum/tgs_revision_information/test_merge/tm = line var/cm = tm.pull_request_commit - var/details = ": '" + html_encode(tm.title) + "' by " + html_encode(tm.author) + " at commit " + html_encode(copytext(cm, 1, min(length(cm), 11))) + var/details = ": '" + html_encode(tm.title) + "' by " + html_encode(tm.author) + " at commit " + html_encode(copytext_char(cm, 1, 11)) if(details && findtext(details, "\[s\]") && (!usr || !usr.client.holder)) continue . += "#[tm.number][details]
" diff --git a/code/datums/holocall.dm b/code/datums/holocall.dm index 21bf6a293ad..a2bdec433b7 100644 --- a/code/datums/holocall.dm +++ b/code/datums/holocall.dm @@ -268,8 +268,8 @@ var/splitpoint = findtext(prepared_line," ") if(!splitpoint) continue - var/command = copytext(prepared_line,1,splitpoint) - var/value = copytext(prepared_line,splitpoint+1) + var/command = copytext(prepared_line, 1, splitpoint) + var/value = copytext(prepared_line, splitpoint + length(prepared_line[splitpoint])) switch(command) if("DELAY") var/delay_value = text2num(value) diff --git a/code/datums/martial/_martial.dm b/code/datums/martial/_martial.dm index c18f2c8de24..2396a2f8a67 100644 --- a/code/datums/martial/_martial.dm +++ b/code/datums/martial/_martial.dm @@ -27,7 +27,7 @@ reset_streak(D) streak = streak+element if(length(streak) > max_streak_length) - streak = copytext(streak,2) + streak = copytext(streak, 1 + length(streak[1])) /datum/martial_art/proc/reset_streak(mob/living/carbon/human/new_target) current_target = new_target diff --git a/code/datums/mind.dm b/code/datums/mind.dm index 54b064f4099..558b23111d5 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -183,9 +183,9 @@ last_death = world.time /datum/mind/proc/store_memory(new_text) - var/newlength = length(memory) + length(new_text) + var/newlength = length_char(memory) + length_char(new_text) if (newlength > MAX_MESSAGE_LEN * 100) - memory = copytext(memory, -newlength-MAX_MESSAGE_LEN * 100) + memory = copytext_char(memory, -newlength-MAX_MESSAGE_LEN * 100) memory += "[new_text]
" /datum/mind/proc/wipe_memory() @@ -447,7 +447,7 @@ assigned_role = new_role else if (href_list["memory_edit"]) - var/new_memo = copytext(sanitize(input("Write new memory", "Memory", memory) as null|message),1,MAX_MESSAGE_LEN) + var/new_memo = stripped_multiline_input(usr, "Write new memory", "Memory", memory, MAX_MESSAGE_LEN) if (isnull(new_memo)) return memory = new_memo diff --git a/code/datums/mood_events/generic_negative_events.dm b/code/datums/mood_events/generic_negative_events.dm index 52de07472a9..b2aa5b95cbd 100644 --- a/code/datums/mood_events/generic_negative_events.dm +++ b/code/datums/mood_events/generic_negative_events.dm @@ -176,7 +176,7 @@ /datum/mood_event/notcreepingsevere/add_effects(name) var/list/unstable = list(name) for(var/i in 1 to rand(3,5)) - unstable += copytext(name, -1) + unstable += copytext_char(name, -1) var/unhinged = uppertext(unstable.Join(""))//example Tinea Luxor > TINEA LUXORRRR (with randomness in how long that slur is) description = "THEY NEEEEEEED [unhinged]!!\n" diff --git a/code/datums/status_effects/debuffs.dm b/code/datums/status_effects/debuffs.dm index 75bcd5569c0..51794087288 100644 --- a/code/datums/status_effects/debuffs.dm +++ b/code/datums/status_effects/debuffs.dm @@ -160,11 +160,13 @@ /obj/screen/alert/status_effect/strandling/Click(location, control, params) . = ..() - to_chat(mob_viewer, "You attempt to remove the durathread strand from around your neck.") - if(do_after(mob_viewer, 35, null, mob_viewer)) - if(isliving(mob_viewer)) - var/mob/living/L = mob_viewer - to_chat(mob_viewer, "You succesfuly remove the durathread strand.") + if(usr != owner) + return + to_chat(owner, "You attempt to remove the durathread strand from around your neck.") + if(do_after(owner, 35, null, owner)) + if(isliving(owner)) + var/mob/living/L = owner + to_chat(owner, "You succesfuly remove the durathread strand.") L.remove_status_effect(STATUS_EFFECT_CHOKINGSTRAND) diff --git a/code/datums/traits/_quirk.dm b/code/datums/traits/_quirk.dm index 7337cdea20b..9187d57d856 100644 --- a/code/datums/traits/_quirk.dm +++ b/code/datums/traits/_quirk.dm @@ -16,6 +16,7 @@ ..() if(!quirk_mob || (human_only && !ishuman(quirk_mob)) || quirk_mob.has_quirk(type)) qdel(src) + return quirk_holder = quirk_mob SSquirks.quirk_objects += src to_chat(quirk_holder, gain_text) diff --git a/code/datums/traits/neutral.dm b/code/datums/traits/neutral.dm index 0f86aa5b9c1..853587888ff 100644 --- a/code/datums/traits/neutral.dm +++ b/code/datums/traits/neutral.dm @@ -150,6 +150,9 @@ var/mob/living/carbon/human/H = quirk_holder wayfinder = new /obj/item/pinpointer/wayfinding + wayfinder.owner = H.real_name + wayfinder.roundstart = TRUE + var/list/slots = list( "in your left pocket" = ITEM_SLOT_LPOCKET, "in your right pocket" = ITEM_SLOT_RPOCKET, diff --git a/code/datums/verbs.dm b/code/datums/verbs.dm index d8d7ee74334..8301c5fe384 100644 --- a/code/datums/verbs.dm +++ b/code/datums/verbs.dm @@ -88,8 +88,8 @@ var/list/entry = list() entry["parent"] = "[type]" entry["name"] = verbpath.desc - if (copytext(verbpath.name,1,2) == "@") - entry["command"] = copytext(verbpath.name,2) + if (verbpath.name[1] == "@") + entry["command"] = copytext(verbpath.name, length(verbpath.name[1]) + 1) else entry["command"] = replacetext(verbpath.name, " ", "-") diff --git a/code/game/area/Space_Station_13_areas.dm b/code/game/area/Space_Station_13_areas.dm index 3531b199da0..cabebc3ac90 100644 --- a/code/game/area/Space_Station_13_areas.dm +++ b/code/game/area/Space_Station_13_areas.dm @@ -479,7 +479,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station /area/engine/atmos name = "Atmospherics" icon_state = "atmos" - flags_1 = NONE + flags_1 = CULT_PERMITTED_1 /area/engine/atmospherics_engine name = "Atmospherics Engine" @@ -666,7 +666,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station /area/medical/virology name = "Virology" icon_state = "virology" - flags_1 = NONE + flags_1 = CULT_PERMITTED_1 /area/medical/morgue name = "Morgue" @@ -850,7 +850,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station /area/janitor name = "Custodial Closet" icon_state = "janitor" - flags_1 = NONE + flags_1 = CULT_PERMITTED_1 /area/hydroponics name = "Hydroponics" diff --git a/code/game/data_huds.dm b/code/game/data_huds.dm index c209c10a0ac..e2caa140996 100644 --- a/code/game/data_huds.dm +++ b/code/game/data_huds.dm @@ -186,11 +186,6 @@ if(HAS_TRAIT(src, TRAIT_XENO_HOST)) holder.icon_state = "hudxeno" else if(stat == DEAD || (HAS_TRAIT(src, TRAIT_FAKEDEATH))) - if(tod) - var/tdelta = round(world.time - timeofdeath) - if(tdelta < (DEFIB_TIME_LIMIT * 10)) - holder.icon_state = "huddefib" - return holder.icon_state = "huddead" else switch(virus_threat) diff --git a/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm b/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm index 2839d2324e6..b2b18c919e6 100644 --- a/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm +++ b/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm @@ -48,7 +48,7 @@ trimmed_list.Remove(M) continue if (M.mind) - if (restrict_ghost_roles && M.mind.assigned_role in GLOB.exp_specialmap[EXP_TYPE_SPECIAL]) // Are they playing a ghost role? + if (restrict_ghost_roles && (M.mind.assigned_role in GLOB.exp_specialmap[EXP_TYPE_SPECIAL])) // Are they playing a ghost role? trimmed_list.Remove(M) continue if (M.mind.assigned_role in restricted_roles) // Does their job allow it? diff --git a/code/game/machinery/computer/arcade.dm b/code/game/machinery/computer/arcade.dm index a6fe43171c3..1b07c5d4418 100644 --- a/code/game/machinery/computer/arcade.dm +++ b/code/game/machinery/computer/arcade.dm @@ -162,6 +162,11 @@ GLOBAL_LIST_INIT(arcade_prize_pool, list( name_part1 = pick_list(ARCADE_FILE, "rpg_adjective_xmas") name_part2 = pick_list(ARCADE_FILE, "rpg_enemy_xmas") weapons = strings(ARCADE_FILE, "rpg_weapon_xmas") + else if(SSevents.holidays && SSevents.holidays[VALENTINES]) + name_action = pick_list(ARCADE_FILE, "rpg_action_valentines") + name_part1 = pick_list(ARCADE_FILE, "rpg_adjective_valentines") + name_part2 = pick_list(ARCADE_FILE, "rpg_enemy_valentines") + weapons = strings(ARCADE_FILE, "rpg_weapon_valentines") else name_action = pick_list(ARCADE_FILE, "rpg_action") name_part1 = pick_list(ARCADE_FILE, "rpg_adjective") diff --git a/code/game/machinery/computer/cloning.dm b/code/game/machinery/computer/cloning.dm index 835490daab2..a19bc6d3d23 100644 --- a/code/game/machinery/computer/cloning.dm +++ b/code/game/machinery/computer/cloning.dm @@ -578,7 +578,7 @@ R.fields["mrace"] = rando_race.type R.fields["name"] = mob_occupant.real_name - R.fields["id"] = copytext(md5(mob_occupant.real_name), 2, 6) + R.fields["id"] = copytext_char(md5(mob_occupant.real_name), 2, 6) R.fields["UE"] = dna.unique_enzymes R.fields["UI"] = dna.uni_identity R.fields["SE"] = dna.mutation_index diff --git a/code/game/machinery/computer/communications.dm b/code/game/machinery/computer/communications.dm index 32423e67ee4..5912e8e7e74 100755 --- a/code/game/machinery/computer/communications.dm +++ b/code/game/machinery/computer/communications.dm @@ -127,15 +127,20 @@ if("crossserver") if(authenticated==2) + var/dest = href_list["cross_dest"] if(!checkCCcooldown()) to_chat(usr, "Arrays recycling. Please stand by.") playsound(src, 'sound/machines/terminal_prompt_deny.ogg', 50, FALSE) return - var/input = stripped_multiline_input(usr, "Please choose a message to transmit to allied stations. Please be aware that this process is very expensive, and abuse will lead to... termination.", "Send a message to an allied station.", "") + var/warning = dest == "all" ? "Please choose a message to transmit to allied stations." : "Please choose a message to transmit to [dest] sector station." + var/input = stripped_multiline_input(usr, "[warning] Please be aware that this process is very expensive, and abuse will lead to... termination.", "Send a message to an allied station.", "") if(!input || !(usr in view(1,src)) || !checkCCcooldown()) return playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, FALSE) - send2otherserver("[station_name()]", input,"Comms_Console") + if(dest == "all") + send2otherserver("[station_name()]", input,"Comms_Console") + else + send2otherserver("[station_name()]", input,"Comms_Console", list(dest)) minor_announce(input, title = "Outgoing message to allied station") usr.log_talk(input, LOG_SAY, tag="message to the other server") message_admins("[ADMIN_LOOKUPFLW(usr)] has sent a message to the other server.") @@ -470,9 +475,15 @@ if (authenticated==2) dat += "

Captain Functions" dat += "
\[ Make a Captain's Announcement \]" - var/cross_servers_count = length(CONFIG_GET(keyed_list/cross_server)) - if(cross_servers_count) - dat += "
\[ Send a message to [cross_servers_count == 1 ? "an " : ""]allied station[cross_servers_count > 1 ? "s" : ""] \]" + var/list/cross_servers = CONFIG_GET(keyed_list/cross_server) + var/our_id = CONFIG_GET(string/cross_comms_name) + if(cross_servers.len) + for(var/server in cross_servers) + if(server == our_id) + continue + dat += "
\[ Send a message to station in [server] sector. \]" + if(cross_servers.len > 2) + dat += "
\[ Send a message to all allied stations \]" if(SSmapping.config.allow_custom_shuttles) dat += "
\[ Purchase Shuttle \]" dat += "
\[ Change Alert Level \]" diff --git a/code/game/machinery/computer/dna_console.dm b/code/game/machinery/computer/dna_console.dm index bdf46bcdbd0..771060f0306 100644 --- a/code/game/machinery/computer/dna_console.dm +++ b/code/game/machinery/computer/dna_console.dm @@ -248,13 +248,18 @@ var/max_line_len = 7*DNA_BLOCK_SIZE if(viable_occupant) temp_html += "
1
" - var/len = length(viable_occupant.dna.uni_identity) - for(var/i=1, i<=len, i++) - temp_html += "[copytext(viable_occupant.dna.uni_identity,i,i+1)]" - if ((i % max_line_len) == 0) + var/char = "" + var/ui_text = viable_occupant.dna.uni_identity + var/len_byte = length(ui_text) + var/char_it = 0 + for(var/byte_it = 1, byte_it <= len_byte, byte_it += length(char)) + char_it++ + char = ui_text[byte_it] + temp_html += "[char]" + if((char_it % max_line_len) == 0) temp_html += "
" - if((i % DNA_BLOCK_SIZE) == 0 && i < len) - temp_html += "
[(i / DNA_BLOCK_SIZE) + 1]
" + if((char_it % DNA_BLOCK_SIZE) == 0 && byte_it < len_byte) + temp_html += "
[(char_it / DNA_BLOCK_SIZE) + 1]
" else temp_html += "---------" temp_html += "

Buffer Menu

" @@ -516,7 +521,7 @@ if(!scrambled) for(var/block in 1 to A.blocks) var/whole_sequence = get_valid_gene_string(mutation) - var/sequence = copytext(whole_sequence, 1+(block-1)*(DNA_SEQUENCE_LENGTH*2),(DNA_SEQUENCE_LENGTH*2*block+1)) + var/sequence = copytext_char(whole_sequence, 1+(block-1)*(DNA_SEQUENCE_LENGTH*2),(DNA_SEQUENCE_LENGTH*2*block+1)) temp_html += "
" for(var/i in 1 to DNA_SEQUENCE_LENGTH) var/num = 1+(i-1)*2 @@ -698,7 +703,7 @@ viable_occupant.radiation += (RADIATION_IRRADIATION_MULTIPLIER*radduration*radstrength)/(connected.damage_coeff ** 2) //Read comment in "transferbuffer" section above for explanation switch(href_list["task"]) //Same thing as there but values are even lower, on best part they are about 0.0*, effectively no damage if("pulseui") - var/len = length(viable_occupant.dna.uni_identity) + var/len = length_char(viable_occupant.dna.uni_identity) num = WRAP(num, 1, len+1) num = randomize_radiation_accuracy(num, radduration + (connected.precision_coeff ** 2), len) //Each manipulator level above 1 makes randomization as accurate as selected time + manipulator lvl^2 //Value is this high for the same reason as with laser - not worth the hassle of upgrading if the bonus is low @@ -706,12 +711,12 @@ var/subblock = num - block*DNA_BLOCK_SIZE last_change = "UI #[block]-[subblock]; " - var/hex = copytext(viable_occupant.dna.uni_identity, num, num+1) + var/hex = copytext_char(viable_occupant.dna.uni_identity, num, num+1) last_change += "[hex]" hex = scramble(hex, radstrength, radduration) last_change += "->[hex]" - viable_occupant.dna.uni_identity = copytext(viable_occupant.dna.uni_identity, 1, num) + hex + copytext(viable_occupant.dna.uni_identity, num+1, 0) + viable_occupant.dna.uni_identity = copytext_char(viable_occupant.dna.uni_identity, 1, num) + hex + copytext_char(viable_occupant.dna.uni_identity, num + 1) viable_occupant.updateappearance(mutations_overlay_update=1) else current_screen = "mainmenu" @@ -823,7 +828,7 @@ var/true_genes = GET_SEQUENCE(current_mutation) new_gene = true_genes[num] jokerready = world.time + JOKER_TIMEOUT - (JOKER_UPGRADE * (connected.precision_coeff-1)) - sequence = copytext(sequence, 1, num) + new_gene + copytext(sequence, num+1, length(sequence)+1) + sequence = copytext_char(sequence, 1, num) + new_gene + copytext_char(sequence, num + 1) viable_occupant.dna.mutation_index[path] = sequence viable_occupant.radiation += RADIATION_STRENGTH_MULTIPLIER/connected.damage_coeff viable_occupant.domutcheck() diff --git a/code/game/machinery/computer/prisoner/management.dm b/code/game/machinery/computer/prisoner/management.dm index 75f21b8169a..a83b3b3161e 100644 --- a/code/game/machinery/computer/prisoner/management.dm +++ b/code/game/machinery/computer/prisoner/management.dm @@ -124,7 +124,7 @@ to_chat(usr, "Unauthorized access.") else if(href_list["warn"]) - var/warning = copytext(sanitize(input(usr,"Message:","Enter your message here!","")),1,MAX_MESSAGE_LEN) + var/warning = stripped_input(usr, "Message:", "Enter your message here!", "", MAX_MESSAGE_LEN) if(!warning) return var/obj/item/implant/I = locate(href_list["warn"]) in GLOB.tracked_implants diff --git a/code/game/machinery/computer/security.dm b/code/game/machinery/computer/security.dm index aabd5f6f7c2..6f34e0eba1f 100644 --- a/code/game/machinery/computer/security.dm +++ b/code/game/machinery/computer/security.dm @@ -608,7 +608,7 @@ What a mess.*/ switch(href_list["field"]) if("name") if(istype(active1, /datum/data/record) || istype(active2, /datum/data/record)) - var/t1 = copytext(sanitize(input("Please input name:", "Secure. records", active1.fields["name"], null) as text),1,MAX_MESSAGE_LEN) + var/t1 = stripped_input(usr, "Please input name:", "Secure. records", active1.fields["name"], MAX_MESSAGE_LEN) if(!canUseSecurityRecordsConsole(usr, t1, a1)) return if(istype(active1, /datum/data/record)) diff --git a/code/game/machinery/computer/teleporter.dm b/code/game/machinery/computer/teleporter.dm index 81e2b538e50..c316a5335ce 100644 --- a/code/game/machinery/computer/teleporter.dm +++ b/code/game/machinery/computer/teleporter.dm @@ -5,6 +5,8 @@ icon_keyboard = "teleport_key" light_color = LIGHT_COLOR_BLUE circuit = /obj/item/circuitboard/computer/teleporter + ui_x = 475 + ui_y = 130 var/regime_set = "Teleporter" var/id var/obj/machinery/teleport/station/power_station @@ -31,34 +33,29 @@ break return power_station -/obj/machinery/computer/teleporter/ui_interact(mob/user) - . = ..() - var/data = "

Teleporter Status

" - if(!power_station) - data += "
No power station linked.
" - else if(!power_station.teleporter_hub) - data += "
No hub linked.
" +/obj/machinery/computer/teleporter/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \ + datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) + ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) + if(!ui) + ui = new(user, src, ui_key, "teleporter", name, ui_x, ui_y, master_ui, state) + ui.open() + +/obj/machinery/computer/teleporter/ui_data(mob/user) + var/list/data = list() + data["power_station"] = power_station ? TRUE : FALSE + data["teleporter_hub"] = power_station?.teleporter_hub ? TRUE : FALSE + data["regime_set"] = regime_set + data["target"] = !target ? "None" : "[get_area(target)] [(regime_set != "Gate") ? "" : "Teleporter"]" + data["calibrating"] = calibrating + + if(power_station?.teleporter_hub?.calibrated || power_station?.teleporter_hub?.accuracy >= 3) + data["calibrated"] = TRUE else - data += "
Current regime: [regime_set]
" - data += "Current target: [(!target) ? "None" : "[get_area(target)] [(regime_set != "Gate") ? "" : "Teleporter"]"]
" - if(calibrating) - data += "Calibration: In Progress" - else if(power_station.teleporter_hub.calibrated || power_station.teleporter_hub.accuracy >= 3) - data += "Calibration: Optimal" - else - data += "Calibration: Sub-Optimal" - data += "

" + data["calibrated"] = FALSE - data += "Change regime
" - data += "Set target
" + return data - data += "
Calibrate Hub" - - var/datum/browser/popup = new(user, "teleporter", name, 400, 400) - popup.set_content(data) - popup.open() - -/obj/machinery/computer/teleporter/Topic(href, href_list) +/obj/machinery/computer/teleporter/ui_act(action, params) if(..()) return @@ -69,38 +66,39 @@ say("Error: Calibration in progress. Stand by.") return - if(href_list["regimeset"]) - power_station.engaged = 0 - power_station.teleporter_hub.update_icon() - power_station.teleporter_hub.calibrated = 0 - reset_regime() - if(href_list["settarget"]) - power_station.engaged = 0 - power_station.teleporter_hub.update_icon() - power_station.teleporter_hub.calibrated = 0 - set_target(usr) - if(href_list["calibrate"]) - if(!target) - say("Error: No target set to calibrate to.") - return - if(power_station.teleporter_hub.calibrated || power_station.teleporter_hub.accuracy >= 3) - say("Hub is already calibrated!") - return - say("Processing hub calibration to target...") + switch(action) + if("regimeset") + power_station.engaged = FALSE + power_station.teleporter_hub.update_icon() + power_station.teleporter_hub.calibrated = FALSE + reset_regime() + . = TRUE + if("settarget") + power_station.engaged = FALSE + power_station.teleporter_hub.update_icon() + power_station.teleporter_hub.calibrated = FALSE + set_target(usr) + . = TRUE + if("calibrate") + if(!target) + say("Error: No target set to calibrate to.") + return + if(power_station.teleporter_hub.calibrated || power_station.teleporter_hub.accuracy >= 3) + say("Hub is already calibrated!") + return - calibrating = 1 - power_station.update_icon() - spawn(50 * (3 - power_station.teleporter_hub.accuracy)) //Better parts mean faster calibration - calibrating = 0 - if(check_hub_connection()) - power_station.teleporter_hub.calibrated = 1 - say("Calibration complete.") - else - say("Error: Unable to detect hub.") + say("Processing hub calibration to target...") + calibrating = TRUE power_station.update_icon() - updateDialog() - - updateDialog() + spawn(50 * (3 - power_station.teleporter_hub.accuracy)) //Better parts mean faster calibration + calibrating = FALSE + if(check_hub_connection()) + power_station.teleporter_hub.calibrated = TRUE + say("Calibration complete.") + else + say("Error: Unable to detect hub.") + power_station.update_icon() + . = TRUE /obj/machinery/computer/teleporter/proc/check_hub_connection() if(!power_station) diff --git a/code/game/machinery/magnet.dm b/code/game/machinery/magnet.dm index 1a2553eaeb7..7eda6a94d16 100644 --- a/code/game/machinery/magnet.dm +++ b/code/game/machinery/magnet.dm @@ -305,7 +305,7 @@ if(speed <= 0) speed = 1 if("setpath") - var/newpath = copytext(sanitize(input(usr, "Please define a new path!",,path) as text|null),1,MAX_MESSAGE_LEN) + var/newpath = stripped_input(usr, "Please define a new path!", "New Path", path, MAX_MESSAGE_LEN) if(newpath && newpath != "") moving = 0 // stop moving path = newpath @@ -366,13 +366,19 @@ // Generates the rpath variable using the path string, think of this as "string2list" // Doesn't use params2list() because of the akward way it stacks entities rpath = list() // clear rpath - var/maximum_character = min( 50, length(path) ) // chooses the maximum length of the iterator. 50 max length + var/maximum_characters = 50 + var/lentext = length(path) + var/nextchar = "" + var/charcount = 0 - for(var/i=1, i<=maximum_character, i++) // iterates through all characters in path + for(var/i = 1, i <= lentext, i += length(nextchar)) // iterates through all characters in path + nextchar = path[i] // find next character - var/nextchar = copytext(path, i, i+1) // find next character - - if(!(nextchar in list(";", "&", "*", " "))) // if char is a separator, ignore - rpath += copytext(path, i, i+1) // else, add to list + if(nextchar in list(";", "&", "*", " ")) // if char is a separator, ignore + continue + rpath += nextchar // else, add to list // there doesn't HAVE to be separators but it makes paths syntatically visible + charcount++ + if(charcount >= maximum_characters) + break diff --git a/code/game/machinery/navbeacon.dm b/code/game/machinery/navbeacon.dm index 1e4bcdcbbcd..4cb33e4d1a1 100644 --- a/code/game/machinery/navbeacon.dm +++ b/code/game/machinery/navbeacon.dm @@ -65,7 +65,7 @@ var/index = findtext(e, "=") // format is "key=value" if(index) var/key = copytext(e, 1, index) - var/val = copytext(e, index+1) + var/val = copytext(e, index + length(e[index])) codes[key] = val else codes[e] = "1" @@ -189,7 +189,7 @@ Transponder Codes: