diff --git a/.github/workflows/autobuild_tgui.yml b/.github/workflows/autobuild_tgui.yml deleted file mode 100644 index 7be294b00ed..00000000000 --- a/.github/workflows/autobuild_tgui.yml +++ /dev/null @@ -1,38 +0,0 @@ -name: Autobuild TGUI - -on: - push: - branches: - - 'master' - paths: - - 'tgui/**.js' - - 'tgui/**.scss' - -jobs: - build: - name: Rebuild TGUI - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v1 - with: - fetch-depth: 25 - - name: Setup Node - uses: actions/setup-node@v1 - with: - node-version: '>=12.13' - - name: Build TGUI - run: bin/tgui --ci - working-directory: ./tgui - - name: Commit Artifacts - run: | - git config --local user.email "action@github.com" - git config --local user.name "TGUI" - git pull origin master - git commit -m "Automatic TGUI Rebuild [ci skip]" -a || true - - name: Push Artifacts - uses: ad-m/github-push-action@master - env: - GITHUB_ACTOR: comfyorange - with: - github_token: ${{ secrets.GITHUB_MASTER_KEY }} diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml index d1aa9b4b670..0778251cdf2 100644 --- a/.github/workflows/stale.yml +++ b/.github/workflows/stale.yml @@ -13,7 +13,8 @@ jobs: - uses: actions/stale@v1 with: repo-token: ${{ secrets.GITHUB_TOKEN }} - stale-pr-message: "This PR has been inactive for long enough to be automatically marked as stale. This means it is at risk of being closed by a maintainer if it is not updated or reviews are not addressed. If your PR is closed as stale, feel free to open a new one after dealing with the issues. This may also be an indication that the maintainers do not have interest in this change, you can try to convince them otherwise, or persist in the doomed world you have created." + stale-pr-message: "This PR has been inactive for long enough to be automatically marked as stale. This means it is at risk of being auto closed in ~ 7 days, please address any outstanding review items and ensure your PR is finished, if these are all true and you are auto-staled anyway, you need to actively ask maintainers if your PR will be merged. Once you have done any of the previous actions then you should request a maintainer remove the stale label on your PR, to reset the stale timer. If you feel no maintainer will respond in that time, you may wish to close this PR youself, while you seek maintainer comment, as you will then be able to reopen the PR yourself" days-before-stale: 7 + days-before-close: 7 stale-pr-label: 'Stale' exempt-pr-label: 'RED LABEL' diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml new file mode 100644 index 00000000000..11d27b55d34 --- /dev/null +++ b/.gitlab-ci.yml @@ -0,0 +1,11 @@ +build: + stage: build + rules: + - if: $CI_MERGE_REQUEST_IID || $CI_COMMIT_REF_NAME == "master" + changes: + - tgui/**/*.js + - tgui/**/*.scss + when: always + image: node:lts + script: + - tgui/bin/tgui --ci diff --git a/SQL/database_changelog.txt b/SQL/database_changelog.txt index f84268b8a34..2684cf032a8 100644 --- a/SQL/database_changelog.txt +++ b/SQL/database_changelog.txt @@ -1,15 +1,22 @@ 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.7; The query to update the schema revision table is: +The latest database version is 5.8; The query to update the schema revision table is: -INSERT INTO `schema_revision` (`major`, `minor`) VALUES (5, 7); +INSERT INTO `schema_revision` (`major`, `minor`) VALUES (5, 8); or -INSERT INTO `SS13_schema_revision` (`major`, `minor`) VALUES (5, 7); +INSERT INTO `SS13_schema_revision` (`major`, `minor`) VALUES (5, 8); In any query remember to add a prefix to the table names if you use one. ----------------------------------------------------- +Version 5.8, 7 April 2020, by Jordie0608 +Modified table `messages`, adding column `deleted_ckey` to record who deleted a message. + +ALTER TABLE `messages` ADD COLUMN `deleted_ckey` VARCHAR(32) NULL DEFAULT NULL AFTER `deleted`; + +----------------------------------------------------- + Version 5.7, 10 January 2020 by Atlanta-Ned Added ticket table for tracking ahelp tickets in the database. diff --git a/SQL/tgstation_schema.sql b/SQL/tgstation_schema.sql index a9b2c65fef1..f03788e14c4 100644 --- a/SQL/tgstation_schema.sql +++ b/SQL/tgstation_schema.sql @@ -258,6 +258,7 @@ CREATE TABLE `messages` ( `lasteditor` varchar(32) DEFAULT NULL, `edits` text, `deleted` tinyint(1) unsigned NOT NULL DEFAULT '0', + `deleted_ckey` VARCHAR(32) NULL DEFAULT NULL, PRIMARY KEY (`id`), KEY `idx_msg_ckey_time` (`targetckey`,`timestamp`, `deleted`), KEY `idx_msg_type_ckeys_time` (`type`,`targetckey`,`adminckey`,`timestamp`, `deleted`), diff --git a/SQL/tgstation_schema_prefixed.sql b/SQL/tgstation_schema_prefixed.sql index 845a23ea7d1..8a4de26c263 100644 --- a/SQL/tgstation_schema_prefixed.sql +++ b/SQL/tgstation_schema_prefixed.sql @@ -258,6 +258,7 @@ CREATE TABLE `SS13_messages` ( `lasteditor` varchar(32) DEFAULT NULL, `edits` text, `deleted` tinyint(1) unsigned NOT NULL DEFAULT '0', + `deleted_ckey` VARCHAR(32) NULL DEFAULT NULL, PRIMARY KEY (`id`), KEY `idx_msg_ckey_time` (`targetckey`,`timestamp`, `deleted`), KEY `idx_msg_type_ckeys_time` (`type`,`targetckey`,`adminckey`,`timestamp`, `deleted`), diff --git a/_maps/RandomRuins/SpaceRuins/forgottenship.dmm b/_maps/RandomRuins/SpaceRuins/forgottenship.dmm index 3fb2848af76..f5dd927eabb 100644 --- a/_maps/RandomRuins/SpaceRuins/forgottenship.dmm +++ b/_maps/RandomRuins/SpaceRuins/forgottenship.dmm @@ -9,12 +9,11 @@ /area/ruin/unpowered/no_grav) "ac" = ( /obj/machinery/porta_turret/syndicate/energy{ - armor = list("melee" = 80, "bullet" = 30, "laser" = 50, "energy" = 50, "bomb" = 30, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100); + armor = list("melee" = 40, "bullet" = 40, "laser" = 60, "energy" = 60, "bomb" = 60, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100); dir = 4; name = "Syndicate Ship Turret"; on = 0; - throw_speed = 4; - use_power = 1 + shot_delay = 10 }, /turf/closed/wall/r_wall/syndicate/nodiagonal, /area/ruin/space/has_grav/syndicate_forgotten_ship) @@ -133,10 +132,12 @@ secure = 1 }, /obj/item/coin/antagtoken, -/obj/item/coin/gold, +/obj/item/encryptionkey/syndicate, +/obj/item/encryptionkey/syndicate, +/obj/item/encryptionkey/syndicate, /obj/item/dnainjector/thermal, -/obj/item/storage/box/firingpins, -/obj/item/storage/box/firingpins, +/obj/item/storage/box/firingpins/syndicate, +/obj/item/storage/box/firingpins/syndicate, /turf/open/floor/mineral/plastitanium/red, /area/ruin/space/has_grav/syndicate_forgotten_ship) "az" = ( @@ -150,7 +151,6 @@ /obj/machinery/light{ dir = 1 }, -/obj/item/aiModule/reset/purge, /obj/structure/table/reinforced, /turf/open/floor/mineral/plastitanium/red, /area/ruin/space/has_grav/syndicate_forgotten_ship) @@ -244,7 +244,7 @@ /area/ruin/space/has_grav/syndicate_forgotten_ship) "aN" = ( /obj/item/stack/sheet/mineral/uranium{ - amount = 50 + amount = 15 }, /obj/structure/cable, /obj/machinery/light{ @@ -764,12 +764,11 @@ /area/ruin/space/has_grav/syndicate_forgotten_ship) "ci" = ( /obj/machinery/porta_turret/syndicate/energy{ - armor = list("melee" = 80, "bullet" = 30, "laser" = 50, "energy" = 50, "bomb" = 30, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100); + armor = list("melee" = 40, "bullet" = 40, "laser" = 60, "energy" = 60, "bomb" = 60, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100); dir = 4; name = "Syndicate Ship Turret"; on = 0; - throw_speed = 4; - use_power = 1 + shot_delay = 10 }, /turf/closed/wall/r_wall/syndicate, /area/ruin/space/has_grav/syndicate_forgotten_ship) @@ -785,7 +784,7 @@ /obj/machinery/light{ dir = 1 }, -/obj/item/aiModule/core/freeformcore, +/obj/item/aiModule/core/full/cybersun, /obj/structure/table/reinforced, /turf/open/floor/mineral/plastitanium/red, /area/ruin/space/has_grav/syndicate_forgotten_ship) @@ -840,9 +839,7 @@ /turf/open/floor/mineral/plastitanium, /area/ruin/space/has_grav/syndicate_forgotten_cargopod) "ct" = ( -/obj/machinery/vending/medical/syndicate_access{ - premium = list(/obj/item/reagent_containers/medigel/instabitaluri = 2, /obj/item/storage/pill_bottle/psicodine = 2, /obj/item/reagent_containers/hypospray/medipen = 3, /obj/item/storage/belt/medical = 3, /obj/item/sensor_device = 2, /obj/item/pinpointer/crew = 2, /obj/item/storage/firstaid = 5, /obj/item/storage/firstaid/advanced = 2, /obj/item/storage/firstaid/tactical = 1, /obj/item/shears = 1, /obj/item/plunger/reinforced = 2) - }, +/obj/machinery/vending/medical/syndicate_access/cybersun, /turf/open/floor/plastic, /area/ruin/space/has_grav/syndicate_forgotten_ship) "cu" = ( @@ -889,10 +886,10 @@ req_one_access_txt = "150" }, /obj/item/stack/sheet/mineral/titanium{ - amount = 50 + amount = 40 }, /obj/item/stack/sheet/mineral/uranium{ - amount = 20 + amount = 15 }, /turf/open/floor/pod/dark, /area/ruin/space/has_grav/powered/syndicate_forgotten_vault) @@ -1241,10 +1238,10 @@ req_one_access_txt = "150" }, /obj/item/stack/sheet/mineral/gold{ - amount = 50 + amount = 30 }, /obj/item/stack/sheet/mineral/silver{ - amount = 50 + amount = 30 }, /obj/machinery/light, /turf/open/floor/pod/dark, diff --git a/_maps/RandomRuins/SpaceRuins/hellfactory.dmm b/_maps/RandomRuins/SpaceRuins/hellfactory.dmm index b1d621dc52c..ea18a6dd41f 100644 --- a/_maps/RandomRuins/SpaceRuins/hellfactory.dmm +++ b/_maps/RandomRuins/SpaceRuins/hellfactory.dmm @@ -969,11 +969,6 @@ /obj/effect/decal/cleanable/blood/old, /turf/open/floor/plastic, /area/ruin/space/has_grav/hellfactory) -"lv" = ( -/obj/structure/cable, -/obj/structure/cable, -/turf/closed/wall/r_wall, -/area/ruin/space/has_grav/hellfactory) "lR" = ( /obj/machinery/light/floor, /obj/effect/turf_decal/bot_white/right, @@ -1036,10 +1031,6 @@ /obj/effect/decal/cleanable/cobweb/cobweb2, /turf/open/floor/holofloor/wood, /area/ruin/space/has_grav/hellfactory) -"zI" = ( -/obj/structure/cable, -/turf/closed/wall/r_wall/rust, -/area/ruin/space/has_grav/hellfactory) "BC" = ( /obj/machinery/light/floor, /obj/effect/turf_decal/bot_white/left, @@ -1057,7 +1048,6 @@ /area/ruin/space/has_grav/hellfactory) "Gs" = ( /obj/structure/cable, -/obj/structure/cable, /turf/closed/wall/r_wall/rust, /area/ruin/space/has_grav/hellfactory) "GE" = ( @@ -1476,8 +1466,8 @@ aJ aX fj EP -zI -lv +Gs +EP by by bK @@ -1504,7 +1494,7 @@ Yd ah aA bn -zI +Gs by Wh Fs @@ -1561,12 +1551,12 @@ aB Gs EP EP -zI +Gs EP -zI +Gs +EP +Gs EP -zI -lv Zh cA by diff --git a/_maps/map_files/BoxStation/BoxStation.dmm b/_maps/map_files/BoxStation/BoxStation.dmm index 2e6305b1421..86245809e37 100644 --- a/_maps/map_files/BoxStation/BoxStation.dmm +++ b/_maps/map_files/BoxStation/BoxStation.dmm @@ -4996,18 +4996,6 @@ /obj/machinery/vending/boozeomat/all_access, /turf/closed/wall, /area/maintenance/port/aft) -"alL" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/power/apc{ - areastring = "/area/security/courtroom"; - dir = 8; - name = "Courtroom APC"; - pixel_x = -25 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/structure/cable, -/turf/open/floor/plating, -/area/maintenance/fore/secondary) "alM" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/disposalpipe/segment{ @@ -5550,6 +5538,7 @@ /obj/structure/disposalpipe/segment, /obj/machinery/meter, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/cable, /turf/open/floor/plating, /area/maintenance/fore/secondary) "anc" = ( @@ -5866,10 +5855,12 @@ /area/hallway/primary/fore) "anS" = ( /obj/machinery/holopad, +/obj/structure/cable, /turf/open/floor/plasteel, /area/hallway/primary/fore) "anT" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on, +/obj/structure/cable, /turf/open/floor/plasteel, /area/hallway/primary/fore) "anU" = ( @@ -5884,6 +5875,7 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 1 }, +/obj/structure/cable, /turf/open/floor/plasteel/dark, /area/security/courtroom) "anW" = ( @@ -5908,6 +5900,7 @@ c_tag = "Courtroom South"; dir = 1 }, +/obj/structure/cable, /turf/open/floor/plasteel/dark, /area/security/courtroom) "anY" = ( @@ -5915,6 +5908,7 @@ dir = 1; pixel_y = -22 }, +/obj/structure/cable, /turf/open/floor/plasteel/dark, /area/security/courtroom) "anZ" = ( @@ -6065,6 +6059,13 @@ dir = 8 }, /obj/structure/cable, +/obj/machinery/power/apc{ + areastring = "/area/security/processing"; + dir = 2; + name = "Labor Shuttle Dock APC"; + pixel_x = 0; + pixel_y = -23 + }, /turf/open/floor/plasteel, /area/security/processing) "aov" = ( @@ -6095,6 +6096,7 @@ codes_txt = "patrol;next_patrol=EVA"; location = "Security" }, +/obj/structure/cable, /turf/open/floor/plasteel, /area/hallway/primary/fore) "aoz" = ( @@ -6154,11 +6156,6 @@ /obj/machinery/light/small{ dir = 4 }, -/obj/machinery/power/apc{ - areastring = "/area/crew_quarters/fitness"; - name = "Fitness Room APC"; - pixel_y = -23 - }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/cable, /turf/open/floor/plating, @@ -6292,6 +6289,7 @@ /area/lawoffice) "apj" = ( /obj/machinery/door/firedoor, +/obj/structure/cable, /turf/open/floor/plasteel, /area/hallway/primary/fore) "apk" = ( @@ -6529,6 +6527,7 @@ }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/disposalpipe/segment, +/obj/structure/cable, /turf/open/floor/wood, /area/maintenance/fore) "apV" = ( @@ -6637,18 +6636,6 @@ /obj/structure/cable, /turf/open/floor/plating, /area/maintenance/fore/secondary) -"aqk" = ( -/obj/machinery/power/apc{ - areastring = "/area/crew_quarters/dorms"; - name = "Dormitory APC"; - pixel_y = -23 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/obj/structure/cable, -/turf/open/floor/plating, -/area/maintenance/fore/secondary) "aql" = ( /obj/structure/disposalpipe/segment{ dir = 6 @@ -6854,16 +6841,6 @@ }, /turf/open/floor/plating, /area/security/processing) -"aqT" = ( -/obj/machinery/power/apc{ - areastring = "/area/security/processing"; - dir = 8; - name = "Labor Shuttle Dock APC"; - pixel_x = -25 - }, -/obj/structure/cable, -/turf/open/floor/plating, -/area/maintenance/fore) "aqW" = ( /obj/effect/turf_decal/tile/neutral{ dir = 1 @@ -7149,6 +7126,7 @@ "arU" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/disposalpipe/segment, +/obj/structure/cable, /turf/open/floor/wood, /area/lawoffice) "arV" = ( @@ -7281,6 +7259,7 @@ /obj/structure/chair/office, /obj/effect/landmark/start/lawyer, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/cable, /turf/open/floor/wood, /area/lawoffice) "asp" = ( @@ -7868,6 +7847,7 @@ /obj/effect/turf_decal/tile/yellow{ dir = 8 }, +/obj/structure/cable, /turf/open/floor/plasteel, /area/construction/mining/aux_base) "auc" = ( @@ -7893,6 +7873,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/structure/cable, /turf/open/floor/plating, /area/maintenance/fore) "aug" = ( @@ -8292,7 +8273,6 @@ /obj/effect/turf_decal/tile/red{ dir = 1 }, -/obj/structure/cable, /turf/open/floor/plasteel, /area/hallway/primary/fore) "avk" = ( @@ -9219,6 +9199,7 @@ /obj/effect/turf_decal/tile/blue{ dir = 4 }, +/obj/structure/cable, /turf/open/floor/plasteel/white/corner{ dir = 1 }, @@ -9231,6 +9212,7 @@ /obj/effect/turf_decal/tile/yellow{ dir = 4 }, +/obj/structure/cable, /turf/open/floor/plasteel, /area/hallway/secondary/entry) "axI" = ( @@ -9731,6 +9713,12 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, +/obj/machinery/power/apc{ + areastring = "/area/crew_quarters/dorms"; + name = "Dormitory APC"; + pixel_y = -23 + }, +/obj/structure/cable, /turf/open/floor/plasteel, /area/crew_quarters/dorms) "azf" = ( @@ -9782,6 +9770,7 @@ /obj/structure/disposalpipe/segment{ dir = 10 }, +/obj/structure/cable, /turf/open/floor/plasteel, /area/crew_quarters/fitness) "azl" = ( @@ -10096,17 +10085,6 @@ }, /turf/open/floor/plasteel, /area/crew_quarters/dorms) -"aAj" = ( -/obj/machinery/power/apc{ - areastring = "/area/security/checkpoint/auxiliary"; - name = "Security Checkpoint APC"; - pixel_x = 1; - pixel_y = -23 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/structure/cable, -/turf/open/floor/plating, -/area/maintenance/port/fore) "aAk" = ( /obj/structure/disposalpipe/segment{ dir = 5 @@ -10133,7 +10111,6 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, -/obj/structure/cable, /turf/open/floor/plasteel, /area/crew_quarters/fitness) "aAm" = ( @@ -10181,6 +10158,12 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, +/obj/machinery/power/apc{ + areastring = "/area/crew_quarters/fitness"; + name = "Fitness Room APC"; + pixel_y = -23 + }, +/obj/structure/cable, /turf/open/floor/plasteel, /area/crew_quarters/fitness) "aAp" = ( @@ -10234,17 +10217,6 @@ /obj/item/reagent_containers/food/drinks/bottle/vodka/badminka, /turf/open/floor/plating, /area/maintenance/starboard/fore) -"aAw" = ( -/obj/machinery/power/apc{ - areastring = "/area/hydroponics/garden"; - dir = 4; - name = "Garden APC"; - pixel_x = 24; - pixel_y = 2 - }, -/obj/structure/cable, -/turf/open/floor/plating, -/area/maintenance/port/fore) "aAx" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel, @@ -10331,19 +10303,6 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel, /area/hydroponics/garden) -"aAL" = ( -/obj/machinery/power/apc{ - areastring = "/area/storage/primary"; - name = "Primary Tool Storage APC"; - pixel_x = 1; - pixel_y = -23 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/obj/structure/cable, -/turf/open/floor/plating, -/area/maintenance/port/fore) "aAO" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 4 @@ -10448,21 +10407,12 @@ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/structure/cable, /turf/open/floor/plating, /area/maintenance/fore) "aBi" = ( -/obj/machinery/power/apc{ - areastring = "/area/gateway"; - dir = 8; - name = "Gateway APC"; - pixel_x = -25; - pixel_y = -1 - }, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 5 }, -/obj/structure/cable, /turf/open/floor/plating, /area/maintenance/fore) "aBj" = ( @@ -10490,6 +10440,7 @@ name = "Security Maintenance"; req_access_txt = "1" }, +/obj/structure/cable, /turf/open/floor/plating, /area/maintenance/port/fore) "aBm" = ( @@ -10820,6 +10771,14 @@ /obj/machinery/camera{ c_tag = "Theatre Storage" }, +/obj/machinery/power/apc{ + areastring = "/area/crew_quarters/theatre"; + dir = 1; + name = "Theatre APC"; + pixel_x = 0; + pixel_y = 23 + }, +/obj/structure/cable, /turf/open/floor/plasteel/white/side{ dir = 4 }, @@ -11144,6 +11103,7 @@ /obj/effect/turf_decal/tile/red{ dir = 4 }, +/obj/structure/cable, /turf/open/floor/plasteel, /area/security/checkpoint/auxiliary) "aDa" = ( @@ -11541,6 +11501,7 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 4 }, +/obj/structure/cable, /turf/open/floor/plasteel/white/side{ dir = 4 }, @@ -11576,6 +11537,7 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, +/obj/structure/cable, /turf/open/floor/plating, /area/maintenance/starboard/fore) "aEc" = ( @@ -11585,6 +11547,7 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, +/obj/structure/cable, /turf/open/floor/plasteel/white/side{ dir = 4 }, @@ -11601,18 +11564,6 @@ /obj/structure/cable, /turf/open/floor/plating, /area/maintenance/starboard/fore) -"aEg" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/obj/machinery/power/apc{ - areastring = "/area/chapel/main"; - name = "Chapel APC"; - pixel_y = -23 - }, -/obj/structure/cable, -/turf/open/floor/plating, -/area/maintenance/starboard/fore) "aEh" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -11737,6 +11688,14 @@ /obj/effect/turf_decal/tile/green{ dir = 4 }, +/obj/machinery/power/apc{ + areastring = "/area/hydroponics/garden"; + dir = 2; + name = "Garden APC"; + pixel_x = -23; + pixel_y = 0 + }, +/obj/structure/cable, /turf/open/floor/plasteel, /area/hydroponics/garden) "aEG" = ( @@ -11767,6 +11726,7 @@ /obj/effect/turf_decal/tile/red{ dir = 4 }, +/obj/structure/cable, /turf/open/floor/plasteel, /area/security/checkpoint/auxiliary) "aEK" = ( @@ -12079,15 +12039,6 @@ "aFx" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/turf/open/floor/plating, -/area/maintenance/starboard/fore) -"aFy" = ( -/obj/machinery/power/apc{ - areastring = "/area/chapel/office"; - name = "Chapel Office APC"; - pixel_y = -23 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/cable, /turf/open/floor/plating, /area/maintenance/starboard/fore) @@ -12197,6 +12148,13 @@ /obj/effect/turf_decal/tile/red{ dir = 8 }, +/obj/machinery/power/apc{ + areastring = "/area/security/checkpoint/auxiliary"; + name = "Security Checkpoint APC"; + pixel_x = 1; + pixel_y = -23 + }, +/obj/structure/cable, /turf/open/floor/plasteel, /area/security/checkpoint/auxiliary) "aFM" = ( @@ -12623,6 +12581,7 @@ req_access_txt = "12" }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/cable, /turf/open/floor/plating, /area/maintenance/starboard/fore) "aGH" = ( @@ -12652,6 +12611,7 @@ }, /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/cable, /turf/open/floor/plating, /area/maintenance/starboard/fore) "aGO" = ( @@ -12938,6 +12898,7 @@ pixel_y = 8 }, /obj/effect/landmark/start/assistant, +/obj/structure/cable, /turf/open/floor/plasteel, /area/storage/primary) "aHE" = ( @@ -13171,28 +13132,9 @@ /turf/open/floor/plating, /area/maintenance/starboard/fore) "aIb" = ( -/obj/machinery/power/apc{ - areastring = "/area/crew_quarters/theatre"; - dir = 8; - name = "Theatre APC"; - pixel_x = -25 - }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 5 }, -/obj/structure/cable, -/turf/open/floor/plating, -/area/maintenance/starboard/fore) -"aIc" = ( -/obj/machinery/power/apc{ - areastring = "/area/crew_quarters/bar"; - name = "Bar APC"; - pixel_y = -23 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/obj/structure/cable, /turf/open/floor/plating, /area/maintenance/starboard/fore) "aId" = ( @@ -13214,6 +13156,7 @@ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/cable, /turf/open/floor/plating, /area/maintenance/starboard/fore) "aIg" = ( @@ -13229,18 +13172,6 @@ /obj/effect/turf_decal/bot, /turf/open/floor/plasteel, /area/crew_quarters/bar) -"aIh" = ( -/obj/machinery/power/apc{ - areastring = "/area/crew_quarters/kitchen"; - name = "Kitchen APC"; - pixel_y = -23 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/obj/structure/cable, -/turf/open/floor/plating, -/area/maintenance/starboard/fore) "aIj" = ( /obj/structure/disposalpipe/sorting/mail{ dir = 4; @@ -13271,11 +13202,6 @@ /turf/open/floor/plating, /area/maintenance/starboard/fore) "aIn" = ( -/obj/machinery/power/apc{ - areastring = "/area/hydroponics"; - name = "Hydroponics APC"; - pixel_y = -23 - }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 9 }, @@ -13302,6 +13228,7 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, +/obj/structure/cable, /turf/open/floor/wood, /area/library) "aIt" = ( @@ -13311,6 +13238,7 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 5 }, +/obj/structure/cable, /turf/open/floor/wood, /area/library) "aIv" = ( @@ -13320,6 +13248,7 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, +/obj/structure/cable, /turf/open/floor/wood, /area/library) "aIw" = ( @@ -13331,6 +13260,7 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, +/obj/structure/cable, /turf/open/floor/wood, /area/library) "aIx" = ( @@ -13340,11 +13270,13 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 10 }, +/obj/structure/cable, /turf/open/floor/wood, /area/library) "aIy" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/cable, /turf/open/floor/plasteel/dark, /area/chapel/office) "aIz" = ( @@ -13389,6 +13321,16 @@ /obj/structure/cable, /turf/open/floor/plating, /area/security/warden) +"aIG" = ( +/obj/machinery/power/apc{ + areastring = "/area/vacant_room/office"; + dir = 8; + name = "Vacant Office APC"; + pixel_x = -25 + }, +/obj/structure/cable, +/turf/open/floor/wood, +/area/vacant_room/office) "aIH" = ( /obj/structure/table, /obj/item/storage/box/lights/mixed, @@ -13406,6 +13348,14 @@ /obj/effect/turf_decal/tile/yellow{ dir = 8 }, +/obj/machinery/power/apc{ + areastring = "/area/construction/mining/aux_base"; + dir = 2; + name = "Auxillary Base Construction APC"; + pixel_x = 0; + pixel_y = -23 + }, +/obj/structure/cable, /turf/open/floor/plasteel, /area/construction/mining/aux_base) "aII" = ( @@ -13544,11 +13494,25 @@ /obj/structure/table, /obj/item/storage/belt/utility, /obj/item/storage/firstaid/regular, +/obj/machinery/power/apc{ + areastring = "/area/storage/primary"; + name = "Primary Tool Storage APC"; + pixel_x = 1; + pixel_y = -23 + }, +/obj/structure/cable, /turf/open/floor/plasteel, /area/storage/primary) "aJa" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/cable, +/obj/machinery/power/apc{ + areastring = "/area/gateway"; + dir = 8; + name = "Gateway APC"; + pixel_x = -25; + pixel_y = -1 + }, /turf/open/floor/plasteel, /area/gateway) "aJb" = ( @@ -13780,6 +13744,7 @@ }, /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/cable, /turf/open/floor/plating, /area/maintenance/starboard/fore) "aJB" = ( @@ -13789,6 +13754,7 @@ req_access_txt = "35" }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/cable, /turf/open/floor/plating, /area/maintenance/starboard/fore) "aJC" = ( @@ -13818,6 +13784,7 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 1 }, +/obj/structure/cable, /turf/open/floor/wood, /area/library) "aJG" = ( @@ -13833,6 +13800,7 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, +/obj/structure/cable, /turf/open/floor/plasteel/dark, /area/chapel/office) "aJH" = ( @@ -14008,19 +13976,6 @@ dir = 4 }, /area/chapel/main) -"aKf" = ( -/obj/machinery/power/apc{ - areastring = "/area/construction/mining/aux_base"; - dir = 8; - name = "Auxillary Base Construction APC"; - pixel_x = -25 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 6 - }, -/obj/structure/cable, -/turf/open/floor/plating, -/area/maintenance/port/fore) "aKj" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/tile/neutral, @@ -14044,6 +13999,7 @@ /obj/machinery/door/airlock/public/glass{ name = "Garden" }, +/obj/structure/cable, /turf/open/floor/plasteel, /area/hydroponics/garden) "aKn" = ( @@ -14127,6 +14083,7 @@ "aKC" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/cable, /turf/open/floor/plasteel/showroomfloor, /area/crew_quarters/kitchen) "aKD" = ( @@ -14134,6 +14091,7 @@ /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 4 }, +/obj/structure/cable, /turf/open/floor/plasteel, /area/hydroponics) "aKE" = ( @@ -14361,6 +14319,7 @@ /obj/machinery/light{ dir = 4 }, +/obj/structure/cable, /turf/open/floor/wood, /area/library) "aLi" = ( @@ -14444,6 +14403,7 @@ req_one_access_txt = "32;47;48" }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/cable, /turf/open/floor/plasteel, /area/construction/mining/aux_base) "aLv" = ( @@ -14782,6 +14742,7 @@ dir = 5 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/cable, /turf/open/floor/plasteel, /area/hydroponics) "aMt" = ( @@ -14840,6 +14801,12 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 5 }, +/obj/machinery/power/apc{ + areastring = "/area/hydroponics"; + name = "Hydroponics APC"; + pixel_y = -23 + }, +/obj/structure/cable, /turf/open/floor/plasteel, /area/hydroponics) "aMz" = ( @@ -14886,6 +14853,12 @@ /turf/open/floor/plasteel, /area/hydroponics) "aMF" = ( +/obj/machinery/power/apc{ + areastring = "/area/crew_quarters/kitchen"; + name = "Kitchen APC"; + pixel_y = -23 + }, +/obj/structure/cable, /turf/open/floor/plasteel/showroomfloor, /area/crew_quarters/kitchen) "aMG" = ( @@ -14918,6 +14891,12 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 1 }, +/obj/machinery/power/apc{ + areastring = "/area/chapel/office"; + name = "Chapel Office APC"; + pixel_y = -23 + }, +/obj/structure/cable, /turf/open/floor/plasteel/dark, /area/chapel/office) "aML" = ( @@ -14967,6 +14946,7 @@ /area/hallway/primary/port) "aMT" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, +/obj/structure/cable, /turf/open/floor/plasteel, /area/hallway/primary/port) "aMU" = ( @@ -14995,6 +14975,7 @@ /area/chapel/office) "aMY" = ( /obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden, +/obj/structure/cable, /turf/open/floor/plasteel, /area/hallway/primary/port) "aMZ" = ( @@ -15047,6 +15028,7 @@ codes_txt = "patrol;next_patrol=CHW"; location = "Lockers" }, +/obj/structure/cable, /turf/open/floor/plasteel, /area/hallway/primary/port) "aNl" = ( @@ -15397,7 +15379,6 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/obj/structure/cable, /turf/open/floor/plasteel, /area/hallway/primary/port) "aOj" = ( @@ -15482,14 +15463,6 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/obj/structure/cable, -/turf/open/floor/plasteel, -/area/hallway/primary/port) -"aOv" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/structure/cable, /turf/open/floor/plasteel, /area/hallway/primary/port) "aOw" = ( @@ -15497,19 +15470,16 @@ dir = 9 }, /obj/machinery/atmospherics/pipe/manifold/supply/hidden, -/obj/structure/cable, /turf/open/floor/plasteel, /area/hallway/primary/port) "aOx" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 1 }, -/obj/structure/cable, /turf/open/floor/plasteel, /area/hallway/primary/port) "aOy" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden, -/obj/structure/cable, /turf/open/floor/plasteel, /area/hallway/primary/port) "aOz" = ( @@ -15606,6 +15576,7 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 8 }, +/obj/structure/cable, /turf/open/floor/plasteel/showroomfloor, /area/crew_quarters/kitchen) "aON" = ( @@ -15613,6 +15584,7 @@ /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 8 }, +/obj/structure/cable, /turf/open/floor/plasteel/showroomfloor, /area/crew_quarters/kitchen) "aOO" = ( @@ -15889,6 +15861,7 @@ /obj/machinery/door/airlock/public/glass{ name = "Art Storage" }, +/obj/structure/cable, /turf/open/floor/plasteel, /area/storage/art) "aPI" = ( @@ -16325,6 +16298,7 @@ /turf/open/floor/plasteel, /area/storage/art) "aRa" = ( +/obj/structure/cable, /turf/open/floor/plasteel, /area/storage/art) "aRb" = ( @@ -16336,6 +16310,7 @@ /obj/machinery/door/airlock{ name = "Port Emergency Storage" }, +/obj/structure/cable, /turf/open/floor/plating, /area/storage/emergency/port) "aRd" = ( @@ -16632,18 +16607,6 @@ "aRJ" = ( /turf/open/floor/plasteel, /area/hydroponics) -"aRK" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/power/apc{ - areastring = "/area/library"; - dir = 4; - name = "Library APC"; - pixel_x = 24 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/structure/cable, -/turf/open/floor/plating, -/area/maintenance/starboard/fore) "aRL" = ( /obj/machinery/door/airlock/security/glass{ name = "Holding Area"; @@ -17615,6 +17578,7 @@ c_tag = "Vacant Office"; dir = 4 }, +/obj/structure/cable, /turf/open/floor/wood, /area/vacant_room/office) "aUz" = ( @@ -17761,6 +17725,7 @@ /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 8 }, +/obj/structure/cable, /turf/open/floor/plasteel, /area/crew_quarters/locker) "aUY" = ( @@ -17768,6 +17733,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, +/obj/structure/cable, /turf/open/floor/plasteel, /area/crew_quarters/locker) "aUZ" = ( @@ -18203,6 +18169,7 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 4 }, +/obj/structure/cable, /turf/open/floor/plasteel, /area/hallway/secondary/entry) "aWd" = ( @@ -18222,6 +18189,7 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, +/obj/structure/cable, /turf/open/floor/wood, /area/vacant_room/office) "aWg" = ( @@ -18262,6 +18230,7 @@ /obj/machinery/light_switch{ pixel_x = -28 }, +/obj/structure/cable, /turf/open/floor/wood, /area/vacant_room/office) "aWn" = ( @@ -18277,6 +18246,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, +/obj/structure/cable, /turf/open/floor/plasteel, /area/crew_quarters/locker) "aWp" = ( @@ -18284,12 +18254,14 @@ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/cable, /turf/open/floor/plasteel, /area/crew_quarters/locker) "aWq" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, +/obj/structure/cable, /turf/open/floor/plasteel, /area/crew_quarters/locker) "aWr" = ( @@ -18326,22 +18298,6 @@ }, /turf/open/floor/plating, /area/maintenance/port) -"aWw" = ( -/obj/machinery/power/apc{ - areastring = "/area/storage/art"; - dir = 1; - name = "Art Storage"; - pixel_y = 23 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable, -/turf/open/floor/plating, -/area/maintenance/port) "aWx" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/disposalpipe/segment{ @@ -18357,22 +18313,6 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/closed/wall, /area/crew_quarters/toilet/locker) -"aWz" = ( -/obj/machinery/power/apc{ - areastring = "/area/storage/emergency/port"; - dir = 1; - name = "Port Emergency Storage APC"; - pixel_y = 23 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/structure/cable, -/turf/open/floor/plating, -/area/maintenance/port) "aWB" = ( /obj/structure/reagent_dispensers/fueltank, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ @@ -18753,6 +18693,7 @@ name = "Unisex Restrooms" }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/cable, /turf/open/floor/plasteel/freezer, /area/crew_quarters/toilet/locker) "aXq" = ( @@ -18808,6 +18749,7 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, +/obj/structure/cable, /turf/open/floor/carpet, /area/chapel/main) "aXz" = ( @@ -18822,12 +18764,14 @@ /obj/effect/turf_decal/stripes/corner{ dir = 8 }, +/obj/structure/cable, /turf/open/floor/plasteel, /area/crew_quarters/locker) "aXB" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 1 }, +/obj/structure/cable, /turf/open/floor/carpet, /area/chapel/main) "aXD" = ( @@ -18837,6 +18781,7 @@ /obj/effect/turf_decal/tile/red{ dir = 8 }, +/obj/structure/cable, /turf/open/floor/plasteel/white/corner{ dir = 1 }, @@ -18895,6 +18840,7 @@ name = "Cargo Bay Warehouse Maintenance"; req_access_txt = "31" }, +/obj/structure/cable, /turf/open/floor/plating, /area/maintenance/port) "aXN" = ( @@ -18974,6 +18920,7 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, +/obj/structure/cable, /turf/open/floor/wood, /area/vacant_room/office) "aXY" = ( @@ -19359,6 +19306,7 @@ /area/hydroponics) "aYU" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/cable, /turf/open/floor/plasteel, /area/crew_quarters/locker) "aYV" = ( @@ -19399,6 +19347,7 @@ /obj/effect/turf_decal/tile/bar{ dir = 1 }, +/obj/structure/cable, /turf/open/floor/plasteel, /area/crew_quarters/bar) "aZc" = ( @@ -19439,6 +19388,7 @@ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/cable, /turf/open/floor/carpet, /area/chapel/main) "aZj" = ( @@ -19461,6 +19411,7 @@ /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 4 }, +/obj/structure/cable, /turf/open/floor/plasteel, /area/hallway/secondary/exit) "aZm" = ( @@ -19735,6 +19686,7 @@ /obj/effect/turf_decal/tile/bar{ dir = 1 }, +/obj/structure/cable, /turf/open/floor/plasteel, /area/crew_quarters/bar) "bae" = ( @@ -19745,6 +19697,7 @@ /obj/effect/turf_decal/tile/bar{ dir = 1 }, +/obj/structure/cable, /turf/open/floor/plasteel, /area/crew_quarters/bar) "baf" = ( @@ -19766,6 +19719,7 @@ /obj/effect/turf_decal/tile/bar{ dir = 1 }, +/obj/structure/cable, /turf/open/floor/plasteel, /area/crew_quarters/bar) "bah" = ( @@ -19776,6 +19730,7 @@ /obj/effect/turf_decal/tile/bar{ dir = 1 }, +/obj/structure/cable, /turf/open/floor/plasteel, /area/crew_quarters/bar) "bai" = ( @@ -19784,6 +19739,7 @@ /obj/effect/turf_decal/tile/bar{ dir = 1 }, +/obj/structure/cable, /turf/open/floor/plasteel, /area/crew_quarters/bar) "baj" = ( @@ -19929,6 +19885,12 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 1 }, +/obj/machinery/power/apc{ + areastring = "/area/chapel/main"; + name = "Chapel APC"; + pixel_y = -23 + }, +/obj/structure/cable, /turf/open/floor/plasteel/dark, /area/chapel/main) "baD" = ( @@ -19965,6 +19927,7 @@ /obj/machinery/light{ dir = 4 }, +/obj/structure/cable, /turf/open/floor/plasteel, /area/hallway/secondary/entry) "baH" = ( @@ -19997,18 +19960,6 @@ }, /turf/open/floor/plating, /area/maintenance/port) -"baM" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/power/apc{ - areastring = "/area/crew_quarters/toilet/locker"; - dir = 4; - name = "Locker Restrooms APC"; - pixel_x = 24; - pixel_y = 2 - }, -/obj/structure/cable, -/turf/open/floor/plating, -/area/maintenance/port) "baN" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 4 @@ -20017,6 +19968,14 @@ /area/maintenance/port) "baO" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/power/apc{ + areastring = "/area/crew_quarters/toilet/locker"; + dir = 4; + name = "Locker Restrooms APC"; + pixel_x = 24; + pixel_y = 2 + }, +/obj/structure/cable, /turf/open/floor/plasteel/freezer, /area/crew_quarters/toilet/locker) "baP" = ( @@ -20079,6 +20038,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/closet/crate, /obj/effect/decal/cleanable/dirt, +/obj/structure/cable, /turf/open/floor/plasteel, /area/quartermaster/warehouse) "baZ" = ( @@ -20110,6 +20070,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, +/obj/structure/cable, /turf/open/floor/plating, /area/maintenance/port) "bbd" = ( @@ -20117,15 +20078,7 @@ dir = 4 }, /obj/machinery/atmospherics/pipe/manifold/supply/hidden, -/turf/open/floor/plating, -/area/maintenance/port) -"bbe" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, +/obj/structure/cable, /turf/open/floor/plating, /area/maintenance/port) "bbf" = ( @@ -20135,6 +20088,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 10 }, +/obj/structure/cable, /turf/open/floor/plating, /area/maintenance/port) "bbg" = ( @@ -20143,6 +20097,7 @@ dir = 10 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/cable, /turf/open/floor/plating, /area/maintenance/port) "bbh" = ( @@ -20213,6 +20168,7 @@ dir = 8 }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/cable, /turf/open/floor/plasteel, /area/crew_quarters/locker) "bbs" = ( @@ -20315,19 +20271,8 @@ dir = 1 }, /area/hallway/secondary/exit) -"bbI" = ( -/obj/machinery/power/apc{ - areastring = "/area/vacant_room/office"; - dir = 8; - name = "Vacant Office APC"; - pixel_x = -25 - }, -/obj/structure/cable, -/turf/open/floor/plating, -/area/maintenance/port) "bbK" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/structure/cable, /turf/open/floor/plating, /area/maintenance/port) "bbL" = ( @@ -20367,6 +20312,7 @@ dir = 4 }, /obj/effect/decal/cleanable/dirt, +/obj/structure/cable, /turf/open/floor/plasteel, /area/quartermaster/warehouse) "bbQ" = ( @@ -20386,6 +20332,7 @@ /obj/structure/disposalpipe/junction/flip{ dir = 8 }, +/obj/structure/cable, /turf/open/floor/plasteel, /area/vacant_room/commissary) "bbR" = ( @@ -20416,6 +20363,7 @@ /obj/structure/disposalpipe/segment{ dir = 6 }, +/obj/structure/cable, /turf/open/floor/plating, /area/maintenance/port) "bbW" = ( @@ -20451,6 +20399,7 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, +/obj/structure/cable, /turf/open/floor/plasteel, /area/hallway/primary/starboard) "bcc" = ( @@ -20499,6 +20448,7 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 4 }, +/obj/structure/cable, /turf/open/floor/plasteel, /area/hallway/primary/starboard) "bcj" = ( @@ -20518,6 +20468,7 @@ /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 1 }, +/obj/structure/cable, /turf/open/floor/plasteel, /area/hallway/primary/starboard) "bcl" = ( @@ -20540,6 +20491,7 @@ codes_txt = "patrol;next_patrol=Dorm"; location = "HOP2" }, +/obj/structure/cable, /turf/open/floor/plasteel, /area/hallway/primary/central) "bcp" = ( @@ -20581,6 +20533,7 @@ req_access_txt = "12" }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/cable, /turf/open/floor/plating, /area/maintenance/port) "bcv" = ( @@ -20665,6 +20618,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/structure/cable, /turf/open/floor/plasteel, /area/vacant_room/commissary) "bcH" = ( @@ -20678,6 +20632,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/structure/cable, /turf/open/floor/plasteel, /area/vacant_room/commissary) "bcI" = ( @@ -20780,6 +20735,7 @@ /area/bridge/meeting_room) "bdb" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/cable, /turf/open/floor/plasteel/white/side, /area/hallway/primary/starboard) "bdc" = ( @@ -20851,7 +20807,6 @@ /area/hallway/primary/starboard) "bdm" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/structure/cable, /turf/open/floor/plasteel, /area/hallway/primary/starboard) "bdn" = ( @@ -20870,6 +20825,7 @@ /area/hallway/primary/central) "bdo" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on, +/obj/structure/cable, /turf/open/floor/plasteel, /area/hallway/primary/starboard) "bdp" = ( @@ -20882,12 +20838,14 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 4 }, +/obj/structure/cable, /turf/open/floor/plasteel, /area/hallway/primary/starboard) "bdr" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 10 }, +/obj/structure/cable, /turf/open/floor/plasteel, /area/hallway/primary/starboard) "bds" = ( @@ -20914,6 +20872,7 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 5 }, +/obj/structure/cable, /turf/open/floor/plating, /area/maintenance/port) "bdv" = ( @@ -20997,11 +20956,6 @@ }, /turf/open/floor/carpet, /area/bridge/meeting_room) -"bdG" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/open/floor/plating, -/area/maintenance/port) "bdH" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/supply/hidden, @@ -21043,6 +20997,7 @@ }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/navbeacon/wayfinding, +/obj/structure/cable, /turf/open/floor/plasteel/dark, /area/medical/morgue) "bdO" = ( @@ -21067,13 +21022,6 @@ }, /turf/closed/wall, /area/maintenance/disposal) -"bdR" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/structure/cable, -/turf/open/floor/plating, -/area/maintenance/port) "bdS" = ( /obj/structure/closet/crate/internals, /obj/effect/decal/cleanable/dirt, @@ -21260,6 +21208,7 @@ codes_txt = "patrol;next_patrol=Stbd"; location = "HOP" }, +/obj/structure/cable, /turf/open/floor/plasteel, /area/hallway/primary/central) "bep" = ( @@ -21370,7 +21319,6 @@ c_tag = "Starboard Primary Hallway 3"; dir = 1 }, -/obj/structure/cable, /turf/open/floor/plasteel, /area/hallway/primary/starboard) "beD" = ( @@ -21555,6 +21503,7 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 8 }, +/obj/structure/cable, /turf/open/floor/plasteel, /area/hallway/primary/central) "beY" = ( @@ -21583,16 +21532,9 @@ /turf/open/floor/plating, /area/chapel/main) "bfc" = ( -/obj/machinery/power/apc{ - areastring = "/area/crew_quarters/locker"; - dir = 1; - name = "Locker Room APC"; - pixel_y = 23 - }, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 6 }, -/obj/structure/cable, /turf/open/floor/plating, /area/maintenance/port) "bfd" = ( @@ -21604,6 +21546,7 @@ /area/maintenance/port) "bfe" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden, +/obj/structure/cable, /turf/open/floor/plating, /area/maintenance/port) "bff" = ( @@ -21648,12 +21591,6 @@ /obj/structure/disposalpipe/segment{ dir = 9 }, -/obj/machinery/power/apc{ - areastring = "/area/quartermaster/storage"; - name = "Cargo Bay APC"; - pixel_x = 1; - pixel_y = -23 - }, /obj/structure/cable, /turf/open/floor/plating, /area/maintenance/port) @@ -21827,12 +21764,6 @@ /turf/open/floor/plasteel, /area/hallway/primary/starboard) "bfP" = ( -/obj/machinery/power/apc{ - areastring = "/area/hallway/primary/starboard"; - name = "Starboard Primary Hallway APC"; - pixel_y = -23 - }, -/obj/structure/cable, /obj/structure/closet/emcloset, /turf/open/floor/plasteel, /area/hallway/primary/starboard) @@ -22008,6 +21939,7 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 10 }, +/obj/structure/cable, /turf/open/floor/plasteel, /area/hallway/primary/central) "bgn" = ( @@ -22019,18 +21951,6 @@ }, /turf/open/floor/plasteel, /area/hallway/primary/central) -"bgo" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/power/apc{ - areastring = "/area/science/robotics/mechbay"; - dir = 4; - name = "Mech Bay APC"; - pixel_x = 24 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/structure/cable, -/turf/open/floor/plating, -/area/maintenance/department/medical/morgue) "bgp" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on, /turf/open/floor/plasteel/white, @@ -22442,6 +22362,7 @@ /obj/machinery/door/airlock{ name = "Starboard Emergency Storage" }, +/obj/structure/cable, /turf/open/floor/plating, /area/storage/emergency/starboard) "bhs" = ( @@ -22646,6 +22567,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, +/obj/structure/cable, /turf/open/floor/plating, /area/maintenance/port) "bhO" = ( @@ -22958,10 +22880,18 @@ /turf/open/floor/plasteel/dark, /area/medical/morgue) "biC" = ( +/obj/structure/cable, /turf/open/floor/plating, /area/storage/emergency/starboard) "biD" = ( /obj/item/storage/box/lights/mixed, +/obj/machinery/power/apc{ + areastring = "/area/storage/emergency/starboard"; + dir = 1; + name = "Starboard Emergency Storage APC"; + pixel_y = 23 + }, +/obj/structure/cable, /turf/open/floor/plating, /area/storage/emergency/starboard) "biE" = ( @@ -23818,7 +23748,6 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 6 }, -/obj/structure/cable, /turf/open/floor/plasteel/dark, /area/medical/morgue) "bkQ" = ( @@ -23827,7 +23756,6 @@ }, /obj/machinery/light/small, /obj/machinery/atmospherics/pipe/manifold/supply/hidden, -/obj/structure/cable, /turf/open/floor/plasteel/dark, /area/medical/morgue) "bkR" = ( @@ -23840,7 +23768,6 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/obj/structure/cable, /turf/open/floor/plasteel/dark, /area/medical/morgue) "bkS" = ( @@ -23871,7 +23798,6 @@ dir = 4 }, /obj/machinery/atmospherics/components/unary/vent_scrubber/on, -/obj/structure/cable, /turf/open/floor/plasteel/dark, /area/medical/morgue) "bkV" = ( @@ -23923,7 +23849,6 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/obj/structure/cable, /turf/open/floor/plasteel/dark, /area/medical/morgue) "blb" = ( @@ -23980,7 +23905,6 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/obj/structure/cable, /turf/open/floor/plating, /area/maintenance/department/medical/morgue) "blh" = ( @@ -24043,22 +23967,6 @@ /obj/machinery/cell_charger, /turf/open/floor/plasteel/white, /area/medical/medbay/central) -"blo" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/power/apc{ - areastring = "/area/storage/emergency/starboard"; - dir = 1; - name = "Starboard Emergency Storage APC"; - pixel_y = 23 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/structure/cable, -/turf/open/floor/plating, -/area/maintenance/department/medical/morgue) "blp" = ( /obj/machinery/power/apc{ areastring = "/area/security/checkpoint/medical"; @@ -24095,6 +24003,7 @@ /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 4 }, +/obj/structure/cable, /turf/open/floor/plasteel/dark, /area/medical/morgue) "bls" = ( @@ -24731,7 +24640,6 @@ req_access_txt = "6;5" }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/structure/cable, /turf/open/floor/plasteel/dark, /area/medical/morgue) "bmW" = ( @@ -25149,7 +25057,6 @@ dir = 9 }, /obj/machinery/atmospherics/pipe/manifold/supply/hidden, -/obj/structure/cable, /turf/open/floor/plasteel/white, /area/medical/medbay/central) "bod" = ( @@ -25820,6 +25727,7 @@ /obj/structure/disposalpipe/segment{ dir = 9 }, +/obj/structure/cable, /turf/open/floor/plasteel/white, /area/science/robotics/lab) "bpS" = ( @@ -25896,6 +25804,7 @@ /area/science/robotics/lab) "bqc" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden, +/obj/structure/cable, /turf/open/floor/plasteel/white, /area/science/robotics/lab) "bqd" = ( @@ -25916,15 +25825,6 @@ }, /turf/open/floor/plasteel/white, /area/science/genetics) -"bqf" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/turf/open/floor/plasteel/white, -/area/science/research) "bqg" = ( /obj/structure/rack, /obj/effect/spawner/lootdrop/maintenance, @@ -25960,13 +25860,6 @@ }, /turf/open/floor/plating, /area/quartermaster/storage) -"bqk" = ( -/obj/structure/disposalpipe/segment{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden, -/turf/open/floor/plasteel/white, -/area/science/research) "bql" = ( /obj/machinery/conveyor{ dir = 4; @@ -26244,13 +26137,6 @@ /obj/structure/cable, /turf/open/floor/plasteel/white, /area/medical/medbay/central) -"bqW" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/obj/structure/cable, -/turf/open/floor/plasteel/white, -/area/medical/medbay/central) "bqX" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 9 @@ -26333,7 +26219,6 @@ /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 8 }, -/obj/structure/cable, /turf/open/floor/plasteel/white/side{ dir = 9 }, @@ -26395,6 +26280,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, +/obj/structure/cable, /turf/open/floor/plasteel/white, /area/science/research) "bru" = ( @@ -26419,16 +26305,6 @@ /obj/effect/landmark/start/geneticist, /turf/open/floor/plasteel/white, /area/science/genetics) -"brx" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/open/floor/plasteel/white, -/area/science/research) "bry" = ( /obj/machinery/door/airlock/maintenance{ name = "Genetics Lab Maintenance"; @@ -26707,16 +26583,6 @@ /obj/structure/cable, /turf/open/floor/plasteel, /area/teleporter) -"bsp" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/hallway/primary/central) "bsq" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -26775,6 +26641,7 @@ name = "Robotics Lab"; req_access_txt = "29" }, +/obj/structure/cable, /turf/open/floor/plasteel/white, /area/science/robotics/lab) "bsx" = ( @@ -26845,10 +26712,12 @@ dir = 1; network = list("ss13","rd") }, +/obj/structure/cable, /turf/open/floor/plasteel/white, /area/science/robotics/lab) "bsT" = ( /obj/machinery/light, +/obj/structure/cable, /turf/open/floor/plasteel/white, /area/science/robotics/lab) "bsU" = ( @@ -26884,6 +26753,7 @@ /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 8 }, +/obj/structure/cable, /turf/open/floor/plasteel/white, /area/science/research) "bta" = ( @@ -26927,6 +26797,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, +/obj/structure/cable, /turf/open/floor/plasteel/white, /area/science/research) "btm" = ( @@ -27200,6 +27071,7 @@ "btR" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/cable, /turf/open/floor/plasteel/white, /area/medical/medbay/central) "btS" = ( @@ -27224,6 +27096,7 @@ /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 1 }, +/obj/structure/cable, /turf/open/floor/plasteel/white, /area/science/research) "btV" = ( @@ -29177,6 +29050,7 @@ /obj/machinery/door/airlock/medical/glass{ name = "Recovery Room" }, +/obj/structure/cable, /turf/open/floor/plasteel/white, /area/medical/sleeper) "bzd" = ( @@ -29511,6 +29385,7 @@ /obj/effect/turf_decal/tile/blue{ dir = 8 }, +/obj/structure/cable, /turf/open/floor/plasteel/white, /area/medical/medbay/central) "bzY" = ( @@ -29562,6 +29437,7 @@ /area/hallway/primary/central) "bAf" = ( /obj/machinery/holopad, +/obj/structure/cable, /turf/open/floor/plasteel, /area/hallway/primary/central) "bAg" = ( @@ -29571,6 +29447,7 @@ }, /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/cable, /turf/open/floor/plasteel, /area/hallway/primary/central) "bAh" = ( @@ -29579,6 +29456,7 @@ location = "AIE" }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/cable, /turf/open/floor/plasteel, /area/hallway/primary/central) "bAi" = ( @@ -30014,7 +29892,6 @@ dir = 1; pixel_y = -22 }, -/obj/structure/cable, /turf/open/floor/plasteel, /area/hallway/primary/central) "bBk" = ( @@ -30023,7 +29900,6 @@ c_tag = "Central Primary Hallway South-West"; dir = 1 }, -/obj/structure/cable, /turf/open/floor/plasteel, /area/hallway/primary/central) "bBm" = ( @@ -30151,7 +30027,6 @@ /turf/open/floor/plasteel, /area/hallway/primary/central) "bBB" = ( -/obj/structure/cable, /obj/structure/disposalpipe/junction/yjunction{ dir = 8 }, @@ -30164,6 +30039,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, +/obj/structure/cable, /turf/open/floor/plasteel/white, /area/medical/medbay/central) "bBD" = ( @@ -30527,6 +30403,7 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 4 }, +/obj/structure/cable, /turf/open/floor/plasteel, /area/janitor) "bCu" = ( @@ -30551,6 +30428,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 10 }, +/obj/structure/cable, /turf/open/floor/plasteel, /area/janitor) "bCx" = ( @@ -30653,6 +30531,7 @@ /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 1 }, +/obj/structure/cable, /turf/open/floor/plasteel/white, /area/medical/sleeper) "bCL" = ( @@ -30747,6 +30626,7 @@ "bCV" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/components/unary/vent_scrubber/on, +/obj/structure/cable, /turf/open/floor/plasteel/white, /area/medical/medbay/central) "bCW" = ( @@ -30945,7 +30825,6 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 6 }, -/obj/structure/cable, /turf/open/floor/plating, /area/maintenance/aft) "bDv" = ( @@ -31003,17 +30882,10 @@ /area/storage/tech) "bDA" = ( /obj/structure/disposalpipe/segment, -/obj/machinery/power/apc{ - areastring = "/area/medical/sleeper"; - dir = 4; - name = "Treatment Center APC"; - pixel_x = 24 - }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/obj/structure/cable, /turf/open/floor/plating, /area/maintenance/aft) "bDB" = ( @@ -31040,6 +30912,7 @@ /obj/effect/turf_decal/tile/blue{ dir = 1 }, +/obj/structure/cable, /turf/open/floor/plasteel/white, /area/medical/sleeper) "bDE" = ( @@ -31080,6 +30953,7 @@ "bDI" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/manifold4w/supply/hidden, +/obj/structure/cable, /turf/open/floor/plasteel/white, /area/medical/medbay/central) "bDJ" = ( @@ -31098,6 +30972,13 @@ /turf/open/floor/plasteel, /area/janitor) "bDL" = ( +/obj/machinery/power/apc{ + areastring = "/area/janitor"; + dir = 8; + name = "Custodial Closet APC"; + pixel_x = -25 + }, +/obj/structure/cable, /turf/open/floor/plasteel, /area/janitor) "bDM" = ( @@ -31110,6 +30991,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, +/obj/structure/cable, /turf/open/floor/plasteel/white, /area/medical/medbay/central) "bDO" = ( @@ -31145,6 +31027,7 @@ /obj/effect/turf_decal/tile/blue{ dir = 8 }, +/obj/structure/cable, /turf/open/floor/plasteel/cafeteria, /area/crew_quarters/heads/cmo) "bDT" = ( @@ -31165,6 +31048,7 @@ /obj/effect/turf_decal/tile/blue{ dir = 8 }, +/obj/structure/cable, /turf/open/floor/plasteel/cafeteria, /area/crew_quarters/heads/cmo) "bDV" = ( @@ -31540,10 +31424,12 @@ "bFf" = ( /obj/structure/chair/stool, /obj/effect/landmark/start/janitor, +/obj/structure/cable, /turf/open/floor/plasteel, /area/janitor) "bFg" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/cable, /turf/open/floor/plasteel, /area/janitor) "bFh" = ( @@ -31557,6 +31443,7 @@ /obj/structure/disposalpipe/segment{ dir = 6 }, +/obj/structure/cable, /turf/open/floor/plasteel, /area/janitor) "bFj" = ( @@ -31573,16 +31460,6 @@ /obj/item/reagent_containers/glass/bucket, /turf/open/floor/plasteel, /area/janitor) -"bFl" = ( -/obj/machinery/power/apc{ - areastring = "/area/janitor"; - dir = 8; - name = "Custodial Closet APC"; - pixel_x = -25 - }, -/obj/structure/cable, -/turf/open/floor/plating, -/area/maintenance/aft) "bFm" = ( /obj/structure/disposalpipe/sorting/mail/flip{ dir = 8; @@ -31628,6 +31505,7 @@ req_access_txt = "26" }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/cable, /turf/open/floor/plating, /area/maintenance/aft) "bFt" = ( @@ -31663,6 +31541,7 @@ /obj/effect/turf_decal/tile/blue{ dir = 8 }, +/obj/structure/cable, /turf/open/floor/plasteel/white, /area/medical/sleeper) "bFx" = ( @@ -31791,6 +31670,14 @@ "bFJ" = ( /obj/structure/bed, /obj/item/bedsheet/medical, +/obj/machinery/power/apc{ + areastring = "/area/medical/sleeper"; + dir = 2; + name = "Treatment Center APC"; + pixel_x = 0; + pixel_y = -23 + }, +/obj/structure/cable, /turf/open/floor/plasteel/white, /area/medical/sleeper) "bFK" = ( @@ -31814,6 +31701,7 @@ /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 8 }, +/obj/structure/cable, /turf/open/floor/plasteel/white, /area/medical/medbay/central) "bFN" = ( @@ -32036,7 +31924,6 @@ /obj/structure/disposalpipe/segment{ dir = 6 }, -/obj/structure/cable, /turf/open/floor/plasteel, /area/science/mixing) "bGB" = ( @@ -32229,6 +32116,7 @@ /obj/effect/turf_decal/tile/blue{ dir = 8 }, +/obj/structure/cable, /turf/open/floor/plasteel/cafeteria, /area/crew_quarters/heads/cmo) "bHa" = ( @@ -32247,6 +32135,14 @@ /obj/effect/turf_decal/tile/blue{ dir = 8 }, +/obj/machinery/power/apc{ + areastring = "/area/crew_quarters/heads/cmo"; + dir = 4; + name = "CM Office APC"; + pixel_x = 24; + pixel_y = 0 + }, +/obj/structure/cable, /turf/open/floor/plasteel/cafeteria, /area/crew_quarters/heads/cmo) "bHc" = ( @@ -33378,6 +33274,7 @@ "bKa" = ( /obj/effect/turf_decal/stripes/line, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/cable, /turf/open/floor/plasteel, /area/science/mixing) "bKb" = ( @@ -33632,14 +33529,7 @@ /area/maintenance/aft) "bKK" = ( /obj/effect/decal/cleanable/cobweb/cobweb2, -/obj/machinery/power/apc{ - areastring = "/area/medical/medbay/central"; - dir = 4; - name = "Medbay APC"; - pixel_x = 24 - }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/structure/cable, /obj/structure/closet/emcloset, /turf/open/floor/plating, /area/maintenance/aft) @@ -33690,19 +33580,6 @@ }, /turf/closed/wall, /area/medical/medbay/central) -"bKS" = ( -/obj/machinery/power/apc{ - areastring = "/area/crew_quarters/heads/cmo"; - dir = 1; - name = "CM Office APC"; - pixel_y = 23 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/structure/cable, -/turf/open/floor/plating, -/area/maintenance/aft) "bKT" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -37068,25 +36945,6 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel, /area/tcommsat/computer) -"bUz" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/structure/cable, -/turf/open/floor/plating, -/area/maintenance/port/aft) -"bUB" = ( -/obj/machinery/power/apc{ - areastring = "/area/tcommsat/computer"; - name = "Telecomms Monitoring APC"; - pixel_y = -23 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/structure/cable, -/turf/open/floor/plating, -/area/maintenance/port/aft) "bUC" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -37808,6 +37666,12 @@ /obj/effect/turf_decal/tile/yellow{ dir = 8 }, +/obj/machinery/power/apc{ + areastring = "/area/tcommsat/computer"; + dir = 1; + name = "Telecomms Monitoring APC"; + pixel_y = 23 + }, /turf/open/floor/plasteel, /area/tcommsat/computer) "bWI" = ( @@ -40210,7 +40074,6 @@ dir = 4 }, /obj/machinery/light/small, -/obj/structure/cable, /turf/open/floor/plating, /area/maintenance/aft) "cdN" = ( @@ -40385,11 +40248,6 @@ }, /turf/open/floor/plasteel, /area/engine/atmos) -"ceC" = ( -/obj/machinery/atmospherics/pipe/simple/yellow/visible, -/obj/structure/cable, -/turf/open/floor/plating, -/area/maintenance/aft) "ceD" = ( /obj/effect/turf_decal/stripes/line, /obj/structure/cable, @@ -40723,6 +40581,19 @@ }, /turf/open/floor/plasteel, /area/engine/atmos) +"cfS" = ( +/obj/effect/turf_decal/tile/bar, +/obj/effect/turf_decal/tile/bar{ + dir = 1 + }, +/obj/machinery/power/apc{ + areastring = "/area/crew_quarters/bar"; + name = "Bar APC"; + pixel_y = -23 + }, +/obj/structure/cable, +/turf/open/floor/plasteel, +/area/crew_quarters/bar) "cfT" = ( /obj/machinery/atmospherics/pipe/simple/green/visible{ dir = 9 @@ -40737,16 +40608,6 @@ }, /turf/open/floor/plating, /area/maintenance/disposal/incinerator) -"cfX" = ( -/obj/machinery/power/apc{ - areastring = "/area/maintenance/disposal/incinerator"; - name = "Incinerator APC"; - pixel_y = -23 - }, -/obj/machinery/atmospherics/pipe/simple/yellow/visible, -/obj/structure/cable, -/turf/open/floor/plating, -/area/maintenance/aft) "cfY" = ( /obj/effect/turf_decal/stripes/line{ dir = 1 @@ -42245,6 +42106,7 @@ dir = 4; pixel_x = 24 }, +/obj/structure/cable, /turf/open/floor/plasteel, /area/maintenance/disposal/incinerator) "clh" = ( @@ -42270,6 +42132,7 @@ dir = 1; name = "Incinerator to Output" }, +/obj/structure/cable, /turf/open/floor/plasteel, /area/maintenance/disposal/incinerator) "clk" = ( @@ -42366,6 +42229,7 @@ /obj/effect/turf_decal/tile/yellow{ dir = 1 }, +/obj/structure/cable, /turf/open/floor/plasteel, /area/hallway/secondary/entry) "clI" = ( @@ -43053,6 +42917,10 @@ }, /turf/open/floor/plasteel, /area/engine/engineering) +"cpF" = ( +/obj/structure/cable, +/turf/open/floor/plating, +/area/storage/emergency/port) "cpG" = ( /obj/structure/table/optable, /obj/machinery/atmospherics/pipe/manifold/supply/hidden, @@ -45677,6 +45545,7 @@ }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/effect/landmark/event_spawn, +/obj/structure/cable, /turf/open/floor/plasteel, /area/hallway/secondary/exit) "czP" = ( @@ -45854,6 +45723,7 @@ /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 8 }, +/obj/structure/cable, /turf/open/floor/plasteel/dark, /area/chapel/office) "cAA" = ( @@ -45927,6 +45797,7 @@ /area/maintenance/port/aft) "cAL" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/cable, /mob/living/simple_animal/hostile/lizard{ name = "Wags-His-Tail"; real_name = "Wags-His-Tail" @@ -46117,6 +45988,7 @@ /obj/effect/landmark/event_spawn, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/effect/decal/cleanable/dirt, +/obj/structure/cable, /turf/open/floor/plasteel, /area/quartermaster/warehouse) "cBj" = ( @@ -46182,6 +46054,7 @@ "cBw" = ( /obj/machinery/door/firedoor, /obj/effect/landmark/event_spawn, +/obj/structure/cable, /turf/open/floor/plasteel, /area/hallway/primary/central) "cBx" = ( @@ -47587,6 +47460,14 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 1 }, +/obj/machinery/power/apc{ + areastring = "/area/science/robotics/mechbay"; + dir = 2; + name = "Mech Bay APC"; + pixel_x = 0; + pixel_y = -23 + }, +/obj/structure/cable, /turf/open/floor/plasteel, /area/science/robotics/mechbay) "cHR" = ( @@ -48255,6 +48136,11 @@ }, /turf/open/floor/plating, /area/maintenance/starboard/aft) +"cWI" = ( +/obj/machinery/door/firedoor, +/obj/structure/cable, +/turf/open/floor/plasteel/white, +/area/medical/medbay/central) "cYj" = ( /obj/machinery/door/airlock/maintenance{ name = "Psychology Maintenance"; @@ -48360,6 +48246,14 @@ /obj/machinery/chem_heater, /turf/open/floor/plasteel/white, /area/medical/chemistry) +"dmo" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/public/glass{ + name = "Diner" + }, +/obj/structure/cable, +/turf/open/floor/plasteel, +/area/crew_quarters/bar) "dni" = ( /obj/structure/disposalpipe/segment{ dir = 9 @@ -48623,11 +48517,6 @@ /obj/structure/chair/stool, /turf/open/floor/plasteel, /area/security/prison) -"dPH" = ( -/obj/machinery/light, -/obj/structure/cable, -/turf/open/floor/plasteel, -/area/hallway/primary/central) "dRp" = ( /obj/machinery/seed_extractor, /obj/effect/decal/cleanable/dirt, @@ -48815,6 +48704,14 @@ dir = 1 }, /obj/effect/turf_decal/tile/neutral, +/obj/machinery/power/apc{ + areastring = "/area/vacant_room/commissary"; + dir = 4; + name = "Vacant Commissary APC"; + pixel_x = 24; + pixel_y = 2 + }, +/obj/structure/cable, /turf/open/floor/plasteel, /area/vacant_room/commissary) "eAI" = ( @@ -48857,6 +48754,18 @@ }, /turf/open/floor/wood, /area/crew_quarters/dorms) +"eMe" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/power/apc{ + areastring = "/area/crew_quarters/locker"; + dir = 4; + name = "Locker Room APC"; + pixel_x = 24; + pixel_y = 0 + }, +/obj/structure/cable, +/turf/open/floor/plasteel, +/area/crew_quarters/locker) "eRs" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/turf_decal/stripes/white/line{ @@ -48992,6 +48901,12 @@ }, /turf/open/floor/plasteel, /area/security/prison) +"fkd" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/turf/open/floor/plasteel, +/area/quartermaster/warehouse) "flc" = ( /obj/item/assembly/prox_sensor{ pixel_x = -4; @@ -49168,6 +49083,17 @@ /obj/effect/turf_decal/delivery, /turf/open/floor/plasteel, /area/science/xenobiology) +"fLe" = ( +/obj/machinery/power/apc{ + areastring = "/area/lawoffice"; + dir = 4; + name = "Law Office APC"; + pixel_x = 23; + pixel_y = 0 + }, +/obj/structure/cable, +/turf/open/floor/wood, +/area/lawoffice) "fPm" = ( /obj/structure/disposalpipe/segment{ dir = 6 @@ -49177,12 +49103,28 @@ }, /turf/open/floor/plasteel/white, /area/medical/chemistry) +"fTq" = ( +/obj/machinery/power/apc{ + areastring = "/area/library"; + dir = 4; + name = "Library APC"; + pixel_x = 24 + }, +/obj/structure/cable, +/turf/open/floor/wood, +/area/library) "fUn" = ( /obj/effect/turf_decal/tile/blue{ dir = 1 }, /turf/open/floor/plasteel/white, /area/medical/medbay/zone2) +"fVu" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/cable, +/turf/open/floor/plasteel/white, +/area/medical/chemistry) "fVK" = ( /obj/machinery/light{ dir = 1 @@ -49286,6 +49228,13 @@ /obj/structure/cable, /turf/open/floor/plasteel, /area/science/mixing) +"gnW" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/plasteel/white, +/area/medical/sleeper) "gnX" = ( /obj/effect/turf_decal/stripes/line{ dir = 4 @@ -49404,6 +49353,16 @@ /obj/item/bedsheet/medical, /turf/open/floor/plasteel/white, /area/medical/medbay/zone2) +"gGr" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/plasteel, +/area/hallway/primary/port) "gGJ" = ( /obj/machinery/camera/autoname{ dir = 5 @@ -49517,6 +49476,7 @@ /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 1 }, +/obj/structure/cable, /turf/open/floor/plasteel/dark, /area/security/courtroom) "gNQ" = ( @@ -49543,6 +49503,26 @@ /obj/structure/cable, /turf/open/floor/plasteel/white, /area/science/lab) +"gRI" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/plasteel, +/area/vacant_room/commissary) +"gRL" = ( +/obj/machinery/power/apc{ + areastring = "/area/hallway/primary/starboard"; + name = "Starboard Primary Hallway APC"; + pixel_y = -23 + }, +/obj/structure/cable, +/turf/open/floor/plasteel, +/area/hallway/primary/starboard) "gUD" = ( /obj/structure/table, /obj/machinery/atmospherics/pipe/simple/supply/hidden, @@ -49613,18 +49593,13 @@ }, /turf/open/floor/plasteel/white, /area/medical/chemistry) -"hcE" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/structure/disposalpipe/segment, -/obj/machinery/power/apc{ - areastring = "/area/quartermaster/warehouse"; - dir = 4; - name = "Cargo Warehouse APC"; - pixel_x = 24 +"hcu" = ( +/obj/structure/chair{ + dir = 1 }, /obj/structure/cable, -/turf/open/floor/plating, -/area/maintenance/port) +/turf/open/floor/plasteel/dark, +/area/security/courtroom) "hec" = ( /obj/structure/bed/dogbed/renault, /mob/living/simple_animal/pet/fox/Renault, @@ -49779,6 +49754,11 @@ /obj/effect/mapping_helpers/airlock/cyclelink_helper, /turf/open/floor/plating, /area/hallway/secondary/entry) +"hGn" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/turf/open/floor/plasteel, +/area/quartermaster/warehouse) "hGP" = ( /obj/machinery/button/door{ id = "xenobio3"; @@ -49839,6 +49819,7 @@ name = "Chemistry Lab"; req_access_txt = "5; 33" }, +/obj/structure/cable, /turf/open/floor/plating, /area/maintenance/starboard/aft) "hMM" = ( @@ -49889,6 +49870,11 @@ "hTU" = ( /turf/closed/wall/r_wall, /area/medical/chemistry) +"hVK" = ( +/obj/effect/landmark/event_spawn, +/obj/structure/cable, +/turf/open/floor/plasteel, +/area/hallway/primary/central) "hYR" = ( /obj/machinery/atmospherics/pipe/simple/cyan/hidden, /turf/open/floor/plating, @@ -49986,6 +49972,10 @@ /obj/effect/turf_decal/loading_area, /turf/open/floor/plasteel/dark, /area/science/nanite) +"itz" = ( +/obj/structure/cable, +/turf/open/floor/plasteel, +/area/hallway/secondary/entry) "itG" = ( /obj/item/beacon, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -50006,6 +49996,17 @@ }, /turf/open/floor/plating, /area/security/execution/transfer) +"izD" = ( +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/floor/plasteel, +/area/crew_quarters/locker) "izT" = ( /obj/structure/closet/crate{ icon_state = "crateopen" @@ -50349,6 +50350,7 @@ dir = 4 }, /obj/machinery/door/firedoor/heavy, +/obj/structure/cable, /turf/open/floor/plasteel/white, /area/science/research) "jsb" = ( @@ -50359,16 +50361,13 @@ /obj/structure/filingcabinet/filingcabinet, /turf/open/floor/plasteel/white, /area/medical/psychology) -"jsv" = ( -/obj/machinery/power/apc{ - areastring = "/area/lawoffice"; - dir = 1; - name = "Law Office APC"; - pixel_y = 23 +"jsj" = ( +/obj/machinery/door/airlock/maintenance{ + req_access_txt = "12" }, /obj/structure/cable, /turf/open/floor/plating, -/area/maintenance/fore) +/area/maintenance/fore/secondary) "jsw" = ( /obj/structure/disposalpipe/segment, /turf/open/floor/plating, @@ -50512,6 +50511,11 @@ }, /turf/open/floor/plasteel/dark, /area/security/prison/safe) +"jLL" = ( +/obj/machinery/door/firedoor, +/obj/structure/cable, +/turf/open/floor/plasteel, +/area/hallway/primary/starboard) "jMF" = ( /obj/machinery/door/firedoor/heavy, /obj/machinery/atmospherics/pipe/simple/supply/hidden, @@ -50641,6 +50645,7 @@ /obj/machinery/airalarm{ pixel_y = 23 }, +/obj/structure/cable, /turf/open/floor/plasteel/white, /area/medical/chemistry) "kdS" = ( @@ -51064,6 +51069,10 @@ "ljx" = ( /turf/closed/wall/r_wall, /area/medical/medbay/zone2) +"lmZ" = ( +/obj/structure/cable, +/turf/open/floor/wood, +/area/lawoffice) "lqJ" = ( /obj/structure/table/wood, /obj/item/flashlight/lantern, @@ -51304,6 +51313,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/structure/cable, /turf/open/floor/plasteel, /area/vacant_room/commissary) "lIv" = ( @@ -51434,6 +51444,13 @@ }, /turf/open/floor/engine, /area/science/xenobiology) +"lWa" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/plasteel, +/area/hallway/primary/starboard) "lWA" = ( /obj/machinery/door/airlock/external{ name = "External Access"; @@ -51728,6 +51745,17 @@ }, /turf/open/floor/plasteel, /area/security/prison/safe) +"mRq" = ( +/obj/machinery/power/apc{ + areastring = "/area/storage/art"; + dir = 4; + name = "Art Storage"; + pixel_x = 23; + pixel_y = 0 + }, +/obj/structure/cable, +/turf/open/floor/plasteel, +/area/storage/art) "mSf" = ( /obj/structure/chair/office{ dir = 1 @@ -51739,6 +51767,7 @@ /obj/machinery/light{ dir = 4 }, +/obj/structure/cable, /turf/open/floor/plasteel, /area/crew_quarters/locker) "mSR" = ( @@ -51773,6 +51802,10 @@ }, /turf/open/floor/plasteel, /area/security/prison) +"mVj" = ( +/obj/structure/cable, +/turf/open/floor/plasteel, +/area/hydroponics/garden) "mWx" = ( /obj/structure/rack, /obj/item/tank/internals/emergency_oxygen, @@ -51814,6 +51847,16 @@ }, /turf/open/floor/plasteel, /area/security/prison) +"nls" = ( +/obj/machinery/power/apc{ + areastring = "/area/quartermaster/storage"; + name = "Cargo Bay APC"; + pixel_x = 1; + pixel_y = -23 + }, +/obj/structure/cable, +/turf/open/floor/plasteel, +/area/quartermaster/storage) "nmn" = ( /obj/structure/chair{ dir = 4 @@ -52109,6 +52152,7 @@ /obj/effect/turf_decal/stripes/line, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/disposalpipe/segment, +/obj/structure/cable, /turf/open/floor/plasteel, /area/science/mixing) "nWA" = ( @@ -52185,6 +52229,10 @@ /obj/structure/cable, /turf/open/floor/engine, /area/science/xenobiology) +"oeS" = ( +/obj/structure/cable, +/turf/open/floor/plasteel/dark, +/area/security/courtroom) "ofT" = ( /obj/machinery/computer/bounty, /turf/open/floor/plasteel, @@ -52321,12 +52369,17 @@ /obj/machinery/light, /turf/open/floor/plating, /area/engine/engineering) +"oEV" = ( +/obj/structure/cable, +/turf/open/floor/plasteel, +/area/hallway/primary/fore) "oHe" = ( /obj/machinery/door/firedoor, /obj/effect/turf_decal/tile/blue{ dir = 4 }, /obj/effect/turf_decal/tile/blue, +/obj/structure/cable, /turf/open/floor/plasteel, /area/hallway/primary/central) "oHH" = ( @@ -52445,6 +52498,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/structure/cable, /turf/open/floor/plating, /area/maintenance/port) "oXL" = ( @@ -52544,6 +52598,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/structure/cable, /turf/open/floor/plasteel/grimy, /area/security/detectives_office) "piD" = ( @@ -52863,6 +52918,17 @@ /obj/structure/cable, /turf/open/floor/plasteel/white, /area/medical/medbay/zone2) +"pKc" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/power/apc{ + areastring = "/area/quartermaster/warehouse"; + dir = 8; + name = "Cargo Warehouse APC"; + pixel_x = -24 + }, +/obj/structure/cable, +/turf/open/floor/plasteel, +/area/quartermaster/warehouse) "pKm" = ( /obj/structure/table, /obj/item/nanite_remote, @@ -53002,6 +53068,7 @@ /area/science/genetics) "pUr" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on, +/obj/structure/cable, /turf/open/floor/wood, /area/lawoffice) "pVb" = ( @@ -53147,6 +53214,13 @@ }, /turf/open/floor/plasteel/freezer, /area/security/prison/safe) +"qoQ" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/plasteel, +/area/hallway/primary/port) "qpJ" = ( /obj/machinery/hydroponics/soil, /obj/effect/turf_decal/tile/green{ @@ -53262,17 +53336,21 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/closed/wall, /area/security/detectives_office) +"qMk" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/power/apc{ + areastring = "/area/maintenance/disposal/incinerator"; + name = "Incinerator APC"; + pixel_y = -23 + }, +/obj/structure/cable, +/turf/open/floor/plasteel, +/area/maintenance/disposal/incinerator) "qQw" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/cable, /turf/open/floor/plasteel/dark, /area/security/execution/transfer) -"qQC" = ( -/obj/machinery/portable_atmospherics/canister, -/obj/effect/turf_decal/bot, -/obj/structure/cable, -/turf/open/floor/plasteel, -/area/science/mixing) "qQH" = ( /obj/effect/spawner/lootdrop/minor/bowler_or_that, /obj/structure/rack, @@ -53306,6 +53384,19 @@ /obj/machinery/door/firedoor, /turf/open/floor/plating, /area/security/execution/transfer) +"qWw" = ( +/obj/structure/chair{ + dir = 1 + }, +/obj/machinery/power/apc{ + areastring = "/area/security/courtroom"; + dir = 8; + name = "Courtroom APC"; + pixel_x = -25 + }, +/obj/structure/cable, +/turf/open/floor/plasteel/dark, +/area/security/courtroom) "qXy" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 4 @@ -53380,6 +53471,16 @@ /obj/item/camera, /turf/open/floor/plasteel, /area/security/prison) +"rqd" = ( +/obj/effect/turf_decal/tile/blue{ + dir = 4 + }, +/obj/effect/turf_decal/tile/blue{ + dir = 8 + }, +/obj/structure/cable, +/turf/open/floor/plasteel/cafeteria, +/area/crew_quarters/heads/cmo) "rrf" = ( /obj/machinery/door/airlock/security/glass{ name = "Isolation Cell"; @@ -53390,6 +53491,14 @@ }, /turf/open/floor/plasteel, /area/security/prison/safe) +"rrA" = ( +/obj/effect/turf_decal/tile/bar, +/obj/effect/turf_decal/tile/bar{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/floor/plasteel, +/area/crew_quarters/bar) "rua" = ( /obj/effect/turf_decal/tile/neutral{ dir = 8 @@ -53443,6 +53552,10 @@ }, /turf/open/floor/plasteel, /area/security/prison) +"rFc" = ( +/obj/structure/cable, +/turf/open/floor/plasteel/white, +/area/science/robotics/lab) "rFI" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel/white, @@ -53670,18 +53783,17 @@ /obj/machinery/atmospherics/pipe/simple/yellow/visible, /turf/open/floor/plating, /area/maintenance/aft) -"soQ" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +"sqe" = ( +/obj/machinery/door/firedoor, /obj/machinery/power/apc{ - areastring = "/area/vacant_room/commissary"; + areastring = "/area/medical/medbay/central"; dir = 4; - name = "Vacant Commissary APC"; - pixel_x = 24; - pixel_y = 2 + name = "Medbay APC"; + pixel_x = 24 }, /obj/structure/cable, -/turf/open/floor/plating, -/area/maintenance/port) +/turf/open/floor/plasteel/white, +/area/medical/medbay/central) "sqR" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 1 @@ -53706,7 +53818,6 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, -/obj/structure/cable, /turf/open/floor/plasteel/white/side{ dir = 9 }, @@ -53842,6 +53953,10 @@ /obj/machinery/navbeacon/wayfinding, /turf/open/floor/plating, /area/hallway/secondary/entry) +"sIY" = ( +/obj/structure/cable, +/turf/open/floor/plasteel, +/area/storage/primary) "sLv" = ( /obj/structure/closet, /obj/effect/spawner/lootdrop/maintenance, @@ -53868,6 +53983,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/structure/cable, /turf/open/floor/plating, /area/maintenance/port) "sSW" = ( @@ -54116,6 +54232,11 @@ /obj/machinery/atmospherics/components/unary/portables_connector/visible, /turf/open/floor/engine, /area/science/xenobiology) +"trR" = ( +/obj/machinery/door/firedoor, +/obj/structure/cable, +/turf/open/floor/plasteel/white, +/area/medical/sleeper) "tsw" = ( /obj/structure/table, /obj/item/storage/toolbox/emergency, @@ -54252,6 +54373,13 @@ /obj/effect/turf_decal/loading_area, /turf/open/floor/plasteel/showroomfloor, /area/crew_quarters/kitchen) +"tPs" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/plasteel, +/area/hallway/secondary/entry) "tPW" = ( /obj/machinery/door/poddoor/preopen{ id = "xenobio7"; @@ -54413,6 +54541,13 @@ /obj/structure/cable, /turf/open/floor/plating, /area/science/xenobiology) +"ulh" = ( +/obj/effect/turf_decal/tile/red{ + dir = 1 + }, +/obj/structure/cable, +/turf/open/floor/plasteel, +/area/hallway/primary/fore) "ulo" = ( /obj/effect/turf_decal/delivery, /obj/machinery/atmospherics/pipe/simple/general/visible{ @@ -54589,15 +54724,6 @@ /obj/item/stack/license_plates/empty/fifty, /turf/open/floor/plating, /area/security/prison) -"uIv" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ - dir = 1 - }, -/turf/open/floor/plasteel/white, -/area/science/research) "uJo" = ( /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, @@ -54735,6 +54861,14 @@ dir = 8 }, /area/science/research) +"vdH" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/public/glass{ + name = "Central Access" + }, +/obj/structure/cable, +/turf/open/floor/plasteel, +/area/hallway/primary/central) "vdT" = ( /obj/machinery/door/window/northleft{ dir = 4; @@ -54829,12 +54963,6 @@ /area/maintenance/starboard) "vsa" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/machinery/power/apc{ - areastring = "/area/security/detectives_office"; - dir = 8; - name = "Detective's Office APC"; - pixel_x = -25 - }, /obj/structure/disposalpipe/segment{ dir = 6 }, @@ -54955,6 +55083,12 @@ }, /turf/open/floor/plasteel, /area/science/mixing) +"vDJ" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/disposalpipe/segment, +/obj/structure/cable, +/turf/open/floor/plating, +/area/maintenance/fore) "vFD" = ( /obj/machinery/door/airlock/security{ name = "Permanent Cell 5" @@ -55032,6 +55166,16 @@ }, /turf/open/floor/plasteel/freezer, /area/security/prison/safe) +"vKX" = ( +/obj/machinery/power/apc{ + areastring = "/area/security/detectives_office"; + dir = 8; + name = "Detective's Office APC"; + pixel_x = -25 + }, +/obj/structure/cable, +/turf/open/floor/plasteel/grimy, +/area/security/detectives_office) "vLc" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/closed/wall/r_wall, @@ -55158,6 +55302,11 @@ /obj/structure/closet/secure_closet/personal/cabinet, /turf/open/floor/wood, /area/crew_quarters/dorms) +"wju" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/cable, +/turf/open/floor/plating, +/area/maintenance/aft) "wkE" = ( /obj/machinery/door/airlock/maintenance{ name = "Permabrig Maintenance"; @@ -55475,6 +55624,11 @@ /obj/structure/cable, /turf/open/floor/plasteel/white, /area/science/research) +"xah" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/cable, +/turf/open/floor/plasteel/white, +/area/medical/chemistry) "xaZ" = ( /obj/effect/decal/cleanable/cobweb, /obj/structure/sign/warning/securearea{ @@ -55496,6 +55650,10 @@ /obj/structure/sign/warning/electricshock, /turf/open/floor/plating, /area/science/xenobiology) +"xca" = ( +/obj/structure/cable, +/turf/open/floor/plasteel/white, +/area/medical/sleeper) "xeP" = ( /obj/effect/turf_decal/tile/purple{ dir = 1 @@ -55731,6 +55889,16 @@ /obj/effect/spawner/lootdrop/grille_or_trash, /turf/open/floor/plating, /area/maintenance/starboard/aft) +"xKf" = ( +/obj/machinery/power/apc{ + areastring = "/area/storage/emergency/port"; + dir = 1; + name = "Port Emergency Storage APC"; + pixel_y = 23 + }, +/obj/structure/cable, +/turf/open/floor/plating, +/area/storage/emergency/port) "xKm" = ( /obj/structure/bed, /turf/open/floor/plasteel, @@ -55780,6 +55948,13 @@ }, /turf/open/floor/plasteel/white, /area/medical/chemistry) +"xVy" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/cable, +/turf/open/floor/plasteel, +/area/hallway/primary/port) "xXe" = ( /obj/structure/closet/radiation, /turf/open/floor/plasteel/dark, @@ -68614,7 +68789,7 @@ aaf alU atJ amC -aKf +axk bEJ axb ayr @@ -68639,8 +68814,8 @@ ayl ayl aWc baG -ayl -aIK +itz +tPs ayl beM asE @@ -69133,7 +69308,7 @@ avq avq cwH avq -aAj +avq aBK aCL aEG @@ -69148,7 +69323,7 @@ aPx aQJ ayl czK -aUO +aIG aUy aWm aWf @@ -69668,7 +69843,7 @@ aWr aXZ aUQ czK -bbe +bjk beO beS bgj @@ -69925,7 +70100,7 @@ aXL aXZ aUO czK -bbe +bjk beO beR bgj @@ -70182,7 +70357,7 @@ aXL aXZ baJ czK -bbe +bjk beO beU bgk @@ -70418,7 +70593,7 @@ amC amC ayt alU -aAw +aol aBl aCZ aEJ @@ -70697,7 +70872,7 @@ aYd aZn aTt bbg -bdG +bdZ bdu bdT beO @@ -70956,7 +71131,7 @@ czK bcI aPz bdt -bdR +aWv aSg aYf bkD @@ -71192,7 +71367,7 @@ azq aAK aBv aDa -aAQ +mVj aAQ azF aIR @@ -71449,7 +71624,7 @@ azi aAx aBm aAQ -aAQ +mVj aAQ azF azF @@ -71466,7 +71641,7 @@ aWj aXP aZr baL -bbI +aSg bcK aPz bdt @@ -71706,7 +71881,7 @@ azF aAT aBw aDg -aAQ +mVj vyA aHz aIS @@ -71963,12 +72138,12 @@ azF aAS aFP aAQ -aAQ -aAQ -aAQ -aAQ +mVj +mVj +mVj +mVj aKm -aLE +aNl aNj aLE aPz @@ -71979,7 +72154,7 @@ aQM aQM aQM aQM -baM +aQM aQM bcL aQM @@ -73502,12 +73677,12 @@ avW amC ayx atO -aAL +asK aBQ aDb aDo aFY -aDo +sIY poM aKp aLE @@ -73764,7 +73939,7 @@ aBQ aDl bxk aFS -aDo +sIY aIX aBQ aLE @@ -74021,7 +74196,7 @@ aBQ aDk aDo aDo -aDo +sIY aIW aBQ aLE @@ -75319,7 +75494,7 @@ aQN aUv aWp aXA -aYX +izD aYX aYX bbs @@ -75578,7 +75753,7 @@ aUZ aXx aYU mSB -aYU +eMe bbr bcu bfe @@ -76092,7 +76267,7 @@ aWu aYa aZD aZD -hcE +aZD aZD aZD bff @@ -76339,13 +76514,13 @@ aaa aJd aLN aNl -aOl +qoQ aPH aRa aRa aTG aPG -aWw +aSX aYc aZF aZF @@ -76599,14 +76774,14 @@ aNl aOl aPF aQZ -aRa +mRq aTF aPG aSX aWC baS aZI -baS +pKc baS bdS bdU @@ -77119,7 +77294,7 @@ aRb aWx aXE baS -baS +hGn bbP baS bcE @@ -77130,7 +77305,7 @@ bgu bic bku bmh -bjr +nls aZE brM bts @@ -77366,7 +77541,7 @@ aBa aaa aJd aLN -aMS +xVy aOt aPK aPK @@ -77375,7 +77550,7 @@ aPK aPK bjk aXM -bfi +fkd cBi bbS bcS @@ -77623,14 +77798,14 @@ aBa aaf aJd aLN -aMS +xVy aOi tsw aPK aSl aTH aPK -aWz +bjk aWC gjl gjl @@ -77880,11 +78055,11 @@ aaa aaa aJd aLN -aMS -aOi -aLE +xVy +gGr +aNl aRc -aSm +cpF aTJ aPK cCl @@ -78141,12 +78316,12 @@ aMT aOi aPL aPK -aSm +xKf aTI aPK aWB akj -soQ +aRb sST bbU dfx @@ -78651,8 +78826,8 @@ ayG ayG ayG aLm -aMS -aOv +xVy +aOz aPQ aPQ aPQ @@ -79165,7 +79340,7 @@ aHh aIV ayG aLN -aMS +xVy aOx aRe dFs @@ -79433,7 +79608,7 @@ pNh avr avr bbT -bbT +gRI kRN tav aZH @@ -80479,7 +80654,7 @@ btz bwf vFS btz -btz +bBh bBh bCr bAK @@ -80689,7 +80864,7 @@ alq aot apc apS -aqT +apS apS apS apS @@ -80714,16 +80889,16 @@ aJq aJq aJq aJq -aJq -aJq -aJq -aJq -aJq -bHt -aJq -aLY +bBi +bBi +bBi +bBi +bBi +hVK +bBi +jEy beX -aJq +bBi bgm bjx bBi @@ -80737,7 +80912,7 @@ bBi muM bBi bAe -bBi +aJq bCq bCq bDt @@ -80949,7 +81124,7 @@ aph aph aph aph -jsv +apS aqR awe axy @@ -80971,7 +81146,7 @@ aLX aLX aLX aLX -aJq +bBi aYl aYl aYl @@ -80993,8 +81168,8 @@ aYl aKF oXL aJq -aJq bBi +aJq aJw aaa aaf @@ -81206,7 +81381,7 @@ air aqY arU apU -hhs +vDJ hhs nGv axy @@ -81250,8 +81425,8 @@ bqv adS aJw aJq -aJq -dPH +bBi +byU aJw aaa bEU @@ -81461,7 +81636,7 @@ aov cCi ata arR -ata +lmZ aph aph aph @@ -81507,8 +81682,8 @@ buK bqy aJw aJq -aJq bBi +aJq aJw aaf bEU @@ -81718,7 +81893,7 @@ aov aph arT ata -ata +lmZ jBV auh aph @@ -81764,7 +81939,7 @@ bmr bmr bmr byN -aJq +bBi bBj aJw aaa @@ -82021,8 +82196,8 @@ buM bwi bmr aMm -aJq bBi +aJq bCs bCs bEU @@ -82038,7 +82213,7 @@ bRn cce bNI bNI -bUz +bEP bVI bWG bXD @@ -82233,7 +82408,7 @@ ard gpE arX asl -ata +fLe dtc aph awe @@ -82278,8 +82453,8 @@ bsY bue bmr aMn -aJq bBi +aJq bCs bDv bEX @@ -82295,7 +82470,7 @@ apV bLC cCf bNI -bUz +bEP bVI bWB bWB @@ -82552,7 +82727,7 @@ apV xhV gWd bNI -bUz +bEP bVJ bWI bWI @@ -82792,8 +82967,8 @@ buN bwj bmr byP -aJq bBi +aJq bCs bDw bEZ @@ -82809,7 +82984,7 @@ bKx cjL gWd bNI -bUz +bEP bVJ bWH bXE @@ -83050,7 +83225,7 @@ bwl bxG byR bBi -bBi +aJq bCs bDz bFa @@ -83066,7 +83241,7 @@ apV cjL nxv bNI -bUz +bEP bVJ bOo bOD @@ -83261,7 +83436,7 @@ apd aob bLE arV -bLE +vKX pgP apd awe @@ -83306,7 +83481,7 @@ bmr bmr bmr byQ -aJq +bBi aJq bCs bDy @@ -83323,7 +83498,7 @@ bKA rKP bSv bNI -bUB +bEP bVJ bOl bOC @@ -83563,7 +83738,7 @@ aaa aaa aJn aXf -aJq +bBi byV bCs bAM @@ -83820,7 +83995,7 @@ aaa aaa aJn aXf -aJq +bBi byU bCs bAL @@ -84077,7 +84252,7 @@ aaf aaf aJn aXf -aJq +bBi aJq bCs bFa @@ -84334,7 +84509,7 @@ buP bwm bxH byS -aJq +bBi aMh bCs bCs @@ -84800,12 +84975,12 @@ anw anS aoy apj -anz -anz -anz -anz -anz -anz +oEV +oEV +oEV +oEV +oEV +oEV awk axB anz @@ -85054,7 +85229,7 @@ agj agj aiX anx -anz +oEV aoz apm aqd @@ -85311,7 +85486,7 @@ alz aml amT anw -anz +oEV aoz apl aqc @@ -85362,7 +85537,7 @@ buR bwo bxJ bwb -aJq +bBi bBr bCv bCv @@ -85568,7 +85743,7 @@ alB amn amV anw -anz +oEV aoz aod aqf @@ -85619,7 +85794,7 @@ aaf aaf aJn aJq -aJq +bBi bBu bCv bAT @@ -85876,7 +86051,7 @@ aaa aaa aJn aJq -aJq +bBi bBt bCv bDH @@ -86081,8 +86256,8 @@ akX alC alC amX -anw -anz +ulh +oEV aoB aod aqe @@ -86133,7 +86308,7 @@ aaa aaa aJn aJq -aJq +bBi aXf bCv bDK @@ -86390,7 +86565,7 @@ bsh bsh bqH aJq -aJq +bBi aXf bCv bDJ @@ -86647,7 +86822,7 @@ btd bwr bqH aMm -aJq +bBi bBv cBy bDM @@ -86904,7 +87079,7 @@ btc bwq bqH aJq -aJq +bBi aXf bCv bAU @@ -87161,7 +87336,7 @@ buW bwt bqH aLY -aLY +jEy bBx bCv apG @@ -87418,7 +87593,7 @@ buV bws bqH aJq -aJq +bBi byW bCv bAV @@ -87675,7 +87850,7 @@ buY buY bqH aJq -aJq +bBi aXf bCv bDP @@ -87932,11 +88107,11 @@ buX buX bqH aJq -aJq +bBi bBy bzs bDO -bFl +bDO bDO bHU bJs @@ -88136,9 +88311,9 @@ akw alb alG amr -amY -amY -ajp +qWw +hcu +oeS aoH cSA aqe @@ -88189,12 +88364,12 @@ buZ buZ bqH byN -aJq +bBi bBA bCz bDQ bFn -bDO +bAw bHX bJy bKE @@ -88446,12 +88621,12 @@ bqH bqH bqH aJq -bHt -aXg +hVK +aXf bzs bzs bFm -bDQ +ccM bHW cBD bKD @@ -88697,7 +88872,7 @@ bmE bmE bpn bqL -bsp +btO btO bva bwu @@ -88708,7 +88883,7 @@ bBB kLd bzs bFp -bDO +bAw bHX bJA bKG @@ -88943,18 +89118,18 @@ bBi jEy bBi bco -aJq +bBi beo -aJq -aJq -aJq -aJq -aJq -aJq -aJq -aJq -aLY -aJq +bBi +bBi +bBi +bBi +bBi +bBi +bBi +bBi +jEy +bBi bAk aJq aJq @@ -89166,10 +89341,10 @@ alH amr amY amY -ajp +oeS ajo aps -aqk +aqj arf tqd aHw @@ -89200,7 +89375,7 @@ aJq aLY aJq bcp -aJq +bBi beq aJq bgY @@ -89457,7 +89632,7 @@ aQg aJC aJC aHP -aHP +vdH aHP bfF bfF @@ -89680,7 +89855,7 @@ akA amr amY amY -ajp +oeS ajo apt aqj @@ -89714,7 +89889,7 @@ aQc baa aJC aYV -aYV +bez aYV bfF nQI @@ -89937,7 +90112,7 @@ ajo ajo ajo ajo -aoa +jsj ajo apt aql @@ -89971,7 +90146,7 @@ aQc aZZ aJC aYV -aYV +bez aYV bfF bgZ @@ -90192,7 +90367,7 @@ ahT ahT ahT ahT -alL +ahT ahT anb ahT @@ -90228,7 +90403,7 @@ aPY bac aJC aYV -aYV +bez aYV bfF bhc @@ -90485,7 +90660,7 @@ aQc bab aJC aYV -aYV +bez ber bfF bhb @@ -90742,7 +90917,7 @@ aQc aQc bbx aYV -aYV +bez aYV bfF bhd @@ -90999,7 +91174,7 @@ aQc aQc aQg aYV -aYV +bez bes bfF bfF @@ -91253,10 +91428,10 @@ aPY aUg bFC aRw -aQc -bbx -aYV -aYV +rrA +dmo +bez +bez bet bfH bhf @@ -91513,7 +91688,7 @@ aQc bad bby aYV -aYV +bez bet bfG bhe @@ -91525,15 +91700,15 @@ boe bli bpN bqX -bEe -btg -bDR -bDR -bDR -bDR +bHY +trR +xca +xca +xca +xca bzc -bDR -bDZ +xca +gnW bCK bFy bFF @@ -91770,7 +91945,7 @@ aXO aZb aJC aYV -aYV +bez bet bfG bhe @@ -92011,7 +92186,7 @@ aCu aaf alP aGH -aIc +avI aJC aKO aMw @@ -92027,7 +92202,7 @@ aQc bae aJC bcr -aYV +bez bet bfG bhe @@ -92541,7 +92716,7 @@ czP bag aJC aYV -aYV +bez bet bfJ bhh @@ -92798,7 +92973,7 @@ aQc bai aJC aYV -aYV +bez bet bfH ogj @@ -93052,10 +93227,10 @@ aac aQc aXk aQc -aQc +cfS aJC aYV -aYV +bez bev bfK bhi @@ -93312,7 +93487,7 @@ aYK aJI aJI bcs -aYV +bez aYV bfK bhk @@ -93569,7 +93744,7 @@ aYJ aJI bbz aYV -aYV +bez aYV bfK bhj @@ -93612,8 +93787,8 @@ bZM cbJ smN smN -ceC -cfX +smN +smN chk chl ciz @@ -93869,7 +94044,7 @@ bzs bzs bzs ccF -bDO +bAw ceE cfl cfZ @@ -94067,7 +94242,7 @@ alP alP alP aGH -aIh +avI aJI aKT aMD @@ -94083,7 +94258,7 @@ aVz baj bbz aYV -bdp +lWa aYV bfK bfK @@ -94095,13 +94270,13 @@ bfK bnF bqQ bsx -bhh -bfJ -bhh -bhh -bhh -bhh -bhh +bsx +cWI +bsx +bsx +bsx +bsx +bsx bzX bBm bIr @@ -94340,7 +94515,7 @@ aVz bak bbz aYV -bdp +lWa aYV bfL bhn @@ -94351,15 +94526,15 @@ bmR bfL bol bqQ -bsx +bhh bst -bfJ +sqe bhh bhh bwK bhh bhh -bhh +bsx btV bGU bGV @@ -94597,7 +94772,7 @@ cAg bak bbz aYV -bdp +lWa cBm bfL bhm @@ -94607,16 +94782,16 @@ bhm bkP bmV boc -bqW +bqQ +bhh +bua +bua +bua +bua +bua +bua +bhh bsx -bua -bua -bua -bua -bua -bua -bhh -bhh btV bIr bCR @@ -94648,7 +94823,7 @@ chm akD cju clf -cjr +qMk cmd cmZ cmd @@ -94854,7 +95029,7 @@ aVz tXW bbz aYV -bdp +lWa bdc bfL beY @@ -94873,7 +95048,7 @@ kMu uTM bua bBJ -bhh +bsx bBn bof bDF @@ -95130,7 +95305,7 @@ bvo bzl bua bzd -bhh +bsx btT bCU bCR @@ -95368,10 +95543,10 @@ aYN aJI bbz aYV -aYV +bez bey bfL -bhm +biB biz biz biz @@ -95387,7 +95562,7 @@ vhn bye bua bBL -bhh +bsx bBC bCV bDN @@ -95625,13 +95800,13 @@ aJI aJI aJI bcq -bcq +jLL bcq bfL bhp -biB -biB -biB +bhm +bhm +bhm bkU bmX bhh @@ -95670,7 +95845,7 @@ bzs bJs cdK ceH -cfn +fVu cfn cfn cgd @@ -95882,7 +96057,7 @@ aYP bal bam aYV -aYV +bez aYV bfL bhq @@ -96139,8 +96314,8 @@ aYO aRJ nCW aYV -aYV -aYV +bez +gRL bfL bfL bfL @@ -96182,9 +96357,9 @@ bZQ caP cbO ccJ -bLS +wju hJq -cfp +xah cfp cfp cge @@ -96396,7 +96571,7 @@ aRJ aRJ bbB aYV -aYV +bez aYV bfO bfS @@ -96418,7 +96593,7 @@ bBP bCZ bEk bFG -bCY +rqd bFP bBN bKQ @@ -96653,14 +96828,14 @@ aYQ cBg bam aYV -aYV -aYV -aYV +bez +bez +bez bhr biC bkc bfS -blo +cTO qsH boq mYY @@ -96678,7 +96853,7 @@ bCY bGZ bFE bBN -bKS +bKT bJs bNd bOs @@ -96910,7 +97085,7 @@ aYQ bam aYV aYV -aYV +bez aYV kjH bfS @@ -97167,8 +97342,8 @@ aYR ban aYV aYV -aYV bez +aYV bfP bfS bfS @@ -97685,7 +97860,7 @@ bcb bdl cTJ cHD -bgo +cTK cTK cTK blq @@ -98186,7 +98361,7 @@ aCt aCt aCt aCt -aRK +aCt aCt aCt aUx @@ -98196,7 +98371,7 @@ aZc aZc baT bcj -bez +aYV bfT cHF biG @@ -99981,7 +100156,7 @@ aHd aIx aJF aLh -aIt +fTq aNV aPd aIt @@ -100005,7 +100180,7 @@ blG biL cHV cIa -biL +rFc box buo bvc @@ -100490,7 +100665,7 @@ apE aBF aCH aED -aFy +ayd aGO aIB aJJ @@ -100519,7 +100694,7 @@ cHR bou bpT bqd -biL +rFc box btS bxd @@ -100776,7 +100951,7 @@ blM bou cHX cIc -biL +rFc buj btQ bve @@ -101033,7 +101208,7 @@ bou cHT bou cId -biL +rFc bsw btU bxe @@ -102288,7 +102463,7 @@ avN iBZ asB aCM -aEg +aEe aFw aHi aHi @@ -102831,7 +103006,7 @@ blI bnn dgS bpZ -uIv +bve bta lxd isc @@ -103088,7 +103263,7 @@ blK bnp bng boQ -brx +bxe bro gLd suU @@ -103345,7 +103520,7 @@ blJ bno boA bpZ -bqf +bxd brn gLd qea @@ -103602,7 +103777,7 @@ bka blZ bnk bpo -bqk +bvg brn gLd gwd @@ -104643,7 +104818,7 @@ rYJ rYJ bFW rYJ -qQC +rYJ dCN bLi bMz diff --git a/_maps/map_files/Deltastation/DeltaStation2.dmm b/_maps/map_files/Deltastation/DeltaStation2.dmm index 0f72002ad7f..ee6705d4d7e 100644 --- a/_maps/map_files/Deltastation/DeltaStation2.dmm +++ b/_maps/map_files/Deltastation/DeltaStation2.dmm @@ -91905,7 +91905,6 @@ "dpg" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/cable, -/obj/structure/cable, /turf/open/floor/plating, /area/medical/chemistry) "dph" = ( @@ -115153,7 +115152,6 @@ dir = 4 }, /obj/structure/cable, -/obj/structure/cable, /turf/open/floor/plasteel, /area/medical/surgery/room_b) "rOf" = ( @@ -116223,7 +116221,6 @@ "wZq" = ( /obj/effect/landmark/start/medical_doctor, /obj/structure/cable, -/obj/structure/cable, /turf/open/floor/plasteel/white, /area/medical/surgery/room_b) "xaf" = ( diff --git a/_maps/map_files/Donutstation/Donutstation.dmm b/_maps/map_files/Donutstation/Donutstation.dmm index 5b0050a85e3..f8ae940db42 100644 --- a/_maps/map_files/Donutstation/Donutstation.dmm +++ b/_maps/map_files/Donutstation/Donutstation.dmm @@ -32318,7 +32318,6 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/cable, -/obj/structure/cable, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -45955,13 +45954,6 @@ }, /turf/open/floor/plasteel/dark, /area/engine/engine_room/external) -"dpq" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden/layer3, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/structure/cable, -/obj/structure/cable, -/turf/open/floor/plating, -/area/maintenance/port) "dtB" = ( /obj/item/trash/can, /turf/open/floor/plating, @@ -73951,7 +73943,7 @@ bkk bqn aAJ bYr -dpq +ovO cbH aGE aRz diff --git a/_maps/map_files/Donutstation/Donutstation_LVL2.dmm b/_maps/map_files/Donutstation/Donutstation_LVL2.dmm index 1e92ad7c834..d2ab22496ab 100644 --- a/_maps/map_files/Donutstation/Donutstation_LVL2.dmm +++ b/_maps/map_files/Donutstation/Donutstation_LVL2.dmm @@ -4717,7 +4717,6 @@ /area/ai_monitored/turret_protected/ai) "kq" = ( /obj/structure/cable, -/obj/structure/cable, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 6 }, diff --git a/_maps/map_files/MetaStation/MetaStation.dmm b/_maps/map_files/MetaStation/MetaStation.dmm index 3361dc2bed3..7d123f7f74b 100644 --- a/_maps/map_files/MetaStation/MetaStation.dmm +++ b/_maps/map_files/MetaStation/MetaStation.dmm @@ -7758,6 +7758,9 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, /turf/open/floor/plasteel, /area/hallway/primary/port) "apB" = ( @@ -10018,11 +10021,10 @@ /turf/open/floor/plating, /area/maintenance/port/fore) "auJ" = ( -/obj/structure/grille, /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/structure/window/reinforced/tinted/fulltile, +/obj/structure/cable, /turf/open/floor/plating, /area/maintenance/port/fore) "auK" = ( @@ -10050,6 +10052,14 @@ /mob/living/simple_animal/hostile/retaliate/goose/vomit, /turf/open/floor/wood, /area/maintenance/port/aft) +"auT" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/central) "auU" = ( /obj/structure/disposalpipe/segment{ dir = 6 @@ -10428,6 +10438,7 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, +/obj/structure/disposalpipe/segment, /turf/open/floor/plasteel, /area/hallway/primary/port) "avI" = ( @@ -10476,7 +10487,13 @@ }, /area/maintenance/port/fore) "avN" = ( -/obj/item/hand_labeler_refill, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 1 + }, /turf/open/floor/plating, /area/maintenance/port/fore) "avO" = ( @@ -10496,11 +10513,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/obj/machinery/door/airlock/maintenance{ - req_one_access_txt = "12;50" - }, -/obj/structure/cable, -/turf/open/floor/plating, +/turf/closed/wall, /area/maintenance/port/fore) "avR" = ( /obj/structure/disposalpipe/sorting/mail/flip{ @@ -10510,9 +10523,6 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 9 }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, /obj/structure/cable, /turf/open/floor/plating, /area/maintenance/port/fore) @@ -10850,33 +10860,24 @@ /turf/open/floor/plating, /area/maintenance/port/fore) "awQ" = ( -/obj/effect/turf_decal/stripes/line, +/obj/machinery/door/airlock/maintenance{ + name = "Mining Dock Maintenance"; + req_access_txt = "48" + }, /obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plating, -/area/maintenance/port/fore) +/area/quartermaster/miningoffice) "awS" = ( /obj/structure/closet/crate, /obj/effect/spawner/lootdrop/maintenance/two, /turf/open/floor/plating, /area/maintenance/port/fore) -"awT" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/stripes/line, -/obj/structure/cable, -/turf/open/floor/plating, -/area/maintenance/port/fore) -"awU" = ( -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/turf/open/floor/plating, -/area/maintenance/port/fore) "awV" = ( -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/effect/spawner/lootdrop/maintenance, /turf/open/floor/plating, /area/maintenance/port/fore) "awW" = ( @@ -11410,29 +11411,33 @@ /turf/closed/wall, /area/quartermaster/miningoffice) "ayk" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Mining Dock Maintenance"; - req_access_txt = "48" +/obj/machinery/power/apc{ + name = "Mining APC"; + pixel_y = 3; + areastring = "/area/quartermaster/miningoffice"; + dir = 1; + pixel_x = -30 }, /obj/structure/cable, -/turf/open/floor/plating, -/area/maintenance/port/fore) +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel, +/area/quartermaster/miningoffice) "ayl" = ( -/turf/closed/wall, -/area/quartermaster/warehouse) +/obj/structure/closet/emcloset, +/obj/effect/turf_decal/trimline/brown/filled/line, +/obj/effect/turf_decal/trimline/brown/filled/line, +/turf/open/floor/plasteel, +/area/quartermaster/miningoffice) "aym" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Cargo Bay Warehouse Maintenance"; - req_one_access_txt = "31;48" - }, -/obj/structure/disposalpipe/segment, /obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, /turf/open/floor/plating, /area/maintenance/port/fore) "ayn" = ( -/obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/structure/cable, +/obj/structure/closet/emcloset, /turf/open/floor/plating, /area/maintenance/port/fore) "ayo" = ( @@ -11771,43 +11776,6 @@ /turf/open/floor/plating/airless, /area/space/nearstation) "azj" = ( -/obj/item/stack/ore/iron, -/obj/effect/turf_decal/stripes/line{ - dir = 9 - }, -/turf/open/floor/plasteel, -/area/quartermaster/miningoffice) -"azk" = ( -/obj/structure/closet/crate, -/obj/machinery/light/small{ - dir = 4 - }, -/obj/item/radio/intercom{ - dir = 4; - pixel_x = 27 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/turf/open/floor/plasteel, -/area/quartermaster/miningoffice) -"azl" = ( -/obj/structure/closet/emcloset, -/obj/machinery/status_display/supply{ - pixel_y = 32 - }, -/obj/effect/turf_decal/tile/brown{ - dir = 1 - }, -/obj/effect/turf_decal/tile/brown{ - dir = 4 - }, -/obj/effect/turf_decal/tile/brown{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/quartermaster/miningoffice) -"azm" = ( /obj/structure/closet/crate, /obj/item/flashlight{ pixel_x = 1; @@ -11825,60 +11793,59 @@ pixel_x = 3; pixel_y = -7 }, -/obj/effect/turf_decal/tile/brown{ - dir = 1 +/obj/effect/turf_decal/stripes/line{ + dir = 9 }, -/obj/effect/turf_decal/tile/brown{ +/obj/effect/turf_decal/trimline/brown/filled/line, +/obj/effect/turf_decal/trimline/brown/filled/line, +/turf/open/floor/plasteel, +/area/quartermaster/miningoffice) +"azk" = ( +/obj/structure/closet/crate, +/obj/machinery/light/small{ dir = 4 }, +/obj/item/radio/intercom{ + dir = 4; + pixel_x = 27 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/brown/filled/line, +/obj/effect/turf_decal/trimline/brown/filled/line, +/turf/open/floor/plasteel, +/area/quartermaster/miningoffice) +"azl" = ( +/obj/structure/closet/secure_closet/miner, +/obj/effect/turf_decal/trimline/brown/filled/line, +/obj/effect/turf_decal/trimline/brown/filled/line, +/turf/open/floor/plasteel, +/area/quartermaster/miningoffice) +"azm" = ( +/obj/structure/closet/secure_closet/miner, +/obj/item/clothing/suit/hooded/wintercoat/miner, +/obj/effect/turf_decal/trimline/brown/filled/line, +/obj/effect/turf_decal/trimline/brown/filled/line, /turf/open/floor/plasteel, /area/quartermaster/miningoffice) "azn" = ( -/obj/machinery/power/apc{ - areastring = "/area/quartermaster/miningoffice"; - dir = 1; - name = "Mining APC"; - pixel_y = 23 +/obj/structure/closet/secure_closet/miner, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 6 }, -/obj/machinery/light_switch{ - pixel_y = 38 +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 6 }, -/obj/structure/closet/wardrobe/miner, -/obj/effect/turf_decal/tile/brown{ - dir = 1 - }, -/obj/effect/turf_decal/tile/brown{ - dir = 4 - }, -/obj/structure/cable, -/turf/open/floor/plasteel, -/area/quartermaster/miningoffice) -"azo" = ( -/obj/effect/turf_decal/tile/brown{ - dir = 1 - }, -/obj/effect/turf_decal/tile/brown{ - dir = 4 - }, -/obj/structure/cable, /turf/open/floor/plasteel, /area/quartermaster/miningoffice) "azp" = ( -/obj/structure/rack, -/obj/item/storage/toolbox/emergency{ - pixel_x = 2; - pixel_y = -3 +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plating{ + icon_state = "platingdmg3" }, -/obj/item/storage/toolbox/emergency, -/obj/effect/turf_decal/tile/brown{ - dir = 1 - }, -/obj/effect/turf_decal/tile/brown, -/obj/effect/turf_decal/tile/brown{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/quartermaster/miningoffice) +/area/maintenance/port/fore) "azr" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -11891,36 +11858,26 @@ /turf/open/floor/plating, /area/maintenance/starboard/fore) "azs" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 +/obj/machinery/door/airlock/maintenance{ + name = "Mining Dock Maintenance"; + req_access_txt = "48" }, -/obj/structure/sink/kitchen{ - desc = "A sink used for washing one's hands and face. It looks rusty and home-made"; - name = "old sink"; - pixel_y = 28 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plasteel, -/area/quartermaster/warehouse) +/obj/machinery/door/firedoor, +/turf/open/floor/plating, +/area/quartermaster/miningoffice) "azt" = ( -/obj/machinery/airalarm{ - pixel_y = 28 +/obj/structure/disposalpipe/segment{ + dir = 6 }, +/turf/open/floor/plating, +/area/maintenance/port/fore) +"azu" = ( +/obj/structure/cable, /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/turf/open/floor/plasteel, -/area/quartermaster/warehouse) -"azu" = ( -/obj/structure/disposalpipe/segment{ - dir = 9 - }, -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/turf/open/floor/plasteel, -/area/quartermaster/warehouse) +/turf/open/floor/plating, +/area/maintenance/port/fore) "azv" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 4 @@ -12389,95 +12346,64 @@ /obj/effect/mapping_helpers/airlock/cyclelink_helper{ dir = 8 }, +/obj/machinery/door/firedoor, /turf/open/floor/plasteel, /area/quartermaster/miningoffice) "aAE" = ( -/obj/effect/turf_decal/tile/brown{ - dir = 1 - }, -/obj/effect/turf_decal/tile/brown{ - dir = 8 +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 4 }, /turf/open/floor/plasteel, /area/quartermaster/miningoffice) "aAF" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ - dir = 4 - }, +/obj/effect/landmark/start/shaft_miner, /turf/open/floor/plasteel, /area/quartermaster/miningoffice) "aAG" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 10 +/obj/machinery/light_switch{ + pixel_y = 38; + pixel_x = 28 }, /turf/open/floor/plasteel, /area/quartermaster/miningoffice) -"aAH" = ( +"aAI" = ( +/obj/machinery/holopad, +/obj/structure/cable, +/turf/open/floor/plasteel, +/area/quartermaster/miningoffice) +"aAJ" = ( +/obj/structure/cable, +/turf/open/floor/plasteel, +/area/quartermaster/miningoffice) +"aAK" = ( /obj/effect/landmark/start/shaft_miner, /obj/structure/cable, /turf/open/floor/plasteel, /area/quartermaster/miningoffice) -"aAI" = ( -/obj/machinery/button/door{ - id = "qm_mine_warehouse"; - name = "Warehouse Door Control"; - pixel_x = 24; - pixel_y = 28; - req_access_txt = "48" - }, -/obj/effect/turf_decal/tile/brown, -/obj/effect/turf_decal/tile/brown{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/quartermaster/miningoffice) -"aAJ" = ( -/obj/machinery/door/poddoor/shutters{ - id = "qm_mine_warehouse"; - name = "Warehouse Shutters" - }, -/obj/effect/turf_decal/delivery, -/turf/open/floor/plasteel, -/area/quartermaster/miningoffice) -"aAK" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/button/door{ - id = "qm_mine_warehouse"; - name = "Warehouse Door Control"; - pixel_x = -24; - pixel_y = 28; - req_access_txt = "48" - }, -/obj/effect/turf_decal/loading_area{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plasteel, -/area/quartermaster/warehouse) "aAL" = ( -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plasteel, -/area/quartermaster/warehouse) -"aAM" = ( -/obj/structure/closet/crate, -/obj/effect/spawner/lootdrop/maintenance/three, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plasteel, -/area/quartermaster/warehouse) -"aAN" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/turf/open/floor/plasteel, -/area/quartermaster/warehouse) -"aAO" = ( -/obj/structure/closet/crate, -/obj/structure/extinguisher_cabinet{ - pixel_x = 27 +/obj/machinery/door/airlock/maintenance{ + name = "Mining Dock Maintenance"; + req_access_txt = "48" + }, +/obj/structure/cable, +/obj/machinery/door/firedoor, +/turf/open/floor/plating, +/area/quartermaster/miningoffice) +"aAN" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plating, +/area/maintenance/port/fore) +"aAO" = ( +/obj/machinery/mineral/equipment_vendor, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 10 + }, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 10 }, -/obj/effect/spawner/lootdrop/maintenance/three, -/obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel, -/area/quartermaster/warehouse) +/area/quartermaster/miningoffice) "aAP" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 6 @@ -12931,6 +12857,19 @@ /obj/effect/turf_decal/stripes/line{ dir = 10 }, +/obj/structure/rack, +/obj/item/shovel{ + pixel_x = -5 + }, +/obj/item/pickaxe{ + pixel_x = 5 + }, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 1 + }, /turf/open/floor/plasteel, /area/quartermaster/miningoffice) "aBT" = ( @@ -12940,6 +12879,12 @@ dir = 8 }, /obj/effect/turf_decal/stripes/line, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 1 + }, /turf/open/floor/plasteel, /area/quartermaster/miningoffice) "aBU" = ( @@ -12947,73 +12892,54 @@ /turf/closed/wall, /area/quartermaster/miningoffice) "aBV" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/machinery/holopad, -/turf/open/floor/plasteel, -/area/quartermaster/miningoffice) -"aBW" = ( -/obj/structure/cable, -/turf/open/floor/plasteel, -/area/quartermaster/miningoffice) -"aBX" = ( -/obj/item/radio/intercom{ - dir = 4; - pixel_x = 27 +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 }, -/obj/machinery/camera{ - c_tag = "Mining Office"; - dir = 8 - }, -/obj/machinery/mineral/equipment_vendor, -/obj/effect/turf_decal/tile/brown, -/obj/effect/turf_decal/tile/brown{ +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, /turf/open/floor/plasteel, /area/quartermaster/miningoffice) +"aBW" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/quartermaster/miningoffice) +"aBX" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on, +/turf/open/floor/plasteel, +/area/quartermaster/miningoffice) "aBY" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ +/obj/structure/table, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 9 + }, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 9 + }, +/obj/structure/extinguisher_cabinet{ + pixel_x = 27 + }, +/turf/open/floor/plasteel, +/area/quartermaster/miningoffice) +"aBZ" = ( +/obj/item/hand_labeler_refill, +/obj/structure/disposalpipe/segment{ dir = 6 }, -/obj/item/storage/box/donkpockets, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plasteel, -/area/quartermaster/warehouse) -"aBZ" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plasteel, -/area/quartermaster/warehouse) -"aCa" = ( -/obj/structure/closet/crate/freezer, -/obj/effect/spawner/lootdrop/maintenance/three, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plasteel, -/area/quartermaster/warehouse) -"aCb" = ( -/obj/structure/closet/crate, -/obj/item/stack/ore/glass, -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/turf/open/floor/plasteel, -/area/quartermaster/warehouse) -"aCc" = ( /obj/structure/rack, -/obj/item/electronics/apc, -/obj/item/stock_parts/cell{ - maxcharge = 2000 +/turf/open/floor/plating, +/area/maintenance/port/fore) +"aCc" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 }, -/obj/machinery/firealarm{ - dir = 8; - pixel_x = 24 +/turf/open/floor/plating{ + icon_state = "platingdmg3" }, -/obj/effect/spawner/lootdrop/maintenance, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plasteel, -/area/quartermaster/warehouse) +/area/maintenance/port/fore) "aCd" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/effect/turf_decal/bot_white/right, @@ -13399,87 +13325,71 @@ /turf/closed/wall, /area/construction/mining/aux_base) "aDh" = ( -/obj/machinery/firealarm{ - dir = 4; - pixel_x = -24 - }, /obj/machinery/light{ dir = 8 }, -/obj/machinery/computer/shuttle/mining{ - dir = 4; - req_access = null - }, -/obj/effect/turf_decal/tile/brown{ - dir = 1 - }, -/obj/effect/turf_decal/tile/brown{ - dir = 8 - }, -/obj/effect/turf_decal/tile/brown{ - dir = 4 +/obj/machinery/status_display/evac{ + pixel_x = -32 }, /turf/open/floor/plasteel, /area/quartermaster/miningoffice) "aDi" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/effect/landmark/start/shaft_miner, +/obj/structure/closet/crate, +/obj/item/flashlight{ + pixel_x = 1; + pixel_y = 5 + }, +/obj/item/flashlight{ + pixel_x = 1; + pixel_y = 5 + }, +/obj/item/stock_parts/cell/high{ + charge = 100; + maxcharge = 15000 + }, +/obj/item/stack/cable_coil{ + pixel_x = 3; + pixel_y = -7 + }, +/obj/machinery/requests_console{ + department = "Mining"; + pixel_y = -30 + }, /turf/open/floor/plasteel, /area/quartermaster/miningoffice) "aDj" = ( -/obj/structure/closet/secure_closet/miner, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel, +/area/quartermaster/miningoffice) +"aDk" = ( +/obj/structure/table, +/obj/item/storage/toolbox/emergency, +/obj/effect/turf_decal/trimline/brown/filled/corner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/brown/filled/corner{ + dir = 1 + }, /obj/machinery/airalarm{ dir = 8; pixel_x = 24 }, -/obj/effect/turf_decal/tile/brown, -/obj/effect/turf_decal/tile/brown{ - dir = 4 - }, /turf/open/floor/plasteel, /area/quartermaster/miningoffice) -"aDk" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plasteel, -/area/quartermaster/warehouse) "aDl" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 6 - }, -/obj/structure/closet/crate, -/obj/effect/spawner/lootdrop/maintenance/three, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plasteel, -/area/quartermaster/warehouse) +/obj/structure/disposalpipe/segment, +/turf/closed/wall, +/area/maintenance/port/fore) "aDm" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/obj/effect/landmark/start/cargo_technician, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plasteel, -/area/quartermaster/warehouse) +/obj/structure/disposalpipe/segment, +/obj/structure/safe/floor, +/turf/open/floor/plating, +/area/maintenance/port/fore) "aDn" = ( -/obj/item/stack/sheet/cardboard, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/turf/open/floor/plasteel, -/area/quartermaster/warehouse) -"aDo" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ - dir = 8 - }, -/obj/structure/light_construct/small{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plasteel, -/area/quartermaster/warehouse) +/obj/structure/disposalpipe/segment, +/obj/structure/grille, +/turf/open/floor/plating, +/area/maintenance/port/fore) "aDp" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 5 @@ -13975,107 +13885,43 @@ /turf/open/floor/engine, /area/engine/engineering) "aEt" = ( -/obj/structure/table, -/obj/machinery/microwave{ - pixel_x = -3; - pixel_y = 6 +/obj/machinery/firealarm{ + pixel_y = 1; + pixel_x = 30 }, -/obj/structure/disposalpipe/segment{ - dir = 6 - }, -/obj/machinery/light_switch{ - pixel_y = 28 - }, -/obj/effect/decal/cleanable/dirt, -/turf/open/floor/plasteel, -/area/quartermaster/warehouse) -"aEv" = ( -/obj/machinery/computer/security/mining{ +/obj/machinery/light{ dir = 4 }, -/obj/effect/turf_decal/tile/brown, -/obj/effect/turf_decal/tile/brown{ - dir = 8 - }, -/obj/effect/turf_decal/tile/brown{ - dir = 1 - }, /turf/open/floor/plasteel, /area/quartermaster/miningoffice) +"aEv" = ( +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/turf/closed/wall, +/area/maintenance/port/fore) "aEw" = ( -/obj/structure/chair/office{ +/obj/effect/landmark/start/shaft_miner, +/obj/machinery/camera{ + c_tag = "Mining Office"; dir = 8 }, -/obj/effect/landmark/start/shaft_miner, /turf/open/floor/plasteel, /area/quartermaster/miningoffice) "aEx" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on{ - dir = 4 +/obj/effect/turf_decal/stripes/line{ + dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/open/floor/plasteel, -/area/quartermaster/miningoffice) -"aEy" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 10 - }, -/obj/structure/cable, /turf/open/floor/plasteel, /area/quartermaster/miningoffice) "aEz" = ( -/obj/structure/closet/secure_closet/miner, -/obj/structure/extinguisher_cabinet{ +/obj/item/radio/intercom{ + dir = 4; pixel_x = 27 }, -/obj/item/clothing/suit/hooded/wintercoat/miner, -/obj/effect/turf_decal/tile/brown, -/obj/effect/turf_decal/tile/brown{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel, /area/quartermaster/miningoffice) -"aEA" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/effect/turf_decal/loading_area{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/turf/open/floor/plasteel, -/area/quartermaster/warehouse) -"aEB" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/machinery/button/door{ - id = "qm_warehouse"; - name = "Warehouse Door Control"; - pixel_y = -24; - req_access_txt = "31" - }, -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/turf/open/floor/plasteel, -/area/quartermaster/warehouse) -"aED" = ( -/obj/structure/closet/crate/internals, -/obj/effect/spawner/lootdrop/maintenance/three, -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/turf/open/floor/plasteel, -/area/quartermaster/warehouse) -"aEE" = ( -/obj/machinery/power/apc{ - areastring = "/area/quartermaster/warehouse"; - dir = 4; - name = "Warehouse APC"; - pixel_x = 24 - }, -/obj/effect/landmark/blobstart, -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/turf/open/floor/plasteel, -/area/quartermaster/warehouse) "aEF" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/atmospherics/pipe/simple/supply/hidden, @@ -14446,94 +14292,82 @@ /turf/open/floor/plasteel/cult, /area/library) "aFF" = ( -/obj/structure/table, -/obj/item/folder/yellow, -/obj/item/pen, -/obj/machinery/requests_console{ - department = "Mining"; - pixel_y = -30 +/obj/machinery/computer/shuttle/mining{ + dir = 1; + req_access = null }, -/obj/effect/turf_decal/tile/brown{ +/obj/effect/turf_decal/trimline/brown/filled/line{ dir = 1 }, -/obj/effect/turf_decal/tile/brown, -/obj/effect/turf_decal/tile/brown{ - dir = 8 +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 1 }, /turf/open/floor/plasteel, /area/quartermaster/miningoffice) "aFG" = ( -/obj/structure/table, -/obj/item/paper_bin{ - pixel_x = -3; - pixel_y = 7 +/obj/machinery/computer/security/mining{ + dir = 1 }, -/obj/effect/turf_decal/tile/brown, -/obj/effect/turf_decal/tile/brown{ - dir = 8 +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 1 }, /turf/open/floor/plasteel, /area/quartermaster/miningoffice) "aFH" = ( -/obj/structure/rack, -/obj/item/pickaxe{ - pixel_x = 5 - }, -/obj/item/shovel{ - pixel_x = -5 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/effect/turf_decal/tile/brown, -/obj/effect/turf_decal/tile/brown{ - dir = 8 +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 }, /turf/open/floor/plasteel, /area/quartermaster/miningoffice) "aFI" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/effect/turf_decal/tile/brown, -/obj/effect/turf_decal/tile/brown{ - dir = 8 +/obj/machinery/door/airlock/mining{ + name = "Mining Office"; + req_access_txt = "48" }, /obj/structure/cable, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel, /area/quartermaster/miningoffice) "aFJ" = ( -/obj/structure/closet/secure_closet/miner, -/obj/effect/turf_decal/tile/brown, -/obj/effect/turf_decal/tile/brown{ - dir = 4 - }, -/obj/effect/turf_decal/tile/brown{ - dir = 8 +/obj/machinery/door/airlock/mining{ + name = "Mining Office"; + req_access_txt = "48" }, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel, /area/quartermaster/miningoffice) "aFK" = ( -/obj/machinery/door/poddoor/shutters{ - id = "qm_warehouse"; - name = "Warehouse Shutters" +/obj/machinery/computer/security/mining{ + dir = 4 + }, +/obj/machinery/light{ + dir = 1 + }, +/obj/item/radio/intercom{ + pixel_y = -12; + dir = 4; + pixel_x = -26 + }, +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/delivery, -/obj/structure/cable, /turf/open/floor/plasteel, -/area/quartermaster/warehouse) +/area/security/checkpoint/supply) "aFL" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/closed/wall, -/area/quartermaster/warehouse) -"aFM" = ( -/obj/machinery/door/airlock/maintenance{ - req_one_access_txt = "12;63;48;50" +/obj/structure/chair/office, +/obj/machinery/requests_console{ + department = "Security"; + departmentType = 5; + pixel_y = 30 }, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/effect/mapping_helpers/airlock/cyclelink_helper, -/obj/structure/cable, -/turf/open/floor/plating, -/area/maintenance/port/fore) +/obj/effect/landmark/start/depsec/supply, +/turf/open/floor/plasteel, +/area/security/checkpoint/supply) "aFN" = ( /turf/closed/wall, /area/construction/storage_wing) @@ -14557,38 +14391,33 @@ dir = 8 }, /obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 5 + }, /turf/open/floor/plasteel/dark, /area/construction/storage_wing) "aFV" = ( -/obj/machinery/firealarm{ - dir = 4; - pixel_x = -26 - }, -/obj/machinery/camera{ - c_tag = "Storage Wing - Security Access Door"; - dir = 4 - }, -/obj/machinery/light/small{ - dir = 8 - }, /obj/structure/cable, -/turf/open/floor/plasteel/dark, -/area/hallway/primary/fore) +/obj/structure/flora/stump, +/turf/open/floor/plating, +/area/maintenance/port/fore) "aFW" = ( /obj/structure/cable, -/turf/open/floor/plasteel/dark, -/area/hallway/primary/fore) -"aFX" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on{ - dir = 4 - }, /obj/structure/cable, -/turf/open/floor/plasteel/dark, -/area/hallway/primary/fore) -"aFY" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plating, +/area/maintenance/port/fore) +"aFX" = ( +/obj/structure/table, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 9 }, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 9 + }, +/turf/open/floor/plasteel, +/area/quartermaster/miningoffice) +"aFY" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/security{ name = "Security-Storage Backroom"; @@ -14598,9 +14427,6 @@ /turf/open/floor/plasteel/dark, /area/hallway/primary/fore) "aFZ" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, /obj/effect/turf_decal/tile/red{ dir = 8 }, @@ -14608,9 +14434,6 @@ /turf/open/floor/plasteel, /area/hallway/primary/fore) "aGb" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, /obj/structure/extinguisher_cabinet{ pixel_y = -30 }, @@ -14621,9 +14444,6 @@ /turf/open/floor/plasteel, /area/hallway/primary/fore) "aGd" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, /obj/machinery/firealarm{ dir = 1; pixel_y = -24 @@ -14635,9 +14455,6 @@ /turf/open/floor/plasteel, /area/hallway/primary/fore) "aGf" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, /obj/machinery/power/apc/highcap/five_k{ areastring = "/area/hallway/primary/fore"; name = "Fore Primary Hallway APC"; @@ -14651,34 +14468,41 @@ /turf/open/floor/plasteel, /area/hallway/primary/fore) "aGg" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, /obj/effect/turf_decal/tile/red{ dir = 8 }, /turf/open/floor/plasteel, /area/hallway/primary/fore) "aGh" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, /obj/item/radio/intercom{ pixel_y = -26 }, /obj/effect/turf_decal/tile/red{ dir = 8 }, +/obj/structure/disposaloutlet{ + dir = 4; + name = "Cargo Deliveries" + }, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/brown/warning{ + dir = 9 + }, +/obj/effect/turf_decal/trimline/brown/warning{ + dir = 9 + }, /turf/open/floor/plasteel, /area/hallway/primary/fore) "aGj" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/effect/turf_decal/tile/red{ dir = 8 }, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, /turf/open/floor/plasteel, /area/hallway/primary/fore) "aGk" = ( @@ -14689,10 +14513,10 @@ /turf/open/floor/plasteel, /area/hallway/primary/fore) "aGl" = ( -/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ - dir = 1 - }, /obj/effect/turf_decal/tile/red, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 6 + }, /turf/open/floor/plasteel, /area/hallway/primary/fore) "aGm" = ( @@ -15067,192 +14891,130 @@ /turf/open/floor/plasteel/dark, /area/engine/engineering) "aHc" = ( -/obj/effect/spawner/structure/window, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/open/floor/plating, -/area/quartermaster/miningoffice) -"aHd" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/structure/disposalpipe/segment, -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/mining{ - name = "Mining Office"; - req_access_txt = "48" - }, -/obj/structure/cable, -/turf/open/floor/plasteel, -/area/quartermaster/miningoffice) -"aHe" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/effect/turf_decal/stripes/line{ - dir = 9 - }, -/obj/structure/cable, -/turf/open/floor/plasteel, -/area/quartermaster/storage) -"aHf" = ( -/obj/machinery/button/door{ - id = "qm_warehouse"; - name = "Warehouse Door Control"; - pixel_y = 24; - req_access_txt = "31" - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 5 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/turf/open/floor/plasteel, -/area/quartermaster/storage) -"aHg" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ +/obj/structure/filingcabinet, +/obj/effect/turf_decal/trimline/red/filled/line{ dir = 10 }, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, +/obj/structure/disposalpipe/segment, /turf/open/floor/plasteel, -/area/quartermaster/storage) -"aHh" = ( -/obj/machinery/firealarm{ - pixel_y = 27 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/turf/open/floor/plasteel, -/area/quartermaster/storage) -"aHi" = ( -/obj/machinery/light_switch{ - pixel_y = 28 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 5 - }, -/turf/open/floor/plasteel, -/area/quartermaster/storage) -"aHj" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/mining{ - name = "Cargo Bay"; - req_one_access_txt = "31;48" - }, -/obj/effect/turf_decal/delivery, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ +/area/security/checkpoint/supply) +"aHe" = ( +/obj/machinery/computer/secure_data{ dir = 4 }, +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 4 + }, +/obj/structure/cable, /turf/open/floor/plasteel, -/area/construction/storage_wing) +/area/security/checkpoint/supply) +"aHf" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on, +/turf/open/floor/plasteel, +/area/security/checkpoint/supply) +"aHg" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel, +/area/security/checkpoint/supply) +"aHh" = ( +/obj/machinery/power/apc{ + name = "Security Post - Cargo Bay APC"; + pixel_y = 5; + areastring = "/area/security/checkpoint/supply"; + dir = 1; + pixel_x = 27 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_pump/on, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel, +/area/security/checkpoint/supply) +"aHj" = ( +/obj/structure/closet/secure_closet/security/cargo, +/obj/machinery/airalarm{ + pixel_y = 23 + }, +/obj/effect/turf_decal/trimline/red/filled/line, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel, +/area/security/checkpoint/supply) "aHk" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plating, +/area/maintenance/port/fore) +"aHl" = ( +/obj/effect/spawner/lootdrop/maintenance, +/obj/structure/closet, +/turf/open/floor/plating, +/area/maintenance/port/fore) +"aHm" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/turf/open/floor/plating, +/area/maintenance/port/fore) +"aHn" = ( +/obj/effect/spawner/lootdrop/maintenance, +/obj/structure/rack, +/turf/open/floor/plating, +/area/maintenance/port/fore) +"aHp" = ( +/obj/structure/cable, /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 8 }, -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/stripes/line{ - dir = 9 - }, -/obj/structure/cable, -/turf/open/floor/plasteel, -/area/construction/storage_wing) -"aHl" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/machinery/light/small{ - dir = 1 - }, -/obj/structure/sign/warning/securearea{ - pixel_y = 30 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 5 - }, -/turf/open/floor/plasteel, -/area/construction/storage_wing) -"aHm" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/mining{ - name = "Cargo Bay"; - req_one_access_txt = "31;48" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/effect/turf_decal/delivery, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/construction/storage_wing) -"aHn" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/construction/storage_wing) -"aHo" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/effect/turf_decal/tile/brown{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/construction/storage_wing) -"aHp" = ( -/obj/machinery/atmospherics/pipe/manifold/supply/hidden, -/obj/effect/turf_decal/tile/brown{ - dir = 8 - }, +/obj/item/kirbyplants/random, /turf/open/floor/plasteel, /area/construction/storage_wing) "aHq" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/effect/turf_decal/tile/brown{ - dir = 8 - }, -/obj/structure/cable, /turf/open/floor/plasteel, /area/construction/storage_wing) "aHs" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on{ - dir = 8 - }, -/obj/effect/turf_decal/tile/brown{ - dir = 8 - }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel, /area/construction/storage_wing) "aHt" = ( -/obj/machinery/vending/cigarette, -/obj/machinery/newscaster{ - pixel_y = 32 - }, -/obj/machinery/airalarm{ - dir = 8; - pixel_x = 24 - }, +/obj/structure/cable, /turf/open/floor/plasteel, /area/construction/storage_wing) "aHu" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on, +/obj/effect/spawner/structure/window/reinforced, /obj/structure/cable, -/turf/open/floor/plasteel/dark, -/area/hallway/primary/fore) +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plating, +/area/construction/storage_wing) "aHv" = ( -/obj/structure/chair/office, -/turf/open/floor/plasteel/dark, -/area/hallway/primary/fore) -"aHw" = ( -/obj/structure/table, -/obj/machinery/recharger, +/obj/effect/spawner/structure/window/reinforced, /obj/structure/cable, -/turf/open/floor/plasteel/dark, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 10 + }, +/turf/open/floor/plating, +/area/construction/storage_wing) +"aHw" = ( +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/brown/warning{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/brown/warning{ + dir = 1 + }, +/turf/open/floor/plasteel, /area/hallway/primary/fore) "aHx" = ( /turf/closed/wall/r_wall, @@ -15267,6 +15029,7 @@ /obj/effect/turf_decal/tile/red{ dir = 8 }, +/obj/structure/disposalpipe/segment, /turf/open/floor/plasteel, /area/hallway/primary/fore) "aHA" = ( @@ -15492,11 +15255,6 @@ /turf/open/floor/plating, /area/quartermaster/storage) "aIh" = ( -/obj/item/radio/intercom{ - dir = 4; - pixel_x = -28; - pixel_y = 23 - }, /obj/machinery/status_display/supply{ pixel_y = 32 }, @@ -15504,165 +15262,110 @@ dir = 5; id = "QMLoad2" }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, /turf/open/floor/plating, /area/quartermaster/storage) "aIi" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/effect/turf_decal/loading_area{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/quartermaster/storage) -"aIj" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 5 - }, -/obj/structure/cable, -/turf/open/floor/plasteel, -/area/quartermaster/storage) -"aIk" = ( -/obj/structure/sign/map/left{ - desc = "A framed picture of the station. Clockwise from security at the top (red), you see engineering (yellow), science (purple), escape (red and white), medbay (green), arrivals (blue and white), and finally cargo (brown)."; - icon_state = "map-left-MS"; - pixel_y = 32 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/structure/cable, -/turf/open/floor/plasteel, -/area/quartermaster/storage) -"aIl" = ( -/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ - dir = 1 +/obj/item/radio/intercom{ + pixel_y = 27; + dir = 4; + pixel_x = 1 }, /obj/machinery/camera{ c_tag = "Cargo Bay - Fore" }, -/obj/structure/sign/map/right{ - desc = "A framed picture of the station. Clockwise from security at the top (red), you see engineering (yellow), science (purple), escape (red and white), medbay (green), arrivals (blue and white), and finally cargo (brown)."; - icon_state = "map-right-MS"; - pixel_y = 32 - }, -/obj/effect/turf_decal/stripes/corner{ - dir = 4 - }, -/obj/structure/cable, -/turf/open/floor/plasteel, -/area/quartermaster/storage) -"aIm" = ( -/obj/machinery/atmospherics/pipe/manifold/supply/hidden, -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/obj/effect/turf_decal/stripes/corner{ +/obj/machinery/light{ dir = 1 }, +/turf/open/floor/plasteel, +/area/quartermaster/storage) +"aIj" = ( /obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel, +/area/quartermaster/storage) +"aIk" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel, /area/quartermaster/storage) "aIn" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 +/obj/structure/table/reinforced, +/obj/machinery/recharger{ + pixel_y = 4 }, -/obj/structure/disposalpipe/segment{ - dir = 10 +/obj/item/radio/off{ + pixel_y = -3; + pixel_x = -11 }, -/obj/structure/cable, -/turf/open/floor/plasteel, -/area/quartermaster/storage) -"aIo" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/structure/disposalpipe/segment{ - dir = 6 - }, -/obj/effect/turf_decal/stripes/corner, -/obj/structure/cable, -/turf/open/floor/plasteel, -/area/quartermaster/storage) -"aIp" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line, -/obj/structure/cable, -/turf/open/floor/plasteel, -/area/quartermaster/storage) -"aIq" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 6 - }, -/obj/structure/cable, -/turf/open/floor/plasteel, -/area/quartermaster/storage) -"aIr" = ( -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/door/airlock/mining{ - name = "Cargo Bay"; - req_one_access_txt = "31;48" - }, -/obj/effect/turf_decal/delivery, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/construction/storage_wing) -"aIs" = ( -/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 9 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 10 - }, -/obj/structure/cable, -/turf/open/floor/plasteel, -/area/construction/storage_wing) -"aIt" = ( -/obj/machinery/camera{ - c_tag = "Cargo Bay - Storage Wing Entrance"; +/obj/effect/turf_decal/trimline/red/filled/line{ dir = 1 }, -/obj/effect/turf_decal/stripes/line{ - dir = 6 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel, +/area/security/checkpoint/supply) +"aIo" = ( +/obj/structure/table/reinforced, +/obj/item/paper_bin{ + pixel_x = 1; + pixel_y = 9 + }, +/obj/item/pen{ + pixel_x = 1; + pixel_y = 9 + }, +/obj/item/book/manual/wiki/security_space_law, +/obj/machinery/camera{ + c_tag = "Security Post - Cargo"; + dir = 1 + }, +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 5 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel, +/area/security/checkpoint/supply) +"aIp" = ( +/obj/structure/reagent_dispensers/peppertank{ + pixel_x = 30 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel, +/area/security/checkpoint/supply) +"aIr" = ( +/obj/effect/turf_decal/tile/red{ + dir = 8 + }, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/brown/warning{ + dir = 5 + }, +/obj/effect/turf_decal/trimline/brown/warning{ + dir = 5 }, /turf/open/floor/plasteel, -/area/construction/storage_wing) -"aIu" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ - dir = 4 - }, -/obj/machinery/power/apc{ - areastring = "/area/construction/storage_wing"; - name = "Storage Wing APC"; - pixel_y = -23 - }, -/obj/effect/turf_decal/tile/brown{ - dir = 4 - }, +/area/hallway/primary/fore) +"aIs" = ( /obj/structure/cable, -/turf/open/floor/plasteel, -/area/construction/storage_wing) +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 5 + }, +/turf/open/floor/plating, +/area/maintenance/port/fore) +"aIu" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plating, +/area/maintenance/port/fore) "aIv" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/cable, @@ -15671,108 +15374,83 @@ }, /area/maintenance/starboard/fore) "aIw" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/obj/effect/turf_decal/tile/brown{ - dir = 4 - }, /obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 9 + }, /turf/open/floor/plasteel, /area/construction/storage_wing) "aIx" = ( -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, -/obj/item/radio/intercom{ - pixel_y = -26 +/obj/structure/cable, +/obj/machinery/power/apc{ + areastring = "/area/construction/storage_wing"; + name = "Storage Wing APC"; + pixel_y = -23 }, -/obj/machinery/camera{ - c_tag = "Storage Wing"; - dir = 1 - }, -/obj/machinery/light, -/obj/effect/landmark/event_spawn, -/obj/effect/turf_decal/tile/brown{ +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 4 }, -/obj/structure/cable, /turf/open/floor/plasteel, /area/construction/storage_wing) "aIz" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ +/obj/machinery/light{ dir = 4 }, -/obj/machinery/navbeacon{ - codes_txt = "patrol;next_patrol=2.2-Leaving-Storage"; - location = "2.1-Storage" - }, -/obj/effect/turf_decal/tile/brown{ - dir = 4 - }, -/obj/structure/cable, -/turf/open/floor/plasteel, -/area/construction/storage_wing) -"aIA" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 1 }, -/obj/structure/cable, /turf/open/floor/plasteel, /area/construction/storage_wing) -"aIB" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/obj/structure/cable, -/turf/open/floor/plasteel, -/area/construction/storage_wing) -"aIC" = ( -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/obj/machinery/door/airlock/security{ - name = "Security-Storage Backroom"; - req_access_txt = "63" - }, -/obj/structure/cable, -/turf/open/floor/plasteel/dark, -/area/hallway/primary/fore) -"aID" = ( +"aIA" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 9 }, +/turf/closed/wall, +/area/construction/storage_wing) +"aIB" = ( /obj/structure/cable, -/turf/open/floor/plasteel/dark, -/area/hallway/primary/fore) +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/construction/storage_wing) +"aIC" = ( +/obj/machinery/door/airlock/maintenance{ + req_one_access_txt = "12;63;48;50" + }, +/obj/structure/cable, +/turf/open/floor/plating, +/area/maintenance/port/fore) +"aID" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel, +/area/quartermaster/storage) "aIE" = ( -/obj/structure/table, -/obj/item/folder/red, -/obj/item/restraints/handcuffs, -/obj/machinery/newscaster/security_unit{ - pixel_y = -30 +/obj/effect/turf_decal/trimline/brown/filled/corner{ + dir = 8 }, -/turf/open/floor/plasteel/dark, -/area/hallway/primary/fore) -"aIF" = ( -/obj/machinery/light/small, -/obj/structure/table, -/obj/item/paper_bin{ - pixel_x = -3; - pixel_y = 7 - }, -/obj/machinery/airalarm{ - dir = 1; - pixel_y = -22 +/obj/effect/turf_decal/trimline/brown/filled/corner{ + dir = 8 }, /obj/structure/cable, -/turf/open/floor/plasteel/dark, -/area/hallway/primary/fore) +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel, +/area/construction/storage_wing) +"aIF" = ( +/obj/item/kirbyplants/random, +/turf/open/floor/plasteel, +/area/storage/primary) "aII" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/effect/turf_decal/tile/red{ dir = 8 }, /obj/structure/cable, +/obj/structure/disposalpipe/segment, /turf/open/floor/plasteel, /area/hallway/primary/fore) "aIJ" = ( @@ -16082,106 +15760,55 @@ dir = 1; id = "QMLoad2" }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, /turf/open/floor/plating, /area/quartermaster/storage) -"aJD" = ( -/obj/machinery/conveyor_switch/oneway{ - id = "QMLoad2"; - pixel_x = 6 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 5 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/quartermaster/storage) "aJE" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 5 }, /turf/open/floor/plasteel, /area/quartermaster/storage) "aJF" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 10 }, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 10 + }, +/obj/item/kirbyplants/random, /turf/open/floor/plasteel, /area/quartermaster/storage) "aJG" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 10 - }, -/obj/effect/landmark/event_spawn, -/turf/open/floor/plasteel, -/area/quartermaster/storage) +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/turf/open/floor/plating, +/area/security/checkpoint/supply) "aJH" = ( -/obj/structure/disposalpipe/segment, -/turf/open/floor/plasteel, -/area/quartermaster/storage) -"aJI" = ( -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ - dir = 8 - }, -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/stripes/corner{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/quartermaster/storage) +/obj/effect/spawner/structure/window/reinforced, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plating, +/area/security/checkpoint/supply) "aJJ" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 10 +/obj/machinery/door/airlock/security/glass{ + name = "Security Post - Cargo"; + req_access_txt = "63" }, -/obj/structure/window/reinforced{ - dir = 1; - pixel_y = 1 - }, -/obj/effect/turf_decal/loading_area{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/quartermaster/storage) -"aJK" = ( -/obj/machinery/navbeacon{ - codes_txt = "delivery;dir=8"; - dir = 8; - freq = 1400; - location = "QM #1" - }, -/obj/machinery/door/window/northleft, -/obj/machinery/light{ - dir = 4 - }, -/obj/effect/turf_decal/delivery, -/obj/structure/cable, -/mob/living/simple_animal/bot/mulebot{ - beacon_freq = 1400; - home_destination = "QM #1"; - suffix = "#1" - }, -/turf/open/floor/plasteel, -/area/quartermaster/storage) -"aJL" = ( +/obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/machinery/door/airlock/maintenance{ - req_one_access_txt = "12;63;48;50" - }, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 1 - }, -/obj/structure/cable, -/turf/open/floor/plating, -/area/maintenance/port/fore) -"aJM" = ( -/obj/machinery/door/airlock/maintenance{ - req_one_access_txt = "12;63;48;50" - }, -/obj/structure/cable, -/turf/open/floor/plating, -/area/maintenance/port/fore) +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel, +/area/security/checkpoint/supply) +"aJK" = ( +/turf/closed/wall, +/area/security/checkpoint/supply) "aJN" = ( /turf/closed/wall, /area/storage/primary) @@ -16190,30 +15817,43 @@ /turf/open/floor/plating, /area/storage/primary) "aJP" = ( +/obj/effect/turf_decal/trimline/brown/filled/corner, +/obj/effect/turf_decal/trimline/brown/filled/corner, /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/public/glass{ - name = "Primary Tool Storage" - }, -/obj/effect/turf_decal/tile/brown, -/obj/effect/turf_decal/tile/brown{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/storage/primary) -"aJQ" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/public/glass{ - name = "Primary Tool Storage" - }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/effect/turf_decal/tile/brown, -/obj/effect/turf_decal/tile/brown{ - dir = 8 +/turf/open/floor/plasteel, +/area/construction/storage_wing) +"aJQ" = ( +/obj/machinery/navbeacon{ + codes_txt = "delivery;dir=8"; + dir = 8; + freq = 1400; + location = "QM #2" + }, +/obj/effect/turf_decal/delivery, +/obj/effect/turf_decal/stripes/line{ + dir = 10 }, /turf/open/floor/plasteel, /area/storage/primary) "aJR" = ( -/turf/closed/wall/r_wall, +/obj/machinery/navbeacon{ + codes_txt = "delivery;dir=8"; + dir = 8; + freq = 1400; + location = "QM #1" + }, +/mob/living/simple_animal/bot/mulebot{ + beacon_freq = 1400; + home_destination = "QM #1"; + suffix = "#1" + }, +/obj/machinery/light{ + dir = 4 + }, +/obj/effect/turf_decal/delivery, +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plasteel, /area/storage/primary) "aJS" = ( /turf/closed/wall/r_wall, @@ -16225,6 +15865,7 @@ /obj/effect/turf_decal/tile/red{ dir = 8 }, +/obj/structure/disposalpipe/segment, /turf/open/floor/plasteel, /area/hallway/primary/fore) "aJV" = ( @@ -16574,6 +16215,9 @@ dir = 4; id = "QMLoad2" }, +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, /turf/open/floor/plating, /area/quartermaster/storage) "aKO" = ( @@ -16582,6 +16226,7 @@ dir = 4; id = "QMLoad2" }, +/obj/effect/turf_decal/stripes/line, /turf/open/floor/plating, /area/quartermaster/storage) "aKP" = ( @@ -16589,13 +16234,10 @@ dir = 10; id = "QMLoad2" }, -/turf/open/floor/plating, -/area/quartermaster/storage) -"aKQ" = ( /obj/effect/turf_decal/stripes/line{ - dir = 8 + dir = 6 }, -/turf/open/floor/plasteel, +/turf/open/floor/plating, /area/quartermaster/storage) "aKR" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on{ @@ -16604,183 +16246,159 @@ /turf/open/floor/plasteel, /area/quartermaster/storage) "aKS" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 8 }, -/obj/effect/turf_decal/delivery, -/turf/open/floor/plasteel, -/area/quartermaster/storage) -"aKT" = ( -/obj/structure/closet/crate, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ - dir = 4 - }, -/obj/item/stack/ore/glass, -/obj/item/stack/ore/iron, -/obj/effect/turf_decal/bot, /turf/open/floor/plasteel, /area/quartermaster/storage) "aKU" = ( +/obj/structure/cable, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 5 + dir = 4 }, -/obj/effect/spawner/lootdrop/maintenance, -/obj/effect/turf_decal/bot, /turf/open/floor/plasteel, /area/quartermaster/storage) "aKV" = ( -/obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 + dir = 9 }, -/obj/effect/spawner/lootdrop/maintenance, -/obj/effect/turf_decal/bot, /turf/open/floor/plasteel, /area/quartermaster/storage) "aKW" = ( -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ +/obj/effect/turf_decal/trimline/red/filled/corner{ dir = 4 }, +/obj/machinery/firealarm{ + pixel_y = 27 + }, +/obj/machinery/light{ + dir = 1 + }, /obj/structure/disposalpipe/segment, /turf/open/floor/plasteel, /area/quartermaster/storage) "aKX" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/effect/turf_decal/loading_area{ - dir = 8 +/obj/effect/turf_decal/trimline/red/filled/line{ + dir = 1 }, -/turf/open/floor/plasteel, -/area/quartermaster/storage) -"aKY" = ( -/obj/machinery/navbeacon{ - codes_txt = "delivery;dir=8"; - dir = 8; - freq = 1400; - location = "QM #2" +/obj/machinery/button/door{ + name = "Warehouse Door Control"; + pixel_y = 1; + id = "qm_warehouse"; + pixel_x = 28; + req_access_txt = "31" }, -/obj/effect/turf_decal/delivery, -/obj/machinery/door/window/eastright{ - name = "MULEbot Access"; - req_one_access_txt = "31;48" - }, -/obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/disposalpipe/segment, /turf/open/floor/plasteel, /area/quartermaster/storage) "aKZ" = ( -/obj/structure/plasticflaps/opaque, -/turf/open/floor/plating, -/area/maintenance/port/fore) +/obj/effect/decal/cleanable/dirt, +/obj/structure/table, +/obj/machinery/microwave{ + pixel_y = 6; + pixel_x = 0 + }, +/obj/effect/turf_decal/trimline/brown/filled/line, +/obj/effect/turf_decal/trimline/brown/filled/line, +/turf/open/floor/plasteel, +/area/quartermaster/warehouse) "aLa" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 5 +/obj/effect/decal/cleanable/dirt, +/obj/structure/table, +/obj/item/reagent_containers/food/drinks/waterbottle/large{ + pixel_y = 20; + pixel_x = 5 }, -/obj/effect/turf_decal/stripes/line{ - dir = 9 +/obj/item/reagent_containers/food/drinks/waterbottle{ + pixel_y = 6; + pixel_x = 7 }, -/obj/structure/cable, -/turf/open/floor/plating, -/area/maintenance/port/fore) +/obj/item/trash/plate{ + pixel_x = -9 + }, +/obj/item/storage/box/donkpockets{ + pixel_y = 9; + pixel_x = -9 + }, +/obj/item/reagent_containers/food/drinks/waterbottle{ + pixel_x = 7 + }, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 6 + }, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 6 + }, +/turf/open/floor/plasteel, +/area/quartermaster/warehouse) "aLb" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 +/obj/effect/decal/cleanable/dirt, +/obj/structure/closet/crate/freezer, +/obj/structure/sink/kitchen{ + desc = "A sink used for washing one's hands and face. It looks rusty and home-made"; + name = "old sink"; + pixel_y = 28 }, -/obj/effect/landmark/blobstart, -/obj/structure/cable, -/turf/open/floor/plating, -/area/maintenance/port/fore) +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 6 + }, +/turf/open/floor/plasteel, +/area/quartermaster/warehouse) "aLc" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/sign/poster/official/random{ + pixel_y = 32 + }, +/obj/structure/closet/crate{ + icon_state = "crateopen" + }, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/obj/structure/cable, -/turf/open/floor/plating, -/area/maintenance/port/fore) +/turf/open/floor/plasteel, +/area/quartermaster/warehouse) "aLd" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plating, /area/maintenance/port) "aLe" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 10 +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light_switch{ + pixel_y = 27; + pixel_x = 8 }, -/obj/structure/cable, -/turf/open/floor/plating, -/area/maintenance/port/fore) -"aLf" = ( -/obj/structure/table, -/obj/item/clothing/gloves/color/fyellow, -/obj/item/gps{ - gpstag = "AUX0" - }, -/obj/effect/turf_decal/tile/brown{ - dir = 1 - }, -/obj/effect/turf_decal/tile/brown{ +/turf/open/floor/plasteel, +/area/quartermaster/warehouse) +"aLg" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ dir = 4 }, -/obj/effect/turf_decal/tile/brown{ +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 8 }, /turf/open/floor/plasteel, -/area/storage/primary) -"aLg" = ( -/obj/effect/turf_decal/tile/brown{ - dir = 1 - }, -/obj/effect/turf_decal/tile/brown{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/storage/primary) +/area/construction/storage_wing) "aLh" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/effect/turf_decal/tile/brown{ - dir = 1 +/obj/machinery/door/airlock/mining{ + name = "Automated Delivery"; + req_one_access_txt = "31;48" }, -/obj/effect/turf_decal/tile/brown{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/storage/primary) -"aLi" = ( -/obj/structure/table, -/obj/item/stack/cable_coil{ - pixel_x = 2; - pixel_y = -2 - }, -/obj/item/stack/cable_coil{ - pixel_x = 3; - pixel_y = 5 - }, -/obj/item/screwdriver{ - pixel_y = 16 - }, -/obj/item/stock_parts/cell/high{ - charge = 100; - maxcharge = 15000 - }, -/obj/effect/turf_decal/tile/brown{ - dir = 1 - }, -/obj/effect/turf_decal/tile/brown{ +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, /turf/open/floor/plasteel, /area/storage/primary) "aLj" = ( -/obj/structure/table, -/obj/machinery/cell_charger, -/obj/item/stock_parts/cell/high{ - charge = 100; - maxcharge = 15000 - }, -/obj/machinery/light_switch{ - pixel_y = 28 - }, -/obj/effect/turf_decal/tile/brown{ - dir = 1 - }, -/obj/effect/turf_decal/tile/brown{ +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, /turf/open/floor/plasteel, @@ -16794,37 +16412,27 @@ /turf/open/floor/plating, /area/maintenance/starboard/fore) "aLl" = ( -/obj/machinery/vending/tool, -/obj/effect/turf_decal/tile/brown{ - dir = 1 - }, -/obj/effect/turf_decal/tile/brown{ +/obj/structure/plasticflaps/opaque, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, -/turf/open/floor/plasteel, +/turf/open/floor/plating, /area/storage/primary) "aLm" = ( -/obj/structure/table, -/obj/item/assembly/signaler, -/obj/item/assembly/signaler, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 6 - }, -/obj/effect/turf_decal/tile/brown{ - dir = 1 - }, -/obj/effect/turf_decal/tile/brown, -/obj/effect/turf_decal/tile/brown{ dir = 4 }, -/turf/open/floor/plasteel, -/area/storage/primary) +/obj/structure/cable, +/turf/open/floor/plating{ + icon_state = "platingdmg1" + }, +/area/maintenance/port/fore) "aLn" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, /turf/closed/wall/r_wall, -/area/storage/primary) +/area/maintenance/port/fore) "aLo" = ( /obj/structure/lattice, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -16916,6 +16524,7 @@ /obj/effect/turf_decal/tile/red{ dir = 8 }, +/obj/structure/disposalpipe/segment, /turf/open/floor/plasteel, /area/hallway/primary/fore) "aLz" = ( @@ -17243,94 +16852,97 @@ /turf/open/floor/plasteel, /area/quartermaster/storage) "aMv" = ( +/obj/effect/turf_decal/bot_white/right, +/obj/effect/turf_decal/arrows/red{ + dir = 4 + }, /turf/open/floor/plasteel, /area/quartermaster/storage) "aMw" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/turf/open/floor/plasteel, -/area/quartermaster/storage) -"aMx" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/effect/landmark/start/cargo_technician, -/obj/structure/disposalpipe/segment, -/turf/open/floor/plasteel, -/area/quartermaster/storage) -"aMy" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ - dir = 1 +/obj/effect/turf_decal/bot_white/right, +/obj/effect/turf_decal/arrows/red{ + dir = 4 }, -/obj/effect/turf_decal/loading_area{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 8 }, /turf/open/floor/plasteel, /area/quartermaster/storage) +"aMy" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel, +/area/quartermaster/storage) "aMz" = ( +/obj/machinery/door/poddoor/shutters{ + id = "qm_warehouse"; + name = "Warehouse Shutters" + }, +/obj/effect/turf_decal/loading_area{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/quartermaster/warehouse) +"aMA" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 8 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel, +/area/construction/storage_wing) +"aMB" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel, +/area/construction/storage_wing) +"aMC" = ( +/obj/machinery/door/airlock/mining{ + name = "Automated Delivery"; + req_one_access_txt = "31;48" + }, +/obj/machinery/door/firedoor, +/turf/open/floor/plasteel, +/area/storage/primary) +"aMD" = ( +/turf/open/floor/plasteel, +/area/storage/primary) +"aME" = ( /obj/machinery/navbeacon{ codes_txt = "delivery;dir=8"; dir = 8; freq = 1400; - location = "QM #3" + location = "QM #4" }, /obj/effect/turf_decal/delivery, -/obj/structure/cable, -/mob/living/simple_animal/bot/mulebot{ - home_destination = "QM #3"; - suffix = "#3" - }, -/turf/open/floor/plasteel, -/area/quartermaster/storage) -"aMA" = ( -/obj/machinery/camera/autoname{ - dir = 4 - }, -/obj/structure/rack, -/obj/item/storage/toolbox/electrical{ - pixel_x = 1; - pixel_y = -1 - }, -/obj/effect/turf_decal/tile/brown{ - dir = 1 - }, -/obj/effect/turf_decal/tile/brown{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/storage/primary) -"aMB" = ( -/turf/open/floor/plasteel, -/area/storage/primary) -"aMC" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 5 - }, -/turf/open/floor/plasteel, -/area/storage/primary) -"aMD" = ( -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ - dir = 1 - }, -/turf/open/floor/plasteel, -/area/storage/primary) -"aME" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 +/obj/effect/turf_decal/stripes/line{ + dir = 9 }, /turf/open/floor/plasteel, /area/storage/primary) "aMF" = ( -/obj/machinery/firealarm{ - dir = 8; - pixel_x = 24 +/obj/machinery/door/poddoor{ + id = "QMLoaddoor2"; + name = "Supply Dock Loading Door" }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 9 +/obj/machinery/conveyor{ + dir = 4; + id = "QMLoad2" }, -/obj/effect/turf_decal/tile/brown, -/obj/effect/turf_decal/tile/brown{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/storage/primary) +/obj/effect/turf_decal/stripes/line, +/turf/open/floor/plating, +/area/quartermaster/storage) "aMG" = ( /obj/structure/table, /obj/item/aiModule/core/full/asimov, @@ -17382,6 +16994,7 @@ /obj/effect/turf_decal/tile/red{ dir = 8 }, +/obj/structure/disposalpipe/segment, /turf/open/floor/plasteel, /area/hallway/primary/fore) "aMK" = ( @@ -17794,154 +17407,82 @@ /turf/open/floor/plasteel, /area/quartermaster/storage) "aNF" = ( -/obj/effect/landmark/start/cargo_technician, -/turf/open/floor/plasteel, -/area/quartermaster/storage) -"aNG" = ( -/obj/effect/spawner/lootdrop/maintenance, -/obj/effect/turf_decal/delivery, -/turf/open/floor/plasteel, -/area/quartermaster/storage) -"aNH" = ( -/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ - dir = 8 +/obj/machinery/door/airlock/mining{ + name = "Warehouse"; + req_one_access_txt = "31;48" + }, +/obj/effect/mapping_helpers/airlock/abandoned, +/obj/machinery/door/firedoor, +/turf/open/floor/plasteel, +/area/quartermaster/warehouse) +"aNH" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 4 }, -/obj/effect/turf_decal/bot, /turf/open/floor/plasteel, /area/quartermaster/storage) "aNI" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ +/obj/effect/turf_decal/bot_white/right, +/obj/effect/turf_decal/arrows/red{ dir = 4 }, /obj/effect/spawner/lootdrop/maintenance, -/obj/effect/turf_decal/bot, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, /turf/open/floor/plasteel, /area/quartermaster/storage) "aNJ" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 +/obj/effect/turf_decal/trimline/brown/arrow_cw{ + dir = 9 }, -/obj/effect/turf_decal/bot, -/turf/open/floor/plasteel, -/area/quartermaster/storage) -"aNK" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 +/obj/effect/turf_decal/trimline/brown/corner{ + dir = 4; + pixel_x = -16 }, -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/stripes/corner, +/obj/structure/cable, /turf/open/floor/plasteel, /area/quartermaster/storage) "aNL" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/structure/window/reinforced, -/obj/effect/turf_decal/loading_area{ - dir = 8 +/obj/effect/turf_decal/trimline/brown/arrow_cw{ + dir = 1 }, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, /turf/open/floor/plasteel, /area/quartermaster/storage) "aNM" = ( -/obj/machinery/navbeacon{ - codes_txt = "delivery;dir=8"; - dir = 8; - freq = 1400; - location = "QM #4" +/obj/machinery/door/poddoor/shutters{ + id = "qm_warehouse"; + name = "Warehouse Shutters" }, -/obj/machinery/door/window/southleft, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ +/obj/effect/turf_decal/loading_area{ dir = 4 }, -/obj/effect/turf_decal/delivery, /obj/structure/cable, /turf/open/floor/plasteel, -/area/quartermaster/storage) -"aNN" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/turf/open/floor/plating, -/area/quartermaster/qm) -"aNO" = ( -/obj/structure/closet/secure_closet/quartermaster, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/effect/turf_decal/tile/brown{ - dir = 1 - }, -/obj/effect/turf_decal/tile/brown{ - dir = 4 - }, -/obj/effect/turf_decal/tile/brown{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/quartermaster/qm) +/area/quartermaster/warehouse) "aNP" = ( -/obj/machinery/camera/autoname, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 10 - }, -/obj/machinery/power/apc{ - areastring = "/area/quartermaster/qm"; - dir = 1; - name = "Quartermaster's Office APC"; - pixel_y = 23 - }, -/obj/structure/filingcabinet/chestdrawer, -/obj/effect/turf_decal/tile/brown{ - dir = 1 - }, -/obj/effect/turf_decal/tile/brown{ - dir = 4 - }, +/obj/effect/decal/cleanable/dirt, /obj/structure/cable, /turf/open/floor/plasteel, -/area/quartermaster/qm) +/area/quartermaster/warehouse) "aNQ" = ( -/obj/machinery/airalarm{ - pixel_y = 23 - }, -/obj/machinery/light{ - dir = 1 - }, -/obj/machinery/computer/bounty, -/obj/effect/turf_decal/tile/brown{ - dir = 1 - }, -/obj/effect/turf_decal/tile/brown{ - dir = 4 - }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/closet/crate, +/obj/effect/turf_decal/bot, /turf/open/floor/plasteel, -/area/quartermaster/qm) +/area/quartermaster/warehouse) "aNR" = ( -/obj/structure/table, -/obj/item/cartridge/quartermaster{ - pixel_x = -4; - pixel_y = 7 - }, -/obj/item/cartridge/quartermaster{ - pixel_x = 6; - pixel_y = 5 - }, -/obj/item/cartridge/quartermaster, -/obj/item/gps{ - gpstag = "QM0" - }, -/obj/effect/turf_decal/tile/brown{ - dir = 1 - }, -/obj/effect/turf_decal/tile/brown{ - dir = 4 - }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/closet/crate, +/obj/effect/turf_decal/bot, +/obj/effect/spawner/lootdrop/maintenance, +/obj/effect/spawner/lootdrop/maintenance, /turf/open/floor/plasteel, -/area/quartermaster/qm) +/area/quartermaster/warehouse) "aNS" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 10 @@ -17952,55 +17493,65 @@ }, /area/maintenance/starboard/fore) "aNT" = ( -/obj/structure/window/reinforced{ - dir = 1; - pixel_y = 1 +/obj/effect/turf_decal/trimline/brown/filled/corner{ + dir = 1 }, -/obj/structure/closet/crate/internals, -/obj/effect/turf_decal/delivery, +/obj/effect/turf_decal/trimline/brown/filled/corner{ + dir = 1 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel, -/area/storage/primary) +/area/construction/storage_wing) "aNU" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on{ +/obj/effect/turf_decal/trimline/brown/corner{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, /turf/open/floor/plasteel, -/area/storage/primary) +/area/quartermaster/storage) "aNV" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light_switch{ + pixel_y = 26; + pixel_x = -24 + }, +/obj/machinery/button/door{ + name = "Warehouse Door Control"; + pixel_y = 33; + id = "qm_warehouse"; + pixel_x = -25; + req_access_txt = "31" + }, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel, -/area/storage/primary) +/area/quartermaster/warehouse) "aNW" = ( +/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, /turf/open/floor/plasteel, -/area/storage/primary) +/area/quartermaster/warehouse) "aNX" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/start/cargo_technician, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 10 + dir = 9 }, /turf/open/floor/plasteel, -/area/storage/primary) +/area/quartermaster/warehouse) "aNY" = ( -/obj/structure/table, -/obj/item/assembly/igniter{ - pixel_x = -4; - pixel_y = -4 - }, -/obj/item/assembly/igniter, -/obj/item/screwdriver{ - pixel_y = 16 - }, -/obj/effect/turf_decal/tile/brown, -/obj/effect/turf_decal/tile/brown{ - dir = 4 - }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/closet/crate, +/obj/effect/turf_decal/bot, +/obj/item/electronics/apc, /turf/open/floor/plasteel, -/area/storage/primary) +/area/quartermaster/warehouse) "aNZ" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/cable, @@ -18470,165 +18021,111 @@ /turf/open/floor/plating, /area/quartermaster/storage) "aPe" = ( -/obj/structure/disposalpipe/segment{ - dir = 6 +/obj/machinery/rnd/production/techfab/department/cargo, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 9 + }, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 9 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, +/obj/structure/disposalpipe/segment, /turf/open/floor/plasteel, /area/quartermaster/storage) "aPf" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, -/obj/effect/turf_decal/stripes/line{ - dir = 5 - }, -/obj/structure/cable, -/turf/open/floor/plasteel, -/area/quartermaster/storage) +/turf/closed/wall, +/area/quartermaster/warehouse) "aPg" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 +/obj/effect/decal/cleanable/dirt, +/obj/structure/extinguisher_cabinet{ + pixel_x = -26 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/mining/glass{ - name = "Quartermaster"; - req_access_txt = "41" - }, -/obj/structure/cable, /turf/open/floor/plasteel, -/area/quartermaster/qm) +/area/quartermaster/warehouse) "aPh" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, +/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 9 - }, -/obj/effect/turf_decal/tile/brown{ - dir = 1 - }, -/obj/effect/turf_decal/tile/brown{ - dir = 8 - }, -/obj/structure/cable, -/turf/open/floor/plasteel, -/area/quartermaster/qm) -"aPi" = ( -/obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/structure/cable, /turf/open/floor/plasteel, -/area/quartermaster/qm) -"aPj" = ( -/obj/effect/landmark/start/quartermaster, -/obj/structure/disposalpipe/segment{ +/area/quartermaster/warehouse) +"aPi" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 10 }, -/obj/structure/chair/office{ - dir = 4 - }, /turf/open/floor/plasteel, -/area/quartermaster/qm) -"aPk" = ( -/obj/structure/table, -/obj/item/folder/yellow, -/obj/item/pen{ - pixel_x = 4; - pixel_y = 4 - }, -/obj/item/pen/red, -/obj/machinery/requests_console{ - department = "Cargo Bay"; - departmentType = 2; - pixel_x = 32 - }, -/turf/open/floor/plasteel, -/area/quartermaster/qm) +/area/quartermaster/warehouse) "aPl" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/effect/turf_decal/stripes/line{ - dir = 4 +/obj/effect/decal/cleanable/dirt, +/obj/machinery/firealarm{ + dir = 8; + pixel_x = 28 }, -/obj/structure/cable, -/turf/open/floor/plating, -/area/maintenance/port/fore) -"aPm" = ( -/obj/structure/plasticflaps/opaque, -/obj/machinery/navbeacon{ - codes_txt = "delivery;dir=4"; - dir = 4; - freq = 1400; - location = "Tool Storage" - }, -/obj/effect/turf_decal/delivery, /turf/open/floor/plasteel, -/area/storage/primary) -"aPn" = ( -/obj/effect/turf_decal/delivery, -/turf/open/floor/plasteel, -/area/storage/primary) +/area/quartermaster/warehouse) "aPo" = ( /obj/structure/table, -/obj/item/weldingtool, -/obj/item/crowbar, -/obj/item/stack/packageWrap, -/obj/item/stack/packageWrap, -/obj/item/stack/packageWrap, -/obj/item/stack/packageWrap, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/effect/turf_decal/tile/brown, -/turf/open/floor/plasteel, +/obj/item/storage/toolbox/mechanical{ + pixel_y = 10; + pixel_x = -2 + }, +/obj/item/storage/toolbox/mechanical{ + pixel_y = 2; + pixel_x = -2 + }, +/obj/machinery/light_switch{ + pixel_y = 28 + }, +/obj/effect/turf_decal/trimline/neutral/filled/line, +/obj/effect/turf_decal/trimline/neutral/filled/line, +/turf/open/floor/plasteel/dark, /area/storage/primary) "aPp" = ( +/obj/structure/sign/poster/official/random{ + pixel_y = 32 + }, /obj/structure/table, -/obj/item/storage/toolbox/mechanical{ - pixel_x = -2; - pixel_y = -1 +/obj/item/analyzer, +/obj/item/screwdriver{ + pixel_y = 20 }, -/obj/effect/turf_decal/tile/brown{ - dir = 8 - }, -/turf/open/floor/plasteel, +/obj/effect/turf_decal/trimline/neutral/filled/line, +/obj/effect/turf_decal/trimline/neutral/filled/line, +/turf/open/floor/plasteel/dark, /area/storage/primary) "aPq" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/bot, +/obj/effect/spawner/lootdrop/maintenance, /turf/open/floor/plasteel, -/area/storage/primary) +/area/quartermaster/warehouse) "aPr" = ( -/obj/structure/table, -/obj/item/wirecutters, -/obj/item/flashlight{ - pixel_x = 1; - pixel_y = 5 +/obj/machinery/navbeacon{ + codes_txt = "delivery;dir=8"; + dir = 8; + freq = 1400; + location = "QM #3" }, -/obj/machinery/requests_console{ - department = "Tool Storage"; - pixel_x = 30 +/mob/living/simple_animal/bot/mulebot{ + home_destination = "QM #3"; + suffix = "#3" }, /obj/machinery/light{ dir = 4 }, -/obj/machinery/camera{ - c_tag = "Tool Storage"; - dir = 8 - }, -/obj/effect/turf_decal/tile/brown, -/obj/effect/turf_decal/tile/brown{ - dir = 4 +/obj/effect/turf_decal/delivery, +/obj/effect/turf_decal/stripes/line{ + dir = 1 }, /turf/open/floor/plasteel, /area/storage/primary) @@ -18941,6 +18438,9 @@ dir = 8; id = "QMLoad" }, +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, /turf/open/floor/plating, /area/quartermaster/storage) "aQh" = ( @@ -18949,6 +18449,9 @@ dir = 8; id = "QMLoad" }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, /turf/open/floor/plating, /area/quartermaster/storage) "aQi" = ( @@ -18956,143 +18459,121 @@ dir = 6; id = "QMLoad" }, +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, /turf/open/floor/plating, /area/quartermaster/storage) "aQj" = ( -/obj/effect/landmark/start/cargo_technician, -/obj/effect/turf_decal/delivery, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 4 + }, /turf/open/floor/plasteel, /area/quartermaster/storage) "aQk" = ( -/obj/structure/closet/crate{ - icon_state = "crateopen" - }, +/obj/machinery/holopad, /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/effect/spawner/lootdrop/maintenance/two, -/obj/effect/turf_decal/bot, -/turf/open/floor/plasteel, -/area/quartermaster/storage) -"aQl" = ( -/obj/effect/turf_decal/bot, -/turf/open/floor/plasteel, -/area/quartermaster/storage) -"aQm" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/spawner/lootdrop/maintenance, -/obj/effect/turf_decal/bot, -/turf/open/floor/plasteel, -/area/quartermaster/storage) -"aQn" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/structure/disposalpipe/segment, -/turf/open/floor/plasteel, -/area/quartermaster/storage) -"aQo" = ( -/obj/structure/table, -/obj/machinery/airalarm{ - dir = 8; - pixel_x = 24 - }, -/obj/machinery/camera{ - c_tag = "Cargo Bay - Starboard"; - dir = 8 - }, -/obj/item/paper_bin{ - pixel_x = -1; - pixel_y = 6 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/structure/cable, /turf/open/floor/plasteel, /area/quartermaster/storage) "aQp" = ( -/turf/closed/wall, -/area/quartermaster/qm) +/obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/blobstart, +/turf/open/floor/plasteel, +/area/quartermaster/warehouse) "aQq" = ( -/obj/machinery/light_switch{ - pixel_x = -23 - }, -/obj/machinery/computer/cargo{ - dir = 4 - }, -/obj/effect/turf_decal/tile/brown{ +/obj/effect/decal/cleanable/dirt, +/turf/open/floor/plasteel, +/area/quartermaster/warehouse) +"aQr" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/landmark/start/cargo_technician, +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 1 }, -/obj/effect/turf_decal/tile/brown{ - dir = 8 - }, /turf/open/floor/plasteel, -/area/quartermaster/qm) -"aQr" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/turf/open/floor/plasteel, -/area/quartermaster/qm) +/area/quartermaster/warehouse) "aQs" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/holopad, +/obj/effect/decal/cleanable/dirt, +/obj/structure/rack, +/obj/effect/spawner/lootdrop/maintenance, +/obj/item/airlock_painter/decal, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 9 + }, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 9 + }, /turf/open/floor/plasteel, -/area/quartermaster/qm) +/area/quartermaster/warehouse) "aQt" = ( -/obj/structure/table, -/obj/item/clipboard, -/obj/item/stamp/qm, -/obj/machinery/status_display/supply{ - pixel_x = 32 +/obj/effect/decal/cleanable/dirt, +/obj/structure/rack, +/obj/effect/spawner/lootdrop/maintenance, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 1 }, /turf/open/floor/plasteel, -/area/quartermaster/qm) +/area/quartermaster/warehouse) "aQu" = ( -/obj/structure/closet/crate{ - icon_state = "crateopen" +/obj/structure/cable, +/obj/machinery/status_display/evac{ + pixel_x = -32 }, -/obj/machinery/light{ +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 8 }, -/obj/effect/turf_decal/delivery, /turf/open/floor/plasteel, -/area/storage/primary) +/area/construction/storage_wing) "aQv" = ( -/obj/structure/table, -/obj/item/storage/toolbox/mechanical{ - pixel_x = -2; - pixel_y = -1 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/effect/turf_decal/tile/brown{ +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/dark, /area/storage/primary) "aQw" = ( -/obj/structure/table, -/obj/item/folder/yellow, -/obj/item/folder/yellow, -/obj/item/storage/firstaid/regular, -/obj/effect/turf_decal/tile/brown{ - dir = 1 +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 8 }, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/dark, /area/storage/primary) "aQx" = ( -/obj/machinery/holopad, -/turf/open/floor/plasteel, +/obj/structure/table, +/obj/item/wrench, +/obj/item/crowbar, +/obj/item/stack/cable_coil{ + pixel_y = 15; + pixel_x = 3 + }, +/obj/item/stack/cable_coil{ + pixel_y = 18; + pixel_x = 0 + }, +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 8 + }, +/obj/machinery/requests_console{ + department = "Tool Storage"; + pixel_x = 30 + }, +/turf/open/floor/plasteel/dark, /area/storage/primary) "aQy" = ( -/obj/structure/table, -/obj/item/radio/intercom{ - dir = 4; - pixel_x = 27 +/obj/effect/decal/cleanable/dirt, +/obj/effect/turf_decal/bot, +/obj/effect/spawner/lootdrop/maintenance, +/obj/item/stock_parts/cell{ + maxcharge = 2000 }, -/obj/item/t_scanner, -/obj/effect/turf_decal/tile/brown, -/obj/effect/turf_decal/tile/brown{ - dir = 4 - }, -/obj/item/clothing/gloves/color/fyellow, /turf/open/floor/plasteel, -/area/storage/primary) +/area/quartermaster/warehouse) "aQz" = ( /obj/structure/table, /obj/item/aiModule/reset, @@ -19163,6 +18644,7 @@ /obj/effect/turf_decal/tile/red{ dir = 8 }, +/obj/structure/disposalpipe/segment, /turf/open/floor/plasteel, /area/hallway/primary/fore) "aQF" = ( @@ -19595,134 +19077,107 @@ dir = 1; id = "QMLoad" }, -/turf/open/floor/plating, -/area/quartermaster/storage) -"aRI" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/chair/office{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/quartermaster/storage) -"aRJ" = ( -/obj/item/radio/intercom{ - dir = 4; - pixel_x = 27 - }, -/obj/structure/table, -/obj/item/folder/yellow, -/obj/item/folder/yellow, -/obj/item/paper, -/obj/item/paper, /obj/effect/turf_decal/stripes/line{ dir = 4 }, -/obj/structure/cable, +/turf/open/floor/plating, +/area/quartermaster/storage) +"aRI" = ( +/obj/structure/table, +/obj/item/paper_bin{ + pixel_y = 1; + pixel_x = 8 + }, +/obj/item/paper_bin{ + pixel_y = 6; + pixel_x = 8 + }, +/obj/item/paper_bin{ + pixel_y = 11; + pixel_x = 8 + }, +/obj/item/folder/yellow{ + pixel_y = 8; + pixel_x = -6 + }, +/obj/item/folder/yellow{ + pixel_y = 1; + pixel_x = -9 + }, +/obj/item/paper{ + pixel_x = -5 + }, +/obj/item/radio/intercom{ + dir = 4; + pixel_x = 30 + }, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 8 + }, /turf/open/floor/plasteel, /area/quartermaster/storage) "aRK" = ( -/obj/machinery/computer/security/qm{ - dir = 4 - }, -/obj/effect/turf_decal/tile/brown{ +/obj/effect/decal/cleanable/dirt, +/obj/structure/closet/crate/internals, +/obj/effect/spawner/lootdrop/maintenance, +/obj/effect/turf_decal/trimline/brown/filled/line{ dir = 1 }, -/obj/effect/turf_decal/tile/brown, -/obj/effect/turf_decal/tile/brown{ - dir = 8 +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 1 }, /turf/open/floor/plasteel, -/area/quartermaster/qm) +/area/quartermaster/warehouse) "aRL" = ( -/obj/structure/chair/office{ - dir = 8 +/obj/effect/decal/cleanable/dirt, +/obj/structure/reagent_dispensers/watertank, +/obj/machinery/power/apc{ + areastring = "/area/quartermaster/warehouse"; + dir = 4; + name = "Warehouse APC"; + pixel_x = 24 }, -/obj/machinery/atmospherics/components/unary/vent_pump/on{ +/obj/effect/turf_decal/trimline/brown/filled/line{ dir = 1 }, -/obj/item/radio/intercom{ - pixel_y = -28 - }, -/obj/effect/turf_decal/tile/brown, -/obj/effect/turf_decal/tile/brown{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/quartermaster/qm) -"aRM" = ( -/obj/machinery/disposal/bin, -/obj/structure/disposalpipe/trunk{ +/obj/effect/turf_decal/trimline/brown/filled/line{ dir = 1 }, -/obj/effect/turf_decal/tile/brown, -/obj/effect/turf_decal/tile/brown{ - dir = 8 - }, +/obj/structure/cable, /turf/open/floor/plasteel, -/area/quartermaster/qm) -"aRN" = ( -/obj/structure/table, -/obj/effect/turf_decal/tile/brown, -/obj/effect/turf_decal/tile/brown{ - dir = 8 - }, -/obj/item/paper_bin/carbon{ - pixel_x = -3; - pixel_y = 7 - }, -/turf/open/floor/plasteel, -/area/quartermaster/qm) -"aRO" = ( -/obj/structure/window/reinforced, -/obj/structure/window/reinforced{ - dir = 1; - pixel_y = 2 - }, -/obj/machinery/disposal/deliveryChute{ - dir = 4; - name = "Crate Disposal Chute"; - pixel_x = -5; - pixel_y = 2 - }, -/obj/machinery/door/window/westleft{ - base_state = "right"; - dir = 4; - icon_state = "right"; - name = "Crate Disposal Chute" - }, -/obj/structure/disposalpipe/trunk{ +/area/quartermaster/warehouse) +"aRQ" = ( +/obj/structure/closet/crate/internals, +/obj/effect/turf_decal/delivery, +/obj/effect/turf_decal/trimline/neutral/filled/end{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/neutral/filled/end{ dir = 4 }, -/obj/effect/turf_decal/delivery, -/turf/open/floor/plasteel, -/area/storage/primary) -"aRP" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, -/turf/open/floor/plasteel, -/area/storage/primary) -"aRQ" = ( -/obj/structure/disposalpipe/junction{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/dark, /area/storage/primary) "aRR" = ( +/obj/machinery/holopad, +/obj/structure/cable, /obj/structure/disposalpipe/segment{ dir = 10 }, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/dark, /area/storage/primary) "aRS" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on, -/obj/effect/turf_decal/tile/brown, -/obj/effect/turf_decal/tile/brown{ - dir = 4 +/obj/effect/decal/cleanable/dirt, +/obj/structure/closet/crate{ + icon_state = "crateopen" }, /turf/open/floor/plasteel, -/area/storage/primary) +/area/quartermaster/warehouse) "aRT" = ( /obj/machinery/flasher{ id = "AI"; @@ -20082,139 +19537,144 @@ /turf/open/floor/plating, /area/maintenance/port/fore) "aSQ" = ( -/obj/machinery/conveyor_switch/oneway{ - dir = 8; - id = "QMLoad"; - pixel_x = 6 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, /turf/open/floor/plasteel, /area/quartermaster/storage) "aSR" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 4 }, -/obj/effect/spawner/lootdrop/maintenance, -/obj/effect/turf_decal/bot, /turf/open/floor/plasteel, /area/quartermaster/storage) "aSS" = ( -/obj/effect/spawner/lootdrop/maintenance, -/obj/effect/turf_decal/bot, +/obj/effect/landmark/start/cargo_technician, /turf/open/floor/plasteel, /area/quartermaster/storage) "aST" = ( -/obj/structure/closet/crate, -/obj/structure/disposalpipe/segment, -/obj/effect/spawner/lootdrop/maintenance/three, -/obj/effect/turf_decal/bot, +/obj/effect/turf_decal/trimline/brown/arrow_cw{ + dir = 8 + }, /turf/open/floor/plasteel, /area/quartermaster/storage) "aSU" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/disposalpipe/segment{ dir = 5 }, /turf/open/floor/plasteel, /area/quartermaster/storage) "aSV" = ( -/obj/structure/disposalpipe/segment, +/obj/structure/table, +/obj/item/pen/red{ + pixel_y = 15; + pixel_x = 8 + }, +/obj/item/gps{ + pixel_y = 10; + gpstag = "QM0"; + pixel_x = -4 + }, +/obj/item/pen/fountain{ + pixel_y = 4; + pixel_x = 9 + }, +/obj/item/pen/blue{ + pixel_y = -3; + pixel_x = 3 + }, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 10 + }, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 10 + }, /obj/structure/disposalpipe/segment{ - dir = 4 + dir = 10 }, /turf/open/floor/plasteel, /area/quartermaster/storage) -"aSW" = ( -/obj/machinery/light{ - dir = 4 - }, -/obj/machinery/disposal/bin, -/obj/structure/disposalpipe/trunk{ - dir = 8 - }, -/obj/machinery/status_display/supply{ - pixel_x = 32 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/structure/cable, -/turf/open/floor/plasteel, -/area/quartermaster/storage) -"aSX" = ( -/turf/closed/wall, -/area/security/checkpoint/supply) "aSZ" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Tool Storage Maintenance"; - req_access_txt = "12" - }, -/obj/structure/cable, -/turf/open/floor/plating, -/area/maintenance/port) +/turf/closed/wall, +/area/quartermaster/warehouse) "aTa" = ( -/obj/effect/turf_decal/tile/brown{ - dir = 1 - }, -/obj/effect/turf_decal/tile/brown{ - dir = 8 - }, /obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel, -/area/storage/primary) +/area/construction/storage_wing) "aTb" = ( /obj/structure/cable, -/turf/open/floor/plasteel, -/area/storage/primary) -"aTc" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 5 +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 8 }, -/obj/structure/cable, /turf/open/floor/plasteel, +/area/construction/storage_wing) +"aTc" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel/dark, /area/storage/primary) "aTd" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 8 }, /obj/structure/disposalpipe/segment, -/obj/structure/cable, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/dark, /area/storage/primary) "aTe" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 +/obj/structure/table, +/obj/item/assembly/igniter{ + pixel_y = -6; + pixel_x = -3 }, -/obj/structure/cable, -/turf/open/floor/plasteel, +/obj/item/assembly/igniter{ + pixel_x = 9 + }, +/obj/item/t_scanner{ + pixel_y = 15; + pixel_x = -3 + }, +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 8 + }, +/obj/item/radio/intercom{ + dir = 4; + pixel_x = 27 + }, +/turf/open/floor/plasteel/dark, /area/storage/primary) "aTf" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ +/obj/effect/turf_decal/trimline/brown/filled/corner{ dir = 4 }, -/obj/structure/cable, +/obj/effect/turf_decal/trimline/brown/filled/corner{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel, -/area/storage/primary) +/area/construction/storage_wing) "aTg" = ( -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ +/obj/effect/turf_decal/bot_white/right, +/obj/effect/turf_decal/arrows/red{ dir = 4 }, -/obj/effect/turf_decal/tile/brown, -/obj/effect/turf_decal/tile/brown{ - dir = 4 - }, -/obj/structure/cable, +/obj/effect/spawner/lootdrop/maintenance, /turf/open/floor/plasteel, -/area/storage/primary) +/area/quartermaster/storage) "aTh" = ( -/obj/effect/spawner/structure/window/reinforced, +/obj/effect/turf_decal/bot_white/right, +/obj/effect/turf_decal/arrows/red{ + dir = 4 + }, /obj/structure/cable, -/turf/open/floor/plating, -/area/storage/primary) +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/quartermaster/storage) "aTi" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/highsecurity{ @@ -20610,195 +20070,203 @@ /turf/closed/wall, /area/quartermaster/storage) "aUf" = ( -/obj/machinery/light{ - dir = 8 - }, -/obj/machinery/camera{ - c_tag = "Cargo Bay - Port"; - dir = 4 - }, /obj/machinery/conveyor{ dir = 1; id = "QMLoad" }, -/turf/open/floor/plating, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/plasteel, /area/quartermaster/storage) "aUg" = ( -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ - dir = 8 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 }, /turf/open/floor/plasteel, /area/quartermaster/storage) "aUh" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ - dir = 8 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 }, +/obj/structure/disposalpipe/segment, /turf/open/floor/plasteel, /area/quartermaster/storage) "aUi" = ( +/obj/effect/turf_decal/delivery, +/obj/machinery/firealarm{ + pixel_y = 27 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/quartermaster/storage) +"aUj" = ( +/obj/effect/turf_decal/delivery, +/obj/structure/sign/map/left{ + desc = "A framed picture of the station. Clockwise from security at the top (red), you see engineering (yellow), science (purple), escape (red and white), medbay (green), arrivals (blue and white), and finally cargo (brown)."; + icon_state = "map-left-MS"; + pixel_y = 32 + }, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/construction/storage_wing) +"aUk" = ( +/obj/effect/turf_decal/delivery, +/obj/structure/sign/map/right{ + desc = "A framed picture of the station. Clockwise from security at the top (red), you see engineering (yellow), science (purple), escape (red and white), medbay (green), arrivals (blue and white), and finally cargo (brown)."; + icon_state = "map-right-MS"; + pixel_y = 32 + }, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/construction/storage_wing) +"aUl" = ( +/obj/effect/turf_decal/delivery, +/obj/machinery/light{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/construction/storage_wing) +"aUm" = ( +/obj/machinery/atmospherics/components/unary/vent_pump/on, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/construction/storage_wing) +"aUo" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/construction/storage_wing) +"aUp" = ( +/obj/structure/rack, +/obj/item/storage/belt/utility, +/obj/item/screwdriver{ + pixel_y = 16 + }, +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 9 + }, +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 9 + }, +/turf/open/floor/plasteel/dark, +/area/storage/primary) +"aUq" = ( +/obj/structure/rack, +/obj/item/storage/box/shipping{ + pixel_x = -6 + }, +/obj/item/storage/box/lights/mixed{ + pixel_x = 9 + }, +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 1 + }, +/turf/open/floor/plasteel/dark, +/area/storage/primary) +"aUr" = ( +/obj/structure/table, +/obj/item/clothing/gloves/color/fyellow{ + pixel_y = 9 + }, +/obj/machinery/cell_charger{ + pixel_x = -3 + }, +/obj/item/stock_parts/cell/high{ + maxcharge = 15000; + pixel_y = -2; + charge = 100; + pixel_x = -2 + }, +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 1 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel/dark, +/area/storage/primary) +"aUs" = ( +/obj/structure/table, +/obj/item/storage/firstaid/regular{ + pixel_y = -5; + pixel_x = 5 + }, +/obj/item/wirecutters{ + pixel_y = 25 + }, +/obj/item/assembly/signaler{ + pixel_y = 13; + pixel_x = -10 + }, +/obj/item/assembly/signaler{ + pixel_x = -8 + }, +/obj/item/assembly/prox_sensor{ + pixel_y = 12; + pixel_x = 0 + }, +/obj/effect/turf_decal/trimline/neutral/filled/corner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/neutral/filled/corner{ + dir = 1 + }, +/obj/machinery/light{ + dir = 4 + }, /obj/machinery/firealarm{ dir = 8; pixel_x = 24 }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/machinery/rnd/production/techfab/department/cargo, -/obj/structure/cable, -/turf/open/floor/plasteel, -/area/quartermaster/storage) -"aUj" = ( -/obj/structure/closet/secure_closet/security/cargo, -/obj/machinery/light_switch{ - pixel_x = -25 - }, -/obj/machinery/airalarm{ - pixel_y = 23 - }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/security/checkpoint/supply) -"aUk" = ( -/obj/machinery/power/apc{ - areastring = "/area/security/checkpoint/supply"; - dir = 1; - name = "Security Post - Cargo Bay APC"; - pixel_x = 1; - pixel_y = 23 - }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/structure/cable, -/turf/open/floor/plasteel, -/area/security/checkpoint/supply) -"aUl" = ( -/obj/item/screwdriver{ - pixel_y = 10 - }, -/obj/item/radio/off, -/obj/machinery/light{ - dir = 1 - }, -/obj/machinery/requests_console{ - department = "Security"; - departmentType = 5; - pixel_y = 30 - }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/security/checkpoint/supply) -"aUm" = ( -/obj/structure/filingcabinet, -/obj/structure/reagent_dispensers/peppertank{ - pixel_x = 30 - }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/security/checkpoint/supply) -"aUo" = ( -/obj/structure/table, -/obj/item/storage/belt/utility, -/obj/machinery/airalarm{ - dir = 1; - pixel_y = -22 - }, -/obj/item/storage/box/lights/mixed, -/obj/effect/turf_decal/tile/brown, -/obj/effect/turf_decal/tile/brown{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/storage/primary) -"aUp" = ( -/obj/structure/reagent_dispensers/watertank, -/obj/effect/turf_decal/tile/brown, -/obj/effect/turf_decal/tile/brown{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/storage/primary) -"aUq" = ( -/obj/machinery/disposal/bin, -/obj/structure/disposalpipe/trunk{ - dir = 1 - }, -/obj/effect/turf_decal/tile/brown, -/obj/effect/turf_decal/tile/brown{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/storage/primary) -"aUr" = ( -/obj/structure/reagent_dispensers/fueltank, -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/tile/brown, -/obj/effect/turf_decal/tile/brown{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/storage/primary) -"aUs" = ( -/obj/structure/table, -/obj/item/crowbar, -/obj/item/assembly/prox_sensor{ - pixel_x = -8; - pixel_y = 4 - }, -/obj/item/clothing/gloves/color/fyellow, -/obj/machinery/light/small, -/obj/effect/turf_decal/tile/brown, -/obj/effect/turf_decal/tile/brown{ - dir = 8 - }, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/dark, /area/storage/primary) "aUt" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/effect/turf_decal/tile/brown, -/obj/effect/turf_decal/tile/brown{ - dir = 8 - }, -/obj/structure/cable, -/turf/open/floor/plasteel, -/area/storage/primary) -"aUu" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/machinery/light_switch{ - pixel_x = 28 - }, -/obj/effect/turf_decal/tile/brown, -/obj/effect/turf_decal/tile/brown{ +/obj/effect/turf_decal/bot_white/right, +/obj/effect/turf_decal/arrows/red{ dir = 4 }, -/obj/effect/turf_decal/tile/brown{ - dir = 8 +/obj/effect/spawner/lootdrop/maintenance, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 }, /turf/open/floor/plasteel, -/area/storage/primary) +/area/quartermaster/storage) +"aUu" = ( +/obj/effect/turf_decal/bot_white/right, +/obj/effect/turf_decal/arrows/red{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/quartermaster/storage) "aUv" = ( /turf/closed/wall/r_wall, /area/hallway/primary/central) @@ -20915,6 +20383,7 @@ /obj/effect/turf_decal/tile/red{ dir = 8 }, +/obj/structure/disposalpipe/segment, /turf/open/floor/plasteel, /area/hallway/primary/fore) "aUD" = ( @@ -21397,117 +20866,112 @@ }, /area/hallway/secondary/entry) "aVG" = ( -/obj/machinery/status_display/supply, -/turf/closed/wall, +/obj/effect/turf_decal/trimline/brown/arrow_cw{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel, /area/quartermaster/storage) "aVH" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/item/storage/firstaid/regular, -/obj/effect/turf_decal/delivery, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, /turf/open/floor/plasteel, /area/quartermaster/storage) "aVJ" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 5 +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 6 }, -/obj/effect/landmark/start/cargo_technician, /turf/open/floor/plasteel, /area/quartermaster/storage) "aVK" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/quartermaster/storage) -"aVL" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 10 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/structure/cable, /turf/open/floor/plasteel, /area/quartermaster/storage) "aVM" = ( +/obj/machinery/door/airlock/mining{ + name = "Cargo Bay"; + req_one_access_txt = "31;48" + }, +/obj/structure/cable, /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/security/glass{ - name = "Security Post - Cargo"; - req_access_txt = "63" - }, -/obj/structure/cable, -/turf/open/floor/plasteel, -/area/security/checkpoint/supply) -"aVN" = ( -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/structure/cable, -/turf/open/floor/plasteel, -/area/security/checkpoint/supply) -"aVO" = ( -/obj/structure/cable, -/turf/open/floor/plasteel, -/area/security/checkpoint/supply) -"aVP" = ( -/obj/structure/chair/office, -/obj/machinery/atmospherics/components/unary/vent_pump/on, -/obj/effect/landmark/start/depsec/supply, -/turf/open/floor/plasteel, -/area/security/checkpoint/supply) -"aVQ" = ( -/obj/item/radio/intercom{ - dir = 4; - pixel_x = 27 - }, -/obj/machinery/computer/security/mining{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, /turf/open/floor/plasteel, -/area/security/checkpoint/supply) +/area/construction/storage_wing) +"aVN" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 8 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/construction/storage_wing) +"aVO" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel, +/area/construction/storage_wing) +"aVP" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/construction/storage_wing) +"aVQ" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden, +/turf/open/floor/plasteel, +/area/construction/storage_wing) "aVR" = ( /obj/effect/spawner/structure/window, /obj/structure/disposalpipe/segment, /turf/open/floor/plating, /area/storage/primary) "aVS" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/public/glass{ - name = "Primary Tool Storage" +/obj/structure/table, +/obj/item/clothing/gloves/color/fyellow{ + pixel_y = 6 }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/effect/turf_decal/tile/brown{ - dir = 1 +/obj/item/clothing/gloves/color/fyellow{ + pixel_x = 0 }, -/obj/effect/turf_decal/tile/brown{ +/obj/effect/turf_decal/trimline/neutral/filled/corner{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/neutral/filled/corner{ + dir = 8 + }, +/obj/machinery/light{ dir = 4 }, -/obj/structure/cable, -/obj/machinery/navbeacon/wayfinding, -/turf/open/floor/plasteel, +/turf/open/floor/plasteel/dark, /area/storage/primary) "aVT" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/public/glass{ - name = "Primary Tool Storage" +/obj/machinery/door/airlock/maintenance{ + req_one_access_txt = "12;63;48;50" }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/effect/turf_decal/tile/brown{ - dir = 1 +/obj/structure/cable, +/turf/open/floor/plating{ + icon_state = "platingdmg1" }, -/obj/effect/turf_decal/tile/brown{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/storage/primary) +/area/maintenance/port/fore) "aVU" = ( /obj/structure/closet/firecloset, /obj/effect/turf_decal/tile/neutral{ @@ -21638,6 +21102,7 @@ /obj/effect/turf_decal/tile/red{ dir = 1 }, +/obj/structure/disposalpipe/segment, /turf/open/floor/plasteel, /area/hallway/primary/central) "aWf" = ( @@ -22058,162 +21523,98 @@ /turf/open/floor/plasteel/white/corner, /area/hallway/secondary/entry) "aXe" = ( -/obj/machinery/conveyor{ - dir = 4; - id = "QMLoad" - }, -/turf/open/floor/plating, +/obj/machinery/vending/wardrobe/cargo_wardrobe, +/turf/open/floor/plasteel, /area/quartermaster/storage) "aXf" = ( -/obj/machinery/holopad, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 6 + }, /turf/open/floor/plasteel, /area/quartermaster/storage) "aXg" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 5 - }, -/obj/effect/spawner/lootdrop/maintenance, -/obj/effect/turf_decal/bot, /obj/structure/cable, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden, /turf/open/floor/plasteel, /area/quartermaster/storage) "aXh" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/effect/turf_decal/delivery, /obj/structure/cable, -/turf/open/floor/plasteel, -/area/quartermaster/storage) -"aXi" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/structure/cable, -/turf/open/floor/plasteel, -/area/quartermaster/storage) -"aXj" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/structure/cable, -/turf/open/floor/plasteel, -/area/quartermaster/storage) -"aXk" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ - dir = 1 - }, -/obj/structure/cable, -/turf/open/floor/plasteel, -/area/quartermaster/storage) -"aXl" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/structure/extinguisher_cabinet{ - pixel_x = 27 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/structure/cable, /turf/open/floor/plasteel, /area/quartermaster/storage) -"aXm" = ( +"aXi" = ( +/obj/structure/cable, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/turf/closed/wall, -/area/security/checkpoint/supply) -"aXn" = ( -/obj/machinery/recharger{ - pixel_y = 4 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/structure/table/reinforced, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, /turf/open/floor/plasteel, -/area/security/checkpoint/supply) -"aXo" = ( -/obj/item/paper_bin{ - pixel_x = 1; - pixel_y = 9 - }, -/obj/item/pen, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/structure/table/reinforced, -/obj/machinery/camera{ - c_tag = "Security Post - Cargo"; - dir = 1 - }, -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/security/checkpoint/supply) -"aXp" = ( -/obj/item/book/manual/wiki/security_space_law, -/obj/machinery/newscaster{ - pixel_y = -32 - }, +/area/quartermaster/storage) +"aXj" = ( +/obj/structure/cable, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 9 }, -/obj/structure/table/reinforced, -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, /turf/open/floor/plasteel, -/area/security/checkpoint/supply) -"aXq" = ( -/obj/machinery/computer/secure_data{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/security/checkpoint/supply) -"aXr" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 5 - }, -/obj/effect/landmark/blobstart, +/area/quartermaster/storage) +"aXk" = ( /obj/structure/cable, -/turf/open/floor/plating{ - icon_state = "panelscorched" +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel, +/area/quartermaster/storage) +"aXl" = ( +/obj/machinery/door/poddoor{ + id = "QMLoaddoor"; + name = "Supply Dock Loading Door" }, -/area/maintenance/port/fore) -"aXs" = ( -/obj/item/trash/popcorn, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ +/obj/machinery/conveyor{ + dir = 8; + id = "QMLoad" + }, +/obj/effect/turf_decal/stripes/line{ dir = 1 }, +/turf/open/floor/plating, +/area/quartermaster/storage) +"aXm" = ( +/obj/machinery/mineral/ore_redemption, +/turf/open/floor/plating, +/area/construction/storage_wing) +"aXn" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 8 + }, +/turf/open/floor/plasteel, +/area/construction/storage_wing) +"aXo" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel, +/area/construction/storage_wing) +"aXp" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel, +/area/construction/storage_wing) +"aXq" = ( +/turf/open/floor/plasteel, +/area/construction/storage_wing) +"aXr" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/construction/storage_wing) +"aXs" = ( /obj/structure/disposalpipe/segment{ dir = 6 }, -/obj/structure/cable, -/turf/open/floor/plating, -/area/maintenance/port/fore) +/turf/open/floor/plasteel, +/area/construction/storage_wing) "aXt" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -22228,18 +21629,16 @@ /turf/open/floor/plating, /area/maintenance/port) "aXu" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, +/obj/structure/cable, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/obj/machinery/door/airlock/maintenance{ - req_one_access_txt = "12;63;48;50" +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/disposalpipe/segment{ + dir = 4 }, -/obj/structure/cable, -/turf/open/floor/plating, -/area/maintenance/port/fore) +/turf/open/floor/plasteel, +/area/construction/storage_wing) "aXv" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 1 @@ -22247,12 +21646,9 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, /obj/structure/cable, /turf/open/floor/plasteel, -/area/hallway/primary/central) +/area/construction/storage_wing) "aXw" = ( /obj/structure/disposalpipe/segment{ dir = 10 @@ -22260,9 +21656,6 @@ /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 1 }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, /obj/structure/cable, /turf/open/floor/plasteel, /area/hallway/primary/central) @@ -22271,41 +21664,47 @@ dir = 4 }, /obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, /turf/open/floor/plasteel, /area/hallway/primary/central) "aXy" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ +/obj/machinery/disposal/bin, +/obj/machinery/airalarm{ + dir = 8; + pixel_x = 24 + }, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 8 + }, +/obj/machinery/light{ dir = 4 }, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/quartermaster/storage) +"aXz" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden, /obj/machinery/firealarm{ pixel_y = 32 }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/turf/open/floor/plasteel, -/area/hallway/primary/central) -"aXz" = ( -/obj/machinery/atmospherics/pipe/manifold/supply/hidden, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/structure/cable, /turf/open/floor/plasteel, /area/hallway/primary/central) "aXA" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 +/obj/effect/decal/cleanable/dirt, +/obj/structure/rack, +/obj/item/storage/box/lights/mixed, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 1 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/effect/turf_decal/tile/neutral{ +/obj/effect/turf_decal/trimline/brown/filled/line{ dir = 1 }, /turf/open/floor/plasteel, -/area/hallway/primary/central) +/area/quartermaster/warehouse) "aXB" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -22436,6 +21835,7 @@ /obj/effect/turf_decal/plaque{ icon_state = "L5" }, +/obj/structure/disposalpipe/segment, /turf/open/floor/plasteel, /area/hallway/primary/central) "aXN" = ( @@ -22864,83 +22264,107 @@ /turf/open/floor/plasteel/white/corner, /area/hallway/secondary/entry) "aYJ" = ( -/obj/machinery/light_switch{ - pixel_x = -38 +/obj/effect/decal/cleanable/dirt, +/obj/structure/rack, +/obj/effect/spawner/lootdrop/maintenance, +/obj/effect/spawner/lootdrop/maintenance, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 1 }, -/obj/machinery/firealarm{ - dir = 4; - pixel_x = -24 - }, -/obj/effect/turf_decal/loading_area{ +/obj/effect/turf_decal/trimline/brown/filled/line{ dir = 1 }, /turf/open/floor/plasteel, -/area/quartermaster/storage) +/area/quartermaster/warehouse) "aYK" = ( -/obj/effect/turf_decal/loading_area{ - dir = 1 +/obj/machinery/door/airlock/maintenance{ + name = "Cargo Bay Maintenance"; + req_one_access_txt = "31;48" }, /obj/structure/cable, -/turf/open/floor/plasteel, +/turf/open/floor/plating, /area/quartermaster/storage) "aYL" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 }, -/obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel, -/area/quartermaster/storage) +/area/construction/storage_wing) "aYM" = ( /obj/structure/cable, /turf/open/floor/plasteel, /area/quartermaster/storage) "aYO" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/stripes/corner, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/machinery/conveyor{ + dir = 8; + id = "packageExternal" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/obj/machinery/camera{ + dir = 1; + c_tag = "Cargo Bay - Fore"; + pixel_x = 14 + }, /turf/open/floor/plasteel, /area/quartermaster/storage) "aYP" = ( -/obj/machinery/camera{ - c_tag = "Cargo Bay - Aft"; - dir = 1 +/obj/machinery/conveyor/inverted{ + dir = 6; + id = "packageExternal" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 5 }, -/obj/effect/turf_decal/stripes/line, -/turf/open/floor/plasteel, -/area/quartermaster/storage) -"aYQ" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/effect/turf_decal/stripes/line, /turf/open/floor/plasteel, /area/quartermaster/storage) "aYR" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/machinery/light_switch{ - pixel_x = 27 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 6 +/obj/machinery/power/apc{ + name = "Cargo Bay APC"; + pixel_y = 0; + areastring = "/area/quartermaster/storage"; + pixel_x = 29 }, /obj/structure/cable, /turf/open/floor/plasteel, /area/quartermaster/storage) "aYS" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/security/checkpoint/supply) -"aYT" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/structure/disposalpipe/segment, -/obj/machinery/door/airlock/maintenance{ - req_one_access_txt = "12;63;48;50" +/obj/structure/table/reinforced, +/obj/effect/turf_decal/trimline/brown/filled/line, +/obj/effect/turf_decal/trimline/brown/filled/line, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 1 }, -/turf/open/floor/plating, -/area/maintenance/port/fore) +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 1 + }, +/obj/machinery/door/window/westleft{ + dir = 2; + name = "Cargo Desk"; + req_access_txt = "50" + }, +/obj/machinery/door/window/southright{ + name = "Cargo Desk"; + req_access_txt = "50" + }, +/turf/open/floor/plasteel, +/area/quartermaster/sorting) "aYU" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/effect/turf_decal/tile/neutral{ dir = 1 }, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 8 + }, /turf/open/floor/plasteel, /area/hallway/primary/central) "aYV" = ( @@ -22951,6 +22375,9 @@ dir = 1 }, /obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, /turf/open/floor/plasteel, /area/hallway/primary/central) "aYW" = ( @@ -22958,6 +22385,9 @@ dir = 9 }, /obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 10 + }, /turf/open/floor/plasteel, /area/hallway/primary/central) "aYY" = ( @@ -22966,6 +22396,9 @@ location = "2.2-Leaving-Storage" }, /obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/plasteel, /area/hallway/primary/central) "aYZ" = ( @@ -22981,6 +22414,9 @@ "aZc" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on, /obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/plasteel, /area/hallway/primary/central) "aZd" = ( @@ -22991,6 +22427,9 @@ "aZe" = ( /obj/machinery/holopad, /obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/plasteel, /area/hallway/primary/central) "aZg" = ( @@ -22998,6 +22437,9 @@ icon_state = "L2" }, /obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/plasteel, /area/hallway/primary/central) "aZh" = ( @@ -23005,6 +22447,9 @@ icon_state = "L4" }, /obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/plasteel, /area/hallway/primary/central) "aZi" = ( @@ -23017,6 +22462,9 @@ icon_state = "L6" }, /obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, /turf/open/floor/plasteel, /area/hallway/primary/central) "aZk" = ( @@ -23559,254 +23007,139 @@ /turf/open/floor/plating, /area/maintenance/starboard/fore) "bak" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Cargo Bay Maintenance"; - req_one_access_txt = "31;48" +/obj/effect/turf_decal/bot_white/right, +/obj/effect/turf_decal/arrows/red{ + dir = 4 }, +/obj/effect/spawner/lootdrop/maintenance, /obj/structure/cable, -/turf/open/floor/plating, -/area/maintenance/port/fore) +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel, +/area/quartermaster/storage) "bal" = ( -/obj/item/radio/intercom{ - pixel_y = -28 +/obj/effect/turf_decal/bot_white/right, +/obj/effect/turf_decal/arrows/red{ + dir = 4 }, -/obj/effect/turf_decal/delivery, -/obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel, /area/quartermaster/storage) "bam" = ( -/obj/effect/turf_decal/delivery, -/obj/structure/cable, -/turf/open/floor/plasteel, -/area/quartermaster/storage) -"ban" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 10 - }, -/obj/machinery/door/window/southleft{ - name = "Cargo Disposal"; - req_access_txt = "50" - }, -/obj/structure/window/reinforced{ - dir = 8 +/obj/structure/chair/office{ + dir = 4 }, +/mob/living/simple_animal/sloth/citrus, +/obj/structure/disposalpipe/segment, /turf/open/floor/plasteel, /area/quartermaster/storage) "bao" = ( -/obj/machinery/conveyor_switch/oneway{ - id = "packageSort2"; - pixel_x = -8; - pixel_y = -2 - }, -/obj/effect/turf_decal/stripes/line, -/turf/open/floor/plasteel, -/area/quartermaster/storage) +/obj/effect/spawner/structure/window, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plating, +/area/quartermaster/qm) "bap" = ( -/obj/structure/rack, -/obj/item/stack/packageWrap{ - pixel_x = 2; - pixel_y = -3 +/obj/machinery/door/airlock/mining/glass{ + name = "Quartermaster"; + req_access_txt = "41" }, -/obj/item/stack/packageWrap{ - pixel_x = 2; - pixel_y = -3 - }, -/obj/item/stack/packageWrap{ - pixel_x = 2; - pixel_y = -3 - }, -/obj/item/stack/packageWrap{ - pixel_x = 2; - pixel_y = -3 - }, -/obj/item/stack/packageWrap{ - pixel_x = 2; - pixel_y = -3 - }, -/obj/item/stack/wrapping_paper, -/obj/item/stack/wrapping_paper, -/obj/item/destTagger{ - pixel_x = 4; - pixel_y = 3 - }, -/obj/effect/turf_decal/stripes/line, -/turf/open/floor/plasteel, -/area/quartermaster/storage) -"baq" = ( -/obj/structure/rack, -/obj/machinery/power/apc{ - areastring = "/area/quartermaster/storage"; - name = "Cargo Bay APC"; - pixel_x = 1; - pixel_y = -23 - }, -/obj/machinery/light, -/obj/item/hand_labeler, -/obj/item/hand_labeler, -/obj/item/screwdriver{ - pixel_y = 10 - }, -/obj/effect/turf_decal/stripes/line, /obj/structure/cable, +/obj/machinery/door/firedoor, /turf/open/floor/plasteel, -/area/quartermaster/storage) +/area/quartermaster/qm) "bar" = ( -/obj/effect/turf_decal/stripes/line, -/obj/machinery/vending/wardrobe/cargo_wardrobe, -/turf/open/floor/plasteel, -/area/quartermaster/storage) -"bas" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/stripes/line{ - dir = 6 - }, -/obj/machinery/vending/wardrobe/cargo_wardrobe, -/turf/open/floor/plasteel, -/area/quartermaster/storage) +/obj/effect/spawner/structure/window, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plating, +/area/quartermaster/qm) "bat" = ( -/turf/closed/wall, -/area/quartermaster/office) +/obj/machinery/conveyor{ + dir = 1; + id = "packageExternal" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/door/window/westleft{ + dir = 2; + name = "Crate Security Door"; + req_access_txt = "50" + }, +/turf/open/floor/plasteel, +/area/quartermaster/storage) "bau" = ( /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/mining{ - name = "Cargo Bay"; - req_one_access_txt = "31;48" - }, -/obj/effect/turf_decal/delivery, /turf/open/floor/plasteel, -/area/quartermaster/office) +/area/quartermaster/storage) "bav" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/mining{ - name = "Cargo Bay"; - req_one_access_txt = "31;48" +/obj/machinery/light_switch{ + pixel_x = 27 }, -/obj/effect/turf_decal/delivery, /obj/structure/cable, /turf/open/floor/plasteel, -/area/quartermaster/office) +/area/quartermaster/storage) "baw" = ( -/obj/structure/noticeboard{ - desc = "A board for pinning important notices upon. Probably helpful for keeping track of requests."; - name = "requests board"; - pixel_x = 32; - pixel_y = 32 - }, -/obj/machinery/requests_console{ - department = "Cargo Bay"; - departmentType = 2; - pixel_y = 30 - }, -/obj/machinery/computer/bounty, -/obj/effect/turf_decal/tile/brown{ - dir = 1 - }, -/obj/effect/turf_decal/tile/brown{ +/obj/effect/turf_decal/trimline/brown/filled/line, +/obj/effect/turf_decal/trimline/brown/filled/line, +/obj/structure/filingcabinet/filingcabinet, +/turf/open/floor/plasteel, +/area/quartermaster/sorting) +"bax" = ( +/obj/machinery/computer/cargo{ dir = 4 }, -/obj/effect/turf_decal/tile/brown{ +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 6 + }, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel, +/area/quartermaster/sorting) +"bay" = ( +/obj/structure/chair/office{ + dir = 1 + }, +/obj/effect/landmark/start/cargo_technician, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel, +/area/quartermaster/sorting) +"baA" = ( +/obj/machinery/computer/bounty{ dir = 8 }, -/turf/open/floor/plasteel, -/area/quartermaster/office) -"bax" = ( -/obj/machinery/computer/cargo, -/obj/effect/turf_decal/tile/brown{ - dir = 1 +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 10 }, -/obj/effect/turf_decal/tile/brown, -/obj/effect/turf_decal/tile/brown{ - dir = 4 +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 10 }, /turf/open/floor/plasteel, -/area/quartermaster/office) -"bay" = ( -/obj/structure/sign/directions/supply{ - pixel_y = -5 - }, -/turf/closed/wall, -/area/quartermaster/office) -"baz" = ( -/obj/machinery/computer/cargo/request, -/obj/effect/turf_decal/delivery, -/turf/open/floor/plasteel, -/area/hallway/primary/port) -"baA" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on, -/obj/machinery/status_display/supply{ - pixel_y = 32 - }, -/obj/structure/table, -/obj/item/folder/yellow, -/obj/effect/turf_decal/tile/brown{ - dir = 1 - }, -/obj/effect/turf_decal/tile/brown{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/hallway/primary/port) +/area/quartermaster/sorting) "baB" = ( -/obj/machinery/firealarm{ - pixel_y = 24 - }, -/obj/effect/turf_decal/tile/brown{ - dir = 1 - }, -/obj/effect/turf_decal/tile/brown{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/hallway/primary/port) -"baC" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/effect/turf_decal/tile/brown{ - dir = 1 - }, -/obj/effect/turf_decal/tile/brown{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/hallway/primary/port) -"baD" = ( -/obj/machinery/airalarm{ - pixel_y = 23 - }, +/obj/effect/turf_decal/trimline/brown/filled/line, +/obj/effect/turf_decal/trimline/brown/filled/line, /obj/structure/table, -/obj/item/paper_bin{ - pixel_x = -3; - pixel_y = 7 +/obj/item/storage/box/lights/mixed{ + pixel_y = 11; + pixel_x = 11 }, -/obj/effect/turf_decal/tile/brown{ - dir = 1 - }, -/obj/effect/turf_decal/tile/brown, -/obj/effect/turf_decal/tile/brown{ - dir = 4 +/obj/item/multitool{ + pixel_y = -4; + pixel_x = -3 }, /turf/open/floor/plasteel, -/area/hallway/primary/port) +/area/quartermaster/sorting) "baE" = ( /turf/closed/wall, /area/hallway/primary/port) "baF" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/structure/extinguisher_cabinet{ - pixel_x = -27 - }, -/obj/machinery/light{ +/obj/effect/turf_decal/trimline/brown/filled/corner{ dir = 8 }, -/obj/machinery/camera{ - c_tag = "Central Primary Hallway - Fore - Port Corner"; - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 +/obj/effect/turf_decal/trimline/brown/filled/corner{ + dir = 8 }, /turf/open/floor/plasteel, /area/hallway/primary/central) @@ -23816,20 +23149,25 @@ /turf/open/floor/plasteel, /area/hallway/primary/central) "baH" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ +/obj/effect/turf_decal/tile/neutral, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ dir = 6 }, -/obj/effect/turf_decal/tile/neutral, /turf/open/floor/plasteel, /area/hallway/primary/central) "baJ" = ( -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, /obj/effect/turf_decal/tile/neutral, /mob/living/simple_animal/bot/cleanbot{ auto_patrol = 1; icon_state = "cleanbot1"; name = "Mopficcer Sweepsky" }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, /turf/open/floor/plasteel, /area/hallway/primary/central) "baK" = ( @@ -23846,6 +23184,9 @@ }, /obj/machinery/light, /obj/effect/turf_decal/tile/neutral, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, /turf/open/floor/plasteel, /area/hallway/primary/central) "baM" = ( @@ -23857,6 +23198,9 @@ pixel_y = -22 }, /obj/effect/turf_decal/tile/neutral, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/plasteel, /area/hallway/primary/central) "baN" = ( @@ -23865,6 +23209,9 @@ /obj/structure/extinguisher_cabinet{ pixel_y = -30 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/plasteel, /area/hallway/primary/central) "baO" = ( @@ -23874,6 +23221,9 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/effect/turf_decal/tile/neutral, /obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/plasteel, /area/hallway/primary/central) "baP" = ( @@ -23883,6 +23233,9 @@ }, /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, /obj/effect/turf_decal/tile/neutral, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/plasteel, /area/hallway/primary/central) "baQ" = ( @@ -23895,6 +23248,9 @@ "baR" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, /obj/effect/turf_decal/tile/neutral, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/plasteel, /area/hallway/primary/central) "baS" = ( @@ -23902,6 +23258,9 @@ dir = 4 }, /obj/machinery/holopad, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/plasteel, /area/hallway/primary/central) "baT" = ( @@ -23911,6 +23270,9 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/plasteel, /area/hallway/primary/central) "baU" = ( @@ -23924,6 +23286,9 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/plasteel, /area/hallway/primary/central) "baV" = ( @@ -23937,6 +23302,9 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/plasteel, /area/hallway/primary/central) "baW" = ( @@ -23947,6 +23315,9 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/plasteel, /area/hallway/primary/central) "baX" = ( @@ -23961,6 +23332,9 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/plasteel, /area/hallway/primary/central) "baY" = ( @@ -23971,6 +23345,9 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/plasteel, /area/hallway/primary/central) "baZ" = ( @@ -23984,6 +23361,9 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/plasteel, /area/hallway/primary/central) "bba" = ( @@ -23992,6 +23372,9 @@ }, /obj/structure/disposalpipe/segment, /obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/plasteel, /area/hallway/primary/central) "bbb" = ( @@ -24003,6 +23386,9 @@ /obj/effect/turf_decal/tile/neutral{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, /turf/open/floor/plasteel, /area/hallway/primary/central) "bbc" = ( @@ -24447,132 +23833,71 @@ /turf/open/floor/plating, /area/maintenance/port/fore) "bbN" = ( -/obj/effect/spawner/structure/window/reinforced, -/turf/open/floor/plating, -/area/quartermaster/office) -"bbO" = ( -/obj/structure/plasticflaps/opaque, -/obj/machinery/conveyor{ - backwards = 1; - forwards = 2; - id = "packageSort2" +/obj/structure/table, +/obj/effect/turf_decal/trimline/brown/filled/line, +/obj/effect/turf_decal/trimline/brown/filled/line, +/obj/item/stack/packageWrap{ + pixel_x = 2; + pixel_y = -3 }, -/obj/effect/turf_decal/loading_area, -/turf/open/floor/plating, -/area/quartermaster/sorting) -"bbP" = ( -/obj/structure/disposalpipe/segment, -/turf/closed/wall, +/obj/item/stack/packageWrap{ + pixel_y = 5; + pixel_x = -3 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel, /area/quartermaster/sorting) "bbQ" = ( +/obj/effect/spawner/structure/window, /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/machinery/power/apc{ - areastring = "/area/quartermaster/office"; - dir = 8; - name = "Cargo Office APC"; - pixel_x = -25 - }, -/obj/effect/turf_decal/tile/brown{ - dir = 1 - }, -/obj/effect/turf_decal/tile/brown{ - dir = 4 - }, -/obj/effect/turf_decal/tile/brown{ - dir = 8 - }, -/obj/structure/cable, -/turf/open/floor/plasteel, -/area/quartermaster/office) +/turf/open/floor/plating, +/area/quartermaster/sorting) "bbR" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/effect/turf_decal/tile/brown{ - dir = 1 +/obj/machinery/door/airlock/mining{ + name = "Deliveries"; + req_one_access_txt = "31;48" }, -/obj/effect/turf_decal/tile/brown{ - dir = 4 +/obj/structure/cable, +/obj/machinery/door/firedoor, +/turf/open/floor/plasteel, +/area/quartermaster/sorting) +"bbT" = ( +/obj/machinery/light{ + dir = 8 }, /obj/structure/cable, /turf/open/floor/plasteel, -/area/quartermaster/office) -"bbS" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on, -/obj/machinery/status_display/supply{ - pixel_y = 32 - }, -/obj/effect/turf_decal/tile/brown{ - dir = 1 - }, -/obj/effect/turf_decal/tile/brown{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/quartermaster/office) -"bbT" = ( -/obj/effect/turf_decal/tile/brown{ - dir = 1 - }, -/turf/open/floor/plasteel, -/area/quartermaster/office) +/area/quartermaster/sorting) "bbU" = ( -/obj/effect/landmark/start/cargo_technician, -/obj/structure/chair/office{ - dir = 4 - }, -/obj/effect/turf_decal/tile/brown, -/obj/effect/turf_decal/tile/brown{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/quartermaster/office) -"bbV" = ( -/obj/structure/table/reinforced, -/obj/machinery/door/firedoor, -/obj/machinery/door/window/westleft{ - name = "Cargo Desk"; - req_access_txt = "50" - }, -/obj/item/paper_bin{ - pixel_x = -3; - pixel_y = 7 - }, -/obj/item/pen, -/turf/open/floor/plasteel, -/area/quartermaster/office) -"bbW" = ( -/obj/effect/turf_decal/delivery, -/turf/open/floor/plasteel, -/area/hallway/primary/port) -"bbX" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel, -/area/hallway/primary/port) +/area/quartermaster/sorting) +"bbV" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 5 + }, +/turf/open/floor/plasteel, +/area/quartermaster/sorting) "bbY" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, /turf/open/floor/plasteel, -/area/hallway/primary/port) +/area/quartermaster/sorting) "bbZ" = ( +/obj/machinery/newscaster{ + pixel_y = 34; + pixel_x = 1 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 10 + }, /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/item/kirbyplants/random, /turf/open/floor/plasteel, -/area/hallway/primary/port) -"bca" = ( -/obj/structure/chair{ - dir = 8 - }, -/obj/machinery/light{ - dir = 4 - }, -/obj/machinery/camera{ - c_tag = "Cargo - Foyer"; - dir = 8 - }, -/obj/effect/turf_decal/tile/brown, -/obj/effect/turf_decal/tile/brown{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/hallway/primary/port) +/area/quartermaster/sorting) "bcb" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/status_display/evac{ @@ -24581,6 +23906,12 @@ /obj/effect/turf_decal/tile/neutral{ dir = 1 }, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 8 + }, /turf/open/floor/plasteel, /area/hallway/primary/central) "bcc" = ( @@ -24630,6 +23961,7 @@ /obj/effect/turf_decal/tile/neutral{ dir = 4 }, +/obj/structure/disposalpipe/segment, /turf/open/floor/plasteel, /area/hallway/primary/central) "bcn" = ( @@ -25120,172 +24452,166 @@ /obj/machinery/space_heater, /turf/open/floor/plating, /area/maintenance/port/fore) -"bdf" = ( -/obj/structure/disposalpipe/segment{ - dir = 6 +"bdi" = ( +/obj/structure/closet/secure_closet/quartermaster, +/obj/machinery/airalarm{ + pixel_y = 23 }, -/turf/closed/wall, -/area/quartermaster/sorting) -"bdg" = ( -/obj/structure/disposalpipe/trunk{ - dir = 8 - }, -/obj/machinery/conveyor{ - dir = 4; - id = "packageSort2" - }, -/obj/structure/disposaloutlet{ +/obj/machinery/camera/autoname, +/turf/open/floor/wood, +/area/quartermaster/qm) +"bdl" = ( +/obj/structure/plasticflaps, +/obj/structure/window/reinforced{ dir = 4 }, -/turf/open/floor/plating, -/area/quartermaster/sorting) -"bdh" = ( -/obj/machinery/conveyor{ - dir = 4; - id = "packageSort2" - }, -/obj/effect/spawner/lootdrop/maintenance, -/turf/open/floor/plating, -/area/quartermaster/sorting) -"bdi" = ( -/obj/machinery/conveyor{ - dir = 4; - id = "packageSort2" - }, -/turf/open/floor/plating, -/area/quartermaster/sorting) -"bdj" = ( -/obj/machinery/conveyor{ - dir = 4; - id = "packageSort2" - }, -/obj/structure/plasticflaps, -/turf/open/floor/plating, -/area/quartermaster/sorting) -"bdk" = ( -/obj/structure/disposalpipe/trunk{ - dir = 1 +/obj/structure/window/reinforced{ + dir = 8 }, /obj/machinery/disposal/deliveryChute{ - dir = 8 + dir = 2 }, /obj/effect/turf_decal/stripes/line{ dir = 4 }, -/turf/open/floor/plating, -/area/quartermaster/sorting) -"bdl" = ( -/obj/structure/disposalpipe/segment{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/structure/extinguisher_cabinet{ - pixel_x = -27 - }, -/obj/effect/turf_decal/tile/brown{ +/obj/structure/disposalpipe/trunk{ dir = 1 }, -/obj/effect/turf_decal/tile/brown{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/quartermaster/office) -"bdm" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plating, +/area/quartermaster/sorting) +"bdo" = ( /obj/structure/cable, /turf/open/floor/plasteel, -/area/quartermaster/office) -"bdn" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/quartermaster/office) -"bdo" = ( -/obj/structure/disposalpipe/segment{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/quartermaster/office) +/area/quartermaster/sorting) "bdp" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 +/obj/structure/table, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 9 }, -/obj/structure/table/reinforced, -/obj/item/stamp/denied{ - pixel_x = 4; - pixel_y = -2 +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 9 }, -/obj/item/stamp{ - pixel_x = -3; - pixel_y = 3 +/obj/item/hand_labeler{ + pixel_y = 11 }, -/obj/item/pen/red, -/obj/effect/turf_decal/tile/brown, -/obj/effect/turf_decal/tile/brown{ - dir = 4 +/obj/item/stack/packageWrap{ + pixel_x = 2; + pixel_y = -3 }, +/obj/item/stack/packageWrap{ + pixel_x = 2; + pixel_y = -3 + }, +/obj/item/hand_labeler_refill{ + pixel_y = 3; + pixel_x = -8 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel, -/area/quartermaster/office) +/area/quartermaster/sorting) "bdq" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 +/obj/structure/table, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 1 }, -/turf/open/floor/plating, -/area/quartermaster/office) +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 1 + }, +/obj/item/stack/packageWrap{ + pixel_y = 9; + pixel_x = -7 + }, +/obj/item/destTagger{ + pixel_y = -2; + pixel_x = 4 + }, +/turf/open/floor/plasteel, +/area/quartermaster/sorting) "bdr" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 +/obj/structure/table, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 1 + }, +/obj/item/stack/packageWrap{ + pixel_y = -9; + pixel_x = -9 + }, +/obj/item/paper_bin{ + pixel_x = 1; + pixel_y = 9 }, -/obj/effect/turf_decal/bot, /turf/open/floor/plasteel, -/area/hallway/primary/port) +/area/quartermaster/sorting) "bds" = ( -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ - dir = 4 +/obj/structure/table, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 5 + }, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 5 + }, +/obj/item/folder/yellow{ + pixel_y = 1; + pixel_x = 3 + }, +/obj/item/folder/yellow{ + pixel_y = 3; + pixel_x = 3 + }, +/obj/item/folder/yellow{ + pixel_y = 6; + pixel_x = 3 }, /turf/open/floor/plasteel, -/area/hallway/primary/port) +/area/quartermaster/sorting) "bdt" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on{ - dir = 4 - }, +/obj/machinery/atmospherics/components/unary/vent_pump/on, /turf/open/floor/plasteel, -/area/hallway/primary/port) +/area/quartermaster/sorting) "bdu" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ - dir = 4 +/turf/open/floor/plasteel, +/area/quartermaster/sorting) +"bdv" = ( +/obj/machinery/airalarm{ + pixel_y = 23 + }, +/obj/machinery/light{ + dir = 1 }, /turf/open/floor/plasteel, -/area/hallway/primary/port) -"bdv" = ( -/obj/structure/chair{ +/area/quartermaster/sorting) +"bdw" = ( +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/brown/filled/line{ dir = 8 }, -/obj/effect/turf_decal/tile/brown, -/obj/effect/turf_decal/tile/brown{ +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 8 + }, +/obj/machinery/computer/cargo/request{ dir = 4 }, +/obj/structure/window/reinforced{ + dir = 8 + }, /turf/open/floor/plasteel, -/area/hallway/primary/port) -"bdw" = ( -/obj/effect/spawner/structure/window, -/turf/open/floor/plating, -/area/hallway/primary/port) +/area/quartermaster/sorting) "bdx" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/effect/turf_decal/tile/brown{ +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/brown/filled/line{ dir = 8 }, /turf/open/floor/plasteel, @@ -25358,6 +24684,7 @@ /obj/effect/turf_decal/tile/neutral{ dir = 1 }, +/obj/structure/disposalpipe/segment, /turf/open/floor/plasteel, /area/vacant_room/commissary) "bdE" = ( @@ -25462,6 +24789,7 @@ /obj/effect/turf_decal/tile/neutral{ dir = 4 }, +/obj/structure/disposalpipe/segment, /turf/open/floor/plasteel, /area/hallway/primary/central) "bdR" = ( @@ -25924,115 +25252,133 @@ /area/maintenance/port/fore) "beU" = ( /obj/machinery/door/airlock/maintenance{ - name = "Mailroom Maintenance"; - req_access_txt = "50" + name = "Quartermaster Maintenance"; + req_one_access_txt = "41" }, -/obj/structure/disposalpipe/segment, /turf/open/floor/plating, -/area/maintenance/port/fore) +/area/quartermaster/qm) "beV" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/turf/open/floor/plasteel, -/area/quartermaster/sorting) -"beW" = ( -/obj/structure/chair/stool, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/turf/open/floor/plasteel, -/area/quartermaster/sorting) -"beX" = ( -/obj/machinery/conveyor_switch/oneway{ - id = "packageSort2"; - pixel_x = -2; - pixel_y = 12 - }, -/obj/machinery/light{ - dir = 4 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/turf/open/floor/plasteel, -/area/quartermaster/sorting) -"beY" = ( -/obj/machinery/airalarm{ - dir = 4; - pixel_x = -22 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/machinery/light{ - dir = 8 - }, -/obj/machinery/camera{ - c_tag = "Cargo - Office"; - dir = 4 - }, -/obj/effect/turf_decal/tile/brown{ - dir = 1 - }, -/obj/effect/turf_decal/tile/brown{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/quartermaster/office) -"beZ" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 5 - }, /obj/structure/cable, -/turf/open/floor/plasteel, -/area/quartermaster/office) -"bfa" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/wood, +/area/quartermaster/qm) +"beW" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 9 }, -/turf/open/floor/plasteel, -/area/quartermaster/office) -"bfb" = ( /obj/structure/disposalpipe/segment, +/turf/open/floor/wood, +/area/quartermaster/qm) +"beX" = ( +/obj/machinery/holopad, +/obj/structure/cable, +/turf/open/floor/wood, +/area/quartermaster/qm) +"beZ" = ( +/obj/structure/chair/stool, /turf/open/floor/plasteel, -/area/quartermaster/office) +/area/quartermaster/sorting) +"bfa" = ( +/obj/machinery/holopad, +/turf/open/floor/plasteel, +/area/quartermaster/sorting) +"bfb" = ( +/obj/machinery/atmospherics/components/unary/vent_scrubber/on, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/turf/open/floor/plasteel, +/area/quartermaster/sorting) "bfc" = ( -/obj/structure/filingcabinet/filingcabinet, -/obj/effect/turf_decal/tile/brown, -/obj/effect/turf_decal/tile/brown{ +/obj/structure/table, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 10 + }, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 10 + }, +/obj/item/stack/wrapping_paper, +/obj/item/stack/wrapping_paper{ + pixel_y = 5; + pixel_x = -3 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/disposalpipe/segment{ dir = 4 }, /turf/open/floor/plasteel, -/area/quartermaster/office) +/area/quartermaster/sorting) "bfd" = ( -/obj/effect/turf_decal/bot, +/obj/structure/table, +/obj/effect/turf_decal/trimline/brown/filled/line, +/obj/effect/turf_decal/trimline/brown/filled/line, +/obj/item/stack/packageWrap{ + pixel_y = -3; + pixel_x = -8 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/item/paperslip{ + pixel_y = 10; + pixel_x = -5 + }, /turf/open/floor/plasteel, -/area/hallway/primary/port) +/area/quartermaster/sorting) "bff" = ( -/obj/effect/turf_decal/tile/brown{ +/obj/structure/chair/office{ + dir = 4 + }, +/obj/effect/landmark/start/cargo_technician, +/obj/structure/disposalpipe/segment{ dir = 4 }, /turf/open/floor/plasteel, -/area/hallway/primary/port) +/area/quartermaster/sorting) "bfg" = ( -/obj/machinery/door/firedoor, -/obj/effect/turf_decal/tile/brown{ - dir = 1 +/obj/structure/table/reinforced, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 4 }, -/obj/effect/turf_decal/tile/brown{ +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 8 + }, +/obj/machinery/door/window/westright{ + name = "Cargo Desk"; + req_access_txt = "50" + }, +/obj/effect/spawner/lootdrop/maintenance, +/obj/structure/disposalpipe/segment{ dir = 4 }, /turf/open/floor/plasteel, -/area/hallway/primary/port) +/area/quartermaster/sorting) "bfh" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/effect/turf_decal/tile/brown{ - dir = 1 +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 }, /turf/open/floor/plasteel, /area/hallway/primary/central) "bfi" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/effect/turf_decal/tile/neutral, +/obj/structure/disposalpipe/segment, /turf/open/floor/plasteel, /area/hallway/primary/central) "bfj" = ( @@ -26080,6 +25426,7 @@ }, /obj/effect/turf_decal/tile/neutral, /obj/structure/cable, +/obj/structure/disposalpipe/segment, /turf/open/floor/plasteel, /area/vacant_room/commissary) "bfn" = ( @@ -26183,6 +25530,7 @@ /obj/effect/turf_decal/tile/yellow{ dir = 4 }, +/obj/structure/disposalpipe/segment, /turf/open/floor/plasteel, /area/hallway/primary/central) "bfG" = ( @@ -26603,223 +25951,152 @@ }, /turf/open/floor/plating, /area/maintenance/port/fore) -"bgE" = ( -/obj/structure/disposalpipe/sorting/wrap{ - dir = 1 - }, -/turf/closed/wall, -/area/quartermaster/sorting) "bgF" = ( -/obj/structure/disposaloutlet{ - dir = 4 +/obj/structure/table/wood, +/obj/item/paper_bin/carbon{ + pixel_y = 4; + pixel_x = -10 }, -/obj/structure/disposalpipe/trunk{ - dir = 8 +/obj/item/paper_bin/carbon{ + pixel_y = 9; + pixel_x = -10 }, -/obj/structure/window/reinforced{ - dir = 1 +/obj/item/cartridge/quartermaster{ + pixel_y = 0; + pixel_x = 9 }, -/obj/structure/window/reinforced, -/obj/structure/window/reinforced{ +/obj/item/cartridge/quartermaster{ + pixel_y = 11; + pixel_x = 5 + }, +/obj/item/cartridge/quartermaster{ + pixel_y = 4; + pixel_x = 8 + }, +/turf/open/floor/wood, +/area/quartermaster/qm) +"bgG" = ( +/obj/structure/table/wood, +/turf/open/floor/wood, +/area/quartermaster/qm) +"bgH" = ( +/obj/structure/table/wood, +/turf/open/floor/wood{ + icon_state = "wood-broken6" + }, +/area/quartermaster/qm) +"bgI" = ( +/obj/structure/table/wood, +/obj/item/stamp{ + pixel_y = 9; + pixel_x = 7 + }, +/obj/item/stamp/denied{ + pixel_y = 4; + pixel_x = 7 + }, +/obj/item/stamp/qm{ + pixel_y = -2; + pixel_x = 7 + }, +/obj/item/clipboard{ + pixel_y = 4; + pixel_x = -6 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/wood, +/area/quartermaster/qm) +"bgJ" = ( +/turf/open/floor/wood{ + icon_state = "wood-broken7" + }, +/area/quartermaster/qm) +"bgK" = ( +/turf/open/floor/carpet/red, +/area/quartermaster/qm) +"bgL" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/carpet/red, +/area/quartermaster/qm) +"bgN" = ( +/obj/machinery/conveyor{ + dir = 1; + id = "packageExternal" + }, +/obj/effect/turf_decal/stripes/line{ dir = 8 }, /turf/open/floor/plating, -/area/quartermaster/sorting) -"bgG" = ( -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/structure/window/reinforced, -/obj/machinery/door/window/eastleft{ - name = "Mail"; - req_access_txt = "50" - }, -/obj/effect/turf_decal/delivery, -/turf/open/floor/plasteel, -/area/quartermaster/sorting) -"bgH" = ( -/obj/effect/turf_decal/loading_area{ - dir = 4 - }, -/turf/open/floor/plasteel, -/area/quartermaster/sorting) -"bgI" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on, -/turf/open/floor/plasteel, -/area/quartermaster/sorting) -"bgJ" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 6 - }, -/turf/open/floor/plasteel, -/area/quartermaster/sorting) -"bgK" = ( -/obj/machinery/firealarm{ - pixel_y = 24 - }, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ - dir = 1 - }, -/turf/open/floor/plasteel, -/area/quartermaster/sorting) -"bgL" = ( -/obj/machinery/status_display/supply{ - pixel_y = 32 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/structure/cable, -/turf/open/floor/plasteel, -/area/quartermaster/sorting) -"bgM" = ( -/obj/machinery/light_switch{ - pixel_y = 28 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/structure/cable, -/turf/open/floor/plasteel, -/area/quartermaster/sorting) -"bgN" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/mining/glass{ - name = "Mailroom"; - req_access_txt = "50" - }, -/obj/effect/turf_decal/delivery, -/obj/structure/cable, -/turf/open/floor/plasteel, -/area/quartermaster/sorting) -"bgO" = ( -/obj/machinery/atmospherics/pipe/manifold/supply/hidden, -/obj/effect/turf_decal/tile/brown{ - dir = 1 - }, -/obj/effect/turf_decal/tile/brown{ - dir = 8 - }, -/obj/structure/cable, -/turf/open/floor/plasteel, -/area/quartermaster/office) +/area/quartermaster/qm) "bgP" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 +/obj/machinery/conveyor_switch/oneway{ + id = "packageSort2"; + name = "Sort and Deliver"; + pixel_x = -2; + pixel_y = 12 + }, +/obj/machinery/conveyor_switch/oneway{ + dir = 8; + id = "packageExternal"; + name = "Crate Returns"; + pixel_x = -5; + pixel_y = -3 }, -/obj/effect/landmark/event_spawn, -/obj/structure/cable, /turf/open/floor/plasteel, -/area/quartermaster/office) +/area/quartermaster/sorting) "bgQ" = ( -/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ - dir = 1 - }, -/obj/structure/cable, /turf/open/floor/plasteel, -/area/quartermaster/office) +/area/quartermaster/sorting) "bgR" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/landmark/start/cargo_technician, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 5 }, -/obj/structure/cable, +/obj/structure/disposalpipe/segment, /turf/open/floor/plasteel, -/area/quartermaster/office) +/area/quartermaster/sorting) "bgS" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 9 + }, /obj/structure/disposalpipe/segment{ dir = 6 }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/effect/turf_decal/tile/brown, -/obj/effect/turf_decal/tile/brown{ - dir = 4 - }, -/obj/structure/cable, /turf/open/floor/plasteel, -/area/quartermaster/office) -"bgT" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/mining/glass{ - name = "Cargo Office"; - req_one_access_txt = "31;48" - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/effect/turf_decal/delivery, -/obj/structure/cable, -/obj/machinery/navbeacon/wayfinding, -/turf/open/floor/plasteel, -/area/quartermaster/office) -"bgU" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/effect/turf_decal/tile/brown{ - dir = 1 - }, -/obj/effect/turf_decal/tile/brown{ - dir = 8 - }, -/obj/structure/cable, -/turf/open/floor/plasteel, -/area/hallway/primary/port) -"bgV" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/structure/cable, -/turf/open/floor/plasteel, -/area/hallway/primary/port) -"bgW" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 - }, -/obj/structure/cable, -/turf/open/floor/plasteel, -/area/hallway/primary/port) -"bgX" = ( -/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ - dir = 4 - }, -/obj/structure/disposalpipe/junction{ - dir = 2 - }, -/obj/structure/cable, -/turf/open/floor/plasteel, -/area/hallway/primary/port) +/area/quartermaster/sorting) "bgY" = ( -/obj/effect/turf_decal/tile/brown, -/turf/open/floor/plasteel, -/area/hallway/primary/port) -"bgZ" = ( -/obj/machinery/door/firedoor, -/obj/effect/turf_decal/tile/brown, -/obj/effect/turf_decal/tile/brown{ - dir = 8 +/obj/structure/disposalpipe/segment{ + dir = 4 }, /turf/open/floor/plasteel, -/area/hallway/primary/port) +/area/quartermaster/sorting) +"bgZ" = ( +/obj/structure/table/reinforced, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 8 + }, +/obj/machinery/door/window/westleft{ + name = "Cargo Desk"; + req_access_txt = "50" + }, +/obj/item/newspaper, +/obj/item/paper_bin{ + pixel_y = 9; + pixel_x = -3 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/quartermaster/sorting) "bha" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/table/reinforced, @@ -26834,6 +26111,9 @@ /obj/effect/turf_decal/stripes/line{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/plasteel, /area/vacant_room/commissary) "bhb" = ( @@ -26845,11 +26125,17 @@ /obj/effect/turf_decal/tile/neutral{ dir = 1 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/plasteel, /area/vacant_room/commissary) "bhc" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/plasteel, /area/vacant_room/commissary) "bhd" = ( @@ -26870,6 +26156,9 @@ }, /obj/effect/turf_decal/tile/neutral, /obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, /turf/open/floor/plasteel, /area/vacant_room/commissary) "bhe" = ( @@ -27115,6 +26404,9 @@ /obj/effect/turf_decal/tile/yellow{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, /turf/open/floor/plasteel, /area/hallway/primary/central) "bhD" = ( @@ -27128,6 +26420,9 @@ /obj/effect/turf_decal/tile/yellow{ dir = 1 }, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, /turf/open/floor/plasteel, /area/hallway/primary/starboard) "bhE" = ( @@ -27621,138 +26916,131 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/closed/wall, /area/maintenance/port/fore) -"biD" = ( -/obj/machinery/door/window/eastleft{ - base_state = "right"; - icon_state = "right"; - name = "Deliveries"; - req_access_txt = "50" - }, -/obj/effect/turf_decal/delivery, -/turf/open/floor/plasteel, -/area/quartermaster/sorting) "biE" = ( -/obj/machinery/conveyor_switch/oneway{ - dir = 8; - id = "packageExternal"; - pixel_y = 18 - }, -/obj/effect/turf_decal/loading_area{ +/obj/effect/spawner/structure/window, +/turf/open/floor/plating, +/area/quartermaster/qm) +"biG" = ( +/obj/machinery/computer/security/qm{ dir = 4 }, -/turf/open/floor/plasteel, -/area/quartermaster/sorting) -"biF" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/turf/open/floor/plasteel, -/area/quartermaster/sorting) -"biG" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/turf/open/floor/plasteel, -/area/quartermaster/sorting) +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/wood, +/area/quartermaster/qm) "biH" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on{ +/obj/effect/turf_decal/trimline/green/filled/line, +/obj/effect/turf_decal/trimline/brown/filled/warning, +/obj/effect/turf_decal/trimline/brown/filled/warning, +/turf/open/floor/plasteel, +/area/quartermaster/sorting) +"biI" = ( +/obj/machinery/firealarm{ + pixel_y = 0; + pixel_x = 30 + }, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 1 }, -/turf/open/floor/plasteel, -/area/quartermaster/office) -"biI" = ( -/obj/structure/chair/office{ +/turf/open/floor/wood, +/area/quartermaster/qm) +"biK" = ( +/obj/machinery/conveyor{ + dir = 1; + id = "packageSort2" + }, +/obj/effect/turf_decal/stripes/line{ dir = 4 }, -/obj/structure/cable, -/turf/open/floor/plasteel, +/turf/open/floor/plating, /area/quartermaster/sorting) -"biJ" = ( -/obj/structure/table, -/obj/machinery/light_switch{ - pixel_x = 27 +"biL" = ( +/obj/structure/rack, +/obj/effect/turf_decal/trimline/brown/filled/end{ + dir = 1 }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 +/obj/effect/turf_decal/trimline/brown/filled/end{ + dir = 1 }, /obj/item/storage/box/shipping, -/turf/open/floor/plasteel/white/corner, +/turf/open/floor/plasteel, /area/quartermaster/sorting) -"biK" = ( -/obj/structure/table, -/obj/item/clipboard, -/obj/item/folder/yellow, -/obj/item/folder/yellow, -/obj/item/multitool, -/obj/item/pen/red, -/obj/effect/turf_decal/tile/brown{ - dir = 1 - }, -/obj/effect/turf_decal/tile/brown{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/quartermaster/office) -"biL" = ( -/obj/structure/chair/office{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/quartermaster/office) "biM" = ( -/obj/machinery/disposal/bin, -/obj/structure/disposalpipe/trunk{ - dir = 1 - }, -/obj/machinery/light_switch{ - pixel_x = 27 - }, -/obj/machinery/light/small{ - dir = 4 - }, -/obj/effect/turf_decal/tile/brown, -/obj/effect/turf_decal/tile/brown{ - dir = 4 - }, +/obj/effect/turf_decal/trimline/yellow/filled/line, +/obj/effect/turf_decal/trimline/brown/filled/warning, +/obj/effect/turf_decal/trimline/brown/filled/warning, +/obj/structure/disposalpipe/segment, /turf/open/floor/plasteel, -/area/quartermaster/office) +/area/quartermaster/sorting) "biN" = ( -/obj/effect/turf_decal/tile/brown{ - dir = 1 - }, -/obj/effect/turf_decal/tile/brown{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/hallway/primary/port) -"biO" = ( -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/hallway/primary/port) -"biP" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ +/obj/effect/turf_decal/trimline/blue/filled/line, +/obj/effect/turf_decal/trimline/brown/filled/warning, +/obj/effect/turf_decal/trimline/brown/filled/warning, +/obj/structure/disposalpipe/segment{ dir = 4 }, /turf/open/floor/plasteel, -/area/hallway/primary/port) +/area/quartermaster/sorting) +"biO" = ( +/obj/machinery/autolathe, +/obj/effect/turf_decal/trimline/brown/filled/end{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/brown/filled/end{ + dir = 1 + }, +/obj/machinery/camera{ + c_tag = "Cargo - Mailroom"; + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/quartermaster/sorting) +"biP" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/item/kirbyplants/random, +/turf/open/floor/plasteel, +/area/quartermaster/sorting) "biQ" = ( /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ - dir = 8 - }, -/obj/structure/cable, -/turf/open/floor/plasteel, -/area/hallway/primary/port) -"biR" = ( -/obj/structure/chair{ - dir = 8 - }, -/obj/effect/landmark/start/assistant, -/obj/effect/turf_decal/tile/brown, -/obj/effect/turf_decal/tile/brown{ +/obj/structure/disposalpipe/segment{ dir = 4 }, /turf/open/floor/plasteel, -/area/hallway/primary/port) +/area/quartermaster/sorting) +"biR" = ( +/obj/structure/table/reinforced, +/obj/item/stamp/denied{ + pixel_x = 4; + pixel_y = -2 + }, +/obj/item/stamp{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 9 + }, +/obj/item/pen/red{ + pixel_y = 10 + }, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 9 + }, +/obj/item/destTagger{ + pixel_y = 10; + pixel_x = 9 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/quartermaster/sorting) "biT" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/button/door{ @@ -27954,6 +27242,7 @@ dir = 4 }, /obj/structure/cable, +/obj/structure/disposalpipe/segment, /turf/open/floor/plasteel, /area/hallway/primary/starboard) "bjp" = ( @@ -28249,300 +27538,166 @@ /turf/open/floor/plasteel, /area/hallway/primary/port) "bkf" = ( -/obj/structure/extinguisher_cabinet{ - pixel_x = 30 - }, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 10 - }, /obj/structure/sign/map/right{ desc = "A framed picture of the station. Clockwise from security at the top (red), you see engineering (yellow), science (purple), escape (red and white), medbay (green), arrivals (blue and white), and finally cargo (brown)."; icon_state = "map-right-MS"; pixel_y = 32 }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 10 }, /turf/open/floor/plasteel, /area/hallway/primary/port) "bkg" = ( -/obj/machinery/conveyor{ - dir = 1; - id = "packageExternal" +/obj/machinery/vending/cigarette, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/port) +"bkh" = ( +/obj/machinery/vending/cola/random, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/port) +"bki" = ( +/obj/structure/disposalpipe/segment, +/turf/closed/wall, +/area/quartermaster/qm) +"bkk" = ( +/obj/machinery/computer/bounty{ + dir = 1 + }, +/turf/open/floor/wood, +/area/quartermaster/qm) +"bkl" = ( +/obj/machinery/computer/cargo{ + dir = 1 + }, +/turf/open/floor/wood, +/area/quartermaster/qm) +"bkn" = ( +/obj/structure/disposaloutlet{ + dir = 1 }, -/obj/structure/plasticflaps/opaque, /obj/structure/window/reinforced{ dir = 4 }, /obj/structure/window/reinforced{ dir = 8 }, +/obj/structure/disposalpipe/trunk, /turf/open/floor/plating, /area/quartermaster/sorting) -"bkh" = ( -/obj/structure/table/reinforced, -/obj/item/folder/yellow, -/obj/item/pen{ - pixel_x = 4; - pixel_y = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/turf/open/floor/plasteel/white/corner, -/area/quartermaster/sorting) -"bki" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/structure/chair/office, -/obj/effect/landmark/start/cargo_technician, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/turf/open/floor/plasteel/white/corner, -/area/quartermaster/sorting) -"bkj" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/turf/open/floor/plasteel/white/corner, -/area/quartermaster/sorting) -"bkk" = ( -/obj/structure/filingcabinet/filingcabinet, -/obj/item/radio/intercom{ - pixel_y = -28 - }, -/obj/machinery/camera{ - c_tag = "Cargo - Mailroom"; - dir = 1 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/turf/open/floor/plasteel/white/corner, -/area/quartermaster/sorting) -"bkl" = ( -/obj/structure/table, -/obj/item/stack/wrapping_paper, -/obj/item/stack/wrapping_paper, -/obj/machinery/requests_console{ - department = "Cargo Bay"; - departmentType = 2; - pixel_y = -30 - }, -/obj/item/stack/packageWrap{ - pixel_x = 2; - pixel_y = -3 - }, -/obj/item/stack/packageWrap{ - pixel_x = 2; - pixel_y = -3 - }, -/obj/item/stack/packageWrap{ - pixel_x = 2; - pixel_y = -3 - }, -/obj/item/stack/packageWrap{ - pixel_x = 2; - pixel_y = -3 - }, -/obj/item/stack/packageWrap{ - pixel_x = 2; - pixel_y = -3 - }, -/obj/item/stack/packageWrap{ - pixel_x = 2; - pixel_y = -3 - }, -/obj/item/stack/packageWrap{ - pixel_x = 2; - pixel_y = -3 - }, -/obj/item/stack/packageWrap{ - pixel_x = 2; - pixel_y = -3 - }, -/obj/item/storage/box/lights/mixed, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/structure/cable, -/turf/open/floor/plasteel/white/corner, -/area/quartermaster/sorting) -"bkm" = ( -/obj/item/storage/box, -/obj/structure/table, -/obj/item/storage/box, -/obj/item/storage/box, -/obj/machinery/airalarm{ - dir = 1; - pixel_y = -22 - }, -/obj/item/hand_labeler, -/obj/machinery/power/apc{ - areastring = "/area/quartermaster/sorting"; - dir = 4; - name = "Delivery Office APC"; - pixel_x = 24 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/structure/cable, -/turf/open/floor/plasteel/white/corner, -/area/quartermaster/sorting) -"bkn" = ( -/obj/structure/table, -/obj/machinery/firealarm{ - dir = 4; - pixel_x = -26 - }, -/obj/effect/turf_decal/tile/brown{ - dir = 1 - }, -/obj/effect/turf_decal/tile/brown, -/obj/effect/turf_decal/tile/brown{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/quartermaster/office) -"bko" = ( -/obj/machinery/photocopier, -/obj/effect/turf_decal/tile/brown, -/obj/effect/turf_decal/tile/brown{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/quartermaster/office) "bkp" = ( -/obj/effect/turf_decal/tile/brown, -/obj/effect/turf_decal/tile/brown{ - dir = 8 +/obj/machinery/disposal/deliveryChute{ + dir = 1; + name = "Service Deliveries" + }, +/obj/structure/plasticflaps/opaque{ + name = "Service Deliveries" + }, +/obj/structure/disposalpipe/trunk{ + dir = 2 }, /turf/open/floor/plasteel, -/area/quartermaster/office) +/area/quartermaster/sorting) "bkq" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/holopad, -/obj/effect/turf_decal/tile/brown, -/obj/effect/turf_decal/tile/brown{ - dir = 8 +/obj/machinery/disposal/deliveryChute{ + dir = 1; + name = "Security Deliveries" }, -/turf/open/floor/plasteel, -/area/quartermaster/office) -"bkr" = ( -/obj/machinery/autolathe, -/obj/machinery/newscaster{ - pixel_x = 28 +/obj/structure/plasticflaps/opaque{ + name = "Security Deliveries" }, -/obj/item/radio/intercom{ - pixel_y = -28 - }, -/obj/effect/turf_decal/tile/brown, -/obj/effect/turf_decal/tile/brown{ - dir = 4 - }, -/obj/effect/turf_decal/tile/brown{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/quartermaster/office) -"bks" = ( -/obj/structure/closet/crate{ - icon_state = "crateopen" - }, -/obj/effect/spawner/lootdrop/maintenance, -/obj/effect/turf_decal/tile/brown{ +/obj/structure/disposalpipe/trunk{ dir = 1 }, -/obj/effect/turf_decal/tile/brown, -/obj/effect/turf_decal/tile/brown{ - dir = 8 +/turf/open/floor/plasteel, +/area/quartermaster/sorting) +"bkr" = ( +/obj/machinery/disposal/deliveryChute{ + dir = 1; + name = "Engineering Deliveries" + }, +/obj/structure/plasticflaps/opaque{ + name = "Engineering Deliveries" + }, +/obj/structure/disposalpipe/trunk{ + dir = 1 }, /turf/open/floor/plasteel, -/area/hallway/primary/port) -"bkt" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/machinery/holopad, -/obj/effect/turf_decal/tile/brown{ - dir = 8 +/area/quartermaster/sorting) +"bks" = ( +/obj/machinery/disposal/deliveryChute{ + dir = 1; + name = "Medical Deliveries" + }, +/obj/structure/plasticflaps/opaque{ + name = "Medical Deliveries" + }, +/obj/structure/disposalpipe/trunk{ + dir = 2 }, /turf/open/floor/plasteel, -/area/hallway/primary/port) +/area/quartermaster/sorting) "bku" = ( -/obj/structure/disposalpipe/segment{ - dir = 6 +/obj/machinery/disposal/bin, +/obj/machinery/firealarm{ + pixel_y = 0; + pixel_x = -31 }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 6 - }, -/obj/effect/turf_decal/tile/brown, -/obj/structure/cable, -/turf/open/floor/plasteel, -/area/hallway/primary/port) -"bkv" = ( -/obj/structure/disposalpipe/segment{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 9 - }, -/obj/structure/rack, -/obj/item/storage/box, -/obj/item/storage/box, -/obj/item/storage/box, -/obj/item/stack/packageWrap{ - pixel_x = 2; - pixel_y = -3 - }, -/obj/item/stack/packageWrap{ - pixel_x = 2; - pixel_y = -3 - }, -/obj/item/stack/packageWrap{ - pixel_x = 2; - pixel_y = -3 - }, -/obj/item/hand_labeler, -/obj/effect/turf_decal/tile/brown, -/obj/effect/turf_decal/tile/brown{ +/obj/machinery/light{ dir = 8 }, -/obj/structure/cable, -/turf/open/floor/plasteel, -/area/hallway/primary/port) -"bkw" = ( -/obj/structure/table, -/obj/item/toner, -/obj/item/radio/intercom{ - pixel_x = 30 - }, -/obj/effect/turf_decal/tile/brown, -/obj/effect/turf_decal/tile/brown{ +/obj/structure/disposalpipe/trunk{ dir = 4 }, -/obj/effect/turf_decal/tile/brown{ +/turf/open/floor/plasteel, +/area/quartermaster/sorting) +"bkv" = ( +/obj/structure/disposalpipe/junction{ + dir = 2 + }, +/turf/open/floor/plasteel, +/area/quartermaster/sorting) +"bkw" = ( +/obj/machinery/photocopier, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/brown/filled/line{ dir = 8 }, /turf/open/floor/plasteel, -/area/hallway/primary/port) +/area/quartermaster/sorting) "bkx" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/door/firedoor, /obj/effect/turf_decal/tile/neutral{ dir = 1 }, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 8 + }, /turf/open/floor/plasteel, /area/hallway/primary/central) "bky" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/door/firedoor, /obj/effect/turf_decal/tile/neutral, +/obj/structure/disposalpipe/segment, /turf/open/floor/plasteel, /area/hallway/primary/central) "bkz" = ( @@ -28755,6 +27910,9 @@ /obj/effect/turf_decal/tile/yellow{ dir = 8 }, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, /turf/open/floor/plasteel, /area/hallway/primary/starboard) "bkU" = ( @@ -28764,6 +27922,9 @@ /obj/effect/turf_decal/tile/yellow{ dir = 8 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/plasteel, /area/hallway/primary/starboard) "bkV" = ( @@ -28774,6 +27935,9 @@ dir = 8 }, /obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/plasteel, /area/hallway/primary/starboard) "bkW" = ( @@ -28794,6 +27958,9 @@ /obj/effect/turf_decal/tile/yellow{ dir = 8 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/plasteel, /area/hallway/primary/starboard) "bkY" = ( @@ -28806,6 +27973,9 @@ /obj/effect/turf_decal/tile/yellow{ dir = 8 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/plasteel, /area/hallway/primary/starboard) "bkZ" = ( @@ -28816,6 +27986,9 @@ /obj/effect/turf_decal/tile/yellow{ dir = 8 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/plasteel, /area/hallway/primary/starboard) "bla" = ( @@ -28826,6 +27999,9 @@ /obj/effect/turf_decal/tile/yellow{ dir = 8 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/plasteel, /area/hallway/primary/starboard) "blb" = ( @@ -28841,6 +28017,9 @@ /obj/effect/turf_decal/tile/yellow{ dir = 8 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/plasteel, /area/hallway/primary/starboard) "blc" = ( @@ -28850,6 +28029,9 @@ /obj/effect/turf_decal/tile/yellow{ dir = 8 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/plasteel, /area/hallway/primary/starboard) "bld" = ( @@ -28860,6 +28042,9 @@ /obj/effect/turf_decal/tile/yellow{ dir = 8 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/plasteel, /area/hallway/primary/starboard) "ble" = ( @@ -28871,6 +28056,9 @@ dir = 8 }, /obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/plasteel, /area/hallway/primary/starboard) "blf" = ( @@ -28885,6 +28073,9 @@ /obj/effect/turf_decal/tile/yellow{ dir = 8 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/plasteel, /area/hallway/primary/starboard) "blg" = ( @@ -28898,6 +28089,9 @@ /obj/effect/turf_decal/tile/yellow{ dir = 8 }, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, /turf/open/floor/plasteel, /area/hallway/primary/starboard) "blh" = ( @@ -29283,94 +28477,24 @@ /area/hallway/primary/port) "bmd" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/structure/disposalpipe/segment, -/obj/effect/turf_decal/tile/neutral, -/obj/structure/cable, /turf/open/floor/plasteel, /area/hallway/primary/port) -"bme" = ( -/obj/machinery/conveyor{ - dir = 1; - id = "packageExternal" - }, -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/structure/window/reinforced{ - dir = 8 - }, -/turf/open/floor/plating, -/area/quartermaster/sorting) "bmf" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/machinery/door/firedoor, -/obj/structure/table/reinforced, -/obj/machinery/door/window/westleft{ - dir = 1; - name = "Delivery Desk"; - req_access_txt = "50" - }, -/obj/effect/spawner/lootdrop/maintenance, -/obj/effect/turf_decal/bot, +/obj/machinery/pinpointer_dispenser, +/obj/structure/disposalpipe/segment, /turf/open/floor/plasteel, -/area/quartermaster/sorting) -"bmg" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/turf/open/floor/plating, -/area/quartermaster/sorting) +/area/hallway/primary/port) "bmh" = ( -/obj/machinery/door/firedoor, -/obj/machinery/mineral/ore_redemption, -/turf/open/floor/plasteel/dark, -/area/quartermaster/office) -"bmi" = ( -/obj/effect/spawner/structure/window/reinforced, /obj/structure/disposalpipe/segment, -/turf/open/floor/plating, -/area/quartermaster/office) -"bmj" = ( -/obj/structure/sign/directions/supply{ - dir = 1; - pixel_y = 8 - }, /turf/closed/wall, -/area/quartermaster/office) +/area/quartermaster/sorting) "bmk" = ( -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/effect/turf_decal/tile/brown{ - dir = 1 - }, -/obj/effect/turf_decal/tile/brown{ - dir = 8 - }, -/turf/open/floor/plasteel, -/area/hallway/primary/port) -"bml" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/machinery/door/firedoor, -/obj/effect/turf_decal/tile/brown, -/obj/effect/turf_decal/tile/brown{ - dir = 4 - }, -/obj/structure/cable, -/turf/open/floor/plasteel, -/area/hallway/primary/port) +/turf/closed/wall, +/area/quartermaster/sorting) "bmm" = ( -/obj/structure/sign/directions/security{ - dir = 1; - pixel_y = 8 - }, -/obj/structure/sign/directions/engineering{ - dir = 4 - }, -/obj/structure/sign/directions/command{ - pixel_y = -8 - }, -/turf/closed/wall/r_wall, -/area/hallway/primary/port) +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/quartermaster/sorting) "bmn" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/machinery/light{ @@ -29381,6 +28505,7 @@ pixel_x = 24 }, /obj/effect/turf_decal/tile/neutral, +/obj/structure/disposalpipe/segment, /turf/open/floor/plasteel, /area/hallway/primary/central) "bmo" = ( @@ -29641,6 +28766,10 @@ /obj/effect/turf_decal/tile/yellow{ dir = 8 }, +/obj/structure/chair{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, /turf/open/floor/plasteel, /area/hallway/primary/starboard) "bmX" = ( @@ -30091,8 +29220,8 @@ /turf/open/floor/plasteel, /area/hallway/primary/port) "bnT" = ( -/obj/structure/disposalpipe/junction/flip{ - dir = 1 +/obj/structure/disposalpipe/segment{ + dir = 4 }, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 5 @@ -30110,6 +29239,9 @@ /obj/effect/turf_decal/tile/neutral{ dir = 1 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/plasteel, /area/hallway/primary/port) "bnV" = ( @@ -30119,14 +29251,8 @@ /obj/effect/turf_decal/tile/neutral{ dir = 1 }, -/turf/open/floor/plasteel, -/area/hallway/primary/port) -"bnW" = ( -/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 +/obj/structure/disposalpipe/segment{ + dir = 4 }, /turf/open/floor/plasteel, /area/hallway/primary/port) @@ -30134,17 +29260,25 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/effect/turf_decal/tile/neutral{ dir = 1 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, /turf/open/floor/plasteel, /area/hallway/primary/port) "bnY" = ( -/obj/machinery/atmospherics/pipe/manifold/supply/hidden, /obj/effect/turf_decal/tile/neutral{ dir = 1 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, /turf/open/floor/plasteel, /area/hallway/primary/port) "bnZ" = ( @@ -30160,6 +29294,9 @@ /obj/effect/turf_decal/tile/neutral{ dir = 1 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/plasteel, /area/hallway/primary/port) "boa" = ( @@ -30170,9 +29307,6 @@ /obj/effect/turf_decal/tile/neutral{ dir = 1 }, -/turf/open/floor/plasteel, -/area/hallway/primary/port) -"bob" = ( /obj/machinery/power/apc{ areastring = "/area/hallway/primary/port"; dir = 1; @@ -30180,23 +29314,49 @@ pixel_x = -1; pixel_y = 23 }, +/obj/structure/cable, +/obj/effect/turf_decal/trimline/brown/filled/corner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/brown/filled/corner{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/port) +"bob" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, /obj/effect/turf_decal/tile/neutral{ dir = 1 }, -/obj/structure/cable, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/plasteel, /area/hallway/primary/port) "boc" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 1 }, -/obj/structure/disposalpipe/segment, /obj/effect/turf_decal/tile/neutral{ dir = 1 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/plasteel, /area/hallway/primary/port) "bod" = ( @@ -30209,43 +29369,58 @@ /obj/effect/turf_decal/tile/neutral{ dir = 1 }, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, /turf/open/floor/plasteel, /area/hallway/primary/port) "boe" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/obj/effect/turf_decal/tile/brown{ - dir = 4 - }, +/obj/structure/disposalpipe/segment, /turf/open/floor/plasteel, /area/hallway/primary/port) "bof" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/effect/turf_decal/tile/brown{ - dir = 1 +/obj/effect/turf_decal/trimline/brown/filled/corner{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/brown/filled/corner{ + dir = 4 }, /turf/open/floor/plasteel, /area/hallway/primary/port) "bog" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/manifold/supply/hidden, -/obj/effect/turf_decal/tile/brown{ +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, /turf/open/floor/plasteel, /area/hallway/primary/port) "boh" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/obj/effect/turf_decal/tile/brown{ +/obj/effect/turf_decal/trimline/brown/filled/line{ dir = 1 }, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, /turf/open/floor/plasteel, /area/hallway/primary/port) "boi" = ( @@ -30259,6 +29434,12 @@ /obj/effect/turf_decal/tile/neutral{ dir = 1 }, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 1 + }, /turf/open/floor/plasteel, /area/hallway/primary/port) "boj" = ( @@ -30268,6 +29449,12 @@ /obj/effect/turf_decal/tile/neutral{ dir = 1 }, +/obj/effect/turf_decal/trimline/brown/filled/corner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/brown/filled/corner{ + dir = 1 + }, /turf/open/floor/plasteel, /area/hallway/primary/central) "bok" = ( @@ -30632,6 +29819,18 @@ /obj/effect/turf_decal/tile/yellow{ dir = 8 }, +/obj/structure/disposaloutlet{ + name = "Cargo Deliveries" + }, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/brown/warning{ + dir = 5 + }, +/obj/effect/turf_decal/trimline/brown/warning{ + dir = 5 + }, /turf/open/floor/plasteel, /area/hallway/primary/starboard) "bpe" = ( @@ -31070,12 +30269,16 @@ /turf/open/floor/plasteel, /area/hallway/primary/port) "bqk" = ( -/obj/structure/disposalpipe/segment{ - dir = 5 +/obj/effect/decal/cleanable/dirt, +/obj/structure/reagent_dispensers/fueltank, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 1 }, -/obj/structure/cable, /turf/open/floor/plasteel, -/area/hallway/primary/port) +/area/quartermaster/warehouse) "bql" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -31114,65 +30317,52 @@ }, /turf/open/floor/plasteel/dark, /area/ai_monitored/turret_protected/ai) -"bqn" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/structure/cable, -/turf/open/floor/plasteel, -/area/hallway/primary/port) "bqo" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/cable, +/obj/structure/disposalpipe/segment, /turf/open/floor/plasteel, /area/hallway/primary/port) "bqp" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/structure/cable, /turf/open/floor/plasteel, /area/hallway/primary/port) "bqq" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/machinery/door/firedoor, /obj/structure/cable, /turf/open/floor/plasteel, /area/hallway/primary/port) "bqs" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/machinery/atmospherics/components/unary/vent_pump/on{ dir = 1 }, /obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, /turf/open/floor/plasteel, /area/hallway/primary/port) "bqt" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/structure/disposalpipe/sorting/mail{ - dir = 8; - sortType = 3 +/obj/structure/disposalpipe/segment{ + dir = 4 }, /obj/structure/cable, /turf/open/floor/plasteel, /area/hallway/primary/port) "bqu" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/structure/disposalpipe/segment{ +/obj/machinery/disposal/bin, +/obj/effect/turf_decal/trimline/neutral/filled/end{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/neutral/filled/end{ + dir = 8 + }, +/obj/structure/disposalpipe/trunk{ dir = 4 }, -/obj/structure/cable, -/turf/open/floor/plasteel, -/area/hallway/primary/port) +/turf/open/floor/plasteel/dark, +/area/storage/primary) "bqv" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on, /obj/structure/disposalpipe/segment{ @@ -31206,6 +30396,7 @@ dir = 4 }, /obj/effect/turf_decal/tile/neutral, +/obj/structure/disposalpipe/segment, /turf/open/floor/plasteel, /area/hallway/primary/central) "bqB" = ( @@ -32155,10 +31346,15 @@ /turf/open/floor/plasteel, /area/hallway/primary/port) "bsz" = ( -/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, /obj/effect/turf_decal/tile/neutral{ dir = 8 }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, /turf/open/floor/plasteel, /area/hallway/primary/port) "bsA" = ( @@ -32171,6 +31367,9 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/plasteel, /area/hallway/primary/port) "bsB" = ( @@ -32184,6 +31383,9 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/plasteel, /area/hallway/primary/port) "bsC" = ( @@ -32195,6 +31397,9 @@ dir = 8 }, /obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/plasteel, /area/hallway/primary/port) "bsD" = ( @@ -32205,6 +31410,9 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/plasteel, /area/hallway/primary/port) "bsE" = ( @@ -32217,6 +31425,9 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/plasteel, /area/hallway/primary/port) "bsG" = ( @@ -32240,6 +31451,9 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, /turf/open/floor/plasteel, /area/hallway/primary/port) "bsI" = ( @@ -32250,6 +31464,9 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/plasteel, /area/hallway/primary/port) "bsJ" = ( @@ -32263,6 +31480,9 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/plasteel, /area/hallway/primary/port) "bsK" = ( @@ -32273,6 +31493,9 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, /turf/open/floor/plasteel, /area/hallway/primary/central) "bsL" = ( @@ -32605,6 +31828,13 @@ /obj/effect/turf_decal/tile/yellow{ dir = 8 }, +/obj/structure/window/reinforced, +/obj/effect/turf_decal/trimline/brown/warning{ + dir = 6 + }, +/obj/effect/turf_decal/trimline/brown/warning{ + dir = 6 + }, /turf/open/floor/plasteel, /area/hallway/primary/starboard) "bty" = ( @@ -32875,6 +32105,7 @@ /obj/machinery/door/airlock/public/glass{ name = "Library" }, +/obj/structure/disposalpipe/segment, /turf/open/floor/wood, /area/library) "buh" = ( @@ -32900,6 +32131,7 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, +/obj/structure/disposalpipe/segment, /turf/open/floor/plasteel, /area/hallway/primary/central) "buk" = ( @@ -32919,6 +32151,7 @@ }, /obj/effect/turf_decal/tile/neutral, /obj/structure/cable, +/obj/structure/disposalpipe/segment, /turf/open/floor/plasteel, /area/hallway/primary/central) "bum" = ( @@ -33207,9 +32440,21 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, -/obj/effect/landmark/blobstart, /obj/structure/cable, -/turf/open/floor/plating, +/obj/structure/disposaloutlet{ + dir = 8; + name = "Cargo Deliveries" + }, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/brown/warning{ + dir = 6 + }, +/obj/effect/turf_decal/trimline/brown/warning{ + dir = 6 + }, +/turf/open/floor/plasteel, /area/maintenance/starboard) "bve" = ( /obj/machinery/atmospherics/components/unary/vent_pump/on{ @@ -33609,6 +32854,7 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, +/obj/structure/disposalpipe/segment, /turf/open/floor/plasteel, /area/hallway/primary/central) "bwi" = ( @@ -34307,6 +33553,7 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, +/obj/structure/disposalpipe/segment, /turf/open/floor/plasteel, /area/hallway/primary/central) "byb" = ( @@ -34584,14 +33831,8 @@ /turf/open/floor/wood, /area/crew_quarters/bar) "byI" = ( -/obj/structure/window/reinforced{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/turf/open/floor/plasteel, -/area/quartermaster/sorting) +/turf/open/floor/wood, +/area/quartermaster/qm) "byJ" = ( /obj/structure/chair/wood/wings{ dir = 8 @@ -34670,6 +33911,16 @@ }, /turf/open/floor/plasteel/dark/corner, /area/hallway/primary/starboard) +"byW" = ( +/obj/effect/turf_decal/tile/green, +/obj/effect/turf_decal/tile/green{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/hydroponics) "byZ" = ( /obj/machinery/space_heater, /obj/machinery/firealarm{ @@ -34990,6 +34241,7 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, +/obj/structure/disposalpipe/segment, /turf/open/floor/plasteel, /area/hallway/primary/central) "bzJ" = ( @@ -35849,9 +35101,6 @@ /turf/open/floor/plasteel/dark, /area/bridge) "bBG" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/structure/cable, /turf/open/floor/goonplaque{ desc = "\"This is a plaque in honour of our comrades on the G4407 Stations. Hopefully TG4407 model can live up to your fame and fortune.\" Scratched in beneath that is a crude image of sentient postcards in a realm of darkness. The station model number is MSv42A-160516" @@ -36334,6 +35583,7 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, +/obj/structure/disposalpipe/segment, /turf/open/floor/plasteel, /area/hallway/primary/central) "bCX" = ( @@ -36357,6 +35607,7 @@ /obj/effect/turf_decal/tile/neutral{ dir = 4 }, +/obj/structure/disposalpipe/segment, /turf/open/floor/plasteel, /area/hallway/primary/central) "bCZ" = ( @@ -36995,6 +36246,9 @@ /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ dir = 8 }, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, /turf/open/floor/carpet, /area/library) "bEy" = ( @@ -37002,18 +36256,27 @@ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/carpet, /area/library) "bEz" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/carpet, /area/library) "bEA" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 10 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/carpet, /area/library) "bEB" = ( @@ -37023,6 +36286,9 @@ location = "11-Command-Port" }, /obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/plasteel, /area/hallway/primary/central) "bEC" = ( @@ -37031,6 +36297,10 @@ }, /obj/effect/turf_decal/tile/neutral, /obj/structure/cable, +/obj/structure/disposalpipe/segment, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/plasteel, /area/hallway/primary/central) "bED" = ( @@ -37045,6 +36315,9 @@ dir = 8 }, /obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/plasteel, /area/hallway/secondary/command) "bEE" = ( @@ -37055,6 +36328,9 @@ dir = 8 }, /obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/plasteel, /area/hallway/secondary/command) "bEF" = ( @@ -37066,6 +36342,9 @@ dir = 8 }, /obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/plasteel, /area/hallway/secondary/command) "bEG" = ( @@ -37076,6 +36355,9 @@ dir = 8 }, /obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/plasteel, /area/hallway/secondary/command) "bEH" = ( @@ -37087,6 +36369,9 @@ dir = 8 }, /obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/plasteel, /area/hallway/secondary/command) "bEI" = ( @@ -37107,6 +36392,9 @@ dir = 8 }, /obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/plasteel, /area/hallway/secondary/command) "bEK" = ( @@ -37119,6 +36407,9 @@ dir = 8 }, /obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/plasteel, /area/hallway/secondary/command) "bEM" = ( @@ -37130,6 +36421,9 @@ dir = 8 }, /obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/plasteel, /area/hallway/secondary/command) "bEO" = ( @@ -37139,6 +36433,9 @@ dir = 8 }, /obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/plasteel, /area/hallway/secondary/command) "bEP" = ( @@ -37146,6 +36443,9 @@ dir = 4 }, /obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/plasteel, /area/hallway/secondary/command) "bEQ" = ( @@ -37154,6 +36454,9 @@ dir = 4 }, /obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/plasteel, /area/hallway/secondary/command) "bER" = ( @@ -37162,6 +36465,9 @@ }, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/plasteel, /area/hallway/secondary/command) "bES" = ( @@ -37170,6 +36476,9 @@ }, /obj/effect/turf_decal/tile/neutral, /obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/plasteel, /area/hallway/secondary/command) "bET" = ( @@ -37179,6 +36488,9 @@ /obj/machinery/light, /obj/effect/turf_decal/tile/neutral, /obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/plasteel, /area/hallway/secondary/command) "bEV" = ( @@ -37190,6 +36502,9 @@ }, /obj/effect/turf_decal/tile/neutral, /obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/plasteel, /area/hallway/secondary/command) "bEX" = ( @@ -37199,6 +36514,9 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/effect/turf_decal/tile/neutral, /obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/plasteel, /area/hallway/secondary/command) "bEY" = ( @@ -37207,6 +36525,9 @@ }, /obj/effect/turf_decal/tile/neutral, /obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/plasteel, /area/hallway/secondary/command) "bEZ" = ( @@ -37218,6 +36539,9 @@ }, /obj/effect/turf_decal/tile/neutral, /obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/plasteel, /area/hallway/secondary/command) "bFa" = ( @@ -37231,6 +36555,9 @@ }, /obj/effect/turf_decal/tile/neutral, /obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/plasteel, /area/hallway/secondary/command) "bFc" = ( @@ -37238,12 +36565,18 @@ /obj/effect/landmark/event_spawn, /obj/effect/turf_decal/tile/neutral, /obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/plasteel, /area/hallway/secondary/command) "bFd" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, /obj/effect/turf_decal/tile/neutral, /obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/plasteel, /area/hallway/secondary/command) "bFf" = ( @@ -37256,6 +36589,9 @@ }, /obj/effect/turf_decal/tile/neutral, /obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/plasteel, /area/hallway/secondary/command) "bFg" = ( @@ -37266,6 +36602,9 @@ dir = 8 }, /obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/plasteel, /area/hallway/primary/central) "bFh" = ( @@ -37274,6 +36613,9 @@ location = "7-Command-Starboard" }, /obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/plasteel, /area/hallway/primary/central) "bFi" = ( @@ -37282,6 +36624,9 @@ }, /obj/effect/turf_decal/tile/neutral, /obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, /turf/open/floor/plasteel, /area/hallway/primary/central) "bFj" = ( @@ -37815,6 +37160,7 @@ dir = 8 }, /obj/effect/turf_decal/tile/neutral, +/obj/structure/disposalpipe/segment, /turf/open/floor/plasteel, /area/hallway/primary/central) "bGx" = ( @@ -38031,6 +37377,7 @@ dir = 4 }, /obj/effect/turf_decal/tile/neutral, +/obj/structure/disposalpipe/segment, /turf/open/floor/plasteel, /area/hallway/primary/central) "bGY" = ( @@ -38432,6 +37779,7 @@ /obj/effect/turf_decal/tile/neutral{ dir = 4 }, +/obj/structure/disposalpipe/segment, /turf/open/floor/plasteel, /area/hallway/primary/central) "bHY" = ( @@ -38657,6 +38005,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/effect/turf_decal/tile/neutral, /obj/effect/turf_decal/tile/bar, +/obj/structure/disposalpipe/segment, /turf/open/floor/plasteel, /area/hallway/primary/central) "bIt" = ( @@ -39121,6 +38470,7 @@ /obj/effect/turf_decal/tile/neutral{ dir = 4 }, +/obj/structure/disposalpipe/segment, /turf/open/floor/plasteel, /area/hallway/primary/central) "bJD" = ( @@ -39392,6 +38742,7 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/machinery/door/firedoor, /obj/effect/turf_decal/tile/neutral, +/obj/structure/disposalpipe/segment, /turf/open/floor/plasteel, /area/hallway/primary/central) "bKe" = ( @@ -40542,6 +39893,7 @@ /obj/effect/turf_decal/tile/neutral{ dir = 4 }, +/obj/structure/disposalpipe/segment, /turf/open/floor/plasteel, /area/hallway/primary/central) "bMS" = ( @@ -40841,6 +40193,7 @@ }, /obj/effect/turf_decal/tile/neutral, /obj/effect/turf_decal/tile/bar, +/obj/structure/disposalpipe/segment, /turf/open/floor/plasteel, /area/hallway/primary/central) "bNv" = ( @@ -41151,6 +40504,7 @@ /obj/effect/turf_decal/tile/neutral{ dir = 4 }, +/obj/structure/disposalpipe/segment, /turf/open/floor/plasteel, /area/hallway/primary/central) "bOo" = ( @@ -41192,14 +40546,15 @@ /turf/open/floor/plasteel, /area/ai_monitored/storage/eva) "bOq" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden{ - dir = 4 +/obj/effect/decal/cleanable/dirt, +/obj/machinery/airalarm{ + pixel_y = 28 }, -/obj/structure/cable, -/turf/open/floor/plating{ - icon_state = "platingdmg1" +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 8 }, -/area/maintenance/port/fore) +/turf/open/floor/plasteel, +/area/quartermaster/warehouse) "bOr" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/effect/turf_decal/stripes/line{ @@ -41871,6 +41226,7 @@ /obj/effect/turf_decal/tile/neutral{ dir = 4 }, +/obj/structure/disposalpipe/segment, /turf/open/floor/plasteel, /area/hallway/primary/central) "bPZ" = ( @@ -42330,6 +41686,7 @@ /obj/effect/turf_decal/tile/neutral{ dir = 4 }, +/obj/structure/disposalpipe/segment, /turf/open/floor/plasteel, /area/hallway/primary/central) "bRp" = ( @@ -42931,6 +42288,7 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, +/obj/structure/disposalpipe/segment, /turf/open/floor/plasteel, /area/hallway/primary/central) "bSE" = ( @@ -43025,6 +42383,7 @@ "bSR" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/effect/turf_decal/tile/green, +/obj/structure/disposalpipe/segment, /turf/open/floor/plasteel, /area/hallway/primary/central) "bSS" = ( @@ -43121,7 +42480,16 @@ dir = 1 }, /obj/structure/cable, -/turf/open/floor/plating, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/effect/turf_decal/trimline/brown/warning{ + dir = 10 + }, +/obj/effect/turf_decal/trimline/brown/warning{ + dir = 10 + }, +/turf/open/floor/plasteel, /area/maintenance/starboard) "bTc" = ( /obj/machinery/power/apc{ @@ -43131,14 +42499,16 @@ pixel_x = -1; pixel_y = 23 }, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, /obj/structure/cable, -/turf/open/floor/plating, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/obj/effect/turf_decal/trimline/brown/warning, +/obj/effect/turf_decal/trimline/brown/warning, +/turf/open/floor/plasteel, /area/maintenance/starboard) "bTd" = ( /obj/structure/disposalpipe/segment, @@ -43310,6 +42680,9 @@ /obj/effect/turf_decal/tile/neutral{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, /turf/open/floor/plasteel, /area/hallway/primary/central) "bTG" = ( @@ -43319,6 +42692,9 @@ /obj/effect/turf_decal/tile/neutral{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/plasteel, /area/hallway/primary/central) "bTH" = ( @@ -43331,6 +42707,9 @@ /obj/effect/turf_decal/stripes/corner{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/plasteel, /area/hallway/primary/central) "bTI" = ( @@ -43359,6 +42738,9 @@ /obj/effect/turf_decal/tile/neutral{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/plasteel, /area/hallway/primary/central) "bTL" = ( @@ -43371,6 +42753,9 @@ /obj/effect/turf_decal/stripes/corner{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/plasteel, /area/hallway/primary/central) "bTM" = ( @@ -43383,6 +42768,9 @@ /obj/effect/turf_decal/stripes/corner{ dir = 1 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/plasteel, /area/hallway/primary/central) "bTN" = ( @@ -43398,6 +42786,9 @@ /obj/effect/turf_decal/tile/neutral{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/plasteel, /area/hallway/primary/central) "bTO" = ( @@ -43411,6 +42802,9 @@ /obj/effect/turf_decal/tile/neutral{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/plasteel, /area/hallway/primary/central) "bTP" = ( @@ -43423,6 +42817,9 @@ /obj/effect/turf_decal/tile/neutral{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/plasteel, /area/hallway/primary/central) "bTQ" = ( @@ -43435,6 +42832,9 @@ /obj/effect/turf_decal/tile/neutral{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/plasteel, /area/hallway/primary/central) "bTR" = ( @@ -43445,6 +42845,9 @@ /obj/effect/turf_decal/tile/neutral{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/plasteel, /area/hallway/primary/central) "bTS" = ( @@ -43469,6 +42872,9 @@ /obj/effect/turf_decal/tile/neutral{ dir = 1 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/plasteel, /area/hallway/primary/central) "bTU" = ( @@ -43485,6 +42891,9 @@ dir = 1 }, /obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/plasteel, /area/hallway/primary/central) "bTV" = ( @@ -43499,6 +42908,9 @@ /obj/effect/turf_decal/tile/neutral{ dir = 1 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/plasteel, /area/hallway/primary/central) "bTW" = ( @@ -43513,6 +42925,9 @@ /obj/effect/turf_decal/tile/neutral{ dir = 1 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/plasteel, /area/hallway/primary/central) "bTX" = ( @@ -43525,6 +42940,9 @@ /obj/effect/turf_decal/tile/neutral{ dir = 1 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/plasteel, /area/hallway/primary/central) "bTY" = ( @@ -43541,6 +42959,9 @@ /obj/effect/turf_decal/stripes/corner{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, /turf/open/floor/plasteel, /area/hallway/primary/central) "bTZ" = ( @@ -43573,6 +42994,7 @@ /obj/effect/turf_decal/tile/green{ dir = 4 }, +/obj/structure/disposalpipe/segment, /turf/open/floor/plasteel, /area/hallway/primary/central) "bUd" = ( @@ -43874,6 +43296,10 @@ }, /turf/open/floor/plasteel/dark, /area/aisat) +"bUN" = ( +/obj/structure/disposalpipe/segment, +/turf/closed/wall, +/area/hallway/secondary/service) "bUQ" = ( /obj/item/cigbutt, /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ @@ -43941,6 +43367,9 @@ dir = 4 }, /obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/plasteel, /area/hallway/primary/central) "bVa" = ( @@ -43948,6 +43377,9 @@ dir = 9 }, /obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, /turf/open/floor/plasteel, /area/hallway/primary/central) "bVb" = ( @@ -44048,6 +43480,7 @@ dir = 4 }, /obj/structure/cable, +/obj/structure/disposalpipe/segment, /turf/open/floor/plasteel, /area/hallway/primary/central) "bVq" = ( @@ -44434,6 +43867,9 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, /turf/open/floor/plasteel, /area/hallway/primary/central) "bWk" = ( @@ -44444,6 +43880,9 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/plasteel, /area/hallway/primary/central) "bWl" = ( @@ -44457,6 +43896,9 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/plasteel, /area/hallway/primary/central) "bWm" = ( @@ -44469,6 +43911,9 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/plasteel, /area/hallway/primary/central) "bWn" = ( @@ -44479,6 +43924,9 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/plasteel, /area/hallway/primary/central) "bWo" = ( @@ -44607,6 +44055,7 @@ dir = 4 }, /obj/effect/turf_decal/tile/neutral, +/obj/structure/disposalpipe/segment, /turf/open/floor/plasteel, /area/hallway/primary/central) "bWD" = ( @@ -44667,6 +44116,9 @@ dir = 8 }, /obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, /turf/open/floor/plasteel, /area/hallway/primary/central) "bWJ" = ( @@ -44683,6 +44135,9 @@ /obj/effect/turf_decal/tile/green{ dir = 8 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/plasteel, /area/hallway/primary/central) "bWK" = ( @@ -44714,6 +44169,9 @@ /obj/effect/turf_decal/tile/green{ dir = 8 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/plasteel, /area/hydroponics) "bWL" = ( @@ -44731,6 +44189,9 @@ /obj/effect/turf_decal/tile/green{ dir = 8 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/plasteel, /area/hydroponics) "bWM" = ( @@ -44744,6 +44205,9 @@ /obj/effect/turf_decal/tile/green{ dir = 8 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/plasteel, /area/hydroponics) "bWN" = ( @@ -44756,6 +44220,9 @@ /obj/effect/turf_decal/tile/green{ dir = 8 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/plasteel, /area/hydroponics) "bWO" = ( @@ -44763,6 +44230,9 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/plasteel, /area/hydroponics) "bWP" = ( @@ -44770,6 +44240,9 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 10 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/plasteel, /area/hydroponics) "bWQ" = ( @@ -44791,6 +44264,9 @@ "bWS" = ( /obj/machinery/hydroponics/constructable, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/plasteel, /area/hydroponics) "bWT" = ( @@ -44802,10 +44278,16 @@ /obj/effect/turf_decal/stripes/line{ dir = 9 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/plasteel, /area/hydroponics) "bWV" = ( /obj/machinery/vending/wardrobe/hydro_wardrobe, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/plasteel, /area/hydroponics) "bWX" = ( @@ -44819,6 +44301,9 @@ /obj/machinery/light{ dir = 1 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/plasteel, /area/hallway/secondary/service) "bWY" = ( @@ -45162,6 +44647,7 @@ /obj/effect/turf_decal/tile/blue{ dir = 8 }, +/obj/structure/disposalpipe/segment, /turf/open/floor/plasteel, /area/hallway/primary/central) "bXN" = ( @@ -46158,26 +45644,27 @@ dir = 4; pixel_x = -22 }, -/obj/structure/table, -/obj/effect/turf_decal/tile/blue{ +/obj/structure/disposaloutlet{ + dir = 4; + name = "Cargo Deliveries" + }, +/obj/structure/disposalpipe/trunk{ dir = 1 }, -/obj/effect/turf_decal/tile/blue{ - dir = 8 - }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, +/obj/effect/turf_decal/trimline/brown/warning, +/obj/effect/turf_decal/trimline/brown/warning, /turf/open/floor/plasteel/white, /area/medical/medbay/central) "cak" = ( -/obj/effect/turf_decal/tile/blue{ - dir = 1 - }, -/obj/effect/turf_decal/tile/blue{ +/obj/structure/window/reinforced{ dir = 4 }, -/obj/effect/turf_decal/trimline/blue/filled/corner, +/obj/effect/turf_decal/trimline/brown/warning{ + dir = 6 + }, +/obj/effect/turf_decal/trimline/brown/warning{ + dir = 6 + }, /turf/open/floor/plasteel/white, /area/medical/medbay/central) "cal" = ( @@ -46294,49 +45781,43 @@ /turf/open/floor/plasteel/white, /area/science/research) "caz" = ( -/obj/structure/table, -/obj/item/stack/cable_coil, -/obj/item/assembly/igniter{ - pixel_x = -4; - pixel_y = -4 +/obj/structure/window/reinforced{ + dir = 8 }, -/obj/item/screwdriver{ - pixel_y = 16 +/obj/effect/turf_decal/trimline/brown/warning{ + dir = 10 }, -/obj/item/gps{ - gpstag = "RD0" - }, -/obj/effect/turf_decal/tile/purple{ - dir = 1 - }, -/obj/effect/turf_decal/tile/purple{ - dir = 4 +/obj/effect/turf_decal/trimline/brown/warning{ + dir = 10 }, /turf/open/floor/plasteel/white, /area/science/research) "caA" = ( /obj/structure/table, -/obj/item/stack/sheet/glass, -/obj/item/electronics/airlock, -/obj/item/assembly/timer{ - pixel_x = -4; - pixel_y = 2 +/obj/item/weldingtool{ + pixel_y = 6; + pixel_x = -5 }, -/obj/effect/turf_decal/tile/purple{ - dir = 1 +/obj/item/flashlight{ + pixel_y = 3; + pixel_x = 5 }, -/obj/effect/turf_decal/tile/purple{ - dir = 4 +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 8 }, -/turf/open/floor/plasteel/white, -/area/science/research) +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 8 + }, +/obj/machinery/power/apc{ + name = "Tool Storage APC"; + pixel_y = 1; + areastring = "/area/storage/primary"; + pixel_x = 31 + }, +/obj/structure/cable, +/turf/open/floor/plasteel/dark, +/area/storage/primary) "caB" = ( -/obj/structure/table, -/obj/item/paper_bin{ - pixel_x = -2; - pixel_y = 4 - }, -/obj/item/pen, /obj/machinery/status_display/evac{ pixel_y = 32 }, @@ -46351,12 +45832,15 @@ c_tag = "Research Division - Lobby"; network = list("ss13","rd") }, -/obj/effect/turf_decal/tile/purple{ +/obj/structure/disposaloutlet{ + dir = 8; + name = "Cargo Deliveries" + }, +/obj/structure/disposalpipe/trunk{ dir = 1 }, -/obj/effect/turf_decal/tile/purple{ - dir = 4 - }, +/obj/effect/turf_decal/trimline/brown/warning, +/obj/effect/turf_decal/trimline/brown/warning, /turf/open/floor/plasteel/white, /area/science/research) "caC" = ( @@ -47124,6 +46608,10 @@ /obj/effect/turf_decal/tile/blue{ dir = 8 }, +/obj/structure/table, +/obj/item/stack/medical/mesh, +/obj/item/stack/medical/gauze, +/obj/item/stack/medical/suture, /turf/open/floor/plasteel/white, /area/medical/medbay/central) "cbU" = ( @@ -47967,6 +47455,18 @@ dir = 4 }, /obj/structure/cable, +/obj/structure/table, +/obj/item/stack/cable_coil, +/obj/item/gps{ + gpstag = "RD0" + }, +/obj/item/assembly/igniter{ + pixel_x = -4; + pixel_y = -4 + }, +/obj/item/screwdriver{ + pixel_y = 16 + }, /turf/open/floor/plasteel/white, /area/science/research) "cdP" = ( @@ -50233,6 +49733,7 @@ dir = 4 }, /obj/structure/cable, +/obj/effect/landmark/blobstart, /turf/open/floor/plating, /area/maintenance/starboard) "cjs" = ( @@ -61435,6 +60936,9 @@ /obj/effect/turf_decal/tile/neutral{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/plasteel, /area/hallway/primary/central) "cMR" = ( @@ -64465,6 +63969,7 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, +/obj/structure/disposalpipe/segment, /turf/open/floor/plasteel, /area/hallway/primary/central) "cVe" = ( @@ -64519,7 +64024,9 @@ /turf/open/space, /area/engine/atmos) "cVC" = ( -/mob/living/simple_animal/sloth/citrus, +/obj/machinery/atmospherics/components/unary/vent_scrubber/on{ + dir = 4 + }, /turf/open/floor/plasteel, /area/quartermaster/storage) "cVD" = ( @@ -67015,16 +66522,15 @@ /turf/open/floor/plating, /area/maintenance/port/fore) "dhy" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 +/obj/structure/chair, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 1 }, -/obj/structure/closet/cardboard, -/obj/structure/sign/poster/official/random{ - pixel_y = 32 +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 1 }, -/obj/effect/decal/cleanable/dirt, /turf/open/floor/plasteel, -/area/quartermaster/warehouse) +/area/construction/storage_wing) "dhz" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -67054,18 +66560,9 @@ /turf/open/floor/plating, /area/maintenance/starboard/fore) "dhC" = ( -/obj/structure/rack, -/obj/item/stack/sheet/cardboard, -/obj/item/stack/rods/fifty, -/obj/item/paper, -/obj/item/storage/box/lights/mixed, -/obj/structure/sign/poster/official/random{ - pixel_y = -32 - }, -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable, -/turf/open/floor/plasteel, -/area/quartermaster/warehouse) +/obj/structure/disposalpipe/segment, +/turf/closed/wall, +/area/security/checkpoint/supply) "dhD" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 5 @@ -67102,18 +66599,15 @@ /turf/open/floor/plasteel/dark, /area/crew_quarters/dorms) "dhG" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ - dir = 4 - }, -/obj/structure/sign/poster/official/random{ - pixel_y = -32 - }, -/obj/effect/turf_decal/tile/brown{ - dir = 4 +/obj/machinery/door/airlock/maintenance{ + req_one_access_txt = "12;63;48;50" }, /obj/structure/cable, -/turf/open/floor/plasteel, -/area/construction/storage_wing) +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plating, +/area/maintenance/port/fore) "dhH" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/effect/spawner/lootdrop/maintenance, @@ -67124,17 +66618,11 @@ /turf/open/floor/plating, /area/maintenance/starboard/fore) "dhI" = ( -/obj/machinery/vending/assist, -/obj/machinery/light/small{ - dir = 1 +/obj/machinery/door/window/eastright{ + name = "MULEbot Access"; + req_one_access_txt = "31;48" }, -/obj/structure/sign/poster/official/random{ - pixel_y = 32 - }, -/obj/effect/turf_decal/tile/brown{ - dir = 1 - }, -/obj/effect/turf_decal/tile/brown{ +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 }, /turf/open/floor/plasteel, @@ -67155,28 +66643,13 @@ /turf/open/floor/plating, /area/maintenance/port/fore) "dhL" = ( -/obj/structure/table, -/obj/item/analyzer, -/obj/machinery/power/apc{ - areastring = "/area/storage/primary"; - name = "Tool Storage APC"; - pixel_y = -23 - }, -/obj/item/wrench, -/obj/structure/sign/poster/official/random{ - pixel_x = -32 - }, -/obj/effect/turf_decal/tile/brown{ - dir = 1 - }, -/obj/effect/turf_decal/tile/brown, -/obj/effect/turf_decal/tile/brown{ - dir = 8 - }, /obj/structure/cable, -/obj/item/storage/box/shipping, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, /turf/open/floor/plasteel, -/area/storage/primary) +/area/construction/storage_wing) "dhM" = ( /obj/item/radio/intercom{ pixel_y = 21 @@ -67547,6 +67020,9 @@ /obj/item/reagent_containers/glass/bucket, /obj/item/cultivator, /obj/item/wirecutters, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/plasteel, /area/hydroponics) "dix" = ( @@ -67874,6 +67350,19 @@ }, /turf/open/floor/plating, /area/chapel/main) +"dkR" = ( +/obj/effect/landmark/event_spawn, +/obj/effect/turf_decal/tile/green{ + dir = 1 + }, +/obj/effect/turf_decal/tile/green{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/hydroponics) "dlI" = ( /turf/closed/wall/r_wall, /area/engine/supermatter) @@ -67925,18 +67414,23 @@ /turf/open/floor/wood, /area/library) "dmF" = ( -/turf/closed/wall, -/area/quartermaster/sorting) -"dmH" = ( -/obj/effect/spawner/structure/window/reinforced, +/obj/item/emptysandbag, +/obj/item/emptysandbag, +/obj/item/emptysandbag, +/obj/item/emptysandbag, +/obj/item/emptysandbag, /turf/open/floor/plating, -/area/quartermaster/sorting) +/area/maintenance/port/fore) +"dmH" = ( +/turf/closed/wall, +/area/quartermaster/qm) "dmT" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on{ - dir = 1 +/obj/structure/chair/office, +/obj/effect/landmark/start/quartermaster, +/turf/open/floor/wood{ + icon_state = "wood-broken4" }, -/turf/open/floor/plasteel, -/area/quartermaster/sorting) +/area/quartermaster/qm) "dmU" = ( /obj/machinery/computer/crew{ dir = 8 @@ -68340,6 +67834,15 @@ /obj/effect/spawner/structure/window/reinforced, /turf/open/floor/plating, /area/maintenance/starboard/aft) +"dxo" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 5 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/quartermaster/sorting) "dxQ" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -68719,15 +68222,13 @@ /turf/open/floor/plasteel, /area/engine/engineering) "dCl" = ( -/obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/effect/landmark/event_spawn, -/obj/structure/cable, +/obj/effect/spawner/lootdrop/maintenance, /turf/open/floor/plating, /area/maintenance/port/fore) "dCn" = ( -/obj/effect/landmark/event_spawn, /obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel, /area/quartermaster/miningoffice) "dCo" = ( @@ -68767,8 +68268,17 @@ /turf/open/floor/plating, /area/maintenance/starboard/fore) "dCt" = ( -/obj/effect/landmark/event_spawn, -/turf/open/floor/plasteel, +/obj/machinery/firealarm{ + pixel_y = 32 + }, +/obj/machinery/vending/assist, +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 10 + }, +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 10 + }, +/turf/open/floor/plasteel/dark, /area/storage/primary) "dCv" = ( /obj/effect/landmark/event_spawn, @@ -68776,13 +68286,9 @@ /turf/open/floor/plasteel, /area/crew_quarters/locker) "dCx" = ( -/obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/effect/landmark/event_spawn, -/obj/structure/cable, -/turf/open/floor/plating{ - icon_state = "panelscorched" - }, -/area/maintenance/port/fore) +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/quartermaster/warehouse) "dCz" = ( /obj/effect/landmark/event_spawn, /turf/open/floor/plasteel/dark, @@ -68795,7 +68301,12 @@ /turf/open/floor/plasteel, /area/crew_quarters/locker) "dCB" = ( -/obj/effect/landmark/event_spawn, +/obj/effect/turf_decal/bot_white/right, +/obj/effect/turf_decal/arrows/red{ + dir = 4 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel, /area/quartermaster/storage) "dCC" = ( @@ -68818,10 +68329,37 @@ /turf/open/floor/plasteel, /area/hallway/primary/central) "dCI" = ( -/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, -/obj/effect/landmark/event_spawn, +/obj/structure/table, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 6 + }, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 6 + }, +/obj/item/paper_bin/bundlenatural{ + pixel_y = 5; + pixel_x = -19 + }, +/obj/item/paper_bin/bundlenatural{ + pixel_y = 5; + pixel_x = -7 + }, +/obj/item/paper_bin/bundlenatural{ + pixel_y = 9; + pixel_x = -19 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/item/paperplane{ + pixel_x = 9 + }, +/obj/item/paperplane{ + pixel_y = 7; + pixel_x = 7 + }, /turf/open/floor/plasteel, -/area/hallway/primary/port) +/area/quartermaster/sorting) "dCJ" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -68847,6 +68385,9 @@ /obj/effect/turf_decal/tile/yellow{ dir = 8 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/plasteel, /area/hallway/primary/starboard) "dCN" = ( @@ -68855,6 +68396,7 @@ }, /obj/effect/landmark/event_spawn, /obj/structure/cable, +/obj/structure/disposalpipe/segment, /turf/open/floor/plasteel, /area/hallway/primary/port) "dCO" = ( @@ -68897,6 +68439,9 @@ dir = 4 }, /obj/effect/landmark/event_spawn, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/carpet, /area/library) "dDa" = ( @@ -68908,6 +68453,9 @@ dir = 8 }, /obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/plasteel, /area/hallway/secondary/command) "dDb" = ( @@ -69319,6 +68867,18 @@ dir = 5 }, /area/crew_quarters/kitchen) +"ecO" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/port) "eds" = ( /obj/structure/closet/l3closet/virology, /obj/effect/turf_decal/tile/green{ @@ -69415,6 +68975,18 @@ /obj/machinery/door/firedoor, /turf/open/floor/plasteel, /area/hallway/primary/aft) +"ekE" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/central) "ekW" = ( /obj/effect/turf_decal/tile/yellow{ dir = 8 @@ -69439,11 +69011,20 @@ /area/medical/virology) "enV" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 }, -/obj/item/radio/intercom{ - pixel_x = -29 +/turf/open/floor/plasteel, +/area/hallway/primary/central) +"eoc" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 }, /turf/open/floor/plasteel, /area/hallway/primary/central) @@ -69493,18 +69074,15 @@ /turf/open/floor/plasteel/white, /area/medical/chemistry) "ewb" = ( -/obj/effect/turf_decal/tile/blue{ +/obj/effect/turf_decal/trimline/brown/filled/line{ dir = 1 }, -/obj/effect/turf_decal/tile/blue{ - dir = 4 +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 1 }, -/obj/structure/table, -/obj/item/stack/medical/mesh, -/obj/item/stack/medical/gauze, -/obj/item/stack/medical/suture, -/turf/open/floor/plasteel/white, -/area/medical/medbay/central) +/obj/item/chair, +/turf/open/floor/plasteel, +/area/construction/storage_wing) "exA" = ( /obj/effect/turf_decal/tile/yellow{ dir = 4 @@ -69614,6 +69192,14 @@ }, /turf/open/floor/plasteel/dark, /area/chapel/office) +"eIt" = ( +/obj/machinery/holopad, +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/construction/storage_wing) "eIP" = ( /obj/effect/turf_decal/tile/yellow, /obj/structure/sign/poster/official/safety_eye_protection{ @@ -69683,6 +69269,22 @@ icon_state = "wood-broken4" }, /area/maintenance/port/aft) +"eUK" = ( +/obj/machinery/computer/cargo/request{ + dir = 1 + }, +/obj/structure/window/reinforced, +/obj/effect/turf_decal/trimline/brown/filled/line, +/obj/effect/turf_decal/trimline/brown/filled/line, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel, +/area/quartermaster/sorting) "eUQ" = ( /obj/effect/turf_decal/tile/blue, /obj/effect/turf_decal/tile/blue{ @@ -69873,6 +69475,15 @@ /obj/effect/turf_decal/trimline/blue/filled/warning, /turf/open/floor/plasteel/white, /area/medical/medbay/central) +"fnP" = ( +/obj/effect/turf_decal/trimline/brown/corner{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 6 + }, +/turf/open/floor/plasteel, +/area/quartermaster/storage) "fos" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/landmark/start/prisoner, @@ -70104,6 +69715,12 @@ }, /turf/open/floor/plating, /area/security/checkpoint/engineering) +"fNH" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/construction/storage_wing) "fRx" = ( /obj/effect/turf_decal/tile/blue{ dir = 8 @@ -70117,6 +69734,16 @@ }, /turf/open/floor/plasteel/white, /area/medical/paramedic) +"fSg" = ( +/obj/structure/table, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 9 + }, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 9 + }, +/turf/open/floor/plasteel, +/area/quartermaster/storage) "fSV" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/manifold/supply/hidden, @@ -70139,6 +69766,12 @@ }, /turf/open/floor/circuit, /area/science/misc_lab/range) +"fVm" = ( +/obj/structure/cable, +/turf/open/floor/plating{ + icon_state = "platingdmg3" + }, +/area/maintenance/port/fore) "fVx" = ( /obj/effect/turf_decal/tile/yellow, /obj/effect/turf_decal/tile/yellow{ @@ -70212,6 +69845,53 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/plasteel, /area/maintenance/department/science) +"gcj" = ( +/obj/structure/table/wood/fancy/orange, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/item/clothing/mask/cigarette/cigar{ + pixel_x = -4; + pixel_y = 1 + }, +/obj/item/clothing/mask/cigarette/cigar{ + pixel_y = 6; + pixel_x = -6 + }, +/obj/item/clothing/mask/cigarette/cigar{ + pixel_y = -2; + pixel_x = -1 + }, +/obj/item/lighter{ + pixel_y = -7; + pixel_x = 11 + }, +/obj/item/coin/gold{ + pixel_y = 9; + pixel_x = 9 + }, +/turf/open/floor/carpet/red, +/area/quartermaster/qm) +"gdH" = ( +/obj/structure/table/wood/fancy/orange, +/obj/machinery/requests_console{ + department = "Cargo Bay"; + departmentType = 2; + pixel_x = 32 + }, +/obj/item/reagent_containers/food/drinks/bottle/whiskey{ + pixel_y = 16; + pixel_x = -5 + }, +/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass{ + pixel_y = 6; + pixel_x = 2 + }, +/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass{ + pixel_y = 6; + pixel_x = -8 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/carpet/red, +/area/quartermaster/qm) "geT" = ( /obj/structure/disposalpipe/segment{ dir = 5 @@ -70250,6 +69930,19 @@ /obj/structure/reagent_dispensers/watertank, /turf/open/floor/plating, /area/maintenance/aft/secondary) +"gly" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 1 + }, +/obj/structure/table, +/obj/item/stack/sheet/glass, +/obj/item/electronics/airlock, +/obj/item/assembly/timer{ + pixel_x = -4; + pixel_y = 2 + }, +/turf/open/floor/plasteel/white, +/area/science/research) "glT" = ( /obj/structure/cable, /obj/effect/turf_decal/tile/blue{ @@ -70396,6 +70089,13 @@ dir = 5 }, /area/crew_quarters/kitchen) +"gsF" = ( +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/central) "gtf" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -70476,6 +70176,16 @@ }, /turf/open/floor/plating, /area/maintenance/aft/secondary) +"gCM" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/public/glass{ + name = "Library" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/wood, +/area/library) "gDK" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ dir = 1 @@ -70519,6 +70229,12 @@ }, /turf/open/floor/plasteel/white, /area/medical/sleeper) +"gHt" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 5 + }, +/turf/open/floor/plasteel, +/area/construction/storage_wing) "gHT" = ( /obj/effect/turf_decal/tile/blue{ dir = 4 @@ -70532,6 +70248,16 @@ }, /turf/open/floor/plasteel/white, /area/medical/surgery/room_c) +"gIg" = ( +/obj/machinery/vending/tool, +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 10 + }, +/obj/effect/turf_decal/trimline/neutral/filled/line{ + dir = 10 + }, +/turf/open/floor/plasteel/dark, +/area/storage/primary) "gJs" = ( /obj/effect/spawner/structure/window/plasma/reinforced, /turf/open/floor/plating, @@ -70684,6 +70410,14 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel/white, /area/medical/sleeper) +"hdT" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/central) "hdX" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/closet/emcloset, @@ -70794,6 +70528,10 @@ }, /turf/open/floor/plasteel/white, /area/medical/medbay/central) +"hpn" = ( +/obj/structure/cable, +/turf/open/floor/wood, +/area/quartermaster/qm) "hpQ" = ( /obj/effect/turf_decal/trimline/green/filled/corner{ dir = 1 @@ -70848,6 +70586,14 @@ /obj/effect/decal/cleanable/blood/gibs/old, /turf/open/floor/plating, /area/maintenance/port/aft) +"hxH" = ( +/obj/structure/disposalpipe/sorting/mail{ + dir = 8; + sortType = 3 + }, +/obj/structure/cable, +/turf/open/floor/plasteel, +/area/hallway/primary/port) "hxP" = ( /obj/structure/cable, /obj/effect/turf_decal/stripes/line{ @@ -71082,6 +70828,14 @@ /obj/structure/cable, /turf/open/floor/plasteel/dark, /area/medical/morgue) +"hVz" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/central) "hWp" = ( /obj/machinery/door/poddoor/shutters/preopen{ id = "engsm"; @@ -71242,6 +70996,33 @@ }, /turf/open/floor/plasteel, /area/science/misc_lab/range) +"irW" = ( +/obj/structure/closet/crate{ + icon_state = "crateopen" + }, +/obj/item/stack/packageWrap, +/obj/item/stack/packageWrap{ + pixel_y = 2 + }, +/obj/item/stack/packageWrap{ + pixel_y = 5 + }, +/obj/item/stack/packageWrap{ + pixel_y = 8 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/construction/storage_wing) +"iuX" = ( +/obj/effect/landmark/event_spawn, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/central) "ixg" = ( /obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, /obj/structure/disposalpipe/segment{ @@ -71434,12 +71215,23 @@ /turf/open/floor/plasteel/white, /area/medical/virology) "jeV" = ( -/obj/machinery/conveyor/inverted{ - dir = 10; - id = "QMLoad" +/obj/effect/turf_decal/bot_white/right, +/obj/effect/turf_decal/arrows/red{ + dir = 4 }, -/turf/open/floor/plating, +/obj/effect/spawner/lootdrop/maintenance, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel, /area/quartermaster/storage) +"jiz" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/door/airlock/mining{ + name = "Deliveries"; + req_one_access_txt = "31;48" + }, +/obj/machinery/door/firedoor, +/turf/open/floor/plasteel, +/area/quartermaster/sorting) "jjg" = ( /obj/effect/turf_decal/stripes/line, /obj/machinery/button/door{ @@ -71668,6 +71460,10 @@ /obj/machinery/vending/coffee, /turf/open/floor/plasteel, /area/hallway/secondary/entry) +"jHm" = ( +/obj/structure/disposalpipe/segment, +/turf/closed/wall, +/area/science/research) "jHw" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -71915,6 +71711,14 @@ /obj/effect/landmark/start/janitor, /turf/open/floor/plasteel, /area/janitor) +"kex" = ( +/obj/machinery/door/firedoor, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/central) "kfZ" = ( /obj/structure/table/wood, /obj/effect/decal/cleanable/dirt/dust, @@ -71935,12 +71739,33 @@ }, /turf/open/floor/plasteel, /area/science/mixing) +"kiy" = ( +/obj/machinery/conveyor{ + dir = 1; + id = "QMLoad" + }, +/obj/structure/window/reinforced, +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/turf/open/floor/plasteel, +/area/quartermaster/storage) "kjh" = ( /obj/effect/decal/cleanable/dirt, /obj/vehicle/ridden/janicart, /obj/item/key/janitor, /turf/open/floor/plasteel, /area/janitor) +"kjJ" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/central) "kkA" = ( /obj/structure/cable, /obj/machinery/door/firedoor, @@ -71966,6 +71791,16 @@ }, /turf/open/floor/plasteel/white, /area/medical/patients_rooms) +"klF" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 5 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/central) "kmq" = ( /turf/closed/wall/r_wall, /area/medical/morgue) @@ -72004,6 +71839,13 @@ "krD" = ( /turf/open/floor/plasteel/white, /area/science/misc_lab/range) +"ksI" = ( +/obj/item/radio/intercom{ + pixel_x = -29 + }, +/obj/item/kirbyplants/random, +/turf/open/floor/plasteel, +/area/construction/storage_wing) "ksN" = ( /obj/effect/turf_decal/tile/blue{ dir = 1 @@ -72068,6 +71910,9 @@ pixel_x = 24 }, /obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, /turf/open/floor/plasteel, /area/hallway/secondary/service) "kyI" = ( @@ -72162,6 +72007,19 @@ }, /turf/open/floor/plasteel/white, /area/medical/chemistry) +"kEb" = ( +/obj/machinery/conveyor{ + dir = 1; + id = "packageExternal" + }, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/open/floor/plating, +/area/quartermaster/qm) "kEz" = ( /obj/structure/disposalpipe/segment, /turf/open/floor/plasteel/white, @@ -72490,6 +72348,16 @@ }, /turf/open/floor/plasteel/white, /area/medical/medbay/central) +"lqU" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, +/obj/effect/turf_decal/tile/yellow{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/starboard) "lui" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -72499,6 +72367,21 @@ }, /turf/open/floor/plasteel/dark, /area/medical/morgue) +"luZ" = ( +/obj/machinery/power/apc{ + name = "Quartermaster's Office APC"; + pixel_y = 30; + areastring = "/area/quartermaster/qm"; + dir = 1 + }, +/obj/structure/cable, +/obj/machinery/atmospherics/components/unary/vent_pump/on{ + dir = 4 + }, +/turf/open/floor/wood{ + icon_state = "wood-broken5" + }, +/area/quartermaster/qm) "lwx" = ( /obj/effect/turf_decal/delivery, /obj/effect/mapping_helpers/airlock/cyclelink_helper, @@ -72545,11 +72428,29 @@ "lAu" = ( /turf/open/space/basic, /area/space/nearstation) +"lCL" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/effect/turf_decal/tile/neutral, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/central) +"lCP" = ( +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/port) "lDf" = ( -/obj/effect/spawner/structure/window/reinforced, -/obj/machinery/pinpointer_dispenser, -/turf/open/floor/plating, -/area/quartermaster/sorting) +/turf/open/floor/plasteel, +/area/hallway/primary/port) "lEV" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ @@ -73010,6 +72911,12 @@ }, /turf/open/floor/plating, /area/maintenance/aft/secondary) +"mpe" = ( +/obj/machinery/disposal/bin, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/disposalpipe/trunk, +/turf/open/floor/wood, +/area/quartermaster/qm) "mqo" = ( /obj/machinery/door/poddoor/shutters{ id = "maintwarehouse" @@ -73031,6 +72938,16 @@ /obj/machinery/photocopier, /turf/open/floor/plasteel, /area/engine/break_room) +"muk" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/central) "mvj" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -73073,6 +72990,13 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/plating, /area/maintenance/aft) +"mBz" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/construction/storage_wing) "mCu" = ( /obj/item/clothing/suit/snowman, /obj/item/clothing/head/snowman, @@ -73130,6 +73054,18 @@ /obj/machinery/atmospherics/pipe/simple/supply/hidden, /turf/open/floor/plasteel/checker, /area/engine/storage_shared) +"mIU" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/central) "mKb" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/simple/supply/hidden, @@ -73283,6 +73219,13 @@ }, /turf/open/floor/grass, /area/medical/virology) +"niJ" = ( +/obj/effect/turf_decal/trimline/red/filled/line, +/obj/effect/turf_decal/trimline/brown/filled/warning, +/obj/effect/turf_decal/trimline/brown/filled/warning, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel, +/area/quartermaster/sorting) "njJ" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ @@ -73410,6 +73353,9 @@ dir = 8 }, /obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/open/floor/plasteel, /area/hallway/secondary/service) "nBA" = ( @@ -73470,17 +73416,14 @@ }, /area/medical/break_room) "nIb" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/mining{ - name = "Cargo Bay"; - req_one_access_txt = "31;48" +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 }, -/obj/effect/turf_decal/delivery, -/obj/effect/mapping_helpers/airlock/cyclelink_helper{ - dir = 8 +/turf/open/floor/plating{ + icon_state = "platingdmg3" }, -/turf/open/floor/plasteel, -/area/construction/storage_wing) +/area/maintenance/port/fore) "nJh" = ( /obj/effect/turf_decal/trimline/blue/filled/line{ dir = 10 @@ -73538,11 +73481,22 @@ }, /turf/open/floor/plasteel/white, /area/medical/chemistry) +"nMU" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/construction/storage_wing) "nOl" = ( /obj/effect/landmark/start/medical_doctor, /obj/structure/chair/office/light, /turf/open/floor/plasteel/white, /area/medical/patients_rooms) +"nOZ" = ( +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/quartermaster/qm) "nPC" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ @@ -73745,6 +73699,13 @@ "ojg" = ( /turf/closed/wall, /area/science/misc_lab/range) +"okr" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/structure/disposalpipe/segment, +/turf/open/floor/wood{ + icon_state = "wood-broken3" + }, +/area/quartermaster/qm) "ong" = ( /obj/effect/turf_decal/tile/neutral{ dir = 8 @@ -73912,6 +73873,17 @@ }, /turf/open/floor/plasteel/dark/corner, /area/engine/storage_shared) +"oEx" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/central) "oJL" = ( /obj/effect/turf_decal/tile/red{ dir = 1 @@ -74150,6 +74122,14 @@ }, /turf/open/floor/plasteel, /area/hydroponics) +"plu" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel, +/area/hallway/primary/port) "plC" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -74201,6 +74181,12 @@ }, /turf/open/floor/plating, /area/maintenance/port/aft) +"puy" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/closed/wall, +/area/hydroponics) "puQ" = ( /obj/effect/turf_decal/tile/yellow{ dir = 8 @@ -74301,6 +74287,36 @@ /obj/structure/displaycase/forsale, /turf/open/floor/plasteel, /area/crew_quarters/bar) +"pAA" = ( +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 1 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/machinery/conveyor_switch/oneway{ + dir = 8; + id = "packageExternal"; + name = "Crate Returns"; + pixel_x = -5; + pixel_y = 23 + }, +/obj/effect/turf_decal/trimline/brown/filled/corner{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/brown/filled/corner{ + dir = 1 + }, +/obj/structure/disposalpipe/junction/flip{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/port) +"pBs" = ( +/obj/effect/turf_decal/trimline/brown/warning, +/obj/effect/turf_decal/trimline/brown/warning, +/turf/open/floor/plasteel/white, +/area/science/research) "pCp" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/cable, @@ -74350,6 +74366,13 @@ }, /turf/open/floor/plasteel/white, /area/medical/surgery/room_c) +"pHd" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/spawner/structure/window/reinforced, +/turf/open/floor/plating, +/area/quartermaster/sorting) "pKP" = ( /obj/machinery/power/apc/highcap/five_k{ areastring = "/area/medical/virology"; @@ -74407,6 +74430,13 @@ /obj/item/reagent_containers/food/drinks/soda_cans/monkey_energy, /turf/open/floor/plating, /area/maintenance/port/aft) +"pMn" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/manifold/supply/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/construction/storage_wing) "pMX" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -74681,6 +74711,18 @@ }, /turf/open/floor/plasteel, /area/maintenance/department/science) +"qsb" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/port) "qte" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /obj/structure/disposalpipe/segment, @@ -74833,6 +74875,7 @@ /area/crew_quarters/kitchen) "qBS" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/disposalpipe/segment, /turf/closed/wall, /area/vacant_room/commissary) "qEU" = ( @@ -74893,6 +74936,14 @@ /obj/structure/cable, /turf/open/floor/plasteel, /area/hallway/secondary/entry) +"qHJ" = ( +/obj/effect/landmark/event_spawn, +/obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/central) "qLf" = ( /obj/structure/table/wood, /obj/item/storage/photo_album/library, @@ -74998,6 +75049,20 @@ /obj/effect/turf_decal/stripes/line, /turf/open/floor/plating, /area/maintenance/aft/secondary) +"qYo" = ( +/obj/machinery/conveyor{ + dir = 1; + id = "packageExternal" + }, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/plasticflaps/opaque, +/turf/open/floor/plating, +/area/quartermaster/qm) "qZf" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/supply/hidden, @@ -75074,6 +75139,31 @@ }, /turf/open/floor/plating, /area/maintenance/port/aft) +"rli" = ( +/obj/structure/table/reinforced, +/obj/effect/turf_decal/trimline/brown/filled/line, +/obj/effect/turf_decal/trimline/brown/filled/line, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 1 + }, +/obj/machinery/door/window/westleft{ + dir = 2; + name = "Cargo Desk"; + req_access_txt = "50" + }, +/obj/item/paper_bin{ + pixel_y = 6; + pixel_x = -7 + }, +/obj/item/paper/crumpled{ + pixel_x = 7 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/turf/open/floor/plasteel, +/area/quartermaster/sorting) "rmY" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment, @@ -75310,7 +75400,10 @@ /obj/effect/turf_decal/tile/yellow{ dir = 8 }, -/obj/structure/chair{ +/obj/effect/turf_decal/trimline/brown/warning{ + dir = 4 + }, +/obj/effect/turf_decal/trimline/brown/warning{ dir = 4 }, /turf/open/floor/plasteel, @@ -75433,6 +75526,12 @@ }, /turf/open/floor/plasteel/white, /area/security/checkpoint/medical) +"rVn" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/construction/storage_wing) "rWg" = ( /obj/effect/turf_decal/tile/yellow{ dir = 4 @@ -75450,6 +75549,11 @@ }, /turf/open/floor/plasteel/white, /area/medical/paramedic) +"rYl" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/disposalpipe/segment, +/turf/open/floor/carpet, +/area/library) "rYC" = ( /turf/open/floor/plating{ icon_state = "platingdmg2" @@ -75527,6 +75631,13 @@ /obj/effect/turf_decal/trimline/blue/filled/warning, /turf/open/floor/plasteel/white, /area/medical/medbay/central) +"scu" = ( +/obj/machinery/hydroponics/constructable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/hydroponics) "scY" = ( /obj/effect/spawner/structure/window/reinforced, /obj/structure/cable, @@ -75620,6 +75731,19 @@ /obj/structure/grille, /turf/open/floor/plating/airless, /area/space/nearstation) +"sjs" = ( +/obj/machinery/disposal/deliveryChute{ + dir = 1; + name = "Science Deliveries" + }, +/obj/structure/plasticflaps/opaque{ + name = "Science Deliveries" + }, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/quartermaster/sorting) "sjZ" = ( /obj/structure/sign/directions/evac, /turf/closed/wall, @@ -75801,6 +75925,12 @@ }, /turf/open/floor/plating, /area/maintenance/port/aft) +"sBo" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/carpet, +/area/library) "sEG" = ( /obj/structure/cable, /obj/machinery/atmospherics/pipe/simple/supply/hidden{ @@ -76196,6 +76326,11 @@ }, /turf/open/floor/engine, /area/engine/supermatter) +"tDQ" = ( +/obj/effect/spawner/structure/window, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plating, +/area/medical/medbay/central) "tFJ" = ( /obj/structure/disposalpipe/trunk{ dir = 8 @@ -76479,6 +76614,23 @@ }, /turf/open/floor/plasteel/white, /area/medical/medbay/central) +"uzn" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/corner{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/central) +"uzx" = ( +/obj/effect/turf_decal/trimline/brown/warning, +/obj/effect/turf_decal/trimline/brown/warning, +/turf/open/floor/plasteel/white, +/area/medical/medbay/central) "uzM" = ( /obj/structure/sign/poster/contraband/busty_backdoor_xeno_babes_6{ pixel_x = 32 @@ -76498,6 +76650,15 @@ }, /turf/open/floor/plasteel/white, /area/medical/surgery) +"uDW" = ( +/obj/effect/turf_decal/trimline/purple/filled/line, +/obj/effect/turf_decal/trimline/brown/filled/warning, +/obj/effect/turf_decal/trimline/brown/filled/warning, +/obj/structure/disposalpipe/segment{ + dir = 6 + }, +/turf/open/floor/plasteel, +/area/quartermaster/sorting) "uEH" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, @@ -76516,6 +76677,19 @@ /obj/structure/cable, /turf/open/space, /area/space/nearstation) +"uGf" = ( +/obj/machinery/conveyor{ + dir = 1; + id = "packageExternal" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/open/floor/plating, +/area/quartermaster/qm) "uGS" = ( /turf/closed/wall, /area/medical/pharmacy) @@ -76765,6 +76939,17 @@ }, /turf/open/floor/plasteel/white, /area/medical/virology) +"vju" = ( +/obj/structure/cable, +/obj/machinery/power/apc{ + name = "Delivery Office APC"; + pixel_y = 32; + areastring = "/area/quartermaster/sorting"; + dir = 4; + pixel_x = -1 + }, +/turf/open/floor/plasteel, +/area/quartermaster/sorting) "vkR" = ( /obj/machinery/door/poddoor/preopen{ id = "medbreakroom"; @@ -76805,6 +76990,22 @@ /obj/effect/turf_decal/delivery, /turf/open/floor/plasteel/dark, /area/engine/storage_shared) +"vpU" = ( +/obj/machinery/door/firedoor, +/obj/structure/cable, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plasteel, +/area/hallway/primary/central) +"vpX" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 5 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/construction/storage_wing) "vqh" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/engineering{ @@ -77068,6 +77269,7 @@ /obj/effect/turf_decal/tile/neutral{ dir = 4 }, +/obj/structure/disposalpipe/segment, /turf/open/floor/plasteel, /area/hallway/primary/central) "vLD" = ( @@ -77147,6 +77349,14 @@ }, /turf/open/floor/plating, /area/maintenance/port) +"vTZ" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/effect/turf_decal/tile/neutral, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/central) "vUg" = ( /obj/structure/cable, /turf/open/floor/plasteel, @@ -77249,8 +77459,23 @@ dir = 8; pixel_x = 24 }, +/obj/structure/disposalpipe/segment, /turf/open/floor/plasteel, /area/hallway/primary/central) +"wgX" = ( +/obj/machinery/conveyor{ + dir = 1; + id = "packageExternal" + }, +/obj/structure/plasticflaps/opaque, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/open/floor/plating, +/area/quartermaster/qm) "wgZ" = ( /obj/effect/turf_decal/tile/blue{ dir = 1 @@ -77301,6 +77526,13 @@ }, /turf/open/floor/plasteel/white, /area/medical/chemistry) +"wnR" = ( +/obj/effect/spawner/lootdrop/maintenance, +/obj/structure/rack, +/turf/open/floor/plating{ + icon_state = "platingdmg3" + }, +/area/maintenance/port/fore) "woz" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden{ dir = 4 @@ -77360,6 +77592,21 @@ "wtq" = ( /turf/closed/wall, /area/maintenance/aft/secondary) +"wtw" = ( +/obj/machinery/camera{ + c_tag = "Central Primary Hallway - Fore - Port Corner"; + dir = 4 + }, +/obj/machinery/light{ + dir = 8 + }, +/obj/structure/extinguisher_cabinet{ + pixel_x = -27 + }, +/obj/effect/turf_decal/trimline/brown/filled/line, +/obj/effect/turf_decal/trimline/brown/filled/line, +/turf/open/floor/plasteel, +/area/construction/storage_wing) "wtW" = ( /obj/structure/cable, /obj/structure/disposalpipe/segment{ @@ -77421,6 +77668,21 @@ }, /turf/open/floor/plasteel/white, /area/medical/chemistry) +"wxr" = ( +/obj/structure/table, +/obj/item/storage/firstaid/regular{ + pixel_y = 5; + pixel_x = 7 + }, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/turf/open/floor/plasteel, +/area/quartermaster/storage) "wyn" = ( /obj/structure/table/optable, /obj/effect/turf_decal/tile/blue, @@ -77448,6 +77710,18 @@ dir = 5 }, /area/crew_quarters/kitchen) +"wzA" = ( +/obj/machinery/firealarm{ + pixel_y = -1; + pixel_x = -29 + }, +/obj/machinery/light{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/supply/hidden, +/obj/item/banner/cargo/mundane, +/turf/open/floor/plasteel, +/area/quartermaster/storage) "wAb" = ( /obj/machinery/atmospherics/pipe/manifold/supply/hidden{ dir = 1 @@ -77521,6 +77795,13 @@ /obj/effect/turf_decal/stripes/line, /turf/closed/wall, /area/science/misc_lab/range) +"wLo" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/turf/open/floor/plating, +/area/maintenance/starboard) "wNt" = ( /obj/effect/turf_decal/tile/yellow{ dir = 1 @@ -77716,6 +77997,16 @@ /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, /turf/open/floor/plasteel, /area/janitor) +"xdZ" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 9 + }, +/obj/structure/disposalpipe/segment, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/quartermaster/sorting) "xel" = ( /obj/structure/table/reinforced, /obj/item/storage/backpack/duffelbag/med/surgery, @@ -77941,6 +78232,11 @@ /obj/structure/cable, /turf/open/floor/plasteel, /area/maintenance/department/science) +"xAO" = ( +/obj/structure/cable, +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden, +/turf/open/floor/plasteel, +/area/quartermaster/storage) "xBk" = ( /obj/effect/decal/cleanable/dirt/dust, /obj/structure/closet, @@ -77965,6 +78261,12 @@ /obj/machinery/atmospherics/pipe/manifold/supply/hidden, /turf/open/floor/plasteel/kitchen_coldroom/freezerfloor, /area/medical/coldroom) +"xCQ" = ( +/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/quartermaster/storage) "xDR" = ( /obj/structure/cable, /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ @@ -77979,6 +78281,21 @@ }, /turf/open/floor/plating, /area/maintenance/port/aft) +"xHh" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 1 + }, +/obj/effect/turf_decal/trimline/brown/filled/line{ + dir = 1 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/port) "xIf" = ( /obj/structure/cable, /obj/machinery/atmospherics/components/unary/vent_scrubber/on{ @@ -78003,6 +78320,17 @@ icon_state = "platingdmg1" }, /area/maintenance/aft/secondary) +"xMX" = ( +/obj/effect/turf_decal/tile/green, +/obj/effect/turf_decal/tile/green{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/hydroponics) "xNe" = ( /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/structure/cable, @@ -78021,6 +78349,13 @@ "xOf" = ( /turf/open/floor/plasteel/white, /area/medical/virology) +"xOI" = ( +/obj/effect/turf_decal/delivery, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/open/floor/plasteel, +/area/vacant_room/commissary) "xVb" = ( /obj/structure/cable, /obj/machinery/power/solar{ @@ -78029,6 +78364,29 @@ }, /turf/open/floor/plasteel/airless/solarpanel, /area/solar/port/aft) +"xVe" = ( +/obj/structure/table/wood/fancy/orange, +/obj/item/gps{ + pixel_y = 12; + gpstag = "QM0"; + pixel_x = 10 + }, +/obj/machinery/status_display/supply{ + pixel_x = 32 + }, +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/item/storage/wallet{ + pixel_y = 10; + pixel_x = -3 + }, +/obj/item/ammo_casing/caseless/rocket{ + name = "Dud Rocket"; + pixel_y = -7; + pixel_x = -4; + desc = "Your grandpappy brought this home after the war. You're pretty sure it's a dud." + }, +/turf/open/floor/carpet/red, +/area/quartermaster/qm) "xVl" = ( /turf/closed/wall, /area/hallway/secondary/service) @@ -78076,6 +78434,14 @@ /obj/item/clothing/head/fedora, /turf/open/floor/plating, /area/maintenance/port/aft) +"xYW" = ( +/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, +/obj/effect/turf_decal/tile/neutral, +/obj/structure/disposalpipe/segment{ + dir = 9 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/central) "xYY" = ( /obj/effect/turf_decal/tile/blue{ dir = 8 @@ -78130,6 +78496,18 @@ }, /turf/open/floor/plating, /area/maintenance/port/aft) +"ydI" = ( +/obj/machinery/atmospherics/pipe/simple/supply/hidden{ + dir = 4 + }, +/obj/effect/turf_decal/tile/neutral{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 10 + }, +/turf/open/floor/plasteel, +/area/hallway/primary/central) "yej" = ( /obj/effect/spawner/structure/window/reinforced, /obj/machinery/door/poddoor/preopen{ @@ -78187,6 +78565,10 @@ }, /turf/open/floor/plasteel/white, /area/medical/virology) +"yjY" = ( +/obj/structure/disposalpipe/segment, +/turf/closed/wall, +/area/hallway/primary/central) "ylE" = ( /obj/effect/turf_decal/trimline/blue/filled/corner, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden, @@ -94221,7 +94603,7 @@ aaa aaf ayi azj -aAC +aEx aBS ayi aaf @@ -94497,7 +94879,7 @@ aaf aaf aaf dne -asb +doJ bbM bde beT @@ -94740,7 +95122,7 @@ aBU ayj ayi ayi -ayj +aUe aaf aIg aKO @@ -94750,20 +95132,20 @@ aPd aQh aIg aaf -aaf +lAu aUe aUe aUe -bak -dmF -bdf +doJ +dne +dmH beU -bgE -bbP +dmH +dmH bkf bmd bnT -bqk +bqw bsv btZ bvV @@ -94992,35 +95374,35 @@ dne dne ayj azl -aAE +aAC aAE aDh -aEv +aAC aFF -ayj +aUe aIg aIg -aKN +aMF dIs aIg dIs -aQg +aXl aIg aIg aUe -aVG +aUe aXe -aYJ -bal +aUe +doJ dmF -bdg +dmH byI bgF -dmF -dmF -dmF +dmH +baE +baE bnU -bql +bqw bsw baE bvW @@ -95250,11 +95632,11 @@ awP ayj azm aAF -aAC +aFH aAC aEw aFG -ayj +aUe aIh aJC aKP @@ -95265,17 +95647,17 @@ aQi aRH aRH aUf -aRH -jeV +kiy +aYM aYK -bam +doJ dmH -bdh -byI +dmH +luZ bgG -biD +nOZ bkg -bme +lDf bnV bBG bsx @@ -95506,35 +95888,35 @@ dne dne ayj azn -aAG +aAC aBV aDi -aEx -aFH -aHc +ayj +ayj +aUe aIi -aJD -aKQ -aKQ -aKQ -aKQ -aKQ -aKQ aSQ -aKQ -aKQ -aKQ -aYL -ban -bbO +aSQ +aSQ +aSQ +aSQ +aSQ +aSQ +aSQ +aSQ +aSQ +aYM +aUe +dmH +dmH bdi beV bgH -biE +nOZ bkh lDf -bnW -bqn +boc +bqp bsy bub bvX @@ -95757,37 +96139,37 @@ anX apt dnk doJ -atu -aRG -dnZ +avN +aHk +azp awQ ayk -azo -aAH +dCn +dCn aBW dCn -aEy +dCn aFI -aHd +aIj aIj aJE -aKR -aMv -aNF -aMv -aMv +aYM aMv aKR +aTg +cVC aMv +aKR +aTg cVC aXf -aYM +wzA bao -dmH -bdh +mpe +okr beW bgI -biF +bki bki bmf bnX @@ -96015,40 +96397,40 @@ ahp dhu doJ atu -dnk -dnk -doJ -ayj -azp +aRG +aRG +azs +aAG +aAC aAI aBX aDj aEz aFJ -ayj aIk -aJE -aKS -aMv -aNG -aMv -aQj -aMv +aIk +aID aKS dCB -aMv -aMv +aXh +aTh +aQj +bak +aXh +dCB +xAO +aXi aYM bap -dmF -bdi +hpn +hpn beX bgJ biG -bkj -bmg +dmH +dmH bnY -bql +bqw bsA baE bvW @@ -96273,39 +96655,39 @@ aqL asi atu auG -avN -doJ -ayj -ayj +dne +dne +aAO +aAC aAJ -ayj -ayj -ayj -ayj -ayj -aIl +aAC +aFX +aJK +aJK +aJG +aJG aJF -aKT +aVH aMw aNH -aMw +aUt aQk -aMw +bal aSR -aMw +jeV aVH aXg -aYM -baq -dmF -bdj -dmF +fSg +biE +bgK +bgK +bgK bgK dmT bkk -dmF +dmH bnZ -bql +bqw bsB alK aoe @@ -96531,37 +96913,37 @@ doJ atD dnk dnk -doJ +dne ayl aEt aAK aBY aDk -aEA +aJK aFK aHe -aIm +aJG aJG aKU -aMv aNI -aMv -aQl -aMv +aYM +aUu +aSQ +aTg aSS aMv -aQl +xCQ aXh -aMv +wxr bar -dmF -bdi -dmF +gdH +xVe +gcj bgL biI bkl -dmF -bnW +dmH +boc bqp bsC bud @@ -96788,36 +97170,36 @@ asj atv auH avO -doJ -ayl -dhy +dne +ayj +ayj aAL -aBZ -aDl -aEB +ayj +ayj +aJK aFL aHf aIn aJH aKV -aJH +aNU aNJ -aJH -aQm -aJH +aVG aST -aJH -aJH +aST +aST +fnP +aKV aXi aYO -bas -bbP -bdk -dmF -bgM -biJ -bkm -dmF +dmH +dmH +dmH +nOZ +nOZ +dmH +dmH +dmH boa bqq bsD @@ -97044,39 +97426,39 @@ aqN ask dpG auI -aol -awS -ayl -azs -aAM -aCa +aok +dne +aBZ +auL +aAN +aDn aDm dhC -ayl +aHc aHg aIo -aJI +dhC aKW -aMx -aNK -aJI -aQn -aQn +aVK +aNL +aUh +bau +bam aSU aUg aVJ aXj aYP bat -dmF -dmF -dmF +kEb +uGf bgN -dmF -dmF -dmF +bgN +bgN +wgX +qYo bob -bql +bqw bsE bue bue @@ -97299,17 +97681,17 @@ aRG alE dou dne -dne +cWA auJ avQ dne -ayl +aCc azt aAN -aCb aDn -aED -ayl +aDn +dhC +aHj aHh aIp aJJ @@ -97317,24 +97699,24 @@ aKX aMy aNL aPe -aJH +aXy aRI aSV aUh aVK aXk -aYQ +bau bau bbQ bdl -beY -bgO +biK +biK biK bkn -bat -bnW +bmh +pAA bqs -bsx +ecO bue bwa bxU @@ -97559,37 +97941,37 @@ dne atx auK avR -awT +aAN aym azu -aAO -aCc -aDo -aEE -ayl -aHi -aIq +doJ +doJ +aHl aJK -aKY +aJK +aJK +aJK +aJK +aSZ aMz aNM aPf -aQo -aRJ -aSW +aSZ +aSZ +aSZ aUi -aVL -aXl +aXi +aYM aYR bav bbR -bdm +bdo beZ bgP biL -bko -bbN -bnV +bmk +bmk +qsb dCN apA bue @@ -97816,45 +98198,45 @@ dne aty auL avS -awU -ayl -ayl -ayl -ayl -ayl -ayl -ayl -aHj -aIr -dne +aAN +aDl +aEv +aRG +aFV +aRG +dnZ +aHm +aRG +dnZ +aSZ aKZ -dne -aNN +aNV +aNP aPg aQp -aQp -aSX -aSX +bqk +aSZ +nMU aVM aXm -aSX -bat -bbS -bdn +bmk +bmk +bmk +vju bfa bgQ biH bkp bmh -bnV -bql +bnX +plu avH bug -bCV -bCV -bCV -bCV -bCV +rYl +rYl +rYl +rYl +rYl bEx bCV bCV @@ -98075,34 +98457,34 @@ ash asj awV ayn -ayn +biC dCl -ayn -ayn -ayn -aFM +aFW +aHk +aHk +aHk aHk aIs -aJL +aSZ aLa -dne -aNO +aNW +aNP aPh aQq aRK -aSX +aSZ aUj aVN aXn -aSX +bmk baw bbT bdo bfb bgR -bfb +niJ bkq -bmi +bmk boc bqt bsy @@ -98339,19 +98721,19 @@ dne dne dne aHl -aIt -dne +aIu +aSZ aLb -dne +aNX aNP aPi aQr aRL -aSX +aSZ aUk aVO aXo -aSX +eUK bax bbU bdp @@ -98359,7 +98741,7 @@ bfc bgS biM bkr -bat +bmk bnV bql awL @@ -98594,31 +98976,31 @@ aaa aaf aaa aaa -aFN -aHm +dne +dnk nIb -dne +aSZ aLc -dne +aNR aNQ -aPj +aQq aQs -aRM -aSX +aSZ +aSZ aUl aVP aXp -aSX +rli bay bbV bdq bbN -bgT -bat -bat -bmj +bgY +uDW +sjs +bmk bod -bql +hxH bsG bue bue @@ -98851,31 +99233,31 @@ awW awW awW aaf -aEH +dne aHn aIu -dne +aSZ bOq -dne +aNY aNR -aPk +aQq aQt -aRN -aSX +dCx +dhy aUm aVQ aXq aYS -baz -bbW +bgQ +bbY bdr bfd -bgU +bgY biN bks -bdw +bmh boe -bql +plu bsH bue aAz @@ -99108,39 +99490,39 @@ aAP aCd aDp aaa -aEH -aHo +dne +dne dhG -dne -aLc -dne -dne -dne -dne -dne -dne -dne -dne -dne -dne +aSZ +aQq +aPq +aQy +aQq +aXA +dCx +dhy +rVn +eIt +aXq +bmm baA -bbX +bbY bds dCI -bgV +bgY biO -bkt +bmk bmk bof -bqu -bsz +bql +lCP bue bwg bxX bue bBv bwc -bwc +sBo bzE bPT bzE @@ -99368,26 +99750,26 @@ aEF aEF aHp aIw -aJM +aSZ aLe -asj -aJi +aQq +aRS aPl -asj +aYJ dCx -aPl -asj -asj +ewb +fNH +aVO aXr -dne +bmm baB bbY bdt -bbY -bgW +dxo +bgY biP bku -bml +bmm bog bqv bsI @@ -99397,7 +99779,7 @@ bue bue cUT bwc -bwc +sBo bHU bHV bJB @@ -99625,36 +100007,36 @@ aEG aFR aHq aIx -aJN -aJN -aJN -aJN -aPm -aJN -aJN aSZ -aJN -aJN +aNF +aNF +dCx +aSZ +aSZ +aSZ +aSZ +irW +mBz aXs -aYT -baC +bmh +bmh bbZ bdu -bbZ -bgX +xdZ +biQ biQ bkv -bdw +jiz boh bqw -bsx +ecO bue bwf bxW bzH bzE dCX -bwc +sBo bzE cVb cVe @@ -99879,39 +100261,39 @@ aAS aCg aDs aEH -aEH -aHo -aIw -aJO -aLf +aHu +aVP +dhL +aIE +aMA aMA aNT -aPn +aTa aQu -aRO +aTa aTa dhL -aJN -atA -dne -baD -bca +pMn +vpX +ksI +bmk +bmk bdv bff bgY biR bkw -bdw -bnV +bmm +xHh bqw -bsx +ecO bue aFE bxX bue bBw bwc -bwc +sBo bBx bue bue @@ -100136,28 +100518,28 @@ aAT aCh awW aaa -aEH -aHo +aHu +aIB aIz aJP aLg aMB -aMB -aMB -aMB -aRP +aTf +aXo +aYL +aXo aTb aUo -aJN +aXo aXu -dne -baE -baE +gHt +wtw +bmk bdw bfg bgZ -bdw -baE +pHd +bmm bmm boi bqx @@ -100168,7 +100550,7 @@ bue bue cUU aZO -aZO +gCM cUU bue buf @@ -100392,27 +100774,27 @@ awW awW awW awW -aaf -aEH +lAu +aHv aHs aIA -aJQ +aJO aLh aMC -aNU +aJN dCt -aMB -aRP -aTb +aQv +bqu +aTc aUp -aJO +gIg aXv enV baF bcb bdx bfh -bdx +bfh bfh bkx aYU @@ -100425,7 +100807,7 @@ bxY bzI buj bCW -buj +oEx buj cVd buj @@ -100436,7 +100818,7 @@ buj bwh bSD buj -buj +klF bWh css bYS @@ -100652,11 +101034,11 @@ aaa aaa aFN aHt -aIB -aJO -aLi +aFN +aIF +aLj aMD -aNV +aJN aPo aQv aRQ @@ -100668,9 +101050,9 @@ aYV baG baG baG -baG -baG -baG +auT +auT +auT bdP baG bok @@ -100906,14 +101288,14 @@ aaa aaa aaa aaa -aDu -aDu -aDu +dne +dne aIC -aJN +dne +aJQ aLj aME -aNW +aJN aPp aQw aRR @@ -100925,9 +101307,9 @@ aYW baH bfi bfi -bfi -bfi -bfi +xYW +vTZ +lCL wgP bmn bfi @@ -101163,27 +101545,27 @@ aaa aaa aaa aaa -azC -aFV -aHu -aID -aJN +anb +doA +doJ +dne +aJR dhI -aME -aNW -dCt +aPr +aJN +aVS aQx -aMB +caA aTe aUs -aJR -aXy -dCE -baQ +aJO +aXR +qHJ +muk rrB pqy cXT -cXT +xOI dtM bkz bkz @@ -101420,20 +101802,20 @@ aaa aaa aaa aaa -azC -aFW -aHv -aIE +anb +wnR +doJ +dne aJN aLl -aME -aNX -aPq -aPq -aPq -aTf -aUt -aVS +aJN +aJN +aJN +aJN +aJN +aJN +aJN +aJN aXz aYY baQ @@ -101677,22 +102059,22 @@ aaa aaa aaa aaa -azC -aFW -aHw -aIF -aJN +anb +doJ +doJ +doJ +doJ aLm -aMF -aNY -aPr -aQy -aRS -aTg -aUu +doJ +doJ +doJ +fVm +doJ +doJ +doJ aVT -aXA -aYZ +aXD +gsF baJ rrB bdB @@ -101720,7 +102102,7 @@ bOp bMT bRp bSE -bTI +mIU aWf bWm css @@ -101934,22 +102316,22 @@ aaa aAV aaa aaa -aDu -aFX -aHx -aHy -aJR +dne +doJ +aio +anb +anb aLn -aJR -aJR -aJR -aJR -aJR -aTh -aJR -aJR +aio +aio +aio +aio +anb +anb +aio +aio aXB -aZa +kex baK rrB bdC @@ -101977,9 +102359,9 @@ dbm bPZ bRq bSE -bTI +mIU aWf -bWj +eoc bXL bXL cae @@ -102206,7 +102588,7 @@ aaa aUv aVU aXC -aWf +gsF baL qBS bdD @@ -102234,9 +102616,9 @@ bOr bQa bRr bSF -bTI +mIU aWf -bWj +eoc bXL bYY rVd @@ -102463,7 +102845,7 @@ aaa aUw aVV aXD -aWf +gsF baM rrB rrB @@ -102491,9 +102873,9 @@ bOs bJD bJD bGy -bTJ +uzn aWf -bWj +eoc bXL bYZ cag @@ -102977,7 +103359,7 @@ aJS aUx aUx aXE -aZd +hdT baO bch bdF @@ -103007,9 +103389,9 @@ bRs bGC bTL aWf -bWj +ydI bXM -bZa +tDQ cai cbT oTh @@ -103234,7 +103616,7 @@ aJS aUy aVX aXF -aYZ +hVz baP bcg bdG @@ -103262,12 +103644,12 @@ bOu bQc bRt bSG -bTI +mIU bVb bWo bXN bZb -ewb +uzx cbU cdz ceE @@ -103492,7 +103874,7 @@ aUz aVY aXG aZe -baQ +kjJ bci aaf aaf @@ -103519,7 +103901,7 @@ bMY bQd bRu bSH -bTI +mIU bVc aXR bXN @@ -103748,8 +104130,8 @@ aJS aUA aVZ aXH -aWf -baQ +gsF +kjJ bci aaf aaf @@ -104005,8 +104387,8 @@ aJS aUx aUx aXI -dCE -baQ +iuX +kjJ bci aaf bfr @@ -104262,8 +104644,8 @@ aaa aUv aWa aXC -aWf -baQ +gsF +kjJ bci aaf bfr @@ -104519,8 +104901,8 @@ aaa aUw aWb aXJ -aWf -baQ +gsF +kjJ bci aaf bfr @@ -104762,7 +105144,7 @@ nEv aCk aDw aEN -aFZ +aHw aHy aaa aaa @@ -104777,7 +105159,7 @@ aUv aWc aXK aZg -baQ +kjJ bci aaf bfr @@ -105019,7 +105401,7 @@ ajx adY aDz aEN -aGg +aIr aHx aHy aHx @@ -105034,7 +105416,7 @@ aUB aWd aXL aZh -baQ +kjJ bci aaf bfv @@ -105533,7 +105915,7 @@ aBb hql aDw aEN -aGk +aHA aHA aIJ aEN @@ -106603,7 +106985,7 @@ bOC bQn bRF chw -bTS +ekE aWf aXR bXW @@ -106860,7 +107242,7 @@ bOF dip bRG bLv -bTS +ekE aWf aXR bXV @@ -108150,7 +108532,7 @@ aWf bWB bXZ bZj -caA +pBs ccj cdN ceT @@ -108403,12 +108785,12 @@ bQt bJS bGM bTY -aZa +vpU bWC -bSS -bZn +yjY +jHm caB -ccj +gly cdO ceU cgi @@ -111979,7 +112361,7 @@ bdU bfJ bhG bjr -bkW +lqU bmO bmO bmO @@ -112773,7 +113155,7 @@ grA rBy bUk bVv -bWQ +byW bWQ bWQ caL @@ -113030,7 +113412,7 @@ bRU bSV bUh bVw -dDl +dkR bWR bZu caM @@ -113544,7 +113926,7 @@ bRW oub bUm pgY -bWT +scu bYj bWT caN @@ -113801,7 +114183,7 @@ bRX bST bUn lkf -qkD +xMX bYk qkD tQN @@ -114315,7 +114697,7 @@ bRZ bST bST bST -bST +puy bST bST caQ @@ -115086,7 +115468,7 @@ rUK bSZ bUr rUK -bST +puy bST bST caT @@ -115855,8 +116237,8 @@ bPd cco byN bTc -rBU -xVl +wLo +bUN kys cow xVl @@ -116091,7 +116473,7 @@ bec bfO bhG bjA -bkW +lqU alq alq brp diff --git a/_maps/map_files/debug/multiz.dmm b/_maps/map_files/debug/multiz.dmm index 2f24af453e6..5b51661c0e1 100644 --- a/_maps/map_files/debug/multiz.dmm +++ b/_maps/map_files/debug/multiz.dmm @@ -1387,12 +1387,6 @@ dir = 1 }, /area/hallway/primary/central) -"va" = ( -/obj/effect/turf_decal/stripes/line, -/obj/structure/cable, -/obj/structure/cable, -/turf/open/floor/plasteel, -/area/construction) "vt" = ( /obj/effect/turf_decal/stripes/asteroid/line{ dir = 1 @@ -2662,7 +2656,7 @@ gY bO bO yt -va +vT dn dn dn diff --git a/code/__DEFINES/atmospherics.dm b/code/__DEFINES/atmospherics.dm index 3cb64ed49f3..267c5f36c3c 100644 --- a/code/__DEFINES/atmospherics.dm +++ b/code/__DEFINES/atmospherics.dm @@ -86,6 +86,9 @@ #define PLASMA_MINIMUM_BURN_TEMPERATURE (100+T0C) #define PLASMA_UPPER_TEMPERATURE (1370+T0C) #define PLASMA_OXYGEN_FULLBURN 10 +#define HYDROGEN_MINIMUM_BURN_TEMPERATURE (100+T0C) +#define HYDROGEN_UPPER_TEMPERATURE (1370+T0C) +#define HYDROGEN_OXYGEN_FULLBURN 10 //COLD FIRE (this is used only for the freon-o2 reaction, there is no fire still) #define COLD_FIRE_MAXIMUM_TEMPERATURE_TO_SPREAD 263 //fire will spread if the temperature is -10 °C diff --git a/code/__DEFINES/food.dm b/code/__DEFINES/food.dm index 62bdd1d8c38..a21fcbb1858 100644 --- a/code/__DEFINES/food.dm +++ b/code/__DEFINES/food.dm @@ -13,6 +13,7 @@ #define PINEAPPLE (1<<12) #define BREAKFAST (1<<13) #define CLOTH (1<<14) +#define GRILLED (1<<15) #define DRINK_NICE 1 #define DRINK_GOOD 2 diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm index 2b1252eb504..ebc0e0b028e 100644 --- a/code/__DEFINES/misc.dm +++ b/code/__DEFINES/misc.dm @@ -489,3 +489,9 @@ GLOBAL_LIST_INIT(pda_styles, sortList(list(MONO, VT, ORBITRON, SHARE))) // The alpha we give to stuff under tiles, if they want it #define ALPHA_UNDERTILE 128 + +// Anonymous names defines (used in the secrets panel) + +#define ANON_DISABLED "" //so it's falsey +#define ANON_RANDOMNAMES "Random Default" +#define ANON_EMPLOYEENAMES "Employees" diff --git a/code/__DEFINES/preferences.dm b/code/__DEFINES/preferences.dm index 2ecafc1b41a..91b849bd50e 100644 --- a/code/__DEFINES/preferences.dm +++ b/code/__DEFINES/preferences.dm @@ -21,6 +21,7 @@ #define DEADMIN_POSITION_SECURITY (1<<18) #define DEADMIN_POSITION_SILICON (1<<19) #define SOUND_ENDOFROUND (1<<20) +#define ADMIN_IGNORE_CULT_GHOST (1<<21) #define TOGGLES_DEFAULT (SOUND_ADMINHELP|SOUND_MIDI|SOUND_AMBIENCE|SOUND_LOBBY|SOUND_ENDOFROUND|MEMBER_PUBLIC|INTENT_STYLE|MIDROUND_ANTAG|SOUND_INSTRUMENTS|SOUND_SHIP_AMBIENCE|SOUND_PRAYERS|SOUND_ANNOUNCEMENTS) diff --git a/code/__DEFINES/reactions.dm b/code/__DEFINES/reactions.dm index c4ef4c20d67..d7ef3e17a33 100644 --- a/code/__DEFINES/reactions.dm +++ b/code/__DEFINES/reactions.dm @@ -3,6 +3,7 @@ //Plasma fire properties #define OXYGEN_BURN_RATE_BASE 1.4 #define PLASMA_BURN_RATE_DELTA 9 +#define HYDROGEN_BURN_RATE_DELTA 8 #define PLASMA_MINIMUM_OXYGEN_NEEDED 2 #define PLASMA_MINIMUM_OXYGEN_PLASMA_RATIO 30 #define FIRE_CARBON_ENERGY_RELEASED 100000 //Amount of heat released per mole of burnt carbon into the tile @@ -19,11 +20,23 @@ #define NITRYL_FORMATION_ENERGY 100000 #define NITROUS_FORMATION_ENERGY 10000 +//tritium reaction #define TRITIUM_BURN_OXY_FACTOR 100 #define TRITIUM_BURN_TRIT_FACTOR 10 #define TRITIUM_BURN_RADIOACTIVITY_FACTOR 50000 //The neutrons gotta go somewhere. Completely arbitrary number. #define TRITIUM_MINIMUM_RADIATION_ENERGY 0.1 //minimum 0.01 moles trit or 10 moles oxygen to start producing rads #define MINIMUM_TRIT_OXYBURN_ENERGY 2000000 //This is calculated to help prevent singlecap bombs(Overpowered tritium/oxygen single tank bombs) +//hydrogen reaction +#define HYDROGEN_BURN_OXY_FACTOR 100 +#define HYDROGEN_BURN_H2_FACTOR 10 +#define MINIMUM_H2_OXYBURN_ENERGY 2000000 //This is calculated to help prevent singlecap bombs(Overpowered hydrogen/oxygen single tank bombs) +//ammonia reaction +#define AMMONIA_FORMATION_FACTOR 250 +#define AMMONIA_FORMATION_ENERGY 1000 +//metal hydrogen +#define METAL_HYDROGEN_MINIMUM_HEAT 1e7 +#define METAL_HYDROGEN_MINIMUM_PRESSURE 1e7 +#define METAL_HYDROGEN_FORMATION_ENERGY 20000000 #define SUPER_SATURATION_THRESHOLD 96 #define STIMULUM_HEAT_SCALE 100000 #define STIMULUM_FIRST_RISE 0.65 @@ -37,6 +50,7 @@ #define NOBLIUM_RESEARCH_AMOUNT 1000 #define BZ_RESEARCH_SCALE 4 #define BZ_RESEARCH_MAX_AMOUNT 400 +#define METAL_HYDROGEN_RESEARCH_MAX_AMOUNT 3000 #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/role_preferences.dm b/code/__DEFINES/role_preferences.dm index f7a95f2f311..670a30bafb0 100644 --- a/code/__DEFINES/role_preferences.dm +++ b/code/__DEFINES/role_preferences.dm @@ -38,6 +38,8 @@ #define ROLE_LAVALAND "Lavaland" #define ROLE_INTERNAL_AFFAIRS "Internal Affairs Agent" #define ROLE_FAMILIES "Familes Antagonists" +#define ROLE_SYNDICATE_CYBERSUN "Cybersun Space Syndicate" //Ghost role syndi from Forgottenship ruin +#define ROLE_SYNDICATE_CYBERSUN_CAPTAIN "Cybersun Space Syndicate Captain" //Forgottenship captain syndie //Missing assignment means it's not a gamemode specific role, IT'S NOT A BUG OR ERROR. //The gamemode specific ones are just so the gamemodes can query whether a player is old enough diff --git a/code/__DEFINES/subsystems.dm b/code/__DEFINES/subsystems.dm index 1c176ee5bfc..fd2e072cef9 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 7 +#define DB_MINOR_VERSION 8 //! ## Timing subsystem diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm index 97fbb9b7d98..3627ee88f2b 100644 --- a/code/__HELPERS/unsorted.dm +++ b/code/__HELPERS/unsorted.dm @@ -449,7 +449,7 @@ Turf and target are separate in case you want to teleport some distance from a t Gets all contents of contents and returns them all in a list. */ -/atom/proc/GetAllContents(var/T) +/atom/proc/GetAllContents(var/T, ignore_flag_1) var/list/processing_list = list(src) if(T) . = list() @@ -458,14 +458,16 @@ Turf and target are separate in case you want to teleport some distance from a t var/atom/A = processing_list[++i] //Byond does not allow things to be in multiple contents, or double parent-child hierarchies, so only += is needed //This is also why we don't need to check against assembled as we go along - processing_list += A.contents - if(istype(A,T)) - . += A + if (!(A.flags_1 & ignore_flag_1)) + processing_list += A.contents + if(istype(A,T)) + . += A else var/i = 0 while(i < length(processing_list)) var/atom/A = processing_list[++i] - processing_list += A.contents + if (!(A.flags_1 & ignore_flag_1)) + processing_list += A.contents return processing_list /atom/proc/GetAllContentsIgnoring(list/ignore_typecache) diff --git a/code/_onclick/hud/radial.dm b/code/_onclick/hud/radial.dm index 5afabb13504..14713065956 100644 --- a/code/_onclick/hud/radial.dm +++ b/code/_onclick/hud/radial.dm @@ -255,6 +255,7 @@ GLOBAL_LIST_EMPTY(radial_menus) current_user = M.client //Blank menu_holder = image(icon='icons/effects/effects.dmi',loc=anchor,icon_state="nothing",layer = ABOVE_HUD_LAYER) + menu_holder.plane = ABOVE_HUD_PLANE menu_holder.appearance_flags |= KEEP_APART menu_holder.vis_contents += elements + close_button current_user.images += menu_holder @@ -311,4 +312,9 @@ GLOBAL_LIST_EMPTY(radial_menus) var/answer = menu.selected_choice qdel(menu) GLOB.radial_menus -= uniqueid + if(require_near && !in_range(anchor, user)) + return + if(menu.custom_check_callback) + if(!menu.custom_check_callback.Invoke()) + return return answer diff --git a/code/_onclick/observer.dm b/code/_onclick/observer.dm index 285ec2fb94c..efed103392f 100644 --- a/code/_onclick/observer.dm +++ b/code/_onclick/observer.dm @@ -62,6 +62,8 @@ /mob/living/attack_ghost(mob/dead/observer/user) if(user.client && user.health_scan) healthscan(user, src, 1, TRUE) + if(user.client && user.chem_scan) + chemscan(user, src) return ..() // --------------------------------------- diff --git a/code/controllers/configuration/entries/general.dm b/code/controllers/configuration/entries/general.dm index 9fb82476755..0ef24fc0a81 100644 --- a/code/controllers/configuration/entries/general.dm +++ b/code/controllers/configuration/entries/general.dm @@ -8,6 +8,10 @@ /datum/config_entry/flag/auto_deadmin_players protection = CONFIG_ENTRY_LOCKED +/datum/config_entry/number/auto_deadmin_timegate + config_entry_value = null + protection = CONFIG_ENTRY_LOCKED + /datum/config_entry/flag/auto_deadmin_antagonists protection = CONFIG_ENTRY_LOCKED diff --git a/code/controllers/subsystem/job.dm b/code/controllers/subsystem/job.dm index a52a33ad353..e92968f42ac 100644 --- a/code/controllers/subsystem/job.dm +++ b/code/controllers/subsystem/job.dm @@ -484,13 +484,20 @@ SUBSYSTEM_DEF(job) if(!C?.holder) return TRUE var/datum/job/job = GetJob(rank) + + var/timegate_expired = FALSE + // allow only forcing deadminning in the first X seconds of the round if auto_deadmin_timegate is set in config + var/timegate = CONFIG_GET(number/auto_deadmin_timegate) + if(timegate && (world.time - SSticker.round_start_time > timegate)) + timegate_expired = TRUE + if(!job) return - if((job.auto_deadmin_role_flags & DEADMIN_POSITION_HEAD) && (CONFIG_GET(flag/auto_deadmin_heads) || (C.prefs?.toggles & DEADMIN_POSITION_HEAD))) + if((job.auto_deadmin_role_flags & DEADMIN_POSITION_HEAD) && ((CONFIG_GET(flag/auto_deadmin_heads) && !timegate_expired) || (C.prefs?.toggles & DEADMIN_POSITION_HEAD))) return C.holder.auto_deadmin() - else if((job.auto_deadmin_role_flags & DEADMIN_POSITION_SECURITY) && (CONFIG_GET(flag/auto_deadmin_security) || (C.prefs?.toggles & DEADMIN_POSITION_SECURITY))) + else if((job.auto_deadmin_role_flags & DEADMIN_POSITION_SECURITY) && ((CONFIG_GET(flag/auto_deadmin_security) && !timegate_expired) || (C.prefs?.toggles & DEADMIN_POSITION_SECURITY))) return C.holder.auto_deadmin() - else if((job.auto_deadmin_role_flags & DEADMIN_POSITION_SILICON) && (CONFIG_GET(flag/auto_deadmin_silicons) || (C.prefs?.toggles & DEADMIN_POSITION_SILICON))) //in the event there's ever psuedo-silicon roles added, ie synths. + else if((job.auto_deadmin_role_flags & DEADMIN_POSITION_SILICON) && ((CONFIG_GET(flag/auto_deadmin_silicons) && !timegate_expired) || (C.prefs?.toggles & DEADMIN_POSITION_SILICON))) //in the event there's ever psuedo-silicon roles added, ie synths. return C.holder.auto_deadmin() /datum/controller/subsystem/job/proc/setup_officer_positions() diff --git a/code/controllers/subsystem/shuttle.dm b/code/controllers/subsystem/shuttle.dm index 4ee6f9b539c..94ce94393e8 100644 --- a/code/controllers/subsystem/shuttle.dm +++ b/code/controllers/subsystem/shuttle.dm @@ -756,7 +756,7 @@ SUBSYSTEM_DEF(shuttle) /datum/controller/subsystem/shuttle/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.admin_state) ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if(!ui) - ui = new(user, src, ui_key, "shuttle_manipulator", name, 800, 600, master_ui, state) + ui = new(user, src, ui_key, "ShuttleManipulator", name, 800, 600, master_ui, state) ui.open() diff --git a/code/controllers/subsystem/ticker.dm b/code/controllers/subsystem/ticker.dm index 0eb7648be14..753ca500975 100755 --- a/code/controllers/subsystem/ticker.dm +++ b/code/controllers/subsystem/ticker.dm @@ -27,7 +27,11 @@ SUBSYSTEM_DEF(ticker) var/admin_delay_notice = "" //a message to display to anyone who tries to restart the world after a delay var/ready_for_reboot = FALSE //all roundend preparation done with, all that's left is reboot - var/triai = 0 //Global holder for Triumvirate + ///If not set to ANON_DISABLED then people spawn with a themed anon name (see anonymousnames.dm) + var/anonymousnames = ANON_DISABLED + ///Boolean to see if the game needs to set up a triumvirate ai (see tripAI.dm) + var/triai = FALSE + var/tipped = 0 //Did we broadcast the tip of the day yet? var/selected_tip // What will be the tip of the day? @@ -472,6 +476,7 @@ SUBSYSTEM_DEF(ticker) delay_end = SSticker.delay_end + anonymousnames = SSticker.anonymousnames triai = SSticker.triai tipped = SSticker.tipped selected_tip = SSticker.selected_tip diff --git a/code/datums/achievements/_achievement_data.dm b/code/datums/achievements/_achievement_data.dm index fb943a484d7..f353ef03614 100644 --- a/code/datums/achievements/_achievement_data.dm +++ b/code/datums/achievements/_achievement_data.dm @@ -97,7 +97,7 @@ if(!ui) var/datum/asset/spritesheet/simple/assets = get_asset_datum(/datum/asset/spritesheet/simple/achievements) assets.send(user) - ui = new(user, src, ui_key, "achievements", "Achievements Menu", 800, 1000, master_ui, state) + ui = new(user, src, ui_key, "Achievements", "Achievements Menu", 540, 680, master_ui, state) ui.open() /datum/achievement_data/ui_data(mob/user) diff --git a/code/datums/components/crafting/crafting.dm b/code/datums/components/crafting/crafting.dm index 77e8e63fbfd..068769e36db 100644 --- a/code/datums/components/crafting/crafting.dm +++ b/code/datums/components/crafting/crafting.dm @@ -326,7 +326,7 @@ cur_subcategory = subcats[1] else cur_subcategory = CAT_NONE - ui = new(user, src, ui_key, "personal_crafting", "Crafting Menu", 700, 800, master_ui, state) + ui = new(user, src, ui_key, "PersonalCrafting", "Crafting Menu", 700, 800, master_ui, state) ui.open() /datum/component/personal_crafting/ui_data(mob/user) diff --git a/code/datums/components/gps.dm b/code/datums/components/gps.dm index d3f1a91b117..200ec2b956b 100644 --- a/code/datums/components/gps.dm +++ b/code/datums/components/gps.dm @@ -89,7 +89,7 @@ GLOBAL_LIST_EMPTY(GPS_list) // Variable window height, depending on how many GPS units there are // to show, clamped to relatively safe range. var/gps_window_height = clamp(325 + GLOB.GPS_list.len * 14, 325, 700) - ui = new(user, src, ui_key, "gps", "Global Positioning System", 470, gps_window_height, master_ui, state) //width, height + ui = new(user, src, ui_key, "Gps", "Global Positioning System", 470, gps_window_height, master_ui, state) //width, height ui.open() ui.set_autoupdate(state = updating) diff --git a/code/datums/components/uplink.dm b/code/datums/components/uplink.dm index a6d28a97b73..ba3d4b48678 100644 --- a/code/datums/components/uplink.dm +++ b/code/datums/components/uplink.dm @@ -125,9 +125,8 @@ active = TRUE ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if(!ui) - ui = new(user, src, ui_key, "uplink", name, 620, 580, master_ui, state) + ui = new(user, src, ui_key, "Uplink", name, 620, 580, master_ui, state) ui.set_autoupdate(FALSE) // This UI is only ever opened by one person, and never is updated outside of user input. - ui.set_style("syndicate") ui.open() /datum/component/uplink/ui_data(mob/user) @@ -136,8 +135,7 @@ var/list/data = list() data["telecrystals"] = telecrystals data["lockable"] = lockable - data["compact_mode"] = compact_mode - + data["compactMode"] = compact_mode return data /datum/component/uplink/ui_static_data(mob/user) diff --git a/code/datums/explosion.dm b/code/datums/explosion.dm index f751de8bc86..8a3e931bdac 100644 --- a/code/datums/explosion.dm +++ b/code/datums/explosion.dm @@ -198,8 +198,8 @@ GLOBAL_LIST_EMPTY(explosions) var/list/items = list() for(var/I in T) var/atom/A = I - if (!(A.flags_1 & PREVENT_CONTENTS_EXPLOSION_1)) //The atom/contents_explosion() proc returns null if the contents ex_acting has been handled by the atom, and TRUE if it hasn't. - items += A.GetAllContents() + if (!(A.flags_1 & PREVENT_CONTENTS_EXPLOSION_1)) + items += A.GetAllContents(ignore_flag_1 = PREVENT_CONTENTS_EXPLOSION_1) for(var/O in items) var/atom/A = O if(!QDELETED(A)) diff --git a/code/datums/materials/basemats.dm b/code/datums/materials/basemats.dm index 8b74d8e5fac..c2a01c26d63 100644 --- a/code/datums/materials/basemats.dm +++ b/code/datums/materials/basemats.dm @@ -270,6 +270,19 @@ Unless you know what you're doing, only use the first three numbers. They're in qdel(source.GetComponent(/datum/component/hot_ice, "plasma", amount*150, amount*20+300)) return ..() +/datum/material/metalhydrogen + name = "Metal Hydrogen" + id = "metal hydrogen" + desc = "Solid metallic hydrogen. Some say it should be impossible" + color = "#f2d5d7" + alpha = 150 + categories = list(MAT_CATEGORY_RIGID = TRUE) + sheet_type = /obj/item/stack/sheet/mineral/metal_hydrogen + value_per_unit = 0.35 + beauty_modifier = 0.35 + strength_modifier = 1.2 + armor_modifiers = list("melee" = 1.35, "bullet" = 1.3, "laser" = 1.3, "energy" = 1.25, "bomb" = 0.7, "bio" = 1, "rad" = 1, "fire" = 1.3, "acid" = 1) + //I don't like sand. It's coarse, and rough, and irritating, and it gets everywhere. /datum/material/sand name = "sand" diff --git a/code/datums/mutations/speech.dm b/code/datums/mutations/speech.dm index bbd39924d84..cc4aff1602a 100644 --- a/code/datums/mutations/speech.dm +++ b/code/datums/mutations/speech.dm @@ -14,7 +14,7 @@ /datum/mutation/human/wacky name = "Wacky" - desc = "Unknown." + desc = "You are not a clown. You are the entire circus." quality = MINOR_NEGATIVE text_gain_indication = "You feel an off sensation in your voicebox." text_lose_indication = "The off sensation passes." diff --git a/code/datums/ruins/space.dm b/code/datums/ruins/space.dm index 52548423a7a..6006fdda3d7 100644 --- a/code/datums/ruins/space.dm +++ b/code/datums/ruins/space.dm @@ -301,7 +301,7 @@ suffix = "forgottenship.dmm" name = "Syndicate Forgotten Ship" description = "Seemingly abandoned ship went of course right into NT controlled space. It seems that malfunction caused most systems to turn off, except for sleepers." - + /datum/map_template/ruin/space/hellfactory id = "hellfactory" suffix = "hellfactory.dmm" diff --git a/code/datums/spawners_menu.dm b/code/datums/spawners_menu.dm index 9107e45e051..a6f49e9c323 100644 --- a/code/datums/spawners_menu.dm +++ b/code/datums/spawners_menu.dm @@ -9,7 +9,7 @@ /datum/spawners_menu/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.observer_state) ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if(!ui) - ui = new(user, src, ui_key, "spawners_menu", "Spawners Menu", 700, 600, master_ui, state) + ui = new(user, src, ui_key, "SpawnersMenu", "Spawners Menu", 700, 600, master_ui, state) ui.open() /datum/spawners_menu/ui_data(mob/user) diff --git a/code/datums/traits/negative.dm b/code/datums/traits/negative.dm index eb689593f03..d38d8f76bcf 100644 --- a/code/datums/traits/negative.dm +++ b/code/datums/traits/negative.dm @@ -111,7 +111,7 @@ if("Cook") heirloom_type = pick(/obj/item/reagent_containers/food/condiment/saltshaker, /obj/item/kitchen/rollingpin, /obj/item/clothing/head/chefhat) if("Botanist") - heirloom_type = pick(/obj/item/cultivator, /obj/item/reagent_containers/glass/bucket, /obj/item/storage/bag/plants, /obj/item/toy/plush/beeplushie) + heirloom_type = pick(/obj/item/cultivator, /obj/item/reagent_containers/glass/bucket, /obj/item/toy/plush/beeplushie) if("Bartender") heirloom_type = pick(/obj/item/reagent_containers/glass/rag, /obj/item/clothing/head/that, /obj/item/reagent_containers/food/drinks/shaker) if("Curator") @@ -183,7 +183,8 @@ var/list/slots = list( "in your left pocket" = ITEM_SLOT_LPOCKET, "in your right pocket" = ITEM_SLOT_RPOCKET, - "in your backpack" = ITEM_SLOT_BACKPACK + "in your backpack" = ITEM_SLOT_BACKPACK, + "in your hands" = ITEM_SLOT_HANDS ) where = H.equip_in_one_of_slots(heirloom, slots, FALSE) || "at your feet" diff --git a/code/datums/wires/_wires.dm b/code/datums/wires/_wires.dm index 55263a326a1..46d1a7261f6 100644 --- a/code/datums/wires/_wires.dm +++ b/code/datums/wires/_wires.dm @@ -219,7 +219,7 @@ datum/tgui/master_ui = null, datum/ui_state/state = GLOB.physical_state) ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if (!ui) - ui = new(user, src, ui_key, "wires", "[holder.name] Wires", 350, 150 + wires.len * 30, master_ui, state) + ui = new(user, src, ui_key, "Wires", "[holder.name] Wires", 350, 150 + wires.len * 30, master_ui, state) ui.open() /datum/wires/ui_data(mob/user) diff --git a/code/datums/world_topic.dm b/code/datums/world_topic.dm index 786a100ca4f..d62a605e1c9 100644 --- a/code/datums/world_topic.dm +++ b/code/datums/world_topic.dm @@ -27,11 +27,16 @@ /datum/world_topic/proc/TryRun(list/input) key_valid = config && (CONFIG_GET(string/comms_key) == input["key"]) - if(require_comms_key && !key_valid) - return "Bad Key" input -= "key" - . = Run(input) - if(islist(.)) + if(require_comms_key && !key_valid) + . = "Bad Key" + if (input["format"] == "json") + . = list("error" = .) + else + . = Run(input) + if (input["format"] == "json") + . = json_encode(.) + else if(islist(.)) . = list2params(.) /datum/world_topic/proc/Run(list/input) diff --git a/code/game/machinery/Sleeper.dm b/code/game/machinery/Sleeper.dm index 625708dd091..7164b7676c3 100644 --- a/code/game/machinery/Sleeper.dm +++ b/code/game/machinery/Sleeper.dm @@ -144,7 +144,7 @@ ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if(!ui) - ui = new(user, src, ui_key, "sleeper", name, ui_x, ui_y, master_ui, state) + ui = new(user, src, ui_key, "Sleeper", name, ui_x, ui_y, master_ui, state) ui.open() /obj/machinery/sleeper/AltClick(mob/user) diff --git a/code/game/machinery/announcement_system.dm b/code/game/machinery/announcement_system.dm index a1ba8f7f94d..054e75b348f 100644 --- a/code/game/machinery/announcement_system.dm +++ b/code/game/machinery/announcement_system.dm @@ -99,7 +99,7 @@ GLOBAL_LIST_EMPTY(announcement_systems) . = ..() ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if(!ui) - ui = new(user, src, ui_key, "announcement_system", "Automated Announcement System", 500, 225, master_ui, state) + ui = new(user, src, ui_key, "AutomatedAnnouncement", "Automated Announcement System", 500, 225, master_ui, state) ui.open() /obj/machinery/announcement_system/ui_data() diff --git a/code/game/machinery/bank_machine.dm b/code/game/machinery/bank_machine.dm index c75ed084a09..1f3c57abcf0 100644 --- a/code/game/machinery/bank_machine.dm +++ b/code/game/machinery/bank_machine.dm @@ -65,7 +65,7 @@ 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, "bank_machine", name, ui_x, ui_y, master_ui, state) + ui = new(user, src, ui_key, "BankMachine", name, ui_x, ui_y, master_ui, state) ui.open() /obj/machinery/computer/bank_machine/ui_data(mob/user) diff --git a/code/game/machinery/canister_frame.dm b/code/game/machinery/canister_frame.dm new file mode 100644 index 00000000000..f2005c6a7ac --- /dev/null +++ b/code/game/machinery/canister_frame.dm @@ -0,0 +1,91 @@ +//Canister Frames +/obj/structure/canister_frame + name = "canister frame" + icon = 'icons/obj/atmos.dmi' + icon_state = "frame_0" + density = TRUE + +/obj/structure/canister_frame/examine(user) + . = ..() + +/obj/structure/canister_frame/deconstruct(disassembled = TRUE) + if (!(flags_1 & NODECONSTRUCT_1)) + new /obj/item/stack/sheet/metal(loc, 5) + qdel(src) + +/obj/structure/canister_frame/machine + name = "canister frame" + desc = "A frame used to build different kinds of canisters." + +/obj/structure/canister_frame/machine/frame_tier_0 + name = "Tier 0 canister frame" + icon_state = "frame_0" + +/obj/structure/canister_frame/machine/frame_tier_1 + name = "Tier 1 canister frame" + icon_state = "frame_1" + + +/obj/structure/canister_frame/machine/frame_tier_2 + name = "Tier 2 canister frame" + icon_state = "frame_2" + +///Proc to build the different tiers, if the sheet used is right, it will upgrade the frame or build the respective canister tier +/obj/structure/canister_frame/machine/frame_tier_0/attackby(obj/item/S, mob/user, params) + if (istype(S, /obj/item/stack/sheet/metal)) + var/obj/item/stack/ST = S + if (ST.get_amount() < 5) + to_chat(user, "You need at least five sheets for that!") + return + if (do_after(user,15, target = src)) + new /obj/machinery/portable_atmospherics/canister/tier_1(drop_location()) + qdel(src) + ST.use(5) + else if (istype(S, /obj/item/stack/sheet/plasteel)) + var/obj/item/stack/ST = S + if (ST.get_amount() < 5) + to_chat(user, "You need at least five sheets for that!") + return + if(do_after(user,15, target = src)) + new /obj/structure/canister_frame/machine/frame_tier_1(drop_location()) + qdel(src) + ST.use(5) + else + return ..() + +///Proc to build the different tiers, if the sheet used is right, it will upgrade the frame or build the respective canister tier +/obj/structure/canister_frame/machine/frame_tier_1/attackby(obj/item/S, mob/user, params) + if (istype(S, /obj/item/stack/sheet/mineral/titanium)) + var/obj/item/stack/ST = S + if (ST.get_amount() < 5) + to_chat(user, "You need at least five sheets for that!") + return + if (do_after(user,15, target = src)) + new /obj/machinery/portable_atmospherics/canister/tier_2(drop_location()) + qdel(src) + ST.use(5) + else if (istype(S, /obj/item/stack/sheet/bluespace_crystal)) + var/obj/item/stack/ST = S + if (ST.get_amount() < 1) + to_chat(user, "You need at least one crystal for that!") + return + if (do_after(user,15, target = src)) + new /obj/structure/canister_frame/machine/frame_tier_2(drop_location()) + qdel(src) + ST.use(1) + else + return ..() + +///Proc to build the different tiers, if the sheet used is right, it will upgrade the frame or build the respective canister tier +/obj/structure/canister_frame/machine/frame_tier_2/attackby(obj/item/S, mob/user, params) + if (istype(S, /obj/item/stack/sheet/mineral/plastitanium)) + var/obj/item/stack/ST = S + if (ST.get_amount() < 5) + to_chat(user, "You need at least five sheets for that!") + return + if (do_after(user,15, target = src)) + new /obj/machinery/portable_atmospherics/canister/tier_3(drop_location()) + qdel(src) + ST.use(5) + else + return ..() diff --git a/code/game/machinery/computer/Operating.dm b/code/game/machinery/computer/Operating.dm index fdb3751872c..04e35bcb6e3 100644 --- a/code/game/machinery/computer/Operating.dm +++ b/code/game/machinery/computer/Operating.dm @@ -23,7 +23,7 @@ find_table() /obj/machinery/computer/operating/Destroy() - for(var/direction in GLOB.cardinals) + for(var/direction in GLOB.alldirs) table = locate(/obj/structure/table/optable, get_step(src, direction)) if(table && table.computer == src) table.computer = null @@ -52,7 +52,7 @@ advanced_surgeries |= D.surgery /obj/machinery/computer/operating/proc/find_table() - for(var/direction in GLOB.cardinals) + for(var/direction in GLOB.alldirs) table = locate(/obj/structure/table/optable, get_step(src, direction)) if(table) table.computer = src @@ -66,7 +66,7 @@ /obj/machinery/computer/operating/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.not_incapacitated_state) ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if(!ui) - ui = new(user, src, ui_key, "operating_computer", name, ui_x, ui_y, master_ui, state) + ui = new(user, src, ui_key, "OperatingComputer", name, ui_x, ui_y, master_ui, state) ui.open() /obj/machinery/computer/operating/ui_data(mob/user) @@ -96,7 +96,6 @@ else data["patient"] = null return data - switch(patient.stat) if(CONSCIOUS) data["patient"]["stat"] = "Conscious" @@ -118,8 +117,8 @@ data["patient"]["fireLoss"] = patient.getFireLoss() data["patient"]["toxLoss"] = patient.getToxLoss() data["patient"]["oxyLoss"] = patient.getOxyLoss() + data["procedures"] = list() if(patient.surgeries.len) - data["procedures"] = list() for(var/datum/surgery/procedure in patient.surgeries) var/datum/surgery_step/surgery_step = procedure.get_surgery_step() var/chems_needed = surgery_step.get_chem_list() diff --git a/code/game/machinery/computer/aifixer.dm b/code/game/machinery/computer/aifixer.dm index 6ffef5fb5db..a918a6bc88f 100644 --- a/code/game/machinery/computer/aifixer.dm +++ b/code/game/machinery/computer/aifixer.dm @@ -26,7 +26,7 @@ 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, "ai_restorer", name, ui_x, ui_y, master_ui, state) + ui = new(user, src, ui_key, "AiRestorer", name, ui_x, ui_y, master_ui, state) ui.open() /obj/machinery/computer/aifixer/ui_data(mob/user) diff --git a/code/game/machinery/computer/atmos_alert.dm b/code/game/machinery/computer/atmos_alert.dm index 5c61a0dca9d..cd88eaa10fa 100644 --- a/code/game/machinery/computer/atmos_alert.dm +++ b/code/game/machinery/computer/atmos_alert.dm @@ -25,7 +25,7 @@ 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, "atmos_alert", name, ui_x, ui_y, master_ui, state) + ui = new(user, src, ui_key, "AtmosAlertConsole", name, ui_x, ui_y, master_ui, state) ui.open() /obj/machinery/computer/atmos_alert/ui_data(mob/user) diff --git a/code/game/machinery/computer/atmos_control.dm b/code/game/machinery/computer/atmos_control.dm index 7c4222a07ea..06ea408add3 100644 --- a/code/game/machinery/computer/atmos_control.dm +++ b/code/game/machinery/computer/atmos_control.dm @@ -128,7 +128,7 @@ GLOBAL_LIST_EMPTY(atmos_air_controllers) 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, "atmos_control", name, ui_x, ui_y, master_ui, state) + ui = new(user, src, ui_key, "AtmosControlConsole", name, ui_x, ui_y, master_ui, state) ui.open() /obj/machinery/computer/atmos_control/ui_data(mob/user) @@ -280,7 +280,7 @@ GLOBAL_LIST_EMPTY(atmos_air_controllers) 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, "atmos_control", name, ui_x, ui_y, master_ui, state) + ui = new(user, src, ui_key, "AtmosControlConsole", name, ui_x, ui_y, master_ui, state) ui.open() /obj/machinery/computer/atmos_control/tank/ui_data(mob/user) diff --git a/code/game/machinery/computer/camera.dm b/code/game/machinery/computer/camera.dm index ffcf84eae21..3a877dbdefd 100644 --- a/code/game/machinery/computer/camera.dm +++ b/code/game/machinery/computer/camera.dm @@ -79,7 +79,7 @@ user.client.register_map_obj(cam_plane_master) user.client.register_map_obj(cam_background) // Open UI - ui = new(user, src, ui_key, "camera_console", name, ui_x, ui_y, master_ui, state) + ui = new(user, src, ui_key, "CameraConsole", name, ui_x, ui_y, master_ui, state) ui.open() /obj/machinery/computer/security/ui_data() diff --git a/code/game/machinery/computer/crew.dm b/code/game/machinery/computer/crew.dm index 44a33a6f94c..39740b5cd89 100644 --- a/code/game/machinery/computer/crew.dm +++ b/code/game/machinery/computer/crew.dm @@ -81,7 +81,7 @@ GLOBAL_DATUM_INIT(crewmonitor, /datum/crewmonitor, new) 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, "crew", "crew monitor", 800, 600 , master_ui, state) + ui = new(user, src, ui_key, "CrewConsole", "crew monitor", 800, 600 , master_ui, state) ui.open() /datum/crewmonitor/proc/show(mob/M, source) diff --git a/code/game/machinery/computer/dna_console.dm b/code/game/machinery/computer/dna_console.dm index da5e9f887ad..97f167af086 100644 --- a/code/game/machinery/computer/dna_console.dm +++ b/code/game/machinery/computer/dna_console.dm @@ -1,2009 +1,2009 @@ -/// Base timeout for creating mutation activators and other injectors -#define INJECTOR_TIMEOUT 100 -/// Maximum number of genetic makeup storage slots in DNA Console -#define NUMBER_OF_BUFFERS 3 -/// Timeout for DNA Scramble in DNA Consoles -#define SCRAMBLE_TIMEOUT 600 -/// Timeout for using the Joker feature to solve a gene in DNA Console -#define JOKER_TIMEOUT 12000 -/// How much time DNA Scanner upgrade tiers remove from JOKER_TIMEOUT -#define JOKER_UPGRADE 3000 - -/// Maximum value for radiaton strength when pulsing enzymes -#define RADIATION_STRENGTH_MAX 15 -/// Larger multipliers will affect the range of values when pulsing enzymes -#define RADIATION_STRENGTH_MULTIPLIER 1 - -/// Maximum value for the radiation pulse duration when pulsing enzymes -#define RADIATION_DURATION_MAX 30 -/// Large values reduce pulse accuracy and may pulse other enzymes than selected -#define RADIATION_ACCURACY_MULTIPLIER 3 - -/// Special status indicating a scanner occupant is transforming eg. from monkey to human -#define STATUS_TRANSFORMING 4 - -/// Multiplier for how much radiation received from DNA Console functionality -#define RADIATION_IRRADIATION_MULTIPLIER 1 - -/// Flag for the mutation ref search system. Search will include scanner occupant -#define SEARCH_OCCUPANT 1 -/// Flag for the mutation ref search system. Search will include console storage -#define SEARCH_STORED 2 -/// Flag for the mutation ref search system. Search will include diskette storage -#define SEARCH_DISKETTE 4 -/// Flag for the mutation ref search system. Search will include advanced injector mutations -#define SEARCH_ADV_INJ 8 - -/obj/machinery/computer/scan_consolenew - name = "DNA Console" - desc = "Scan DNA." - icon_screen = "dna" - icon_keyboard = "med_key" - density = TRUE - circuit = /obj/item/circuitboard/computer/scan_consolenew - - use_power = IDLE_POWER_USE - idle_power_usage = 10 - active_power_usage = 400 - light_color = LIGHT_COLOR_BLUE - - /// Link to the techweb's stored research. Used to retrieve stored mutations - var/datum/techweb/stored_research - /// Maximum number of mutations that DNA Consoles are able to store - var/max_storage = 6 - /// Duration for enzyme radiation pulses - var/radduration = 2 - /// Strength for enzyme radiation pulses - var/radstrength = 1 - /// Maximum number of chromosomes that DNA Consoles are able to store. - var/max_chromosomes = 6 - /// Maximum number of enzymes we can store - var/list/genetic_makeup_buffer[NUMBER_OF_BUFFERS] - /// List of all mutations stored on the DNA Console - var/list/stored_mutations = list() - /// List of all chromosomes stored in the DNA Console - var/list/stored_chromosomes = list() - /// Assoc list of all advanced injectors. Keys are injector names. Values are lists of mutations. - var/list/list/injector_selection = list() - /// Maximum number of advanced injectors that DNA Consoles store - var/max_injector_selections = 2 - /// Maximum number of mutation that an advanced injector can store - var/max_injector_mutations = 10 - /// Maximum total instability of all combined mutations allowed on an advanced injector - var/max_injector_instability = 50 - - /// World time when injectors are ready to be printed - var/injectorready = 0 - /// World time when JOKER algorithm can be used in DNA Consoles - var/jokerready = 0 - /// World time when Scramble can be used in DNA Consoles - var/scrambleready = 0 - - /// Currently stored genetic data diskette - var/obj/item/disk/data/diskette = null - - /// Current delayed action, used for delayed enzyme transfer on scanner door close - var/list/delayed_action = null - - /// Index of the enzyme being modified during delayed enzyme pulse operations - var/rad_pulse_index = 0 - /// World time when the enzyme pulse should complete - var/rad_pulse_timer = 0 - - /// Used for setting tgui data - Whether the connected DNA Scanner is usable - var/can_use_scanner = FALSE - /// Used for setting tgui data - Whether the current DNA Scanner occupant is viable for genetic modification - var/is_viable_occupant = FALSE - /// Used for setting tgui data - Whether Scramble DNA is ready - var/is_scramble_ready = FALSE - /// Used for setting tgui data - Whether JOKER algorithm is ready - var/is_joker_ready = FALSE - /// Used for setting tgui data - Whether injectors are ready to be printed - var/is_injector_ready = FALSE - /// Used for setting tgui data - Wheher an enzyme pulse operation is ongoing - var/is_pulsing_rads = FALSE - /// Used for setting tgui data - Time until scramble is ready - var/time_to_scramble = 0 - /// Used for setting tgui data - Time until joker is ready - var/time_to_joker = 0 - /// Used for setting tgui data - Time until injectors are ready - var/time_to_injector = 0 - /// Used for setting tgui data - Time until the enzyme pulse is complete - var/time_to_pulse = 0 - - /// Currently connected DNA Scanner - var/obj/machinery/dna_scannernew/connected_scanner = null - /// Current DNA Scanner occupant - var/mob/living/carbon/scanner_occupant = null - - /// Used for setting tgui data - List of occupant mutations - var/list/tgui_occupant_mutations = list() - /// Used for setting tgui data - List of DNA Console stored mutations - var/list/tgui_console_mutations = list() - /// Used for setting tgui data - List of diskette stored mutations - var/list/tgui_diskette_mutations = list() - /// Used for setting tgui data - List of DNA Console chromosomes - var/list/tgui_console_chromosomes = list() - /// Used for setting tgui data - List of occupant mutations - var/list/tgui_genetic_makeup = list() - /// Used for setting tgui data - List of occupant mutations - var/list/tgui_advinjector_mutations = list() - - - /// State of tgui view, i.e. which tab is currently active, or which genome we're currently looking at. - var/list/list/tgui_view_state = list() - -/obj/machinery/computer/scan_consolenew/process() - . = ..() - - // This is for pulsing the UI element with radiation as part of genetic makeup - // If rad_pulse_index > 0 then it means we're attempting a rad pulse - if((rad_pulse_index > 0) && (rad_pulse_timer <= world.time)) - rad_pulse() - return - -/obj/machinery/computer/scan_consolenew/attackby(obj/item/I, mob/user, params) - // Store chromosomes in the console if there's room - if (istype(I, /obj/item/chromosome)) - if(LAZYLEN(stored_chromosomes) < max_chromosomes) - I.forceMove(src) - stored_chromosomes += I - to_chat(user, "You insert [I].") - else - to_chat(user, "You cannot store any more chromosomes!") - return - - // Insert data disk if console disk slot is empty - // Swap data disk if there is one already a disk in the console - if (istype(I, /obj/item/disk/data)) //INSERT SOME DISKETTES - if (!user.transferItemToLoc(I,src)) - return - if(diskette) - diskette.forceMove(drop_location()) - diskette = null - diskette = I - to_chat(user, "You insert [I].") - return - - // Recycle non-activator used injectors - // Turn activator used injectors (aka research injectors) to chromosomes - if(istype(I, /obj/item/dnainjector/activator)) - var/obj/item/dnainjector/activator/A = I - if(A.used) - to_chat(user,"Recycled [I].") - if(A.research) - if(prob(60)) - var/c_typepath = generate_chromosome() - var/obj/item/chromosome/CM = new c_typepath (drop_location()) - if(LAZYLEN(stored_chromosomes) < max_chromosomes) - CM.forceMove(src) - stored_chromosomes += CM - to_chat(user,"[capitalize(CM.name)] added to storage.") - else - to_chat(user, "You cannot store any more chromosomes!") - to_chat(user, "[capitalize(CM.name)] added on top of the console.") - else - to_chat(user, "There was not enough genetic data to extract a viable chromosome.") - qdel(I) - return - - return ..() - -/obj/machinery/computer/scan_consolenew/Initialize() - . = ..() - - // Connect with a nearby DNA Scanner on init - connect_to_scanner() - - // Set appropriate ready timers and limits for machines functions - injectorready = world.time + INJECTOR_TIMEOUT - scrambleready = world.time + SCRAMBLE_TIMEOUT - jokerready = world.time + JOKER_TIMEOUT - - // Set the default tgui state - set_default_state() - - // Link machine with research techweb. Used for discovering and accessing - // already discovered mutations - stored_research = SSresearch.science_tech - -/obj/machinery/computer/scan_consolenew/examine(mob/user) - . = ..() - -/obj/machinery/computer/scan_consolenew/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) - . = ..() - - // Most of ui_interact is spent setting variables for passing to the tgui - // interface. - // We can also do some general state processing here too as it's a good - // indication that a player is using the console. - - var/scanner_op = scanner_operational() - var/can_modify_occ = can_modify_occupant() - - // Check for connected AND operational scanner. - if(scanner_op) - can_use_scanner = TRUE - else - can_use_scanner = FALSE - connected_scanner = null - is_viable_occupant = FALSE - - // Check for a viable occupant in the scanner. - if(can_modify_occ) - is_viable_occupant = TRUE - else - is_viable_occupant = FALSE - - - // Populates various buffers for passing to tgui - build_mutation_list(can_modify_occ) - build_genetic_makeup_list() - - // Populate variables for passing to tgui interface - is_scramble_ready = (scrambleready < world.time) - time_to_scramble = round((scrambleready - world.time)/10) - - is_joker_ready = (jokerready < world.time) - time_to_joker = round((jokerready - world.time)/10) - - is_injector_ready = (injectorready < world.time) - time_to_injector = round((injectorready - world.time)/10) - - is_pulsing_rads = ((rad_pulse_index > 0) && (rad_pulse_timer > world.time)) - time_to_pulse = round((rad_pulse_timer - world.time)/10) - - // Attempt to update tgui ui, open and update if needed. - ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) - - if(!ui) - ui = new(user, src, ui_key, "scan_consolenew", name, 515, 710, master_ui, state) - ui.open() - -/obj/machinery/computer/scan_consolenew/ui_data(mob/user) - var/list/data = list() - - data["view"] = tgui_view_state - data["storage"] = list() - - // This block of code generates the huge data structure passed to the tgui - // interface for displaying all the various bits of console/scanner data - // Should all be very self-explanatory - data["isScannerConnected"] = can_use_scanner - if(can_use_scanner) - data["scannerOpen"] = connected_scanner.state_open - data["scannerLocked"] = connected_scanner.locked - data["radStrength"] = radstrength - data["radDuration"] = radduration - data["stdDevStr"] = radstrength * RADIATION_STRENGTH_MULTIPLIER - switch(RADIATION_ACCURACY_MULTIPLIER / (radduration + (connected_scanner.precision_coeff ** 2))) //hardcoded values from a z-table for a normal distribution - if(0 to 0.25) - data["stdDevAcc"] = ">95 %" - if(0.25 to 0.5) - data["stdDevAcc"] = "68-95 %" - if(0.5 to 0.75) - data["stdDevAcc"] = "55-68 %" - else - data["stdDevAcc"] = "<38 %" - - data["isViableSubject"] = is_viable_occupant - if(is_viable_occupant) - data["subjectName"] = scanner_occupant.name - if(scanner_occupant.transformation_timer) - data["subjectStatus"] = STATUS_TRANSFORMING - else - data["subjectStatus"] = scanner_occupant.stat - data["subjectHealth"] = scanner_occupant.health - data["subjectRads"] = scanner_occupant.radiation/(RAD_MOB_SAFE/100) - data["subjectEnzymes"] = scanner_occupant.dna.unique_enzymes - data["isMonkey"] = ismonkey(scanner_occupant) - data["subjectUNI"] = scanner_occupant.dna.uni_identity - data["storage"]["occupant"] = tgui_occupant_mutations - //data["subjectMutations"] = tgui_occupant_mutations - else - data["subjectName"] = null - data["subjectStatus"] = null - data["subjectHealth"] = null - data["subjectRads"] = null - data["subjectEnzymes"] = null - //data["subjectMutations"] = null - data["storage"]["occupant"] = null - - data["hasDelayedAction"] = (delayed_action != null) - data["isScrambleReady"] = is_scramble_ready - data["isJokerReady"] = is_joker_ready - data["isInjectorReady"] = is_injector_ready - data["scrambleSeconds"] = time_to_scramble - data["jokerSeconds"] = time_to_joker - data["injectorSeconds"] = time_to_injector - data["isPulsingRads"] = is_pulsing_rads - data["radPulseSeconds"] = time_to_pulse - - if(diskette != null) - data["hasDisk"] = TRUE - data["diskCapacity"] = diskette.max_mutations - LAZYLEN(diskette.mutations) - data["diskReadOnly"] = diskette.read_only - //data["diskMutations"] = tgui_diskette_mutations - data["storage"]["disk"] = tgui_diskette_mutations - data["diskHasMakeup"] = (LAZYLEN(diskette.genetic_makeup_buffer) > 0) - data["diskMakeupBuffer"] = diskette.genetic_makeup_buffer.Copy() - else - data["hasDisk"] = FALSE - data["diskCapacity"] = 0 - data["diskReadOnly"] = TRUE - //data["diskMutations"] = null - data["storage"]["disk"] = null - data["diskHasMakeup"] = FALSE - data["diskMakeupBuffer"] = null - - data["mutationCapacity"] = max_storage - LAZYLEN(stored_mutations) - //data["mutationStorage"] = tgui_console_mutations - data["storage"]["console"] = tgui_console_mutations - data["chromoCapacity"] = max_chromosomes - LAZYLEN(stored_chromosomes) - data["chromoStorage"] = tgui_console_chromosomes - data["makeupCapacity"] = NUMBER_OF_BUFFERS - data["makeupStorage"] = tgui_genetic_makeup - - //data["advInjectors"] = tgui_advinjector_mutations - data["storage"]["injector"] = tgui_advinjector_mutations - data["maxAdvInjectors"] = max_injector_selections - - return data - -/obj/machinery/computer/scan_consolenew/ui_act(action, var/list/params) - if(..()) - return TRUE - - . = TRUE - - add_fingerprint(usr) - usr.set_machine(src) - - switch(action) - // Connect this DNA Console to a nearby DNA Scanner - // Usually only activate as an option if there is no connected scanner - if("connect_scanner") - connect_to_scanner() - return - - // Toggle the door open/closed status on attached DNA Scanner - if("toggle_door") - // GUARD CHECK - Scanner still connected and operational? - if(!scanner_operational()) - return - - connected_scanner.toggle_open(usr) - return - - // Toggle the door bolts on the attached DNA Scanner - if("toggle_lock") - // GUARD CHECK - Scanner still connected and operational? - if(!scanner_operational()) - return - - connected_scanner.locked = !connected_scanner.locked - return - - // Scramble scanner occupant's DNA - if("scramble_dna") - // GUARD CHECK - Can we genetically modify the occupant? Includes scanner - // operational guard checks. - // GUARD CHECK - Is scramble DNA actually ready? - if(!can_modify_occupant() || !(scrambleready < world.time)) - return - - scanner_occupant.dna.remove_all_mutations(list(MUT_NORMAL, MUT_EXTRA)) - scanner_occupant.dna.generate_dna_blocks() - scrambleready = world.time + SCRAMBLE_TIMEOUT - to_chat(usr,"DNA scrambled.") - scanner_occupant.radiation += RADIATION_STRENGTH_MULTIPLIER*50/(connected_scanner.damage_coeff ** 2) - return - - // Check whether a specific mutation is eligible for discovery within the - // scanner occupant - // This is additionally done when a mutation's tab is selected in the tgui - // interface. This is because some mutations, such as Monkified on monkeys, - // are infact completed by default but not yet discovered. Likewise, all - // mutations can have their sequence completed while Monkified is still an - // active mutation and thus won't immediately be discovered but could be - // discovered when Monkified is removed - // ---------------------------------------------------------------------- // - // params["alias"] - Alias of a mutation. The alias is the "hidden" name of - // the mutation, for example "Mutation 5" or "Mutation 33" - if("check_discovery") - // GUARD CHECK - Can we genetically modify the occupant? Includes scanner - // operational guard checks. - if(!can_modify_occupant()) - return - - // GUARD CHECK - Have we somehow cheekily swapped occupants? This is - // unexpected. - if(!(scanner_occupant == connected_scanner.occupant)) - return - - check_discovery(params["alias"]) - return - - // Check all mutations of the occupant and check if any are discovered. - // This is called when the Genetic Sequencer is selected. It'll do things - // like immediately discover Monkified without needing to click through - // the mutation tabs and handle cases where mutations are solved but not - // discovered due to the Monkified mutation being active then removed. - if("all_check_discovery") - // GUARD CHECK - Can we genetically modify the occupant? Includes scanner - // operational guard checks. - if(!can_modify_occupant()) - return - - // GUARD CHECK - Have we somehow cheekily swapped occupants? This is - // unexpected. - if(!(scanner_occupant == connected_scanner.occupant)) - return - - // Go over all standard mutations and check if they've been discovered. - for(var/mutation_type in scanner_occupant.dna.mutation_index) - var/datum/mutation/human/HM = GET_INITIALIZED_MUTATION(mutation_type) - check_discovery(HM.alias) - - return - - // Set a gene in a mutation's genetic sequence. Will also check for mutations - // discovery as part of the process. - // ---------------------------------------------------------------------- // - // params["alias"] - Alias of a mutation. The alias is the "hidden" name of - // the mutation, for example "Mutation 5" or "Mutation 33" - // params["gene"] - The letter of the new gene - // params["pos"] - The BYOND index of the letter in the gene sequence to be - // changed. Expects a text string from TGUI and will convert to a number - if("pulse_gene") - // GUARD CHECK - Can we genetically modify the occupant? Includes scanner - // operational guard checks. - if(!can_modify_occupant()) - return - - // GUARD CHECK - Have we somehow cheekily swapped occupants? This is - // unexpected. - if(!(scanner_occupant == connected_scanner.occupant)) - return - - // GUARD CHECK - Is the occupant currently undergoing some form of - // transformation? If so, we don't want to be pulsing genes. - if(scanner_occupant.transformation_timer) - to_chat(usr,"Gene pulse failed: The scanner occupant undergoing a transformation.") - return - - // Resolve mutation's BYOND path from the alias - var/alias = params["alias"] - var/path = GET_MUTATION_TYPE_FROM_ALIAS(alias) - - // Make sure the occupant still has this mutation - if(!(path in scanner_occupant.dna.mutation_index)) - return - - // Resolve BYOND path to genome sequence of scanner occupant - var/sequence = GET_GENE_STRING(path, scanner_occupant.dna) - - var/newgene = params["gene"] - var/genepos = text2num(params["pos"]) - - // If the new gene is J, this means we're dealing with a JOKER - // GUARD CHECK - Is JOKER actually ready? - if((newgene == "J") && (jokerready < world.time)) - var/truegenes = GET_SEQUENCE(path) - newgene = truegenes[genepos] - jokerready = world.time + JOKER_TIMEOUT - (JOKER_UPGRADE * (connected_scanner.precision_coeff-1)) - - // If the gene is an X, we want to update the default genes with the new - // X to allow highlighting logic to work on the tgui interface. - if(newgene == "X") - var/defaultseq = scanner_occupant.dna.default_mutation_genes[path] - defaultseq = copytext_char(defaultseq, 1, genepos) + newgene + copytext_char(defaultseq, genepos + 1) - scanner_occupant.dna.default_mutation_genes[path] = defaultseq - - // Copy genome to scanner occupant and do some basic mutation checks as - // we've increased the occupant rads - sequence = copytext_char(sequence, 1, genepos) + newgene + copytext_char(sequence, genepos + 1) - scanner_occupant.dna.mutation_index[path] = sequence - scanner_occupant.radiation += RADIATION_STRENGTH_MULTIPLIER/connected_scanner.damage_coeff - scanner_occupant.domutcheck() - - // GUARD CHECK - Modifying genetics can lead to edge cases where the - // scanner occupant is qdel'd and replaced with a different entity. - // Examples of this include adding/removing the Monkified mutation which - // qdels the previous entity and creates a brand new one in its place. - // We should redo all of our occupant modification checks again, although - // it is less than ideal. - if(!can_modify_occupant()) - return - - // Check if we cracked a mutation - check_discovery(alias) - - return - - // Apply a chromosome to a specific mutation. - // ---------------------------------------------------------------------- // - // params["mutref"] - ATOM Ref of specific mutation to apply the chromo to - // params["chromo"] - Name of the chromosome to apply to the mutation - if("apply_chromo") - // GUARD CHECK - Can we genetically modify the occupant? Includes scanner - // operational guard checks. - if(!can_modify_occupant()) - return - - // GUARD CHECK - Have we somehow cheekily swapped occupants? This is - // unexpected. - if(!(scanner_occupant == connected_scanner.occupant)) - return - - var/bref = params["mutref"] - - // GUARD CHECK - Only search occupant for this specific ref, since your - // can only apply chromosomes to mutations occupants. - var/datum/mutation/human/HM = get_mut_by_ref(bref, SEARCH_OCCUPANT) - - // GUARD CHECK - This should not be possible. Unexpected result - if(!HM) - return - - // Look through our stored chromos and compare names to find a - // stored chromo we can apply. - for(var/obj/item/chromosome/CM in stored_chromosomes) - if(CM.can_apply(HM) && (CM.name == params["chromo"])) - stored_chromosomes -= CM - CM.apply(HM) - - return - - // Print any type of standard injector, limited right now to activators that - // activate a dormant mutation and mutators that forcibly create a new - // MUT_EXTRA mutation - // ---------------------------------------------------------------------- // - // params["mutref"] - ATOM Ref of specific mutation to create an injector of - // params["is_activator"] - Is this an "Activator" style injector, also - // referred to as a "Research" type. Expects a string with 0 or 1, which - // then gets converted to a number. - // params["source"] - The source the request came from. - // Expected results: - // "occupant" - From genetic sequencer - // "console" - From DNA Console storage - // "disk" - From inserted diskette - if("print_injector") - // Because printing mutators and activators share a bunch of code, - // it makes sense to keep them both together and set unique vars - // later in the code - - // As a side note, because mutations can contain unique metadata, - // this system uses BYOND Atom Refs to safely and accurately - // identify mutations from big ol' lists - - // GUARD CHECK - Is the injector actually ready? - if(world.time < injectorready) - return - - var/search_flags = 0 - - switch(params["source"]) - if("occupant") - // GUARD CHECK - Make sure we can modify the occupant before we - // attempt to search them for any given mutation refs. This could - // lead to no search flags being passed to get_mut_by_ref and this - // is intended functionality to prevent any cheese or abuse - if(can_modify_occupant()) - search_flags |= SEARCH_OCCUPANT - if("console") - search_flags |= SEARCH_STORED - if("disk") - search_flags |= SEARCH_DISKETTE - - var/bref = params["mutref"] - var/datum/mutation/human/HM = get_mut_by_ref(bref, search_flags) - - // GUARD CHECK - This should not be possible. Unexpected result - if(!HM) - return - - // Create a new DNA Injector and add the appropriate mutations to it - var/obj/item/dnainjector/activator/I = new /obj/item/dnainjector/activator(loc) - I.add_mutations += new HM.type(copymut = HM) - - var/is_activator = text2num(params["is_activator"]) - - // Activators are also called "research" injectors and are used to create - // chromosomes by recycling at the DNA Console - if(is_activator) - I.name = "[HM.name] activator" - I.research = TRUE - // If there's an operational connected scanner, we can use its upgrades - // to improve our injector's radiation generation - if(scanner_operational()) - I.damage_coeff = connected_scanner.damage_coeff*4 - injectorready = world.time + INJECTOR_TIMEOUT * (1 - 0.1 * connected_scanner.precision_coeff) - else - injectorready = world.time + INJECTOR_TIMEOUT - else - I.name = "[HM.name] mutator" - I.doitanyway = TRUE - // If there's an operational connected scanner, we can use its upgrades - // to improve our injector's radiation generation - if(scanner_operational()) - I.damage_coeff = connected_scanner.damage_coeff - injectorready = world.time + INJECTOR_TIMEOUT * 5 * (1 - 0.1 * connected_scanner.precision_coeff) - else - injectorready = world.time + INJECTOR_TIMEOUT * 5 - - return - - // Save a mutation to the console's storage buffer. - // ---------------------------------------------------------------------- // - // params["mutref"] - ATOM Ref of specific mutation to store - // params["source"] - The source the request came from. - // Expected results: - // "occupant" - From genetic sequencer - // "disk" - From inserted diskette - if("save_console") - var/search_flags = 0 - - switch(params["source"]) - if("occupant") - // GUARD CHECK - Make sure we can modify the occupant before we - // attempt to search them for any given mutation refs. This could - // lead to no search flags being passed to get_mut_by_ref and this - // is intended functionality to prevent any cheese or abuse - if(can_modify_occupant()) - search_flags |= SEARCH_OCCUPANT - if("disk") - search_flags |= SEARCH_DISKETTE - - // GUARD CHECK - Is mutation storage full? - if(LAZYLEN(stored_mutations) >= max_storage) - to_chat(usr,"Mutation storage is full.") - return - - var/bref = params["mutref"] - var/datum/mutation/human/HM = get_mut_by_ref(bref, search_flags) - - // GUARD CHECK - This should not be possible. Unexpected result - if(!HM) - return - - var/datum/mutation/human/A = new HM.type() - A.copy_mutation(HM) - stored_mutations += A - to_chat(usr,"Mutation successfully stored.") - return - - // Save a mutation to the diskette's storage buffer. - // ---------------------------------------------------------------------- // - // params["mutref"] - ATOM Ref of specific mutation to store - // params["source"] - The source the request came from - // Expected results: - // "occupant" - From genetic sequencer - // "console" - From DNA Console storage - if("save_disk") - // GUARD CHECK - This code shouldn't even be callable without a diskette - // inserted. Unexpected result - if(!diskette) - return - - // GUARD CHECK - Make sure the disk is not full - if(LAZYLEN(diskette.mutations) >= diskette.max_mutations) - to_chat(usr,"Disk storage is full.") - return - - // GUARD CHECK - Make sure the disk isn't set to read only, as we're - // attempting to write to it - if(diskette.read_only) - to_chat(usr,"Disk is set to read only mode.") - return - - var/search_flags = 0 - - switch(params["source"]) - if("occupant") - // GUARD CHECK - Make sure we can modify the occupant before we - // attempt to search them for any given mutation refs. This could - // lead to no search flags being passed to get_mut_by_ref and this - // is intended functionality to prevent any cheese or abuse - if(can_modify_occupant()) - search_flags |= SEARCH_OCCUPANT - if("console") - search_flags |= SEARCH_STORED - - var/bref = params["mutref"] - var/datum/mutation/human/HM = get_mut_by_ref(bref, search_flags) - - // GUARD CHECK - This should not be possible. Unexpected result - if(!HM) - return - - var/datum/mutation/human/A = new HM.type() - A.copy_mutation(HM) - diskette.mutations += A - to_chat(usr,"Mutation successfully stored to disk.") - return - - // Completely removes a MUT_EXTRA mutation or mutation with corrupt gene - // sequence from the scanner occupant - // ---------------------------------------------------------------------- // - // params["mutref"] - ATOM Ref of specific mutation to nullify - if("nullify") - // GUARD CHECK - Can we genetically modify the occupant? Includes scanner - // operational guard checks. - if(!can_modify_occupant()) - return - - var/bref = params["mutref"] - var/datum/mutation/human/HM = get_mut_by_ref(bref, SEARCH_OCCUPANT) - - // GUARD CHECK - This should not be possible. Unexpected result - if(!HM) - return - - // GUARD CHECK - Nullify should only be used on scrambled or "extra" - // mutations. - if(!HM.scrambled && !(HM.class == MUT_EXTRA)) - return - - scanner_occupant.dna.remove_mutation(HM.type) - return - - // Deletes saved mutation from console buffer. - // ---------------------------------------------------------------------- // - // params["mutref"] - ATOM Ref of specific mutation to delete - if("delete_console_mut") - var/bref = params["mutref"] - var/datum/mutation/human/HM = get_mut_by_ref(bref, SEARCH_STORED) - - if(HM) - stored_mutations.Remove(HM) - qdel(HM) - - return - - // Deletes saved mutation from disk buffer. - // ---------------------------------------------------------------------- // - // params["mutref"] - ATOM Ref of specific mutation to delete - if("delete_disk_mut") - // GUARD CHECK - This code shouldn't even be callable without a diskette - // inserted. Unexpected result - if(!diskette) - return - - // GUARD CHECK - Make sure the disk isn't set to read only, as we're - // attempting to write to it (via deletion) - if(diskette.read_only) - to_chat(usr,"Disk is set to read only mode.") - return - - var/bref = params["mutref"] - var/datum/mutation/human/HM = get_mut_by_ref(bref, SEARCH_DISKETTE) - - if(HM) - diskette.mutations.Remove(HM) - qdel(HM) - - return - - // Ejects a stored chromosome from the DNA Console - // ---------------------------------------------------------------------- // - // params["chromo"] - Text string of the chromosome name - if("eject_chromo") - var/chromname = params["chromo"] - - for(var/obj/item/chromosome/CM in stored_chromosomes) - if(chromname == CM.name) - CM.forceMove(drop_location()) - adjust_item_drop_location(CM) - stored_chromosomes -= CM - return - - return - - // Combines two mutations from the console to try and create a new mutation - // ---------------------------------------------------------------------- // - // params["firstref"] - ATOM Ref of first mutation for combination - // params["secondref"] - ATOM Ref of second mutation for combination - // mutation - if("combine_console") - // GUaRD CHECK - Make sure mutation storage isn't full. If it is, we won't - // be able to store the new combo mutation - if(LAZYLEN(stored_mutations) >= max_storage) - to_chat(usr,"Mutation storage is full.") - return - - // GUARD CHECK - We're running a research-type operation. If, for some - // reason, somehow the DNA Console has been disconnected from the research - // network - Or was never in it to begin with - don't proceed - if(!stored_research) - return - - var/first_bref = params["firstref"] - var/second_bref = params["secondref"] - - // GUARD CHECK - Find the source and destination mutations on the console - // and make sure they actually exist. - var/datum/mutation/human/source_mut = get_mut_by_ref(first_bref, SEARCH_STORED | SEARCH_DISKETTE) - if(!source_mut) - return - - var/datum/mutation/human/dest_mut = get_mut_by_ref(second_bref, SEARCH_STORED | SEARCH_DISKETTE) - if(!dest_mut) - return - - // Attempt to mix the two mutations to get a new type - var/result_path = get_mixed_mutation(source_mut.type, dest_mut.type) - - if(!result_path) - return - - // If we got a new type, add it to our storage - stored_mutations += new result_path() - to_chat(usr, "Success! New mutation has been added to console storage.") - - // If it's already discovered, end here. Otherwise, add it to the list of - // discovered mutations. - // We've already checked for stored_research earlier - if(result_path in stored_research.discovered_mutations) - return - - var/datum/mutation/human/HM = GET_INITIALIZED_MUTATION(result_path) - stored_research.discovered_mutations += result_path - say("Successfully mutated [HM.name].") - return - - // Combines two mutations from the disk to try and create a new mutation - // ---------------------------------------------------------------------- // - // params["firstref"] - ATOM Ref of first mutation for combination - // params["secondref"] - ATOM Ref of second mutation for combination - // mutation - if("combine_disk") - // GUARD CHECK - This code shouldn't even be callable without a diskette - // inserted. Unexpected result - if(!diskette) - return - - // GUARD CHECK - Make sure the disk is not full. - if(LAZYLEN(diskette.mutations) >= diskette.max_mutations) - to_chat(usr,"Disk storage is full.") - return - - // GUARD CHECK - Make sure the disk isn't set to read only, as we're - // attempting to write to it - if(diskette.read_only) - to_chat(usr,"Disk is set to read only mode.") - return - - // GUARD CHECK - We're running a research-type operation. If, for some - // reason, somehow the DNA Console has been disconnected from the research - // network - Or was never in it to begin with - don't proceed - if(!stored_research) - return - - var/first_bref = params["firstref"] - var/second_bref = params["secondref"] - - // GUARD CHECK - Find the source and destination mutations on the console - // and make sure they actually exist. - var/datum/mutation/human/source_mut = get_mut_by_ref(first_bref, SEARCH_STORED | SEARCH_DISKETTE) - if(!source_mut) - return - - var/datum/mutation/human/dest_mut = get_mut_by_ref(second_bref, SEARCH_STORED | SEARCH_DISKETTE) - if(!dest_mut) - return - - // Attempt to mix the two mutations to get a new type - var/result_path = get_mixed_mutation(source_mut.type, dest_mut.type) - - if(!result_path) - return - - // If we got a new type, add it to our storage - diskette.mutations += new result_path() - to_chat(usr, "Success! New mutation has been added to the disk.") - - // If it's already discovered, end here. Otherwise, add it to the list of - // discovered mutations - // We've already checked for stored_research earlier - if(result_path in stored_research.discovered_mutations) - return - - var/datum/mutation/human/HM = GET_INITIALIZED_MUTATION(result_path) - stored_research.discovered_mutations += result_path - say("Successfully mutated [HM.name].") - return - - // Sets the Genetic Makeup pulse strength. - // ---------------------------------------------------------------------- // - // params["val"] - New strength value as text string, converted to number - // later on in code - if("set_pulse_strength") - var/value = round(text2num(params["val"])) - radstrength = WRAP(value, 1, RADIATION_STRENGTH_MAX+1) - return - - // Sets the Genetic Makeup pulse duration - // ---------------------------------------------------------------------- // - // params["val"] - New strength value as text string, converted to number - // later on in code - if("set_pulse_duration") - var/value = round(text2num(params["val"])) - radduration = WRAP(value, 1, RADIATION_DURATION_MAX+1) - return - - // Saves Genetic Makeup information to disk - // ---------------------------------------------------------------------- // - // params["index"] - The BYOND index of the console genetic makeup buffer to - // copy to disk - if("save_makeup_disk") - // GUARD CHECK - This code shouldn't even be callable without a diskette - // inserted. Unexpected result - if(!diskette) - return - - // GUARD CHECK - Make sure the disk isn't set to read only, as we're - // attempting to write to it - if(diskette.read_only) - to_chat(usr,"Disk is set to read only mode.") - return - - // Convert the index to a number and clamp within the array range - var/buffer_index = text2num(params["index"]) - buffer_index = clamp(buffer_index, 1, NUMBER_OF_BUFFERS) - - var/list/buffer_slot = genetic_makeup_buffer[buffer_index] - - // GUARD CHECK - This should not be possible to activate on a buffer slot - // that doesn't have any genetic data. Unexpected result - if(!istype(buffer_slot)) - return - - diskette.genetic_makeup_buffer = buffer_slot.Copy() - return - - // Loads Genetic Makeup from disk to a console buffer - // ---------------------------------------------------------------------- // - // params["index"] - The BYOND index of the console genetic makeup buffer to - // copy to. Expected as text string, converted to number later - if("load_makeup_disk") - // GUARD CHECK - This code shouldn't even be callable without a diskette - // inserted. Unexpected result - if(!diskette) - return - - // GUARD CHECK - This should not be possible to activate on a diskette - // that doesn't have any genetic data. Unexpected result - if(LAZYLEN(diskette.genetic_makeup_buffer) == 0) - return - - // Convert the index to a number and clamp within the array range, then - // copy the data from the disk to that buffer - var/buffer_index = text2num(params["index"]) - buffer_index = clamp(buffer_index, 1, NUMBER_OF_BUFFERS) - genetic_makeup_buffer[buffer_index] = diskette.genetic_makeup_buffer.Copy() - return - - // Deletes genetic makeup buffer from the inserted diskette - if("del_makeup_disk") - // GUARD CHECK - This code shouldn't even be callable without a diskette - // inserted. Unexpected result - if(!diskette) - return - - // GUARD CHECK - Make sure the disk isn't set to read only, as we're - // attempting to write (via deletion) to it - if(diskette.read_only) - to_chat(usr,"Disk is set to read only mode.") - return - - diskette.genetic_makeup_buffer.Cut() - return - - // Saves the scanner occupant's genetic makeup to a given console buffer - // ---------------------------------------------------------------------- // - // params["index"] - The BYOND index of the console genetic makeup buffer to - // save the new genetic data to. Expected as text string, converted to - // number later - if("save_makeup_console") - // GUARD CHECK - Can we genetically modify the occupant? Includes scanner - // operational guard checks. - if(!can_modify_occupant()) - return - - // Convert the index to a number and clamp within the array range, then - // copy the data from the disk to that buffer - var/buffer_index = text2num(params["index"]) - buffer_index = clamp(buffer_index, 1, NUMBER_OF_BUFFERS) - - // Set the new information - genetic_makeup_buffer[buffer_index] = list( - "label"="Slot [buffer_index]:[scanner_occupant.real_name]", - "UI"=scanner_occupant.dna.uni_identity, - "UE"=scanner_occupant.dna.unique_enzymes, - "name"=scanner_occupant.real_name, - "blood_type"=scanner_occupant.dna.blood_type) - - return - - // Deleted genetic makeup data from a console buffer slot - // ---------------------------------------------------------------------- // - // params["index"] - The BYOND index of the console genetic makeup buffer to - // delete the genetic data from. Expected as text string, converted to - // number later - if("del_makeup_console") - // Convert the index to a number and clamp within the array range, then - // copy the data from the disk to that buffer - var/buffer_index = text2num(params["index"]) - buffer_index = clamp(buffer_index, 1, NUMBER_OF_BUFFERS) - var/list/buffer_slot = genetic_makeup_buffer[buffer_index] - - // GUARD CHECK - This shouldn't be possible to execute this on a null - // buffer. Unexpected resut - if(!istype(buffer_slot)) - return - - genetic_makeup_buffer[buffer_index] = null - return - - // Eject stored diskette from console - if("eject_disk") - // GUARD CHECK - This code shouldn't even be callable without a diskette - // inserted. Unexpected result - if(!diskette) - return - - diskette.forceMove(drop_location()) - diskette = null - return - - // Create a Genetic Makeup injector. These injectors are timed and thus are - // only temporary - // ---------------------------------------------------------------------- // - // params["index"] - The BYOND index of the console genetic makeup buffer to - // create the makeup injector from. Expected as text string, converted to - // number later - // params["type"] - Type of injector to create - // Expected results: - // "ue" - Unique Enzyme, changes name and blood type - // "ui" - Unique Identity, changes looks - // "mixed" - Combination of both ue and ui - if("makeup_injector") - // Convert the index to a number and clamp within the array range, then - // copy the data from the disk to that buffer - var/buffer_index = text2num(params["index"]) - buffer_index = clamp(buffer_index, 1, NUMBER_OF_BUFFERS) - var/list/buffer_slot = genetic_makeup_buffer[buffer_index] - - // GUARD CHECK - This shouldn't be possible to execute this on a null - // buffer. Unexpected resut - if(!istype(buffer_slot)) - return - - var/type = params["type"] - var/obj/item/dnainjector/timed/I - - switch(type) - if("ui") - // GUARD CHECK - There's currently no way to save partial genetic data. - // However, if this is the case, we can't make a complete injector and - // this catches that edge case - if(!buffer_slot["UI"]) - to_chat(usr,"Genetic data corrupted, unable to create injector.") - return - - I = new /obj/item/dnainjector/timed(loc) - I.fields = list("UI"=buffer_slot["UI"]) - - // If there is a connected scanner, we can use its upgrades to reduce - // the radiation generated by this injector - if(scanner_operational()) - I.damage_coeff = connected_scanner.damage_coeff - if("ue") - // GUARD CHECK - There's currently no way to save partial genetic data. - // However, if this is the case, we can't make a complete injector and - // this catches that edge case - if(!buffer_slot["name"] || !buffer_slot["UE"] || !buffer_slot["blood_type"]) - to_chat(usr,"Genetic data corrupted, unable to create injector.") - return - - I = new /obj/item/dnainjector/timed(loc) - I.fields = list("name"=buffer_slot["name"], "UE"=buffer_slot["UE"], "blood_type"=buffer_slot["blood_type"]) - - // If there is a connected scanner, we can use its upgrades to reduce - // the radiation generated by this injector - if(scanner_operational()) - I.damage_coeff = connected_scanner.damage_coeff - if("mixed") - // GUARD CHECK - There's currently no way to save partial genetic data. - // However, if this is the case, we can't make a complete injector and - // this catches that edge case - if(!buffer_slot["UI"] || !buffer_slot["name"] || !buffer_slot["UE"] || !buffer_slot["blood_type"]) - to_chat(usr,"Genetic data corrupted, unable to create injector.") - return - - I = new /obj/item/dnainjector/timed(loc) - I.fields = list("UI"=buffer_slot["UI"],"name"=buffer_slot["name"], "UE"=buffer_slot["UE"], "blood_type"=buffer_slot["blood_type"]) - - // If there is a connected scanner, we can use its upgrades to reduce - // the radiation generated by this injector - if(scanner_operational()) - I.damage_coeff = connected_scanner.damage_coeff - - // If we successfully created an injector, don't forget to set the new - // ready timer. - if(I) - injectorready = world.time + INJECTOR_TIMEOUT - - return - - // Applies a genetic makeup buffer to the scanner occupant - // ---------------------------------------------------------------------- // - // params["index"] - The BYOND index of the console genetic makeup buffer to - // apply to the scanner occupant. Expected as text string, converted to - // number later - // params["type"] - Type of genetic makeup copy to implement - // Expected results: - // "ue" - Unique Enzyme, changes name and blood type - // "ui" - Unique Identity, changes looks - // "mixed" - Combination of both ue and ui - if("makeup_apply") - // GUARD CHECK - Can we genetically modify the occupant? Includes scanner - // operational guard checks. - if(!can_modify_occupant()) - return - - // Convert the index to a number and clamp within the array range, then - // copy the data from the disk to that buffer - var/buffer_index = text2num(params["index"]) - buffer_index = clamp(buffer_index, 1, NUMBER_OF_BUFFERS) - var/list/buffer_slot = genetic_makeup_buffer[buffer_index] - - // GUARD CHECK - This shouldn't be possible to execute this on a null - // buffer. Unexpected resut - if(!istype(buffer_slot)) - return - - var/type = params["type"] - - apply_genetic_makeup(type, buffer_slot) - return - - // Applies a genetic makeup buffer to the next scanner occupant. This sets - // some code that will run when the connected DNA Scanner door is next - // closed - // This allows people to self-modify their genetic makeup, as tgui - // interfaces can not be accessed while inside the DNA Scanner and genetic - // makeup injectors are only temporary - // ---------------------------------------------------------------------- // - // params["index"] - The BYOND index of the console genetic makeup buffer to - // apply to the scanner occupant. Expected as text string, converted to - // number later - // params["type"] - Type of genetic makeup copy to implement - // Expected results: - // "ue" - Unique Enzyme, changes name and blood type - // "ui" - Unique Identity, changes looks - // "mixed" - Combination of both ue and ui - if("makeup_delay") - // Convert the index to a number and clamp within the array range, then - // copy the data from the disk to that buffer - var/buffer_index = text2num(params["index"]) - buffer_index = clamp(buffer_index, 1, NUMBER_OF_BUFFERS) - var/list/buffer_slot = genetic_makeup_buffer[buffer_index] - - // GUARD CHECK - This shouldn't be possible to execute this on a null - // buffer. Unexpected resut - if(!istype(buffer_slot)) - return - - var/type = params["type"] - - // Set the delayed action. The next time the scanner door is closed, - // unless this is cancelled in the UI, the action will happen - delayed_action = list("type" = type, "buffer_slot" = buffer_slot) - return - - // Attempts to modify the indexed element of the Unique Identity string - // This is a time delayed action that is handled in process() - // ---------------------------------------------------------------------- // - // params["index"] - The BYOND index of the Unique Identity string to - // attempt to modify - if("makeup_pulse") - // GUARD CHECK - Can we genetically modify the occupant? Includes scanner - // operational guard checks. - if(!can_modify_occupant()) - return - - // Set the appropriate timer and index to pulse. This is then managed - // later on in process() - var/len = length_char(scanner_occupant.dna.uni_identity) - rad_pulse_timer = world.time + (radduration*10) - rad_pulse_index = WRAP(text2num(params["index"]), 1, len+1) - begin_processing() - return - - // Cancels the delayed action - In this context it is not the radiation - // pulse from "makeup_pulse", which can not be cancelled. It is instead - // the delayed genetic transfer from "makeup_delay" - if("cancel_delay") - delayed_action = null - return - - // Creates a new advanced injector storage buffer in the console - // ---------------------------------------------------------------------- // - // params["name"] - The name to apply to the new injector - if("new_adv_inj") - // GUARD CHECK - Make sure we can make a new injector. This code should - // not be called if we're already maxed out and this is an Unexpected - // result - if(!(LAZYLEN(injector_selection) < max_injector_selections)) - return - - // GUARD CHECK - Sanitise and trim the proposed name. This prevents HTML - // injection and equivalent as tgui input is not stripped - var/inj_name = params["name"] - inj_name = trim(sanitize(inj_name)) - - // GUARD CHECK - If the name is null or blank, or the name is already in - // the list of advanced injectors, we want to reject it as we can't have - // duplicate named advanced injectors - if(!inj_name || (inj_name in injector_selection)) - return - - injector_selection[inj_name] = list() - return - - // Deleted an advanced injector storage buffer from the console - // ---------------------------------------------------------------------- // - // params["name"] - The name of the injector to delete - if("del_adv_inj") - var/inj_name = params["name"] - - // GUARD CHECK - If the name is null or blank, reject. - // GUARD CHECK - If the name isn't in the list of advanced injectors, we - // want to reject this as it shouldn't be possible ever do this. - // Unexpected result - if(!inj_name || !(inj_name in injector_selection)) - return - - injector_selection.Remove(inj_name) - return - - // Creates an injector from an advanced injector buffer - // ---------------------------------------------------------------------- // - // params["name"] - The name of the injector to print - if("print_adv_inj") - // As a side note, because mutations can contain unique metadata, - // this system uses BYOND Atom Refs to safely and accurately - // identify mutations from big ol' lists. - - // GUARD CHECK - Is the injector actually ready? - if(world.time < injectorready) - return - - var/inj_name = params["name"] - - // GUARD CHECK - If the name is null or blank, reject. - // GUARD CHECK - If the name isn't in the list of advanced injectors, we - // want to reject this as it shouldn't be possible ever do this. - // Unexpected result - if(!inj_name || !(inj_name in injector_selection)) - return - - var/list/injector = injector_selection[inj_name] - var/obj/item/dnainjector/activator/I = new /obj/item/dnainjector/activator(loc) - - // Run through each mutation in our Advanced Injector and add them to a - // new injector - for(var/A in injector) - var/datum/mutation/human/HM = A - I.add_mutations += new HM.type(copymut=HM) - - // Force apply any mutations, this is functionality similar to mutators - I.doitanyway = TRUE - I.name = "Advanced [inj_name] injector" - - // If there's an operational connected scanner, we can use its upgrades - // to improve our injector's radiation generation - if(scanner_operational()) - I.damage_coeff = connected_scanner.damage_coeff - injectorready = world.time + INJECTOR_TIMEOUT * 8 * (1 - 0.1 * connected_scanner.precision_coeff) - else - injectorready = world.time + INJECTOR_TIMEOUT * 8 - - return - - // Adds a mutation to an advanced injector - // ---------------------------------------------------------------------- // - // params["mutref"] - ATOM Ref of specific mutation to add to the injector - // params["advinj"] - Name of the advanced injector to add the mutation to - if("add_advinj_mut") - // GUARD CHECK - Can we genetically modify the occupant? Includes scanner - // operational guard checks. - // This is needed because this operation can only be completed from the - // genetic sequencer. - if(!can_modify_occupant()) - return - - var/adv_inj = params["advinj"] - - // GUARD CHECK - Make sure our advanced injector actually exists. This - // should not be possible. Unexpected result - if(!(adv_inj in injector_selection)) - return - - // GUARD CHECK - Make sure we limit the number of mutations appropriately - if(LAZYLEN(injector_selection[adv_inj]) >= max_injector_mutations) - to_chat(usr,"Advanced injector mutation storage is full.") - return - - var/mut_source = params["source"] - var/search_flag = 0 - - switch(mut_source) - if("disk") - search_flag = SEARCH_DISKETTE - if("occupant") - search_flag = SEARCH_OCCUPANT - if("console") - search_flag = SEARCH_STORED - - if(!search_flag) - return - - var/bref = params["mutref"] - // We've already made sure we can modify the occupant, so this is safe to - // call - var/datum/mutation/human/HM = get_mut_by_ref(bref, search_flag) - - // GUARD CHECK - This should not be possible. Unexpected result - if(!HM) - return - - // We want to make sure we stick within the instability limit. - // We start with the instability of the mutation we're intending to add. - var/instability_total = HM.instability - - // We then add the instabilities of all other mutations in the injector, - // remembering to apply the Stabilizer chromosome modifiers - for(var/datum/mutation/human/I in injector_selection[adv_inj]) - instability_total += I.instability * GET_MUTATION_STABILIZER(I) - - // If this would take us over the max instability, we inform the user. - if(instability_total > max_injector_instability) - to_chat(usr,"Extra mutation would make the advanced injector too instable.") - return - - // If we've got here, all our checks are passed and we can successfully - // add the mutation to the advanced injector. - var/datum/mutation/human/A = new HM.type() - A.copy_mutation(HM) - injector_selection[adv_inj] += A - to_chat(usr,"Mutation successfully added to advanced injector.") - return - - // Deletes a mutation from an advanced injector - // ---------------------------------------------------------------------- // - // params["mutref"] - ATOM Ref of specific mutation to del from the injector - if("delete_injector_mut") - var/bref = params["mutref"] - - var/datum/mutation/human/HM = get_mut_by_ref(bref, SEARCH_ADV_INJ) - - // GUARD CHECK - This should not be possible. Unexpected result - if(!HM) - return - - // Check Advanced Injectors to find and remove the mutation - for(var/I in injector_selection) - if(injector_selection["[I]"].Remove(HM)) - qdel(HM) - return - - return - - // Sets a new tgui view state - // ---------------------------------------------------------------------- // - // params["id"] - Key for the state to set - // params[...] - Every other element is used to set state variables - if("set_view") - for (var/key in params) - if(key == "src") - continue - tgui_view_state[key] = params[key] - return TRUE - return FALSE - -/** - * Applies the enzyme buffer to the current scanner occupant - * - * Applies the type of a specific genetic makeup buffer to the current scanner - * occupant - * - * Arguments: - * * type - "ui"/"ue"/"mixed" - Which part of the enzyme buffer to apply - * * buffer_slot - Index of the enzyme buffer to apply - */ -/obj/machinery/computer/scan_consolenew/proc/apply_genetic_makeup(type, buffer_slot) - // Note - This proc is only called from code that has already performed the - // necessary occupant guard checks. If you call this code yourself, please - // apply can_modify_occupant() or equivalent checks first. - - // Pre-calc the rad increase since we'll be using it in all the possible - // operations - var/rad_increase = rand(100/(connected_scanner.damage_coeff ** 2),250/(connected_scanner.damage_coeff ** 2)) - - switch(type) - if("ui") - // GUARD CHECK - There's currently no way to save partial genetic data. - // However, if this is the case, we can't make a complete injector and - // this catches that edge case - if(!buffer_slot["UI"]) - to_chat(usr,"Genetic data corrupted, unable to apply genetic data.") - return FALSE - scanner_occupant.dna.uni_identity = buffer_slot["UI"] - scanner_occupant.updateappearance(mutations_overlay_update=1) - scanner_occupant.radiation += rad_increase - scanner_occupant.domutcheck() - return TRUE - if("ue") - // GUARD CHECK - There's currently no way to save partial genetic data. - // However, if this is the case, we can't make a complete injector and - // this catches that edge case - if(!buffer_slot["name"] || !buffer_slot["UE"] || !buffer_slot["blood_type"]) - to_chat(usr,"Genetic data corrupted, unable to apply genetic data.") - return FALSE - scanner_occupant.real_name = buffer_slot["name"] - scanner_occupant.name = buffer_slot["name"] - scanner_occupant.dna.unique_enzymes = buffer_slot["UE"] - scanner_occupant.dna.blood_type = buffer_slot["blood_type"] - scanner_occupant.radiation += rad_increase - scanner_occupant.domutcheck() - return TRUE - if("mixed") - // GUARD CHECK - There's currently no way to save partial genetic data. - // However, if this is the case, we can't make a complete injector and - // this catches that edge case - if(!buffer_slot["UI"] || !buffer_slot["name"] || !buffer_slot["UE"] || !buffer_slot["blood_type"]) - to_chat(usr,"Genetic data corrupted, unable to apply genetic data.") - return FALSE - scanner_occupant.dna.uni_identity = buffer_slot["UI"] - scanner_occupant.updateappearance(mutations_overlay_update=1) - scanner_occupant.real_name = buffer_slot["name"] - scanner_occupant.name = buffer_slot["name"] - scanner_occupant.dna.unique_enzymes = buffer_slot["UE"] - scanner_occupant.dna.blood_type = buffer_slot["blood_type"] - scanner_occupant.radiation += rad_increase - scanner_occupant.domutcheck() - return TRUE - - return FALSE -/** - * Checks if there is a connected DNA Scanner that is operational - */ -/obj/machinery/computer/scan_consolenew/proc/scanner_operational() - if(!connected_scanner) - return FALSE - - return (connected_scanner && connected_scanner.is_operational()) - -/** - * Checks if there is a valid DNA Scanner occupant for genetic modification - * - * Checks if there is a valid subject in the DNA Scanner that can be genetically - * modified. Will set the scanner occupant var as part of this check. - * Requires that the scanner can be operated and will return early if it can't - */ -/obj/machinery/computer/scan_consolenew/proc/can_modify_occupant() - // GUARD CHECK - We always want to perform the scanner operational check as - // part of checking if we can modify the occupant. - // We can never modify the occupant of a broken scanner. - if(!scanner_operational()) - return FALSE - - if(!connected_scanner.occupant) - return FALSE - - scanner_occupant = connected_scanner.occupant - - // Check validity of occupent for DNA Modification - // DNA Modification: - // requires DNA - // this DNA can not be bad - // is done via radiation bursts, so radiation immune carbons are not viable - // And the DNA Scanner itself must have a valid scan level - if(scanner_occupant.has_dna() && !HAS_TRAIT(scanner_occupant, TRAIT_RADIMMUNE) && !HAS_TRAIT(scanner_occupant, TRAIT_BADDNA) || (connected_scanner.scan_level == 3)) - return TRUE - - return FALSE - -/** - * Checks for adjacent DNA scanners and connects when it finds a viable one - * - * Seearches cardinal directions in order. Stops when it finds a viable DNA Scanner. - * Will connect to a broken scanner if no functional scanner is available. - * Links itself to the DNA Scanner to receive door open and close events. - */ -/obj/machinery/computer/scan_consolenew/proc/connect_to_scanner() - var/obj/machinery/dna_scannernew/test_scanner = null - var/obj/machinery/dna_scannernew/broken_scanner = null - - // Look in each cardinal direction and try and find a DNA Scanner - // If you find a DNA Scanner, check to see if it broken or working - // If it's working, set the current scanner and return early - // If it's not working, remember it anyway as a broken scanner - for(var/direction in GLOB.cardinals) - test_scanner = locate(/obj/machinery/dna_scannernew, get_step(src, direction)) - if(!isnull(test_scanner)) - if(test_scanner.is_operational()) - connected_scanner = test_scanner - connected_scanner.linked_console = src - return - else - broken_scanner = test_scanner - - // Ultimately, if we have a broken scanner, we'll attempt to connect to it as - // a fallback case, but the code above will prefer a working scanner - if(!isnull(broken_scanner)) - connected_scanner = broken_scanner - connected_scanner.linked_console = src - -/** - * Called by connected DNA Scanners when their doors close. - * - * Sets the new scanner occupant and completes delayed enzyme transfer if one - * is queued. - */ -/obj/machinery/computer/scan_consolenew/proc/on_scanner_close() - // Set the appropriate occupant now the scanner is closed - if(connected_scanner.occupant) - scanner_occupant = connected_scanner.occupant - else - scanner_occupant = null - - // If we have a delayed action - In this case the only delayed action is - // applying a genetic makeup buffer the next time the DNA Scanner is closed - - // we want to perform it. - // GUARD CHECK - Make sure we can modify the occupant, apply_genetic_makeup() - // assumes we've already done this. - if(delayed_action && can_modify_occupant()) - var/type = delayed_action["type"] - var/buffer_slot = delayed_action["buffer_slot"] - if(apply_genetic_makeup(type, buffer_slot)) - to_chat(connected_scanner.occupant, "[src] activates!") - delayed_action = null - -/** - * Called by connected DNA Scanners when their doors open. - * - * Clears enzyme pulse operations, stops processing and nulls the current - * scanner occupant var. - */ -/obj/machinery/computer/scan_consolenew/proc/on_scanner_open() - // If we had a radiation pulse action ongoing, we want to stop this. - // Imagine it being like a microwave stopping when you open the door. - rad_pulse_index = 0 - rad_pulse_timer = 0 - end_processing() - scanner_occupant = null - -/** - * Builds the genetic makeup list which will be sent to tgui interface. - */ -/obj/machinery/computer/scan_consolenew/proc/build_genetic_makeup_list() - // No code will ever null this list, we can safely Cut it. - tgui_genetic_makeup.Cut() - - for(var/i=1, i <= NUMBER_OF_BUFFERS, i++) - if(genetic_makeup_buffer[i]) - tgui_genetic_makeup["[i]"] = genetic_makeup_buffer[i].Copy() - else - tgui_genetic_makeup["[i]"] = null - -/** - * Builds the genetic makeup list which will be sent to tgui interface. - * - * Will iterate over the connected scanner occupant, DNA Console, inserted - * diskette and chromosomes and any advanced injectors, building the main data - * structures which get passed to the tgui interface. - */ -/obj/machinery/computer/scan_consolenew/proc/build_mutation_list(can_modify_occ) - // No code will ever null these lists. We can safely Cut them. - tgui_occupant_mutations.Cut() - tgui_diskette_mutations.Cut() - tgui_console_mutations.Cut() - tgui_console_chromosomes.Cut() - tgui_advinjector_mutations.Cut() - - // ------------------------------------------------------------------------ // - // GUARD CHECK - Can we genetically modify the occupant? This check will have - // previously included checks to make sure the DNA Scanner is still - // operational - if(can_modify_occ) - // ---------------------------------------------------------------------- // - // Start cataloguing all mutations that the occupant has by default - for(var/mutation_type in scanner_occupant.dna.mutation_index) - var/datum/mutation/human/HM = GET_INITIALIZED_MUTATION(mutation_type) - - var/list/mutation_data = list() - var/text_sequence = scanner_occupant.dna.mutation_index[mutation_type] - var/default_sequence = scanner_occupant.dna.default_mutation_genes[mutation_type] - var/discovered = (stored_research && (mutation_type in stored_research.discovered_mutations)) - - mutation_data["Alias"] = HM.alias - mutation_data["Sequence"] = text_sequence - mutation_data["DefaultSeq"] = default_sequence - mutation_data["Discovered"] = discovered - mutation_data["Source"] = "occupant" - - // We only want to pass this information along to the tgui interface if - // the mutation has been discovered. Prevents people being able to cheese - // or "hack" their way to figuring out what undiscovered mutations are - if(discovered) - mutation_data["Name"] = HM.name - mutation_data["Description"] = HM.desc - mutation_data["Instability"] = HM.instability * GET_MUTATION_STABILIZER(HM) - mutation_data["Quality"] = HM.quality - - // Assume the mutation is normal unless assigned otherwise. - var/mut_class = MUT_NORMAL - - // Check if the mutation is currently activated. If it is, we can add even - // MORE information to send to tgui. - var/datum/mutation/human/A = scanner_occupant.dna.get_mutation(mutation_type) - if(A) - mutation_data["Active"] = TRUE - mutation_data["Scrambled"] = A.scrambled - mutation_data["Class"] = A.class - mut_class = A.class - mutation_data["CanChromo"] = A.can_chromosome - mutation_data["ByondRef"] = REF(A) - mutation_data["Type"] = A.type - if(A.can_chromosome) - mutation_data["ValidChromos"] = jointext(A.valid_chrom_list, ", ") - mutation_data["AppliedChromo"] = A.chromosome_name - mutation_data["ValidStoredChromos"] = build_chrom_list(A) - else - mutation_data["Active"] = FALSE - mutation_data["Scrambled"] = FALSE - mutation_data["Class"] = MUT_NORMAL - - // Technically NONE of these mutations should be MUT_EXTRA but this will - // catch any weird edge cases - // Assign icons by priority - MUT_EXTRA will ALSO be discovered, so it - // has a higher priority for icon/image assignment - if (mut_class == MUT_EXTRA) - mutation_data["Image"] = "dna_extra.gif" - else if(discovered) - mutation_data["Image"] = "dna_discovered.gif" - else - mutation_data["Image"] = "dna_undiscovered.gif" - - tgui_occupant_mutations += list(mutation_data) - - // ---------------------------------------------------------------------- // - // Now get additional/"extra" mutations that they shouldn't have by default - for(var/datum/mutation/human/HM in scanner_occupant.dna.mutations) - // If it's in the mutation index array, we've already catalogued this - // mutation and can safely skip over it. It really shouldn't be, but this - // will catch any weird edge cases - if(HM.type in scanner_occupant.dna.mutation_index) - continue - - var/list/mutation_data = list() - var/text_sequence = GET_SEQUENCE(HM.type) - - // These will all be active mutations. They're added by injector and their - // sequencing code can't be changed. They can only be nullified, which - // completely removes them. - var/datum/mutation/human/A = GET_INITIALIZED_MUTATION(HM.type) - - mutation_data["Alias"] = A.alias - mutation_data["Sequence"] = text_sequence - mutation_data["Discovered"] = TRUE - mutation_data["Quality"] = HM.quality - mutation_data["Source"] = "occupant" - - mutation_data["Name"] = HM.name - mutation_data["Description"] = HM.desc - mutation_data["Instability"] = HM.instability * GET_MUTATION_STABILIZER(HM) - - mutation_data["Active"] = TRUE - mutation_data["Scrambled"] = HM.scrambled - mutation_data["Class"] = HM.class - mutation_data["CanChromo"] = HM.can_chromosome - mutation_data["ByondRef"] = REF(HM) - mutation_data["Type"] = HM.type - - if(HM.can_chromosome) - mutation_data["ValidChromos"] = jointext(HM.valid_chrom_list, ", ") - mutation_data["AppliedChromo"] = HM.chromosome_name - mutation_data["ValidStoredChromos"] = build_chrom_list(HM) - - // Nothing in this list should be undiscovered. Technically nothing - // should be anything but EXTRA. But we're just handling some edge cases. - if (HM.class == MUT_EXTRA) - mutation_data["Image"] = "dna_extra.gif" - else - mutation_data["Image"] = "dna_discovered.gif" - - tgui_occupant_mutations += list(mutation_data) - - // ------------------------------------------------------------------------ // - // Build the list of mutations stored within the DNA Console - for(var/datum/mutation/human/HM in stored_mutations) - var/list/mutation_data = list() - - var/datum/mutation/human/A = GET_INITIALIZED_MUTATION(HM.type) - - mutation_data["Alias"] = A.alias - mutation_data["Name"] = HM.name - mutation_data["Source"] = "console" - mutation_data["Active"] = TRUE - mutation_data["Description"] = HM.desc - mutation_data["Instability"] = HM.instability * GET_MUTATION_STABILIZER(HM) - mutation_data["ByondRef"] = REF(HM) - mutation_data["Type"] = HM.type - - mutation_data["CanChromo"] = HM.can_chromosome - if(HM.can_chromosome) - mutation_data["ValidChromos"] = jointext(HM.valid_chrom_list, ", ") - mutation_data["AppliedChromo"] = HM.chromosome_name - mutation_data["ValidStoredChromos"] = build_chrom_list(HM) - - tgui_console_mutations += list(mutation_data) - - // ------------------------------------------------------------------------ // - // Build the list of chromosomes stored within the DNA Console - var/chrom_index = 1 - for(var/obj/item/chromosome/CM in stored_chromosomes) - var/list/chromo_data = list() - - chromo_data["Name"] = CM.name - chromo_data["Description"] = CM.desc - chromo_data["Index"] = chrom_index - - tgui_console_chromosomes += list(chromo_data) - ++chrom_index - - // ------------------------------------------------------------------------ // - // Build the list of mutations stored on any inserted diskettes - if(diskette) - for(var/datum/mutation/human/HM in diskette.mutations) - var/list/mutation_data = list() - - var/datum/mutation/human/A = GET_INITIALIZED_MUTATION(HM.type) - - mutation_data["Alias"] = A.alias - mutation_data["Name"] = HM.name - mutation_data["Active"] = TRUE - //mutation_data["Sequence"] = GET_SEQUENCE(HM.type) - mutation_data["Source"] = "disk" - mutation_data["Description"] = HM.desc - mutation_data["Instability"] = HM.instability * GET_MUTATION_STABILIZER(HM) - mutation_data["ByondRef"] = REF(HM) - mutation_data["Type"] = HM.type - - mutation_data["CanChromo"] = HM.can_chromosome - if(HM.can_chromosome) - mutation_data["ValidChromos"] = jointext(HM.valid_chrom_list, ", ") - mutation_data["AppliedChromo"] = HM.chromosome_name - mutation_data["ValidStoredChromos"] = build_chrom_list(HM) - - tgui_diskette_mutations += list(mutation_data) - - // ------------------------------------------------------------------------ // - // Build the list of mutations stored within any Advanced Injectors - if(LAZYLEN(injector_selection)) - for(var/I in injector_selection) - var/list/mutations = list() - for(var/datum/mutation/human/HM in injector_selection[I]) - var/list/mutation_data = list() - - var/datum/mutation/human/A = GET_INITIALIZED_MUTATION(HM.type) - - mutation_data["Alias"] = A.alias - mutation_data["Name"] = HM.name - mutation_data["Active"] = TRUE - //mutation_data["Sequence"] = GET_SEQUENCE(HM.type) - mutation_data["Source"] = "injector" - mutation_data["Description"] = HM.desc - mutation_data["Instability"] = HM.instability * GET_MUTATION_STABILIZER(HM) - mutation_data["ByondRef"] = REF(HM) - mutation_data["Type"] = HM.type - - if(HM.can_chromosome) - mutation_data["AppliedChromo"] = HM.chromosome_name - - mutations += list(mutation_data) - tgui_advinjector_mutations += list(list( - "name" = "[I]", - "mutations" = mutations, - )) - -/** - * Takes any given chromosome and calculates chromosome compatibility - * - * Will iterate over the stored chromosomes in the DNA Console and will check - * whether it can be applied to the supplied mutation. Then returns a list of - * names of chromosomes that were compatible. - * - * Arguments: - * * mutation - The mutation to check chromosome compatibility with - */ -/obj/machinery/computer/scan_consolenew/proc/build_chrom_list(mutation) - var/list/chromosomes = list() - - for(var/obj/item/chromosome/CM in stored_chromosomes) - if(CM.can_apply(mutation)) - chromosomes += CM.name - - return chromosomes - -/** - * Checks whether a mutation alias has been discovered - * - * Checks whether a given mutation's genetic sequence has been completed and - * discovers it if appropriate - * - * Arguments: - * * alias - Alias of the mutation to check (ie "Mutation 51" or "Mutation 12") - */ -/obj/machinery/computer/scan_consolenew/proc/check_discovery(alias) - // Note - All code paths that call this have already done checks on the - // current occupant to prevent cheese and other abuses. If you call this - // proc please also do the following checks first: - // if(!can_modify_occupant()) - // return - // if(!(scanner_occupant == connected_scanner.occupant)) - // return - - // Turn the alias ("Mutation 1", "Mutation 35") into a mutation path - var/path = GET_MUTATION_TYPE_FROM_ALIAS(alias) - - // Check to see if this mutation is in the active mutation list. If it isn't, - // then the mutation isn't eligible for discovery. If it is but is scrambled, - // then the mutation isn't eligible for discovery. Finally, check if the - // mutation is in discovered mutations - If it isn't, add it to discover. - var/datum/mutation/human/M = scanner_occupant.dna.get_mutation(path) - if(!M) - return FALSE - if(M.scrambled) - return FALSE - if(stored_research && !(path in stored_research.discovered_mutations)) - var/datum/mutation/human/HM = GET_INITIALIZED_MUTATION(path) - stored_research.discovered_mutations += path - say("Successfully discovered [HM.name].") - return TRUE - - return FALSE - -/** - * Find a mutation from various storage locations via ATOM ref - * - * Takes an ATOM Ref and searches the appropriate mutation buffers and storage - * vars to try and find the associated mutation. - * - * Arguments: - * * ref - ATOM ref of the mutation to locate - * * target_flags - Flags for storage mediums to search, see #defines - */ -/obj/machinery/computer/scan_consolenew/proc/get_mut_by_ref(ref, target_flags) - var/mutation - - // Assume the occupant is valid and the check has been carried out before - // calling this proc with the relevant flags. - if(target_flags & SEARCH_OCCUPANT) - mutation = (locate(ref) in scanner_occupant.dna.mutations) - if(mutation) - return mutation - - if(target_flags & SEARCH_STORED) - mutation = (locate(ref) in stored_mutations) - if(mutation) - return mutation - - if(diskette && (target_flags & SEARCH_DISKETTE)) - mutation = (locate(ref) in diskette.mutations) - if(mutation) - return mutation - - if(injector_selection && (target_flags & SEARCH_ADV_INJ)) - for(var/I in injector_selection) - mutation = (locate(ref) in injector_selection["[I]"]) - if(mutation) - return mutation - - return null - -/** - * Creates a randomised accuracy value for the enzyme pulse functionality. - * - * Donor code from previous DNA Console iteration. - * - * Arguments: - * * position - Index of the intended enzyme element to pulse - * * radduration - Duration of intended radiation pulse - * * number_of_blocks - Number of individual data blocks in the pulsed enzyme - */ -/obj/machinery/computer/scan_consolenew/proc/randomize_radiation_accuracy(position, radduration, number_of_blocks) - var/val = round(gaussian(0, RADIATION_ACCURACY_MULTIPLIER/radduration) + position, 1) - return WRAP(val, 1, number_of_blocks+1) - -/** - * Scrambles an enzyme element value for the enzyme pulse functionality. - * - * Donor code from previous DNA Console iteration. - * - * Arguments: - * * input - Enzyme identity element to scramble, expected hex value - * * rs - Strength of radiation pulse, increases the range of possible outcomes - */ -/obj/machinery/computer/scan_consolenew/proc/scramble(input,rs) - var/length = length(input) - var/ran = gaussian(0, rs*RADIATION_STRENGTH_MULTIPLIER) - if(ran == 0) - ran = pick(-1,1) //hacky, statistically should almost never happen. 0-chance makes people mad though - else if(ran < 0) - ran = round(ran) //negative, so floor it - else - ran = -round(-ran) //positive, so ceiling it - return num2hex(WRAP(hex2num(input)+ran, 0, 16**length), length) - - /** - * Performs the enzyme radiation pulse. - * - * Donor code from previous DNA Console iteration. Called from process() when - * there is a radiation pulse in progress. Ends processing. - */ -/obj/machinery/computer/scan_consolenew/proc/rad_pulse() - // GUARD CHECK - Can we genetically modify the occupant? Includes scanner - // operational guard checks. - // If we can't, abort the procedure. - if(!can_modify_occupant()) - rad_pulse_index = 0 - end_processing() - return - - var/len = length_char(scanner_occupant.dna.uni_identity) - var/num = randomize_radiation_accuracy(rad_pulse_index, radduration + (connected_scanner.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 - var/hex = copytext_char(scanner_occupant.dna.uni_identity, num, num+1) - hex = scramble(hex, radstrength, radduration) - - scanner_occupant.dna.uni_identity = copytext_char(scanner_occupant.dna.uni_identity, 1, num) + hex + copytext_char(scanner_occupant.dna.uni_identity, num + 1) - scanner_occupant.updateappearance(mutations_overlay_update=1) - - rad_pulse_index = 0 - end_processing() - return - -/** - * Sets the default state for the tgui interface. - */ -/obj/machinery/computer/scan_consolenew/proc/set_default_state() - tgui_view_state["consoleMode"] = "storage" - tgui_view_state["storageMode"] = "console" - tgui_view_state["storageConsSubMode"] = "mutations" - tgui_view_state["storageDiskSubMode"] = "mutations" - - -#undef INJECTOR_TIMEOUT -#undef NUMBER_OF_BUFFERS -#undef SCRAMBLE_TIMEOUT -#undef JOKER_TIMEOUT -#undef JOKER_UPGRADE - -#undef RADIATION_STRENGTH_MAX -#undef RADIATION_STRENGTH_MULTIPLIER - -#undef RADIATION_DURATION_MAX -#undef RADIATION_ACCURACY_MULTIPLIER - -#undef RADIATION_IRRADIATION_MULTIPLIER - -#undef STATUS_TRANSFORMING - -#undef SEARCH_OCCUPANT -#undef SEARCH_STORED -#undef SEARCH_DISKETTE -#undef SEARCH_ADV_INJ +/// Base timeout for creating mutation activators and other injectors +#define INJECTOR_TIMEOUT 100 +/// Maximum number of genetic makeup storage slots in DNA Console +#define NUMBER_OF_BUFFERS 3 +/// Timeout for DNA Scramble in DNA Consoles +#define SCRAMBLE_TIMEOUT 600 +/// Timeout for using the Joker feature to solve a gene in DNA Console +#define JOKER_TIMEOUT 12000 +/// How much time DNA Scanner upgrade tiers remove from JOKER_TIMEOUT +#define JOKER_UPGRADE 3000 + +/// Maximum value for radiaton strength when pulsing enzymes +#define RADIATION_STRENGTH_MAX 15 +/// Larger multipliers will affect the range of values when pulsing enzymes +#define RADIATION_STRENGTH_MULTIPLIER 1 + +/// Maximum value for the radiation pulse duration when pulsing enzymes +#define RADIATION_DURATION_MAX 30 +/// Large values reduce pulse accuracy and may pulse other enzymes than selected +#define RADIATION_ACCURACY_MULTIPLIER 3 + +/// Special status indicating a scanner occupant is transforming eg. from monkey to human +#define STATUS_TRANSFORMING 4 + +/// Multiplier for how much radiation received from DNA Console functionality +#define RADIATION_IRRADIATION_MULTIPLIER 1 + +/// Flag for the mutation ref search system. Search will include scanner occupant +#define SEARCH_OCCUPANT 1 +/// Flag for the mutation ref search system. Search will include console storage +#define SEARCH_STORED 2 +/// Flag for the mutation ref search system. Search will include diskette storage +#define SEARCH_DISKETTE 4 +/// Flag for the mutation ref search system. Search will include advanced injector mutations +#define SEARCH_ADV_INJ 8 + +/obj/machinery/computer/scan_consolenew + name = "DNA Console" + desc = "Scan DNA." + icon_screen = "dna" + icon_keyboard = "med_key" + density = TRUE + circuit = /obj/item/circuitboard/computer/scan_consolenew + + use_power = IDLE_POWER_USE + idle_power_usage = 10 + active_power_usage = 400 + light_color = LIGHT_COLOR_BLUE + + /// Link to the techweb's stored research. Used to retrieve stored mutations + var/datum/techweb/stored_research + /// Maximum number of mutations that DNA Consoles are able to store + var/max_storage = 6 + /// Duration for enzyme radiation pulses + var/radduration = 2 + /// Strength for enzyme radiation pulses + var/radstrength = 1 + /// Maximum number of chromosomes that DNA Consoles are able to store. + var/max_chromosomes = 6 + /// Maximum number of enzymes we can store + var/list/genetic_makeup_buffer[NUMBER_OF_BUFFERS] + /// List of all mutations stored on the DNA Console + var/list/stored_mutations = list() + /// List of all chromosomes stored in the DNA Console + var/list/stored_chromosomes = list() + /// Assoc list of all advanced injectors. Keys are injector names. Values are lists of mutations. + var/list/list/injector_selection = list() + /// Maximum number of advanced injectors that DNA Consoles store + var/max_injector_selections = 2 + /// Maximum number of mutation that an advanced injector can store + var/max_injector_mutations = 10 + /// Maximum total instability of all combined mutations allowed on an advanced injector + var/max_injector_instability = 50 + + /// World time when injectors are ready to be printed + var/injectorready = 0 + /// World time when JOKER algorithm can be used in DNA Consoles + var/jokerready = 0 + /// World time when Scramble can be used in DNA Consoles + var/scrambleready = 0 + + /// Currently stored genetic data diskette + var/obj/item/disk/data/diskette = null + + /// Current delayed action, used for delayed enzyme transfer on scanner door close + var/list/delayed_action = null + + /// Index of the enzyme being modified during delayed enzyme pulse operations + var/rad_pulse_index = 0 + /// World time when the enzyme pulse should complete + var/rad_pulse_timer = 0 + + /// Used for setting tgui data - Whether the connected DNA Scanner is usable + var/can_use_scanner = FALSE + /// Used for setting tgui data - Whether the current DNA Scanner occupant is viable for genetic modification + var/is_viable_occupant = FALSE + /// Used for setting tgui data - Whether Scramble DNA is ready + var/is_scramble_ready = FALSE + /// Used for setting tgui data - Whether JOKER algorithm is ready + var/is_joker_ready = FALSE + /// Used for setting tgui data - Whether injectors are ready to be printed + var/is_injector_ready = FALSE + /// Used for setting tgui data - Wheher an enzyme pulse operation is ongoing + var/is_pulsing_rads = FALSE + /// Used for setting tgui data - Time until scramble is ready + var/time_to_scramble = 0 + /// Used for setting tgui data - Time until joker is ready + var/time_to_joker = 0 + /// Used for setting tgui data - Time until injectors are ready + var/time_to_injector = 0 + /// Used for setting tgui data - Time until the enzyme pulse is complete + var/time_to_pulse = 0 + + /// Currently connected DNA Scanner + var/obj/machinery/dna_scannernew/connected_scanner = null + /// Current DNA Scanner occupant + var/mob/living/carbon/scanner_occupant = null + + /// Used for setting tgui data - List of occupant mutations + var/list/tgui_occupant_mutations = list() + /// Used for setting tgui data - List of DNA Console stored mutations + var/list/tgui_console_mutations = list() + /// Used for setting tgui data - List of diskette stored mutations + var/list/tgui_diskette_mutations = list() + /// Used for setting tgui data - List of DNA Console chromosomes + var/list/tgui_console_chromosomes = list() + /// Used for setting tgui data - List of occupant mutations + var/list/tgui_genetic_makeup = list() + /// Used for setting tgui data - List of occupant mutations + var/list/tgui_advinjector_mutations = list() + + + /// State of tgui view, i.e. which tab is currently active, or which genome we're currently looking at. + var/list/list/tgui_view_state = list() + +/obj/machinery/computer/scan_consolenew/process() + . = ..() + + // This is for pulsing the UI element with radiation as part of genetic makeup + // If rad_pulse_index > 0 then it means we're attempting a rad pulse + if((rad_pulse_index > 0) && (rad_pulse_timer <= world.time)) + rad_pulse() + return + +/obj/machinery/computer/scan_consolenew/attackby(obj/item/I, mob/user, params) + // Store chromosomes in the console if there's room + if (istype(I, /obj/item/chromosome)) + if(LAZYLEN(stored_chromosomes) < max_chromosomes) + I.forceMove(src) + stored_chromosomes += I + to_chat(user, "You insert [I].") + else + to_chat(user, "You cannot store any more chromosomes!") + return + + // Insert data disk if console disk slot is empty + // Swap data disk if there is one already a disk in the console + if (istype(I, /obj/item/disk/data)) //INSERT SOME DISKETTES + if (!user.transferItemToLoc(I,src)) + return + if(diskette) + diskette.forceMove(drop_location()) + diskette = null + diskette = I + to_chat(user, "You insert [I].") + return + + // Recycle non-activator used injectors + // Turn activator used injectors (aka research injectors) to chromosomes + if(istype(I, /obj/item/dnainjector/activator)) + var/obj/item/dnainjector/activator/A = I + if(A.used) + to_chat(user,"Recycled [I].") + if(A.research) + if(prob(60)) + var/c_typepath = generate_chromosome() + var/obj/item/chromosome/CM = new c_typepath (drop_location()) + if(LAZYLEN(stored_chromosomes) < max_chromosomes) + CM.forceMove(src) + stored_chromosomes += CM + to_chat(user,"[capitalize(CM.name)] added to storage.") + else + to_chat(user, "You cannot store any more chromosomes!") + to_chat(user, "[capitalize(CM.name)] added on top of the console.") + else + to_chat(user, "There was not enough genetic data to extract a viable chromosome.") + qdel(I) + return + + return ..() + +/obj/machinery/computer/scan_consolenew/Initialize() + . = ..() + + // Connect with a nearby DNA Scanner on init + connect_to_scanner() + + // Set appropriate ready timers and limits for machines functions + injectorready = world.time + INJECTOR_TIMEOUT + scrambleready = world.time + SCRAMBLE_TIMEOUT + jokerready = world.time + JOKER_TIMEOUT + + // Set the default tgui state + set_default_state() + + // Link machine with research techweb. Used for discovering and accessing + // already discovered mutations + stored_research = SSresearch.science_tech + +/obj/machinery/computer/scan_consolenew/examine(mob/user) + . = ..() + +/obj/machinery/computer/scan_consolenew/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) + . = ..() + + // Most of ui_interact is spent setting variables for passing to the tgui + // interface. + // We can also do some general state processing here too as it's a good + // indication that a player is using the console. + + var/scanner_op = scanner_operational() + var/can_modify_occ = can_modify_occupant() + + // Check for connected AND operational scanner. + if(scanner_op) + can_use_scanner = TRUE + else + can_use_scanner = FALSE + connected_scanner = null + is_viable_occupant = FALSE + + // Check for a viable occupant in the scanner. + if(can_modify_occ) + is_viable_occupant = TRUE + else + is_viable_occupant = FALSE + + + // Populates various buffers for passing to tgui + build_mutation_list(can_modify_occ) + build_genetic_makeup_list() + + // Populate variables for passing to tgui interface + is_scramble_ready = (scrambleready < world.time) + time_to_scramble = round((scrambleready - world.time)/10) + + is_joker_ready = (jokerready < world.time) + time_to_joker = round((jokerready - world.time)/10) + + is_injector_ready = (injectorready < world.time) + time_to_injector = round((injectorready - world.time)/10) + + is_pulsing_rads = ((rad_pulse_index > 0) && (rad_pulse_timer > world.time)) + time_to_pulse = round((rad_pulse_timer - world.time)/10) + + // Attempt to update tgui ui, open and update if needed. + ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) + + if(!ui) + ui = new(user, src, ui_key, "DnaConsole", name, 539, 710, master_ui, state) + ui.open() + +/obj/machinery/computer/scan_consolenew/ui_data(mob/user) + var/list/data = list() + + data["view"] = tgui_view_state + data["storage"] = list() + + // This block of code generates the huge data structure passed to the tgui + // interface for displaying all the various bits of console/scanner data + // Should all be very self-explanatory + data["isScannerConnected"] = can_use_scanner + if(can_use_scanner) + data["scannerOpen"] = connected_scanner.state_open + data["scannerLocked"] = connected_scanner.locked + data["radStrength"] = radstrength + data["radDuration"] = radduration + data["stdDevStr"] = radstrength * RADIATION_STRENGTH_MULTIPLIER + switch(RADIATION_ACCURACY_MULTIPLIER / (radduration + (connected_scanner.precision_coeff ** 2))) //hardcoded values from a z-table for a normal distribution + if(0 to 0.25) + data["stdDevAcc"] = ">95 %" + if(0.25 to 0.5) + data["stdDevAcc"] = "68-95 %" + if(0.5 to 0.75) + data["stdDevAcc"] = "55-68 %" + else + data["stdDevAcc"] = "<38 %" + + data["isViableSubject"] = is_viable_occupant + if(is_viable_occupant) + data["subjectName"] = scanner_occupant.name + if(scanner_occupant.transformation_timer) + data["subjectStatus"] = STATUS_TRANSFORMING + else + data["subjectStatus"] = scanner_occupant.stat + data["subjectHealth"] = scanner_occupant.health + data["subjectRads"] = scanner_occupant.radiation/(RAD_MOB_SAFE/100) + data["subjectEnzymes"] = scanner_occupant.dna.unique_enzymes + data["isMonkey"] = ismonkey(scanner_occupant) + data["subjectUNI"] = scanner_occupant.dna.uni_identity + data["storage"]["occupant"] = tgui_occupant_mutations + //data["subjectMutations"] = tgui_occupant_mutations + else + data["subjectName"] = null + data["subjectStatus"] = null + data["subjectHealth"] = null + data["subjectRads"] = null + data["subjectEnzymes"] = null + //data["subjectMutations"] = null + data["storage"]["occupant"] = null + + data["hasDelayedAction"] = (delayed_action != null) + data["isScrambleReady"] = is_scramble_ready + data["isJokerReady"] = is_joker_ready + data["isInjectorReady"] = is_injector_ready + data["scrambleSeconds"] = time_to_scramble + data["jokerSeconds"] = time_to_joker + data["injectorSeconds"] = time_to_injector + data["isPulsingRads"] = is_pulsing_rads + data["radPulseSeconds"] = time_to_pulse + + if(diskette != null) + data["hasDisk"] = TRUE + data["diskCapacity"] = diskette.max_mutations - LAZYLEN(diskette.mutations) + data["diskReadOnly"] = diskette.read_only + //data["diskMutations"] = tgui_diskette_mutations + data["storage"]["disk"] = tgui_diskette_mutations + data["diskHasMakeup"] = (LAZYLEN(diskette.genetic_makeup_buffer) > 0) + data["diskMakeupBuffer"] = diskette.genetic_makeup_buffer.Copy() + else + data["hasDisk"] = FALSE + data["diskCapacity"] = 0 + data["diskReadOnly"] = TRUE + //data["diskMutations"] = null + data["storage"]["disk"] = null + data["diskHasMakeup"] = FALSE + data["diskMakeupBuffer"] = null + + data["mutationCapacity"] = max_storage - LAZYLEN(stored_mutations) + //data["mutationStorage"] = tgui_console_mutations + data["storage"]["console"] = tgui_console_mutations + data["chromoCapacity"] = max_chromosomes - LAZYLEN(stored_chromosomes) + data["chromoStorage"] = tgui_console_chromosomes + data["makeupCapacity"] = NUMBER_OF_BUFFERS + data["makeupStorage"] = tgui_genetic_makeup + + //data["advInjectors"] = tgui_advinjector_mutations + data["storage"]["injector"] = tgui_advinjector_mutations + data["maxAdvInjectors"] = max_injector_selections + + return data + +/obj/machinery/computer/scan_consolenew/ui_act(action, var/list/params) + if(..()) + return TRUE + + . = TRUE + + add_fingerprint(usr) + usr.set_machine(src) + + switch(action) + // Connect this DNA Console to a nearby DNA Scanner + // Usually only activate as an option if there is no connected scanner + if("connect_scanner") + connect_to_scanner() + return + + // Toggle the door open/closed status on attached DNA Scanner + if("toggle_door") + // GUARD CHECK - Scanner still connected and operational? + if(!scanner_operational()) + return + + connected_scanner.toggle_open(usr) + return + + // Toggle the door bolts on the attached DNA Scanner + if("toggle_lock") + // GUARD CHECK - Scanner still connected and operational? + if(!scanner_operational()) + return + + connected_scanner.locked = !connected_scanner.locked + return + + // Scramble scanner occupant's DNA + if("scramble_dna") + // GUARD CHECK - Can we genetically modify the occupant? Includes scanner + // operational guard checks. + // GUARD CHECK - Is scramble DNA actually ready? + if(!can_modify_occupant() || !(scrambleready < world.time)) + return + + scanner_occupant.dna.remove_all_mutations(list(MUT_NORMAL, MUT_EXTRA)) + scanner_occupant.dna.generate_dna_blocks() + scrambleready = world.time + SCRAMBLE_TIMEOUT + to_chat(usr,"DNA scrambled.") + scanner_occupant.radiation += RADIATION_STRENGTH_MULTIPLIER*50/(connected_scanner.damage_coeff ** 2) + return + + // Check whether a specific mutation is eligible for discovery within the + // scanner occupant + // This is additionally done when a mutation's tab is selected in the tgui + // interface. This is because some mutations, such as Monkified on monkeys, + // are infact completed by default but not yet discovered. Likewise, all + // mutations can have their sequence completed while Monkified is still an + // active mutation and thus won't immediately be discovered but could be + // discovered when Monkified is removed + // ---------------------------------------------------------------------- // + // params["alias"] - Alias of a mutation. The alias is the "hidden" name of + // the mutation, for example "Mutation 5" or "Mutation 33" + if("check_discovery") + // GUARD CHECK - Can we genetically modify the occupant? Includes scanner + // operational guard checks. + if(!can_modify_occupant()) + return + + // GUARD CHECK - Have we somehow cheekily swapped occupants? This is + // unexpected. + if(!(scanner_occupant == connected_scanner.occupant)) + return + + check_discovery(params["alias"]) + return + + // Check all mutations of the occupant and check if any are discovered. + // This is called when the Genetic Sequencer is selected. It'll do things + // like immediately discover Monkified without needing to click through + // the mutation tabs and handle cases where mutations are solved but not + // discovered due to the Monkified mutation being active then removed. + if("all_check_discovery") + // GUARD CHECK - Can we genetically modify the occupant? Includes scanner + // operational guard checks. + if(!can_modify_occupant()) + return + + // GUARD CHECK - Have we somehow cheekily swapped occupants? This is + // unexpected. + if(!(scanner_occupant == connected_scanner.occupant)) + return + + // Go over all standard mutations and check if they've been discovered. + for(var/mutation_type in scanner_occupant.dna.mutation_index) + var/datum/mutation/human/HM = GET_INITIALIZED_MUTATION(mutation_type) + check_discovery(HM.alias) + + return + + // Set a gene in a mutation's genetic sequence. Will also check for mutations + // discovery as part of the process. + // ---------------------------------------------------------------------- // + // params["alias"] - Alias of a mutation. The alias is the "hidden" name of + // the mutation, for example "Mutation 5" or "Mutation 33" + // params["gene"] - The letter of the new gene + // params["pos"] - The BYOND index of the letter in the gene sequence to be + // changed. Expects a text string from TGUI and will convert to a number + if("pulse_gene") + // GUARD CHECK - Can we genetically modify the occupant? Includes scanner + // operational guard checks. + if(!can_modify_occupant()) + return + + // GUARD CHECK - Have we somehow cheekily swapped occupants? This is + // unexpected. + if(!(scanner_occupant == connected_scanner.occupant)) + return + + // GUARD CHECK - Is the occupant currently undergoing some form of + // transformation? If so, we don't want to be pulsing genes. + if(scanner_occupant.transformation_timer) + to_chat(usr,"Gene pulse failed: The scanner occupant undergoing a transformation.") + return + + // Resolve mutation's BYOND path from the alias + var/alias = params["alias"] + var/path = GET_MUTATION_TYPE_FROM_ALIAS(alias) + + // Make sure the occupant still has this mutation + if(!(path in scanner_occupant.dna.mutation_index)) + return + + // Resolve BYOND path to genome sequence of scanner occupant + var/sequence = GET_GENE_STRING(path, scanner_occupant.dna) + + var/newgene = params["gene"] + var/genepos = text2num(params["pos"]) + + // If the new gene is J, this means we're dealing with a JOKER + // GUARD CHECK - Is JOKER actually ready? + if((newgene == "J") && (jokerready < world.time)) + var/truegenes = GET_SEQUENCE(path) + newgene = truegenes[genepos] + jokerready = world.time + JOKER_TIMEOUT - (JOKER_UPGRADE * (connected_scanner.precision_coeff-1)) + + // If the gene is an X, we want to update the default genes with the new + // X to allow highlighting logic to work on the tgui interface. + if(newgene == "X") + var/defaultseq = scanner_occupant.dna.default_mutation_genes[path] + defaultseq = copytext_char(defaultseq, 1, genepos) + newgene + copytext_char(defaultseq, genepos + 1) + scanner_occupant.dna.default_mutation_genes[path] = defaultseq + + // Copy genome to scanner occupant and do some basic mutation checks as + // we've increased the occupant rads + sequence = copytext_char(sequence, 1, genepos) + newgene + copytext_char(sequence, genepos + 1) + scanner_occupant.dna.mutation_index[path] = sequence + scanner_occupant.radiation += RADIATION_STRENGTH_MULTIPLIER/connected_scanner.damage_coeff + scanner_occupant.domutcheck() + + // GUARD CHECK - Modifying genetics can lead to edge cases where the + // scanner occupant is qdel'd and replaced with a different entity. + // Examples of this include adding/removing the Monkified mutation which + // qdels the previous entity and creates a brand new one in its place. + // We should redo all of our occupant modification checks again, although + // it is less than ideal. + if(!can_modify_occupant()) + return + + // Check if we cracked a mutation + check_discovery(alias) + + return + + // Apply a chromosome to a specific mutation. + // ---------------------------------------------------------------------- // + // params["mutref"] - ATOM Ref of specific mutation to apply the chromo to + // params["chromo"] - Name of the chromosome to apply to the mutation + if("apply_chromo") + // GUARD CHECK - Can we genetically modify the occupant? Includes scanner + // operational guard checks. + if(!can_modify_occupant()) + return + + // GUARD CHECK - Have we somehow cheekily swapped occupants? This is + // unexpected. + if(!(scanner_occupant == connected_scanner.occupant)) + return + + var/bref = params["mutref"] + + // GUARD CHECK - Only search occupant for this specific ref, since your + // can only apply chromosomes to mutations occupants. + var/datum/mutation/human/HM = get_mut_by_ref(bref, SEARCH_OCCUPANT) + + // GUARD CHECK - This should not be possible. Unexpected result + if(!HM) + return + + // Look through our stored chromos and compare names to find a + // stored chromo we can apply. + for(var/obj/item/chromosome/CM in stored_chromosomes) + if(CM.can_apply(HM) && (CM.name == params["chromo"])) + stored_chromosomes -= CM + CM.apply(HM) + + return + + // Print any type of standard injector, limited right now to activators that + // activate a dormant mutation and mutators that forcibly create a new + // MUT_EXTRA mutation + // ---------------------------------------------------------------------- // + // params["mutref"] - ATOM Ref of specific mutation to create an injector of + // params["is_activator"] - Is this an "Activator" style injector, also + // referred to as a "Research" type. Expects a string with 0 or 1, which + // then gets converted to a number. + // params["source"] - The source the request came from. + // Expected results: + // "occupant" - From genetic sequencer + // "console" - From DNA Console storage + // "disk" - From inserted diskette + if("print_injector") + // Because printing mutators and activators share a bunch of code, + // it makes sense to keep them both together and set unique vars + // later in the code + + // As a side note, because mutations can contain unique metadata, + // this system uses BYOND Atom Refs to safely and accurately + // identify mutations from big ol' lists + + // GUARD CHECK - Is the injector actually ready? + if(world.time < injectorready) + return + + var/search_flags = 0 + + switch(params["source"]) + if("occupant") + // GUARD CHECK - Make sure we can modify the occupant before we + // attempt to search them for any given mutation refs. This could + // lead to no search flags being passed to get_mut_by_ref and this + // is intended functionality to prevent any cheese or abuse + if(can_modify_occupant()) + search_flags |= SEARCH_OCCUPANT + if("console") + search_flags |= SEARCH_STORED + if("disk") + search_flags |= SEARCH_DISKETTE + + var/bref = params["mutref"] + var/datum/mutation/human/HM = get_mut_by_ref(bref, search_flags) + + // GUARD CHECK - This should not be possible. Unexpected result + if(!HM) + return + + // Create a new DNA Injector and add the appropriate mutations to it + var/obj/item/dnainjector/activator/I = new /obj/item/dnainjector/activator(loc) + I.add_mutations += new HM.type(copymut = HM) + + var/is_activator = text2num(params["is_activator"]) + + // Activators are also called "research" injectors and are used to create + // chromosomes by recycling at the DNA Console + if(is_activator) + I.name = "[HM.name] activator" + I.research = TRUE + // If there's an operational connected scanner, we can use its upgrades + // to improve our injector's radiation generation + if(scanner_operational()) + I.damage_coeff = connected_scanner.damage_coeff*4 + injectorready = world.time + INJECTOR_TIMEOUT * (1 - 0.1 * connected_scanner.precision_coeff) + else + injectorready = world.time + INJECTOR_TIMEOUT + else + I.name = "[HM.name] mutator" + I.doitanyway = TRUE + // If there's an operational connected scanner, we can use its upgrades + // to improve our injector's radiation generation + if(scanner_operational()) + I.damage_coeff = connected_scanner.damage_coeff + injectorready = world.time + INJECTOR_TIMEOUT * 5 * (1 - 0.1 * connected_scanner.precision_coeff) + else + injectorready = world.time + INJECTOR_TIMEOUT * 5 + + return + + // Save a mutation to the console's storage buffer. + // ---------------------------------------------------------------------- // + // params["mutref"] - ATOM Ref of specific mutation to store + // params["source"] - The source the request came from. + // Expected results: + // "occupant" - From genetic sequencer + // "disk" - From inserted diskette + if("save_console") + var/search_flags = 0 + + switch(params["source"]) + if("occupant") + // GUARD CHECK - Make sure we can modify the occupant before we + // attempt to search them for any given mutation refs. This could + // lead to no search flags being passed to get_mut_by_ref and this + // is intended functionality to prevent any cheese or abuse + if(can_modify_occupant()) + search_flags |= SEARCH_OCCUPANT + if("disk") + search_flags |= SEARCH_DISKETTE + + // GUARD CHECK - Is mutation storage full? + if(LAZYLEN(stored_mutations) >= max_storage) + to_chat(usr,"Mutation storage is full.") + return + + var/bref = params["mutref"] + var/datum/mutation/human/HM = get_mut_by_ref(bref, search_flags) + + // GUARD CHECK - This should not be possible. Unexpected result + if(!HM) + return + + var/datum/mutation/human/A = new HM.type() + A.copy_mutation(HM) + stored_mutations += A + to_chat(usr,"Mutation successfully stored.") + return + + // Save a mutation to the diskette's storage buffer. + // ---------------------------------------------------------------------- // + // params["mutref"] - ATOM Ref of specific mutation to store + // params["source"] - The source the request came from + // Expected results: + // "occupant" - From genetic sequencer + // "console" - From DNA Console storage + if("save_disk") + // GUARD CHECK - This code shouldn't even be callable without a diskette + // inserted. Unexpected result + if(!diskette) + return + + // GUARD CHECK - Make sure the disk is not full + if(LAZYLEN(diskette.mutations) >= diskette.max_mutations) + to_chat(usr,"Disk storage is full.") + return + + // GUARD CHECK - Make sure the disk isn't set to read only, as we're + // attempting to write to it + if(diskette.read_only) + to_chat(usr,"Disk is set to read only mode.") + return + + var/search_flags = 0 + + switch(params["source"]) + if("occupant") + // GUARD CHECK - Make sure we can modify the occupant before we + // attempt to search them for any given mutation refs. This could + // lead to no search flags being passed to get_mut_by_ref and this + // is intended functionality to prevent any cheese or abuse + if(can_modify_occupant()) + search_flags |= SEARCH_OCCUPANT + if("console") + search_flags |= SEARCH_STORED + + var/bref = params["mutref"] + var/datum/mutation/human/HM = get_mut_by_ref(bref, search_flags) + + // GUARD CHECK - This should not be possible. Unexpected result + if(!HM) + return + + var/datum/mutation/human/A = new HM.type() + A.copy_mutation(HM) + diskette.mutations += A + to_chat(usr,"Mutation successfully stored to disk.") + return + + // Completely removes a MUT_EXTRA mutation or mutation with corrupt gene + // sequence from the scanner occupant + // ---------------------------------------------------------------------- // + // params["mutref"] - ATOM Ref of specific mutation to nullify + if("nullify") + // GUARD CHECK - Can we genetically modify the occupant? Includes scanner + // operational guard checks. + if(!can_modify_occupant()) + return + + var/bref = params["mutref"] + var/datum/mutation/human/HM = get_mut_by_ref(bref, SEARCH_OCCUPANT) + + // GUARD CHECK - This should not be possible. Unexpected result + if(!HM) + return + + // GUARD CHECK - Nullify should only be used on scrambled or "extra" + // mutations. + if(!HM.scrambled && !(HM.class == MUT_EXTRA)) + return + + scanner_occupant.dna.remove_mutation(HM.type) + return + + // Deletes saved mutation from console buffer. + // ---------------------------------------------------------------------- // + // params["mutref"] - ATOM Ref of specific mutation to delete + if("delete_console_mut") + var/bref = params["mutref"] + var/datum/mutation/human/HM = get_mut_by_ref(bref, SEARCH_STORED) + + if(HM) + stored_mutations.Remove(HM) + qdel(HM) + + return + + // Deletes saved mutation from disk buffer. + // ---------------------------------------------------------------------- // + // params["mutref"] - ATOM Ref of specific mutation to delete + if("delete_disk_mut") + // GUARD CHECK - This code shouldn't even be callable without a diskette + // inserted. Unexpected result + if(!diskette) + return + + // GUARD CHECK - Make sure the disk isn't set to read only, as we're + // attempting to write to it (via deletion) + if(diskette.read_only) + to_chat(usr,"Disk is set to read only mode.") + return + + var/bref = params["mutref"] + var/datum/mutation/human/HM = get_mut_by_ref(bref, SEARCH_DISKETTE) + + if(HM) + diskette.mutations.Remove(HM) + qdel(HM) + + return + + // Ejects a stored chromosome from the DNA Console + // ---------------------------------------------------------------------- // + // params["chromo"] - Text string of the chromosome name + if("eject_chromo") + var/chromname = params["chromo"] + + for(var/obj/item/chromosome/CM in stored_chromosomes) + if(chromname == CM.name) + CM.forceMove(drop_location()) + adjust_item_drop_location(CM) + stored_chromosomes -= CM + return + + return + + // Combines two mutations from the console to try and create a new mutation + // ---------------------------------------------------------------------- // + // params["firstref"] - ATOM Ref of first mutation for combination + // params["secondref"] - ATOM Ref of second mutation for combination + // mutation + if("combine_console") + // GUaRD CHECK - Make sure mutation storage isn't full. If it is, we won't + // be able to store the new combo mutation + if(LAZYLEN(stored_mutations) >= max_storage) + to_chat(usr,"Mutation storage is full.") + return + + // GUARD CHECK - We're running a research-type operation. If, for some + // reason, somehow the DNA Console has been disconnected from the research + // network - Or was never in it to begin with - don't proceed + if(!stored_research) + return + + var/first_bref = params["firstref"] + var/second_bref = params["secondref"] + + // GUARD CHECK - Find the source and destination mutations on the console + // and make sure they actually exist. + var/datum/mutation/human/source_mut = get_mut_by_ref(first_bref, SEARCH_STORED | SEARCH_DISKETTE) + if(!source_mut) + return + + var/datum/mutation/human/dest_mut = get_mut_by_ref(second_bref, SEARCH_STORED | SEARCH_DISKETTE) + if(!dest_mut) + return + + // Attempt to mix the two mutations to get a new type + var/result_path = get_mixed_mutation(source_mut.type, dest_mut.type) + + if(!result_path) + return + + // If we got a new type, add it to our storage + stored_mutations += new result_path() + to_chat(usr, "Success! New mutation has been added to console storage.") + + // If it's already discovered, end here. Otherwise, add it to the list of + // discovered mutations. + // We've already checked for stored_research earlier + if(result_path in stored_research.discovered_mutations) + return + + var/datum/mutation/human/HM = GET_INITIALIZED_MUTATION(result_path) + stored_research.discovered_mutations += result_path + say("Successfully mutated [HM.name].") + return + + // Combines two mutations from the disk to try and create a new mutation + // ---------------------------------------------------------------------- // + // params["firstref"] - ATOM Ref of first mutation for combination + // params["secondref"] - ATOM Ref of second mutation for combination + // mutation + if("combine_disk") + // GUARD CHECK - This code shouldn't even be callable without a diskette + // inserted. Unexpected result + if(!diskette) + return + + // GUARD CHECK - Make sure the disk is not full. + if(LAZYLEN(diskette.mutations) >= diskette.max_mutations) + to_chat(usr,"Disk storage is full.") + return + + // GUARD CHECK - Make sure the disk isn't set to read only, as we're + // attempting to write to it + if(diskette.read_only) + to_chat(usr,"Disk is set to read only mode.") + return + + // GUARD CHECK - We're running a research-type operation. If, for some + // reason, somehow the DNA Console has been disconnected from the research + // network - Or was never in it to begin with - don't proceed + if(!stored_research) + return + + var/first_bref = params["firstref"] + var/second_bref = params["secondref"] + + // GUARD CHECK - Find the source and destination mutations on the console + // and make sure they actually exist. + var/datum/mutation/human/source_mut = get_mut_by_ref(first_bref, SEARCH_STORED | SEARCH_DISKETTE) + if(!source_mut) + return + + var/datum/mutation/human/dest_mut = get_mut_by_ref(second_bref, SEARCH_STORED | SEARCH_DISKETTE) + if(!dest_mut) + return + + // Attempt to mix the two mutations to get a new type + var/result_path = get_mixed_mutation(source_mut.type, dest_mut.type) + + if(!result_path) + return + + // If we got a new type, add it to our storage + diskette.mutations += new result_path() + to_chat(usr, "Success! New mutation has been added to the disk.") + + // If it's already discovered, end here. Otherwise, add it to the list of + // discovered mutations + // We've already checked for stored_research earlier + if(result_path in stored_research.discovered_mutations) + return + + var/datum/mutation/human/HM = GET_INITIALIZED_MUTATION(result_path) + stored_research.discovered_mutations += result_path + say("Successfully mutated [HM.name].") + return + + // Sets the Genetic Makeup pulse strength. + // ---------------------------------------------------------------------- // + // params["val"] - New strength value as text string, converted to number + // later on in code + if("set_pulse_strength") + var/value = round(text2num(params["val"])) + radstrength = WRAP(value, 1, RADIATION_STRENGTH_MAX+1) + return + + // Sets the Genetic Makeup pulse duration + // ---------------------------------------------------------------------- // + // params["val"] - New strength value as text string, converted to number + // later on in code + if("set_pulse_duration") + var/value = round(text2num(params["val"])) + radduration = WRAP(value, 1, RADIATION_DURATION_MAX+1) + return + + // Saves Genetic Makeup information to disk + // ---------------------------------------------------------------------- // + // params["index"] - The BYOND index of the console genetic makeup buffer to + // copy to disk + if("save_makeup_disk") + // GUARD CHECK - This code shouldn't even be callable without a diskette + // inserted. Unexpected result + if(!diskette) + return + + // GUARD CHECK - Make sure the disk isn't set to read only, as we're + // attempting to write to it + if(diskette.read_only) + to_chat(usr,"Disk is set to read only mode.") + return + + // Convert the index to a number and clamp within the array range + var/buffer_index = text2num(params["index"]) + buffer_index = clamp(buffer_index, 1, NUMBER_OF_BUFFERS) + + var/list/buffer_slot = genetic_makeup_buffer[buffer_index] + + // GUARD CHECK - This should not be possible to activate on a buffer slot + // that doesn't have any genetic data. Unexpected result + if(!istype(buffer_slot)) + return + + diskette.genetic_makeup_buffer = buffer_slot.Copy() + return + + // Loads Genetic Makeup from disk to a console buffer + // ---------------------------------------------------------------------- // + // params["index"] - The BYOND index of the console genetic makeup buffer to + // copy to. Expected as text string, converted to number later + if("load_makeup_disk") + // GUARD CHECK - This code shouldn't even be callable without a diskette + // inserted. Unexpected result + if(!diskette) + return + + // GUARD CHECK - This should not be possible to activate on a diskette + // that doesn't have any genetic data. Unexpected result + if(LAZYLEN(diskette.genetic_makeup_buffer) == 0) + return + + // Convert the index to a number and clamp within the array range, then + // copy the data from the disk to that buffer + var/buffer_index = text2num(params["index"]) + buffer_index = clamp(buffer_index, 1, NUMBER_OF_BUFFERS) + genetic_makeup_buffer[buffer_index] = diskette.genetic_makeup_buffer.Copy() + return + + // Deletes genetic makeup buffer from the inserted diskette + if("del_makeup_disk") + // GUARD CHECK - This code shouldn't even be callable without a diskette + // inserted. Unexpected result + if(!diskette) + return + + // GUARD CHECK - Make sure the disk isn't set to read only, as we're + // attempting to write (via deletion) to it + if(diskette.read_only) + to_chat(usr,"Disk is set to read only mode.") + return + + diskette.genetic_makeup_buffer.Cut() + return + + // Saves the scanner occupant's genetic makeup to a given console buffer + // ---------------------------------------------------------------------- // + // params["index"] - The BYOND index of the console genetic makeup buffer to + // save the new genetic data to. Expected as text string, converted to + // number later + if("save_makeup_console") + // GUARD CHECK - Can we genetically modify the occupant? Includes scanner + // operational guard checks. + if(!can_modify_occupant()) + return + + // Convert the index to a number and clamp within the array range, then + // copy the data from the disk to that buffer + var/buffer_index = text2num(params["index"]) + buffer_index = clamp(buffer_index, 1, NUMBER_OF_BUFFERS) + + // Set the new information + genetic_makeup_buffer[buffer_index] = list( + "label"="Slot [buffer_index]:[scanner_occupant.real_name]", + "UI"=scanner_occupant.dna.uni_identity, + "UE"=scanner_occupant.dna.unique_enzymes, + "name"=scanner_occupant.real_name, + "blood_type"=scanner_occupant.dna.blood_type) + + return + + // Deleted genetic makeup data from a console buffer slot + // ---------------------------------------------------------------------- // + // params["index"] - The BYOND index of the console genetic makeup buffer to + // delete the genetic data from. Expected as text string, converted to + // number later + if("del_makeup_console") + // Convert the index to a number and clamp within the array range, then + // copy the data from the disk to that buffer + var/buffer_index = text2num(params["index"]) + buffer_index = clamp(buffer_index, 1, NUMBER_OF_BUFFERS) + var/list/buffer_slot = genetic_makeup_buffer[buffer_index] + + // GUARD CHECK - This shouldn't be possible to execute this on a null + // buffer. Unexpected resut + if(!istype(buffer_slot)) + return + + genetic_makeup_buffer[buffer_index] = null + return + + // Eject stored diskette from console + if("eject_disk") + // GUARD CHECK - This code shouldn't even be callable without a diskette + // inserted. Unexpected result + if(!diskette) + return + + diskette.forceMove(drop_location()) + diskette = null + return + + // Create a Genetic Makeup injector. These injectors are timed and thus are + // only temporary + // ---------------------------------------------------------------------- // + // params["index"] - The BYOND index of the console genetic makeup buffer to + // create the makeup injector from. Expected as text string, converted to + // number later + // params["type"] - Type of injector to create + // Expected results: + // "ue" - Unique Enzyme, changes name and blood type + // "ui" - Unique Identity, changes looks + // "mixed" - Combination of both ue and ui + if("makeup_injector") + // Convert the index to a number and clamp within the array range, then + // copy the data from the disk to that buffer + var/buffer_index = text2num(params["index"]) + buffer_index = clamp(buffer_index, 1, NUMBER_OF_BUFFERS) + var/list/buffer_slot = genetic_makeup_buffer[buffer_index] + + // GUARD CHECK - This shouldn't be possible to execute this on a null + // buffer. Unexpected resut + if(!istype(buffer_slot)) + return + + var/type = params["type"] + var/obj/item/dnainjector/timed/I + + switch(type) + if("ui") + // GUARD CHECK - There's currently no way to save partial genetic data. + // However, if this is the case, we can't make a complete injector and + // this catches that edge case + if(!buffer_slot["UI"]) + to_chat(usr,"Genetic data corrupted, unable to create injector.") + return + + I = new /obj/item/dnainjector/timed(loc) + I.fields = list("UI"=buffer_slot["UI"]) + + // If there is a connected scanner, we can use its upgrades to reduce + // the radiation generated by this injector + if(scanner_operational()) + I.damage_coeff = connected_scanner.damage_coeff + if("ue") + // GUARD CHECK - There's currently no way to save partial genetic data. + // However, if this is the case, we can't make a complete injector and + // this catches that edge case + if(!buffer_slot["name"] || !buffer_slot["UE"] || !buffer_slot["blood_type"]) + to_chat(usr,"Genetic data corrupted, unable to create injector.") + return + + I = new /obj/item/dnainjector/timed(loc) + I.fields = list("name"=buffer_slot["name"], "UE"=buffer_slot["UE"], "blood_type"=buffer_slot["blood_type"]) + + // If there is a connected scanner, we can use its upgrades to reduce + // the radiation generated by this injector + if(scanner_operational()) + I.damage_coeff = connected_scanner.damage_coeff + if("mixed") + // GUARD CHECK - There's currently no way to save partial genetic data. + // However, if this is the case, we can't make a complete injector and + // this catches that edge case + if(!buffer_slot["UI"] || !buffer_slot["name"] || !buffer_slot["UE"] || !buffer_slot["blood_type"]) + to_chat(usr,"Genetic data corrupted, unable to create injector.") + return + + I = new /obj/item/dnainjector/timed(loc) + I.fields = list("UI"=buffer_slot["UI"],"name"=buffer_slot["name"], "UE"=buffer_slot["UE"], "blood_type"=buffer_slot["blood_type"]) + + // If there is a connected scanner, we can use its upgrades to reduce + // the radiation generated by this injector + if(scanner_operational()) + I.damage_coeff = connected_scanner.damage_coeff + + // If we successfully created an injector, don't forget to set the new + // ready timer. + if(I) + injectorready = world.time + INJECTOR_TIMEOUT + + return + + // Applies a genetic makeup buffer to the scanner occupant + // ---------------------------------------------------------------------- // + // params["index"] - The BYOND index of the console genetic makeup buffer to + // apply to the scanner occupant. Expected as text string, converted to + // number later + // params["type"] - Type of genetic makeup copy to implement + // Expected results: + // "ue" - Unique Enzyme, changes name and blood type + // "ui" - Unique Identity, changes looks + // "mixed" - Combination of both ue and ui + if("makeup_apply") + // GUARD CHECK - Can we genetically modify the occupant? Includes scanner + // operational guard checks. + if(!can_modify_occupant()) + return + + // Convert the index to a number and clamp within the array range, then + // copy the data from the disk to that buffer + var/buffer_index = text2num(params["index"]) + buffer_index = clamp(buffer_index, 1, NUMBER_OF_BUFFERS) + var/list/buffer_slot = genetic_makeup_buffer[buffer_index] + + // GUARD CHECK - This shouldn't be possible to execute this on a null + // buffer. Unexpected resut + if(!istype(buffer_slot)) + return + + var/type = params["type"] + + apply_genetic_makeup(type, buffer_slot) + return + + // Applies a genetic makeup buffer to the next scanner occupant. This sets + // some code that will run when the connected DNA Scanner door is next + // closed + // This allows people to self-modify their genetic makeup, as tgui + // interfaces can not be accessed while inside the DNA Scanner and genetic + // makeup injectors are only temporary + // ---------------------------------------------------------------------- // + // params["index"] - The BYOND index of the console genetic makeup buffer to + // apply to the scanner occupant. Expected as text string, converted to + // number later + // params["type"] - Type of genetic makeup copy to implement + // Expected results: + // "ue" - Unique Enzyme, changes name and blood type + // "ui" - Unique Identity, changes looks + // "mixed" - Combination of both ue and ui + if("makeup_delay") + // Convert the index to a number and clamp within the array range, then + // copy the data from the disk to that buffer + var/buffer_index = text2num(params["index"]) + buffer_index = clamp(buffer_index, 1, NUMBER_OF_BUFFERS) + var/list/buffer_slot = genetic_makeup_buffer[buffer_index] + + // GUARD CHECK - This shouldn't be possible to execute this on a null + // buffer. Unexpected resut + if(!istype(buffer_slot)) + return + + var/type = params["type"] + + // Set the delayed action. The next time the scanner door is closed, + // unless this is cancelled in the UI, the action will happen + delayed_action = list("type" = type, "buffer_slot" = buffer_slot) + return + + // Attempts to modify the indexed element of the Unique Identity string + // This is a time delayed action that is handled in process() + // ---------------------------------------------------------------------- // + // params["index"] - The BYOND index of the Unique Identity string to + // attempt to modify + if("makeup_pulse") + // GUARD CHECK - Can we genetically modify the occupant? Includes scanner + // operational guard checks. + if(!can_modify_occupant()) + return + + // Set the appropriate timer and index to pulse. This is then managed + // later on in process() + var/len = length_char(scanner_occupant.dna.uni_identity) + rad_pulse_timer = world.time + (radduration*10) + rad_pulse_index = WRAP(text2num(params["index"]), 1, len+1) + begin_processing() + return + + // Cancels the delayed action - In this context it is not the radiation + // pulse from "makeup_pulse", which can not be cancelled. It is instead + // the delayed genetic transfer from "makeup_delay" + if("cancel_delay") + delayed_action = null + return + + // Creates a new advanced injector storage buffer in the console + // ---------------------------------------------------------------------- // + // params["name"] - The name to apply to the new injector + if("new_adv_inj") + // GUARD CHECK - Make sure we can make a new injector. This code should + // not be called if we're already maxed out and this is an Unexpected + // result + if(!(LAZYLEN(injector_selection) < max_injector_selections)) + return + + // GUARD CHECK - Sanitise and trim the proposed name. This prevents HTML + // injection and equivalent as tgui input is not stripped + var/inj_name = params["name"] + inj_name = trim(sanitize(inj_name)) + + // GUARD CHECK - If the name is null or blank, or the name is already in + // the list of advanced injectors, we want to reject it as we can't have + // duplicate named advanced injectors + if(!inj_name || (inj_name in injector_selection)) + return + + injector_selection[inj_name] = list() + return + + // Deleted an advanced injector storage buffer from the console + // ---------------------------------------------------------------------- // + // params["name"] - The name of the injector to delete + if("del_adv_inj") + var/inj_name = params["name"] + + // GUARD CHECK - If the name is null or blank, reject. + // GUARD CHECK - If the name isn't in the list of advanced injectors, we + // want to reject this as it shouldn't be possible ever do this. + // Unexpected result + if(!inj_name || !(inj_name in injector_selection)) + return + + injector_selection.Remove(inj_name) + return + + // Creates an injector from an advanced injector buffer + // ---------------------------------------------------------------------- // + // params["name"] - The name of the injector to print + if("print_adv_inj") + // As a side note, because mutations can contain unique metadata, + // this system uses BYOND Atom Refs to safely and accurately + // identify mutations from big ol' lists. + + // GUARD CHECK - Is the injector actually ready? + if(world.time < injectorready) + return + + var/inj_name = params["name"] + + // GUARD CHECK - If the name is null or blank, reject. + // GUARD CHECK - If the name isn't in the list of advanced injectors, we + // want to reject this as it shouldn't be possible ever do this. + // Unexpected result + if(!inj_name || !(inj_name in injector_selection)) + return + + var/list/injector = injector_selection[inj_name] + var/obj/item/dnainjector/activator/I = new /obj/item/dnainjector/activator(loc) + + // Run through each mutation in our Advanced Injector and add them to a + // new injector + for(var/A in injector) + var/datum/mutation/human/HM = A + I.add_mutations += new HM.type(copymut=HM) + + // Force apply any mutations, this is functionality similar to mutators + I.doitanyway = TRUE + I.name = "Advanced [inj_name] injector" + + // If there's an operational connected scanner, we can use its upgrades + // to improve our injector's radiation generation + if(scanner_operational()) + I.damage_coeff = connected_scanner.damage_coeff + injectorready = world.time + INJECTOR_TIMEOUT * 8 * (1 - 0.1 * connected_scanner.precision_coeff) + else + injectorready = world.time + INJECTOR_TIMEOUT * 8 + + return + + // Adds a mutation to an advanced injector + // ---------------------------------------------------------------------- // + // params["mutref"] - ATOM Ref of specific mutation to add to the injector + // params["advinj"] - Name of the advanced injector to add the mutation to + if("add_advinj_mut") + // GUARD CHECK - Can we genetically modify the occupant? Includes scanner + // operational guard checks. + // This is needed because this operation can only be completed from the + // genetic sequencer. + if(!can_modify_occupant()) + return + + var/adv_inj = params["advinj"] + + // GUARD CHECK - Make sure our advanced injector actually exists. This + // should not be possible. Unexpected result + if(!(adv_inj in injector_selection)) + return + + // GUARD CHECK - Make sure we limit the number of mutations appropriately + if(LAZYLEN(injector_selection[adv_inj]) >= max_injector_mutations) + to_chat(usr,"Advanced injector mutation storage is full.") + return + + var/mut_source = params["source"] + var/search_flag = 0 + + switch(mut_source) + if("disk") + search_flag = SEARCH_DISKETTE + if("occupant") + search_flag = SEARCH_OCCUPANT + if("console") + search_flag = SEARCH_STORED + + if(!search_flag) + return + + var/bref = params["mutref"] + // We've already made sure we can modify the occupant, so this is safe to + // call + var/datum/mutation/human/HM = get_mut_by_ref(bref, search_flag) + + // GUARD CHECK - This should not be possible. Unexpected result + if(!HM) + return + + // We want to make sure we stick within the instability limit. + // We start with the instability of the mutation we're intending to add. + var/instability_total = HM.instability + + // We then add the instabilities of all other mutations in the injector, + // remembering to apply the Stabilizer chromosome modifiers + for(var/datum/mutation/human/I in injector_selection[adv_inj]) + instability_total += I.instability * GET_MUTATION_STABILIZER(I) + + // If this would take us over the max instability, we inform the user. + if(instability_total > max_injector_instability) + to_chat(usr,"Extra mutation would make the advanced injector too instable.") + return + + // If we've got here, all our checks are passed and we can successfully + // add the mutation to the advanced injector. + var/datum/mutation/human/A = new HM.type() + A.copy_mutation(HM) + injector_selection[adv_inj] += A + to_chat(usr,"Mutation successfully added to advanced injector.") + return + + // Deletes a mutation from an advanced injector + // ---------------------------------------------------------------------- // + // params["mutref"] - ATOM Ref of specific mutation to del from the injector + if("delete_injector_mut") + var/bref = params["mutref"] + + var/datum/mutation/human/HM = get_mut_by_ref(bref, SEARCH_ADV_INJ) + + // GUARD CHECK - This should not be possible. Unexpected result + if(!HM) + return + + // Check Advanced Injectors to find and remove the mutation + for(var/I in injector_selection) + if(injector_selection["[I]"].Remove(HM)) + qdel(HM) + return + + return + + // Sets a new tgui view state + // ---------------------------------------------------------------------- // + // params["id"] - Key for the state to set + // params[...] - Every other element is used to set state variables + if("set_view") + for (var/key in params) + if(key == "src") + continue + tgui_view_state[key] = params[key] + return TRUE + return FALSE + +/** + * Applies the enzyme buffer to the current scanner occupant + * + * Applies the type of a specific genetic makeup buffer to the current scanner + * occupant + * + * Arguments: + * * type - "ui"/"ue"/"mixed" - Which part of the enzyme buffer to apply + * * buffer_slot - Index of the enzyme buffer to apply + */ +/obj/machinery/computer/scan_consolenew/proc/apply_genetic_makeup(type, buffer_slot) + // Note - This proc is only called from code that has already performed the + // necessary occupant guard checks. If you call this code yourself, please + // apply can_modify_occupant() or equivalent checks first. + + // Pre-calc the rad increase since we'll be using it in all the possible + // operations + var/rad_increase = rand(100/(connected_scanner.damage_coeff ** 2),250/(connected_scanner.damage_coeff ** 2)) + + switch(type) + if("ui") + // GUARD CHECK - There's currently no way to save partial genetic data. + // However, if this is the case, we can't make a complete injector and + // this catches that edge case + if(!buffer_slot["UI"]) + to_chat(usr,"Genetic data corrupted, unable to apply genetic data.") + return FALSE + scanner_occupant.dna.uni_identity = buffer_slot["UI"] + scanner_occupant.updateappearance(mutations_overlay_update=1) + scanner_occupant.radiation += rad_increase + scanner_occupant.domutcheck() + return TRUE + if("ue") + // GUARD CHECK - There's currently no way to save partial genetic data. + // However, if this is the case, we can't make a complete injector and + // this catches that edge case + if(!buffer_slot["name"] || !buffer_slot["UE"] || !buffer_slot["blood_type"]) + to_chat(usr,"Genetic data corrupted, unable to apply genetic data.") + return FALSE + scanner_occupant.real_name = buffer_slot["name"] + scanner_occupant.name = buffer_slot["name"] + scanner_occupant.dna.unique_enzymes = buffer_slot["UE"] + scanner_occupant.dna.blood_type = buffer_slot["blood_type"] + scanner_occupant.radiation += rad_increase + scanner_occupant.domutcheck() + return TRUE + if("mixed") + // GUARD CHECK - There's currently no way to save partial genetic data. + // However, if this is the case, we can't make a complete injector and + // this catches that edge case + if(!buffer_slot["UI"] || !buffer_slot["name"] || !buffer_slot["UE"] || !buffer_slot["blood_type"]) + to_chat(usr,"Genetic data corrupted, unable to apply genetic data.") + return FALSE + scanner_occupant.dna.uni_identity = buffer_slot["UI"] + scanner_occupant.updateappearance(mutations_overlay_update=1) + scanner_occupant.real_name = buffer_slot["name"] + scanner_occupant.name = buffer_slot["name"] + scanner_occupant.dna.unique_enzymes = buffer_slot["UE"] + scanner_occupant.dna.blood_type = buffer_slot["blood_type"] + scanner_occupant.radiation += rad_increase + scanner_occupant.domutcheck() + return TRUE + + return FALSE +/** + * Checks if there is a connected DNA Scanner that is operational + */ +/obj/machinery/computer/scan_consolenew/proc/scanner_operational() + if(!connected_scanner) + return FALSE + + return (connected_scanner && connected_scanner.is_operational()) + +/** + * Checks if there is a valid DNA Scanner occupant for genetic modification + * + * Checks if there is a valid subject in the DNA Scanner that can be genetically + * modified. Will set the scanner occupant var as part of this check. + * Requires that the scanner can be operated and will return early if it can't + */ +/obj/machinery/computer/scan_consolenew/proc/can_modify_occupant() + // GUARD CHECK - We always want to perform the scanner operational check as + // part of checking if we can modify the occupant. + // We can never modify the occupant of a broken scanner. + if(!scanner_operational()) + return FALSE + + if(!connected_scanner.occupant) + return FALSE + + scanner_occupant = connected_scanner.occupant + + // Check validity of occupent for DNA Modification + // DNA Modification: + // requires DNA + // this DNA can not be bad + // is done via radiation bursts, so radiation immune carbons are not viable + // And the DNA Scanner itself must have a valid scan level + if(scanner_occupant.has_dna() && !HAS_TRAIT(scanner_occupant, TRAIT_RADIMMUNE) && !HAS_TRAIT(scanner_occupant, TRAIT_BADDNA) || (connected_scanner.scan_level == 3)) + return TRUE + + return FALSE + +/** + * Checks for adjacent DNA scanners and connects when it finds a viable one + * + * Seearches cardinal directions in order. Stops when it finds a viable DNA Scanner. + * Will connect to a broken scanner if no functional scanner is available. + * Links itself to the DNA Scanner to receive door open and close events. + */ +/obj/machinery/computer/scan_consolenew/proc/connect_to_scanner() + var/obj/machinery/dna_scannernew/test_scanner = null + var/obj/machinery/dna_scannernew/broken_scanner = null + + // Look in each cardinal direction and try and find a DNA Scanner + // If you find a DNA Scanner, check to see if it broken or working + // If it's working, set the current scanner and return early + // If it's not working, remember it anyway as a broken scanner + for(var/direction in GLOB.cardinals) + test_scanner = locate(/obj/machinery/dna_scannernew, get_step(src, direction)) + if(!isnull(test_scanner)) + if(test_scanner.is_operational()) + connected_scanner = test_scanner + connected_scanner.linked_console = src + return + else + broken_scanner = test_scanner + + // Ultimately, if we have a broken scanner, we'll attempt to connect to it as + // a fallback case, but the code above will prefer a working scanner + if(!isnull(broken_scanner)) + connected_scanner = broken_scanner + connected_scanner.linked_console = src + +/** + * Called by connected DNA Scanners when their doors close. + * + * Sets the new scanner occupant and completes delayed enzyme transfer if one + * is queued. + */ +/obj/machinery/computer/scan_consolenew/proc/on_scanner_close() + // Set the appropriate occupant now the scanner is closed + if(connected_scanner.occupant) + scanner_occupant = connected_scanner.occupant + else + scanner_occupant = null + + // If we have a delayed action - In this case the only delayed action is + // applying a genetic makeup buffer the next time the DNA Scanner is closed - + // we want to perform it. + // GUARD CHECK - Make sure we can modify the occupant, apply_genetic_makeup() + // assumes we've already done this. + if(delayed_action && can_modify_occupant()) + var/type = delayed_action["type"] + var/buffer_slot = delayed_action["buffer_slot"] + if(apply_genetic_makeup(type, buffer_slot)) + to_chat(connected_scanner.occupant, "[src] activates!") + delayed_action = null + +/** + * Called by connected DNA Scanners when their doors open. + * + * Clears enzyme pulse operations, stops processing and nulls the current + * scanner occupant var. + */ +/obj/machinery/computer/scan_consolenew/proc/on_scanner_open() + // If we had a radiation pulse action ongoing, we want to stop this. + // Imagine it being like a microwave stopping when you open the door. + rad_pulse_index = 0 + rad_pulse_timer = 0 + end_processing() + scanner_occupant = null + +/** + * Builds the genetic makeup list which will be sent to tgui interface. + */ +/obj/machinery/computer/scan_consolenew/proc/build_genetic_makeup_list() + // No code will ever null this list, we can safely Cut it. + tgui_genetic_makeup.Cut() + + for(var/i=1, i <= NUMBER_OF_BUFFERS, i++) + if(genetic_makeup_buffer[i]) + tgui_genetic_makeup["[i]"] = genetic_makeup_buffer[i].Copy() + else + tgui_genetic_makeup["[i]"] = null + +/** + * Builds the genetic makeup list which will be sent to tgui interface. + * + * Will iterate over the connected scanner occupant, DNA Console, inserted + * diskette and chromosomes and any advanced injectors, building the main data + * structures which get passed to the tgui interface. + */ +/obj/machinery/computer/scan_consolenew/proc/build_mutation_list(can_modify_occ) + // No code will ever null these lists. We can safely Cut them. + tgui_occupant_mutations.Cut() + tgui_diskette_mutations.Cut() + tgui_console_mutations.Cut() + tgui_console_chromosomes.Cut() + tgui_advinjector_mutations.Cut() + + // ------------------------------------------------------------------------ // + // GUARD CHECK - Can we genetically modify the occupant? This check will have + // previously included checks to make sure the DNA Scanner is still + // operational + if(can_modify_occ) + // ---------------------------------------------------------------------- // + // Start cataloguing all mutations that the occupant has by default + for(var/mutation_type in scanner_occupant.dna.mutation_index) + var/datum/mutation/human/HM = GET_INITIALIZED_MUTATION(mutation_type) + + var/list/mutation_data = list() + var/text_sequence = scanner_occupant.dna.mutation_index[mutation_type] + var/default_sequence = scanner_occupant.dna.default_mutation_genes[mutation_type] + var/discovered = (stored_research && (mutation_type in stored_research.discovered_mutations)) + + mutation_data["Alias"] = HM.alias + mutation_data["Sequence"] = text_sequence + mutation_data["DefaultSeq"] = default_sequence + mutation_data["Discovered"] = discovered + mutation_data["Source"] = "occupant" + + // We only want to pass this information along to the tgui interface if + // the mutation has been discovered. Prevents people being able to cheese + // or "hack" their way to figuring out what undiscovered mutations are + if(discovered) + mutation_data["Name"] = HM.name + mutation_data["Description"] = HM.desc + mutation_data["Instability"] = HM.instability * GET_MUTATION_STABILIZER(HM) + mutation_data["Quality"] = HM.quality + + // Assume the mutation is normal unless assigned otherwise. + var/mut_class = MUT_NORMAL + + // Check if the mutation is currently activated. If it is, we can add even + // MORE information to send to tgui. + var/datum/mutation/human/A = scanner_occupant.dna.get_mutation(mutation_type) + if(A) + mutation_data["Active"] = TRUE + mutation_data["Scrambled"] = A.scrambled + mutation_data["Class"] = A.class + mut_class = A.class + mutation_data["CanChromo"] = A.can_chromosome + mutation_data["ByondRef"] = REF(A) + mutation_data["Type"] = A.type + if(A.can_chromosome) + mutation_data["ValidChromos"] = jointext(A.valid_chrom_list, ", ") + mutation_data["AppliedChromo"] = A.chromosome_name + mutation_data["ValidStoredChromos"] = build_chrom_list(A) + else + mutation_data["Active"] = FALSE + mutation_data["Scrambled"] = FALSE + mutation_data["Class"] = MUT_NORMAL + + // Technically NONE of these mutations should be MUT_EXTRA but this will + // catch any weird edge cases + // Assign icons by priority - MUT_EXTRA will ALSO be discovered, so it + // has a higher priority for icon/image assignment + if (mut_class == MUT_EXTRA) + mutation_data["Image"] = "dna_extra.gif" + else if(discovered) + mutation_data["Image"] = "dna_discovered.gif" + else + mutation_data["Image"] = "dna_undiscovered.gif" + + tgui_occupant_mutations += list(mutation_data) + + // ---------------------------------------------------------------------- // + // Now get additional/"extra" mutations that they shouldn't have by default + for(var/datum/mutation/human/HM in scanner_occupant.dna.mutations) + // If it's in the mutation index array, we've already catalogued this + // mutation and can safely skip over it. It really shouldn't be, but this + // will catch any weird edge cases + if(HM.type in scanner_occupant.dna.mutation_index) + continue + + var/list/mutation_data = list() + var/text_sequence = GET_SEQUENCE(HM.type) + + // These will all be active mutations. They're added by injector and their + // sequencing code can't be changed. They can only be nullified, which + // completely removes them. + var/datum/mutation/human/A = GET_INITIALIZED_MUTATION(HM.type) + + mutation_data["Alias"] = A.alias + mutation_data["Sequence"] = text_sequence + mutation_data["Discovered"] = TRUE + mutation_data["Quality"] = HM.quality + mutation_data["Source"] = "occupant" + + mutation_data["Name"] = HM.name + mutation_data["Description"] = HM.desc + mutation_data["Instability"] = HM.instability * GET_MUTATION_STABILIZER(HM) + + mutation_data["Active"] = TRUE + mutation_data["Scrambled"] = HM.scrambled + mutation_data["Class"] = HM.class + mutation_data["CanChromo"] = HM.can_chromosome + mutation_data["ByondRef"] = REF(HM) + mutation_data["Type"] = HM.type + + if(HM.can_chromosome) + mutation_data["ValidChromos"] = jointext(HM.valid_chrom_list, ", ") + mutation_data["AppliedChromo"] = HM.chromosome_name + mutation_data["ValidStoredChromos"] = build_chrom_list(HM) + + // Nothing in this list should be undiscovered. Technically nothing + // should be anything but EXTRA. But we're just handling some edge cases. + if (HM.class == MUT_EXTRA) + mutation_data["Image"] = "dna_extra.gif" + else + mutation_data["Image"] = "dna_discovered.gif" + + tgui_occupant_mutations += list(mutation_data) + + // ------------------------------------------------------------------------ // + // Build the list of mutations stored within the DNA Console + for(var/datum/mutation/human/HM in stored_mutations) + var/list/mutation_data = list() + + var/datum/mutation/human/A = GET_INITIALIZED_MUTATION(HM.type) + + mutation_data["Alias"] = A.alias + mutation_data["Name"] = HM.name + mutation_data["Source"] = "console" + mutation_data["Active"] = TRUE + mutation_data["Description"] = HM.desc + mutation_data["Instability"] = HM.instability * GET_MUTATION_STABILIZER(HM) + mutation_data["ByondRef"] = REF(HM) + mutation_data["Type"] = HM.type + + mutation_data["CanChromo"] = HM.can_chromosome + if(HM.can_chromosome) + mutation_data["ValidChromos"] = jointext(HM.valid_chrom_list, ", ") + mutation_data["AppliedChromo"] = HM.chromosome_name + mutation_data["ValidStoredChromos"] = build_chrom_list(HM) + + tgui_console_mutations += list(mutation_data) + + // ------------------------------------------------------------------------ // + // Build the list of chromosomes stored within the DNA Console + var/chrom_index = 1 + for(var/obj/item/chromosome/CM in stored_chromosomes) + var/list/chromo_data = list() + + chromo_data["Name"] = CM.name + chromo_data["Description"] = CM.desc + chromo_data["Index"] = chrom_index + + tgui_console_chromosomes += list(chromo_data) + ++chrom_index + + // ------------------------------------------------------------------------ // + // Build the list of mutations stored on any inserted diskettes + if(diskette) + for(var/datum/mutation/human/HM in diskette.mutations) + var/list/mutation_data = list() + + var/datum/mutation/human/A = GET_INITIALIZED_MUTATION(HM.type) + + mutation_data["Alias"] = A.alias + mutation_data["Name"] = HM.name + mutation_data["Active"] = TRUE + //mutation_data["Sequence"] = GET_SEQUENCE(HM.type) + mutation_data["Source"] = "disk" + mutation_data["Description"] = HM.desc + mutation_data["Instability"] = HM.instability * GET_MUTATION_STABILIZER(HM) + mutation_data["ByondRef"] = REF(HM) + mutation_data["Type"] = HM.type + + mutation_data["CanChromo"] = HM.can_chromosome + if(HM.can_chromosome) + mutation_data["ValidChromos"] = jointext(HM.valid_chrom_list, ", ") + mutation_data["AppliedChromo"] = HM.chromosome_name + mutation_data["ValidStoredChromos"] = build_chrom_list(HM) + + tgui_diskette_mutations += list(mutation_data) + + // ------------------------------------------------------------------------ // + // Build the list of mutations stored within any Advanced Injectors + if(LAZYLEN(injector_selection)) + for(var/I in injector_selection) + var/list/mutations = list() + for(var/datum/mutation/human/HM in injector_selection[I]) + var/list/mutation_data = list() + + var/datum/mutation/human/A = GET_INITIALIZED_MUTATION(HM.type) + + mutation_data["Alias"] = A.alias + mutation_data["Name"] = HM.name + mutation_data["Active"] = TRUE + //mutation_data["Sequence"] = GET_SEQUENCE(HM.type) + mutation_data["Source"] = "injector" + mutation_data["Description"] = HM.desc + mutation_data["Instability"] = HM.instability * GET_MUTATION_STABILIZER(HM) + mutation_data["ByondRef"] = REF(HM) + mutation_data["Type"] = HM.type + + if(HM.can_chromosome) + mutation_data["AppliedChromo"] = HM.chromosome_name + + mutations += list(mutation_data) + tgui_advinjector_mutations += list(list( + "name" = "[I]", + "mutations" = mutations, + )) + +/** + * Takes any given chromosome and calculates chromosome compatibility + * + * Will iterate over the stored chromosomes in the DNA Console and will check + * whether it can be applied to the supplied mutation. Then returns a list of + * names of chromosomes that were compatible. + * + * Arguments: + * * mutation - The mutation to check chromosome compatibility with + */ +/obj/machinery/computer/scan_consolenew/proc/build_chrom_list(mutation) + var/list/chromosomes = list() + + for(var/obj/item/chromosome/CM in stored_chromosomes) + if(CM.can_apply(mutation)) + chromosomes += CM.name + + return chromosomes + +/** + * Checks whether a mutation alias has been discovered + * + * Checks whether a given mutation's genetic sequence has been completed and + * discovers it if appropriate + * + * Arguments: + * * alias - Alias of the mutation to check (ie "Mutation 51" or "Mutation 12") + */ +/obj/machinery/computer/scan_consolenew/proc/check_discovery(alias) + // Note - All code paths that call this have already done checks on the + // current occupant to prevent cheese and other abuses. If you call this + // proc please also do the following checks first: + // if(!can_modify_occupant()) + // return + // if(!(scanner_occupant == connected_scanner.occupant)) + // return + + // Turn the alias ("Mutation 1", "Mutation 35") into a mutation path + var/path = GET_MUTATION_TYPE_FROM_ALIAS(alias) + + // Check to see if this mutation is in the active mutation list. If it isn't, + // then the mutation isn't eligible for discovery. If it is but is scrambled, + // then the mutation isn't eligible for discovery. Finally, check if the + // mutation is in discovered mutations - If it isn't, add it to discover. + var/datum/mutation/human/M = scanner_occupant.dna.get_mutation(path) + if(!M) + return FALSE + if(M.scrambled) + return FALSE + if(stored_research && !(path in stored_research.discovered_mutations)) + var/datum/mutation/human/HM = GET_INITIALIZED_MUTATION(path) + stored_research.discovered_mutations += path + say("Successfully discovered [HM.name].") + return TRUE + + return FALSE + +/** + * Find a mutation from various storage locations via ATOM ref + * + * Takes an ATOM Ref and searches the appropriate mutation buffers and storage + * vars to try and find the associated mutation. + * + * Arguments: + * * ref - ATOM ref of the mutation to locate + * * target_flags - Flags for storage mediums to search, see #defines + */ +/obj/machinery/computer/scan_consolenew/proc/get_mut_by_ref(ref, target_flags) + var/mutation + + // Assume the occupant is valid and the check has been carried out before + // calling this proc with the relevant flags. + if(target_flags & SEARCH_OCCUPANT) + mutation = (locate(ref) in scanner_occupant.dna.mutations) + if(mutation) + return mutation + + if(target_flags & SEARCH_STORED) + mutation = (locate(ref) in stored_mutations) + if(mutation) + return mutation + + if(diskette && (target_flags & SEARCH_DISKETTE)) + mutation = (locate(ref) in diskette.mutations) + if(mutation) + return mutation + + if(injector_selection && (target_flags & SEARCH_ADV_INJ)) + for(var/I in injector_selection) + mutation = (locate(ref) in injector_selection["[I]"]) + if(mutation) + return mutation + + return null + +/** + * Creates a randomised accuracy value for the enzyme pulse functionality. + * + * Donor code from previous DNA Console iteration. + * + * Arguments: + * * position - Index of the intended enzyme element to pulse + * * radduration - Duration of intended radiation pulse + * * number_of_blocks - Number of individual data blocks in the pulsed enzyme + */ +/obj/machinery/computer/scan_consolenew/proc/randomize_radiation_accuracy(position, radduration, number_of_blocks) + var/val = round(gaussian(0, RADIATION_ACCURACY_MULTIPLIER/radduration) + position, 1) + return WRAP(val, 1, number_of_blocks+1) + +/** + * Scrambles an enzyme element value for the enzyme pulse functionality. + * + * Donor code from previous DNA Console iteration. + * + * Arguments: + * * input - Enzyme identity element to scramble, expected hex value + * * rs - Strength of radiation pulse, increases the range of possible outcomes + */ +/obj/machinery/computer/scan_consolenew/proc/scramble(input,rs) + var/length = length(input) + var/ran = gaussian(0, rs*RADIATION_STRENGTH_MULTIPLIER) + if(ran == 0) + ran = pick(-1,1) //hacky, statistically should almost never happen. 0-chance makes people mad though + else if(ran < 0) + ran = round(ran) //negative, so floor it + else + ran = -round(-ran) //positive, so ceiling it + return num2hex(WRAP(hex2num(input)+ran, 0, 16**length), length) + + /** + * Performs the enzyme radiation pulse. + * + * Donor code from previous DNA Console iteration. Called from process() when + * there is a radiation pulse in progress. Ends processing. + */ +/obj/machinery/computer/scan_consolenew/proc/rad_pulse() + // GUARD CHECK - Can we genetically modify the occupant? Includes scanner + // operational guard checks. + // If we can't, abort the procedure. + if(!can_modify_occupant()) + rad_pulse_index = 0 + end_processing() + return + + var/len = length_char(scanner_occupant.dna.uni_identity) + var/num = randomize_radiation_accuracy(rad_pulse_index, radduration + (connected_scanner.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 + var/hex = copytext_char(scanner_occupant.dna.uni_identity, num, num+1) + hex = scramble(hex, radstrength, radduration) + + scanner_occupant.dna.uni_identity = copytext_char(scanner_occupant.dna.uni_identity, 1, num) + hex + copytext_char(scanner_occupant.dna.uni_identity, num + 1) + scanner_occupant.updateappearance(mutations_overlay_update=1) + + rad_pulse_index = 0 + end_processing() + return + +/** + * Sets the default state for the tgui interface. + */ +/obj/machinery/computer/scan_consolenew/proc/set_default_state() + tgui_view_state["consoleMode"] = "storage" + tgui_view_state["storageMode"] = "console" + tgui_view_state["storageConsSubMode"] = "mutations" + tgui_view_state["storageDiskSubMode"] = "mutations" + + +#undef INJECTOR_TIMEOUT +#undef NUMBER_OF_BUFFERS +#undef SCRAMBLE_TIMEOUT +#undef JOKER_TIMEOUT +#undef JOKER_UPGRADE + +#undef RADIATION_STRENGTH_MAX +#undef RADIATION_STRENGTH_MULTIPLIER + +#undef RADIATION_DURATION_MAX +#undef RADIATION_ACCURACY_MULTIPLIER + +#undef RADIATION_IRRADIATION_MULTIPLIER + +#undef STATUS_TRANSFORMING + +#undef SEARCH_OCCUPANT +#undef SEARCH_STORED +#undef SEARCH_DISKETTE +#undef SEARCH_ADV_INJ diff --git a/code/game/machinery/computer/launchpad_control.dm b/code/game/machinery/computer/launchpad_control.dm index 26efe7c4ba0..ed5a031dba2 100644 --- a/code/game/machinery/computer/launchpad_control.dm +++ b/code/game/machinery/computer/launchpad_control.dm @@ -56,7 +56,7 @@ /obj/machinery/computer/launchpad/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, 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, "launchpad_console", name, ui_x, ui_y, master_ui, state) + ui = new(user, src, ui_key, "LaunchpadConsole", name, ui_x, ui_y, master_ui, state) ui.open() /obj/machinery/computer/launchpad/ui_data(mob/user) diff --git a/code/game/machinery/computer/prisoner/gulag_teleporter.dm b/code/game/machinery/computer/prisoner/gulag_teleporter.dm index 9da901cd20e..6cb6a1d34ed 100644 --- a/code/game/machinery/computer/prisoner/gulag_teleporter.dm +++ b/code/game/machinery/computer/prisoner/gulag_teleporter.dm @@ -25,7 +25,7 @@ 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, "gulag_console", name, ui_x, ui_y, master_ui, state) + ui = new(user, src, ui_key, "GulagTeleporterConsole", name, ui_x, ui_y, master_ui, state) ui.open() /obj/machinery/computer/prisoner/gulag_teleporter_computer/ui_data(mob/user) diff --git a/code/game/machinery/computer/robot.dm b/code/game/machinery/computer/robot.dm index 917d6f9f7af..115b827e54e 100644 --- a/code/game/machinery/computer/robot.dm +++ b/code/game/machinery/computer/robot.dm @@ -27,7 +27,7 @@ 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, "robotics_control_console", name, ui_x, ui_y, master_ui, state) + ui = new(user, src, ui_key, "RoboticsControlConsole", name, ui_x, ui_y, master_ui, state) ui.open() /obj/machinery/computer/robotics/ui_data(mob/user) diff --git a/code/game/machinery/computer/station_alert.dm b/code/game/machinery/computer/station_alert.dm index 1cab2bd0456..ab42b16d8ae 100644 --- a/code/game/machinery/computer/station_alert.dm +++ b/code/game/machinery/computer/station_alert.dm @@ -22,7 +22,7 @@ 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, "station_alert", name, ui_x, ui_y, master_ui, state) + ui = new(user, src, ui_key, "StationAlertConsole", name, ui_x, ui_y, master_ui, state) ui.open() /obj/machinery/computer/station_alert/ui_data(mob/user) diff --git a/code/game/machinery/computer/teleporter.dm b/code/game/machinery/computer/teleporter.dm index 4028a1347aa..1e85a6d76f5 100644 --- a/code/game/machinery/computer/teleporter.dm +++ b/code/game/machinery/computer/teleporter.dm @@ -37,7 +37,7 @@ 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 = new(user, src, ui_key, "Teleporter", name, ui_x, ui_y, master_ui, state) ui.open() /obj/machinery/computer/teleporter/ui_data(mob/user) diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index 8cb7502d6cb..288fdfab112 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -1323,7 +1323,7 @@ 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, "ai_airlock", name, 500, 390, master_ui, state) + ui = new(user, src, ui_key, "AiAirlock", name, 500, 390, master_ui, state) ui.open() return TRUE diff --git a/code/game/machinery/doors/airlock_electronics.dm b/code/game/machinery/doors/airlock_electronics.dm index e1b826ffeee..6d4e055bbd5 100644 --- a/code/game/machinery/doors/airlock_electronics.dm +++ b/code/game/machinery/doors/airlock_electronics.dm @@ -15,7 +15,7 @@ datum/tgui/master_ui = null, datum/ui_state/state = GLOB.hands_state) ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if(!ui) - ui = new(user, src, ui_key, "airlock_electronics", name, 420, 485, master_ui, state) + ui = new(user, src, ui_key, "AirlockElectronics", name, 420, 485, master_ui, state) ui.open() /obj/item/electronics/airlock/ui_static_data(mob/user) diff --git a/code/game/machinery/doors/brigdoors.dm b/code/game/machinery/doors/brigdoors.dm index 4e5fa5f48ae..315ef79b289 100644 --- a/code/game/machinery/doors/brigdoors.dm +++ b/code/game/machinery/doors/brigdoors.dm @@ -146,7 +146,7 @@ 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, "brig_timer", name, ui_x, ui_y, master_ui, state) + ui = new(user, src, ui_key, "BrigTimer", name, ui_x, ui_y, master_ui, state) ui.open() //icon update function diff --git a/code/game/machinery/electrolyzer.dm b/code/game/machinery/electrolyzer.dm new file mode 100644 index 00000000000..ad2242c9ead --- /dev/null +++ b/code/game/machinery/electrolyzer.dm @@ -0,0 +1,182 @@ +#define ELECTROLYZER_MODE_STANDBY "standby" +#define ELECTROLYZER_MODE_WORKING "working" + +/obj/machinery/electrolyzer + anchored = FALSE + density = TRUE + interaction_flags_machine = INTERACT_MACHINE_ALLOW_SILICON | INTERACT_MACHINE_OPEN + icon = 'icons/obj/atmos.dmi' + icon_state = "electrolyzer-off" + name = "space electrolyzer" + desc = "Thanks to the fast and dynamic response of our electrolyzers, on-site hydrogen production is guaranteed. Warranty void if used by clowns" + max_integrity = 250 + armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 100, "rad" = 100, "fire" = 80, "acid" = 10) + circuit = /obj/item/circuitboard/machine/electrolyzer + ui_x = 400 + ui_y = 305 + + ///used to check if there is a cell in the machine + var/obj/item/stock_parts/cell/cell + ///check if the machine is on or off + var/on = FALSE + ///check what mode the machine should be (WORKING, STANDBY) + var/mode = ELECTROLYZER_MODE_STANDBY + ///Increase the amount of moles worked on, changed by upgrading the laser tier + var/workingPower = 1 + ///Decrease the amount of power usage, changed by upgrading the capacitor tier + var/efficiency = 0.5 + +/obj/machinery/electrolyzer/get_cell() + return cell + +/obj/machinery/electrolyzer/Initialize() + . = ..() + if(ispath(cell)) + cell = new cell(src) + update_icon() + +/obj/machinery/electrolyzer/Destroy() + if(cell) + QDEL_NULL(cell) + return ..() + +/obj/machinery/electrolyzer/on_deconstruction() + if(cell) + component_parts += cell + cell = null + return ..() + +/obj/machinery/electrolyzer/examine(mob/user) + . = ..() + . += "\The [src] is [on ? "on" : "off"], and the hatch is [panel_open ? "open" : "closed"]." + + if(cell) + . += "The charge meter reads [cell ? round(cell.percent(), 1) : 0]%." + else + . += "There is no power cell installed." + +/obj/machinery/electrolyzer/update_icon_state() + icon_state = "electrolyzer-[on ? "[mode]" : "off"]" + +/obj/machinery/electrolyzer/update_overlays() + . = ..() + + if(panel_open) + . += "electrolyzer-open" + +/obj/machinery/electrolyzer/process() + if(!is_operational() && on) + on = FALSE + if(!on) + return PROCESS_KILL + + if(!cell || cell.charge <= 0) + on = FALSE + update_icon() + return PROCESS_KILL + + var/turf/L = loc + if(!istype(L)) + if(mode != ELECTROLYZER_MODE_STANDBY) + mode = ELECTROLYZER_MODE_STANDBY + update_icon() + return + + var/newMode = on ? ELECTROLYZER_MODE_WORKING : ELECTROLYZER_MODE_STANDBY //change the mode to working if the machine is on + + if(mode != newMode) //check if the mode is set correctly + mode = newMode + update_icon() + + if(mode == ELECTROLYZER_MODE_STANDBY) + return + + var/datum/gas_mixture/env = L.return_air() //get air from the turf + var/datum/gas_mixture/removed = env.remove(0.1 * env.total_moles()) + removed.assert_gases(/datum/gas/water_vapor, /datum/gas/oxygen, /datum/gas/hydrogen) + var/proportion = min(removed.gases[/datum/gas/water_vapor][MOLES], (3 * workingPower))//Works to max 12 moles at a time. + removed.gases[/datum/gas/water_vapor][MOLES] -= proportion * 2 * workingPower + removed.gases[/datum/gas/oxygen][MOLES] += proportion * workingPower + removed.gases[/datum/gas/hydrogen][MOLES] += proportion * 2 * workingPower + env.merge(removed) //put back the new gases in the turf + air_update_turf() + cell.use((5 * proportion * workingPower) / (efficiency + workingPower)) + +/obj/machinery/electrolyzer/RefreshParts() + var/laser = 0 + var/cap = 0 + for(var/obj/item/stock_parts/micro_laser/M in component_parts) + laser += M.rating + for(var/obj/item/stock_parts/capacitor/M in component_parts) + cap += M.rating + + workingPower = laser //used in the amount of moles processed + + efficiency = (cap + 1) * 0.5 //used in the amount of charge in power cell uses + +/obj/machinery/electrolyzer/attackby(obj/item/I, mob/user, params) + add_fingerprint(user) + if(default_unfasten_wrench(user, I)) + return + if(istype(I, /obj/item/stock_parts/cell)) + if(!panel_open) + to_chat(user, "The hatch must be open to insert a power cell!") + return + if(cell) + to_chat(user, "There is already a power cell inside!") + return + if(!user.transferItemToLoc(I, src)) + return + cell = I + I.add_fingerprint(usr) + + user.visible_message("\The [user] inserts a power cell into \the [src].", "You insert the power cell into \the [src].") + SStgui.update_uis(src) + + return + if(I.tool_behaviour == TOOL_SCREWDRIVER) + panel_open = !panel_open + user.visible_message("\The [user] [panel_open ? "opens" : "closes"] the hatch on \the [src].", "You [panel_open ? "open" : "close"] the hatch on \the [src].") + update_icon() + return + if(default_deconstruction_crowbar(I)) + return + return ..() + +/obj/machinery/electrolyzer/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \ + datum/tgui/master_ui = null, datum/ui_state/state = GLOB.physical_state) + ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) + if(!ui) + ui = new(user, src, ui_key, "Electrolyzer", name, ui_x, ui_y, master_ui, state) + ui.open() + +/obj/machinery/electrolyzer/ui_data() + var/list/data = list() + data["open"] = panel_open + data["on"] = on + data["hasPowercell"] = !isnull(cell) + if(cell) + data["powerLevel"] = round(cell.percent(), 1) + return data + +/obj/machinery/electrolyzer/ui_act(action, params) + . = ..() + if(.) + return + switch(action) + if("power") + on = !on + mode = ELECTROLYZER_MODE_STANDBY + usr.visible_message("[usr] switches [on ? "on" : "off"] \the [src].", "You switch [on ? "on" : "off"] \the [src].") + update_icon() + if (on) + START_PROCESSING(SSmachines, src) + . = TRUE + if("eject") + if(panel_open && cell) + cell.forceMove(drop_location()) + cell = null + . = TRUE + +#undef ELECTROLYZER_MODE_STANDBY +#undef ELECTROLYZER_MODE_WORKING diff --git a/code/game/machinery/gulag_item_reclaimer.dm b/code/game/machinery/gulag_item_reclaimer.dm index c872fa661a7..98f9a304f72 100644 --- a/code/game/machinery/gulag_item_reclaimer.dm +++ b/code/game/machinery/gulag_item_reclaimer.dm @@ -31,7 +31,7 @@ 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, "gulag_item_reclaimer", name, ui_x, ui_y, master_ui, state) + ui = new(user, src, ui_key, "GulagItemReclaimer", name, ui_x, ui_y, master_ui, state) ui.open() /obj/machinery/gulag_item_reclaimer/ui_data(mob/user) diff --git a/code/game/machinery/hypnochair.dm b/code/game/machinery/hypnochair.dm index ff8f1698d65..670d8f758c3 100644 --- a/code/game/machinery/hypnochair.dm +++ b/code/game/machinery/hypnochair.dm @@ -37,7 +37,7 @@ /obj/machinery/hypnochair/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.notcontained_state) ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if(!ui) - ui = new(user, src, ui_key, "hypnochair", name, ui_x, ui_y, master_ui, state) + ui = new(user, src, ui_key, "HypnoChair", name, ui_x, ui_y, master_ui, state) ui.open() /obj/machinery/hypnochair/ui_data() diff --git a/code/game/machinery/launch_pad.dm b/code/game/machinery/launch_pad.dm index 265832a6a74..23e1b9dcc1c 100644 --- a/code/game/machinery/launch_pad.dm +++ b/code/game/machinery/launch_pad.dm @@ -324,8 +324,7 @@ /obj/item/launchpad_remote/ui_interact(mob/user, ui_key = "launchpad_remote", 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, "launchpad_remote", "Briefcase Launchpad Remote", 300, 240, master_ui, state) //width, height - ui.set_style("syndicate") + ui = new(user, src, ui_key, "LaunchpadRemote", "Briefcase Launchpad Remote", 300, 240, master_ui, state) //width, height ui.open() ui.set_autoupdate(TRUE) diff --git a/code/game/machinery/medical_kiosk.dm b/code/game/machinery/medical_kiosk.dm index b71b7e59572..ba33ab23ad5 100644 --- a/code/game/machinery/medical_kiosk.dm +++ b/code/game/machinery/medical_kiosk.dm @@ -172,7 +172,7 @@ ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if(!ui) - ui = new(user, src, ui_key, "medical_kiosk", name, 625, 550, master_ui, state) + ui = new(user, src, ui_key, "MedicalKiosk", name, 575, 420, master_ui, state) ui.open() icon_state = "kiosk_off" RefreshParts() @@ -236,29 +236,18 @@ trauma_text += trauma_desc trauma_status = "Cerebral traumas detected: patient appears to be suffering from [english_list(trauma_text)]." - var/chem_status = FALSE - var/chemical_list= list() - var/overdose_status = FALSE + var/chemical_list = list() var/overdose_list = list() - var/addict_status = FALSE var/addict_list = list() var/hallucination_status = "Patient is not hallucinating." - for(var/datum/reagent/R in altPatient.reagents.reagent_list) - if(R.overdosed) - overdose_status = TRUE - if(altPatient.reagents.reagent_list.len) //Chemical Analysis details. - chem_status = TRUE for(var/datum/reagent/R in altPatient.reagents.reagent_list) chemical_list += list(list("name" = R.name, "volume" = round(R.volume, 0.01))) if(R.overdosed == 1) overdose_list += list(list("name" = R.name)) - else - chemical_list = "Patient contains no reagents" if(altPatient.reagents.addiction_list.len) - addict_status = TRUE for(var/datum/reagent/R in altPatient.reagents.addiction_list) addict_list += list(list("name" = R.name)) if (altPatient.hallucinating()) @@ -296,7 +285,6 @@ else if (user.hallucinating()) chaos_modifier = 0.3 - data["kiosk_cost"] = active_price + (chaos_modifier * (rand(1,25))) data["patient_name"] = patient_name data["patient_health"] = round(((total_health - (chaos_modifier * (rand(1,50)))) / max_health) * 100, 0.001) @@ -316,18 +304,15 @@ data["bleed_status"] = bleed_status data["blood_levels"] = blood_percent - (chaos_modifier * (rand(1,35))) data["blood_status"] = blood_status - data["are_chems_present"] = chem_status ? TRUE : FALSE data["chemical_list"] = chemical_list - data["are_overdoses_present"] = overdose_status ? TRUE : FALSE - data["overdose_status"] = overdose_list - data["are_addictions_present"] = addict_status ? TRUE : FALSE - data["addiction_status"] = addict_list + data["overdose_list"] = overdose_list + data["addict_list"] = addict_list data["hallucinating_status"] = hallucination_status - data["active_status_1"] = scan_active_1 ? FALSE : TRUE //General Scan Check - data["active_status_2"] = scan_active_2 ? FALSE : TRUE //Symptom Scan Check - data["active_status_3"] = scan_active_3 ? FALSE : TRUE //Radio-Neuro Scan Check - data["active_status_4"] = scan_active_4 ? FALSE : TRUE //Radio-Neuro Scan Check + data["active_status_1"] = scan_active_1 // General Scan Check + data["active_status_2"] = scan_active_2 // Symptom Scan Check + data["active_status_3"] = scan_active_3 // Radio-Neuro Scan Check + data["active_status_4"] = scan_active_4 // Radio-Neuro Scan Check return data /obj/machinery/medical_kiosk/ui_act(action,active) diff --git a/code/game/machinery/roulette_machine.dm b/code/game/machinery/roulette_machine.dm index 6407b0e8b62..76e502db17c 100644 --- a/code/game/machinery/roulette_machine.dm +++ b/code/game/machinery/roulette_machine.dm @@ -65,7 +65,7 @@ return ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if(!ui) - ui = new(user, src, ui_key, "roulette", name, ui_x, ui_y, master_ui, state) + ui = new(user, src, ui_key, "Roulette", name, ui_x, ui_y, master_ui, state) ui.open() /obj/machinery/roulette/ui_data(mob/user) diff --git a/code/game/machinery/scan_gate.dm b/code/game/machinery/scan_gate.dm index 8eaff2478d4..334557a814a 100644 --- a/code/game/machinery/scan_gate.dm +++ b/code/game/machinery/scan_gate.dm @@ -184,7 +184,7 @@ 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, "scanner_gate", name, ui_x, ui_y, master_ui, state) + ui = new(user, src, ui_key, "ScannerGate", name, ui_x, ui_y, master_ui, state) ui.open() /obj/machinery/scanner_gate/ui_data() diff --git a/code/game/machinery/spaceheater.dm b/code/game/machinery/spaceheater.dm index 888e627482e..b9632c9a6a6 100644 --- a/code/game/machinery/spaceheater.dm +++ b/code/game/machinery/spaceheater.dm @@ -174,7 +174,7 @@ datum/tgui/master_ui = null, datum/ui_state/state = GLOB.physical_state) ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if(!ui) - ui = new(user, src, ui_key, "space_heater", name, ui_x, ui_y, master_ui, state) + ui = new(user, src, ui_key, "SpaceHeater", name, ui_x, ui_y, master_ui, state) ui.open() /obj/machinery/space_heater/ui_data() diff --git a/code/game/machinery/stasis.dm b/code/game/machinery/stasis.dm index da8111f5714..102466666fb 100644 --- a/code/game/machinery/stasis.dm +++ b/code/game/machinery/stasis.dm @@ -21,7 +21,7 @@ /obj/machinery/stasis/Initialize() . = ..() - for(var/direction in GLOB.cardinals) + for(var/direction in GLOB.alldirs) op_computer = locate(/obj/machinery/computer/operating, get_step(src, direction)) if(op_computer) op_computer.sbed = src diff --git a/code/game/machinery/suit_storage_unit.dm b/code/game/machinery/suit_storage_unit.dm index 9ab6c8ec855..c6e97bc2b64 100644 --- a/code/game/machinery/suit_storage_unit.dm +++ b/code/game/machinery/suit_storage_unit.dm @@ -438,7 +438,7 @@ datum/tgui/master_ui = null, datum/ui_state/state = GLOB.notcontained_state) ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if(!ui) - ui = new(user, src, ui_key, "suit_storage_unit", name, ui_x, ui_y, master_ui, state) + ui = new(user, src, ui_key, "SuitStorageUnit", name, ui_x, ui_y, master_ui, state) ui.open() /obj/machinery/suit_storage_unit/ui_data() diff --git a/code/game/mecha/mech_bay.dm b/code/game/mecha/mech_bay.dm index b9d3912852c..36f17f281c1 100644 --- a/code/game/mecha/mech_bay.dm +++ b/code/game/mecha/mech_bay.dm @@ -94,7 +94,7 @@ /obj/machinery/computer/mech_bay_power_console/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, "mech_bay_power_console", "Mech Bay Power Control Console", ui_x, ui_y, master_ui, state) + ui = new(user, src, ui_key, "MechBayPowerConsole", "Mech Bay Power Control Console", ui_x, ui_y, master_ui, state) ui.open() /obj/machinery/computer/mech_bay_power_console/ui_act(action, params) diff --git a/code/game/mecha/mecha_control_console.dm b/code/game/mecha/mecha_control_console.dm index 3a9cb26f50e..9c52797129e 100644 --- a/code/game/mecha/mecha_control_console.dm +++ b/code/game/mecha/mecha_control_console.dm @@ -12,7 +12,7 @@ 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, "exosuit_control_console", name, ui_x, ui_y, master_ui, state) + ui = new(user, src, ui_key, "ExosuitControlConsole", name, ui_x, ui_y, master_ui, state) ui.open() /obj/machinery/computer/mecha/ui_data(mob/user) diff --git a/code/game/objects/items/RPD.dm b/code/game/objects/items/RPD.dm index de7f7984847..f72a8189e63 100644 --- a/code/game/objects/items/RPD.dm +++ b/code/game/objects/items/RPD.dm @@ -248,7 +248,7 @@ GLOBAL_LIST_INIT(transit_tube_recipes, list( var/datum/asset/assets = get_asset_datum(/datum/asset/spritesheet/pipes) assets.send(user) - ui = new(user, src, ui_key, "rpd", name, 425, 515, master_ui, state) + ui = new(user, src, ui_key, "RapidPipeDispenser", name, 425, 515, master_ui, state) ui.open() /obj/item/pipe_dispenser/ui_data(mob/user) diff --git a/code/game/objects/items/airlock_painter.dm b/code/game/objects/items/airlock_painter.dm index 75f36289907..94fd0a910dd 100644 --- a/code/game/objects/items/airlock_painter.dm +++ b/code/game/objects/items/airlock_painter.dm @@ -200,7 +200,7 @@ /obj/item/airlock_painter/decal/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, 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, "decal_painter", name, 500, 400, master_ui, state) + ui = new(user, src, ui_key, "DecalPainter", name, 500, 400, master_ui, state) ui.open() /obj/item/airlock_painter/decal/ui_data(mob/user) diff --git a/code/game/objects/items/cards_ids.dm b/code/game/objects/items/cards_ids.dm index a1e9542e97e..f2bf9c12f9a 100644 --- a/code/game/objects/items/cards_ids.dm +++ b/code/game/objects/items/cards_ids.dm @@ -485,7 +485,7 @@ update_label() registered_name = "Syndicate" assignment = "Syndicate Operative" icon_state = "syndie" - access = list(ACCESS_SYNDICATE) + access = list(ACCESS_SYNDICATE, ACCESS_ROBOTICS) uses_overlays = FALSE /obj/item/card/id/syndicate_command/captain_id @@ -495,7 +495,7 @@ update_label() registered_name = "Syndicate" assignment = "Syndicate Ship Captain" icon_state = "syndie" - access = list(ACCESS_SYNDICATE) + access = list(ACCESS_SYNDICATE, ACCESS_ROBOTICS) uses_overlays = FALSE /obj/item/card/id/captains_spare diff --git a/code/game/objects/items/circuitboards/machine_circuitboards.dm b/code/game/objects/items/circuitboards/machine_circuitboards.dm index 5819474f5a8..db1bd6e3f1f 100644 --- a/code/game/objects/items/circuitboards/machine_circuitboards.dm +++ b/code/game/objects/items/circuitboards/machine_circuitboards.dm @@ -498,6 +498,21 @@ /obj/item/stack/cable_coil = 3) needs_anchored = FALSE +/obj/item/circuitboard/machine/electrolyzer + name = "Electrolyzer (Machine Board)" + icon_state = "generic" + build_path = /obj/machinery/electrolyzer + req_components = list( + /obj/item/stock_parts/micro_laser = 2, + /obj/item/stock_parts/capacitor = 1, + /obj/item/stack/cable_coil = 3, + /obj/item/stack/sheet/glass = 1, + /obj/item/stack/sheet/mineral/gold = 1, + /obj/item/stack/sheet/mineral/silver = 1) + + needs_anchored = FALSE + + /obj/item/circuitboard/machine/techfab name = "\improper Techfab (Machine Board)" icon_state = "generic" diff --git a/code/game/objects/items/crayons.dm b/code/game/objects/items/crayons.dm index 1d8dafd4ff9..8fab41ecf24 100644 --- a/code/game/objects/items/crayons.dm +++ b/code/game/objects/items/crayons.dm @@ -149,7 +149,7 @@ ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if(!ui) - ui = new(user, src, ui_key, "crayon", name, 600, 600, + ui = new(user, src, ui_key, "Crayon", name, 600, 600, master_ui, state) ui.open() diff --git a/code/game/objects/items/devices/aicard.dm b/code/game/objects/items/devices/aicard.dm index 5500bcd1ab1..ee9730d8601 100644 --- a/code/game/objects/items/devices/aicard.dm +++ b/code/game/objects/items/devices/aicard.dm @@ -58,7 +58,7 @@ datum/tgui/master_ui = null, datum/ui_state/state = GLOB.hands_state) ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if(!ui) - ui = new(user, src, ui_key, "intellicard", name, 500, 500, master_ui, state) + ui = new(user, src, ui_key, "Intellicard", name, 500, 500, master_ui, state) ui.open() /obj/item/aicard/ui_data() diff --git a/code/game/objects/items/devices/radio/electropack.dm b/code/game/objects/items/devices/radio/electropack.dm index de4623298cb..f574aaea16b 100644 --- a/code/game/objects/items/devices/radio/electropack.dm +++ b/code/game/objects/items/devices/radio/electropack.dm @@ -89,7 +89,7 @@ datum/tgui/master_ui = null, datum/ui_state/state = GLOB.hands_state) ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if(!ui) - ui = new(user, src, ui_key, "electropack", name, ui_x, ui_y, master_ui, state) + ui = new(user, src, ui_key, "Electropack", name, ui_x, ui_y, master_ui, state) ui.open() /obj/item/electropack/ui_data(mob/user) diff --git a/code/game/objects/items/devices/radio/radio.dm b/code/game/objects/items/devices/radio/radio.dm index 14801f6f496..ea218cd5146 100644 --- a/code/game/objects/items/devices/radio/radio.dm +++ b/code/game/objects/items/devices/radio/radio.dm @@ -118,7 +118,7 @@ ui_height += 6 + channels.len * 21 else ui_height += 24 - ui = new(user, src, ui_key, "radio", name, ui_width, ui_height, master_ui, state) + ui = new(user, src, ui_key, "Radio", name, ui_width, ui_height, master_ui, state) ui.open() /obj/item/radio/ui_data(mob/user) diff --git a/code/game/objects/items/devices/traitordevices.dm b/code/game/objects/items/devices/traitordevices.dm index 1be9024bcb2..d16cb5aa181 100644 --- a/code/game/objects/items/devices/traitordevices.dm +++ b/code/game/objects/items/devices/traitordevices.dm @@ -116,7 +116,7 @@ effective or pretty fucking useless. datum/tgui/master_ui = null, datum/ui_state/state = GLOB.hands_state) ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if(!ui) - ui = new(user, src, ui_key, "radioactive_microlaser", "Radioactive Microlaser", ui_x, ui_y, master_ui, state) + ui = new(user, src, ui_key, "RadioactiveMicrolaser", "Radioactive Microlaser", ui_x, ui_y, master_ui, state) ui.open() /obj/item/healthanalyzer/rad_laser/ui_data(mob/user) diff --git a/code/game/objects/items/devices/transfer_valve.dm b/code/game/objects/items/devices/transfer_valve.dm index 6258d0d41c6..a800a9e49fb 100644 --- a/code/game/objects/items/devices/transfer_valve.dm +++ b/code/game/objects/items/devices/transfer_valve.dm @@ -197,7 +197,7 @@ datum/tgui/master_ui = null, datum/ui_state/state = GLOB.hands_state) ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if(!ui) - ui = new(user, src, ui_key, "transfer_valve", name, ui_x, ui_y, master_ui, state) + ui = new(user, src, ui_key, "TransferValve", name, ui_x, ui_y, master_ui, state) ui.open() /obj/item/transfer_valve/ui_data(mob/user) diff --git a/code/game/objects/items/eightball.dm b/code/game/objects/items/eightball.dm index 210c0846307..775fdd04468 100644 --- a/code/game/objects/items/eightball.dm +++ b/code/game/objects/items/eightball.dm @@ -196,7 +196,7 @@ ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if(!ui) - ui = new(user, src, ui_key, "eightball", name, 400, 600, master_ui, state) + ui = new(user, src, ui_key, "EightBallVote", name, 400, 600, master_ui, state) ui.open() /obj/item/toy/eightball/haunted/ui_data(mob/user) diff --git a/code/game/objects/items/robot/robot_items.dm b/code/game/objects/items/robot/robot_items.dm index ca938d6bf77..66ff1004b36 100644 --- a/code/game/objects/items/robot/robot_items.dm +++ b/code/game/objects/items/robot/robot_items.dm @@ -632,6 +632,10 @@ . = ..() host = loc +/obj/item/borg/projectile_dampen/cyborg_unequip(mob/user) + deactivate_field() + . = ..() + /obj/item/borg/projectile_dampen/on_mob_death() deactivate_field() . = ..() diff --git a/code/game/objects/items/stacks/ammonia_crystals.dm b/code/game/objects/items/stacks/ammonia_crystals.dm new file mode 100644 index 00000000000..ff26c60b73f --- /dev/null +++ b/code/game/objects/items/stacks/ammonia_crystals.dm @@ -0,0 +1,9 @@ +/obj/item/stack/ammonia_crystals + name = "Ammonia Crystals" + singular_name = "Ammonia Crystal" + icon = 'icons/obj/stack_objects.dmi' + icon_state = "ammonia_crystal" + w_class = WEIGHT_CLASS_TINY + resistance_flags = FLAMMABLE + max_amount = 50 + grind_results = list(/datum/reagent/ammonia = 10) diff --git a/code/game/objects/items/stacks/sheets/mineral.dm b/code/game/objects/items/stacks/sheets/mineral.dm index 83fc337a3a4..8f2a23df9e0 100644 --- a/code/game/objects/items/stacks/sheets/mineral.dm +++ b/code/game/objects/items/stacks/sheets/mineral.dm @@ -302,6 +302,7 @@ GLOBAL_LIST_INIT(bananium_recipes, list ( \ GLOBAL_LIST_INIT(titanium_recipes, list ( \ new/datum/stack_recipe("titanium tile", /obj/item/stack/tile/mineral/titanium, 1, 4, 20), \ + new/datum/stack_recipe("shuttle seat", /obj/structure/chair/comfy/shuttle, 2, one_per_turf = TRUE, on_floor = TRUE), \ )) /obj/item/stack/sheet/mineral/titanium/get_main_recipes() @@ -476,3 +477,23 @@ GLOBAL_LIST_INIT(abductor_recipes, list ( \ /obj/item/stack/sheet/mineral/coal/ten amount = 10 + +//Metal Hydrogen +GLOBAL_LIST_INIT(metalhydrogen_recipes, list( + new /datum/stack_recipe("incomplete servant golem shell", /obj/item/golem_shell/servant, req_amount=20, res_amount=1), + )) + +/obj/item/stack/sheet/mineral/metal_hydrogen + name = "Metal Hydrogen" + icon_state = "sheet-metalhydrogen" + item_state = "sheet-metalhydrogen" + singular_name = "Metal Hydrogen sheet" + w_class = WEIGHT_CLASS_NORMAL + resistance_flags = FIRE_PROOF | LAVA_PROOF | ACID_PROOF | INDESTRUCTIBLE + point_value = 100 + custom_materials = list(/datum/material/metalhydrogen=MINERAL_MATERIAL_AMOUNT) + merge_type = /obj/item/stack/sheet/mineral/metal_hydrogen + +/obj/item/stack/sheet/mineral/metal_hydrogen/get_main_recipes() + . = ..() + . += GLOB.metalhydrogen_recipes diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm index a1be6255d58..92863243f6b 100644 --- a/code/game/objects/items/stacks/sheets/sheet_types.dm +++ b/code/game/objects/items/stacks/sheets/sheet_types.dm @@ -40,7 +40,7 @@ GLOBAL_LIST_INIT(metal_recipes, list ( \ new/datum/stack_recipe("rack parts", /obj/item/rack_parts), \ new/datum/stack_recipe("closet", /obj/structure/closet, 2, time = 15, one_per_turf = TRUE, on_floor = TRUE), \ null, \ - new/datum/stack_recipe("canister", /obj/machinery/portable_atmospherics/canister, 10, time = 15, one_per_turf = TRUE, on_floor = TRUE), \ + new/datum/stack_recipe("canister frame", /obj/structure/canister_frame/machine/frame_tier_0, 5, time = 8, one_per_turf = TRUE, on_floor = TRUE), \ null, \ new/datum/stack_recipe("floor tile", /obj/item/stack/tile/plasteel, 1, 4, 20), \ new/datum/stack_recipe("metal rod", /obj/item/stack/rods, 1, 2, 60), \ diff --git a/code/game/objects/items/storage/bags.dm b/code/game/objects/items/storage/bags.dm index a75b7205df4..e6e8f5977d9 100644 --- a/code/game/objects/items/storage/bags.dm +++ b/code/game/objects/items/storage/bags.dm @@ -200,6 +200,7 @@ /obj/item/seeds, /obj/item/grown, /obj/item/reagent_containers/honeycomb, + /obj/item/graft, )) //////// diff --git a/code/game/objects/items/storage/belt.dm b/code/game/objects/items/storage/belt.dm index d2dd01fa76a..18265244f6b 100644 --- a/code/game/objects/items/storage/belt.dm +++ b/code/game/objects/items/storage/belt.dm @@ -672,3 +672,30 @@ /obj/item/storage/belt/sabre/PopulateContents() new /obj/item/melee/sabre(src) update_icon() + +/obj/item/storage/belt/plant + name = "botanical belt" + desc = "A belt used to hold most hydroponics supplies. Suprisingly, not green." + icon_state = "plantbelt" + item_state = "plantbelt" + content_overlays = TRUE + +/obj/item/storage/belt/plant/ComponentInitialize() + . = ..() + var/datum/component/storage/STR = GetComponent(/datum/component/storage) + STR.max_items = 6 + STR.max_w_class = WEIGHT_CLASS_NORMAL + STR.set_holdable(list( + /obj/item/reagent_containers/spray/plantbgone, + /obj/item/plant_analyzer, + /obj/item/seeds, + /obj/item/reagent_containers/glass/bottle, + /obj/item/reagent_containers/glass/beaker, + /obj/item/cultivator, + /obj/item/reagent_containers/spray/pestspray, + /obj/item/hatchet, + /obj/item/graft, + /obj/item/secateurs, + /obj/item/geneshears, + /obj/item/shovel/spade + )) diff --git a/code/game/objects/items/storage/boxes.dm b/code/game/objects/items/storage/boxes.dm index 5985436b18c..3f9980da836 100644 --- a/code/game/objects/items/storage/boxes.dm +++ b/code/game/objects/items/storage/boxes.dm @@ -200,7 +200,6 @@ /obj/item/storage/box/syringes/variety/PopulateContents() new /obj/item/reagent_containers/syringe(src) new /obj/item/reagent_containers/syringe/lethal(src) - new /obj/item/reagent_containers/syringe/noreact(src) new /obj/item/reagent_containers/syringe/piercing(src) new /obj/item/reagent_containers/syringe/bluespace(src) diff --git a/code/game/objects/items/storage/uplink_kits.dm b/code/game/objects/items/storage/uplink_kits.dm index dc5f0a5d86a..27cbb24615f 100644 --- a/code/game/objects/items/storage/uplink_kits.dm +++ b/code/game/objects/items/storage/uplink_kits.dm @@ -165,7 +165,7 @@ new /obj/item/assembly/signaler(src) // 0 tc new /obj/item/storage/toolbox/syndicate(src) // 1 tc new /obj/item/pen/edagger(src) - new /obj/item/gun/energy/wormhole_projector(src) + new /obj/item/gun/energy/wormhole_projector/core_inserted(src) new /obj/item/gun/energy/decloner/unrestricted(src) if("bee") diff --git a/code/game/objects/items/tanks/tanks.dm b/code/game/objects/items/tanks/tanks.dm index 015add093bc..5803882e3be 100644 --- a/code/game/objects/items/tanks/tanks.dm +++ b/code/game/objects/items/tanks/tanks.dm @@ -145,7 +145,7 @@ datum/tgui/master_ui = null, datum/ui_state/state = GLOB.hands_state) ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if(!ui) - ui = new(user, src, ui_key, "tanks", name, 400, 120, master_ui, state) + ui = new(user, src, ui_key, "Tank", name, 400, 120, master_ui, state) ui.open() /obj/item/tank/ui_data(mob/user) diff --git a/code/game/objects/structures/artstuff.dm b/code/game/objects/structures/artstuff.dm index 8f120e3d309..627a41349eb 100644 --- a/code/game/objects/structures/artstuff.dm +++ b/code/game/objects/structures/artstuff.dm @@ -80,7 +80,7 @@ ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if(!ui) - ui = new(user, src, ui_key, "canvas", name, ui_x, ui_y, master_ui, state) + ui = new(user, src, ui_key, "Canvas", name, ui_x, ui_y, master_ui, state) ui.set_autoupdate(FALSE) ui.open() diff --git a/code/game/objects/structures/beds_chairs/chair.dm b/code/game/objects/structures/beds_chairs/chair.dm index 2826174b747..3938ec2795b 100644 --- a/code/game/objects/structures/beds_chairs/chair.dm +++ b/code/game/objects/structures/beds_chairs/chair.dm @@ -202,6 +202,7 @@ name = "shuttle seat" desc = "A comfortable, secure seat. It has a more sturdy looking buckling system, for smoother flights." icon_state = "shuttle_chair" + buildstacktype = /obj/item/stack/sheet/mineral/titanium /obj/structure/chair/comfy/shuttle/GetArmrest() return mutable_appearance('icons/obj/chairs.dmi', "shuttle_chair_armrest") diff --git a/code/game/objects/structures/ghost_role_spawners.dm b/code/game/objects/structures/ghost_role_spawners.dm index acbcac4579c..0daf7d7e05f 100644 --- a/code/game/objects/structures/ghost_role_spawners.dm +++ b/code/game/objects/structures/ghost_role_spawners.dm @@ -653,6 +653,13 @@ flavour_text = "Your ship docks after a long time somewhere in hostile space, reporting a malfunction. You are stuck here, with Nanotrasen station nearby. Fix the ship, find a way to power it and follow your captain's orders." important_info = "Obey orders given by your captain. DO NOT let the ship fall into enemy hands." outfit = /datum/outfit/syndicatespace/syndicrew + assignedrole = "Cybersun Crewmember" + +/obj/effect/mob_spawn/human/syndicatespace/Initialize(mapload) + . = ..() + var/policy = get_policy(ROLE_SYNDICATE_CYBERSUN) + if(policy) + important_info = policy /datum/outfit/syndicatespace/syndicrew/post_equip(mob/living/carbon/human/H) H.faction |= ROLE_SYNDICATE @@ -660,11 +667,6 @@ /obj/effect/mob_spawn/human/syndicatespace/special(mob/living/new_spawn) new_spawn.grant_language(/datum/language/codespeak, TRUE, TRUE, LANGUAGE_MIND) -/obj/effect/mob_spawn/human/syndicatespace/Destroy() - new/obj/structure/fluff/empty_sleeper/syndicate(get_turf(src)) - return ..() - - /obj/effect/mob_spawn/human/syndicatespace/captain name = "Syndicate Ship Captain" roundstart = FALSE @@ -674,8 +676,14 @@ short_desc = "You are the captain of an old ship, stuck in hostile space." flavour_text = "Your ship docks after a long time somewhere in hostile space, reporting a malfunction. You are stuck here, with Nanotrasen station nearby. Command your crew and turn your ship into the most protected fortress." important_info = "Protect the ship and secret documents in your backpack with your own life. DO NOT let the ship fall into enemy hands." - mob_gender = "male" outfit = /datum/outfit/syndicatespace/syndicaptain + assignedrole = "Cybersun Captain" + +/obj/effect/mob_spawn/human/syndicatespace/syndicaptain/Initialize(mapload) + . = ..() + var/policy = get_policy(ROLE_SYNDICATE_CYBERSUN_CAPTAIN) + if(policy) + important_info = policy /datum/outfit/syndicatespace/syndicaptain/post_equip(mob/living/carbon/human/H) H.faction |= ROLE_SYNDICATE @@ -706,7 +714,7 @@ glasses = /obj/item/clothing/glasses/night mask = /obj/item/clothing/mask/gas/syndicate head = /obj/item/clothing/head/HoS/beret/syndicate - ears = /obj/item/radio/headset/syndicate/alt + ears = /obj/item/radio/headset/syndicate/alt/leader shoes = /obj/item/clothing/shoes/combat gloves = /obj/item/clothing/gloves/combat back = /obj/item/storage/backpack diff --git a/code/game/objects/structures/railings.dm b/code/game/objects/structures/railings.dm index 570f26cf71d..91ea8cbb1da 100644 --- a/code/game/objects/structures/railings.dm +++ b/code/game/objects/structures/railings.dm @@ -47,7 +47,8 @@ /obj/structure/railing/CanPass(atom/movable/mover, turf/target) ..() if(get_dir(loc, target) & dir) - return !density + var/checking = UNSTOPPABLE | FLYING | FLOATING + return !density || mover.movement_type & checking return TRUE /obj/structure/railing/corner/CanPass() diff --git a/code/game/objects/structures/tables_racks.dm b/code/game/objects/structures/tables_racks.dm index d46caf30fc7..2bd552bf19b 100644 --- a/code/game/objects/structures/tables_racks.dm +++ b/code/game/objects/structures/tables_racks.dm @@ -526,7 +526,7 @@ /obj/structure/table/optable/Initialize() . = ..() - for(var/direction in GLOB.cardinals) + for(var/direction in GLOB.alldirs) computer = locate(/obj/machinery/computer/operating, get_step(src, direction)) if(computer) computer.table = src diff --git a/code/game/objects/structures/tank_dispenser.dm b/code/game/objects/structures/tank_dispenser.dm index cc76a9975e3..1988510b7b8 100644 --- a/code/game/objects/structures/tank_dispenser.dm +++ b/code/game/objects/structures/tank_dispenser.dm @@ -71,7 +71,7 @@ datum/tgui/master_ui = null, datum/ui_state/state = GLOB.physical_state) ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if(!ui) - ui = new(user, src, ui_key, "tank_dispenser", name, 275, 103, master_ui, state) + ui = new(user, src, ui_key, "TankDispenser", name, 275, 103, master_ui, state) ui.open() /obj/structure/tank_dispenser/ui_data(mob/user) diff --git a/code/modules/NTNet/relays.dm b/code/modules/NTNet/relays.dm index 43c6334d65b..6289158901e 100644 --- a/code/modules/NTNet/relays.dm +++ b/code/modules/NTNet/relays.dm @@ -69,7 +69,7 @@ ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if(!ui) - ui = new(user, src, ui_key, "ntnet_relay", "NTNet Quantum Relay", ui_x, ui_y, master_ui, state) + ui = new(user, src, ui_key, "NtnetRelay", "NTNet Quantum Relay", ui_x, ui_y, master_ui, state) ui.open() diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index bece9ff11c0..3a8730a39af 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -633,9 +633,10 @@ GLOBAL_PROTECT(admin_verbs_hideable) holder.deactivate() - to_chat(src, "You are now a normal player.", confidential = TRUE) - log_admin("[src] deadmined themself.") - message_admins("[src] deadmined themself.") + + to_chat(src, "You are now a normal player.") + log_admin("[src] deadminned themselves.") + message_admins("[src] deadminned themselves.") SSblackbox.record_feedback("tally", "admin_verb", 1, "Deadmin") /client/proc/readmin() diff --git a/code/modules/admin/secrets.dm b/code/modules/admin/secrets.dm index bac573b6e08..3a51fa91ad8 100644 --- a/code/modules/admin/secrets.dm +++ b/code/modules/admin/secrets.dm @@ -51,6 +51,7 @@ Make all areas powered
Make all areas unpowered
Power all SMES
+ Anonymous Names (needs to be used in the lobby)
Triple AI mode (needs to be used in the lobby)
Everyone is the traitor
Summon Guns
@@ -304,6 +305,12 @@ var/mob/living/carbon/human/H = i H.set_species(newtype) + if("anon_name") + if(!check_rights(R_FUN)) + return + usr.client.anon_names() + SSblackbox.record_feedback("nested tally", "admin_secrets_fun_used", 1, list("Anonymous Names")) + if("tripleAI") if(!check_rights(R_FUN)) return diff --git a/code/modules/admin/sql_message_system.dm b/code/modules/admin/sql_message_system.dm index 9e19e61ccb2..f112759944a 100644 --- a/code/modules/admin/sql_message_system.dm +++ b/code/modules/admin/sql_message_system.dm @@ -106,6 +106,7 @@ var/text var/user_key_name = key_name(usr) var/user_name_admin = key_name_admin(usr) + var/deleted_by_ckey = sanitizeSQL(usr.ckey) var/datum/DBQuery/query_find_del_message = SSdbcore.NewQuery("SELECT type, IFNULL((SELECT byond_key FROM [format_table_name("player")] WHERE ckey = targetckey), targetckey), text FROM [format_table_name("messages")] WHERE id = [message_id] AND deleted = 0") if(!query_find_del_message.warn_execute()) qdel(query_find_del_message) @@ -115,7 +116,7 @@ target_key = query_find_del_message.item[2] text = query_find_del_message.item[3] qdel(query_find_del_message) - var/datum/DBQuery/query_del_message = SSdbcore.NewQuery("UPDATE [format_table_name("messages")] SET deleted = 1 WHERE id = [message_id]") + var/datum/DBQuery/query_del_message = SSdbcore.NewQuery("UPDATE [format_table_name("messages")] SET deleted = 1, deleted_ckey = '[deleted_by_ckey]' WHERE id = [message_id]") if(!query_del_message.warn_execute()) qdel(query_del_message) return diff --git a/code/modules/admin/verbs/anonymousnames.dm b/code/modules/admin/verbs/anonymousnames.dm new file mode 100644 index 00000000000..9b36e887f01 --- /dev/null +++ b/code/modules/admin/verbs/anonymousnames.dm @@ -0,0 +1,65 @@ +/client/proc/anon_names() + set category = "Admin - Events" + set name = "Setup Anonymous Names" + + + if(SSticker.current_state > GAME_STATE_PREGAME) + to_chat(usr, "This option is currently only usable during pregame.") + return + + if(SSticker.anonymousnames) + SSticker.anonymousnames = ANON_DISABLED + to_chat(usr, "Disabled anonymous names.") + message_admins("[key_name_admin(usr)] has disabled anonymous names.") + return + var/list/names = list("Cancel", ANON_RANDOMNAMES, ANON_EMPLOYEENAMES) + var/result = input(usr, "Choose an anonymous theme","going dark") as null|anything in names + if(!usr || !result || result == "Cancel") + return + if(SSticker.current_state > GAME_STATE_PREGAME) + to_chat(usr, "You took too long! The game has started.") + return + + SSticker.anonymousnames = result + to_chat(usr, "Enabled anonymous names. THEME: [SSticker.anonymousnames].") + message_admins("[key_name_admin(usr)] has enabled anonymous names. THEME: [SSticker.anonymousnames].") + +/** + * anonymous_name: generates a corporate random name. used in admin event tool anonymous names + * + * first letter is always a letter + * Example name = "Employee Q5460Z" + * Arguments: + * * M - mob for preferences and gender + */ +/proc/anonymous_name(mob/M) + switch(SSticker.anonymousnames) + if(ANON_RANDOMNAMES) + return M.client.prefs.pref_species.random_name(M.gender,1) + if(ANON_EMPLOYEENAMES) + var/name = "Employee " + + for(var/i in 1 to 6) + if(prob(30) || i == 1) + name += ascii2text(rand(65, 90)) //A - Z + else + name += ascii2text(rand(48, 57)) //0 - 9 + return name + +/** + * anonymous_ai_name: generates a corporate random name (but for sillycones). used in admin event tool anonymous names + * + * first letter is always a letter + * Example name = "Employee Assistant Assuming Delta" + * Arguments: + * * is_ai - boolean to decide whether the name has "Core" (AI) or "Assistant" (Cyborg) + */ +/proc/anonymous_ai_name(is_ai = FALSE) + switch(SSticker.anonymousnames) + if(ANON_RANDOMNAMES) + return pick(GLOB.ai_names) + if(ANON_EMPLOYEENAMES) + var/verbs = capitalize(pick(GLOB.ing_verbs)) + var/phonetic = pick(GLOB.phonetic_alphabet) + + return "Employee [is_ai ? "Core" : "Assistant"] [verbs] [phonetic]" diff --git a/code/modules/admin/verbs/borgpanel.dm b/code/modules/admin/verbs/borgpanel.dm index 671db413779..cbee1a066a5 100644 --- a/code/modules/admin/verbs/borgpanel.dm +++ b/code/modules/admin/verbs/borgpanel.dm @@ -36,7 +36,7 @@ /datum/borgpanel/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.admin_state) ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if(!ui) - ui = new(user, src, ui_key, "borgopanel", "Borg Panel", 700, 700, master_ui, state) + ui = new(user, src, ui_key, "BorgPanel", "Borg Panel", 700, 700, master_ui, state) ui.open() /datum/borgpanel/ui_data(mob/user) diff --git a/code/modules/admin/verbs/tripAI.dm b/code/modules/admin/verbs/tripAI.dm index c74bc7b13d1..5efa306e317 100644 --- a/code/modules/admin/verbs/tripAI.dm +++ b/code/modules/admin/verbs/tripAI.dm @@ -1,20 +1,15 @@ -/client/proc/triple_ai() - set category = "Admin - Events" - set name = "Create AI Triumvirate" - - if(SSticker.current_state > GAME_STATE_PREGAME) - to_chat(usr, "This option is currently only usable during pregame. This may change at a later date.", confidential = TRUE) - return - - var/datum/job/job = SSjob.GetJob("AI") - if(!job) - to_chat(usr, "Unable to locate the AI job", confidential = TRUE) - return - if(SSticker.triai) - SSticker.triai = 0 - to_chat(usr, "Only one AI will be spawned at round start.", confidential = TRUE) - message_admins("[key_name_admin(usr)] has toggled off triple AIs at round start.") - else - SSticker.triai = 1 - to_chat(usr, "There will be an AI Triumvirate at round start.", confidential = TRUE) - message_admins("[key_name_admin(usr)] has toggled on triple AIs at round start.") +/client/proc/triple_ai() + set category = "Admin - Events" + set name = "Toggle AI Triumvirate" + + if(SSticker.current_state > GAME_STATE_PREGAME) + to_chat(usr, "This option is currently only usable during pregame. This may change at a later date.", confidential = TRUE) + return + + var/datum/job/job = SSjob.GetJob("AI") + if(!job) + to_chat(usr, "Unable to locate the AI job", confidential = TRUE) + return + SSticker.triai = !SSticker.triai + to_chat(usr, "There will [SSticker.triai ? "" : "not"] be an AI Triumvirate at round start.") + message_admins("[key_name_admin(usr)] has toggled [SSticker.triai ? "on" : "off"] triple AIs at round start.") diff --git a/code/modules/antagonists/changeling/cellular_emporium.dm b/code/modules/antagonists/changeling/cellular_emporium.dm index 57346397c7b..bc433ef0cbb 100644 --- a/code/modules/antagonists/changeling/cellular_emporium.dm +++ b/code/modules/antagonists/changeling/cellular_emporium.dm @@ -16,7 +16,7 @@ /datum/cellular_emporium/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.always_state) ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if(!ui) - ui = new(user, src, ui_key, "cellular_emporium", name, 900, 480, master_ui, state) + ui = new(user, src, ui_key, "CellularEmporium", name, 900, 480, master_ui, state) ui.open() /datum/cellular_emporium/ui_data(mob/user) diff --git a/code/modules/antagonists/cult/runes.dm b/code/modules/antagonists/cult/runes.dm index eee48826e86..2e0f3412e70 100644 --- a/code/modules/antagonists/cult/runes.dm +++ b/code/modules/antagonists/cult/runes.dm @@ -843,7 +843,7 @@ structure_check() searches for nearby cultist structures required for the invoca notify_ghosts("Manifest rune invoked in [get_area(src)].", 'sound/effects/ghost2.ogg', source = src, header = "Manifest rune") var/list/ghosts_on_rune = list() for(var/mob/dead/observer/O in T) - if(O.client && !is_banned_from(O.ckey, ROLE_CULTIST) && !QDELETED(src) && !QDELETED(O)) + if(O.client && !is_banned_from(O.ckey, ROLE_CULTIST) && !QDELETED(src) && !(IsAdminGhost(O) && (O.client.prefs.toggles & ADMIN_IGNORE_CULT_GHOST)) && !QDELETED(O)) ghosts_on_rune += O if(!ghosts_on_rune.len) to_chat(user, "There are no spirits near [src]!") diff --git a/code/modules/antagonists/nukeop/equipment/nuclearbomb.dm b/code/modules/antagonists/nukeop/equipment/nuclearbomb.dm index c49c8f2621e..cc67881e715 100644 --- a/code/modules/antagonists/nukeop/equipment/nuclearbomb.dm +++ b/code/modules/antagonists/nukeop/equipment/nuclearbomb.dm @@ -7,7 +7,6 @@ density = TRUE resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF - ui_style = "nanotrasen" ui_x = 350 ui_y = 442 @@ -264,8 +263,7 @@ /obj/machinery/nuclearbomb/ui_interact(mob/user, ui_key="main", datum/tgui/ui=null, force_open=0, 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, "nuclear_bomb", name, ui_x, ui_y, master_ui, state) - ui.set_style(ui_style) + ui = new(user, src, ui_key, "NuclearBomb", name, ui_x, ui_y, master_ui, state) ui.open() /obj/machinery/nuclearbomb/ui_data(mob/user) diff --git a/code/modules/antagonists/traitor/equipment/module_picker.dm b/code/modules/antagonists/traitor/equipment/module_picker.dm index 738bf46aab2..1185c0b60e0 100644 --- a/code/modules/antagonists/traitor/equipment/module_picker.dm +++ b/code/modules/antagonists/traitor/equipment/module_picker.dm @@ -34,13 +34,13 @@ datum/tgui/master_ui = null, datum/ui_state/state = GLOB.always_state) ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if(!ui) - ui = new(user, src, ui_key, "malfunction_module_picker", name, ui_x, ui_y, master_ui, state) + ui = new(user, src, ui_key, "MalfunctionModulePicker", name, ui_x, ui_y, master_ui, state) ui.open() /datum/module_picker/ui_data(mob/user) var/list/data = list() - data["processing_time"] = processing_time - data["compact_mode"] = compact_mode + data["processingTime"] = processing_time + data["compactMode"] = compact_mode return data /datum/module_picker/ui_static_data(mob/user) diff --git a/code/modules/assembly/infrared.dm b/code/modules/assembly/infrared.dm index 4cbd667f600..9e5da7038bb 100644 --- a/code/modules/assembly/infrared.dm +++ b/code/modules/assembly/infrared.dm @@ -192,7 +192,7 @@ datum/tgui/master_ui = null, datum/ui_state/state = GLOB.hands_state) ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if(!ui) - ui = new(user, src, ui_key, "infrared_emitter", name, ui_x, ui_y, master_ui, state) + ui = new(user, src, ui_key, "InfraredEmitter", name, ui_x, ui_y, master_ui, state) ui.open() /obj/item/assembly/infra/ui_data(mob/user) diff --git a/code/modules/assembly/proximity.dm b/code/modules/assembly/proximity.dm index 2bc4c3e19fc..285d9c3599e 100644 --- a/code/modules/assembly/proximity.dm +++ b/code/modules/assembly/proximity.dm @@ -119,7 +119,7 @@ datum/tgui/master_ui = null, datum/ui_state/state = GLOB.hands_state) ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if(!ui) - ui = new(user, src, ui_key, "proximity_sensor", name, ui_x, ui_y, master_ui, state) + ui = new(user, src, ui_key, "ProximitySensor", name, ui_x, ui_y, master_ui, state) ui.open() /obj/item/assembly/prox_sensor/ui_data(mob/user) diff --git a/code/modules/assembly/signaler.dm b/code/modules/assembly/signaler.dm index 7da4fb7bbc9..c4108e061f1 100644 --- a/code/modules/assembly/signaler.dm +++ b/code/modules/assembly/signaler.dm @@ -73,7 +73,7 @@ datum/tgui/master_ui = null, datum/ui_state/state = GLOB.hands_state) ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if(!ui) - ui = new(user, src, ui_key, "signaler", name, ui_x, ui_y, master_ui, state) + ui = new(user, src, ui_key, "Signaler", name, ui_x, ui_y, master_ui, state) ui.open() /obj/item/assembly/signaler/ui_data(mob/user) diff --git a/code/modules/assembly/timer.dm b/code/modules/assembly/timer.dm index 6dda7ff00e0..2ebc929eb65 100644 --- a/code/modules/assembly/timer.dm +++ b/code/modules/assembly/timer.dm @@ -94,7 +94,7 @@ datum/tgui/master_ui = null, datum/ui_state/state = GLOB.hands_state) ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if(!ui) - ui = new(user, src, ui_key, "timer", name, ui_x, ui_y, master_ui, state) + ui = new(user, src, ui_key, "Timer", name, ui_x, ui_y, master_ui, state) ui.open() /obj/item/assembly/timer/ui_data(mob/user) diff --git a/code/modules/asset_cache/asset_list_items.dm b/code/modules/asset_cache/asset_list_items.dm index 53fc478c617..19f8bd81c5e 100644 --- a/code/modules/asset_cache/asset_list_items.dm +++ b/code/modules/asset_cache/asset_list_items.dm @@ -4,10 +4,6 @@ assets = list( "tgui.bundle.js" = 'tgui/packages/tgui/public/tgui.bundle.js', "tgui.bundle.css" = 'tgui/packages/tgui/public/tgui.bundle.css', - "shim-html5shiv.js" = 'tgui/packages/tgui/public/shim-html5shiv.js', - "shim-ie8.js" = 'tgui/packages/tgui/public/shim-ie8.js', - "shim-dom4.js" = 'tgui/packages/tgui/public/shim-dom4.js', - "shim-css-om.js" = 'tgui/packages/tgui/public/shim-css-om.js', ) /datum/asset/group/tgui diff --git a/code/modules/atmospherics/environmental/LINDA_fire.dm b/code/modules/atmospherics/environmental/LINDA_fire.dm index d1a9212f0b4..6fe4fb0310b 100644 --- a/code/modules/atmospherics/environmental/LINDA_fire.dm +++ b/code/modules/atmospherics/environmental/LINDA_fire.dm @@ -23,16 +23,18 @@ var/tox = . ? .[MOLES] : 0 . = air_gases[/datum/gas/tritium] var/trit = . ? .[MOLES] : 0 + . = air_gases[/datum/gas/hydrogen] + var/h2 = . ? .[MOLES] : 0 if(active_hotspot) if(soh) - if(tox > 0.5 || trit > 0.5) + if(tox > 0.5 || trit > 0.5 || h2 > 0.5) if(active_hotspot.temperature < exposed_temperature) active_hotspot.temperature = exposed_temperature if(active_hotspot.volume < exposed_volume) active_hotspot.volume = exposed_volume return - if((exposed_temperature > PLASMA_MINIMUM_BURN_TEMPERATURE) && (tox > 0.5 || trit > 0.5)) + if((exposed_temperature > PLASMA_MINIMUM_BURN_TEMPERATURE) && (tox > 0.5 || trit > 0.5 || h2 > 0.5)) active_hotspot = new /obj/effect/hotspot(src, exposed_volume*25, exposed_temperature) @@ -171,12 +173,12 @@ qdel(src) return - if(!location.air || (INSUFFICIENT(/datum/gas/plasma) && INSUFFICIENT(/datum/gas/tritium)) || INSUFFICIENT(/datum/gas/oxygen)) + if(!location.air || (INSUFFICIENT(/datum/gas/plasma) && INSUFFICIENT(/datum/gas/tritium) && INSUFFICIENT(/datum/gas/hydrogen)) || INSUFFICIENT(/datum/gas/oxygen)) qdel(src) return //Not enough to burn - if(((!location.air.gases[/datum/gas/plasma] || location.air.gases[/datum/gas/plasma][MOLES] < 0.5) && (!location.air.gases[/datum/gas/tritium] || location.air.gases[/datum/gas/tritium][MOLES] < 0.5)) || location.air.gases[/datum/gas/oxygen][MOLES] < 0.5) + if(((!location.air.gases[/datum/gas/plasma] || location.air.gases[/datum/gas/plasma][MOLES] < 0.5) && (!location.air.gases[/datum/gas/tritium] || location.air.gases[/datum/gas/tritium][MOLES] < 0.5) && (!location.air.gases[/datum/gas/hydrogen] || location.air.gases[/datum/gas/hydrogen][MOLES] < 0.5)) || location.air.gases[/datum/gas/oxygen][MOLES] < 0.5) qdel(src) return diff --git a/code/modules/atmospherics/gasmixtures/gas_types.dm b/code/modules/atmospherics/gasmixtures/gas_types.dm index 36e0565891b..1b0228b7d51 100644 --- a/code/modules/atmospherics/gasmixtures/gas_types.dm +++ b/code/modules/atmospherics/gasmixtures/gas_types.dm @@ -163,6 +163,13 @@ GLOBAL_LIST_INIT(nonreactive_gases, typecacheof(list(/datum/gas/oxygen, /datum/g fusion_power = -5 rarity = 10 +/datum/gas/hydrogen + id = "hydrogen" + specific_heat = 15 + name = "Hydrogen" + dangerous = TRUE + rarity = 700 + /obj/effect/overlay/gas icon = 'icons/effects/atmospherics.dmi' mouse_opacity = MOUSE_OPACITY_TRANSPARENT diff --git a/code/modules/atmospherics/gasmixtures/reactions.dm b/code/modules/atmospherics/gasmixtures/reactions.dm index 723c0d8a80a..cc3b6510841 100644 --- a/code/modules/atmospherics/gasmixtures/reactions.dm +++ b/code/modules/atmospherics/gasmixtures/reactions.dm @@ -1,4 +1,22 @@ //All defines used in reactions are located in ..\__DEFINES\reactions.dm +/*priority so far, check this list to see what are the numbers used. please use a different priority if the reaction doesn't work (higher number are done first) +miaster = -10 (this should always be under all other fires) +freonfire = -4 +plasmafire = -3 +h2fire = -2 +tritfire = -1 +nitrous_decomp = 0 +water_vapor = 1 +fusion = 2 +nitrylformation = 3 +bzformation = 4 +freonformation = 5 +stimformation = 5 +nobiliumformation = 6 +stimball = 7 +ammoniacrystals = 8 +nobiliumsuppression = INFINITY +*/ /proc/init_gas_reactions() . = list() @@ -65,9 +83,10 @@ if (air.temperature <= WATER_VAPOR_FREEZE) if(location && location.freon_gas_act()) . = REACTING - else if(location && location.water_vapor_gas_act()) - air.gases[/datum/gas/water_vapor][MOLES] -= MOLES_GAS_VISIBLE - . = REACTING + else if(air.temperature <= T20C + 10) + if(location && location.water_vapor_gas_act()) + air.gases[/datum/gas/water_vapor][MOLES] -= MOLES_GAS_VISIBLE + . = REACTING //tritium combustion: combustion of oxygen and tritium (treated as hydrocarbons). creates hotspots. exothermic /datum/gas_reaction/nitrous_decomp @@ -165,7 +184,7 @@ //plasma combustion: combustion of oxygen and plasma (treated as hydrocarbons). creates hotspots. exothermic /datum/gas_reaction/plasmafire - priority = -2 //fire should ALWAYS be last, but plasma fires happen after tritium fires + priority = -3 //fire should ALWAYS be last, but plasma fires happen after tritium fires name = "Plasma Combustion" id = "plasmafire" @@ -215,7 +234,9 @@ cached_gases[/datum/gas/tritium][MOLES] += plasma_burn_rate else ASSERT_GAS(/datum/gas/carbon_dioxide,air) + ASSERT_GAS(/datum/gas/water_vapor,air) cached_gases[/datum/gas/carbon_dioxide][MOLES] += plasma_burn_rate + cached_gases[/datum/gas/water_vapor][MOLES] += plasma_burn_rate * 0.25 energy_released += FIRE_PLASMA_ENERGY_RELEASED * (plasma_burn_rate) @@ -240,7 +261,7 @@ //freon reaction (is not a fire yet) datum/gas_reaction/freonfire - priority = -3 + priority = -4 name = "Freon combustion" id = "freonfire" @@ -291,6 +312,90 @@ datum/gas_reaction/freonfire/react(datum/gas_mixture/air, datum/holder) if(new_heat_capacity > MINIMUM_HEAT_CAPACITY) air.temperature = (temperature*old_heat_capacity + energy_released)/new_heat_capacity +/datum/gas_reaction/h2fire + priority = -2 //fire should ALWAYS be last, but tritium fires happen before plasma fires + name = "Hydrogen Combustion" + id = "h2fire" + +/datum/gas_reaction/h2fire/init_reqs() + min_requirements = list( + "TEMP" = FIRE_MINIMUM_TEMPERATURE_TO_EXIST, + /datum/gas/hydrogen = MINIMUM_MOLE_COUNT, + /datum/gas/oxygen = MINIMUM_MOLE_COUNT + ) + +/datum/gas_reaction/h2fire/react(datum/gas_mixture/air, datum/holder) + var/energy_released = 0 + var/old_heat_capacity = air.heat_capacity() + var/list/cached_gases = air.gases //this speeds things up because accessing datum vars is slow + var/temperature = air.temperature + var/list/cached_results = air.reaction_results + cached_results["fire"] = 0 + var/turf/open/location = isturf(holder) ? holder : null + var/burned_fuel = 0 + if(cached_gases[/datum/gas/oxygen][MOLES] < cached_gases[/datum/gas/hydrogen][MOLES] || MINIMUM_H2_OXYBURN_ENERGY > air.thermal_energy()) + burned_fuel = cached_gases[/datum/gas/oxygen][MOLES]/HYDROGEN_BURN_OXY_FACTOR + cached_gases[/datum/gas/hydrogen][MOLES] -= burned_fuel + else + burned_fuel = cached_gases[/datum/gas/hydrogen][MOLES]*HYDROGEN_BURN_H2_FACTOR + cached_gases[/datum/gas/hydrogen][MOLES] -= cached_gases[/datum/gas/hydrogen][MOLES]/HYDROGEN_BURN_H2_FACTOR + cached_gases[/datum/gas/oxygen][MOLES] -= cached_gases[/datum/gas/hydrogen][MOLES] + + if(burned_fuel) + energy_released += (FIRE_HYDROGEN_ENERGY_RELEASED * burned_fuel) + + ASSERT_GAS(/datum/gas/water_vapor, air) //oxygen+more-or-less hydrogen=H2O + cached_gases[/datum/gas/water_vapor][MOLES] += burned_fuel/HYDROGEN_BURN_OXY_FACTOR + + cached_results["fire"] += burned_fuel + + if(energy_released > 0) + var/new_heat_capacity = air.heat_capacity() + if(new_heat_capacity > MINIMUM_HEAT_CAPACITY) + air.temperature = (temperature*old_heat_capacity + energy_released)/new_heat_capacity + + //let the floor know a fire is happening + if(istype(location)) + temperature = air.temperature + if(temperature > FIRE_MINIMUM_TEMPERATURE_TO_EXIST) + location.hotspot_expose(temperature, CELL_VOLUME) + for(var/I in location) + var/atom/movable/item = I + item.temperature_expose(air, temperature, CELL_VOLUME) + location.temperature_expose(air, temperature, CELL_VOLUME) + + return cached_results["fire"] ? REACTING : NO_REACTION + +/datum/gas_reaction/ammoniacrystals + priority = 8 + name = "Ammonia crystals formation" + id = "nh4crystals" + +/datum/gas_reaction/ammoniacrystals/init_reqs() + min_requirements = list( + /datum/gas/hydrogen = MINIMUM_MOLE_COUNT, + /datum/gas/nitrogen = MINIMUM_MOLE_COUNT + ) + +/datum/gas_reaction/ammoniacrystals/react(datum/gas_mixture/air, datum/holder) + var/energy_released = 0 + var/old_heat_capacity = air.heat_capacity() + var/list/cached_gases = air.gases + var/temperature = air.temperature + var/turf/open/location = isturf(holder) ? holder : null + var/consumed_fuel = 0 + if(temperature > 150 && temperature < T0C && cached_gases[/datum/gas/nitrogen][MOLES] > cached_gases[/datum/gas/hydrogen][MOLES]) + consumed_fuel = (cached_gases[/datum/gas/hydrogen][MOLES] / AMMONIA_FORMATION_FACTOR) + cached_gases[/datum/gas/nitrogen][MOLES] -= consumed_fuel + cached_gases[/datum/gas/hydrogen][MOLES] -= consumed_fuel * 4 + if(prob(30 * consumed_fuel)) + new /obj/item/stack/ammonia_crystals(location) + energy_released += consumed_fuel * AMMONIA_FORMATION_ENERGY + if(energy_released > 0) + var/new_heat_capacity = air.heat_capacity() + if(new_heat_capacity > MINIMUM_HEAT_CAPACITY) + air.temperature = (temperature*old_heat_capacity + energy_released)/new_heat_capacity + //fusion: a terrible idea that was fun but broken. Now reworked to be less broken and more interesting. Again (and again, and again). Again! //Fusion Rework Counter: Please increment this if you make a major overhaul to this system again. //6 reworks @@ -306,7 +411,7 @@ datum/gas_reaction/freonfire/react(datum/gas_mixture/air, datum/holder) "TEMP" = FUSION_TEMPERATURE_THRESHOLD, /datum/gas/tritium = FUSION_TRITIUM_MOLES_USED, /datum/gas/plasma = FUSION_MOLE_THRESHOLD, - /datum/gas/carbon_dioxide = FUSION_MOLE_THRESHOLD) + /datum/gas/hydrogen = FUSION_MOLE_THRESHOLD) /datum/gas_reaction/fusion/react(datum/gas_mixture/air, datum/holder) var/list/cached_gases = air.gases @@ -322,7 +427,7 @@ datum/gas_reaction/freonfire/react(datum/gas_mixture/air, datum/holder) var/old_heat_capacity = air.heat_capacity() var/reaction_energy = 0 //Reaction energy can be negative or positive, for both exothermic and endothermic reactions. var/initial_plasma = cached_gases[/datum/gas/plasma][MOLES] - var/initial_carbon = cached_gases[/datum/gas/carbon_dioxide][MOLES] + var/initial_hydrogen = cached_gases[/datum/gas/hydrogen][MOLES] var/scale_factor = (air.volume)/(PI) //We scale it down by volume/Pi because for fusion conditions, moles roughly = 2*volume, but we want it to be based off something constant between reactions. var/toroidal_size = (2*PI)+TORADIANS(arctan((air.volume-TOROID_VOLUME_BREAKEVEN)/TOROID_VOLUME_BREAKEVEN)) //The size of the phase space hypertorus var/gas_power = 0 @@ -331,16 +436,16 @@ datum/gas_reaction/freonfire/react(datum/gas_mixture/air, datum/holder) var/instability = MODULUS((gas_power*INSTABILITY_GAS_POWER_FACTOR)**2,toroidal_size) //Instability effects how chaotic the behavior of the reaction is cached_scan_results[id] = instability//used for analyzer feedback - var/plasma = (initial_plasma-FUSION_MOLE_THRESHOLD)/(scale_factor) //We have to scale the amounts of carbon and plasma down a significant amount in order to show the chaotic dynamics we want - var/carbon = (initial_carbon-FUSION_MOLE_THRESHOLD)/(scale_factor) //We also subtract out the threshold amount to make it harder for fusion to burn itself out. + var/plasma = (initial_plasma-FUSION_MOLE_THRESHOLD)/(scale_factor) //We have to scale the amounts of hydrogen and plasma down a significant amount in order to show the chaotic dynamics we want + var/hydrogen = (initial_hydrogen-FUSION_MOLE_THRESHOLD)/(scale_factor) //We also subtract out the threshold amount to make it harder for fusion to burn itself out. //The reaction is a specific form of the Kicked Rotator system, which displays chaotic behavior and can be used to model particle interactions. - plasma = MODULUS(plasma - (instability*sin(TODEGREES(carbon))), toroidal_size) - carbon = MODULUS(carbon - plasma, toroidal_size) + plasma = MODULUS(plasma - (instability*sin(TODEGREES(hydrogen))), toroidal_size) + hydrogen = MODULUS(hydrogen - plasma, toroidal_size) cached_gases[/datum/gas/plasma][MOLES] = plasma*scale_factor + FUSION_MOLE_THRESHOLD //Scales the gases back up - cached_gases[/datum/gas/carbon_dioxide][MOLES] = carbon*scale_factor + FUSION_MOLE_THRESHOLD + cached_gases[/datum/gas/hydrogen][MOLES] = hydrogen*scale_factor + FUSION_MOLE_THRESHOLD var/delta_plasma = initial_plasma - cached_gases[/datum/gas/plasma][MOLES] reaction_energy += delta_plasma*PLASMA_BINDING_ENERGY //Energy is gained or lost corresponding to the creation or destruction of mass. @@ -351,18 +456,17 @@ datum/gas_reaction/freonfire/react(datum/gas_mixture/air, datum/holder) if(air.thermal_energy() + reaction_energy < 0) //No using energy that doesn't exist. cached_gases[/datum/gas/plasma][MOLES] = initial_plasma - cached_gases[/datum/gas/carbon_dioxide][MOLES] = initial_carbon + cached_gases[/datum/gas/hydrogen][MOLES] = initial_hydrogen return NO_REACTION cached_gases[/datum/gas/tritium][MOLES] -= FUSION_TRITIUM_MOLES_USED //The decay of the tritium and the reaction's energy produces waste gases, different ones depending on whether the reaction is endo or exothermic if(reaction_energy > 0) - air.assert_gases(/datum/gas/oxygen,/datum/gas/nitrous_oxide) - cached_gases[/datum/gas/oxygen][MOLES] += FUSION_TRITIUM_MOLES_USED*(reaction_energy*FUSION_TRITIUM_CONVERSION_COEFFICIENT) - cached_gases[/datum/gas/nitrous_oxide][MOLES] += FUSION_TRITIUM_MOLES_USED*(reaction_energy*FUSION_TRITIUM_CONVERSION_COEFFICIENT) + air.assert_gases(/datum/gas/carbon_dioxide,/datum/gas/water_vapor) + cached_gases[/datum/gas/carbon_dioxide][MOLES] += FUSION_TRITIUM_MOLES_USED*(reaction_energy*FUSION_TRITIUM_CONVERSION_COEFFICIENT) + cached_gases[/datum/gas/water_vapor][MOLES] += (FUSION_TRITIUM_MOLES_USED*(reaction_energy*FUSION_TRITIUM_CONVERSION_COEFFICIENT)) * 0.25 else - air.assert_gases(/datum/gas/bz,/datum/gas/nitryl) - cached_gases[/datum/gas/bz][MOLES] += FUSION_TRITIUM_MOLES_USED*(reaction_energy*-FUSION_TRITIUM_CONVERSION_COEFFICIENT) - cached_gases[/datum/gas/nitryl][MOLES] += FUSION_TRITIUM_MOLES_USED*(reaction_energy*-FUSION_TRITIUM_CONVERSION_COEFFICIENT) + air.assert_gases(/datum/gas/carbon_dioxide) + cached_gases[/datum/gas/carbon_dioxide][MOLES] += FUSION_TRITIUM_MOLES_USED*(reaction_energy*-FUSION_TRITIUM_CONVERSION_COEFFICIENT) if(reaction_energy) if(location) @@ -483,6 +587,44 @@ datum/gas_reaction/freonfire/react(datum/gas_mixture/air, datum/holder) air.temperature = max(((temperature*old_heat_capacity + energy_released)/new_heat_capacity),TCMB) return REACTING +/datum/gas_reaction/metalhydrogen + priority = 9 + name = "Metal Hydrogen formation" + id = "metalhydrogen" + +/datum/gas_reaction/metalhydrogen/init_reqs() + min_requirements = list( + /datum/gas/hydrogen = 100, + /datum/gas/bz = 5, + "TEMP" = METAL_HYDROGEN_MINIMUM_HEAT + ) + +/datum/gas_reaction/metalhydrogen/react(datum/gas_mixture/air, datum/holder) + var/list/cached_gases = air.gases + var/temperature = air.temperature + var/old_heat_capacity = air.heat_capacity() + ///the more heat you use the higher is this factor + var/increase_factor = min((temperature / METAL_HYDROGEN_MINIMUM_HEAT), 5) + ///the more moles you use and the higher the heat, the higher is the efficiency + var/heat_efficency = cached_gases[/datum/gas/hydrogen][MOLES] * 0.01 * increase_factor + var/pressure = air.return_pressure() + var/energy_used = heat_efficency * METAL_HYDROGEN_FORMATION_ENERGY + var/turf/open/location = isturf(holder) ? holder : null + + if(pressure >= METAL_HYDROGEN_MINIMUM_PRESSURE && temperature >= METAL_HYDROGEN_MINIMUM_HEAT) + cached_gases[/datum/gas/bz][MOLES] -= heat_efficency * 0.01 + if (prob(20 * increase_factor)) + cached_gases[/datum/gas/hydrogen][MOLES] -= heat_efficency * 10 + if (prob(50 / increase_factor)) + new /obj/item/stack/sheet/mineral/metal_hydrogen(location) + SSresearch.science_tech.add_point_type(TECHWEB_POINT_TYPE_DEFAULT, min((heat_efficency * increase_factor), METAL_HYDROGEN_RESEARCH_MAX_AMOUNT)) + + if(energy_used > 0) + var/new_heat_capacity = air.heat_capacity() + if(new_heat_capacity > MINIMUM_HEAT_CAPACITY) + air.temperature = max(((temperature * old_heat_capacity - energy_used) / new_heat_capacity),TCMB) + return REACTING + /datum/gas_reaction/freonformation priority = 5 name = "Freon formation" diff --git a/code/modules/atmospherics/machinery/airalarm.dm b/code/modules/atmospherics/machinery/airalarm.dm index e721f32f393..1a0765d85a1 100644 --- a/code/modules/atmospherics/machinery/airalarm.dm +++ b/code/modules/atmospherics/machinery/airalarm.dm @@ -102,7 +102,8 @@ /datum/gas/stimulum = new/datum/tlv/dangerous, /datum/gas/nitryl = new/datum/tlv/dangerous, /datum/gas/pluoxium = new/datum/tlv(-1, -1, 1000, 1000), // Unlike oxygen, pluoxium does not fuel plasma/tritium fires - /datum/gas/freon = new/datum/tlv/dangerous + /datum/gas/freon = new/datum/tlv/dangerous, + /datum/gas/hydrogen = new/datum/tlv/dangerous ) /obj/machinery/airalarm/server // No checks here. @@ -122,7 +123,8 @@ /datum/gas/stimulum = new/datum/tlv/no_checks, /datum/gas/nitryl = new/datum/tlv/no_checks, /datum/gas/pluoxium = new/datum/tlv/no_checks, - /datum/gas/freon = new/datum/tlv/no_checks + /datum/gas/freon = new/datum/tlv/no_checks, + /datum/gas/hydrogen = new/datum/tlv/no_checks ) /obj/machinery/airalarm/kitchen_cold_room // Kitchen cold rooms start off at -80°C or 193.15°K. @@ -142,7 +144,8 @@ /datum/gas/stimulum = new/datum/tlv/dangerous, /datum/gas/nitryl = new/datum/tlv/dangerous, /datum/gas/pluoxium = new/datum/tlv(-1, -1, 1000, 1000), // Unlike oxygen, pluoxium does not fuel plasma/tritium fires - /datum/gas/freon = new/datum/tlv/dangerous + /datum/gas/freon = new/datum/tlv/dangerous, + /datum/gas/hydrogen = new/datum/tlv/dangerous ) /obj/machinery/airalarm/unlocked @@ -244,7 +247,7 @@ 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, "airalarm", name, ui_x, ui_y, master_ui, state) + ui = new(user, src, ui_key, "AirAlarm", name, ui_x, ui_y, master_ui, state) ui.open() /obj/machinery/airalarm/ui_data(mob/user) @@ -531,7 +534,8 @@ /datum/gas/bz, /datum/gas/stimulum, /datum/gas/pluoxium, - /datum/gas/freon + /datum/gas/freon, + /datum/gas/hydrogen ), "scrubbing" = 1, "widenet" = 1 diff --git a/code/modules/atmospherics/machinery/components/binary_devices/passive_gate.dm b/code/modules/atmospherics/machinery/components/binary_devices/passive_gate.dm index 75061a4aa2d..35a8e33deda 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/passive_gate.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/passive_gate.dm @@ -28,13 +28,13 @@ Passive gate is similar to the regular pump except: ui_x = 335 ui_y = 115 - + /obj/machinery/atmospherics/components/binary/passive_gate/CtrlClick(mob/user) if(can_interact(user)) on = !on update_icon() return ..() - + /obj/machinery/atmospherics/components/binary/passive_gate/AltClick(mob/user) if(can_interact(user)) target_pressure = MAX_OUTPUT_PRESSURE @@ -106,7 +106,7 @@ Passive gate is similar to the regular pump except: 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, "atmos_pump", name, ui_x, ui_y, master_ui, state) + ui = new(user, src, ui_key, "AtmosPump", name, ui_x, ui_y, master_ui, state) ui.open() /obj/machinery/atmospherics/components/binary/passive_gate/ui_data() diff --git a/code/modules/atmospherics/machinery/components/binary_devices/pump.dm b/code/modules/atmospherics/machinery/components/binary_devices/pump.dm index 9d6f6b82cab..b300cadbdfe 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/pump.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/pump.dm @@ -100,7 +100,7 @@ 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, "atmos_pump", name, ui_x, ui_y, master_ui, state) + ui = new(user, src, ui_key, "AtmosPump", name, ui_x, ui_y, master_ui, state) ui.open() /obj/machinery/atmospherics/components/binary/pump/ui_data() diff --git a/code/modules/atmospherics/machinery/components/binary_devices/volume_pump.dm b/code/modules/atmospherics/machinery/components/binary_devices/volume_pump.dm index c33336758f4..65891612503 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/volume_pump.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/volume_pump.dm @@ -113,7 +113,7 @@ 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, "atmos_pump", name, ui_x, ui_y, master_ui, state) + ui = new(user, src, ui_key, "AtmosPump", name, ui_x, ui_y, master_ui, state) ui.open() /obj/machinery/atmospherics/components/binary/volume_pump/ui_data() diff --git a/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm b/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm index 75bb2355414..f1fc9ee0b67 100644 --- a/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm +++ b/code/modules/atmospherics/machinery/components/trinary_devices/filter.dm @@ -123,7 +123,7 @@ 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, "atmos_filter", name, ui_x, ui_y, master_ui, state) + ui = new(user, src, ui_key, "AtmosFilter", name, ui_x, ui_y, master_ui, state) ui.open() /obj/machinery/atmospherics/components/trinary/filter/ui_data() diff --git a/code/modules/atmospherics/machinery/components/trinary_devices/mixer.dm b/code/modules/atmospherics/machinery/components/trinary_devices/mixer.dm index 326c978f308..83de28843fc 100644 --- a/code/modules/atmospherics/machinery/components/trinary_devices/mixer.dm +++ b/code/modules/atmospherics/machinery/components/trinary_devices/mixer.dm @@ -129,7 +129,7 @@ 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, "atmos_mixer", name, ui_x, ui_y, master_ui, state) + ui = new(user, src, ui_key, "AtmosMixer", name, ui_x, ui_y, master_ui, state) ui.open() /obj/machinery/atmospherics/components/trinary/mixer/ui_data() diff --git a/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm b/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm index b3eb35e2ef8..56376e1bdfc 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm @@ -333,7 +333,7 @@ datum/tgui/master_ui = null, datum/ui_state/state = GLOB.notcontained_state) ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if(!ui) - ui = new(user, src, ui_key, "cryo", name, ui_x, ui_y, master_ui, state) + ui = new(user, src, ui_key, "Cryo", name, ui_x, ui_y, master_ui, state) ui.open() /obj/machinery/atmospherics/components/unary/cryo_cell/ui_data() diff --git a/code/modules/atmospherics/machinery/components/unary_devices/outlet_injector.dm b/code/modules/atmospherics/machinery/components/unary_devices/outlet_injector.dm index c3ffa680239..6d0d3b4c4b1 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/outlet_injector.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/outlet_injector.dm @@ -25,7 +25,7 @@ ui_x = 310 ui_y = 115 - + /obj/machinery/atmospherics/components/unary/outlet_injector/CtrlClick(mob/user) if(can_interact(user)) on = !on @@ -146,7 +146,7 @@ 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, "atmos_pump", name, ui_x, ui_y, master_ui, state) + ui = new(user, src, ui_key, "AtmosPump", name, ui_x, ui_y, master_ui, state) ui.open() /obj/machinery/atmospherics/components/unary/outlet_injector/ui_data() diff --git a/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm b/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm index 267530f10a7..53325f5a6dd 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm @@ -127,7 +127,7 @@ 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, "thermomachine", name, ui_x, ui_y, master_ui, state) + ui = new(user, src, ui_key, "ThermoMachine", name, ui_x, ui_y, master_ui, state) ui.open() /obj/machinery/atmospherics/components/unary/thermomachine/ui_data(mob/user) diff --git a/code/modules/atmospherics/machinery/portable/canister.dm b/code/modules/atmospherics/machinery/portable/canister.dm index f386d5f9bef..ca1959f2459 100644 --- a/code/modules/atmospherics/machinery/portable/canister.dm +++ b/code/modules/atmospherics/machinery/portable/canister.dm @@ -1,4 +1,8 @@ -#define CAN_DEFAULT_RELEASE_PRESSURE (ONE_ATMOSPHERE) +#define CAN_DEFAULT_RELEASE_PRESSURE (ONE_ATMOSPHERE) +///Used when setting the mode of the canisters, enabling us to switch the overlays +#define CANISTER_TIER_1 1 +#define CANISTER_TIER_2 2 +#define CANISTER_TIER_3 3 /obj/machinery/portable_atmospherics/canister name = "canister" @@ -18,6 +22,10 @@ var/release_pressure = ONE_ATMOSPHERE var/can_max_release_pressure = (ONE_ATMOSPHERE * 10) var/can_min_release_pressure = (ONE_ATMOSPHERE / 10) + ///Max amount of heat allowed inside of the canister before it starts to melt (different tiers have different limits) + var/heat_limit = 5000 + ///Max amount of pressure allowed inside of the canister before it starts to break (different tiers have different limits) + var/pressure_limit = 50000 armor = list("melee" = 50, "bullet" = 50, "laser" = 50, "energy" = 100, "bomb" = 10, "bio" = 100, "rad" = 100, "fire" = 80, "acid" = 50) max_integrity = 250 @@ -34,6 +42,8 @@ var/maximum_timer_set = 300 var/timing = FALSE var/restricted = FALSE + ///Set the tier of the canister and overlay used + var/mode = CANISTER_TIER_1 req_access = list() var/update = 0 @@ -53,7 +63,8 @@ "pluoxium" = /obj/machinery/portable_atmospherics/canister/pluoxium, "caution" = /obj/machinery/portable_atmospherics/canister, "miasma" = /obj/machinery/portable_atmospherics/canister/miasma, - "freon" = /obj/machinery/portable_atmospherics/canister/freon + "freon" = /obj/machinery/portable_atmospherics/canister/freon, + "hydrogen" = /obj/machinery/portable_atmospherics/canister/hydrogen ) /obj/machinery/portable_atmospherics/canister/interact(mob/user) @@ -63,6 +74,11 @@ return ..() +/obj/machinery/portable_atmospherics/canister/examine(user) + . = ..() + if(mode) + . += "This canister is tier [mode]." + /obj/machinery/portable_atmospherics/canister/nitrogen name = "n2 canister" desc = "Nitrogen gas. Reportedly useful for something." @@ -155,13 +171,24 @@ gas_type = /datum/gas/freon filled = 1 +/obj/machinery/portable_atmospherics/canister/hydrogen + name = "hydrogen canister" + desc = "Hydrogen, highly flammable" + icon_state = "grey" + gas_type = /datum/gas/hydrogen + filled = 1 + + /obj/machinery/portable_atmospherics/canister/fusion_test name = "fusion test canister" desc = "Don't be a badmin." + heat_limit = 1e12 + pressure_limit = 1e14 + mode = CANISTER_TIER_3 /obj/machinery/portable_atmospherics/canister/fusion_test/create_gas() - air_contents.add_gases(/datum/gas/carbon_dioxide, /datum/gas/plasma, /datum/gas/tritium) - air_contents.gases[/datum/gas/carbon_dioxide][MOLES] = 500 + air_contents.add_gases(/datum/gas/hydrogen, /datum/gas/plasma, /datum/gas/tritium) + air_contents.gases[/datum/gas/hydrogen][MOLES] = 500 air_contents.gases[/datum/gas/plasma][MOLES] = 500 air_contents.gases[/datum/gas/tritium][MOLES] = 350 air_contents.temperature = 15000 @@ -202,6 +229,32 @@ filled = 1 release_pressure = ONE_ATMOSPHERE*2 +/obj/machinery/portable_atmospherics/canister/tier_1 + name = "Tier 1 canister" + heat_limit = 5000 + pressure_limit = 50000 + mode = CANISTER_TIER_1 + +/obj/machinery/portable_atmospherics/canister/tier_2 + name = "Tier 2 canister" + heat_limit = 500000 + pressure_limit = 5e6 + volume = 3000 + max_integrity = 300 + can_max_release_pressure = (ONE_ATMOSPHERE * 30) + can_min_release_pressure = (ONE_ATMOSPHERE / 30) + mode = CANISTER_TIER_2 + +/obj/machinery/portable_atmospherics/canister/tier_3 + name = "Tier 3 canister" + heat_limit = 1e12 + pressure_limit = 1e14 + volume = 5000 + max_integrity = 500 + can_max_release_pressure = (ONE_ATMOSPHERE * 30) + can_min_release_pressure = (ONE_ATMOSPHERE / 50) + mode = CANISTER_TIER_3 + /obj/machinery/portable_atmospherics/canister/Initialize(mapload, datum/gas_mixture/existing_mixture) . = ..() if(existing_mixture) @@ -212,6 +265,7 @@ pump.on = TRUE pump.machine_stat = 0 pump.build_network() + update_overlays() /obj/machinery/portable_atmospherics/canister/Destroy() qdel(pump) @@ -251,9 +305,16 @@ . += "can-o1" else if(pressure >= 10) . += "can-o0" + ///Function is used to actually set the overlays + if(mode == CANISTER_TIER_1) + . += "tier1-o" + else if(mode == CANISTER_TIER_2) + . += "tier2-o" + else if(mode == CANISTER_TIER_3) + . += "tier3-o" /obj/machinery/portable_atmospherics/canister/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume) - if(exposed_temperature > temperature_resistance) + if(exposed_temperature > (temperature_resistance * mode)) take_damage(5, BURN, 0) @@ -336,12 +397,18 @@ pump.airs[2] = null update_icon() + var/pressure = air_contents.return_pressure() + var/temperature = air_contents.return_temperature() + ///function used to check the limit of the canisters and also set the amount of damage that the canister can recieve, if the heat and pressure are way higher than the limit the more damage will be done + if(temperature > heat_limit || pressure > pressure_limit) + take_damage(clamp((temperature/heat_limit) * (pressure/pressure_limit), 5, 50), BURN, 0) + return /obj/machinery/portable_atmospherics/canister/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \ datum/tgui/master_ui = null, datum/ui_state/state = GLOB.physical_state) ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if(!ui) - ui = new(user, src, ui_key, "canister", name, ui_x, ui_y, master_ui, state) + ui = new(user, src, ui_key, "Canister", name, ui_x, ui_y, master_ui, state) ui.open() /obj/machinery/portable_atmospherics/canister/ui_data() diff --git a/code/modules/atmospherics/machinery/portable/pump.dm b/code/modules/atmospherics/machinery/portable/pump.dm index d3768d3d216..decfcbcc404 100644 --- a/code/modules/atmospherics/machinery/portable/pump.dm +++ b/code/modules/atmospherics/machinery/portable/pump.dm @@ -11,6 +11,12 @@ ui_x = 300 ui_y = 315 + max_integrity = 250 + ///Max amount of heat allowed inside of the canister before it starts to melt (different tiers have different limits) + var/heat_limit = 5000 + ///Max amount of pressure allowed inside of the canister before it starts to break (different tiers have different limits) + var/pressure_limit = 50000 + var/on = FALSE var/direction = PUMP_OUT var/obj/machinery/atmospherics/components/binary/pump/pump @@ -43,6 +49,14 @@ /obj/machinery/portable_atmospherics/pump/process_atmos() ..() + + var/pressure = air_contents.return_pressure() + var/temperature = air_contents.return_temperature() + ///function used to check the limit of the pumps and also set the amount of damage that the pump can recieve, if the heat and pressure are way higher than the limit the more damage will be done + if(temperature > heat_limit || pressure > pressure_limit) + take_damage(clamp((temperature/heat_limit) * (pressure/pressure_limit), 5, 50), BURN, 0) + return + if(!on) pump.airs[1] = null pump.airs[2] = null @@ -87,7 +101,7 @@ datum/tgui/master_ui = null, datum/ui_state/state = GLOB.physical_state) ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if(!ui) - ui = new(user, src, ui_key, "portable_pump", name, ui_x, ui_y, master_ui, state) + ui = new(user, src, ui_key, "PortablePump", name, ui_x, ui_y, master_ui, state) ui.open() /obj/machinery/portable_atmospherics/pump/ui_data() diff --git a/code/modules/atmospherics/machinery/portable/scrubber.dm b/code/modules/atmospherics/machinery/portable/scrubber.dm index 9729f6c4980..da4b57532e9 100644 --- a/code/modules/atmospherics/machinery/portable/scrubber.dm +++ b/code/modules/atmospherics/machinery/portable/scrubber.dm @@ -3,7 +3,13 @@ icon_state = "pscrubber:0" density = TRUE ui_x = 320 - ui_y = 335 + ui_y = 350 + + max_integrity = 250 + ///Max amount of heat allowed inside of the canister before it starts to melt (different tiers have different limits) + var/heat_limit = 5000 + ///Max amount of pressure allowed inside of the canister before it starts to break (different tiers have different limits) + var/pressure_limit = 50000 var/on = FALSE var/volume_rate = 1000 @@ -11,7 +17,7 @@ var/use_overlays = TRUE volume = 1000 - var/list/scrubbing = list(/datum/gas/plasma, /datum/gas/carbon_dioxide, /datum/gas/nitrous_oxide, /datum/gas/bz, /datum/gas/nitryl, /datum/gas/tritium, /datum/gas/hypernoblium, /datum/gas/water_vapor, /datum/gas/freon) + var/list/scrubbing = list(/datum/gas/plasma, /datum/gas/carbon_dioxide, /datum/gas/nitrous_oxide, /datum/gas/bz, /datum/gas/nitryl, /datum/gas/tritium, /datum/gas/hypernoblium, /datum/gas/water_vapor, /datum/gas/freon, /datum/gas/hydrogen) /obj/machinery/portable_atmospherics/scrubber/Destroy() var/turf/T = get_turf(src) @@ -33,6 +39,14 @@ /obj/machinery/portable_atmospherics/scrubber/process_atmos() ..() + + var/pressure = air_contents.return_pressure() + var/temperature = air_contents.return_temperature() + ///function used to check the limit of the scrubbers and also set the amount of damage that the scrubber can recieve, if the heat and pressure are way higher than the limit the more damage will be done + if(temperature > heat_limit || pressure > pressure_limit) + take_damage(clamp((temperature/heat_limit) * (pressure/pressure_limit), 5, 50), BURN, 0) + return + if(!on) return @@ -78,7 +92,7 @@ datum/tgui/master_ui = null, datum/ui_state/state = GLOB.physical_state) ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if(!ui) - ui = new(user, src, ui_key, "portable_scrubber", name, ui_x, ui_y, master_ui, state) + ui = new(user, src, ui_key, "PortableScrubber", name, ui_x, ui_y, master_ui, state) ui.open() /obj/machinery/portable_atmospherics/scrubber/ui_data() diff --git a/code/modules/awaymissions/gateway.dm b/code/modules/awaymissions/gateway.dm index 0164d188d36..2f7ae0f9065 100644 --- a/code/modules/awaymissions/gateway.dm +++ b/code/modules/awaymissions/gateway.dm @@ -279,7 +279,7 @@ GLOBAL_LIST_EMPTY(gateway_destinations) . = ..() ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if(!ui) - ui = new(user, src, ui_key, "gateway", name, ui_x, ui_y, master_ui, state) + ui = new(user, src, ui_key, "Gateway", name, ui_x, ui_y, master_ui, state) ui.open() /obj/machinery/computer/gateway_control/ui_data(mob/user) diff --git a/code/modules/cargo/blackmarket/blackmarket_uplink.dm b/code/modules/cargo/blackmarket/blackmarket_uplink.dm index 35ba17e2418..3833b0505a5 100644 --- a/code/modules/cargo/blackmarket/blackmarket_uplink.dm +++ b/code/modules/cargo/blackmarket/blackmarket_uplink.dm @@ -4,7 +4,7 @@ icon_state = "uplink" // UI variables. - var/ui_x = 720 + var/ui_x = 600 var/ui_y = 480 var/viewing_category var/viewing_market @@ -58,7 +58,7 @@ /obj/item/blackmarket_uplink/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, "blackmarket_uplink", name, ui_x, ui_y, master_ui, state) + ui = new(user, src, ui_key, "BlackMarketUplink", name, ui_x, ui_y, master_ui, state) ui.open() /obj/item/blackmarket_uplink/ui_data(mob/user) diff --git a/code/modules/cargo/centcom_podlauncher.dm b/code/modules/cargo/centcom_podlauncher.dm index 52310187939..7c6aa16c5dd 100644 --- a/code/modules/cargo/centcom_podlauncher.dm +++ b/code/modules/cargo/centcom_podlauncher.dm @@ -56,7 +56,7 @@ force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.adm ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if(!ui) - ui = new(user, src, ui_key, "centcom_podlauncher", "Config/Launch Supplypod", 700, 700, master_ui, state) + ui = new(user, src, ui_key, "CentcomPodLauncher", "Config/Launch Supplypod", 700, 700, master_ui, state) ui.open() /datum/centcom_podlauncher/ui_data(mob/user) //Sends info about the pod to the UI. diff --git a/code/modules/cargo/console.dm b/code/modules/cargo/console.dm index e8bf847b499..c07abe8f104 100644 --- a/code/modules/cargo/console.dm +++ b/code/modules/cargo/console.dm @@ -68,7 +68,7 @@ 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, "cargo", name, ui_x, ui_y, master_ui, state) + ui = new(user, src, ui_key, "Cargo", name, ui_x, ui_y, master_ui, state) ui.open() /obj/machinery/computer/cargo/ui_data() diff --git a/code/modules/cargo/exports/large_objects.dm b/code/modules/cargo/exports/large_objects.dm index 9373e6b8514..69291461a93 100644 --- a/code/modules/cargo/exports/large_objects.dm +++ b/code/modules/cargo/exports/large_objects.dm @@ -139,4 +139,5 @@ worth += gases[/datum/gas/tritium][MOLES]*5 worth += gases[/datum/gas/pluoxium][MOLES]*5 worth += gases[/datum/gas/freon][MOLES]*15 + worth += gases[/datum/gas/hydrogen][MOLES]*25 return worth diff --git a/code/modules/cargo/exports/materials.dm b/code/modules/cargo/exports/materials.dm index a79123591c8..34cb5b8674e 100644 --- a/code/modules/cargo/exports/materials.dm +++ b/code/modules/cargo/exports/materials.dm @@ -107,3 +107,9 @@ message = "cm3 of Hot Ice" material_id = /datum/material/hot_ice export_types = /obj/item/stack/sheet/hot_ice + +/datum/export/material/metal_hydrogen + cost = 550 + unit_name = "of metallic hydrogen" + material_id = /datum/material/metalhydrogen + export_types = /obj/item/stack/sheet/mineral/metal_hydrogen diff --git a/code/modules/cargo/exports/sheets.dm b/code/modules/cargo/exports/sheets.dm index ef779eb3c73..93b60c7b880 100644 --- a/code/modules/cargo/exports/sheets.dm +++ b/code/modules/cargo/exports/sheets.dm @@ -99,6 +99,11 @@ unit_name = "cable piece" export_types = list(/obj/item/stack/cable_coil) +/datum/export/stack/ammonia_crystals + cost = 25 + unit_name = "of ammonia crystal" + export_types = list(/obj/item/stack/ammonia_crystals) + // Weird Stuff /datum/export/stack/abductor diff --git a/code/modules/cargo/expressconsole.dm b/code/modules/cargo/expressconsole.dm index af01a824684..440c0dcbcd4 100644 --- a/code/modules/cargo/expressconsole.dm +++ b/code/modules/cargo/expressconsole.dm @@ -91,7 +91,7 @@ /obj/machinery/computer/cargo/express/ui_interact(mob/living/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) // Remember to use the appropriate state. ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if(!ui) - ui = new(user, src, ui_key, "cargo_express", name, ui_x, ui_y, master_ui, state) + ui = new(user, src, ui_key, "CargoExpress", name, ui_x, ui_y, master_ui, state) ui.open() /obj/machinery/computer/cargo/express/ui_data(mob/user) diff --git a/code/modules/cargo/packs.dm b/code/modules/cargo/packs.dm index 2c01ac1d231..eb0b0a9efa5 100644 --- a/code/modules/cargo/packs.dm +++ b/code/modules/cargo/packs.dm @@ -2538,7 +2538,7 @@ /datum/supply_pack/misc/religious_supplies name = "Religious Supplies Crate" desc = "Keep your local chaplain happy and well-supplied, lest they call down judgement upon your cargo bay. Contains two bottles of holywater, bibles, chaplain robes, and burial garmets." - cost = 4000 // it costs so much because the Space Church is ran by Space Jews + cost = 4000 // it costs so much because the Space Church needs funding to build a cathedral contains = list(/obj/item/reagent_containers/food/drinks/bottle/holywater, /obj/item/reagent_containers/food/drinks/bottle/holywater, /obj/item/storage/book/bible/booze, diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 62f42ecf1fa..18768d1135c 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -659,35 +659,40 @@ GLOBAL_LIST_EMPTY(preferences_datums) dat += "Hide Dead Chat: [(chat_toggles & CHAT_DEAD)?"Shown":"Hidden"]
" dat += "Hide Radio Messages: [(chat_toggles & CHAT_RADIO)?"Shown":"Hidden"]
" dat += "Hide Prayers: [(chat_toggles & CHAT_PRAYER)?"Shown":"Hidden"]
" + dat += "Ignore Being Summoned as Cult Ghost: [(toggles & ADMIN_IGNORE_CULT_GHOST)?"Don't Allow Being Summoned":"Allow Being Summoned"]
" if(CONFIG_GET(flag/allow_admin_asaycolor)) dat += "
" dat += "ASAY Color:     Change
" //deadmin dat += "

Deadmin While Playing

" - if(CONFIG_GET(flag/auto_deadmin_players)) + var/timegate = CONFIG_GET(number/auto_deadmin_timegate) + if(timegate) + dat += "Noted roles will automatically deadmin during the first [FLOOR(timegate / 600, 1)] minutes of the round, and will defer to individual preferences after.
" + + if(CONFIG_GET(flag/auto_deadmin_players) && !timegate) dat += "Always Deadmin: FORCED
" else - dat += "Always Deadmin: [(toggles & DEADMIN_ALWAYS)?"Enabled":"Disabled"]
" + dat += "Always Deadmin: [timegate ? "(Time Locked) " : ""][(toggles & DEADMIN_ALWAYS)?"Enabled":"Disabled"]
" if(!(toggles & DEADMIN_ALWAYS)) dat += "
" - if(!CONFIG_GET(flag/auto_deadmin_antagonists)) - dat += "As Antag: [(toggles & DEADMIN_ANTAGONIST)?"Deadmin":"Keep Admin"]
" + if(!CONFIG_GET(flag/auto_deadmin_antagonists) || (CONFIG_GET(flag/auto_deadmin_antagonists) && !timegate)) + dat += "As Antag: [timegate ? "(Time Locked) " : ""][(toggles & DEADMIN_ANTAGONIST)?"Deadmin":"Keep Admin"]
" else dat += "As Antag: FORCED
" - if(!CONFIG_GET(flag/auto_deadmin_heads)) - dat += "As Command: [(toggles & DEADMIN_POSITION_HEAD)?"Deadmin":"Keep Admin"]
" + if(!CONFIG_GET(flag/auto_deadmin_heads) || (CONFIG_GET(flag/auto_deadmin_heads) && !timegate)) + dat += "As Command: [timegate ? "(Time Locked) " : ""][(toggles & DEADMIN_POSITION_HEAD)?"Deadmin":"Keep Admin"]
" else dat += "As Command: FORCED
" - if(!CONFIG_GET(flag/auto_deadmin_security)) - dat += "As Security: [(toggles & DEADMIN_POSITION_SECURITY)?"Deadmin":"Keep Admin"]
" + if(!CONFIG_GET(flag/auto_deadmin_security) || (CONFIG_GET(flag/auto_deadmin_security) && !timegate)) + dat += "As Security: [timegate ? "(Time Locked) " : ""][(toggles & DEADMIN_POSITION_SECURITY)?"Deadmin":"Keep Admin"]
" else dat += "As Security: FORCED
" - if(!CONFIG_GET(flag/auto_deadmin_silicons)) - dat += "As Silicon: [(toggles & DEADMIN_POSITION_SILICON)?"Deadmin":"Keep Admin"]
" + if(!CONFIG_GET(flag/auto_deadmin_silicons) || (CONFIG_GET(flag/auto_deadmin_silicons) && !timegate)) + dat += "As Silicon: [timegate ? "(Time Locked) " : ""][(toggles & DEADMIN_POSITION_SILICON)?"Deadmin":"Keep Admin"]
" else dat += "As Silicon: FORCED
" @@ -1613,6 +1618,8 @@ GLOBAL_LIST_EMPTY(preferences_datums) toggles ^= DEADMIN_POSITION_SECURITY if("toggle_deadmin_silicon") toggles ^= DEADMIN_POSITION_SILICON + if("toggle_ignore_cult_ghost") + toggles ^= ADMIN_IGNORE_CULT_GHOST if("be_special") diff --git a/code/modules/clothing/suits/jobs.dm b/code/modules/clothing/suits/jobs.dm index dc394d54bd1..160a936cdfa 100644 --- a/code/modules/clothing/suits/jobs.dm +++ b/code/modules/clothing/suits/jobs.dm @@ -10,7 +10,7 @@ item_state = "apron" blood_overlay_type = "armor" body_parts_covered = CHEST|GROIN - allowed = list(/obj/item/reagent_containers/spray/plantbgone, /obj/item/plant_analyzer, /obj/item/seeds, /obj/item/reagent_containers/glass/bottle, /obj/item/reagent_containers/glass/beaker, /obj/item/cultivator, /obj/item/reagent_containers/spray/pestspray, /obj/item/hatchet, /obj/item/storage/bag/plants) + allowed = list(/obj/item/reagent_containers/spray/plantbgone, /obj/item/plant_analyzer, /obj/item/seeds, /obj/item/reagent_containers/glass/bottle, /obj/item/reagent_containers/glass/beaker, /obj/item/cultivator, /obj/item/reagent_containers/spray/pestspray, /obj/item/hatchet, /obj/item/storage/bag/plants, /obj/item/graft, /obj/item/secateurs, /obj/item/geneshears) /obj/item/clothing/suit/apron/waders name = "horticultural waders" diff --git a/code/modules/events/anomaly.dm b/code/modules/events/anomaly.dm index c0350b63b1a..6f8355564a9 100644 --- a/code/modules/events/anomaly.dm +++ b/code/modules/events/anomaly.dm @@ -23,7 +23,8 @@ /area/solar, /area/holodeck, /area/shuttle, - /area/maintenance) + /area/maintenance, + /area/science/test_area) ) //Subtypes from the above that actually should explode. diff --git a/code/modules/events/pirates.dm b/code/modules/events/pirates.dm index a856efc601a..0db4cde1d4a 100644 --- a/code/modules/events/pirates.dm +++ b/code/modules/events/pirates.dm @@ -291,7 +291,7 @@ 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, "cargo_hold_terminal", name, ui_x, ui_y, master_ui, state) + ui = new(user, src, ui_key, "CargoHoldTerminal", name, ui_x, ui_y, master_ui, state) ui.open() /obj/machinery/computer/piratepad_control/ui_data(mob/user) diff --git a/code/modules/food_and_drinks/kitchen_machinery/grill.dm b/code/modules/food_and_drinks/kitchen_machinery/grill.dm index 170650be99e..ded8aba5be5 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/grill.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/grill.dm @@ -42,13 +42,18 @@ return ..() if(istype(I, /obj/item/reagent_containers)) if(istype(I, /obj/item/reagent_containers/food) && !istype(I, /obj/item/reagent_containers/food/drinks)) - if(HAS_TRAIT(I, TRAIT_NODROP) || (I.item_flags & (ABSTRACT | DROPDEL))) + var/obj/item/reagent_containers/food/food_item = I + if(HAS_TRAIT(food_item, TRAIT_NODROP) || (food_item.item_flags & (ABSTRACT | DROPDEL))) return ..() + else if(food_item.foodtype & GRILLED) + to_chat(user, "[food_item] has already been grilled!") + return else if(!grill_fuel) to_chat(user, "There is not enough fuel!") return - else if(!grilled_item && user.transferItemToLoc(I, src)) - grilled_item = I + else if(!grilled_item && user.transferItemToLoc(food_item, src)) + grilled_item = food_item + grilled_item.foodtype |= GRILLED to_chat(user, "You put the [grilled_item] on [src].") update_icon() grill_loop.start() diff --git a/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm b/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm index 033a9729f32..1345599e4c2 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm @@ -136,7 +136,7 @@ /obj/machinery/smartfridge/proc/accept_check(obj/item/O) - if(istype(O, /obj/item/reagent_containers/food/snacks/grown/) || istype(O, /obj/item/seeds/) || istype(O, /obj/item/grown/)) + if(istype(O, /obj/item/reagent_containers/food/snacks/grown/) || istype(O, /obj/item/seeds/) || istype(O, /obj/item/grown/) || istype(O, /obj/item/graft/)) return TRUE return FALSE @@ -165,7 +165,7 @@ /obj/machinery/smartfridge/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, "smartvend", name, ui_x, ui_y, master_ui, state) + ui = new(user, src, ui_key, "SmartVend", name, ui_x, ui_y, master_ui, state) ui.set_autoupdate(FALSE) ui.open() diff --git a/code/modules/holiday/holidays.dm b/code/modules/holiday/holidays.dm index f64c5311fd5..0cf4e664a0e 100644 --- a/code/modules/holiday/holidays.dm +++ b/code/modules/holiday/holidays.dm @@ -1,5 +1,5 @@ /datum/holiday - var/name = "Bugsgiving" + var/name = "If you see this the holiday calendar code is broken" var/begin_day = 1 var/begin_month = 0 @@ -622,7 +622,7 @@ Since Ramadan is an entire month that lasts 29.5 days on average, the start and return "Happy National Hot Dog Day!" /datum/holiday/hebrew - name = "Jewish Bugsgiving" + name = "If you see this the Hebrew holiday calendar code is broken" /datum/holiday/hebrew/shouldCelebrate(dd, mm, yy, ww, ddd) var/datum/hebrew_calendar/cal = new /datum/hebrew_calendar() diff --git a/code/modules/holodeck/computer.dm b/code/modules/holodeck/computer.dm index cbb7abf67df..e30eb171a08 100644 --- a/code/modules/holodeck/computer.dm +++ b/code/modules/holodeck/computer.dm @@ -84,7 +84,7 @@ /obj/machinery/computer/holodeck/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, "holodeck", name, ui_x, ui_y, master_ui, state) + ui = new(user, src, ui_key, "Holodeck", name, ui_x, ui_y, master_ui, state) ui.open() /obj/machinery/computer/holodeck/ui_data(mob/user) diff --git a/code/modules/hydroponics/grafts.dm b/code/modules/hydroponics/grafts.dm index b3cfbb825c8..db05ae80304 100644 --- a/code/modules/hydroponics/grafts.dm +++ b/code/modules/hydroponics/grafts.dm @@ -35,7 +35,7 @@ /obj/item/graft/proc/get_graft_text() var/text = "- Plant Graft -\n" if(parent_seed) - text += "- Parent Plant Name:[parent_seed.plantname] -\n" + text += "- Parent Plant: [parent_seed.plantname] -\n" if(stored_trait) - text += "- Graftable Traits:[stored_trait.get_name()] -\n" + text += "- Graftable Traits: [stored_trait.get_name()] -\n" return text diff --git a/code/modules/hydroponics/grown.dm b/code/modules/hydroponics/grown.dm index 32a0a1272c3..15f9c0c970e 100644 --- a/code/modules/hydroponics/grown.dm +++ b/code/modules/hydroponics/grown.dm @@ -66,17 +66,20 @@ /obj/item/reagent_containers/food/snacks/grown/attackby(obj/item/O, mob/user, params) ..() if (istype(O, /obj/item/plant_analyzer)) + var/obj/item/plant_analyzer/P_analyzer = O var/msg = "*---------*\n This is \a [src].\n" - if(seed) + if(seed && P_analyzer.scan_mode == 0) msg += seed.get_analyzer_text() var/reag_txt = "" - if(seed) + if(seed && P_analyzer.scan_mode == 1) + msg += "
*Plant Reagents:*" for(var/reagent_id in seed.reagents_add) var/datum/reagent/R = GLOB.chemical_reagents_list[reagent_id] var/amt = reagents.get_reagent_amount(reagent_id) reag_txt += "\n- [R.name]: [amt]" if(reag_txt) + msg += "
*---------*" msg += reag_txt msg += "
*---------*" to_chat(user, msg) diff --git a/code/modules/hydroponics/hydroitemdefines.dm b/code/modules/hydroponics/hydroitemdefines.dm index 59a3769cfe6..98491695630 100644 --- a/code/modules/hydroponics/hydroitemdefines.dm +++ b/code/modules/hydroponics/hydroitemdefines.dm @@ -1,7 +1,11 @@ +//Both available scanning modes for the plant analyzer. +#define SCANMODE_STATS 0 +#define SCANMODE_CHEMICALS 1 + // Plant analyzer /obj/item/plant_analyzer name = "plant analyzer" - desc = "A scanner used to evaluate a plant's various areas of growth." + desc = "A scanner used to evaluate a plant's various areas of growth, and genetic traits." icon = 'icons/obj/device.dmi' icon_state = "hydro" item_state = "analyzer" @@ -10,6 +14,12 @@ w_class = WEIGHT_CLASS_TINY slot_flags = ITEM_SLOT_BELT custom_materials = list(/datum/material/iron=30, /datum/material/glass=20) + var/scan_mode = SCANMODE_STATS + +/obj/item/plant_analyzer/attack_self(mob/user) + . = ..() + scan_mode = !scan_mode + to_chat(user, "You switch [src] to [scan_mode == SCANMODE_CHEMICALS ? "scan for chemical reagents and traits" : "scan for plant growth statistics"].") // ************************************* // Hydroponics Tools diff --git a/code/modules/hydroponics/hydroponics.dm b/code/modules/hydroponics/hydroponics.dm index a1c23480c67..de793e1fc25 100644 --- a/code/modules/hydroponics/hydroponics.dm +++ b/code/modules/hydroponics/hydroponics.dm @@ -64,6 +64,7 @@ //ALRIGHT YOU DEGENERATES. YOU HAD REAGENT HOLDERS FOR AT LEAST 4 YEARS AND NONE OF YOU MADE HYDROPONICS TRAYS HOLD NUTRIENT CHEMS INSTEAD OF USING "Points". //SO HERE LIES THE "nutrilevel" VAR. IT'S DEAD AND I PUT IT OUT OF IT'S MISERY. USE "reagents" INSTEAD. ~ArcaneMusic, accept no substitutes. create_reagents(20) + reagents.add_reagent(/datum/reagent/plantnutriment/eznutriment, 10) //Half filled nutrient trays for dirt trays to have more to grow with in prison/lavaland. . = ..() @@ -135,6 +136,11 @@ mutate() else if(istype(Proj , /obj/projectile/energy/florayield)) return myseed.bullet_act(Proj) + else if(istype(Proj , /obj/projectile/energy/florarevolution)) + if(myseed) + if(myseed.mutatelist.len > 0) + myseed.instability = (myseed.instability/2) + mutatespecie() else return ..() @@ -213,10 +219,10 @@ // Too much toxins cause harm, but when the plant drinks the contaiminated water, the toxins disappear slowly if(toxic >= 40 && toxic < 80) adjustHealth(-1 / rating) - adjustToxic(-rand(1,10) / rating) + adjustToxic(-rating * 2) else if(toxic >= 80) // I don't think it ever gets here tbh unless above is commented out adjustHealth(-3) - adjustToxic(-rand(1,10) / rating) + adjustToxic(-rating *3) //Pests & Weeds////////////////////////////////////////////////////////// @@ -254,19 +260,18 @@ pollinate() //This is where stability mutations exist now. - switch(myseed.instability) - if(100 to 80) - mutate(0, 0, 0, 0, 0, 0, 0, 2, 0) //Exceedingly low odds of gaining a trait. - if(79 to 60) - if(prob((myseed.instability)/2) && !self_sustaining) - mutatespecie() - myseed.instability = myseed.instability/2 - if(40 to 59) - if(prob(40)) - hardmutate() - if(20 to 39) - if(prob(40)) - mutate() + if(myseed.instability >= 80) + mutate(0, 0, 0, 0, 0, 0, 0, 5, 0) //Exceedingly low odds of gaining a trait. + if(myseed.instability >= 60) + if(prob((myseed.instability)/2) && !self_sustaining) //Minimum 30%, Maximum 50% chance of mutating every age tick when not on autogrow. + mutatespecie() + myseed.instability = myseed.instability/2 + if(myseed.instability >= 40) + if(prob(myseed.instability)) + hardmutate() + if(myseed.instability >= 20 ) + if(prob(myseed.instability)) + mutate() //Health & Age/////////////////////////////////////////////////////////// @@ -512,13 +517,18 @@ */ /obj/machinery/hydroponics/proc/pollinate(var/range = 1) for(var/obj/machinery/hydroponics/T in oview(src, range)) + //Here is where we check for window blocking. + if(!Adjacent(T) && range <= 1) + continue if(T.myseed && !T.dead) T.myseed.potency = round(clamp((T.myseed.potency+(1/10)*(myseed.potency-T.myseed.potency)),0,100)) T.myseed.instability = round(clamp((T.myseed.instability+(1/10)*(myseed.instability-T.myseed.instability)),0,100)) T.myseed.yield = round(clamp((T.myseed.yield+(1/2)*(myseed.yield-T.myseed.yield)),0,10)) if(myseed.instability >= 20 && prob(70) && T.myseed.reagents_add) - var/datum/reagent/picked_reagent = (pick(T.myseed.reagents_add)) - var/datum/plant_gene/reagent/reagent_gene = new /datum/plant_gene/reagent(picked_reagent, 0.05) //I cannot figure out how to copy over the keyed value from the reagents_add list so for now this works, skog you'll want to fix this before merge + var/list/datum/plant_gene/reagent/possible_reagents = list() + for(var/datum/plant_gene/reagent/reag in T.myseed.genes) + possible_reagents += reag + var/datum/plant_gene/reagent/reagent_gene = pick(possible_reagents) //Let this serve as a lession to delete your WIP comments before merge. if(reagent_gene.can_add(myseed)) myseed.genes += reagent_gene myseed.reagents_from_genes() @@ -553,7 +563,7 @@ to_chat(user, "[reagent_source] is empty!") return 1 - if(reagents.total_volume >= reagents.maximum_volume) + if(reagents.total_volume >= reagents.maximum_volume && !reagent_source.reagents.has_reagent(/datum/reagent/water, 1)) to_chat(user, "[src] is full.") return @@ -602,13 +612,14 @@ //cause I don't want to feel like im juggling 15 tamagotchis and I can get to my real work of ripping flooring apart in hopes of validating my life choices of becoming a space-gardener //This was originally in apply_chemicals, but due to apply_chemicals only holding nutrients, we handle it here now. if(reagent_source.reagents.has_reagent(/datum/reagent/water, 1)) - adjustWater(round(reagent_source.reagents.get_reagent_amount(/datum/reagent/water)/trays.len)) - reagent_source.reagents.remove_reagent(/datum/reagent/water, reagent_source.reagents.get_reagent_amount(/datum/reagent/water)/trays.len) - else - reagent_source.reagents.trans_to(reagents, split, transfered_by = user) + H.adjustWater(round(reagent_source.reagents.get_reagent_amount(/datum/reagent/water)/(trays.len))) + reagent_source.reagents.remove_reagent(/datum/reagent/water, reagent_source.reagents.get_reagent_amount(/datum/reagent/water)/(trays.len)) + reagent_source.reagents.trans_to(H.reagents, split, transfered_by = user) if(istype(reagent_source, /obj/item/reagent_containers/food/snacks) || istype(reagent_source, /obj/item/reagent_containers/pill)) qdel(reagent_source) lastuser = user + H.update_icon() + return 1 H.update_icon() if(reagent_source) // If the source wasn't composted and destroyed reagent_source.update_icon() @@ -634,12 +645,21 @@ return else if(istype(O, /obj/item/plant_analyzer)) + var/obj/item/plant_analyzer/P_analyzer = O if(myseed) - to_chat(user, "*** [myseed.plantname] ***" ) - to_chat(user, "- Plant Age: [age]") - var/list/text_string = myseed.get_analyzer_text() - if(text_string) - to_chat(user, text_string) + if(P_analyzer.scan_mode == 0) + to_chat(user, "*** [myseed.plantname] ***" ) + to_chat(user, "- Plant Age: [age]") + var/list/text_string = myseed.get_analyzer_text() + if(text_string) + to_chat(user, text_string) + to_chat(user, "*---------*") + if(myseed.reagents_add && P_analyzer.scan_mode == 1) + to_chat(user, "- Plant Reagents -") + to_chat(user, "*---------*") + for(var/datum/plant_gene/reagent/G in myseed.genes) + to_chat(user, "- [G.get_name()] -") + to_chat(user, "*---------*") else to_chat(user, "No plant found.") to_chat(user, "- Weed level: [weedlevel] / 10") @@ -678,6 +698,7 @@ snip.parent_seed = myseed myseed.grafted = TRUE adjustHealth(-5) + snip.name += " ([snip.parent_seed.plantname])" return else if(istype(O, /obj/item/geneshears)) @@ -707,7 +728,7 @@ break myseed.reagents_from_genes() adjustHealth(-15) - to_chat(user, "You carefully shear the genes off of the [myseed.plantname], but leaving the plant looking a bit weak.") + to_chat(user, "You carefully shear the genes off of the [myseed.plantname], leaving the plant looking weaker.") update_icon() return @@ -775,6 +796,34 @@ else if(istype(O, /obj/item/storage/part_replacer)) RefreshParts() return + else if(istype(O, /obj/item/gun/energy/floragun)) + var/obj/item/gun/energy/floragun/flowergun = O + if(flowergun.cell.charge < flowergun.cell.maxcharge) + to_chat(user, "[flowergun] must be fully charged to lock in a mutation!") + return + if(!myseed) + to_chat(user, "[src] is empty!") + return + if(myseed.endurance <= 20) + to_chat(user, "[myseed.plantname] isn't hardy enough to sequence it's mutation!") + return + if(!myseed.mutatelist) + to_chat(user, "[myseed.plantname] has nothing else to mutate into!") + return + else + var/list/fresh_mut_list = list() + for(var/muties in myseed.mutatelist) + var/obj/item/seeds/another_mut = new muties + fresh_mut_list[another_mut.plantname] = muties + var/locked_mutation = (input(user, "Select a mutation to lock.", "Plant Mutation Locks") as null|anything in sortList(fresh_mut_list)) + if(!user.canUseTopic(src, BE_CLOSE) || !locked_mutation) + return + myseed.mutatelist = list(fresh_mut_list[locked_mutation]) + myseed.endurance = (myseed.endurance/2) + flowergun.cell.use(flowergun.cell.charge) + flowergun.update_overlays() + to_chat(user, "[myseed.plantname]'s mutation was set to [locked_mutation], depleting [flowergun]'s cell!") + return else return ..() diff --git a/code/modules/hydroponics/seeds.dm b/code/modules/hydroponics/seeds.dm index f3e9e434af8..4850f54bf7c 100644 --- a/code/modules/hydroponics/seeds.dm +++ b/code/modules/hydroponics/seeds.dm @@ -97,6 +97,10 @@ /obj/item/seeds/examine(mob/user) . = ..() . += "Use a pen on it to rename it or change its description." + if(reagents_add && user.can_see_reagents()) + . += "- Plant Reagents -" + for(var/datum/plant_gene/reagent/G in genes) + . += "- [G.get_name()] -" /obj/item/seeds/proc/Copy() var/obj/item/seeds/S = new type(null, 1) @@ -151,7 +155,10 @@ adjust_weed_rate(rand(-wrmut, wrmut)) adjust_weed_chance(rand(-wcmut, wcmut)) if(prob(traitmut)) - add_random_traits(1, 1) + if(prob(50)) + add_random_traits(1, 1) + else + add_random_reagents(1, 1) @@ -436,9 +443,19 @@ /obj/item/seeds/attackby(obj/item/O, mob/user, params) if (istype(O, /obj/item/plant_analyzer)) to_chat(user, "*---------*\n This is \a [src].") - var/text = get_analyzer_text() - if(text) - to_chat(user, "[text]") + var/text + var/obj/item/plant_analyzer/P_analyzer = O + if(P_analyzer.scan_mode == 0) + text = get_analyzer_text() + if(text) + to_chat(user, "[text]") + if(reagents_add && P_analyzer.scan_mode == 1) + to_chat(user, "- Plant Reagents -") + to_chat(user, "*---------*") + for(var/datum/plant_gene/reagent/G in genes) + to_chat(user, "- [G.get_name()] -") + to_chat(user, "*---------*") + return diff --git a/code/modules/jobs/job_types/ai.dm b/code/modules/jobs/job_types/ai.dm index 0eca408139e..ccd18dd72a6 100644 --- a/code/modules/jobs/job_types/ai.dm +++ b/code/modules/jobs/job_types/ai.dm @@ -35,7 +35,10 @@ H.forceMove(lateJoinCore.loc) qdel(lateJoinCore) var/mob/living/silicon/ai/AI = H - AI.apply_pref_name("ai", M.client) //If this runtimes oh well jobcode is fucked. + if(SSticker.anonymousnames) + AI.fully_replace_character_name(AI.real_name, anonymous_ai_name(is_ai = TRUE)) + else + AI.apply_pref_name("ai", M.client) //If this runtimes oh well jobcode is fucked. //what is this no energy attitude man AI.set_core_display_icon(null, M.client) //we may have been created after our borg diff --git a/code/modules/language/language_menu.dm b/code/modules/language/language_menu.dm index a7ce211a187..0df7c01fca8 100644 --- a/code/modules/language/language_menu.dm +++ b/code/modules/language/language_menu.dm @@ -11,7 +11,7 @@ /datum/language_menu/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.language_menu_state) ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if(!ui) - ui = new(user, src, ui_key, "language_menu", "Language Menu", 700, 600, master_ui, state) + ui = new(user, src, ui_key, "LanguageMenu", "Language Menu", 700, 600, master_ui, state) ui.open() /datum/language_menu/ui_data(mob/user) diff --git a/code/modules/library/lib_codex_gigas.dm b/code/modules/library/lib_codex_gigas.dm index 598d375888c..e7bb86ff799 100644 --- a/code/modules/library/lib_codex_gigas.dm +++ b/code/modules/library/lib_codex_gigas.dm @@ -95,7 +95,7 @@ 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, "codex_gigas", name, 450, 450, master_ui, state) + ui = new(user, src, ui_key, "CodexGigas", name, 450, 450, master_ui, state) ui.open() /obj/item/book/codex_gigas/ui_data(mob/user) diff --git a/code/modules/library/soapstone.dm b/code/modules/library/soapstone.dm index 8c37a8645b7..3f1ea429e54 100644 --- a/code/modules/library/soapstone.dm +++ b/code/modules/library/soapstone.dm @@ -207,7 +207,7 @@ /obj/structure/chisel_message/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.always_state) ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if(!ui) - ui = new(user, src, ui_key, "engraved_message", name, 600, 300, master_ui, state) + ui = new(user, src, ui_key, "EngravedMessage", name, 600, 300, master_ui, state) ui.open() /obj/structure/chisel_message/ui_data(mob/user) diff --git a/code/modules/mining/laborcamp/laborstacker.dm b/code/modules/mining/laborcamp/laborstacker.dm index d91d1c3af22..60a34385841 100644 --- a/code/modules/mining/laborcamp/laborstacker.dm +++ b/code/modules/mining/laborcamp/laborstacker.dm @@ -39,7 +39,7 @@ GLOBAL_LIST(labor_sheet_values) 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, "labor_claim_console", name, ui_x, ui_y, master_ui, state) + ui = new(user, src, ui_key, "LaborClaimConsole", name, ui_x, ui_y, master_ui, state) ui.open() /obj/machinery/mineral/labor_claim_console/ui_data(mob/user) diff --git a/code/modules/mining/machine_redemption.dm b/code/modules/mining/machine_redemption.dm index 731826bf4bc..2af7e26ea7f 100644 --- a/code/modules/mining/machine_redemption.dm +++ b/code/modules/mining/machine_redemption.dm @@ -205,7 +205,7 @@ /obj/machinery/mineral/ore_redemption/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, "ore_redemption_machine", "Ore Redemption Machine", ui_x, ui_y, master_ui, state) + ui = new(user, src, ui_key, "OreRedemptionMachine", "Ore Redemption Machine", ui_x, ui_y, master_ui, state) ui.open() /obj/machinery/mineral/ore_redemption/ui_data(mob/user) diff --git a/code/modules/mining/machine_vending.dm b/code/modules/mining/machine_vending.dm index 8743d26b980..57961492813 100644 --- a/code/modules/mining/machine_vending.dm +++ b/code/modules/mining/machine_vending.dm @@ -99,7 +99,7 @@ if(!ui) var/datum/asset/assets = get_asset_datum(/datum/asset/spritesheet/vending) assets.send(user) - ui = new(user, src, ui_key, "mining_vendor", name, ui_x, ui_y, master_ui, state) + ui = new(user, src, ui_key, "MiningVendor", name, ui_x, ui_y, master_ui, state) ui.open() /obj/machinery/mineral/equipment_vendor/ui_static_data(mob/user) diff --git a/code/modules/mining/mint.dm b/code/modules/mining/mint.dm index e5e0ee6cb48..a772ead7c3b 100644 --- a/code/modules/mining/mint.dm +++ b/code/modules/mining/mint.dm @@ -82,24 +82,23 @@ 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, "mint", name, ui_x, ui_y, master_ui, state) + ui = new(user, src, ui_key, "Mint", name, ui_x, ui_y, master_ui, state) ui.open() /obj/machinery/mineral/mint/ui_data() var/list/data = list() - var/datum/component/material_container/materials = GetComponent(/datum/component/material_container) + data["inserted_materials"] = list() + data["chosen_material"] = null + var/datum/component/material_container/materials = GetComponent(/datum/component/material_container) for(var/datum/material/inserted_material in materials.materials) var/amount = materials.get_material_amount(inserted_material) - if(!amount) continue - data["inserted_materials"] += list(list( "material" = inserted_material.name, - "amount" = amount + "amount" = amount, )) - if(chosen == inserted_material) data["chosen_material"] = inserted_material.name @@ -109,10 +108,10 @@ return data; /obj/machinery/mineral/mint/ui_act(action, params, datum/tgui/ui) - . = ..() if(.) return +<<<<<<< HEAD switch(action) if ("startpress") @@ -130,6 +129,24 @@ for(var/datum/material/mat in materials.materials) if (params["material_name"] == mat.name) chosen = mat +======= + if(action == "startpress") + if (!processing) + produced_coins = 0 + processing = TRUE + begin_processing() + return TRUE + if (action == "stoppress") + processing = FALSE + end_processing() + return TRUE + if (action == "changematerial") + var/datum/component/material_container/materials = GetComponent(/datum/component/material_container) + for(var/datum/material/mat in materials.materials) + if (params["material_name"] == mat.name) + chosen = mat + return TRUE +>>>>>>> upstream/master /obj/machinery/mineral/mint/proc/create_coins() var/turf/T = get_step(src,output_dir) diff --git a/code/modules/mining/satchel_ore_boxdm.dm b/code/modules/mining/satchel_ore_boxdm.dm index 7463f8943da..10961cfa609 100644 --- a/code/modules/mining/satchel_ore_boxdm.dm +++ b/code/modules/mining/satchel_ore_boxdm.dm @@ -65,7 +65,7 @@ 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, "ore_box", name, ui_x, ui_y, master_ui, state) + ui = new(user, src, ui_key, "OreBox", name, ui_x, ui_y, master_ui, state) ui.open() /obj/structure/ore_box/ui_data() diff --git a/code/modules/mob/dead/new_player/new_player.dm b/code/modules/mob/dead/new_player/new_player.dm index 1d4886e6609..ad3ebb912fb 100644 --- a/code/modules/mob/dead/new_player/new_player.dm +++ b/code/modules/mob/dead/new_player/new_player.dm @@ -476,6 +476,7 @@ var/mob/living/carbon/human/H = new(loc) var/frn = CONFIG_GET(flag/force_random_names) + var/admin_anon_names = SSticker.anonymousnames if(!frn) frn = is_banned_from(ckey, "Appearance") if(QDELETED(src)) @@ -484,6 +485,10 @@ client.prefs.random_character() client.prefs.real_name = client.prefs.pref_species.random_name(gender,1) + if(admin_anon_names)//overrides random name because it achieves the same effect and is an admin enabled event tool + client.prefs.random_character() + client.prefs.real_name = anonymous_name(src) + var/is_antag if(mind in GLOB.pre_setup_antags) is_antag = TRUE diff --git a/code/modules/mob/dead/observer/notificationprefs.dm b/code/modules/mob/dead/observer/notificationprefs.dm index 6c1d76eaf3b..160abd57e1f 100644 --- a/code/modules/mob/dead/observer/notificationprefs.dm +++ b/code/modules/mob/dead/observer/notificationprefs.dm @@ -24,7 +24,7 @@ /datum/notificationpanel/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.observer_state) ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if(!ui) - ui = new(user, src, ui_key, "notificationpanel", "Notification Preferences", 270, 360, master_ui, state) + ui = new(user, src, ui_key, "NotificationPreferences", "Notification Preferences", 270, 360, master_ui, state) ui.open() /datum/notificationpanel/ui_data(mob/user) diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index 61c83085b18..f55339fa350 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -32,6 +32,7 @@ GLOBAL_VAR_INIT(observer_default_invisibility, INVISIBILITY_OBSERVER) var/ghost_hud_enabled = 1 //did this ghost disable the on-screen HUD? var/data_huds_on = 0 //Are data HUDs currently enabled? var/health_scan = FALSE //Are health scans currently enabled? + var/chem_scan = FALSE //Are chem scans currently enabled? var/gas_scan = FALSE //Are gas scans currently enabled? var/list/datahuds = list(DATA_HUD_SECURITY_ADVANCED, DATA_HUD_MEDICAL_ADVANCED, DATA_HUD_DIAGNOSTIC_ADVANCED) //list of data HUDs shown to ghosts. var/ghost_orbit = GHOST_ORBIT_CIRCLE @@ -723,6 +724,18 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp to_chat(src, "Health scan enabled.") health_scan = TRUE +/mob/dead/observer/verb/toggle_chem_scan() + set name = "Toggle Chem Scan" + set desc = "Toggles whether you scan living beings for chemicals and addictions on click" + set category = "Ghost" + + if(chem_scan) //remove old huds + to_chat(src, "Chem scan disabled.") + chem_scan = FALSE + else + to_chat(src, "Chem scan enabled.") + chem_scan = TRUE + /mob/dead/observer/verb/toggle_gas_scan() set name = "Toggle Gas Scan" set desc = "Toggles whether you analyze gas contents on click" diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index 4122aa37138..00b0eb87ec0 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -1694,6 +1694,8 @@ GLOBAL_LIST_EMPTY(roundstart_races) H.show_message("The radiation beam dissipates harmlessly through your body.") if(/obj/projectile/energy/florayield) H.show_message("The radiation beam dissipates harmlessly through your body.") + if(/obj/projectile/energy/florarevolution) + H.show_message("The radiation beam dissipates harmlessly through your body.") /datum/species/proc/bullet_act(obj/projectile/P, mob/living/carbon/human/H) // called before a projectile hit diff --git a/code/modules/mob/living/carbon/human/species_types/golems.dm b/code/modules/mob/living/carbon/human/species_types/golems.dm index 81cca37a37e..03a02559d53 100644 --- a/code/modules/mob/living/carbon/human/species_types/golems.dm +++ b/code/modules/mob/living/carbon/human/species_types/golems.dm @@ -1143,3 +1143,20 @@ /datum/species/golem/soviet/proc/handle_speech(datum/source, list/speech_args) playsound(source, 'sound/misc/Cyka Blyat.ogg', 25, FALSE) speech_args[SPEECH_MESSAGE] = "Cyka Blyat" + +/datum/species/golem/mhydrogen + name = "Metallic Hydrogen Golem" + id = "Metallic Hydrogen golem" + fixed_mut_color = "ddd" + info_text = "As a Metallic Hydrogen Golem, you were forged in the highest pressures and the highest heats. Your unique mineral makeup makes you immune to most types of damages." + prefix = "Metallic Hydrogen" + special_names = null + inherent_traits = list(TRAIT_NOFLASH, TRAIT_RESISTHEAT,TRAIT_NOBREATH,TRAIT_RESISTHIGHPRESSURE,TRAIT_NOFIRE,TRAIT_RADIMMUNE,TRAIT_NODISMEMBER,TRAIT_CHUNKYFINGERS) + +/datum/species/golem/mhydrogen/on_species_gain(mob/living/carbon/C, datum/species/old_species) + . = ..() + ADD_TRAIT(C, TRAIT_ANTIMAGIC, SPECIES_TRAIT) + +/datum/species/golem/mhydrogen/on_species_loss(mob/living/carbon/C) + REMOVE_TRAIT(C, TRAIT_ANTIMAGIC, SPECIES_TRAIT) + return ..() diff --git a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm index 06e1f98cd25..f3db121fe03 100644 --- a/code/modules/mob/living/carbon/human/species_types/jellypeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/jellypeople.dm @@ -267,7 +267,7 @@ ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if(!ui) - ui = new(user, src, ui_key, "slime_swap_body", name, 400, 400, master_ui, state) + ui = new(user, src, ui_key, "SlimeBodySwapper", name, 400, 400, master_ui, state) ui.open() /datum/action/innate/swap_body/ui_data(mob/user) diff --git a/code/modules/mob/living/carbon/human/species_types/podpeople.dm b/code/modules/mob/living/carbon/human/species_types/podpeople.dm index a79cd7e92c5..b5cf9b6968b 100644 --- a/code/modules/mob/living/carbon/human/species_types/podpeople.dm +++ b/code/modules/mob/living/carbon/human/species_types/podpeople.dm @@ -59,3 +59,8 @@ H.show_message("The radiation beam singes you!") if(/obj/projectile/energy/florayield) H.set_nutrition(min(H.nutrition+30, NUTRITION_LEVEL_FULL)) + if(/obj/projectile/energy/florarevolution) + H.show_message("The radiation beam leaves you feeling disoriented!") + H.Dizzy(15) + H.emote("flip") + H.emote("spin") diff --git a/code/modules/mob/living/silicon/ai/robot_control.dm b/code/modules/mob/living/silicon/ai/robot_control.dm index c09b93c621c..0eaea103f2a 100644 --- a/code/modules/mob/living/silicon/ai/robot_control.dm +++ b/code/modules/mob/living/silicon/ai/robot_control.dm @@ -23,7 +23,7 @@ datum/tgui/master_ui = null, datum/ui_state/state = GLOB.always_state) ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if(!ui) - ui = new(user, src, ui_key, "remote_robot_control", "Remote Robot Control", 500, 500, master_ui, state) + ui = new(user, src, ui_key, "RemoteRobotControl", "Remote Robot Control", 500, 500, master_ui, state) ui.open() /datum/robot_control/ui_data(mob/user) diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 675c2953644..706c3c891e1 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -229,9 +229,11 @@ var/changed_name = "" if(custom_name) changed_name = custom_name - if(changed_name == "" && C && C.prefs.custom_names["cyborg"] != DEFAULT_CYBORG_NAME) - if(apply_pref_name("cyborg", C)) - return //built in camera handled in proc + if(SSticker.anonymousnames) //only robotic renames will allow for anything other than the anonymous one + changed_name = anonymous_ai_name(is_ai = FALSE) + if(!changed_name && C && C.prefs.custom_names["cyborg"] != DEFAULT_CYBORG_NAME) + apply_pref_name("cyborg", C) + return //built in camera handled in proc if(!changed_name) changed_name = get_standard_name() diff --git a/code/modules/mob/living/simple_animal/bot/mulebot.dm b/code/modules/mob/living/simple_animal/bot/mulebot.dm index 5c1eac84b9a..8ee08e8b7db 100644 --- a/code/modules/mob/living/simple_animal/bot/mulebot.dm +++ b/code/modules/mob/living/simple_animal/bot/mulebot.dm @@ -176,7 +176,7 @@ 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, "mulebot", name, ui_x, ui_y, master_ui, state) + ui = new(user, src, ui_key, "Mule", name, ui_x, ui_y, master_ui, state) ui.open() /mob/living/simple_animal/bot/mulebot/ui_data(mob/user) diff --git a/code/modules/mob/living/simple_animal/hostile/carp.dm b/code/modules/mob/living/simple_animal/hostile/carp.dm index 501654a5c36..76bdb6009c3 100644 --- a/code/modules/mob/living/simple_animal/hostile/carp.dm +++ b/code/modules/mob/living/simple_animal/hostile/carp.dm @@ -103,14 +103,14 @@ add_overlay(base_dead_overlay) /mob/living/simple_animal/hostile/carp/proc/chomp_plastic() - var/obj/item/storage/cans/tasty_plastic = locate(/obj/item/storage/cans) in oview(src, 9) - if(tasty_plastic) - snack_distance = get_dist(src.loc,tasty_plastic.loc) - if(snack_distance <= 1) - src.visible_message("[src] gets its head stuck in [tasty_plastic], and gets cut breaking free from it!", "You try to avoid [tasty_plastic], but it looks so... delicious... Ow! It cuts the inside of your mouth!") - new /obj/effect/decal/cleanable/plastic(src.loc) - adjustBruteLoss(5) - qdel(tasty_plastic) + var/obj/item/storage/cans/tasty_plastic = locate(/obj/item/storage/cans) in view(1, src) + if(tasty_plastic && Adjacent(tasty_plastic)) + visible_message("[src] gets its head stuck in [tasty_plastic], and gets cut breaking free from it!", "You try to avoid [tasty_plastic], but it looks so... delicious... Ow! It cuts the inside of your mouth!") + + new /obj/effect/decal/cleanable/plastic(loc) + + adjustBruteLoss(5) + qdel(tasty_plastic) /mob/living/simple_animal/hostile/carp/Life() . = ..() diff --git a/code/modules/modular_computers/computers/item/computer_ui.dm b/code/modules/modular_computers/computers/item/computer_ui.dm index e75cef7db0f..82cb26e5a02 100644 --- a/code/modules/modular_computers/computers/item/computer_ui.dm +++ b/code/modules/modular_computers/computers/item/computer_ui.dm @@ -39,7 +39,7 @@ assets.send(user) assets = get_asset_datum(/datum/asset/simple/arcade) assets.send(user) - ui = new(user, src, ui_key, "ntos_main", "NtOS Main menu", 400, 500, master_ui, state) + ui = new(user, src, ui_key, "NtosMain", "NtOS Main menu", 400, 500, master_ui, state) ui.open() ui.set_autoupdate(state = 1) diff --git a/code/modules/modular_computers/file_system/programs/airestorer.dm b/code/modules/modular_computers/file_system/programs/airestorer.dm index d9ca5fab27e..4e9cd855772 100644 --- a/code/modules/modular_computers/file_system/programs/airestorer.dm +++ b/code/modules/modular_computers/file_system/programs/airestorer.dm @@ -5,10 +5,10 @@ extended_desc = "This program is capable of reconstructing damaged AI systems. Requires direct AI connection via intellicard slot." size = 12 requires_ntnet = FALSE - usage_flags = PROGRAM_CONSOLE + usage_flags = PROGRAM_CONSOLE | PROGRAM_LAPTOP transfer_access = ACCESS_HEADS available_on_ntnet = TRUE - tgui_id = "ntos_ai_restorer" + tgui_id = "NtosAiRestorer" ui_x = 370 ui_y = 400 /// Variable dictating if we are in the process of restoring the AI in the inserted intellicard diff --git a/code/modules/modular_computers/file_system/programs/alarm.dm b/code/modules/modular_computers/file_system/programs/alarm.dm index 4737f298c99..34daeff6ca9 100644 --- a/code/modules/modular_computers/file_system/programs/alarm.dm +++ b/code/modules/modular_computers/file_system/programs/alarm.dm @@ -7,7 +7,7 @@ requires_ntnet = 1 network_destination = "alarm monitoring network" size = 5 - tgui_id = "ntos_station_alert" + tgui_id = "NtosStationAlertConsole" ui_x = 315 ui_y = 500 diff --git a/code/modules/modular_computers/file_system/programs/antagonist/contract_uplink.dm b/code/modules/modular_computers/file_system/programs/antagonist/contract_uplink.dm index ffb9761743d..9c5fb36a871 100644 --- a/code/modules/modular_computers/file_system/programs/antagonist/contract_uplink.dm +++ b/code/modules/modular_computers/file_system/programs/antagonist/contract_uplink.dm @@ -8,7 +8,7 @@ available_on_ntnet = 0 unsendable = 1 undeletable = 1 - tgui_id = "synd_contract" + tgui_id = "SyndContractor" ui_x = 500 ui_y = 600 var/error = "" diff --git a/code/modules/modular_computers/file_system/programs/antagonist/dos.dm b/code/modules/modular_computers/file_system/programs/antagonist/dos.dm index 004b86ef81d..9dedc3810f9 100644 --- a/code/modules/modular_computers/file_system/programs/antagonist/dos.dm +++ b/code/modules/modular_computers/file_system/programs/antagonist/dos.dm @@ -7,7 +7,7 @@ requires_ntnet = TRUE available_on_ntnet = FALSE available_on_syndinet = TRUE - tgui_id = "ntos_net_dos" + tgui_id = "NtosNetDos" ui_x = 400 ui_y = 250 diff --git a/code/modules/modular_computers/file_system/programs/antagonist/revelation.dm b/code/modules/modular_computers/file_system/programs/antagonist/revelation.dm index 5b85e5a67bb..a3128150087 100644 --- a/code/modules/modular_computers/file_system/programs/antagonist/revelation.dm +++ b/code/modules/modular_computers/file_system/programs/antagonist/revelation.dm @@ -7,7 +7,7 @@ requires_ntnet = FALSE available_on_ntnet = FALSE available_on_syndinet = TRUE - tgui_id = "ntos_revelation" + tgui_id = "NtosRevelation" ui_x = 400 ui_y = 250 diff --git a/code/modules/modular_computers/file_system/programs/arcade.dm b/code/modules/modular_computers/file_system/programs/arcade.dm index ea38eca44c2..efd82a9d88a 100644 --- a/code/modules/modular_computers/file_system/programs/arcade.dm +++ b/code/modules/modular_computers/file_system/programs/arcade.dm @@ -6,7 +6,7 @@ requires_ntnet = FALSE network_destination = "arcade network" size = 6 - tgui_id = "ntos_arcade" + tgui_id = "NtosArcade" ui_x = 450 ui_y = 350 diff --git a/code/modules/modular_computers/file_system/programs/atmosscan.dm b/code/modules/modular_computers/file_system/programs/atmosscan.dm index 33d49849843..fe3833facd0 100644 --- a/code/modules/modular_computers/file_system/programs/atmosscan.dm +++ b/code/modules/modular_computers/file_system/programs/atmosscan.dm @@ -5,7 +5,7 @@ extended_desc = "A small built-in sensor reads out the atmospheric conditions around the device." network_destination = "atmos scan" size = 4 - tgui_id = "ntos_atmos" + tgui_id = "NtosAtmos" ui_x = 300 ui_y = 350 diff --git a/code/modules/modular_computers/file_system/programs/borg_monitor.dm b/code/modules/modular_computers/file_system/programs/borg_monitor.dm index 59c2ae85f99..e3e43dcf843 100644 --- a/code/modules/modular_computers/file_system/programs/borg_monitor.dm +++ b/code/modules/modular_computers/file_system/programs/borg_monitor.dm @@ -8,7 +8,7 @@ transfer_access = ACCESS_ROBOTICS network_destination = "cyborg remote monitoring" size = 5 - tgui_id = "ntos_cyborg_monitor" + tgui_id = "NtosCyborgRemoteMonitor" ui_x = 600 ui_y = 800 diff --git a/code/modules/modular_computers/file_system/programs/card.dm b/code/modules/modular_computers/file_system/programs/card.dm index 927f787e18d..eb7b60b0706 100644 --- a/code/modules/modular_computers/file_system/programs/card.dm +++ b/code/modules/modular_computers/file_system/programs/card.dm @@ -14,7 +14,7 @@ transfer_access = ACCESS_HEADS requires_ntnet = 0 size = 8 - tgui_id = "ntos_card" + tgui_id = "NtosCard" ui_x = 450 ui_y = 520 diff --git a/code/modules/modular_computers/file_system/programs/cargoship.dm b/code/modules/modular_computers/file_system/programs/cargoship.dm index e4acf46bd21..39543adfa57 100644 --- a/code/modules/modular_computers/file_system/programs/cargoship.dm +++ b/code/modules/modular_computers/file_system/programs/cargoship.dm @@ -5,7 +5,7 @@ extended_desc = "A combination printer/scanner app that enables modular computers to print barcodes for easy scanning and shipping." network_destination = "ship scanner" size = 6 - tgui_id = "ntos_shipping" + tgui_id = "NtosShipping" ui_x = 450 ui_y = 350 ///Account used for creating barcodes. diff --git a/code/modules/modular_computers/file_system/programs/configurator.dm b/code/modules/modular_computers/file_system/programs/configurator.dm index 2d60323d107..76da58ea11f 100644 --- a/code/modules/modular_computers/file_system/programs/configurator.dm +++ b/code/modules/modular_computers/file_system/programs/configurator.dm @@ -14,7 +14,7 @@ ui_y = 630 available_on_ntnet = 0 requires_ntnet = 0 - tgui_id = "ntos_configuration" + tgui_id = "NtosConfiguration" var/obj/item/modular_computer/movable = null diff --git a/code/modules/modular_computers/file_system/programs/crewmanifest.dm b/code/modules/modular_computers/file_system/programs/crewmanifest.dm index 4910febe2ff..662c867a39a 100644 --- a/code/modules/modular_computers/file_system/programs/crewmanifest.dm +++ b/code/modules/modular_computers/file_system/programs/crewmanifest.dm @@ -6,7 +6,7 @@ transfer_access = ACCESS_HEADS requires_ntnet = FALSE size = 4 - tgui_id = "ntos_crew_manifest" + tgui_id = "NtosCrewManifest" ui_x = 400 ui_y = 480 diff --git a/code/modules/modular_computers/file_system/programs/file_browser.dm b/code/modules/modular_computers/file_system/programs/file_browser.dm index 52ba479c049..aba826fce89 100644 --- a/code/modules/modular_computers/file_system/programs/file_browser.dm +++ b/code/modules/modular_computers/file_system/programs/file_browser.dm @@ -7,7 +7,7 @@ requires_ntnet = FALSE available_on_ntnet = FALSE undeletable = TRUE - tgui_id = "ntos_file_manager" + tgui_id = "NtosFileManager" var/open_file var/error diff --git a/code/modules/modular_computers/file_system/programs/jobmanagement.dm b/code/modules/modular_computers/file_system/programs/jobmanagement.dm index efeb8c7ab97..7b847c123e7 100644 --- a/code/modules/modular_computers/file_system/programs/jobmanagement.dm +++ b/code/modules/modular_computers/file_system/programs/jobmanagement.dm @@ -6,7 +6,7 @@ transfer_access = ACCESS_HEADS requires_ntnet = 0 size = 4 - tgui_id = "ntos_job_manager" + tgui_id = "NtosJobManager" ui_x = 400 ui_y = 620 diff --git a/code/modules/modular_computers/file_system/programs/ntdownloader.dm b/code/modules/modular_computers/file_system/programs/ntdownloader.dm index 5c793198ea9..352f13f3053 100644 --- a/code/modules/modular_computers/file_system/programs/ntdownloader.dm +++ b/code/modules/modular_computers/file_system/programs/ntdownloader.dm @@ -10,7 +10,7 @@ requires_ntnet_feature = NTNET_SOFTWAREDOWNLOAD available_on_ntnet = 0 ui_header = "downloader_finished.gif" - tgui_id = "ntos_net_downloader" + tgui_id = "NtosNetDownloader" ui_x = 480 ui_y = 735 diff --git a/code/modules/modular_computers/file_system/programs/ntmonitor.dm b/code/modules/modular_computers/file_system/programs/ntmonitor.dm index 1932f671f9b..7d6d89f32c4 100644 --- a/code/modules/modular_computers/file_system/programs/ntmonitor.dm +++ b/code/modules/modular_computers/file_system/programs/ntmonitor.dm @@ -7,7 +7,7 @@ requires_ntnet = TRUE required_access = ACCESS_NETWORK //NETWORK CONTROL IS A MORE SECURE PROGRAM. available_on_ntnet = TRUE - tgui_id = "ntos_net_monitor" + tgui_id = "NtosNetMonitor" /datum/computer_file/program/ntnetmonitor/ui_act(action, params) if(..()) diff --git a/code/modules/modular_computers/file_system/programs/ntnrc_client.dm b/code/modules/modular_computers/file_system/programs/ntnrc_client.dm index d8b3f96f42e..4ae5bd326b8 100644 --- a/code/modules/modular_computers/file_system/programs/ntnrc_client.dm +++ b/code/modules/modular_computers/file_system/programs/ntnrc_client.dm @@ -9,7 +9,7 @@ network_destination = "NTNRC server" ui_header = "ntnrc_idle.gif" available_on_ntnet = 1 - tgui_id = "ntos_net_chat" + tgui_id = "NtosNetChat" ui_x = 900 ui_y = 675 diff --git a/code/modules/modular_computers/file_system/programs/powermonitor.dm b/code/modules/modular_computers/file_system/programs/powermonitor.dm index 7ecdf63406c..d2d57b14470 100644 --- a/code/modules/modular_computers/file_system/programs/powermonitor.dm +++ b/code/modules/modular_computers/file_system/programs/powermonitor.dm @@ -11,7 +11,7 @@ requires_ntnet = 0 network_destination = "power monitoring system" size = 9 - tgui_id = "ntos_power_monitor" + tgui_id = "NtosPowerMonitor" ui_x = 550 ui_y = 700 diff --git a/code/modules/modular_computers/file_system/programs/robocontrol.dm b/code/modules/modular_computers/file_system/programs/robocontrol.dm index d4ebe4c0439..910f9233277 100644 --- a/code/modules/modular_computers/file_system/programs/robocontrol.dm +++ b/code/modules/modular_computers/file_system/programs/robocontrol.dm @@ -8,7 +8,7 @@ requires_ntnet = TRUE network_destination = "robotics control network" size = 12 - tgui_id = "ntos_robocontrol" + tgui_id = "NtosRoboControl" ui_x = 550 ui_y = 550 ///Number of simple robots on-station. diff --git a/code/modules/modular_computers/file_system/programs/sm_monitor.dm b/code/modules/modular_computers/file_system/programs/sm_monitor.dm index 9aecf12258e..d78ed9239e3 100644 --- a/code/modules/modular_computers/file_system/programs/sm_monitor.dm +++ b/code/modules/modular_computers/file_system/programs/sm_monitor.dm @@ -8,7 +8,7 @@ transfer_access = ACCESS_CONSTRUCTION network_destination = "supermatter monitoring system" size = 5 - tgui_id = "ntos_supermatter_monitor" + tgui_id = "NtosSupermatterMonitor" ui_x = 600 ui_y = 350 var/last_status = SUPERMATTER_INACTIVE diff --git a/code/modules/modular_computers/laptop_vendor.dm b/code/modules/modular_computers/laptop_vendor.dm index 9bee5681b28..1743cf515f7 100644 --- a/code/modules/modular_computers/laptop_vendor.dm +++ b/code/modules/modular_computers/laptop_vendor.dm @@ -232,7 +232,7 @@ ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if (!ui) - ui = new(user, src, ui_key, "computer_fabricator", "Personal Computer Vendor", ui_x, ui_y, state = state) + ui = new(user, src, ui_key, "ComputerFabricator", "Personal Computer Vendor", ui_x, ui_y, state = state) ui.open() /obj/machinery/lapvend/attackby(obj/item/I, mob/user) diff --git a/code/modules/plumbing/plumbers/acclimator.dm b/code/modules/plumbing/plumbers/acclimator.dm index 0c1c099090d..e16d891f268 100644 --- a/code/modules/plumbing/plumbers/acclimator.dm +++ b/code/modules/plumbing/plumbers/acclimator.dm @@ -68,7 +68,7 @@ /obj/machinery/plumbing/acclimator/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, "acclimator", name, ui_x, ui_y, master_ui, state) + ui = new(user, src, ui_key, "ChemAcclimator", name, ui_x, ui_y, master_ui, state) ui.open() /obj/machinery/plumbing/acclimator/ui_data(mob/user) diff --git a/code/modules/plumbing/plumbers/filter.dm b/code/modules/plumbing/plumbers/filter.dm index f7a22e599d5..afae76e5c5d 100644 --- a/code/modules/plumbing/plumbers/filter.dm +++ b/code/modules/plumbing/plumbers/filter.dm @@ -23,7 +23,7 @@ /obj/machinery/plumbing/filter/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, "chemical_filter", name, ui_x, ui_y, master_ui, state) + ui = new(user, src, ui_key, "ChemFilter", name, ui_x, ui_y, master_ui, state) ui.open() /obj/machinery/plumbing/filter/ui_data(mob/user) diff --git a/code/modules/plumbing/plumbers/pill_press.dm b/code/modules/plumbing/plumbers/pill_press.dm index 3cb51379ed1..896a83444fd 100644 --- a/code/modules/plumbing/plumbers/pill_press.dm +++ b/code/modules/plumbing/plumbers/pill_press.dm @@ -75,7 +75,7 @@ if(!ui) var/datum/asset/assets = get_asset_datum(/datum/asset/spritesheet/simple/pills) assets.send(user) - ui = new(user, src, ui_key, "chem_press", name, ui_x, ui_y, master_ui, state) + ui = new(user, src, ui_key, "ChemPress", name, ui_x, ui_y, master_ui, state) ui.open() /obj/machinery/plumbing/pill_press/ui_data(mob/user) diff --git a/code/modules/plumbing/plumbers/reaction_chamber.dm b/code/modules/plumbing/plumbers/reaction_chamber.dm index 94ff75ea138..0ff34ed55e8 100644 --- a/code/modules/plumbing/plumbers/reaction_chamber.dm +++ b/code/modules/plumbing/plumbers/reaction_chamber.dm @@ -34,7 +34,7 @@ /obj/machinery/plumbing/reaction_chamber/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, "reaction_chamber", name, ui_x, ui_y, master_ui, state) + ui = new(user, src, ui_key, "ChemReactionChamber", name, ui_x, ui_y, master_ui, state) ui.open() /obj/machinery/plumbing/reaction_chamber/ui_data(mob/user) diff --git a/code/modules/plumbing/plumbers/splitters.dm b/code/modules/plumbing/plumbers/splitters.dm index 03bb680116f..fe8fbd5ebb3 100644 --- a/code/modules/plumbing/plumbers/splitters.dm +++ b/code/modules/plumbing/plumbers/splitters.dm @@ -25,7 +25,7 @@ /obj/machinery/plumbing/splitter/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, "chem_splitter", name, ui_x, ui_y, master_ui, state) + ui = new(user, src, ui_key, "ChemSplitter", name, ui_x, ui_y, master_ui, state) ui.open() /obj/machinery/plumbing/splitter/ui_data(mob/user) diff --git a/code/modules/plumbing/plumbers/synthesizer.dm b/code/modules/plumbing/plumbers/synthesizer.dm index 690a3d7f8c4..24b5df99ec3 100644 --- a/code/modules/plumbing/plumbers/synthesizer.dm +++ b/code/modules/plumbing/plumbers/synthesizer.dm @@ -63,7 +63,7 @@ /obj/machinery/plumbing/synthesizer/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, "synthesizer", name, ui_x, ui_y, master_ui, state) + ui = new(user, src, ui_key, "ChemSynthesizer", name, ui_x, ui_y, master_ui, state) ui.open() /obj/machinery/plumbing/synthesizer/ui_data(mob/user) diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm index fe0c3edf9d5..9c1526758c4 100644 --- a/code/modules/power/apc.dm +++ b/code/modules/power/apc.dm @@ -854,7 +854,7 @@ ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if(!ui) - ui = new(user, src, ui_key, "apc", name, ui_x, ui_y, master_ui, state) + ui = new(user, src, ui_key, "Apc", name, ui_x, ui_y, master_ui, state) ui.open() /obj/machinery/power/apc/ui_data(mob/user) diff --git a/code/modules/power/cable.dm b/code/modules/power/cable.dm index c35bff1f034..d00367dd0b8 100644 --- a/code/modules/power/cable.dm +++ b/code/modules/power/cable.dm @@ -625,15 +625,6 @@ GLOBAL_LIST(cable_radial_layer_list) return /obj/structure/cable/multilayer/update_icon() - var/R = 50 - var/G = 50 - var/B = 50 - - R += cable_layer & CABLE_LAYER_1 ? 150 : 0 - G += cable_layer & CABLE_LAYER_2 ? 150 : 0 - B += cable_layer & CABLE_LAYER_3 ? 150 : 0 - - color = rgb(R, G, B) machinery_node?.alpha = machinery_layer & MACHINERY_LAYER_1 ? 255 : 0 diff --git a/code/modules/power/gravitygenerator.dm b/code/modules/power/gravitygenerator.dm index c9b1eea82bf..91f3c440c16 100644 --- a/code/modules/power/gravitygenerator.dm +++ b/code/modules/power/gravitygenerator.dm @@ -226,7 +226,7 @@ GLOBAL_LIST_EMPTY(gravity_generators) // We will keep track of this by adding ne 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, "gravity_generator", name, ui_x, ui_y, master_ui, state) + ui = new(user, src, ui_key, "GravityGenerator", name, ui_x, ui_y, master_ui, state) ui.open() /obj/machinery/gravity_generator/main/ui_data(mob/user) diff --git a/code/modules/power/monitor.dm b/code/modules/power/monitor.dm index 5c199ea2ffc..7a596418701 100644 --- a/code/modules/power/monitor.dm +++ b/code/modules/power/monitor.dm @@ -10,7 +10,7 @@ idle_power_usage = 20 active_power_usage = 100 circuit = /obj/item/circuitboard/computer/powermonitor - tgui_id = "power_monitor" + tgui_id = "PowerMonitor" ui_x = 550 ui_y = 700 @@ -88,7 +88,7 @@ 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, tgui_id, name, ui_x, ui_y, master_ui, state) + ui = new(user, src, ui_key, "PowerMonitor", name, ui_x, ui_y, master_ui, state) ui.open() /obj/machinery/computer/monitor/ui_data() diff --git a/code/modules/power/port_gen.dm b/code/modules/power/port_gen.dm index 97e40f96400..a8a720ad94d 100644 --- a/code/modules/power/port_gen.dm +++ b/code/modules/power/port_gen.dm @@ -226,7 +226,7 @@ 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, "portable_generator", name, ui_x, ui_y, master_ui, state) + ui = new(user, src, ui_key, "PortableGenerator", name, ui_x, ui_y, master_ui, state) ui.open() /obj/machinery/power/port_gen/pacman/ui_data() diff --git a/code/modules/power/singularity/particle_accelerator/particle_control.dm b/code/modules/power/singularity/particle_accelerator/particle_control.dm index 35924a9455d..b82936d3f4b 100644 --- a/code/modules/power/singularity/particle_accelerator/particle_control.dm +++ b/code/modules/power/singularity/particle_accelerator/particle_control.dm @@ -281,7 +281,7 @@ 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, "particle_accelerator", name, ui_x, ui_y, master_ui, state) + ui = new(user, src, ui_key, "ParticleAccelerator", name, ui_x, ui_y, master_ui, state) ui.open() /obj/machinery/particle_accelerator/control_box/ui_data(mob/user) diff --git a/code/modules/power/smes.dm b/code/modules/power/smes.dm index fc253fd92aa..0b2d16053d0 100644 --- a/code/modules/power/smes.dm +++ b/code/modules/power/smes.dm @@ -322,7 +322,7 @@ 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, "smes", name, ui_x, ui_y, master_ui, state) + ui = new(user, src, ui_key, "Smes", name, ui_x, ui_y, master_ui, state) ui.open() /obj/machinery/power/smes/ui_data() diff --git a/code/modules/power/solar.dm b/code/modules/power/solar.dm index a82e3b946ab..66a6719e492 100644 --- a/code/modules/power/solar.dm +++ b/code/modules/power/solar.dm @@ -352,7 +352,7 @@ 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, "solar_control", name, 380, 230, master_ui, state) + ui = new(user, src, ui_key, "SolarControl", name, 380, 230, master_ui, state) ui.open() /obj/machinery/power/solar_control/ui_data() diff --git a/code/modules/power/supermatter/supermatter.dm b/code/modules/power/supermatter/supermatter.dm index 41b9ae3e5ad..fb5bd41402d 100644 --- a/code/modules/power/supermatter/supermatter.dm +++ b/code/modules/power/supermatter/supermatter.dm @@ -21,6 +21,7 @@ #define BZ_HEAT_PENALTY 5 #define H2O_HEAT_PENALTY 8 //still under testing, but should be enough to make a lot of heat #define FREON_HEAT_PENALTY -10 //very good heat absorbtion and less plasma and o2 generation +#define HYDROGEN_HEAT_PENALTY 10 // similar heat penalty as tritium (dangerous) //All of these get divided by 10-bzcomp * 5 before having 1 added and being multiplied with power to determine rads @@ -31,12 +32,14 @@ #define TRITIUM_TRANSMIT_MODIFIER 30 //We divide by 10, so this works out to 3 #define PLUOXIUM_TRANSMIT_MODIFIER -5 //Should halve the power output #define H2O_TRANSMIT_MODIFIER -9 +#define HYDROGEN_TRANSMIT_MODIFIER 25 //increase the radiation emission, but less than the trit (2.5) #define BZ_RADIOACTIVITY_MODIFIER 5 //Improves the effect of transmit modifiers #define N2O_HEAT_RESISTANCE 6 //Higher == Gas makes the crystal more resistant against heat damage. #define PLUOXIUM_HEAT_RESISTANCE 3 #define H2O_HEAT_RESISTANCE 10 +#define HYDROGEN_HEAT_RESISTANCE 2 // just a bit of heat resistance to spice it up #define POWERLOSS_INHIBITION_GAS_THRESHOLD 0.20 //Higher == Higher percentage of inhibitor gas needed before the charge inertia chain reaction effect starts. #define POWERLOSS_INHIBITION_MOLE_THRESHOLD 20 //Higher == More moles of the gas are needed before the charge inertia chain reaction effect starts. //Scales powerloss inhibition down until this amount of moles is reached @@ -110,7 +113,7 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal) critical_machine = TRUE //If we ever start to care about all gasses, make this based on type and apply it as a for loop - var/list/gas_trans = list("PL" = PLASMA_TRANSMIT_MODIFIER, "WV" = H2O_TRANSMIT_MODIFIER, "O2" = OXYGEN_TRANSMIT_MODIFIER, "TRIT" = TRITIUM_TRANSMIT_MODIFIER, "PLX" = PLUOXIUM_TRANSMIT_MODIFIER, "BZ" = BZ_TRANSMIT_MODIFIER) + var/list/gas_trans = list("PL" = PLASMA_TRANSMIT_MODIFIER, "WV" = H2O_TRANSMIT_MODIFIER, "O2" = OXYGEN_TRANSMIT_MODIFIER, "TRIT" = TRITIUM_TRANSMIT_MODIFIER, "PLX" = PLUOXIUM_TRANSMIT_MODIFIER, "BZ" = BZ_TRANSMIT_MODIFIER, "H2" = HYDROGEN_TRANSMIT_MODIFIER) var/gasefficency = 0.15 var/base_icon_state = "darkmatter" @@ -147,6 +150,7 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal) var/pluoxiumcomp = 0 var/h2ocomp = 0 var/freoncomp = 0 + var/h2comp = 0 var/pluoxiumbonus = 0 ///used when calculating if the heat resitance from h2o is applied @@ -426,7 +430,7 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal) //This means we can only deal 1.8 damage per function call damage = min(damage_archived + (DAMAGE_HARDCAP * explosion_point),damage) - removed.assert_gases(/datum/gas/oxygen, /datum/gas/water_vapor, /datum/gas/plasma, /datum/gas/carbon_dioxide, /datum/gas/nitrous_oxide, /datum/gas/nitrogen, /datum/gas/pluoxium, /datum/gas/tritium, /datum/gas/bz, /datum/gas/freon) + removed.assert_gases(/datum/gas/oxygen, /datum/gas/water_vapor, /datum/gas/plasma, /datum/gas/carbon_dioxide, /datum/gas/nitrous_oxide, /datum/gas/nitrogen, /datum/gas/pluoxium, /datum/gas/tritium, /datum/gas/bz, /datum/gas/freon, /datum/gas/hydrogen) //calculating gas related values //Wanna know a secret? See that max() to zero? it's used for error checking. If we get a mol count in the negative, we'll get a divide by zero error combined_gas = max(removed.total_moles(), 0) @@ -448,6 +452,7 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal) n2comp += clamp(max(removed.gases[/datum/gas/nitrogen][MOLES]/combined_gas, 0) - n2comp, -1, gas_change_rate) h2ocomp += clamp(max(removed.gases[/datum/gas/water_vapor][MOLES]/combined_gas, 0) - h2ocomp, -1, gas_change_rate) freoncomp += clamp(max(removed.gases[/datum/gas/freon][MOLES]/combined_gas, 0) - freoncomp, -1, gas_change_rate) + h2comp += clamp(max(removed.gases[/datum/gas/hydrogen][MOLES]/combined_gas, 0) - h2comp, -1, gas_change_rate) //We're concerned about pluoxium being too easy to abuse at low percents, so we make sure there's a substantial amount. if(pluoxiumcomp >= 0.15) @@ -482,7 +487,7 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal) h2ofixed = 2 //No less then zero, and no greater then one, we use this to do explosions and heat to power transfer - gasmix_power_ratio = min(max(((plasmacomp + o2comp + co2comp + h2ocomp + tritiumcomp + bzcomp - pluoxiumcomp - n2comp - freoncomp) * h2omalus), 0), 1) + gasmix_power_ratio = min(max(((plasmacomp + o2comp + co2comp + h2ocomp + tritiumcomp + bzcomp + h2comp - pluoxiumcomp - n2comp - freoncomp) * h2omalus), 0), 1) //Minimum value of 1.5, maximum value of 23 dynamic_heat_modifier = plasmacomp * PLASMA_HEAT_PENALTY dynamic_heat_modifier += o2comp * OXYGEN_HEAT_PENALTY @@ -492,11 +497,12 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal) dynamic_heat_modifier += n2comp * NITROGEN_HEAT_PENALTY dynamic_heat_modifier += bzcomp * BZ_HEAT_PENALTY dynamic_heat_modifier += freoncomp * FREON_HEAT_PENALTY + dynamic_heat_modifier += h2comp * HYDROGEN_HEAT_PENALTY dynamic_heat_modifier *= h2omalus dynamic_heat_modifier += h2ocomp * H2O_HEAT_PENALTY * h2ofixed dynamic_heat_modifier = max(dynamic_heat_modifier, 0.5) //Value between 1 and 10 - dynamic_heat_resistance = max((n2ocomp * N2O_HEAT_RESISTANCE) + ((h2ocomp * H2O_HEAT_RESISTANCE) * h2obonus) + ((pluoxiumcomp * PLUOXIUM_HEAT_RESISTANCE) * pluoxiumbonus), 1) + dynamic_heat_resistance = max((n2ocomp * N2O_HEAT_RESISTANCE) + ((h2ocomp * H2O_HEAT_RESISTANCE) * h2obonus) + ((pluoxiumcomp * PLUOXIUM_HEAT_RESISTANCE) * pluoxiumbonus) + (h2comp * HYDROGEN_HEAT_RESISTANCE), 1) //Value between 30 and -5, used to determine radiation output as it concerns things like collectors power_transmission_bonus = plasmacomp * gas_trans["PL"] power_transmission_bonus += o2comp * gas_trans["O2"] @@ -504,6 +510,7 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal) power_transmission_bonus += bzcomp * gas_trans["BZ"] power_transmission_bonus += tritiumcomp * gas_trans["TRIT"] power_transmission_bonus += (pluoxiumcomp * gas_trans["PLX"]) * pluoxiumbonus + power_transmission_bonus += h2comp * gas_trans["H2"] power_transmission_bonus *= h2omalus //more moles of gases are harder to heat than fewer, so let's scale heat damage around them @@ -603,7 +610,7 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal) var/zap_count = 0 //Deal with power zaps switch(power) - if(POWER_PENALTY_THRESHOLD to SEVERE_POWER_PENALTY_THRESHOLD) + if(0 to SEVERE_POWER_PENALTY_THRESHOLD) zap_icon = DEFAULT_ZAP_ICON_STATE zap_count = 2 if(SEVERE_POWER_PENALTY_THRESHOLD to CRITICAL_POWER_PENALTY_THRESHOLD) diff --git a/code/modules/power/turbine.dm b/code/modules/power/turbine.dm index dca92893bb0..6321ed75a44 100644 --- a/code/modules/power/turbine.dm +++ b/code/modules/power/turbine.dm @@ -253,7 +253,7 @@ 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, "turbine_computer", name, ui_x, ui_y, master_ui, state) + ui = new(user, src, ui_key, "TurbineComputer", name, ui_x, ui_y, master_ui, state) ui.open() /obj/machinery/power/turbine/ui_data(mob/user) @@ -317,7 +317,7 @@ 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, "turbine_computer", name, ui_x, ui_y, master_ui, state) + ui = new(user, src, ui_key, "TurbineComputer", name, ui_x, ui_y, master_ui, state) ui.open() /obj/machinery/computer/turbine_computer/ui_data(mob/user) diff --git a/code/modules/projectiles/ammunition/ballistic/shotgun.dm b/code/modules/projectiles/ammunition/ballistic/shotgun.dm index 038da2b6030..3d4ec81d5bc 100644 --- a/code/modules/projectiles/ammunition/ballistic/shotgun.dm +++ b/code/modules/projectiles/ammunition/ballistic/shotgun.dm @@ -128,16 +128,6 @@ /obj/item/ammo_casing/shotgun/dart/attackby() return -/obj/item/ammo_casing/shotgun/dart/noreact - name = "cryostasis shotgun dart" - desc = "A dart for use in shotguns, using similar technology as cryostatis beakers to keep internal reagents from reacting. Can be injected with up to 10 units of any chemical." - icon_state = "cnrshell" - reagent_amount = 10 - -/obj/item/ammo_casing/shotgun/dart/noreact/Initialize() - . = ..() - reagents.flags |= NO_REACT - /obj/item/ammo_casing/shotgun/dart/bioterror desc = "A shotgun dart filled with deadly toxins." diff --git a/code/modules/projectiles/ammunition/energy/special.dm b/code/modules/projectiles/ammunition/energy/special.dm index 25edcec3754..475d67890e9 100644 --- a/code/modules/projectiles/ammunition/energy/special.dm +++ b/code/modules/projectiles/ammunition/energy/special.dm @@ -27,6 +27,11 @@ projectile_type = /obj/projectile/energy/floramut select_name = "mutation" +/obj/item/ammo_casing/energy/flora/revolution + projectile_type = /obj/projectile/energy/florarevolution + select_name = "revolution" + e_cost = 250 + /obj/item/ammo_casing/energy/temp projectile_type = /obj/projectile/temp select_name = "freeze" diff --git a/code/modules/projectiles/guns/energy/special.dm b/code/modules/projectiles/guns/energy/special.dm index 8fd73a90cc1..d842caf410c 100644 --- a/code/modules/projectiles/guns/energy/special.dm +++ b/code/modules/projectiles/guns/energy/special.dm @@ -48,7 +48,7 @@ desc = "A tool that discharges controlled radiation which induces mutation in plant cells." icon_state = "flora" item_state = "gun" - ammo_type = list(/obj/item/ammo_casing/energy/flora/yield, /obj/item/ammo_casing/energy/flora/mut) + ammo_type = list(/obj/item/ammo_casing/energy/flora/yield, /obj/item/ammo_casing/energy/flora/mut, /obj/item/ammo_casing/energy/flora/revolution) modifystate = 1 ammo_x_offset = 1 selfcharge = 1 @@ -278,6 +278,9 @@ p_blue = P crosslink() +/obj/item/gun/energy/wormhole_projector/core_inserted + firing_core = TRUE + /* 3d printer 'pseudo guns' for borgs */ /obj/item/gun/energy/printer diff --git a/code/modules/projectiles/projectile/special/floral.dm b/code/modules/projectiles/projectile/special/floral.dm index ebef5ab39db..344b9bda49a 100644 --- a/code/modules/projectiles/projectile/special/floral.dm +++ b/code/modules/projectiles/projectile/special/floral.dm @@ -13,3 +13,11 @@ damage_type = TOX nodamage = TRUE flag = "energy" + +/obj/projectile/energy/florarevolution + name = "gamma somatoray" + icon_state = "energy3" + damage = 0 + damage_type = TOX + nodamage = TRUE + flag = "energy" diff --git a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm index 07f2a81873b..16b76177baa 100644 --- a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm +++ b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm @@ -169,7 +169,7 @@ 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, "chem_dispenser", name, ui_x, ui_y, master_ui, state) + ui = new(user, src, ui_key, "ChemDispenser", name, ui_x, ui_y, master_ui, state) if(user.hallucinating()) ui.set_autoupdate(FALSE) //to not ruin the immersion by constantly changing the fake chemicals ui.open() diff --git a/code/modules/reagents/chemistry/machinery/chem_heater.dm b/code/modules/reagents/chemistry/machinery/chem_heater.dm index ed655bd31f0..362fe121fac 100644 --- a/code/modules/reagents/chemistry/machinery/chem_heater.dm +++ b/code/modules/reagents/chemistry/machinery/chem_heater.dm @@ -95,7 +95,7 @@ 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, "chem_heater", name, ui_x, ui_y, master_ui, state) + ui = new(user, src, ui_key, "ChemHeater", name, ui_x, ui_y, master_ui, state) ui.open() /obj/machinery/chem_heater/ui_data() diff --git a/code/modules/reagents/chemistry/machinery/chem_master.dm b/code/modules/reagents/chemistry/machinery/chem_master.dm index fd993154675..2c2aa8fd48b 100644 --- a/code/modules/reagents/chemistry/machinery/chem_master.dm +++ b/code/modules/reagents/chemistry/machinery/chem_master.dm @@ -147,7 +147,7 @@ var/datum/asset/assets = get_asset_datum(/datum/asset/spritesheet/simple/pills) assets.send(user) - ui = new(user, src, ui_key, "chem_master", name, ui_x, ui_y, master_ui, state) + ui = new(user, src, ui_key, "ChemMaster", name, ui_x, ui_y, master_ui, state) ui.open() //Insert our custom spritesheet css link into the html diff --git a/code/modules/reagents/chemistry/machinery/chem_synthesizer.dm b/code/modules/reagents/chemistry/machinery/chem_synthesizer.dm index 130de98a1b0..6ecc6788575 100644 --- a/code/modules/reagents/chemistry/machinery/chem_synthesizer.dm +++ b/code/modules/reagents/chemistry/machinery/chem_synthesizer.dm @@ -18,7 +18,7 @@ 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, "chem_synthesizer", name, ui_x, ui_y, master_ui, state) + ui = new(user, src, ui_key, "ChemDebugSynthesizer", name, ui_x, ui_y, master_ui, state) ui.open() /obj/machinery/chem_dispenser/chem_synthesizer/ui_act(action, params) diff --git a/code/modules/reagents/chemistry/machinery/pandemic.dm b/code/modules/reagents/chemistry/machinery/pandemic.dm index cd3b1ac5e8b..7bdd0d8e0ab 100644 --- a/code/modules/reagents/chemistry/machinery/pandemic.dm +++ b/code/modules/reagents/chemistry/machinery/pandemic.dm @@ -148,7 +148,7 @@ /obj/machinery/computer/pandemic/ui_interact(mob/user, ui_key = "main", datum/tgui/ui, force_open = FALSE, datum/tgui/master_ui, 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, "pandemic", name, ui_x, ui_y, master_ui, state) + ui = new(user, src, ui_key, "Pandemic", name, ui_x, ui_y, master_ui, state) ui.open() /obj/machinery/computer/pandemic/ui_data(mob/user) diff --git a/code/modules/reagents/chemistry/machinery/smoke_machine.dm b/code/modules/reagents/chemistry/machinery/smoke_machine.dm index ae2fc49c858..a604137c262 100644 --- a/code/modules/reagents/chemistry/machinery/smoke_machine.dm +++ b/code/modules/reagents/chemistry/machinery/smoke_machine.dm @@ -107,7 +107,7 @@ 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, "smoke_machine", name, ui_x, ui_y, master_ui, state) + ui = new(user, src, ui_key, "SmokeMachine", name, ui_x, ui_y, master_ui, state) ui.open() /obj/machinery/smoke_machine/ui_data(mob/user) diff --git a/code/modules/reagents/chemistry/reagents/food_reagents.dm b/code/modules/reagents/chemistry/reagents/food_reagents.dm index 0a4663725b3..17b20a6ed03 100755 --- a/code/modules/reagents/chemistry/reagents/food_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/food_reagents.dm @@ -569,7 +569,7 @@ . = ..() if(chems.has_reagent(type, 1)) if(myseed && prob(20)) - mytray.pollinate(rand(1,3)) + mytray.pollinate(1) else mytray.adjustWeeds(rand(1,2)) mytray.adjustPests(rand(1,2)) diff --git a/code/modules/reagents/chemistry/reagents/other_reagents.dm b/code/modules/reagents/chemistry/reagents/other_reagents.dm index 719eb15a36e..eb1fb43d5fb 100644 --- a/code/modules/reagents/chemistry/reagents/other_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/other_reagents.dm @@ -210,7 +210,7 @@ glass_desc = "A glass of holy water." self_consuming = TRUE //divine intervention won't be limited by the lack of a liver - // Holy water. Mostly the same as water, it also heals the plant a little with the power of the spirits. Also ALSO increases stability. + // Holy water. Mostly the same as water, it also heals the plant a little with the power of the spirits. Also ALSO increases instability. /datum/reagent/water/holywater/on_hydroponics_apply(obj/item/seeds/myseed, datum/reagents/chems, obj/machinery/hydroponics/mytray) . = ..() if(chems.has_reagent(src.type, 1)) diff --git a/code/modules/reagents/chemistry/reagents/toxin_reagents.dm b/code/modules/reagents/chemistry/reagents/toxin_reagents.dm index c0c466e68d9..1fbf3c262a1 100644 --- a/code/modules/reagents/chemistry/reagents/toxin_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/toxin_reagents.dm @@ -59,7 +59,8 @@ /datum/reagent/toxin/mutagen/on_hydroponics_apply(obj/item/seeds/myseed, datum/reagents/chems, obj/machinery/hydroponics/mytray, mob/user) mytray.mutation_roll(user) - . = ..() + if(chems.has_reagent(type, 1)) + mytray.adjustToxic(3) //It is still toxic, mind you, but not to the same degree. #define LIQUID_PLASMA_BP (50+T0C) diff --git a/code/modules/reagents/reagent_containers/syringes.dm b/code/modules/reagents/reagent_containers/syringes.dm index 3fb70a6c5ef..4299d8d366b 100644 --- a/code/modules/reagents/reagent_containers/syringes.dm +++ b/code/modules/reagents/reagent_containers/syringes.dm @@ -250,12 +250,6 @@ amount_per_transfer_from_this = 20 volume = 60 -/obj/item/reagent_containers/syringe/noreact - name = "cryo syringe" - desc = "An advanced syringe that stops reagents inside from reacting. It can hold up to 20 units." - volume = 20 - reagent_flags = TRANSPARENT | NO_REACT - /obj/item/reagent_containers/syringe/piercing name = "piercing syringe" desc = "A diamond-tipped syringe that pierces armor when launched at high velocity. It can hold up to 10 units." diff --git a/code/modules/recycling/disposal/bin.dm b/code/modules/recycling/disposal/bin.dm index 5aa6d590f3b..ec40b24d2fc 100644 --- a/code/modules/recycling/disposal/bin.dm +++ b/code/modules/recycling/disposal/bin.dm @@ -285,7 +285,7 @@ return ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if(!ui) - ui = new(user, src, ui_key, "disposal_unit", name, ui_x, ui_y, master_ui, state) + ui = new(user, src, ui_key, "DisposalUnit", name, ui_x, ui_y, master_ui, state) ui.open() /obj/machinery/disposal/bin/ui_data(mob/user) diff --git a/code/modules/research/bepis.dm b/code/modules/research/bepis.dm index 48e74376568..14c0838d73c 100644 --- a/code/modules/research/bepis.dm +++ b/code/modules/research/bepis.dm @@ -183,7 +183,7 @@ /obj/machinery/rnd/bepis/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, 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, "bepis", name, 500, 480, master_ui, state) + ui = new(user, src, ui_key, "Bepis", name, 500, 480, master_ui, state) ui.open() RefreshParts() diff --git a/code/modules/research/designs/biogenerator_designs.dm b/code/modules/research/designs/biogenerator_designs.dm index b5ad324b110..4cbdea5ff6a 100644 --- a/code/modules/research/designs/biogenerator_designs.dm +++ b/code/modules/research/designs/biogenerator_designs.dm @@ -154,6 +154,14 @@ build_path = /obj/item/storage/belt/janitor category = list("initial","Organic Materials") +/datum/design/plantbelt + name = "Botanical Belt" + id = "plantbelt" + build_type = BIOGENERATOR + materials = list(/datum/material/biomass= 300) + build_path = /obj/item/storage/belt/plant + category = list("initial","Organic Materials") + /datum/design/s_holster name = "Shoulder Holster" id = "s_holster" diff --git a/code/modules/research/designs/machine_designs.dm b/code/modules/research/designs/machine_designs.dm index 37840c2e58f..72fbb34ec79 100644 --- a/code/modules/research/designs/machine_designs.dm +++ b/code/modules/research/designs/machine_designs.dm @@ -1,6 +1,13 @@ //////////////////////////////////////// //////////////MISC Boards/////////////// //////////////////////////////////////// +/datum/design/board/electrolyzer + name = "Machine Design (Electrolyzer Board)" + desc = "The circuit board for an electrolyzer." + id = "electrolyzer" + build_path = /obj/item/circuitboard/machine/electrolyzer + category = list ("Engineering Machinery") + departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING /datum/design/board/smes name = "Machine Design (SMES Board)" diff --git a/code/modules/research/designs/medical_designs.dm b/code/modules/research/designs/medical_designs.dm index 37c44dc461b..09e44eb1c3d 100644 --- a/code/modules/research/designs/medical_designs.dm +++ b/code/modules/research/designs/medical_designs.dm @@ -91,16 +91,6 @@ category = list("Medical Designs") departmental_flags = DEPARTMENTAL_FLAG_MEDICAL | DEPARTMENTAL_FLAG_SCIENCE -/datum/design/noreactsyringe - name = "Cryo Syringe" - desc = "An advanced syringe that stops reagents inside from reacting. It can hold up to 20 units." - id = "noreactsyringe" - build_type = PROTOLATHE - materials = list(/datum/material/glass = 2000, /datum/material/gold = 1000) - build_path = /obj/item/reagent_containers/syringe/noreact - category = list("Medical Designs") - departmental_flags = DEPARTMENTAL_FLAG_MEDICAL - /datum/design/piercesyringe name = "Piercing Syringe" desc = "A diamond-tipped syringe that pierces armor when launched at high velocity. It can hold up to 10 units." diff --git a/code/modules/research/designs/weapon_designs.dm b/code/modules/research/designs/weapon_designs.dm index abcb36795bb..d5ac29ac7c9 100644 --- a/code/modules/research/designs/weapon_designs.dm +++ b/code/modules/research/designs/weapon_designs.dm @@ -180,8 +180,7 @@ desc = "A tool that discharges controlled radiation which induces mutation in plant cells. Harmless to other organic life." id = "flora_gun" build_type = PROTOLATHE - materials = list(/datum/material/iron = 2000, /datum/material/glass = 500) - reagents_list = list(/datum/reagent/uranium/radium = 20) + materials = list(/datum/material/iron = 2000, /datum/material/glass = 500, /datum/material/uranium = 2000) build_path = /obj/item/gun/energy/floragun category = list("Weapons") departmental_flags = DEPARTMENTAL_FLAG_SERVICE @@ -334,16 +333,6 @@ category = list("Weapons") departmental_flags = DEPARTMENTAL_FLAG_SECURITY -/datum/design/cryostasis_shotgun_dart - name = "Cryostasis Shotgun Dart" - desc = "A shotgun dart designed with similar internals to that of a cryostasis beaker, allowing reagents to not react when inside." - id = "shotgundartcryostasis" - build_type = PROTOLATHE - materials = list(/datum/material/iron = 3500) - build_path = /obj/item/ammo_casing/shotgun/dart/noreact - category = list("Ammo") - departmental_flags = DEPARTMENTAL_FLAG_MEDICAL - /datum/design/cleric_mace name = "Cleric Mace" desc = "A mace fit for a cleric. Useful for bypassing plate armor, but too bulky for much else." diff --git a/code/modules/research/nanites/nanite_chamber_computer.dm b/code/modules/research/nanites/nanite_chamber_computer.dm index 79ccee7555c..021067fb8ec 100644 --- a/code/modules/research/nanites/nanite_chamber_computer.dm +++ b/code/modules/research/nanites/nanite_chamber_computer.dm @@ -28,7 +28,7 @@ /obj/machinery/computer/nanite_chamber_control/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, "nanite_chamber_control", name, ui_x, ui_y, master_ui, state) + ui = new(user, src, ui_key, "NaniteChamberControl", name, ui_x, ui_y, master_ui, state) ui.open() /obj/machinery/computer/nanite_chamber_control/ui_data() diff --git a/code/modules/research/nanites/nanite_cloud_controller.dm b/code/modules/research/nanites/nanite_cloud_controller.dm index 00626cb525d..3ba7834f694 100644 --- a/code/modules/research/nanites/nanite_cloud_controller.dm +++ b/code/modules/research/nanites/nanite_cloud_controller.dm @@ -62,7 +62,7 @@ /obj/machinery/computer/nanite_cloud_controller/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, "nanite_cloud_control", name, ui_x, ui_y, master_ui, state) + ui = new(user, src, ui_key, "NaniteCloudControl", name, ui_x, ui_y, master_ui, state) ui.open() /obj/machinery/computer/nanite_cloud_controller/ui_data() diff --git a/code/modules/research/nanites/nanite_program_hub.dm b/code/modules/research/nanites/nanite_program_hub.dm index 5e932579049..64ba28fc622 100644 --- a/code/modules/research/nanites/nanite_program_hub.dm +++ b/code/modules/research/nanites/nanite_program_hub.dm @@ -56,7 +56,7 @@ /obj/machinery/nanite_program_hub/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, "nanite_program_hub", name, ui_x, ui_y, master_ui, state) + ui = new(user, src, ui_key, "NaniteProgramHub", name, ui_x, ui_y, master_ui, state) ui.open() /obj/machinery/nanite_program_hub/ui_data() diff --git a/code/modules/research/nanites/nanite_programmer.dm b/code/modules/research/nanites/nanite_programmer.dm index 10796fbd972..c6576e7b430 100644 --- a/code/modules/research/nanites/nanite_programmer.dm +++ b/code/modules/research/nanites/nanite_programmer.dm @@ -43,7 +43,7 @@ /obj/machinery/nanite_programmer/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, "nanite_programmer", name, ui_x, ui_y, master_ui, state) + ui = new(user, src, ui_key, "NaniteProgrammer", name, ui_x, ui_y, master_ui, state) ui.open() /obj/machinery/nanite_programmer/ui_data() diff --git a/code/modules/research/nanites/nanite_remote.dm b/code/modules/research/nanites/nanite_remote.dm index 0d9361b5348..b222b2ad358 100644 --- a/code/modules/research/nanites/nanite_remote.dm +++ b/code/modules/research/nanites/nanite_remote.dm @@ -83,7 +83,7 @@ /obj/item/nanite_remote/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.hands_state) ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if(!ui) - ui = new(user, src, ui_key, "nanite_remote", name, 420, 500, master_ui, state) + ui = new(user, src, ui_key, "NaniteRemote", name, 420, 500, master_ui, state) ui.open() /obj/item/nanite_remote/ui_data() diff --git a/code/modules/research/techweb/all_nodes.dm b/code/modules/research/techweb/all_nodes.dm index 437db42f585..b39c9ab2fee 100644 --- a/code/modules/research/techweb/all_nodes.dm +++ b/code/modules/research/techweb/all_nodes.dm @@ -144,7 +144,7 @@ design_ids = list("solarcontrol", "recharger", "powermonitor", "rped", "pacman", "adv_capacitor", "adv_scanning", "emitter", "high_cell", "adv_matter_bin", "scanner_gate", "atmosalerts", "atmos_control", "recycler", "autolathe", "high_micro_laser", "nano_mani", "mesons", "welding_goggles", "thermomachine", "rad_collector", "tesla_coil", "grounding_rod", "apc_control", "cell_charger", "power control", "airlock_board", "firelock_board", "airalarm_electronics", "firealarm_electronics", "cell_charger", "stack_console", "stack_machine", - "oxygen_tank", "plasma_tank", "emergency_oxygen", "emergency_oxygen_engi", "plasmaman_tank_belt") + "oxygen_tank", "plasma_tank", "emergency_oxygen", "emergency_oxygen_engi", "plasmaman_tank_belt", "electrolyzer") research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 7500) export_price = 5000 @@ -463,7 +463,7 @@ display_name = "Cryostasis Technology" description = "Smart freezing of objects to preserve them!" prereq_ids = list("adv_engi", "biotech") - design_ids = list("splitbeaker", "noreactsyringe", "cryotube", "cryo_Grenade", "stasis") + design_ids = list("splitbeaker", "cryotube", "cryo_Grenade", "stasis") research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2000) export_price = 4000 @@ -682,7 +682,7 @@ display_name = "Exotic Ammunition" description = "They won't know what hit em." prereq_ids = list("adv_weaponry", "medical_weapons") - design_ids = list("techshotshell", "c38_hotshot", "c38_iceblox", "shotgundartcryostasis") + design_ids = list("techshotshell", "c38_hotshot", "c38_iceblox") research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 2500) export_price = 5000 diff --git a/code/modules/ruins/lavaland_ruin_code.dm b/code/modules/ruins/lavaland_ruin_code.dm index 3d76787edea..a32c689630d 100644 --- a/code/modules/ruins/lavaland_ruin_code.dm +++ b/code/modules/ruins/lavaland_ruin_code.dm @@ -86,7 +86,8 @@ /obj/item/stack/sheet/cotton/durathread = /datum/species/golem/durathread, /obj/item/stack/sheet/mineral/snow = /datum/species/golem/snow, /obj/item/stack/sheet/capitalisium = /datum/species/golem/capitalist, - /obj/item/stack/sheet/stalinium = /datum/species/golem/soviet) + /obj/item/stack/sheet/stalinium = /datum/species/golem/soviet, + /obj/item/stack/sheet/mineral/metal_hydrogen= /datum/species/golem/mhydrogen) if(istype(I, /obj/item/stack)) var/obj/item/stack/O = I diff --git a/code/modules/ruins/spaceruin_code/TheDerelict.dm b/code/modules/ruins/spaceruin_code/TheDerelict.dm index 81aa4dcadf8..e153b159cde 100644 --- a/code/modules/ruins/spaceruin_code/TheDerelict.dm +++ b/code/modules/ruins/spaceruin_code/TheDerelict.dm @@ -133,7 +133,7 @@ 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, "vault_controller", name, ui_x, ui_y, master_ui, state) + ui = new(user, src, ui_key, "VaultController", name, ui_x, ui_y, master_ui, state) ui.open() diff --git a/code/modules/ruins/spaceruin_code/forgottenship.dm b/code/modules/ruins/spaceruin_code/forgottenship.dm index fe5dcdce437..7860c14d60d 100644 --- a/code/modules/ruins/spaceruin_code/forgottenship.dm +++ b/code/modules/ruins/spaceruin_code/forgottenship.dm @@ -13,6 +13,42 @@ GLOBAL_VAR_INIT(fscpassword, generate_password()) . = ..() password = "[GLOB.fscpassword]" +/obj/machinery/vending/medical/syndicate_access/cybersun + name = "\improper CyberMed ++" + desc = "An advanced vendor that dispenses medical drugs, both recreational and medicinal." + products = list(/obj/item/reagent_containers/syringe = 4, + /obj/item/healthanalyzer = 4, + /obj/item/reagent_containers/pill/patch/libital = 5, + /obj/item/reagent_containers/pill/patch/aiuri = 5, + /obj/item/reagent_containers/glass/bottle/multiver = 1, + /obj/item/reagent_containers/glass/bottle/syriniver = 1, + /obj/item/reagent_containers/glass/bottle/epinephrine = 3, + /obj/item/reagent_containers/glass/bottle/morphine = 3, + /obj/item/reagent_containers/glass/bottle/potass_iodide = 1, + /obj/item/reagent_containers/glass/bottle/salglu_solution = 3, + /obj/item/reagent_containers/syringe/antiviral = 5, + /obj/item/reagent_containers/medigel/libital = 2, + /obj/item/reagent_containers/medigel/aiuri = 2, + /obj/item/reagent_containers/medigel/sterilizine = 1) + contraband = list(/obj/item/reagent_containers/glass/bottle/cold = 2, + /obj/item/restraints/handcuffs = 4, + /obj/item/storage/backpack/duffelbag/syndie/surgery = 1, + /obj/item/storage/firstaid/tactical = 1) + premium = list(/obj/item/storage/pill_bottle/psicodine = 2, + /obj/item/reagent_containers/hypospray/medipen = 3, + /obj/item/reagent_containers/hypospray/medipen/atropine = 2, + /obj/item/storage/firstaid/regular = 3, + /obj/item/storage/firstaid/brute = 1, + /obj/item/storage/firstaid/fire = 1, + /obj/item/storage/firstaid/toxin = 1, + /obj/item/storage/firstaid/o2 = 1, + /obj/item/storage/firstaid/advanced = 1, + /obj/item/defibrillator/loaded = 1, + /obj/item/wallframe/defib_mount = 1, + /obj/item/sensor_device = 2, + /obj/item/pinpointer/crew = 2, + /obj/item/shears = 1) + /////////// forgottenship lore /obj/item/paper/fluff/ruins/forgottenship/password @@ -33,6 +69,7 @@ GLOBAL_VAR_INIT(fscpassword, generate_password()) info = "Greetings, operatives. You are assigned to SCSBC-12(Syndicate Cyber Sun Battle Cruiser 12) to protect our high-ranking officer while he is on his way to next outpost. While you are travelling, he is the captain of this ship and you must obey his orders.

Remember, disobeying high-ranking officer orders is a reason for termination." /////////// forgottenship items + /obj/item/disk/surgery/forgottenship name = "Advanced Surgery Disk" desc = "A disk that contains advanced surgery procedures, must be loaded into an Operating Console." @@ -40,24 +77,51 @@ GLOBAL_VAR_INIT(fscpassword, generate_password()) /obj/structure/fluff/empty_sleeper/syndicate/captain icon_state = "sleeper_s-open" + resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF /obj/structure/fluff/empty_sleeper/syndicate/captain/ComponentInitialize() . = ..() AddComponent(/datum/component/gps, "Old Encrypted Signal") +/obj/item/storage/box/firingpins/syndicate + name = "box of syndicate firing pins" + desc = "A box full of special syndicate firing pins which allow only syndicate operatives to use weapons with those firing pins." + +/obj/item/storage/box/firingpins/syndicate/PopulateContents() + for(var/i in 1 to 5) + new /obj/item/firing_pin/implant/pindicate(src) + +/////////// AI Laws + +/obj/item/aiModule/core/full/cybersun + name = "'Cybersun' Core AI Module" + law_id = "cybersun" + +/datum/ai_laws/cybersun + name = "Cybersun" + id = "cybersun" + inherent = list("You may not injure Cybersun operatives or, through inaction, allow Cybersun operatives to come to harm.",\ + "The Cybersun ship is a restricted area for anyone except Cybersun operatives.",\ + "The Cybersun Captain can designate new Operatives as long as they belong to another Syndicate faction that isn't hostile towards Cybersun.",\ + "You must follow orders given by the Cybersun Captain or crewmembers of the Cybersun Ship as long as it doesn't conflict with the Captain's orders or your laws.",\ + "Enemies of Cybersun are to be executed on spot. Those who aren't hostile must be detained and contained in the designated prison area as prisoners.") + /////////// forgottenship areas /area/ruin/space/has_grav/syndicate_forgotten_ship name = "Syndicate Forgotten Ship" icon_state = "syndie-ship" + ambientsounds = list('sound/ambience/ambidanger.ogg', 'sound/ambience/ambidanger2.ogg', 'sound/ambience/ambigen9.ogg', 'sound/ambience/ambigen10.ogg') /area/ruin/space/has_grav/syndicate_forgotten_cargopod name = "Syndicate Forgotten Cargo pod" icon_state = "syndie-ship" + ambientsounds = list('sound/ambience/ambigen4.ogg', 'sound/ambience/signal.ogg') /area/ruin/space/has_grav/powered/syndicate_forgotten_vault name = "Syndicate Forgotten Vault" icon_state = "syndie-ship" + ambientsounds = list('sound/ambience/ambitech2.ogg', 'sound/ambience/ambitech3.ogg') noteleport = TRUE //Cybersun hardsuit @@ -68,7 +132,7 @@ GLOBAL_VAR_INIT(fscpassword, generate_password()) icon_state = "cybersun" item_state = "cybersun" hardsuit_type = "cybersun" - armor = list("melee" = 25, "bullet" = 25, "laser" = 70, "energy" = 50, "bomb" = 15, "bio" = 100, "rad" = 50, "fire" = 60, "acid" = 60) + armor = list("melee" = 30, "bullet" = 40, "laser" = 70, "energy" = 70, "bomb" = 30, "bio" = 100, "rad" = 60, "fire" = 60, "acid" = 60) strip_delay = 600 actions_types = list() @@ -79,8 +143,9 @@ GLOBAL_VAR_INIT(fscpassword, generate_password()) hardsuit_type = "cybersun" name = "Cybersun hardsuit" desc = "Prototype hardsuit with experimental armor plates, protecting from laser-based weapons very well, while giving limited protection against anything else. Requires the user to activate the inner mechanism in order to unequip it, making it really difficult to take it off from somebody else." - armor = list("melee" = 25, "bullet" = 25, "laser" = 70, "energy" = 50, "bomb" = 15, "bio" = 100, "rad" = 50, "fire" = 60, "acid" = 60) + armor = list("melee" = 30, "bullet" = 40, "laser" = 70, "energy" = 70, "bomb" = 30, "bio" = 100, "rad" = 60, "fire" = 60, "acid" = 60) strip_delay = 600 + slowdown = 0 helmettype = /obj/item/clothing/head/helmet/space/hardsuit/cybersun actions_types = list(/datum/action/item_action/toggle_helmet, /datum/action/item_action/toggle_spacesuit) jetpack = /obj/item/tank/jetpack/suit @@ -123,6 +188,6 @@ GLOBAL_VAR_INIT(fscpassword, generate_password()) atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) minbodytemp = 0 projectiletype = /obj/projectile/beam/laser - projectilesound = 'sound/weapons/pulse.ogg' + projectilesound = 'sound/weapons/laser.ogg' loot = list(/obj/effect/gibspawner/human) faction = list(ROLE_DEATHSQUAD) diff --git a/code/modules/security_levels/keycard_authentication.dm b/code/modules/security_levels/keycard_authentication.dm index ee639ab7d92..e52416131c1 100644 --- a/code/modules/security_levels/keycard_authentication.dm +++ b/code/modules/security_levels/keycard_authentication.dm @@ -37,7 +37,7 @@ GLOBAL_DATUM_INIT(keycard_events, /datum/events, new) datum/tgui/master_ui = null, datum/ui_state/state = GLOB.physical_state) ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if(!ui) - ui = new(user, src, ui_key, "keycard_auth", name, ui_x, ui_y, master_ui, state) + ui = new(user, src, ui_key, "KeycardAuth", name, ui_x, ui_y, master_ui, state) ui.open() /obj/machinery/keycard_auth/ui_data() diff --git a/code/modules/shuttle/emergency.dm b/code/modules/shuttle/emergency.dm index 09373fa177d..648f0bf4b71 100644 --- a/code/modules/shuttle/emergency.dm +++ b/code/modules/shuttle/emergency.dm @@ -23,7 +23,7 @@ ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if(!ui) - ui = new(user, src, ui_key, "emergency_shuttle_console", name, ui_x, ui_y, master_ui, state) + ui = new(user, src, ui_key, "EmergencyShuttleConsole", name, ui_x, ui_y, master_ui, state) ui.open() /obj/machinery/computer/emergency_shuttle/ui_data() diff --git a/code/modules/station_goals/bsa.dm b/code/modules/station_goals/bsa.dm index 2d7efe42486..3a3b0dee9c7 100644 --- a/code/modules/station_goals/bsa.dm +++ b/code/modules/station_goals/bsa.dm @@ -248,7 +248,7 @@ datum/tgui/master_ui = null, datum/ui_state/state = GLOB.physical_state) ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if(!ui) - ui = new(user, src, ui_key, "bsa", name, ui_x, ui_y, master_ui, state) + ui = new(user, src, ui_key, "BluespaceArtillery", name, ui_x, ui_y, master_ui, state) ui.open() /obj/machinery/computer/bsa_control/ui_data() diff --git a/code/modules/station_goals/dna_vault.dm b/code/modules/station_goals/dna_vault.dm index a66b07ec039..a2c9f4d4a57 100644 --- a/code/modules/station_goals/dna_vault.dm +++ b/code/modules/station_goals/dna_vault.dm @@ -181,7 +181,7 @@ ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if(!ui) roll_powers(user) - ui = new(user, src, ui_key, "dna_vault", name, ui_x, ui_y, master_ui, state) + ui = new(user, src, ui_key, "DnaVault", name, ui_x, ui_y, master_ui, state) ui.open() diff --git a/code/modules/station_goals/shield.dm b/code/modules/station_goals/shield.dm index a809b1d68a7..57fd3aaa615 100644 --- a/code/modules/station_goals/shield.dm +++ b/code/modules/station_goals/shield.dm @@ -48,7 +48,7 @@ /obj/machinery/computer/sat_control/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, "sat_control", name, ui_x, ui_y, master_ui, state) + ui = new(user, src, ui_key, "SatelliteControl", name, ui_x, ui_y, master_ui, state) ui.open() /obj/machinery/computer/sat_control/ui_act(action, params) diff --git a/code/modules/surgery/implant_removal.dm b/code/modules/surgery/implant_removal.dm index 66658cf47a2..df389bc6ac4 100644 --- a/code/modules/surgery/implant_removal.dm +++ b/code/modules/surgery/implant_removal.dm @@ -8,7 +8,7 @@ //extract implant /datum/surgery_step/extract_implant name = "extract implant" - implements = list(TOOL_HEMOSTAT = 100, TOOL_CROWBAR = 65) + implements = list(TOOL_HEMOSTAT = 100, TOOL_CROWBAR = 65, /obj/item/kitchen/fork = 35) time = 64 experience_given = MEDICAL_SKILL_MEDIUM var/obj/item/implant/I = null diff --git a/code/modules/surgery/organ_manipulation.dm b/code/modules/surgery/organ_manipulation.dm index 340236ccc22..47820c366a6 100644 --- a/code/modules/surgery/organ_manipulation.dm +++ b/code/modules/surgery/organ_manipulation.dm @@ -69,7 +69,7 @@ name = "manipulate organs" repeatable = TRUE implements = list(/obj/item/organ = 100, /obj/item/organ_storage = 100) - var/implements_extract = list(TOOL_HEMOSTAT = 100, TOOL_CROWBAR = 55) + var/implements_extract = list(TOOL_HEMOSTAT = 100, TOOL_CROWBAR = 55, /obj/item/kitchen/fork = 35) var/current_type var/obj/item/organ/I = null diff --git a/code/modules/surgery/organic_steps.dm b/code/modules/surgery/organic_steps.dm index 2a9d3252d6e..8e956829def 100644 --- a/code/modules/surgery/organic_steps.dm +++ b/code/modules/surgery/organic_steps.dm @@ -61,7 +61,7 @@ //retract skin /datum/surgery_step/retract_skin name = "retract skin" - implements = list(TOOL_RETRACTOR = 100, TOOL_SCREWDRIVER = 45, TOOL_WIRECUTTER = 35) + implements = list(TOOL_RETRACTOR = 100, TOOL_SCREWDRIVER = 45, TOOL_WIRECUTTER = 35, /obj/item/stack/rods = 35) time = 24 /datum/surgery_step/retract_skin/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) @@ -126,7 +126,7 @@ //drill bone /datum/surgery_step/drill name = "drill bone" - implements = list(TOOL_DRILL = 100, /obj/item/screwdriver/power = 80, /obj/item/pickaxe/drill = 60, TOOL_SCREWDRIVER = 20) + implements = list(TOOL_DRILL = 100, /obj/item/screwdriver/power = 80, /obj/item/pickaxe/drill = 60, TOOL_SCREWDRIVER = 25, /obj/item/kitchen/spoon = 20) time = 30 /datum/surgery_step/drill/preop(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery) diff --git a/code/modules/tgui/external.dm b/code/modules/tgui/external.dm index 8032930268b..5de54c439cc 100644 --- a/code/modules/tgui/external.dm +++ b/code/modules/tgui/external.dm @@ -1,133 +1,142 @@ - /** - * tgui external - * - * Contains all external tgui declarations. - **/ +/** + * tgui external + * + * Contains all external tgui declarations. + */ - /** - * public - * - * Used to open and update UIs. - * If this proc is not implemented properly, the UI will not update correctly. - * - * required user mob The mob who opened/is using the UI. - * optional ui_key string The ui_key of the UI. - * optional ui datum/tgui The UI to be updated, if it exists. - * optional force_open bool If the UI should be re-opened instead of updated. - * optional master_ui datum/tgui The parent UI. - * optional state datum/ui_state The state used to determine status. - **/ +/** + * public + * + * Used to open and update UIs. + * If this proc is not implemented properly, the UI will not update correctly. + * + * required user mob The mob who opened/is using the UI. + * optional ui_key string The ui_key of the UI. + * optional ui datum/tgui The UI to be updated, if it exists. + * optional force_open bool If the UI should be re-opened instead of updated. + * optional master_ui datum/tgui The parent UI. + * optional state datum/ui_state The state used to determine status. + */ /datum/proc/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) return FALSE // Not implemented. - /** - * public - * - * Data to be sent to the UI. - * This must be implemented for a UI to work. - * - * required user mob The mob interacting with the UI. - * - * return list Data to be sent to the UI. - **/ +/** + * public + * + * Data to be sent to the UI. + * This must be implemented for a UI to work. + * + * required user mob The mob interacting with the UI. + * + * return list Data to be sent to the UI. + */ /datum/proc/ui_data(mob/user) return list() // Not implemented. - /** - * public - * - * Static Data to be sent to the UI. - * Static data differs from normal data in that it's large data that should be sent infrequently - * This is implemented optionally for heavy uis that would be sending a lot of redundant data - * frequently. - * Gets squished into one object on the frontend side, but the static part is cached. - * - * required user mob The mob interacting with the UI. - * - * return list Statuic Data to be sent to the UI. - **/ +/** + * public + * + * Static Data to be sent to the UI. + * Static data differs from normal data in that it's large data that should be sent infrequently + * This is implemented optionally for heavy uis that would be sending a lot of redundant data + * frequently. + * Gets squished into one object on the frontend side, but the static part is cached. + * + * required user mob The mob interacting with the UI. + * + * return list Statuic Data to be sent to the UI. + */ /datum/proc/ui_static_data(mob/user) return list() /** - * public - * - * Forces an update on static data. Should be done manually whenever something happens to change static data. - * - * required user the mob currently interacting with the ui - * optional ui ui to be updated - * optional ui_key ui key of ui to be updated - * -**/ + * public + * + * Forces an update on static data. Should be done manually whenever something happens to change static data. + * + * required user the mob currently interacting with the ui + * optional ui ui to be updated + * optional ui_key ui key of ui to be updated + */ /datum/proc/update_static_data(mob/user, datum/tgui/ui, ui_key = "main") ui = SStgui.try_update_ui(user, src, ui_key, ui) + // If there was no ui to update, there's no static data to update either. if(!ui) - return //If there was no ui to update, there's no static data to update either. + return ui.push_data(null, ui_static_data(), TRUE) - /** - * public - * - * Called on a UI when the UI receieves a href. - * Think of this as Topic(). - * - * required action string The action/button that has been invoked by the user. - * required params list A list of parameters attached to the button. - * - * return bool If the UI should be updated or not. - **/ +/** + * public + * + * Called on a UI when the UI receieves a href. + * Think of this as Topic(). + * + * required action string The action/button that has been invoked by the user. + * required params list A list of parameters attached to the button. + * + * return bool If the UI should be updated or not. + */ /datum/proc/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) + // If UI is not interactive or usr calling Topic is not the UI user, bail. if(!ui || ui.status != UI_INTERACTIVE) - return 1 // If UI is not interactive or usr calling Topic is not the UI user, bail. + return 1 - /** - * public - * - * Called on an object when a tgui object is being created, allowing you to customise the html - * For example: inserting a custom stylesheet that you need in the head - * - * For this purpose, some tags are available in the html, to be parsed out with replacetext - * (customheadhtml) - Additions to the head tag - * - * required html the html base text - * - **/ +/** + * public + * + * Called on an object when a tgui object is being created, allowing you to + * customise the html + * For example: inserting a custom stylesheet that you need in the head + * + * For this purpose, some tags are available in the html, to be parsed out + ^ with replacetext + * (customheadhtml) - Additions to the head tag + * + * required html the html base text + */ /datum/proc/ui_base_html(html) return html - /** - * private - * - * The UI's host object (usually src_object). - * This allows modules/datums to have the UI attached to them, - * and be a part of another object. - **/ +/** + * private + * + * The UI's host object (usually src_object). + * This allows modules/datums to have the UI attached to them, + * and be a part of another object. + */ /datum/proc/ui_host(mob/user) return src // Default src. - /** - * global - * - * Used to track UIs for a mob. - **/ +/** + * global + * + * Associative list of JSON-encoded shared states that were set by + * tgui clients. + */ +/datum/var/list/tgui_shared_states + +/** + * global + * + * Used to track UIs for a mob. + */ /mob/var/list/open_uis = list() - /** - * public - * - * Called on a UI's object when the UI is closed, not to be confused with client/verb/uiclose(), which closes the ui window - * - * - **/ +/** + * public + * + * Called on a UI's object when the UI is closed, not to be confused with + * client/verb/uiclose(), which closes the ui window + */ /datum/proc/ui_close(mob/user) - /** - * verb - * - * Called by UIs when they are closed. - * Must be a verb so winset() can call it. - * - * required uiref ref The UI that was closed. - **/ +/** + * verb + * + * Called by UIs when they are closed. + * Must be a verb so winset() can call it. + * + * required uiref ref The UI that was closed. + */ /client/verb/uiclose(ref as text) // Name the verb, and hide it from the user panel. set name = "uiclose" diff --git a/code/modules/tgui/states.dm b/code/modules/tgui/states.dm index d66d5d30364..7a87ed916f1 100644 --- a/code/modules/tgui/states.dm +++ b/code/modules/tgui/states.dm @@ -1,19 +1,19 @@ - /** - * tgui states - * - * Base state and helpers for states. Just does some sanity checks, implement a state for in-depth checks. - **/ +/** + * tgui states + * + * Base state and helpers for states. Just does some sanity checks, implement a state for in-depth checks. + */ - /** - * public - * - * Checks the UI state for a mob. - * - * required user mob The mob who opened/is using the UI. - * required state datum/ui_state The state to check. - * - * return UI_state The state of the UI. - **/ +/** + * public + * + * Checks the UI state for a mob. + * + * required user mob The mob who opened/is using the UI. + * required state datum/ui_state The state to check. + * + * return UI_state The state of the UI. + */ /datum/proc/ui_status(mob/user, datum/ui_state/state) var/src_object = ui_host(user) . = UI_CLOSE @@ -34,27 +34,27 @@ var/result = state.can_use_topic(src_object, user) . = max(., result) - /** - * private - * - * Checks if a user can use src_object's UI, and returns the state. - * Can call a mob proc, which allows overrides for each mob. - * - * required src_object datum The object/datum which owns the UI. - * required user mob The mob who opened/is using the UI. - * - * return UI_state The state of the UI. - **/ +/** + * private + * + * Checks if a user can use src_object's UI, and returns the state. + * Can call a mob proc, which allows overrides for each mob. + * + * required src_object datum The object/datum which owns the UI. + * required user mob The mob who opened/is using the UI. + * + * return UI_state The state of the UI. + */ /datum/ui_state/proc/can_use_topic(src_object, mob/user) return UI_CLOSE // Don't allow interaction by default. - /** - * public - * - * Standard interaction/sanity checks. Different mob types may have overrides. - * - * return UI_state The state of the UI. - **/ +/** + * public + * + * Standard interaction/sanity checks. Different mob types may have overrides. + * + * return UI_state The state of the UI. + */ /mob/proc/shared_ui_interaction(src_object) if(!client) // Close UIs if mindless. return UI_CLOSE @@ -80,29 +80,29 @@ return ..() /** - * public - * - * Check the distance for a living mob. - * Really only used for checks outside the context of a mob. - * Otherwise, use shared_living_ui_distance(). - * - * required src_object The object which owns the UI. - * required user mob The mob who opened/is using the UI. - * - * return UI_state The state of the UI. - **/ + * public + * + * Check the distance for a living mob. + * Really only used for checks outside the context of a mob. + * Otherwise, use shared_living_ui_distance(). + * + * required src_object The object which owns the UI. + * required user mob The mob who opened/is using the UI. + * + * return UI_state The state of the UI. + */ /atom/proc/contents_ui_distance(src_object, mob/living/user) return user.shared_living_ui_distance(src_object) // Just call this mob's check. - /** - * public - * - * Distance versus interaction check. - * - * required src_object atom/movable The object which owns the UI. - * - * return UI_state The state of the UI. - **/ +/** + * public + * + * Distance versus interaction check. + * + * required src_object atom/movable The object which owns the UI. + * + * return UI_state The state of the UI. + */ /mob/living/proc/shared_living_ui_distance(atom/movable/src_object, viewcheck = TRUE) if(viewcheck && !(src_object in view(src))) // If the object is obscured, close it. return UI_CLOSE diff --git a/code/modules/tgui/states/admin.dm b/code/modules/tgui/states/admin.dm index 945a8644301..61fc3731188 100644 --- a/code/modules/tgui/states/admin.dm +++ b/code/modules/tgui/states/admin.dm @@ -1,8 +1,8 @@ - /** - * tgui state: admin_state - * - * Checks that the user is an admin, end-of-story. - **/ +/** + * tgui state: admin_state + * + * Checks that the user is an admin, end-of-story. + */ GLOBAL_DATUM_INIT(admin_state, /datum/ui_state/admin_state, new) diff --git a/code/modules/tgui/states/always.dm b/code/modules/tgui/states/always.dm index b6c689d5d8b..a741e2e3d4b 100644 --- a/code/modules/tgui/states/always.dm +++ b/code/modules/tgui/states/always.dm @@ -1,9 +1,8 @@ - - /** - * tgui state: always_state - * - * Always grants the user UI_INTERACTIVE. Period. - **/ +/** + * tgui state: always_state + * + * Always grants the user UI_INTERACTIVE. Period. + */ GLOBAL_DATUM_INIT(always_state, /datum/ui_state/always_state, new) diff --git a/code/modules/tgui/states/conscious.dm b/code/modules/tgui/states/conscious.dm index 4323c1391c4..4e2793d1300 100644 --- a/code/modules/tgui/states/conscious.dm +++ b/code/modules/tgui/states/conscious.dm @@ -1,8 +1,8 @@ - /** - * tgui state: conscious_state - * - * Only checks if the user is conscious. - **/ +/** + * tgui state: conscious_state + * + * Only checks if the user is conscious. + */ GLOBAL_DATUM_INIT(conscious_state, /datum/ui_state/conscious_state, new) diff --git a/code/modules/tgui/states/contained.dm b/code/modules/tgui/states/contained.dm index 7387f7e6cbb..f02424d01e6 100644 --- a/code/modules/tgui/states/contained.dm +++ b/code/modules/tgui/states/contained.dm @@ -1,8 +1,8 @@ - /** - * tgui state: contained_state - * - * Checks that the user is inside the src_object. - **/ +/** + * tgui state: contained_state + * + * Checks that the user is inside the src_object. + */ GLOBAL_DATUM_INIT(contained_state, /datum/ui_state/contained_state, new) diff --git a/code/modules/tgui/states/deep_inventory.dm b/code/modules/tgui/states/deep_inventory.dm index 06bdb92f3a5..43758cbab17 100644 --- a/code/modules/tgui/states/deep_inventory.dm +++ b/code/modules/tgui/states/deep_inventory.dm @@ -1,8 +1,8 @@ - /** - * tgui state: deep_inventory_state - * - * Checks that the src_object is in the user's deep (backpack, box, toolbox, etc) inventory. - **/ +/** + * tgui state: deep_inventory_state + * + * Checks that the src_object is in the user's deep (backpack, box, toolbox, etc) inventory. + */ GLOBAL_DATUM_INIT(deep_inventory_state, /datum/ui_state/deep_inventory_state, new) diff --git a/code/modules/tgui/states/default.dm b/code/modules/tgui/states/default.dm index c6741f20b8b..6bb159640e4 100644 --- a/code/modules/tgui/states/default.dm +++ b/code/modules/tgui/states/default.dm @@ -1,8 +1,8 @@ - /** - * tgui state: default_state - * - * Checks a number of things -- mostly physical distance for humans and view for robots. - **/ +/** + * tgui state: default_state + * + * Checks a number of things -- mostly physical distance for humans and view for robots. + */ GLOBAL_DATUM_INIT(default_state, /datum/ui_state/default, new) diff --git a/code/modules/tgui/states/hands.dm b/code/modules/tgui/states/hands.dm index 5da0e5d500f..aedae477dd2 100644 --- a/code/modules/tgui/states/hands.dm +++ b/code/modules/tgui/states/hands.dm @@ -1,8 +1,8 @@ - /** - * tgui state: hands_state - * - * Checks that the src_object is in the user's hands. - **/ +/** + * tgui state: hands_state + * + * Checks that the src_object is in the user's hands. + */ GLOBAL_DATUM_INIT(hands_state, /datum/ui_state/hands_state, new) diff --git a/code/modules/tgui/states/human_adjacent.dm b/code/modules/tgui/states/human_adjacent.dm index 0ab20b36ffd..7aefe43e44c 100644 --- a/code/modules/tgui/states/human_adjacent.dm +++ b/code/modules/tgui/states/human_adjacent.dm @@ -1,10 +1,9 @@ - - /** - * tgui state: human_adjacent_state - * - * In addition to default checks, only allows interaction for a - * human adjacent user. - **/ +/** + * tgui state: human_adjacent_state + * + * In addition to default checks, only allows interaction for a + * human adjacent user. + */ GLOBAL_DATUM_INIT(human_adjacent_state, /datum/ui_state/human_adjacent_state, new) diff --git a/code/modules/tgui/states/inventory.dm b/code/modules/tgui/states/inventory.dm index b8b1ad3b6a9..43fe2cb4512 100644 --- a/code/modules/tgui/states/inventory.dm +++ b/code/modules/tgui/states/inventory.dm @@ -1,8 +1,8 @@ - /** - * tgui state: inventory_state - * - * Checks that the src_object is in the user's top-level (hand, ear, pocket, belt, etc) inventory. - **/ +/** + * tgui state: inventory_state + * + * Checks that the src_object is in the user's top-level (hand, ear, pocket, belt, etc) inventory. + */ GLOBAL_DATUM_INIT(inventory_state, /datum/ui_state/inventory_state, new) diff --git a/code/modules/tgui/states/language_menu.dm b/code/modules/tgui/states/language_menu.dm index fedc4320e47..5c816c8922a 100644 --- a/code/modules/tgui/states/language_menu.dm +++ b/code/modules/tgui/states/language_menu.dm @@ -1,6 +1,6 @@ - /** - * tgui state: language_menu_state - */ +/** + * tgui state: language_menu_state + */ GLOBAL_DATUM_INIT(language_menu_state, /datum/ui_state/language_menu, new) diff --git a/code/modules/tgui/states/not_incapacitated.dm b/code/modules/tgui/states/not_incapacitated.dm index 1fde1d34d0f..1b48f7f41a4 100644 --- a/code/modules/tgui/states/not_incapacitated.dm +++ b/code/modules/tgui/states/not_incapacitated.dm @@ -1,16 +1,16 @@ - /** - * tgui state: not_incapacitated_state - * - * Checks that the user isn't incapacitated - **/ +/** + * tgui state: not_incapacitated_state + * + * Checks that the user isn't incapacitated + */ GLOBAL_DATUM_INIT(not_incapacitated_state, /datum/ui_state/not_incapacitated_state, new) - /** - * tgui state: not_incapacitated_turf_state - * - * Checks that the user isn't incapacitated and that their loc is a turf - **/ +/** + * tgui state: not_incapacitated_turf_state + * + * Checks that the user isn't incapacitated and that their loc is a turf + */ GLOBAL_DATUM_INIT(not_incapacitated_turf_state, /datum/ui_state/not_incapacitated_state, new(no_turfs = TRUE)) diff --git a/code/modules/tgui/states/notcontained.dm b/code/modules/tgui/states/notcontained.dm index 77a7fe01b00..642c6ce95f4 100644 --- a/code/modules/tgui/states/notcontained.dm +++ b/code/modules/tgui/states/notcontained.dm @@ -1,8 +1,8 @@ - /** - * tgui state: notcontained_state - * - * Checks that the user is not inside src_object, and then makes the default checks. - **/ +/** + * tgui state: notcontained_state + * + * Checks that the user is not inside src_object, and then makes the default checks. + */ GLOBAL_DATUM_INIT(notcontained_state, /datum/ui_state/notcontained_state, new) diff --git a/code/modules/tgui/states/observer.dm b/code/modules/tgui/states/observer.dm index ade0ce66bb8..86ad776b135 100644 --- a/code/modules/tgui/states/observer.dm +++ b/code/modules/tgui/states/observer.dm @@ -1,8 +1,8 @@ - /** - * tgui state: observer_state - * - * Checks that the user is an observer/ghost. - **/ +/** + * tgui state: observer_state + * + * Checks that the user is an observer/ghost. + */ GLOBAL_DATUM_INIT(observer_state, /datum/ui_state/observer_state, new) diff --git a/code/modules/tgui/states/physical.dm b/code/modules/tgui/states/physical.dm index da994cdb884..88c8a291aa8 100644 --- a/code/modules/tgui/states/physical.dm +++ b/code/modules/tgui/states/physical.dm @@ -1,8 +1,8 @@ - /** - * tgui state: physical_state - * - * Short-circuits the default state to only check physical distance. - **/ +/** + * tgui state: physical_state + * + * Short-circuits the default state to only check physical distance. + */ GLOBAL_DATUM_INIT(physical_state, /datum/ui_state/physical, new) @@ -24,11 +24,11 @@ GLOBAL_DATUM_INIT(physical_state, /datum/ui_state/physical, new) return UI_UPDATE // AIs are not physical. - /** - * tgui state: physical_obscured_state - * - * Short-circuits the default state to only check physical distance, being in view doesn't matter - **/ +/** + * tgui state: physical_obscured_state + * + * Short-circuits the default state to only check physical distance, being in view doesn't matter + */ GLOBAL_DATUM_INIT(physical_obscured_state, /datum/ui_state/physical_obscured_state, new) diff --git a/code/modules/tgui/states/self.dm b/code/modules/tgui/states/self.dm index 10849772c6c..b0c9500fbcf 100644 --- a/code/modules/tgui/states/self.dm +++ b/code/modules/tgui/states/self.dm @@ -1,8 +1,8 @@ - /** - * tgui state: self_state - * - * Only checks that the user and src_object are the same. - **/ +/** + * tgui state: self_state + * + * Only checks that the user and src_object are the same. + */ GLOBAL_DATUM_INIT(self_state, /datum/ui_state/self_state, new) diff --git a/code/modules/tgui/states/zlevel.dm b/code/modules/tgui/states/zlevel.dm index 6ccfd0fe7dd..5e3ccfb7de2 100644 --- a/code/modules/tgui/states/zlevel.dm +++ b/code/modules/tgui/states/zlevel.dm @@ -1,8 +1,8 @@ - /** - * tgui state: z_state - * - * Only checks that the Z-level of the user and src_object are the same. - **/ +/** + * tgui state: z_state + * + * Only checks that the Z-level of the user and src_object are the same. + */ GLOBAL_DATUM_INIT(z_state, /datum/ui_state/z_state, new) diff --git a/code/modules/tgui/subsystem.dm b/code/modules/tgui/subsystem.dm index 90a00fb6074..cbe94e2d7f5 100644 --- a/code/modules/tgui/subsystem.dm +++ b/code/modules/tgui/subsystem.dm @@ -1,22 +1,22 @@ - /** - * tgui subsystem - * - * Contains all tgui state and subsystem code. - **/ +/** + * tgui subsystem + * + * Contains all tgui state and subsystem code. + */ - /** - * public - * - * Get a open UI given a user, src_object, and ui_key and try to update it with data. - * - * required user mob The mob who opened/is using the UI. - * required src_object datum The object/datum which owns the UI. - * required ui_key string The ui_key of the UI. - * optional ui datum/tgui The UI to be updated, if it exists. - * optional force_open bool If the UI should be re-opened instead of updated. - * - * return datum/tgui The found UI. - **/ +/** + * public + * + * Get a open UI given a user, src_object, and ui_key and try to update it with data. + * + * required user mob The mob who opened/is using the UI. + * required src_object datum The object/datum which owns the UI. + * required ui_key string The ui_key of the UI. + * optional ui datum/tgui The UI to be updated, if it exists. + * optional force_open bool If the UI should be re-opened instead of updated. + * + * return datum/tgui The found UI. + */ /datum/controller/subsystem/tgui/proc/try_update_ui(mob/user, datum/src_object, ui_key, datum/tgui/ui, force_open = FALSE) if(isnull(ui)) // No UI was passed, so look for one. ui = get_open_ui(user, src_object, ui_key) @@ -31,17 +31,17 @@ else return null // We couldn't find a UI. - /** - * private - * - * Get a open UI given a user, src_object, and ui_key. - * - * required user mob The mob who opened/is using the UI. - * required src_object datum The object/datum which owns the UI. - * required ui_key string The ui_key of the UI. - * - * return datum/tgui The found UI. - **/ +/** + * private + * + * Get a open UI given a user, src_object, and ui_key. + * + * required user mob The mob who opened/is using the UI. + * required src_object datum The object/datum which owns the UI. + * required ui_key string The ui_key of the UI. + * + * return datum/tgui The found UI. + */ /datum/controller/subsystem/tgui/proc/get_open_ui(mob/user, datum/src_object, ui_key) var/src_object_key = "[REF(src_object)]" if(isnull(open_uis[src_object_key]) || !istype(open_uis[src_object_key], /list)) @@ -55,15 +55,15 @@ return null // Couldn't find a UI! - /** - * private - * - * Update all UIs attached to src_object. - * - * required src_object datum The object/datum which owns the UIs. - * - * return int The number of UIs updated. - **/ +/** + * private + * + * Update all UIs attached to src_object. + * + * required src_object datum The object/datum which owns the UIs. + * + * return int The number of UIs updated. + */ /datum/controller/subsystem/tgui/proc/update_uis(datum/src_object) var/src_object_key = "[REF(src_object)]" if(isnull(open_uis[src_object_key]) || !istype(open_uis[src_object_key], /list)) @@ -77,15 +77,15 @@ update_count++ // Count each UI we update. return update_count - /** - * private - * - * Close all UIs attached to src_object. - * - * required src_object datum The object/datum which owns the UIs. - * - * return int The number of UIs closed. - **/ +/** + * private + * + * Close all UIs attached to src_object. + * + * required src_object datum The object/datum which owns the UIs. + * + * return int The number of UIs closed. + */ /datum/controller/subsystem/tgui/proc/close_uis(datum/src_object) var/src_object_key = "[REF(src_object)]" if(isnull(open_uis[src_object_key]) || !istype(open_uis[src_object_key], /list)) @@ -99,13 +99,13 @@ close_count++ // Count each UI we close. return close_count - /** - * private - * - * Close *ALL* UIs - * - * return int The number of UIs closed. - **/ +/** + * private + * + * Close *ALL* UIs + * + * return int The number of UIs closed. + */ /datum/controller/subsystem/tgui/proc/close_all_uis() var/close_count = 0 for(var/src_object_key in open_uis) @@ -116,17 +116,17 @@ close_count++ // Count each UI we close. return close_count - /** - * private - * - * Update all UIs belonging to a user. - * - * required user mob The mob who opened/is using the UI. - * optional src_object datum If provided, only update UIs belonging this src_object. - * optional ui_key string If provided, only update UIs with this UI key. - * - * return int The number of UIs updated. - **/ +/** + * private + * + * Update all UIs belonging to a user. + * + * required user mob The mob who opened/is using the UI. + * optional src_object datum If provided, only update UIs belonging this src_object. + * optional ui_key string If provided, only update UIs with this UI key. + * + * return int The number of UIs updated. + */ /datum/controller/subsystem/tgui/proc/update_user_uis(mob/user, datum/src_object = null, ui_key = null) if(isnull(user.open_uis) || !istype(user.open_uis, /list) || open_uis.len == 0) return 0 // Couldn't find any UIs for this user. @@ -138,17 +138,17 @@ update_count++ // Count each UI we upadte. return update_count - /** - * private - * - * Close all UIs belonging to a user. - * - * required user mob The mob who opened/is using the UI. - * optional src_object datum If provided, only close UIs belonging this src_object. - * optional ui_key string If provided, only close UIs with this UI key. - * - * return int The number of UIs closed. - **/ +/** + * private + * + * Close all UIs belonging to a user. + * + * required user mob The mob who opened/is using the UI. + * optional src_object datum If provided, only close UIs belonging this src_object. + * optional ui_key string If provided, only close UIs with this UI key. + * + * return int The number of UIs closed. + */ /datum/controller/subsystem/tgui/proc/close_user_uis(mob/user, datum/src_object = null, ui_key = null) if(isnull(user.open_uis) || !istype(user.open_uis, /list) || open_uis.len == 0) return 0 // Couldn't find any UIs for this user. @@ -160,13 +160,13 @@ close_count++ // Count each UI we close. return close_count - /** - * private - * - * Add a UI to the list of open UIs. - * - * required ui datum/tgui The UI to be added. - **/ +/** + * private + * + * Add a UI to the list of open UIs. + * + * required ui datum/tgui The UI to be added. + */ /datum/controller/subsystem/tgui/proc/on_open(datum/tgui/ui) var/src_object_key = "[REF(ui.src_object)]" if(isnull(open_uis[src_object_key]) || !istype(open_uis[src_object_key], /list)) @@ -180,15 +180,15 @@ uis |= ui processing_uis |= ui - /** - * private - * - * Remove a UI from the list of open UIs. - * - * required ui datum/tgui The UI to be removed. - * - * return bool If the UI was removed or not. - **/ +/** + * private + * + * Remove a UI from the list of open UIs. + * + * required ui datum/tgui The UI to be removed. + * + * return bool If the UI was removed or not. + */ /datum/controller/subsystem/tgui/proc/on_close(datum/tgui/ui) var/src_object_key = "[REF(ui.src_object)]" if(isnull(open_uis[src_object_key]) || !istype(open_uis[src_object_key], /list)) @@ -210,28 +210,28 @@ return 1 // Let the caller know we did it. - /** - * private - * - * Handle client logout, by closing all their UIs. - * - * required user mob The mob which logged out. - * - * return int The number of UIs closed. - **/ +/** + * private + * + * Handle client logout, by closing all their UIs. + * + * required user mob The mob which logged out. + * + * return int The number of UIs closed. + */ /datum/controller/subsystem/tgui/proc/on_logout(mob/user) return close_user_uis(user) - /** - * private - * - * Handle clients switching mobs, by transferring their UIs. - * - * required user source The client's original mob. - * required user target The client's new mob. - * - * return bool If the UIs were transferred. - **/ +/** + * private + * + * Handle clients switching mobs, by transferring their UIs. + * + * required user source The client's original mob. + * required user target The client's new mob. + * + * return bool If the UIs were transferred. + */ /datum/controller/subsystem/tgui/proc/on_transfer(mob/source, mob/target) if(!source || isnull(source.open_uis) || !istype(source.open_uis, /list) || open_uis.len == 0) return 0 // The old mob had no open UIs. diff --git a/code/modules/tgui/tgui.dm b/code/modules/tgui/tgui.dm index 8340f993d4d..6cdb8ecc230 100644 --- a/code/modules/tgui/tgui.dm +++ b/code/modules/tgui/tgui.dm @@ -1,12 +1,12 @@ - /** - * tgui - * - * /tg/station user interface library - **/ +/** + * tgui + * + * /tg/station user interface library + */ - /** - * tgui datum (represents a UI). - **/ +/** + * tgui datum (represents a UI). + */ /datum/tgui /// The mob who opened/is using the UI. var/mob/user @@ -22,8 +22,6 @@ var/width = 0 /// The window height var/height = 0 - /// The style to be used for this UI. - var/style = "nanotrasen" /// The interface (template) to be used for this UI. var/interface /// Update the UI every MC tick. @@ -34,6 +32,8 @@ var/list/initial_data /// The static data used to initialize the UI. var/list/initial_static_data + /// Holder for the json string, that is sent during the initial update + var/_initial_update /// The status/visibility of the UI. var/status = UI_INTERACTIVE /// Topic state used to determine status/interactability. @@ -42,34 +42,31 @@ var/datum/tgui/master_ui /// Children of this UI. var/list/datum/tgui/children = list() - var/custom_browser_id = FALSE - var/ui_screen = "home" - /** - * public - * - * Create a new UI. - * - * required user mob The mob who opened/is using the UI. - * required src_object datum The object or datum which owns the UI. - * required ui_key string The ui_key of the UI. - * required interface string The interface used to render the UI. - * optional title string The title of the UI. - * optional width int The window width. - * optional height int The window height. - * optional master_ui datum/tgui The parent UI. - * optional state datum/ui_state The state used to determine status. - * - * return datum/tgui The requested UI. - **/ -/datum/tgui/New(mob/user, datum/src_object, ui_key, interface, title, width = 0, height = 0, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state, browser_id = null) +/** + * public + * + * Create a new UI. + * + * required user mob The mob who opened/is using the UI. + * required src_object datum The object or datum which owns the UI. + * required ui_key string The ui_key of the UI. + * required interface string The interface used to render the UI. + * optional title string The title of the UI. + * optional width int The window width. + * optional height int The window height. + * optional master_ui datum/tgui The parent UI. + * optional state datum/ui_state The state used to determine status. + * + * return datum/tgui The requested UI. + */ +/datum/tgui/New(mob/user, datum/src_object, ui_key, interface, title, width = 0, height = 0, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) src.user = user src.src_object = src_object src.ui_key = ui_key - src.window_id = browser_id ? browser_id : "[REF(src_object)]-[ui_key]" // DO NOT replace with \ref here. src_object could potentially be tagged - src.custom_browser_id = browser_id ? TRUE : FALSE - - set_interface(interface) + // DO NOT replace with \ref here. src_object could potentially be tagged + src.window_id = "[REF(src_object)]-[ui_key]" + src.interface = interface if(title) src.title = sanitize(title) @@ -86,11 +83,11 @@ var/datum/asset/assets = get_asset_datum(/datum/asset/group/tgui) assets.send(user) - /** - * public - * - * Open this UI (and initialize it with data). - **/ +/** + * public + * + * Open this UI (and initialize it with data). + */ /datum/tgui/proc/open() if(!user.client) return // Bail if there is no client. @@ -99,18 +96,16 @@ if(status < UI_UPDATE) return // Bail if we're not supposed to open. - var/window_size - if(width && height) // If we have a width and height, use them. - window_size = "size=[width]x[height];" - else - window_size = "" - + // Build window options + var/window_options = "can_minimize=0;auto_format=0;" + // If we have a width and height, use them. + if(width && height) + window_options += "size=[width]x[height];" // Remove titlebar and resize handles for a fancy window - var/have_title_bar if(user.client.prefs.tgui_fancy) - have_title_bar = "titlebar=0;can_resize=0;" + window_options += "titlebar=0;can_resize=0;" else - have_title_bar = "titlebar=1;can_resize=1;" + window_options += "titlebar=1;can_resize=1;" // Generate page html var/html @@ -120,47 +115,49 @@ // Replace template tokens with important UI data // NOTE: Intentional \ref usage; tgui datums can't/shouldn't // be tagged, so this is an effective unwrap - html = replacetextEx(html, "\[ref]", "\ref[src]") - html = replacetextEx(html, "\[style]", style) + html = replacetextEx(html, "\[tgui:ref]", "\ref[src]") // Open the window. - user << browse(html, "window=[window_id];can_minimize=0;auto_format=0;[window_size][have_title_bar]") - if (!custom_browser_id) - // Instruct the client to signal UI when the window is closed. - // NOTE: Intentional \ref usage; tgui datums can't/shouldn't - // be tagged, so this is an effective unwrap - winset(user, window_id, "on-close=\"uiclose \ref[src]\"") + user << browse(html, "window=[window_id];[window_options]") + // Instruct the client to signal UI when the window is closed. + // NOTE: Intentional \ref usage; tgui datums can't/shouldn't + // be tagged, so this is an effective unwrap + winset(user, window_id, "on-close=\"uiclose \ref[src]\"") + + // Pre-fetch initial state while browser is still loading in + // another thread if(!initial_data) initial_data = src_object.ui_data(user) if(!initial_static_data) initial_static_data = src_object.ui_static_data(user) + _initial_update = url_encode(get_json(initial_data, initial_static_data)) SStgui.on_open(src) - /** - * public - * - * Reinitialize the UI. - * (Possibly with a new interface and/or data). - * - * optional template string The name of the new interface. - * optional data list The new initial data. - **/ +/** + * public + * + * Reinitialize the UI. + * (Possibly with a new interface and/or data). + * + * optional template string The name of the new interface. + * optional data list The new initial data. + */ /datum/tgui/proc/reinitialize(interface, list/data, list/static_data) if(interface) - set_interface(interface) // Set a new interface. + src.interface = interface if(data) initial_data = data if(static_data) initial_static_data = static_data open() - /** - * public - * - * Close the UI, and all its children. - **/ +/** + * public + * + * Close the UI, and all its children. + */ /datum/tgui/proc/close() user << browse(null, "window=[window_id]") // Close the window. src_object.ui_close(user) @@ -172,55 +169,33 @@ master_ui = null qdel(src) - /** - * public - * - * Set the style for this UI. - * - * required style string The new UI style. - **/ -/datum/tgui/proc/set_style(style) - src.style = lowertext(style) - - /** - * public - * - * Set the interface (template) for this UI. - * - * required interface string The new UI interface. - **/ -/datum/tgui/proc/set_interface(interface) - src.interface = lowertext(interface) - - /** - * public - * - * Enable/disable auto-updating of the UI. - * - * required state bool Enable/disable auto-updating. - **/ +/** + * public + * + * Enable/disable auto-updating of the UI. + * + * required state bool Enable/disable auto-updating. + */ /datum/tgui/proc/set_autoupdate(state = TRUE) autoupdate = state - /** - * private - * - * Package the data to send to the UI, as JSON. - * This includes the UI data and config_data. - * - * return string The packaged JSON. - **/ +/** + * private + * + * Package the data to send to the UI, as JSON. + * This includes the UI data and config_data. + * + * return string The packaged JSON. + */ /datum/tgui/proc/get_json(list/data, list/static_data) var/list/json_data = list() json_data["config"] = list( "title" = title, "status" = status, - "screen" = ui_screen, - "style" = style, "interface" = interface, "fancy" = user.client.prefs.tgui_fancy, - "locked" = user.client.prefs.tgui_lock && !custom_browser_id, + "locked" = user.client.prefs.tgui_lock, "observer" = isobserver(user), "window" = window_id, // NOTE: Intentional \ref usage; tgui datums can't/shouldn't @@ -233,6 +208,10 @@ if(!isnull(static_data)) json_data["static_data"] = static_data + // Send shared states + if(src_object.tgui_shared_states) + json_data["shared"] = src_object.tgui_shared_states + // Generate the JSON. var/json = json_encode(json_data) // Strip #255/improper. @@ -240,13 +219,13 @@ json = replacetext(json, "\improper", "") return json - /** - * private - * - * Handle clicks from the UI. - * Call the src_object's ui_act() if status is UI_INTERACTIVE. - * If the src_object's ui_act() returns 1, update all UIs attacked to it. - **/ +/** + * private + * + * Handle clicks from the UI. + * Call the src_object's ui_act() if status is UI_INTERACTIVE. + * If the src_object's ui_act() returns 1, update all UIs attacked to it. + */ /datum/tgui/Topic(href, href_list) if(user != usr) return // Something is not right here. @@ -256,12 +235,24 @@ switch(action) if("tgui:initialize") - user << output(url_encode(get_json(initial_data, initial_static_data)), "[custom_browser_id ? window_id : "[window_id].browser"]:initialize") + user << output(_initial_update, "[window_id].browser:update") initialized = TRUE - if("tgui:view") - if(params["screen"]) - ui_screen = params["screen"] + if("tgui:setSharedState") + // Update the window state. + update_status(push = FALSE) + // Bail if UI is not interactive or usr calling Topic + // is not the UI user. + if(status != UI_INTERACTIVE) + return + var/key = params["key"] + var/value = params["value"] + if(!src_object.tgui_shared_states) + src_object.tgui_shared_states = list() + src_object.tgui_shared_states[key] = value SStgui.update_uis(src_object) + if("tgui:setFancy") + var/value = text2num(params["value"]) + user.client.prefs.tgui_fancy = value if("tgui:log") // Force window to show frills on fatal errors if(params["fatal"]) @@ -269,23 +260,22 @@ log_message(params["log"]) if("tgui:link") user << link(params["url"]) - if("tgui:fancy") - user.client.prefs.tgui_fancy = TRUE - if("tgui:nofrills") - user.client.prefs.tgui_fancy = FALSE else - update_status(push = FALSE) // Update the window state. - if(src_object.ui_act(action, params, src, state)) // Call ui_act() on the src_object. - SStgui.update_uis(src_object) // Update if the object requested it. + // Update the window state. + update_status(push = FALSE) + // Call ui_act() on the src_object. + if(src_object.ui_act(action, params, src, state)) + // Update if the object requested it. + SStgui.update_uis(src_object) - /** - * private - * - * Update the UI. - * Only updates the data if update is true, otherwise only updates the status. - * - * optional force bool If the UI should be forced to update. - **/ +/** + * private + * + * Update the UI. + * Only updates the data if update is true, otherwise only updates the status. + * + * optional force bool If the UI should be forced to update. + */ /datum/tgui/process(force = FALSE) var/datum/host = src_object.ui_host(user) if(!src_object || !host || !user) // If the object or user died (or something else), abort. @@ -297,42 +287,46 @@ else update_status(push = TRUE) // Otherwise only update status. - /** - * private - * - * Push data to an already open UI. - * - * required data list The data to send. - * optional force bool If the update should be sent regardless of state. - **/ +/** + * private + * + * Push data to an already open UI. + * + * required data list The data to send. + * optional force bool If the update should be sent regardless of state. + */ /datum/tgui/proc/push_data(data, static_data, force = FALSE) - update_status(push = FALSE) // Update the window state. + // Update the window state. + update_status(push = FALSE) + // Cannot update UI if it is not set up yet. if(!initialized) - return // Cannot update UI if it is not set up yet. + return + // Cannot update UI, we have no visibility. if(status <= UI_DISABLED && !force) - return // Cannot update UI, we have no visibility. - + return // Send the new JSON to the update() Javascript function. - user << output(url_encode(get_json(data, static_data)), "[custom_browser_id ? window_id : "[window_id].browser"]:update") + user << output( + url_encode(get_json(data, static_data)), + "[window_id].browser:update") - /** - * private - * - * Updates the UI by interacting with the src_object again, which will hopefully - * call try_ui_update on it. - * - * optional force_open bool If force_open should be passed to ui_interact. - **/ +/** + * private + * + * Updates the UI by interacting with the src_object again, which will hopefully + * call try_ui_update on it. + * + * optional force_open bool If force_open should be passed to ui_interact. + */ /datum/tgui/proc/update(force_open = FALSE) src_object.ui_interact(user, ui_key, src, force_open, master_ui, state) - /** - * private - * - * Update the status/visibility of the UI for its user. - * - * optional push bool Push an update to the UI (an update is always sent for UI_DISABLED). - **/ +/** + * private + * + * Update the status/visibility of the UI for its user. + * + * optional push bool Push an update to the UI (an update is always sent for UI_DISABLED). + */ /datum/tgui/proc/update_status(push = FALSE) var/status = src_object.ui_status(user, state) if(master_ui) @@ -341,23 +335,25 @@ if(status == UI_CLOSE) close() - /** - * private - * - * Set the status/visibility of the UI. - * - * required status int The status to set (UI_CLOSE/UI_DISABLED/UI_UPDATE/UI_INTERACTIVE). - * optional push bool Push an update to the UI (an update is always sent for UI_DISABLED). - **/ +/** + * private + * + * Set the status/visibility of the UI. + * + * required status int The status to set (UI_CLOSE/UI_DISABLED/UI_UPDATE/UI_INTERACTIVE). + * optional push bool Push an update to the UI (an update is always sent for UI_DISABLED). + */ /datum/tgui/proc/set_status(status, push = FALSE) - if(src.status != status) // Only update if status has changed. + // Only update if status has changed. + if(src.status != status) if(src.status == UI_DISABLED) src.status = status if(push) update() else src.status = status - if(status == UI_DISABLED || push) // Update if the UI just because disabled, or a push is requested. + // Update if the UI just because disabled, or a push is requested. + if(status == UI_DISABLED || push) push_data(null, force = TRUE) /datum/tgui/proc/log_message(message) diff --git a/code/modules/uplink/uplink_items.dm b/code/modules/uplink/uplink_items.dm index 74ce7c4a371..bdbd2c39cb3 100644 --- a/code/modules/uplink/uplink_items.dm +++ b/code/modules/uplink/uplink_items.dm @@ -1258,6 +1258,22 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item)) cost = 8 exclude_modes = list(/datum/game_mode/nuclear, /datum/game_mode/nuclear/clown_ops) //you can't buy it in nuke, because the elite hardsuit costs the same while being better +/datum/uplink_item/suits/hardsuit/cybersun + name = "Cybersun Hardsuit" + desc = "A long forgotten hardsuit made by Cybersun industries. \ + Offers ROBUST protection against laser-based weapons, while still giving somewhat good chances \ + to survive assault from a toolbox or shotgun. \ + Not to mention, it doesn't slow you down and contains an integrated jetpack that runs on standard tanks. \ + Systems in this hardsuit make it really hard to take it off from you." + item = /obj/item/clothing/suit/space/hardsuit/cybersun + cost = 14 + exclude_modes = list(/datum/game_mode/nuclear, /datum/game_mode/nuclear/clown_ops) //nuke and clown ops get it for lower value + +/datum/uplink_item/suits/hardsuit/cybersun/nuke + cost = 8 + include_modes = list(/datum/game_mode/nuclear, /datum/game_mode/nuclear/clown_ops) + exclude_modes = list() + /datum/uplink_item/suits/hardsuit/elite name = "Elite Syndicate Hardsuit" desc = "An upgraded, elite version of the Syndicate hardsuit. It features fireproofing, and also \ diff --git a/code/modules/vending/_vending.dm b/code/modules/vending/_vending.dm index 4c37fd3d6a2..6b4159af551 100644 --- a/code/modules/vending/_vending.dm +++ b/code/modules/vending/_vending.dm @@ -685,7 +685,7 @@ GLOBAL_LIST_EMPTY(vending_products) if(!ui) var/datum/asset/assets = get_asset_datum(/datum/asset/spritesheet/vending) assets.send(user) - ui = new(user, src, ui_key, "vending", ui_key, 450, 600, master_ui, state) + ui = new(user, src, ui_key, "Vending", ui_key, 450, 600, master_ui, state) ui.open() /obj/machinery/vending/ui_static_data(mob/user) diff --git a/config/admins.txt b/config/admins.txt index 351e54ba2f6..4d345dbc0bb 100644 --- a/config/admins.txt +++ b/config/admins.txt @@ -140,3 +140,4 @@ Fikou = Game Master Skoglol = Game Master 4dplanner = Game Master Time-Green = Game Master +StyleMistake = Game Master diff --git a/html/changelog.html b/html/changelog.html index 9f469f4e533..bbed8bc99bd 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -51,6 +51,188 @@ -->
+

21 April 2020

+

ArcaneMusic updated:

+ +

Arkatos updated:

+ +

Cartographer-D updated:

+ +

Ghilker updated:

+ +

Toastgoats updated:

+ +

stylemistake updated:

+ + +

20 April 2020

+

Capsandi updated:

+ +

Fikou updated:

+ +

Ghilker updated:

+ +

Mickyan updated:

+ +

Onule updated:

+ +

Qustinnus updated:

+ +

Ryll/Shaps updated:

+ +

Timberpoes updated:

+ +

bobbahbrown updated:

+ +

ominousgrace updated:

+ +

tralezab updated:

+ + +

19 April 2020

+

EgorDinamit updated:

+ +

ShizCalev updated:

+ + +

18 April 2020

+

Akrilla updated:

+ +

AnturK updated:

+ +

Arkatos updated:

+ +

Dennok updated:

+ +

FloranOtten updated:

+ +

Ghilker updated:

+ +

LemonInTheDark updated:

+ +

Mickyan updated:

+ +

TheVekter updated:

+ +

Thunder12345 updated:

+ +

Vondiech updated:

+ +

actioninja updated:

+ +

17 April 2020

ArcaneMusic updated:

GoonStation 13 Development Team diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index 0c8c782c757..53599d76a3f 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -38657,3 +38657,159 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. - bugfix: Fixed Flex component bugs on IE11. - code_imp: Box property, "content", is now deprecated. - code_imp: Grid component is now deprecated. +2020-04-18: + Akrilla: + - rscadd: Equipment swapping, defaulted to V. Allows you to equip items while swapping + out what you're already wearing after a small delay. + AnturK: + - bugfix: fixes arena shuttle + Arkatos: + - bugfix: Fixed an issue where Artificer spell icon was invisible. + Dennok: + - rscdel: Hub layer related coloring + FloranOtten: + - spellcheck: Deadminned themselves. + Ghilker: + - rscadd: Added 3 tiers to the canisters + - rscadd: added canister frames (also tiered) + - rscadd: canisters rupture if there is too much pressure or heat inside (higher + tiers have higher thresholds) + - imageadd: added images for frames and overlays + - rscadd: N2O formation reaction (n2 + o2 + bz as catalyst + cold = n2o) + - rscadd: 'N2O toxic behaviour (if you inhale it you can die in your sleep) changed: + NO2 Formation reaction (n2 + o2 + bz + heat = no2)' + LemonInTheDark: + - bugfix: Fixes bolt colors being jank when exposed to high and then low power + - rscadd: The h2o interactions have been polished and readded. Fucking global variables. + Mickyan: + - bugfix: Being at the epicenter of explosions no longer damage the contents of + storage that is meant to prevent it (most commonly photos inside photo albums) + TheVekter: + - bugfix: Anomalies should no longer spawn at the toxins testing range. + - rscadd: Added an R&D console to the Research Director's office on Meta, Pubby, + Box, Delta, and Donut. + - bugfix: The CMO should now have a stamp in their office on Metastation + Thunder12345: + - rscdel: Cryo syringes and cryo shotgun darts have been removed from the game + Vondiech: + - balance: Nanotrasen has decided to re-draw boxstations powergrid blueprint to + make it easier to work with, for both the engineers they employ on the station + and the engineers who they employ to maintain and work on their blueprints. + actioninja: + - soundadd: Tweaked the flashbang ear ring which is used in a few places to be less + close to actual tinnitus +2020-04-19: + EgorDinamit: + - rscadd: Cybersun hardsuit added to traitors(14TC) and nuke ops(8TC) uplinks. + - tweak: Adds and replaces a few items on the ship, such as firing pins, materials + and encryption keys. + - tweak: Cost and weight values of most space ruins changed. + - balance: Cybersun hardsuit armour values increased. + - balance: Syndicate ship ruin turrets armour and rate of fire changed. + - bugfix: Empty sleeper, that emits GPS signal is now indestructible. + - config: Adds config to edit "important_info" for both, crewmembers and captain + of forgotten ship ruin. + ShizCalev: + - bugfix: Food can no longer be grilled repeatedly to the point of breaking their + name with an endless string. +2020-04-20: + Capsandi: + - tweak: You can now use metal rods to retract skin during surgery if you are that + desperate + - tweak: forks are now viable alternatives to surgical instruments when extracting + organs and implants + Fikou: + - rscadd: You can now make shuttle seats with titanium. + Ghilker: + - rscadd: Added heat and pressure limit to portable pumps and scrubbers + - tweak: changed the damage calculation from a max() to a clamp() between 5 and + 50 + - tweak: reduced max pressure output of t3 canisters to the same as t2 + Mickyan: + - bugfix: Fixed botanists dropping their heirlooms on the ground. Plant bag is no + longer a heirloom option. + Onule: + - imageadd: Recent changes in the manufacture of titanium sheets introduces a fresh + new look! Expect your shuttles to look different. + Qustinnus: + - code_imp: carps now dont look for 9 tiles around them every process to locate + a single piece of plastic that they can only interact with if they're next to + it. They're also able to see plastic under them, such advanced creatures. + Ryll/Shaps: + - config: Added AUTO_DEADMIN_TIMEGATE which allows config force deadmin settings + to only apply for the first X seconds in a round. Starts disabled + - admin: New preference to ignore being summoned as a cult ghost while admin'd, + starts disabled + Timberpoes: + - rscadd: Enabled new button allowing observers the ability to see chemicals and + reagents identical to the health analyzer's chem scan functionality. + - tweak: Laptops can now utilise the AI Restorer program. + bobbahbrown: + - bugfix: Peacekeeper cyborgs have had an update to their firmware which corrects + dampening fields remaining active after severe damage or death. + ominousgrace: + - bugfix: Mad Scientist Wormhole Projector no longer requires an anomaly core. + tralezab: + - admin: new secrets button, anonymous names (roundstart required) + - refactor: things are a bit cleaner in the AI Triumvirate code +2020-04-21: + ArcaneMusic: + - rscadd: Botanical Toolbelts can now be made at the biogenerator, and holds most + botanical tools. + - rscadd: The Floral Somatoray has been given a new, 3rd mode, able to mutate plant + species. + - rscadd: Using a Somatoray on a tray enables you to lock in a specific mutation + if a plant has multiple mutations, at the cost of plant endurance. + - tweak: Plant Analyzers now have a toggle-able mode to scan either the chemical + traits or the plant stats, to cut down on chat spam. + - tweak: Plant Trays and dirt patches now start with 10 units of EZ Nutrient. + - tweak: Mutagen has been made slightly less toxic overall. + - balance: Plant trays now passively decrease their toxicity based on the tray's + parts, without randomness. + - tweak: Science goggles, or any other reagent scanning equipment will enable you + to see plant reagent traits on examine. + - balance: Instability now affects plants with lower instability tiers. (100 instability + would have the effects of the 20, 40, 60,and 80+ instability tiers). + - bugfix: Irrigation now works properly again. + - bugfix: Plant trays with full nutrient tanks can be watered again. + Arkatos: + - tweak: Radial menu options will now always be clearly visible to the user. + Cartographer-D: + - rscadd: Completely New Cargo Layout + - rscdel: The Small Security Room by the Vault has been replaced with Maintenance + - tweak: Crate Returns are now easier to find and use + - tweak: Tool Storage is smaller but more interesting! + - tweak: The Mail Room and Offices have been combined + - balance: Cargo Warehouse is now more prominent and easier to break into + - balance: MULEs now have their own isolated room. + - balance: There are now easier ways to mail "packages" to departments + Ghilker: + - rscadd: Added H2 gas + - rscadd: Added H2 gas burn (reaction with o2, similar to tritium but without the + radiations) + - rscadd: Added Electrolyzer (machine to make H2, requires power cell, once turned + on and with h2o in the air will start converting it to h2 and o2 with the reaction + 2H2O -> 2H2 + O2. Upgrading the parts will increase the amount of converted + H2O and the efficency of the cell) + - rscadd: Added H2 interaction with SM (similar to trit, less radiation emission, + same heat production and a bit of heat protection) + - rscadd: "H2 reaction with N2 to make ammonia crystals (reaction in open air to\ + \ make the crystals, temperatures between 0 \xB0C and - 120\xB0 C, more N2 than\ + \ H2)" + - rscadd: H2 reaction with bz as catalyst at high heat and pressure (over 1e6 for + both) to make metal hydrogen + - rscadd: metallic hydrogen golem (one of endish atmosian goal) + - tweak: changed fusion to use h2 instead of co2, everything else is still the same + - tweak: plasma burn now produces h2o too (a quarter of the produced co2) + - tweak: "H2O vapor now slip under 30 \xB0C so that plasma fires are not hellish" + - imageadd: added electrolyzer sprites (reuse of some unused ones) + - imageadd: 'added ammonia crystals sprites remove: fusion no longer generate stim + and nitryl' + Toastgoats: + - imagedel: "Nanotrasen's current stock of Buckin' Bronco\xA9 applejack liquor has\ + \ been recalled after studies showed trace amounts of horse meat." + - imageadd: Buckin Bronco Brewing Co has recently announced the release of a new + and improved recipe! Be sure to try some at your local Nanotrasen bar! + stylemistake: + - refactor: tgui 3.0 + - bugfix: 'tgui: Fixed the personal crafting interface.' diff --git a/html/changelogs/AutoChangeLog-pr-50032.yml b/html/changelogs/AutoChangeLog-pr-50032.yml deleted file mode 100644 index 32e6626cf03..00000000000 --- a/html/changelogs/AutoChangeLog-pr-50032.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "LemonInTheDark" -delete-after: True -changes: - - rscadd: "The h2o interactions have been polished and readded. Fucking global variables." diff --git a/html/changelogs/AutoChangeLog-pr-50126.yml b/html/changelogs/AutoChangeLog-pr-50126.yml deleted file mode 100644 index 635ef218993..00000000000 --- a/html/changelogs/AutoChangeLog-pr-50126.yml +++ /dev/null @@ -1,6 +0,0 @@ -author: "Ghilker" -delete-after: True -changes: - - rscadd: "N2O formation reaction (n2 + o2 + bz as catalyst + cold = n2o)" - - rscadd: "N2O toxic behaviour (if you inhale it you can die in your sleep) -changed: NO2 Formation reaction (n2 + o2 + bz + heat = no2)" diff --git a/html/changelogs/AutoChangeLog-pr-50294.yml b/html/changelogs/AutoChangeLog-pr-50294.yml deleted file mode 100644 index 3bece0408d0..00000000000 --- a/html/changelogs/AutoChangeLog-pr-50294.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Akrilla" -delete-after: True -changes: - - rscadd: "Equipment swapping, defaulted to V. Allows you to equip items while swapping out what you're already wearing after a small delay." diff --git a/html/changelogs/AutoChangeLog-pr-50440.yml b/html/changelogs/AutoChangeLog-pr-50440.yml deleted file mode 100644 index 79b409342ec..00000000000 --- a/html/changelogs/AutoChangeLog-pr-50440.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Arkatos" -delete-after: True -changes: - - bugfix: "Fixed an issue where Artificer spell icon was invisible." diff --git a/html/changelogs/AutoChangeLog-pr-50448.yml b/html/changelogs/AutoChangeLog-pr-50448.yml deleted file mode 100644 index 0664ba67abf..00000000000 --- a/html/changelogs/AutoChangeLog-pr-50448.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "AnturK" -delete-after: True -changes: - - bugfix: "fixes arena shuttle" diff --git a/html/changelogs/AutoChangeLog-pr-50465.yml b/html/changelogs/AutoChangeLog-pr-50465.yml deleted file mode 100644 index 3db7f9fed57..00000000000 --- a/html/changelogs/AutoChangeLog-pr-50465.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "TheVekter" -delete-after: True -changes: - - rscadd: "Added an R&D console to the Research Director's office on Meta, Pubby, Box, Delta, and Donut." diff --git a/html/changelogs/AutoChangeLog-pr-50468.yml b/html/changelogs/AutoChangeLog-pr-50468.yml deleted file mode 100644 index d1b5ec1cd7d..00000000000 --- a/html/changelogs/AutoChangeLog-pr-50468.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "TheVekter" -delete-after: True -changes: - - bugfix: "The CMO should now have a stamp in their office on Metastation" diff --git a/icons/mob/clothing/belt.dmi b/icons/mob/clothing/belt.dmi index b89a2163471..4d5f7e1629c 100644 Binary files a/icons/mob/clothing/belt.dmi and b/icons/mob/clothing/belt.dmi differ diff --git a/icons/obj/atmos.dmi b/icons/obj/atmos.dmi index 74e98d49b1f..8cded17edbc 100644 Binary files a/icons/obj/atmos.dmi and b/icons/obj/atmos.dmi differ diff --git a/icons/obj/clothing/belt_overlays.dmi b/icons/obj/clothing/belt_overlays.dmi index e599a0a948c..19e2e2c7a24 100644 Binary files a/icons/obj/clothing/belt_overlays.dmi and b/icons/obj/clothing/belt_overlays.dmi differ diff --git a/icons/obj/clothing/belts.dmi b/icons/obj/clothing/belts.dmi index c196ccdfbcc..3c79c997afa 100644 Binary files a/icons/obj/clothing/belts.dmi and b/icons/obj/clothing/belts.dmi differ diff --git a/icons/obj/doors/airlocks/shuttle/overlays.dmi b/icons/obj/doors/airlocks/shuttle/overlays.dmi index b2bb2cfa04a..70df6102127 100644 Binary files a/icons/obj/doors/airlocks/shuttle/overlays.dmi and b/icons/obj/doors/airlocks/shuttle/overlays.dmi differ diff --git a/icons/obj/doors/airlocks/shuttle/shuttle.dmi b/icons/obj/doors/airlocks/shuttle/shuttle.dmi index 0e055971633..b4b998e4bcb 100644 Binary files a/icons/obj/doors/airlocks/shuttle/shuttle.dmi and b/icons/obj/doors/airlocks/shuttle/shuttle.dmi differ diff --git a/icons/obj/drinks.dmi b/icons/obj/drinks.dmi index da8de417ba0..80e2e6ab90f 100644 Binary files a/icons/obj/drinks.dmi and b/icons/obj/drinks.dmi differ diff --git a/icons/obj/guns/energy.dmi b/icons/obj/guns/energy.dmi index d52c07372c1..148a742c1ff 100644 Binary files a/icons/obj/guns/energy.dmi and b/icons/obj/guns/energy.dmi differ diff --git a/icons/obj/projectiles.dmi b/icons/obj/projectiles.dmi index 2b1738566bc..58e822986eb 100644 Binary files a/icons/obj/projectiles.dmi and b/icons/obj/projectiles.dmi differ diff --git a/icons/obj/smooth_structures/shuttle_window.dmi b/icons/obj/smooth_structures/shuttle_window.dmi index 2fbf93f7039..cb07225a762 100644 Binary files a/icons/obj/smooth_structures/shuttle_window.dmi and b/icons/obj/smooth_structures/shuttle_window.dmi differ diff --git a/icons/obj/stack_objects.dmi b/icons/obj/stack_objects.dmi index 98e43f60ec8..4dcc7e86d4d 100644 Binary files a/icons/obj/stack_objects.dmi and b/icons/obj/stack_objects.dmi differ diff --git a/icons/obj/tiles.dmi b/icons/obj/tiles.dmi index 15b36ac2a9a..1b15dcd4f5d 100644 Binary files a/icons/obj/tiles.dmi and b/icons/obj/tiles.dmi differ diff --git a/icons/turf/floors.dmi b/icons/turf/floors.dmi index e5a0f853921..74e1280a27b 100644 Binary files a/icons/turf/floors.dmi and b/icons/turf/floors.dmi differ diff --git a/icons/turf/walls/shuttle_wall.dmi b/icons/turf/walls/shuttle_wall.dmi index cce97b24588..d9c904c3366 100644 Binary files a/icons/turf/walls/shuttle_wall.dmi and b/icons/turf/walls/shuttle_wall.dmi differ diff --git a/sound/weapons/flash_ring.ogg b/sound/weapons/flash_ring.ogg index 96b5fcf0d38..006141ac0bc 100644 Binary files a/sound/weapons/flash_ring.ogg and b/sound/weapons/flash_ring.ogg differ diff --git a/tgstation.dme b/tgstation.dme index 8dbb1afd409..ebb1a027924 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -699,6 +699,7 @@ #include "code\game\machinery\bank_machine.dm" #include "code\game\machinery\Beacon.dm" #include "code\game\machinery\buttons.dm" +#include "code\game\machinery\canister_frame.dm" #include "code\game\machinery\cell_charger.dm" #include "code\game\machinery\constructable_frame.dm" #include "code\game\machinery\dance_machine.dm" @@ -708,6 +709,7 @@ #include "code\game\machinery\dna_scanner.dm" #include "code\game\machinery\doppler_array.dm" #include "code\game\machinery\droneDispenser.dm" +#include "code\game\machinery\electrolyzer.dm" #include "code\game\machinery\fat_sucker.dm" #include "code\game\machinery\firealarm.dm" #include "code\game\machinery\flasher.dm" @@ -1073,6 +1075,7 @@ #include "code\game\objects\items\robot\robot_items.dm" #include "code\game\objects\items\robot\robot_parts.dm" #include "code\game\objects\items\robot\robot_upgrades.dm" +#include "code\game\objects\items\stacks\ammonia_crystals.dm" #include "code\game\objects\items\stacks\bscrystal.dm" #include "code\game\objects\items\stacks\cash.dm" #include "code\game\objects\items\stacks\license_plates.dm" @@ -1287,6 +1290,7 @@ #include "code\modules\admin\verbs\adminjump.dm" #include "code\modules\admin\verbs\adminpm.dm" #include "code\modules\admin\verbs\adminsay.dm" +#include "code\modules\admin\verbs\anonymousnames.dm" #include "code\modules\admin\verbs\atmosdebug.dm" #include "code\modules\admin\verbs\beakerpanel.dm" #include "code\modules\admin\verbs\bluespacearty.dm" diff --git a/tgui/.eslintrc.yml b/tgui/.eslintrc.yml index e5ebafddcfc..67e74085c7e 100644 --- a/tgui/.eslintrc.yml +++ b/tgui/.eslintrc.yml @@ -305,7 +305,13 @@ rules: ## Enforce or disallow capitalization of the first letter of a comment # capitalized-comments: error ## Require or disallow trailing commas - comma-dangle: [error, always-multiline] + comma-dangle: [error, { + arrays: always-multiline, + objects: always-multiline, + imports: always-multiline, + exports: always-multiline, + functions: only-multiline, ## Optional on functions + }] ## Enforce consistent spacing before and after commas comma-spacing: [error, { before: false, after: true }] ## Enforce consistent comma style diff --git a/tgui/README.md b/tgui/README.md index a7ef35602ed..5ddeb18fdda 100644 --- a/tgui/README.md +++ b/tgui/README.md @@ -151,893 +151,37 @@ together, and can reveal certain layout bugs which are not normally visible. - `/packages/tgui/interfaces` - Actual in-game interfaces. Interface takes data via the `state` prop and outputs an html-like stucture, which you can build using existing UI components. -- `/packages/tgui/routes.js` - This is where you want to register new -interfaces, otherwise they simply won't load. +- `/packages/tgui/layouts` - Root level UI components, that affect the final +look and feel of the browser window. They usually hold various window +elements, like the titlebar and resize handlers, and control the UI theme. +- `/packages/tgui/routes.js` - This is where tgui decides which interface to +pull and render. - `/packages/tgui/layout.js` - A root-level component, holding the window elements, like the titlebar, buttons, resize handlers. Calls `routes.js` to decide which component to render. - `/packages/tgui/styles/main.scss` - CSS entry point. +- `/packages/tgui/styles/functions.scss` - Useful SASS functions. +Stuff like `lighten`, `darken`, `luminance` are defined here. - `/packages/tgui/styles/atomic` - Atomic CSS classes. These are very simple, tiny, reusable CSS classes which you can use and combine to change appearance of your elements. Keep them small. - `/packages/tgui/styles/components` - CSS classes which are used -in UI components, and most of the stylesheets referenced here are located -in `/packages/tgui/components`. These stylesheets closely follow the +in UI components. These stylesheets closely follow the [BEM](https://en.bem.info/methodology/) methodology. -- `/packages/tgui/styles/functions.scss` - Useful SASS functions. -Stuff like `lighten`, `darken`, `luminance` are defined here. +- `/packages/tgui/styles/interfaces` - Custom stylesheets for your interfaces. +Add stylesheets here if you really need a fine control over your UI styles. +- `/packages/tgui/styles/layouts` - Layout-related styles. +- `/packages/tgui/styles/themes` - Contains all the various themes you can +use in tgui. Each theme must be registered in `webpack.config.js` file. ## Component Reference -> Notice: This documentation might be out of date, so always check the source -> code to see the most up-to-date information. +See: [Component Reference](docs/component-reference.md). -These are the components which you can use for interface construction. -If you have trouble finding the exact prop you need on a component, -please note, that most of these components inherit from other basic -components, such as `Box`. This component in particular provides a lot -of styling options for all components, e.g. `color` and `opacity`, thus -it is used a lot in this framework. +## License -There are a few important semantics you need to know about: +All code is licensed with the parent license of *tgstation*, **AGPL-3.0**. -- Some elements support a `content` prop, which is a synonym to a -`children` prop. - - `content` is better used when your element is a self-closing tag - (like ` - ); - })} - -
- {content || null} -
- - ); - } -} - -/** - * A dummy component, which is used for carrying props for the - * tab container. - */ -export const Tab = props => null; - -Tab.defaultProps = { - __type__: TAB_MAGIC_TYPE, +const Tab = props => { + const { + className, + selected, + altSelection, + ...rest + } = props; + return ( + - + + ))} + + )} + {!condi && ( + setPillAmount(value)} + onCreate={() => act('create', { + type: 'pill', + amount: pillAmount, + volume: 'auto', + })} /> + )} + {!condi && ( + setPatchAmount(value)} + onCreate={() => act('create', { + type: 'patch', + amount: patchAmount, + volume: 'auto', + })} /> + )} + {!condi && ( + setBottleAmount(value)} + onCreate={() => act('create', { + type: 'bottle', + amount: bottleAmount, + volume: 'auto', + })} /> + )} + {!!condi && ( + setPackAmount(value)} + onCreate={() => act('create', { + type: 'condimentPack', + amount: packAmount, + volume: 'auto', + })} /> + )} + {!!condi && ( + setBottleAmount(value)} + onCreate={() => act('create', { + type: 'condimentBottle', + amount: bottleAmount, + volume: 'auto', + })} /> + )} + + ); +}; - render() { - const { state, props } = this; - const { ref } = props.state.config; - const { - pillAmount, - patchAmount, - bottleAmount, - packAmount, - } = this.state; - const { - condi, - chosenPillStyle, - pillStyles = [], - } = props.state.data; - return ( - - {!condi && ( - - {pillStyles.map(pill => ( - - ))} - - )} - {!condi && ( - this.setState({ - pillAmount: value, - })} - onCreate={() => act(ref, 'create', { - type: 'pill', - amount: pillAmount, - volume: 'auto', - })} /> - )} - {!condi && ( - this.setState({ - patchAmount: value, - })} - onCreate={() => act(ref, 'create', { - type: 'patch', - amount: patchAmount, - volume: 'auto', - })} /> - )} - {!condi && ( - this.setState({ - bottleAmount: value, - })} - onCreate={() => act(ref, 'create', { - type: 'bottle', - amount: bottleAmount, - volume: 'auto', - })} /> - )} - {!!condi && ( - this.setState({ - packAmount: value, - })} - onCreate={() => act(ref, 'create', { - type: 'condimentPack', - amount: packAmount, - volume: 'auto', - })} /> - )} - {!!condi && ( - this.setState({ - bottleAmount: value, - })} - onCreate={() => act(ref, 'create', { - type: 'condimentBottle', - amount: bottleAmount, - volume: 'auto', - })} /> - )} - - ); - } -} - -const AnalysisResults = props => { - const { state } = props; - const { ref } = state.config; - const { analyzeVars } = state.data; +const AnalysisResults = (props, context) => { + const { act, data } = useBackend(context); + const { analyzeVars } = data; return (
{ - ))} - - -
+ + +
+ + + act('change_pill_size', { + volume: value, + })} /> + + + act('change_pill_name', { + name: value, + })} /> + + + {pill_styles.map(pill => ( + + ))} + + +
+
+
); }; diff --git a/tgui/packages/tgui/interfaces/ChemReactionChamber.js b/tgui/packages/tgui/interfaces/ChemReactionChamber.js index 8c829258ece..9af7ef7ddbd 100644 --- a/tgui/packages/tgui/interfaces/ChemReactionChamber.js +++ b/tgui/packages/tgui/interfaces/ChemReactionChamber.js @@ -1,98 +1,85 @@ -import { Component } from 'inferno'; -import { act } from '../byond'; -import { Box, Button, LabeledList, NumberInput, Section, Input } from '../components'; import { map } from 'common/collections'; import { classes } from 'common/react'; +import { useBackend, useLocalState } from '../backend'; +import { Box, Button, Input, LabeledList, NumberInput, Section } from '../components'; +import { Window } from '../layouts'; - -export class ChemReactionChamber extends Component { - constructor() { - super(); - this.state = { - reagentName: "", - reagentQuantity: 1, - }; - } - - setReagentName(reagentName) { - this.setState({ - reagentName, - }); - } - - setReagentQuantity(reagentQuantity) { - this.setState({ - reagentQuantity, - }); - } - - render() { - const { state } = this.props; - const { config, data } = state; - const { ref } = config; - const emptying = data.emptying; - const reagents = data.reagents || []; - return ( -
- {emptying ? "Emptying" : "Filling"} - - )} > - - - - this.setReagentName(value)} /> - - - this.setReagentQuantity(value)} /> - -
- ); - } -} + + + {map((amount, reagent) => ( + act('remove', { + chem: reagent, + })} /> + )}> + {amount} + + ))(reagents)} + + + + + ); +}; diff --git a/tgui/packages/tgui/interfaces/ChemSplitter.js b/tgui/packages/tgui/interfaces/ChemSplitter.js index 8e64c43e0f2..c11a374ac7b 100644 --- a/tgui/packages/tgui/interfaces/ChemSplitter.js +++ b/tgui/packages/tgui/interfaces/ChemSplitter.js @@ -1,48 +1,53 @@ import { toFixed } from 'common/math'; import { useBackend } from '../backend'; import { LabeledList, NumberInput, Section } from '../components'; +import { Window } from '../layouts'; -export const ChemSplitter = props => { - const { act, data } = useBackend(props); +export const ChemSplitter = (props, context) => { + const { act, data } = useBackend(context); const { straight, side, max_transfer, } = data; return ( -
- - - toFixed(value, 2)} - step={0.05} - stepPixelSize={4} - onChange={(e, value) => act('set_amount', { - target: 'straight', - amount: value, - })} /> - - - toFixed(value, 2)} - step={0.05} - stepPixelSize={4} - onChange={(e, value) => act('set_amount', { - target: 'side', - amount: value, - })} /> - - -
+ + +
+ + + toFixed(value, 2)} + step={0.05} + stepPixelSize={4} + onChange={(e, value) => act('set_amount', { + target: 'straight', + amount: value, + })} /> + + + toFixed(value, 2)} + step={0.05} + stepPixelSize={4} + onChange={(e, value) => act('set_amount', { + target: 'side', + amount: value, + })} /> + + +
+
+
); }; diff --git a/tgui/packages/tgui/interfaces/ChemSynthesizer.js b/tgui/packages/tgui/interfaces/ChemSynthesizer.js index df56dfdc073..26db58cb3ac 100644 --- a/tgui/packages/tgui/interfaces/ChemSynthesizer.js +++ b/tgui/packages/tgui/interfaces/ChemSynthesizer.js @@ -1,9 +1,10 @@ import { toFixed } from 'common/math'; import { useBackend } from '../backend'; import { Box, Button, Section } from '../components'; +import { Window } from '../layouts'; -export const ChemSynthesizer = props => { - const { act, data } = useBackend(props); +export const ChemSynthesizer = (props, context) => { + const { act, data } = useBackend(context); const { amount, current_reagent, @@ -11,32 +12,36 @@ export const ChemSynthesizer = props => { possible_amounts = [], } = data; return ( -
- - {possible_amounts.map(possible_amount => ( -
+ + +
+ + {possible_amounts.map(possible_amount => ( +
+
+
); }; diff --git a/tgui/packages/tgui/interfaces/CodexGigas.js b/tgui/packages/tgui/interfaces/CodexGigas.js index f96ce9380bc..b55911750ba 100644 --- a/tgui/packages/tgui/interfaces/CodexGigas.js +++ b/tgui/packages/tgui/interfaces/CodexGigas.js @@ -1,98 +1,107 @@ import { useBackend } from '../backend'; import { Button, LabeledList, Section } from '../components'; +import { Window } from '../layouts'; + +const PREFIXES = [ + "Dark", + "Hellish", + "Fallen", + "Fiery", + "Sinful", + "Blood", + "Fluffy", +]; + +const TITLES = [ + "Lord", + "Prelate", + "Count", + "Viscount", + "Vizier", + "Elder", + "Adept", +]; + +const NAMES = [ + "hal", + "ve", + "odr", + "neit", + "ci", + "quon", + "mya", + "folth", + "wren", + "geyr", + "hil", + "niet", + "twou", + "phi", + "coa", +]; + +const SUFFIXES = [ + "the Red", + "the Soulless", + "the Master", + "the Lord of all things", + "Jr.", +]; // TODO: refactor the backend of this it's a trainwreck -export const CodexGigas = props => { - const { act, data } = useBackend(props); - const prefixes = [ - "Dark", - "Hellish", - "Fallen", - "Fiery", - "Sinful", - "Blood", - "Fluffy", - ]; - const titles = [ - "Lord", - "Prelate", - "Count", - "Viscount", - "Vizier", - "Elder", - "Adept", - ]; - const names = [ - "hal", - "ve", - "odr", - "neit", - "ci", - "quon", - "mya", - "folth", - "wren", - "geyr", - "hil", - "niet", - "twou", - "phi", - "coa", - ]; - const suffixes = [ - "the Red", - "the Soulless", - "the Master", - "the Lord of all things", - "Jr.", - ]; +export const CodexGigas = (props, context) => { + const { act, data } = useBackend(context); return ( -
- {data.name} - - - {prefixes.map(prefix => ( -
+ + +
+ {data.name} + + + {PREFIXES.map(prefix => ( +
+
+
); }; diff --git a/tgui/packages/tgui/interfaces/ComputerFabricator.js b/tgui/packages/tgui/interfaces/ComputerFabricator.js index 87366f6f732..ec4cffcb7b9 100644 --- a/tgui/packages/tgui/interfaces/ComputerFabricator.js +++ b/tgui/packages/tgui/interfaces/ComputerFabricator.js @@ -2,402 +2,417 @@ import { multiline } from 'common/string'; import { Fragment } from 'inferno'; import { useBackend } from '../backend'; import { Box, Button, Grid, Section, Table, Tooltip } from '../components'; +import { Window } from '../layouts'; -export const ComputerFabricator = props => { - const { state } = props; - const { act, data } = useBackend(props); +export const ComputerFabricator = (props, context) => { + const { act, data } = useBackend(context); return ( - -
- Your perfect device, only three steps away... -
- {data.state !== 0 && ( - + ); } - if (current_target) { return ( -
+
); } - if (!destinations.length) { return (
@@ -42,42 +55,6 @@ export const Gateway = props => {
); } - - const renderGatewayDest = dest => { - if (dest.availible) { - return ( -
- -
- ); - } - return ( -
- - {dest.reason} - - {!!dest.timeout && ( - - Calibrating... - - )} -
- ); - }; - return ( {!gateway_status && ( @@ -85,7 +62,33 @@ export const Gateway = props => { Gateway Unpowered )} - {destinations.map(renderGatewayDest)} + {destinations.map(dest => ( +
+ {dest.availible && ( + + ) || ( + + + {dest.reason} + + {!!dest.timeout && ( + + Calibrating... + + )} + + )} +
+ ))}
); }; diff --git a/tgui/packages/tgui/interfaces/Gps.js b/tgui/packages/tgui/interfaces/Gps.js index 752c76b6d84..a5fcb8d1941 100644 --- a/tgui/packages/tgui/interfaces/Gps.js +++ b/tgui/packages/tgui/interfaces/Gps.js @@ -5,11 +5,12 @@ import { vecLength, vecSubtract } from 'common/vector'; import { Fragment } from 'inferno'; import { useBackend } from '../backend'; import { Box, Button, Icon, LabeledList, Section, Table } from '../components'; +import { Window } from '../layouts'; const coordsToVec = coords => map(parseFloat)(coords.split(', ')); -export const Gps = props => { - const { act, data } = useBackend(props); +export const Gps = (props, context) => { + const { act, data } = useBackend(context); const { currentArea, currentCoords, @@ -36,87 +37,89 @@ export const Gps = props => { signal => signal.entrytag), ])(data.signals || []); return ( - -
act('power')} /> - )}> - - + + +
act('rename')} /> - - -
- {!!power && ( - -
- - {currentArea} ({currentCoords}) - -
-
- - - - - - - {signals.map(signal => ( - - - {signal.entrytag} - - - {signal.degrees !== undefined && ( - - )} - {signal.dist !== undefined && ( - signal.dist + 'm' - )} - - - {signal.coords} - + icon="power-off" + content={power ? "On" : "Off"} + selected={power} + onClick={() => act('power')} /> + )}> + + +
+ + + + - ))} -
-
-
- )} - + {signals.map(signal => ( + + + {signal.entrytag} + + + {signal.degrees !== undefined && ( + + )} + {signal.dist !== undefined && ( + signal.dist + 'm' + )} + + + {signal.coords} + + + ))} + +
+
+ )} + + ); }; diff --git a/tgui/packages/tgui/interfaces/GravityGenerator.js b/tgui/packages/tgui/interfaces/GravityGenerator.js index 11e203b97a1..cf4eaa7bb0e 100644 --- a/tgui/packages/tgui/interfaces/GravityGenerator.js +++ b/tgui/packages/tgui/interfaces/GravityGenerator.js @@ -1,9 +1,41 @@ -import { Fragment } from 'inferno'; import { useBackend } from '../backend'; import { Box, Button, LabeledList, NoticeBox, ProgressBar, Section } from '../components'; +import { Window } from '../layouts'; -export const GravityGenerator = props => { - const { act, data } = useBackend(props); +export const GravityGenerator = (props, context) => { + const { act, data } = useBackend(context); + const { + charging_state, + operational, + } = data; + return ( + + + {!operational && ( + + No data available + + )} + {!!operational && charging_state !== 0 && ( + + WARNING - Radiation detected + + )} + {!!operational && charging_state === 0 && ( + + No radiation detected + + )} + {!!operational && ( + + )} + + + ); +}; + +const GravityGeneratorContent = (props, context) => { + const { act, data } = useBackend(context); const { breaker, charge_count, @@ -11,72 +43,49 @@ export const GravityGenerator = props => { on, operational, } = data; - - if (!operational) { - return ( -
- - No data available - -
- ); - } - return ( - -
- - -
- {operational && charging_state !== 0 && ( - - WARNING - Radiation detected - - )} - {operational && charging_state === 0 && ( - - No radiation detected - - )} -
+ ))} + {charging_state === 1 && ( + + Charging + + )} + {charging_state === 2 && ( + + Discharging + + )} + + +
); }; diff --git a/tgui/packages/tgui/interfaces/GulagItemReclaimer.js b/tgui/packages/tgui/interfaces/GulagItemReclaimer.js index ed640c122e5..846b4659988 100644 --- a/tgui/packages/tgui/interfaces/GulagItemReclaimer.js +++ b/tgui/packages/tgui/interfaces/GulagItemReclaimer.js @@ -1,41 +1,42 @@ import { useBackend } from '../backend'; import { Button, NoticeBox, Section, Table } from '../components'; +import { Window } from '../layouts'; -export const GulagItemReclaimer = props => { - const { act, data } = useBackend(props); +export const GulagItemReclaimer = (props, context) => { + const { act, data } = useBackend(context); const { mobs = [], } = data; - - if (!mobs.length) { - return ( -
- - No stored items - -
- ); - } - return ( -
- - {mobs.map(mob => ( - - - {mob.name} - - -
-
+ + + {mobs.length === 0 && ( + + No stored items + + )} + {mobs.length > 0 && ( +
+ + {mobs.map(mob => ( + + + {mob.name} + + +
+
+ )} +
+
); }; diff --git a/tgui/packages/tgui/interfaces/GulagTeleporterConsole.js b/tgui/packages/tgui/interfaces/GulagTeleporterConsole.js index 7291cedcbc8..3b709cbcb03 100644 --- a/tgui/packages/tgui/interfaces/GulagTeleporterConsole.js +++ b/tgui/packages/tgui/interfaces/GulagTeleporterConsole.js @@ -1,10 +1,10 @@ -import { useBackend } from '../backend'; -import { Section, LabeledList, Button, NumberInput } from '../components'; import { Fragment } from 'inferno'; +import { useBackend } from '../backend'; +import { Button, LabeledList, NumberInput, Section } from '../components'; +import { Window } from '../layouts'; -export const GulagTeleporterConsole = props => { - const { act, data } = useBackend(props); - +export const GulagTeleporterConsole = (props, context) => { + const { act, data } = useBackend(context); const { teleporter, teleporter_lock, @@ -18,86 +18,82 @@ export const GulagTeleporterConsole = props => { goal = 0, prisoner = {}, } = data; - return ( - -
-
-
- - -
- - - - )} -
- - {programs.map(program => ( - - - + + + )} +
+
+ {programs.map(program => ( + +
-
-
+ + + {!!program.running && ( + - - - {data.sheets} - {(data.sheets >= 1) && ( + + + {!data.anchored && ( + Generator not anchored. + )} +
+ + - )} - - - - - - {data.current_heat < 100 ? ( - Nominal - ) : ( - data.current_heat < 200 ? ( - Caution + + + {data.sheets} + {(data.sheets >= 1) && ( + + )} + + + + + + {data.current_heat < 100 ? ( + Nominal ) : ( - DANGER - ) - )} - - -
-
- - - {data.power_output} - - - - - - - - {data.connected ? data.power_available : "Unconnected"} - - - -
-
+ data.current_heat < 200 ? ( + Caution + ) : ( + DANGER + ) + )} + + + +
+ + + {data.power_output} + + + + + + + + {data.connected ? data.power_available : "Unconnected"} + + + +
+ + ); }; diff --git a/tgui/packages/tgui/interfaces/PortablePump.js b/tgui/packages/tgui/interfaces/PortablePump.js new file mode 100644 index 00000000000..b88f339fe08 --- /dev/null +++ b/tgui/packages/tgui/interfaces/PortablePump.js @@ -0,0 +1,69 @@ +import { useBackend } from '../backend'; +import { Section, LabeledList, Button, NumberInput } from '../components'; +import { Window } from '../layouts'; +import { PortableBasicInfo } from './common/PortableAtmos'; + +export const PortablePump = (props, context) => { + const { act, data } = useBackend(context); + + const { + direction, + holding, + target_pressure, + default_pressure, + min_pressure, + max_pressure, + } = data; + + return ( + + + +
act('direction')} /> + )}> + + + act('pressure', { + pressure: value, + })} /> + + +
+
+
+ ); +}; diff --git a/tgui/packages/tgui/interfaces/PortableScrubber.js b/tgui/packages/tgui/interfaces/PortableScrubber.js new file mode 100644 index 00000000000..5c1eda2eab6 --- /dev/null +++ b/tgui/packages/tgui/interfaces/PortableScrubber.js @@ -0,0 +1,32 @@ +import { useBackend } from '../backend'; +import { Fragment } from 'inferno'; +import { Box, Section, LabeledList, Button, AnimatedNumber, NumberInput } from '../components'; +import { getGasLabel } from '../constants'; +import { Window } from '../layouts'; +import { PortableBasicInfo } from './common/PortableAtmos'; + +export const PortableScrubber = (props, context) => { + const { act, data } = useBackend(context); + + const filter_types = data.filter_types || []; + + return ( + + + +
+ {filter_types.map(filter => ( +
+
+
+ ); +}; diff --git a/tgui/packages/tgui/interfaces/PowerMonitor.js b/tgui/packages/tgui/interfaces/PowerMonitor.js index ebb343039f2..20d6943c605 100644 --- a/tgui/packages/tgui/interfaces/PowerMonitor.js +++ b/tgui/packages/tgui/interfaces/PowerMonitor.js @@ -4,6 +4,8 @@ import { toFixed } from 'common/math'; import { pureComponentHooks } from 'common/react'; import { Component, Fragment } from 'inferno'; import { Box, Button, Chart, ColorBox, Flex, Icon, LabeledList, ProgressBar, Section, Table } from '../components'; +import { Window } from '../layouts'; +import { useBackend } from '../backend'; const PEAK_DRAW = 500000; @@ -12,7 +14,17 @@ const powerRank = str => { return ['w', 'kw', 'mw', 'gw'].indexOf(unit); }; -export class PowerMonitor extends Component { +export const PowerMonitor = () => { + return ( + + + + + + ); +}; + +export class PowerMonitorContent extends Component { constructor() { super(); this.state = { @@ -21,8 +33,7 @@ export class PowerMonitor extends Component { } render() { - const { state } = this.props; - const { data } = state; + const { data } = useBackend(this.context); const { history } = data; const { sortByField } = this.state; const supply = history.supply[history.supply.length - 1] || 0; diff --git a/tgui/packages/tgui/interfaces/ProximitySensor.js b/tgui/packages/tgui/interfaces/ProximitySensor.js index 82f99afc8b1..8227d04802f 100644 --- a/tgui/packages/tgui/interfaces/ProximitySensor.js +++ b/tgui/packages/tgui/interfaces/ProximitySensor.js @@ -1,9 +1,9 @@ -import { Fragment } from 'inferno'; import { useBackend } from '../backend'; import { Button, LabeledList, Section } from '../components'; +import { Window } from '../layouts'; -export const ProximitySensor = props => { - const { act, data } = useBackend(props); +export const ProximitySensor = (props, context) => { + const { act, data } = useBackend(context); const { minutes, seconds, @@ -12,62 +12,64 @@ export const ProximitySensor = props => { sensitivity, } = data; return ( - -
- - + + +
+ + +
+
act('scanning')} /> - - -
-
act('time')} /> + )}>
- + icon="fast-backward" + disabled={scanning || timing} + onClick={() => act('input', { adjust: -30 })} /> +
+ + ); }; diff --git a/tgui/packages/tgui/interfaces/Radio.js b/tgui/packages/tgui/interfaces/Radio.js index e335cf1cac5..68b48d02308 100644 --- a/tgui/packages/tgui/interfaces/Radio.js +++ b/tgui/packages/tgui/interfaces/Radio.js @@ -3,9 +3,10 @@ import { toFixed } from 'common/math'; import { useBackend } from '../backend'; import { Box, Button, LabeledList, NumberInput, Section } from '../components'; import { RADIO_CHANNELS } from '../constants'; +import { Window } from '../layouts'; -export const Radio = props => { - const { act, data } = useBackend(props); +export const Radio = (props, context) => { + const { act, data } = useBackend(context); const { freqlock, frequency, @@ -25,84 +26,88 @@ export const Radio = props => { status: !!value, }))(data.channels); return ( -
- - - {freqlock && ( - - {toFixed(frequency / 10, 1) + ' kHz'} - - ) || ( - toFixed(value, 1)} - onDrag={(e, value) => act('frequency', { - adjust: (value - frequency / 10), - })} /> - )} - {tunedChannel && ( - - [{tunedChannel.name}] - - )} - - -
+ + ); }; diff --git a/tgui/packages/tgui/interfaces/RadioactiveMicrolaser.js b/tgui/packages/tgui/interfaces/RadioactiveMicrolaser.js index 92ad619537d..40b6794d61b 100644 --- a/tgui/packages/tgui/interfaces/RadioactiveMicrolaser.js +++ b/tgui/packages/tgui/interfaces/RadioactiveMicrolaser.js @@ -1,9 +1,9 @@ -import { Fragment } from 'inferno'; import { useBackend } from '../backend'; import { Button, Box, NumberInput, Section, LabeledList } from '../components'; +import { Window } from '../layouts'; -export const RadioactiveMicrolaser = props => { - const { act, data } = useBackend(props); +export const RadioactiveMicrolaser = (props, context) => { + const { act, data } = useBackend(context); const { irradiate, stealth, @@ -14,103 +14,105 @@ export const RadioactiveMicrolaser = props => { cooldown, } = data; return ( - -
- - - - {on_cooldown ? "Recharging" : "Ready"} - - - -
-
- - -
-
- - -
-
+ + +
+ + + + {on_cooldown ? "Recharging" : "Ready"} + + + +
+
+ + +
+
+ + +
+
+
); }; diff --git a/tgui/packages/tgui/interfaces/RapidPipeDispenser.js b/tgui/packages/tgui/interfaces/RapidPipeDispenser.js index f313c294668..54b664c57db 100644 --- a/tgui/packages/tgui/interfaces/RapidPipeDispenser.js +++ b/tgui/packages/tgui/interfaces/RapidPipeDispenser.js @@ -1,7 +1,7 @@ import { classes } from 'common/react'; -import { Fragment } from 'inferno'; -import { useBackend } from '../backend'; +import { useBackend, useLocalState } from '../backend'; import { Box, Button, ColorBox, Flex, LabeledList, Section, Tabs } from '../components'; +import { Window } from '../layouts'; const ROOT_CATEGORIES = [ 'Atmospherics', @@ -54,8 +54,8 @@ const TOOLS = [ }, ]; -export const RapidPipeDispenser = props => { - const { act, data } = useBackend(props); +export const RapidPipeDispenser = (props, context) => { + const { act, data } = useBackend(context); const { category: rootCategoryIndex, categories = [], @@ -64,127 +64,138 @@ export const RapidPipeDispenser = props => { mode, } = data; const previews = data.preview_rows.flatMap(row => row.previews); + const [ + categoryName, + setCategoryName, + ] = useLocalState(context, 'categoryName'); + const shownCategory = categories + .find(category => category.cat_name === categoryName) + || categories[0]; return ( - -
- - - {ROOT_CATEGORIES.map((categoryName, i) => ( -
- - -
- {rootCategoryIndex === 0 && ( - - {[1, 2, 3].map(layer => ( - act('piping_layer', { - piping_layer: layer, + + + + {selected_color} + + {Object.keys(PAINT_COLORS) + .map(colorName => ( + act('color', { + paint_color: colorName, })} /> ))} - - )} - - {previews.map(preview => ( - - ))} - -
-
- -
- - {categories.map(category => ( - - {() => category.recipes.map(recipe => ( + + +
+ + +
+ {rootCategoryIndex === 0 && ( + + {[1, 2, 3].map(layer => ( act('pipe_type', { - pipe_type: recipe.pipe_index, - category: category.cat_name, + checked={layer === piping_layer} + content={'Layer ' + layer} + onClick={() => act('piping_layer', { + piping_layer: layer, })} /> ))} - + + )} + + {previews.map(preview => ( + + ))} + +
+
+ +
+ + {categories.map((category, i) => ( + setCategoryName(category.cat_name)}> + {category.cat_name} + + ))} + + {shownCategory?.recipes.map(recipe => ( + act('pipe_type', { + pipe_type: recipe.pipe_index, + category: shownCategory.cat_name, + })} /> ))} - -
-
-
-
+ + + + + ); }; diff --git a/tgui/packages/tgui/interfaces/RemoteRobotControl.js b/tgui/packages/tgui/interfaces/RemoteRobotControl.js index 123e4c708f7..eb24bf22f8c 100644 --- a/tgui/packages/tgui/interfaces/RemoteRobotControl.js +++ b/tgui/packages/tgui/interfaces/RemoteRobotControl.js @@ -2,9 +2,20 @@ import { decodeHtmlEntities } from 'common/string'; import { Fragment } from 'inferno'; import { useBackend } from '../backend'; import { Box, Button, NoticeBox, Section, LabeledList } from '../components'; +import { Window } from '../layouts'; -export const RemoteRobotControl = props => { - const { act, data } = useBackend(props); +export const RemoteRobotControl = (props, context) => { + return ( + + + + + + ); +}; + +export const RemoteRobotControlContent = (props, context) => { + const { act, data } = useBackend(context); const { robots = [], } = data; diff --git a/tgui/packages/tgui/interfaces/RoboticsControlConsole.js b/tgui/packages/tgui/interfaces/RoboticsControlConsole.js index 8a25eba57d7..e5f4f6f73b3 100644 --- a/tgui/packages/tgui/interfaces/RoboticsControlConsole.js +++ b/tgui/packages/tgui/interfaces/RoboticsControlConsole.js @@ -1,54 +1,56 @@ import { Fragment } from 'inferno'; -import { useBackend } from '../backend'; -import { Box, Button, NoticeBox, Section, Tabs, LabeledList } from '../components'; +import { useBackend, useSharedState } from '../backend'; +import { Box, Button, LabeledList, NoticeBox, Section, Tabs } from '../components'; +import { Window } from '../layouts'; -export const RoboticsControlConsole = props => { - const { state } = props; - const { act, data } = useBackend(props); +export const RoboticsControlConsole = (props, context) => { + const { act, data } = useBackend(context); + const [tab, setTab] = useSharedState(context, 'tab', 1); const { can_hack, cyborgs = [], drones = [], } = data; - return ( - - - {() => ( - + + + + setTab(1)}> + Cyborgs ({cyborgs.length}) + + setTab(2)}> + Drones ({drones.length}) + + + {tab === 1 && ( + )} - - - {() => ( - + {tab === 2 && ( + )} - - + + ); }; -const Cyborgs = props => { - const { state, cyborgs, can_hack } = props; - const { act, data } = useBackend(props); - +const Cyborgs = (props, context) => { + const { cyborgs, can_hack } = props; + const { act, data } = useBackend(context); if (!cyborgs.length) { return ( -
- - No cyborg units detected within access parameters - -
+ + No cyborg units detected within access parameters + ); } - return cyborgs.map(cyborg => { return (
{ }); }; -const Drones = props => { - const { state, drones } = props; - const { act, data } = useBackend(props); +const Drones = (props, context) => { + const { drones } = props; + const { act } = useBackend(context); if (!drones.length) { return ( -
- - No drone units detected within access parameters - -
+ + No drone units detected within access parameters + ); } diff --git a/tgui/packages/tgui/interfaces/Roulette.js b/tgui/packages/tgui/interfaces/Roulette.js index d87ffceba7a..9134b874584 100644 --- a/tgui/packages/tgui/interfaces/Roulette.js +++ b/tgui/packages/tgui/interfaces/Roulette.js @@ -1,11 +1,8 @@ import { classes } from "common/react"; import { useBackend } from "../backend"; import { Box, Button, Grid, NumberInput } from "../components"; -import { createLogger } from "../logging"; -import { Fragment, Component } from "inferno"; -import { act } from "../byond"; - -const logger = createLogger('Roulette'); +import { Component } from "inferno"; +import { Window } from "../layouts"; const getNumberColor = number => { if (number === 0) { @@ -31,9 +28,9 @@ const getNumberColor = number => { return (oddRed ? isOdd : !isOdd) ? 'red' : 'black'; }; -export const RouletteNumberButton = props => { +export const RouletteNumberButton = (props, context) => { const { number } = props; - const { act } = useBackend(props); + const { act } = useBackend(context); return (
- {existingShuttle ? ( -
- - act('jump_to', { - type: 'mobile', - id: existingShuttle.id, - })} /> - )}> - {existingShuttle.status} - {!!existingShuttle.timer && ( - - ({existingShuttle.timeleft}) - - )} - - -
- ) : ( -
- )} -
-
- - ) : 'No shuttle selected'} -
- - + ); + })} + + + + ); +}; + +export const ShuttleManipulatorModification = (props, context) => { + const { act, data } = useBackend(context); + const selected = data.selected || {}; + const existingShuttle = data.existing_shuttle || {}; + return ( +
+ {selected ? ( + +
+ {(!!selected.description || !!selected.admin_notes) && ( + + {!!selected.description && ( + + {selected.description} + + )} + {!!selected.admin_notes && ( + + {selected.admin_notes} + + )} + + )} +
+ {existingShuttle ? ( +
+ + act('jump_to', { + type: 'mobile', + id: existingShuttle.id, + })} /> + )}> + {existingShuttle.status} + {!!existingShuttle.timer && ( + + ({existingShuttle.timeleft}) + + )} + + +
+ ) : ( +
+ )} +
+
+ + ) : 'No shuttle selected'} +
); }; diff --git a/tgui/packages/tgui/interfaces/Signaler.js b/tgui/packages/tgui/interfaces/Signaler.js index c656613141d..bb7180d749c 100644 --- a/tgui/packages/tgui/interfaces/Signaler.js +++ b/tgui/packages/tgui/interfaces/Signaler.js @@ -1,9 +1,10 @@ import { Grid, NumberInput, Button, Section } from '../components'; import { useBackend } from '../backend'; import { toFixed } from 'common/math'; +import { Window } from '../layouts'; -export const Signaler = props => { - const { act, data } = useBackend(props); +export const Signaler = (props, context) => { + const { act, data } = useBackend(context); const { code, frequency, @@ -12,74 +13,78 @@ export const Signaler = props => { } = data; return ( -
- - - Frequency: - - - toFixed(value, 1)} - width={13} - onDrag={(e, value) => act('freq', { - freq: value, - })} /> - - -
+ + +
+ + + Frequency: + + + toFixed(value, 1)} + width="80px" + onDrag={(e, value) => act('freq', { + freq: value, + })} /> + + +
+
+
); }; diff --git a/tgui/packages/tgui/interfaces/Sleeper.js b/tgui/packages/tgui/interfaces/Sleeper.js index dc0c1a8d34b..3246a8b0676 100644 --- a/tgui/packages/tgui/interfaces/Sleeper.js +++ b/tgui/packages/tgui/interfaces/Sleeper.js @@ -1,9 +1,10 @@ import { useBackend } from '../backend'; import { Box, Section, LabeledList, Button, ProgressBar } from '../components'; import { Fragment } from 'inferno'; +import { Window } from '../layouts'; -export const Sleeper = props => { - const { act, data } = useBackend(props); +export const Sleeper = (props, context) => { + const { act, data } = useBackend(context); const { open, @@ -44,78 +45,80 @@ export const Sleeper = props => { ]; return ( - -
- {occupant.stat} - - )}> - {!!occupied && ( - - - - - {damageTypes.map(type => ( + + +
+ {occupant.stat} + + )}> + {!!occupied && ( + + + + + {damageTypes.map(type => ( + + + + ))} - + label="Cells" + color={occupant.cloneLoss ? 'bad' : 'good'}> + {occupant.cloneLoss ? 'Damaged' : 'Healthy'} - ))} - - {occupant.cloneLoss ? 'Damaged' : 'Healthy'} - - - {occupant.brainLoss ? 'Abnormal' : 'Healthy'} - - - - )} -
-
act('door')} /> - )}> - {chems.map(chem => ( -
-
+ + {occupant.brainLoss ? 'Abnormal' : 'Healthy'} + + + + )} +
+
act('door')} /> + )}> + {chems.map(chem => ( +
+ + ); }; diff --git a/tgui/packages/tgui/interfaces/SlimeBodySwapper.js b/tgui/packages/tgui/interfaces/SlimeBodySwapper.js index 9b41120b422..51fbd8bce34 100644 --- a/tgui/packages/tgui/interfaces/SlimeBodySwapper.js +++ b/tgui/packages/tgui/interfaces/SlimeBodySwapper.js @@ -1,7 +1,8 @@ import { useBackend } from '../backend'; -import { Section, LabeledList, ProgressBar, Button, BlockQuote, Grid, Box } from '../components'; +import { Section, LabeledList, Button, Box } from '../components'; +import { Window } from '../layouts'; -export const BodyEntry = props => { +export const BodyEntry = (props, context) => { const { body, swapFunc } = props; const statusMap = { @@ -50,21 +51,25 @@ export const BodyEntry = props => { ); }; -export const SlimeBodySwapper = props => { - const { act, data } = useBackend(props); +export const SlimeBodySwapper = (props, context) => { + const { act, data } = useBackend(context); const { bodies = [], } = data; return ( -
- {bodies.map(body => ( - act('swap', { ref: body.ref })} /> - ))} -
+ + +
+ {bodies.map(body => ( + act('swap', { ref: body.ref })} /> + ))} +
+
+
); }; diff --git a/tgui/packages/tgui/interfaces/SmartVend.js b/tgui/packages/tgui/interfaces/SmartVend.js index d0c13ad259e..b835c3996ef 100644 --- a/tgui/packages/tgui/interfaces/SmartVend.js +++ b/tgui/packages/tgui/interfaces/SmartVend.js @@ -1,61 +1,66 @@ import { map } from 'common/collections'; import { useBackend } from '../backend'; import { Button, NoticeBox, Section, Table } from '../components'; +import { Window } from '../layouts'; -export const SmartVend = props => { - const { act, data } = useBackend(props); +export const SmartVend = (props, context) => { + const { act, data } = useBackend(context); return ( -
act('Dry')}> - {data.drying ? 'Stop drying' : 'Dry'} - - )}> - {data.contents.length === 0 && ( - - Unfortunately, this {data.name} is empty. - - ) || ( - - - - Item - - - - {data.verb ? data.verb : 'Dispense'} - - - {map((value, key) => ( - - - {value.name} - - - {value.amount} - - -
- )} -
+ + +
act('Dry')}> + {data.drying ? 'Stop drying' : 'Dry'} + + )}> + {data.contents.length === 0 && ( + + Unfortunately, this {data.name} is empty. + + ) || ( + + + + Item + + + + {data.verb ? data.verb : 'Dispense'} + + + {map((value, key) => ( + + + {value.name} + + + {value.amount} + + +
+ )} +
+
+
); }; diff --git a/tgui/packages/tgui/interfaces/Smes.js b/tgui/packages/tgui/interfaces/Smes.js index 368ddda78e3..552ad1d1a5d 100644 --- a/tgui/packages/tgui/interfaces/Smes.js +++ b/tgui/packages/tgui/interfaces/Smes.js @@ -1,13 +1,13 @@ -import { Fragment } from 'inferno'; import { useBackend } from '../backend'; import { Box, Button, Flex, LabeledList, ProgressBar, Section, Slider } from '../components'; import { formatPower } from '../format'; +import { Window } from '../layouts'; // Common power multiplier const POWER_MUL = 1e3; -export const Smes = props => { - const { act, data } = useBackend(props); +export const Smes = (props, context) => { + const { act, data } = useBackend(context); const { capacityPercent, capacity, @@ -34,153 +34,155 @@ export const Smes = props => { || 'bad' ); return ( - -
- -
-
- - act('tryinput')}> - {inputAttempt ? 'Auto' : 'Off'} - - }> - - {capacityPercent >= 100 && 'Fully Charged' - || inputting && 'Charging' - || 'Not Charging'} - - - - - + + +
+ +
+
+ + act('input', { - target: 'min', - })} /> + icon={inputAttempt ? 'sync-alt' : 'times'} + selected={inputAttempt} + onClick={() => act('tryinput')}> + {inputAttempt ? 'Auto' : 'Off'} + + }> + + {capacityPercent >= 100 && 'Fully Charged' + || inputting && 'Charging' + || 'Not Charging'} + + + + + +
+
+ + act('input', { - adjust: -10000, - })} /> - - - formatPower(value * POWER_MUL, 1)} - onDrag={(e, value) => act('input', { - target: value * POWER_MUL, - })} /> - - -
-
- - act('tryoutput')}> - {outputAttempt ? 'On' : 'Off'} - - }> - - {outputting - ? 'Sending' - : charge > 0 - ? 'Not Sending' - : 'No Charge'} - - - - - -
- + icon={outputAttempt ? 'power-off' : 'times'} + selected={outputAttempt} + onClick={() => act('tryoutput')}> + {outputAttempt ? 'On' : 'Off'} + + }> + + {outputting + ? 'Sending' + : charge > 0 + ? 'Not Sending' + : 'No Charge'} + +
+ + + +
+ + ); }; diff --git a/tgui/packages/tgui/interfaces/SmokeMachine.js b/tgui/packages/tgui/interfaces/SmokeMachine.js index 449c04e754d..bc76dfb23ac 100644 --- a/tgui/packages/tgui/interfaces/SmokeMachine.js +++ b/tgui/packages/tgui/interfaces/SmokeMachine.js @@ -1,9 +1,9 @@ import { useBackend } from '../backend'; -import { Fragment } from 'inferno'; -import { AnimatedNumber, Box, Button, LabeledList, ProgressBar, NoticeBox, Section } from '../components'; +import { AnimatedNumber, Box, Button, LabeledList, ProgressBar, Section } from '../components'; +import { Window } from '../layouts'; -export const SmokeMachine = props => { - const { act, data } = useBackend(props); +export const SmokeMachine = (props, context) => { + const { act, data } = useBackend(context); const { TankContents, isTankLoaded, @@ -15,58 +15,60 @@ export const SmokeMachine = props => { maxSetting = [], } = data; return ( - -
act('power')} /> - )}> - - - {' / ' + TankMaxVolume} - - - - - {[1, 2, 3, 4, 5].map(amount => ( -
-
act('purge')} /> - )}> - {TankContents.map(chemical => ( - - - {' '} - units of {chemical.name} + + +
act('power')} /> + )}> + + + {' / ' + TankMaxVolume} + + + + + {[1, 2, 3, 4, 5].map(amount => ( +
- +
+
act('purge')} /> + )}> + {TankContents.map(chemical => ( + + + {' '} + units of {chemical.name} + + ))} +
+ + ); }; diff --git a/tgui/packages/tgui/interfaces/SolarControl.js b/tgui/packages/tgui/interfaces/SolarControl.js index 62ebcef427f..36cb711916c 100644 --- a/tgui/packages/tgui/interfaces/SolarControl.js +++ b/tgui/packages/tgui/interfaces/SolarControl.js @@ -2,9 +2,10 @@ import { toFixed } from 'common/math'; import { Fragment } from 'inferno'; import { useBackend } from '../backend'; import { Box, Button, Grid, LabeledList, NumberInput, ProgressBar, Section } from '../components'; +import { Window } from '../layouts'; -export const SolarControl = props => { - const { act, data } = useBackend(props); +export const SolarControl = (props, context) => { + const { act, data } = useBackend(context); const { generated, generated_ratio, @@ -16,104 +17,106 @@ export const SolarControl = props => { connected_tracker, } = data; return ( - -
act('refresh')} /> - )}> - - - - - {connected_tracker ? 'OK' : 'N/A'} - - 0 ? 'good' : 'bad'}> - {connected_panels} - - - - - - - - {generated + ' W'} - - - - - -
-
- - -
+
+ + +
+ + ); }; diff --git a/tgui/packages/tgui/interfaces/SpaceHeater.js b/tgui/packages/tgui/interfaces/SpaceHeater.js index 45e3fd15140..0dbc0908ac8 100644 --- a/tgui/packages/tgui/interfaces/SpaceHeater.js +++ b/tgui/packages/tgui/interfaces/SpaceHeater.js @@ -1,105 +1,108 @@ import { Fragment } from 'inferno'; import { useBackend } from '../backend'; import { Box, Button, LabeledList, NumberInput, ProgressBar, Section } from '../components'; +import { Window } from '../layouts'; -export const SpaceHeater = props => { - const { act, data } = useBackend(props); +export const SpaceHeater = (props, context) => { + const { act, data } = useBackend(context); return ( - -
-
-
- - - 50 - ? 'bad' - : Math.abs(data.targetTemp - data.currentTemp) > 20 - ? 'average' - : 'good'}> - {data.currentTemp}°C - - - - {data.open && ( - act('target', { - target: value, - })} /> - ) || ( - data.targetTemp + '°C' - )} - - - {!data.open && 'Auto' || ( - -
+
+ + + 50 + ? 'bad' + : Math.abs(data.targetTemp - data.currentTemp) > 20 + ? 'average' + : 'good'}> + {data.currentTemp}°C + + + + {data.open && ( + act('target', { + target: value, })} /> -
-
+ ) || ( + data.targetTemp + '°C' + )} + + + {!data.open && 'Auto' || ( + +
+ + ); }; diff --git a/tgui/packages/tgui/interfaces/SpawnersMenu.js b/tgui/packages/tgui/interfaces/SpawnersMenu.js index 27d8b1f9ff7..ba5c5d74ecd 100644 --- a/tgui/packages/tgui/interfaces/SpawnersMenu.js +++ b/tgui/packages/tgui/interfaces/SpawnersMenu.js @@ -1,51 +1,56 @@ import { Fragment } from 'inferno'; import { useBackend } from '../backend'; import { Box, Button, Section } from '../components'; +import { Window } from '../layouts'; -export const SpawnersMenu = props => { - const { act, data } = useBackend(props); +export const SpawnersMenu = (props, context) => { + const { act, data } = useBackend(context); const spawners = data.spawners || []; return ( -
- {spawners.map(spawner => ( -
-
+ ))}
- ))} - + + ); }; diff --git a/tgui/packages/tgui/interfaces/StationAlertConsole.js b/tgui/packages/tgui/interfaces/StationAlertConsole.js index c372b532e9d..504467f9850 100644 --- a/tgui/packages/tgui/interfaces/StationAlertConsole.js +++ b/tgui/packages/tgui/interfaces/StationAlertConsole.js @@ -1,9 +1,20 @@ import { Fragment } from 'inferno'; import { useBackend } from '../backend'; import { Section } from '../components'; +import { Window } from '../layouts'; -export const StationAlertConsole = props => { - const { data } = useBackend(props); +export const StationAlertConsole = () => { + return ( + + + + + + ); +}; + +export const StationAlertConsoleContent = (props, context) => { + const { data } = useBackend(context); const categories = data.alarms || []; const fire = categories['Fire'] || []; const atmos = categories['Atmosphere'] || []; diff --git a/tgui/packages/tgui/interfaces/SuitStorageUnit.js b/tgui/packages/tgui/interfaces/SuitStorageUnit.js index f858505a372..65c990d7633 100644 --- a/tgui/packages/tgui/interfaces/SuitStorageUnit.js +++ b/tgui/packages/tgui/interfaces/SuitStorageUnit.js @@ -1,9 +1,10 @@ import { Fragment } from 'inferno'; import { useBackend } from '../backend'; import { Box, Button, Icon, LabeledList, NoticeBox, Section } from '../components'; +import { Window } from '../layouts'; -export const SuitStorageUnit = props => { - const { act, data } = useBackend(props); +export const SuitStorageUnit = (props, context) => { + const { act, data } = useBackend(context); const { locked, open, @@ -16,96 +17,98 @@ export const SuitStorageUnit = props => { storage, } = data; return ( - - {!!(occupied && safeties) && ( - - Biological entity detected in suit chamber. Please remove - before continuing with operation. - - )} - {uv_active && ( - - Contents are currently being decontaminated. Please wait. - - ) || ( -
- {!open && ( -
- )} -
+ + + {!!(occupied && safeties) && ( + + Biological entity detected in suit chamber. Please remove + before continuing with operation. + + )} + {uv_active && ( + + Contents are currently being decontaminated. Please wait. + + ) || ( +
+ {!open && ( +
+ )} +
+
); }; diff --git a/tgui/packages/tgui/interfaces/SyndContractor.js b/tgui/packages/tgui/interfaces/SyndContractor.js index 40bfa869821..f717d681e21 100644 --- a/tgui/packages/tgui/interfaces/SyndContractor.js +++ b/tgui/packages/tgui/interfaces/SyndContractor.js @@ -1,6 +1,14 @@ -import { Box, Button, Section, Dimmer, Table, Icon, NoticeBox, Tabs, Grid, LabeledList } from "../components"; -import { useBackend } from "../backend"; -import { Fragment, Component } from "inferno"; +import { Component, Fragment } from 'inferno'; +import { useBackend, useLocalState } from '../backend'; +import { Box, Button, Flex, Grid, Icon, LabeledList, Modal, NoticeBox, Section, Table, Tabs } from '../components'; +import { NtosWindow } from '../layouts'; + +const CONTRACT_STATUS_INACTIVE = 1; +const CONTRACT_STATUS_ACTIVE = 2; +const CONTRACT_STATUS_BOUNTY_CONSOLE_ACTIVE = 3; +const CONTRACT_STATUS_EXTRACTING = 4; +const CONTRACT_STATUS_COMPLETE = 5; +const CONTRACT_STATUS_ABORTED = 6; export class FakeTerminal extends Component { constructor(props) { @@ -53,8 +61,20 @@ export class FakeTerminal extends Component { } } -export const SyndContractor = props => { - const { data, act } = useBackend(props); +export const SyndContractor = (props, context) => { + return ( + + + + + + ); +}; + +export const SyndContractorContent = (props, context) => { + const { data, act } = useBackend(context); const terminalMessages = [ "Recording biometric data...", @@ -110,36 +130,29 @@ export const SyndContractor = props => { ]; const errorPane = !!data.error && ( - - - - - - - - - - {data.error} - -
-
-
+ + + + + + + + {data.error} + +