diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index ccd774cdaa8..894a16ac470 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -5,6 +5,7 @@ ### AffectedArc07 # Actual Code +/code/controllers/subsystem/instancing.dm @AffectedArc07 /code/controllers/subsystem/mapping.dm @AffectedArc07 /code/controllers/subsystem/ticker.dm @AffectedArc07 /tgui/ @AffectedArc07 diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 6a6d87c2d1e..177bfd0b335 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -38,6 +38,11 @@ actual development. of a pull request needs to be removed/changed, you may simply modify that single commit. Due to limitations of the engine, this may not always be possible; but do try your best. + * Keep your pull requests small and reviewable whenever possible. Do not bundle unrelated + fixes even if not bundling them generates more pull requests. In case of mapping PRs that add features - + consult a maintainer on whether it would be appropriate to split up the PR to add the + feature to multiple maps individually. + * Document and explain your pull requests thoroughly. Failure to do so will delay a PR as we question why changes were made. This is especially important if you're porting a PR from another codebase (i.e. TG) and divert from the original. Explaining with single @@ -460,7 +465,7 @@ SS13 has a lot of legacy code that's never been updated. Here are some examples ```DM //Bad var/datum/db_query/query_watch = SSdbcore.NewQuery("SELECT reason FROM [format_table_name("watch")] WHERE ckey='[target_ckey]'") - + //Good var/datum/db_query/query_watch = SSdbcore.NewQuery("SELECT reason FROM [format_table_name("watch")] WHERE ckey=:target_ckey", list( "target_ckey" = target_ckey @@ -497,11 +502,13 @@ in the SQL/updates folder. * Queries must never specify the database, be it in code, or in text files in the repo. ### Mapping Standards +* For map edit PRs, we do not accept 'change for the sake of change' remaps, unless you have very good reasoning to do so. Maintainers reserve the right to close your PR if we disagree with your reasoning. + * Map Merge * The following guideline for map merging applies to people who are **NOT** using StrongDMM, please see the StrongDMM section if you are. * You **MUST** run Map Merge prior to opening your PR when updating existing maps to minimize the change differences (even when using third party mapping programs such as FastDMM.) * Failure to run Map Merge on a map after using third party mapping programs (such as FastDMM) greatly increases the risk of the map's key dictionary becoming corrupted by future edits after running map merge. Resolving the corruption issue involves rebuilding the map's key dictionary; - + * StrongDMM * When using StrongDMM, the following options **MUST** be enabled to avoid file bloat. They can be found under `File > Preferences > Save Options` in SDMM. * Map save format: This **MUST** be set to **TGM** if you do not want to run Map Merge. Enabling this setting means SDMM will automatically map merge, letting you skip manual merging. @@ -521,10 +528,10 @@ in the SQL/updates folder. * NEVER run cables under wall turfs. * Keep floor turf variations to a minimum. Generally, more than 3 floor turf types in one room is bad design. * Run air pipes together where possible. The first example below is to be avoided, the second is optimal: - + ![image](https://user-images.githubusercontent.com/12197162/120011088-d22c7400-bfd5-11eb-867f-7b137ac5b1b2.png) ![image](https://user-images.githubusercontent.com/12197162/120011126-dfe1f980-bfd5-11eb-96b2-c83238a9cdcf.png) - * Pipe layouts should be logical and predictable, easy to understand at a glance. Always avoid complex layouts like in this example: - + * Pipe layouts should be logical and predictable, easy to understand at a glance. Always avoid complex layouts like in this example: + ![image](https://user-images.githubusercontent.com/12197162/120619480-ecda6f00-c453-11eb-9d9f-abf0d1a99c34.png) * Decals are to be used sparingly. Good map design does not require warning tape around everything. Decal overuse contributes to maptick slowdown. diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 00000000000..7d4716f9122 --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1 @@ +patreon: ParadiseStation diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 4b5975725c0..f60633cb9b8 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -55,6 +55,9 @@ jobs: unit_tests_and_sql: name: Unit Tests + SQL Validation runs-on: ubuntu-20.04 + strategy: + matrix: + maptype: ['/datum/map/cyberiad', '/datum/map/delta', '/datum/map/metastation'] services: mariadb: image: mariadb:latest @@ -86,6 +89,7 @@ jobs: tools/ci/install_byond.sh source $HOME/BYOND/byond/bin/byondsetup tools/ci/dm.sh -DCIBUILDING paradise.dme + echo '${{ matrix.maptype }}' > data/next_map.txt tools/ci/run_server.sh windows_dll_tests: diff --git a/.github/workflows/generate_autodoc.yml b/.github/workflows/generate_autodoc.yml index 44eb69eb570..93a21c05a69 100644 --- a/.github/workflows/generate_autodoc.yml +++ b/.github/workflows/generate_autodoc.yml @@ -2,7 +2,8 @@ name: Generate Documentation on: schedule: - - cron: "0 0 * * *" # Every day at the very start of the day + - cron: "0 0 * * *" # Every day at the very start of the day. Except it happens an hour and a half later because actions backlog + workflow_dispatch: jobs: generate_docs: @@ -14,10 +15,11 @@ jobs: with: fetch-depth: 1 ref: master - + - name: 'Install DMDOC' + run: bash tools/ci/install_dmdoc.sh - name: 'Generate Documentation' run: | - ./tools/github-actions/doc-generator + ~/dmdoc touch dmdoc/.nojekyll # Nojekyll is important to disable jeykll syntax, which can mess with files that start with underscores diff --git a/SQL/paradise_schema.sql b/SQL/paradise_schema.sql index 3ed1cbca688..47d04aa39ce 100644 --- a/SQL/paradise_schema.sql +++ b/SQL/paradise_schema.sql @@ -114,6 +114,7 @@ CREATE TABLE `death` ( `pod` text NOT NULL COMMENT 'Place of death', `coord` text NOT NULL COMMENT 'X, Y, Z POD', `tod` datetime NOT NULL COMMENT 'Time of death', + `server_id` TEXT NULL DEFAULT NULL, `job` text NOT NULL, `special` text NOT NULL, `name` text NOT NULL, @@ -197,6 +198,7 @@ CREATE TABLE `ban` ( `bantime` datetime NOT NULL, `ban_round_id` INT(11) NULL DEFAULT NULL, `serverip` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL, + `server_id` VARCHAR(50) NULL DEFAULT NULL COLLATE utf8mb4_general_ci, `bantype` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL, `reason` mediumtext COLLATE utf8mb4_unicode_ci NOT NULL, `job` varchar(32) COLLATE utf8mb4_unicode_ci DEFAULT NULL, @@ -320,6 +322,7 @@ CREATE TABLE `karma` ( `receiverspecial` text, `isnegative` tinyint(1) DEFAULT NULL, `spenderip` text NOT NULL, + `server_id` TEXT NULL DEFAULT NULL, `time` datetime NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=73614 DEFAULT CHARSET=utf8mb4; @@ -374,6 +377,7 @@ CREATE TABLE `legacy_population` ( `id` int(11) NOT NULL AUTO_INCREMENT, `playercount` int(11) DEFAULT NULL, `admincount` int(11) DEFAULT NULL, + `server_id` VARCHAR(50) NULL DEFAULT NULL, `time` datetime NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=2550 DEFAULT CHARSET=utf8mb4; @@ -532,6 +536,7 @@ CREATE TABLE `connection_log` ( `ckey` varchar(32) NOT NULL, `ip` varchar(32) NOT NULL, `computerid` varchar(32) NOT NULL, + `server_id` VARCHAR(50) NULL DEFAULT NULL, `result` ENUM('ESTABLISHED','DROPPED - IPINTEL','DROPPED - BANNED','DROPPED - INVALID') NOT NULL DEFAULT 'ESTABLISHED' COLLATE 'utf8mb4_general_ci', PRIMARY KEY (`id`), KEY `ckey` (`ckey`), @@ -584,6 +589,7 @@ CREATE TABLE `round` ( `shuttle_name` VARCHAR(64) NULL, `map_name` VARCHAR(32) NULL, `station_name` VARCHAR(80) NULL, + `server_id` VARCHAR(50) NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; @@ -597,5 +603,29 @@ CREATE TABLE `2fa_secrets` ( `date_setup` DATETIME NOT NULL DEFAULT current_timestamp(), `last_time` DATETIME NULL DEFAULT NULL, PRIMARY KEY (`ckey`) USING BTREE -) -COLLATE='utf8mb4_general_ci' ENGINE=InnoDB; +) COLLATE='utf8mb4_general_ci' ENGINE=InnoDB; + +-- +-- Table structure for table `pai_saves` +-- +CREATE TABLE `pai_saves` ( + `id` INT(11) NOT NULL AUTO_INCREMENT, + `ckey` VARCHAR(50) NOT NULL COLLATE 'utf8mb4_general_ci', + `pai_name` LONGTEXT NULL DEFAULT NULL COLLATE 'utf8mb4_general_ci', + `description` LONGTEXT NULL DEFAULT NULL COLLATE 'utf8mb4_general_ci', + `preferred_role` LONGTEXT NULL DEFAULT NULL COLLATE 'utf8mb4_general_ci', + `ooc_comments` LONGTEXT NULL DEFAULT NULL COLLATE 'utf8mb4_general_ci', + PRIMARY KEY (`id`) USING BTREE, + UNIQUE INDEX `ckey` (`ckey`) USING BTREE +) COLLATE='utf8mb4_general_ci' ENGINE=InnoDB; + +-- +-- Table structure for table `instance_data_cache` +-- +CREATE TABLE `instance_data_cache` ( + `server_id` VARCHAR(50) NOT NULL COLLATE 'utf8mb4_general_ci', + `key_name` VARCHAR(50) NOT NULL COLLATE 'utf8mb4_general_ci', + `key_value` VARCHAR(12345) NOT NULL COLLATE 'utf8mb4_general_ci', + `last_updated` TIMESTAMP NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), + PRIMARY KEY (`server_id`, `key_name`) USING HASH +) COLLATE='utf8mb4_general_ci' ENGINE=MEMORY; diff --git a/SQL/updates/25-26.sql b/SQL/updates/25-26.sql new file mode 100644 index 00000000000..93e6fc3db04 --- /dev/null +++ b/SQL/updates/25-26.sql @@ -0,0 +1,13 @@ +# Updates DB from 25-25, -AffectedArc07 +# Adds a pAI saves table to the DB + +CREATE TABLE `pai_saves` ( + `id` INT(11) NOT NULL AUTO_INCREMENT, + `ckey` VARCHAR(50) NOT NULL COLLATE 'utf8mb4_general_ci', + `pai_name` LONGTEXT NULL DEFAULT NULL COLLATE 'utf8mb4_general_ci', + `description` LONGTEXT NULL DEFAULT NULL COLLATE 'utf8mb4_general_ci', + `preferred_role` LONGTEXT NULL DEFAULT NULL COLLATE 'utf8mb4_general_ci', + `ooc_comments` LONGTEXT NULL DEFAULT NULL COLLATE 'utf8mb4_general_ci', + PRIMARY KEY (`id`) USING BTREE, + UNIQUE INDEX `ckey` (`ckey`) USING BTREE +) COLLATE='utf8mb4_general_ci' ENGINE=InnoDB; diff --git a/SQL/updates/26-27.sql b/SQL/updates/26-27.sql new file mode 100644 index 00000000000..cdc66928d91 --- /dev/null +++ b/SQL/updates/26-27.sql @@ -0,0 +1,32 @@ +# Updates DB from 26 to 27 -AffectedArc07 +# Adds a new table for instance data caching, and server_id fields on other tables + +CREATE TABLE `instance_data_cache` ( + `server_id` VARCHAR(50) NOT NULL COLLATE 'utf8mb4_general_ci', + `key_name` VARCHAR(50) NOT NULL COLLATE 'utf8mb4_general_ci', + `key_value` VARCHAR(12345) NOT NULL COLLATE 'utf8mb4_general_ci', + `last_updated` TIMESTAMP NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), + PRIMARY KEY (`server_id`, `key_name`) USING HASH +) COLLATE='utf8mb4_general_ci' ENGINE=MEMORY; + +ALTER TABLE `ban` + ADD COLUMN `server_id` VARCHAR(50) NULL DEFAULT NULL AFTER `serverip`; + +ALTER TABLE `connection_log` + ADD COLUMN `server_id` VARCHAR(50) NULL DEFAULT NULL AFTER `computerid`; + +ALTER TABLE `death` + ADD COLUMN `server_id` TEXT NULL AFTER `tod`; + +ALTER TABLE `karma` + ADD COLUMN `server_id` TEXT NULL AFTER `spenderip`; + +ALTER TABLE `legacy_population` + ADD COLUMN `server_id` VARCHAR(50) NULL DEFAULT NULL AFTER `admincount`; + +# Notes already has a column for this +ALTER TABLE `notes` + CHANGE COLUMN `server` `server` VARCHAR(50) NULL COLLATE 'utf8mb4_general_ci' AFTER `edits`; + +ALTER TABLE `round` + ADD COLUMN `server_id` VARCHAR(50) NULL DEFAULT NULL AFTER `station_name`; diff --git a/_build_dependencies.sh b/_build_dependencies.sh index 8cef5ce91b9..61b02c2ca10 100644 --- a/_build_dependencies.sh +++ b/_build_dependencies.sh @@ -1,9 +1,9 @@ # This file has all the information on what versions of libraries are thrown into the code # For dreamchecker -export SPACEMANDMM_TAG=suite-1.6 +export SPACEMANDMM_TAG=suite-1.7.1 # For TGUI export NODE_VERSION=12 # Byond Major -export BYOND_MAJOR=513 +export BYOND_MAJOR=514 # Byond Minor -export BYOND_MINOR=1528 +export BYOND_MINOR=1566 diff --git a/_maps/map_files/Delta/delta.dmm b/_maps/map_files/Delta/delta.dmm index e5f0121446b..49340e999c9 100644 --- a/_maps/map_files/Delta/delta.dmm +++ b/_maps/map_files/Delta/delta.dmm @@ -131,7 +131,7 @@ /obj/machinery/access_button{ command = "cycle_exterior"; frequency = 1379; - master_tag = "tradedock"; + master_tag = "tradedock_outer"; name = "exterior access button"; pixel_x = 24; pixel_y = 4 @@ -211,12 +211,13 @@ /turf/simulated/floor/plating, /area/shuttle/pod_1) "adg" = ( -/turf/simulated/wall/mineral/titanium, -/area/shuttle/pod_2) -"adh" = ( -/obj/effect/spawner/window/shuttle, +/obj/structure/closet/emcloset, /turf/simulated/floor/plating, -/area/shuttle/pod_2) +/area/hallway/secondary/entry) +"adh" = ( +/obj/effect/decal/warning_stripes/east, +/turf/simulated/floor/plating, +/area/hallway/secondary/entry) "adt" = ( /obj/machinery/atmospherics/pipe/simple/hidden{ dir = 5 @@ -257,18 +258,11 @@ /turf/simulated/floor/mineral/titanium/blue, /area/shuttle/pod_1) "adz" = ( -/obj/machinery/status_display{ - layer = 4; - pixel_x = 32 - }, -/obj/machinery/light{ - dir = 4 - }, -/obj/structure/chair/comfy/shuttle{ +/obj/machinery/light/small{ dir = 1 }, -/turf/simulated/floor/mineral/titanium/blue, -/area/shuttle/pod_2) +/turf/simulated/floor/plating, +/area/hallway/secondary/entry) "adK" = ( /obj/machinery/light/small{ dir = 4 @@ -280,6 +274,13 @@ /obj/structure/shuttle/engine/propulsion/burst, /turf/simulated/wall/mineral/titanium, /area/shuttle/pod_1) +"adM" = ( +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ + dir = 4 + }, +/turf/space, +/area/space) "adN" = ( /turf/simulated/wall/r_wall, /area/hallway/secondary/entry) @@ -293,20 +294,6 @@ }, /turf/simulated/floor/mineral/titanium/blue, /area/shuttle/pod_1) -"adP" = ( -/obj/item/radio/intercom{ - dir = 4; - pixel_x = 28 - }, -/obj/structure/chair/comfy/shuttle{ - dir = 1 - }, -/turf/simulated/floor/mineral/titanium/blue, -/area/shuttle/pod_2) -"adQ" = ( -/obj/structure/shuttle/engine/propulsion/burst, -/turf/simulated/wall/mineral/titanium, -/area/shuttle/pod_2) "adT" = ( /obj/docking_port/stationary{ dir = 2; @@ -371,16 +358,8 @@ /turf/simulated/floor/plasteel, /area/hallway/secondary/entry) "aeg" = ( -/obj/docking_port/mobile/pod{ - id = "pod2"; - name = "escape pod 2" - }, -/obj/machinery/door/airlock/titanium{ - id_tag = "s_docking_airlock"; - name = "Escape Pod Hatch" - }, -/turf/simulated/floor/mineral/titanium/blue, -/area/shuttle/pod_2) +/turf/simulated/floor/plating, +/area/hallway/secondary/entry) "aey" = ( /obj/machinery/light/small{ dir = 8 @@ -421,10 +400,11 @@ }, /area/hallway/secondary/entry) "aeK" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/external, -/turf/simulated/floor/plasteel, -/area/hallway/secondary/entry) +/obj/structure/shuttle/engine/propulsion/burst{ + dir = 8 + }, +/turf/simulated/wall/mineral/titanium, +/area/shuttle/pod_4) "aeL" = ( /obj/item/twohanded/required/kirbyplants, /turf/simulated/floor/plasteel{ @@ -470,8 +450,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/door/airlock/engineering{ name = "Aux Construction Site" @@ -513,8 +492,7 @@ /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 6 @@ -528,8 +506,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 8 @@ -543,8 +520,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/sign/electricshock{ pixel_y = -32 @@ -619,7 +595,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden{ dir = 4 }, -/turf/simulated/floor/plasteel, +/turf/simulated/floor/plating, /area/maintenance/auxsolarstarboard) "afm" = ( /obj/structure/cable{ @@ -647,7 +623,7 @@ pixel_y = 32 }, /obj/effect/decal/warning_stripes/yellow, -/turf/simulated/floor/plasteel, +/turf/simulated/floor/plating, /area/maintenance/auxsolarstarboard) "afn" = ( /obj/structure/cable{ @@ -661,7 +637,7 @@ name = "Engineering External Access"; req_access_txt = "10;13" }, -/turf/simulated/floor/plasteel, +/turf/simulated/floor/plating, /area/maintenance/auxsolarstarboard) "afw" = ( /obj/docking_port/stationary{ @@ -694,8 +670,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel{ @@ -709,10 +684,6 @@ icon_state = "brown" }, /area/hallway/secondary/entry) -"afA" = ( -/obj/structure/reagent_dispensers/fueltank, -/turf/simulated/floor/engine, -/area/engine/mechanic_workshop/hanger) "afB" = ( /obj/structure/chair/office/dark{ dir = 4 @@ -726,11 +697,12 @@ /area/maintenance/auxsolarstarboard) "afC" = ( /obj/structure/cable, +/obj/effect/decal/warning_stripes/southeast, /obj/machinery/power/solar_control{ + dir = 8; id = "auxsolareast"; name = "Fore Starboard Solar Control" }, -/obj/effect/decal/warning_stripes/southeast, /turf/simulated/floor/plating, /area/maintenance/auxsolarstarboard) "afJ" = ( @@ -993,9 +965,6 @@ }, /turf/simulated/floor/plasteel, /area/hallway/secondary/entry) -"agI" = ( -/turf/simulated/wall/r_wall, -/area/security/podbay) "agJ" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 6 @@ -1008,13 +977,6 @@ icon_state = "neutralfull" }, /area/hallway/secondary/entry) -"agK" = ( -/turf/simulated/wall/r_wall, -/area/engine/mechanic_workshop/hanger) -"agL" = ( -/obj/effect/decal/warning_stripes/east, -/turf/simulated/floor/engine/vacuum, -/area/engine/mechanic_workshop/hanger) "agT" = ( /obj/item/clothing/suit/storage/hazardvest, /obj/item/clothing/suit/storage/hazardvest, @@ -1046,99 +1008,6 @@ /obj/machinery/cell_charger, /turf/simulated/floor/mineral/titanium/blue, /area/shuttle/arrival/station) -"agY" = ( -/obj/structure/table/reinforced, -/obj/item/clothing/suit/jacket/pilot, -/obj/item/clothing/head/beret/sec, -/obj/machinery/light_switch{ - pixel_x = -25 - }, -/obj/item/spacepod_key{ - id = 100000 - }, -/obj/item/gps, -/obj/machinery/newscaster/security_unit{ - pixel_y = 32 - }, -/turf/simulated/floor/plasteel{ - icon_state = "dark" - }, -/area/security/podbay) -"agZ" = ( -/obj/structure/table/reinforced, -/obj/item/flashlight, -/obj/item/radio{ - pixel_y = 6 - }, -/obj/machinery/camera{ - c_tag = "Sec Pod Office"; - network = list("Security","SS13") - }, -/turf/simulated/floor/plasteel{ - icon_state = "dark" - }, -/area/security/podbay) -"aha" = ( -/obj/structure/table/reinforced, -/obj/item/book/manual/security_space_law, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, -/obj/structure/cable{ - d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/floor/plasteel{ - icon_state = "dark" - }, -/area/security/podbay) -"ahb" = ( -/obj/structure/table, -/obj/machinery/cell_charger, -/obj/item/storage/toolbox/mechanical{ - pixel_y = 10 - }, -/obj/item/stock_parts/cell/high{ - charge = 100; - maxcharge = 15000 - }, -/obj/item/clothing/glasses/welding, -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/floor/plasteel{ - icon_state = "dark" - }, -/area/security/podbay) -"ahc" = ( -/obj/structure/rack, -/obj/item/tank/internals/oxygen, -/obj/item/clothing/suit/space/hardsuit/security, -/obj/item/clothing/mask/breath, -/obj/item/clothing/shoes/magboots, -/obj/item/tank/jetpack/oxygen, -/obj/item/radio/intercom{ - pixel_y = 28 - }, -/turf/simulated/floor/plasteel{ - icon_state = "dark" - }, -/area/security/podbay) -"ahd" = ( -/obj/effect/spawner/window/reinforced, -/turf/simulated/floor/plating, -/area/security/podbay) -"ahe" = ( -/turf/simulated/floor/engine, -/area/engine/mechanic_workshop/hanger) -"ahf" = ( -/obj/machinery/camera{ - c_tag = "Hanger North" - }, -/turf/simulated/floor/engine, -/area/engine/mechanic_workshop/hanger) "ahg" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 8 @@ -1151,12 +1020,6 @@ icon_state = "neutralfull" }, /area/hallway/secondary/entry) -"ahh" = ( -/obj/item/radio/intercom{ - pixel_y = 28 - }, -/turf/simulated/floor/engine, -/area/engine/mechanic_workshop/hanger) "ahi" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 8 @@ -1169,38 +1032,6 @@ icon_state = "neutralfull" }, /area/hallway/secondary/entry) -"ahj" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - icon_state = "dark" - }, -/area/security/podbay) -"ahk" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/turf/simulated/floor/plasteel{ - icon_state = "dark" - }, -/area/security/podbay) -"ahl" = ( -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; - icon_state = "space"; - layer = 4; - name = "EXTERNAL AIRLOCK"; - pixel_x = 32; - pixel_y = null - }, -/turf/simulated/floor/engine, -/area/engine/mechanic_workshop/hanger) "ahv" = ( /obj/structure/lattice, /turf/space, @@ -1246,12 +1077,6 @@ "ahC" = ( /turf/simulated/floor/mineral/titanium/blue, /area/shuttle/arrival/station) -"ahD" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/turf/simulated/floor/engine, -/area/engine/mechanic_workshop/hanger) "ahE" = ( /obj/machinery/door/airlock/titanium{ id_tag = "s_docking_airlock" @@ -1266,184 +1091,15 @@ /obj/effect/decal/warning_stripes/west, /turf/simulated/floor/plasteel, /area/hallway/secondary/entry) -"ahG" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/turf/simulated/floor/plasteel{ - icon_state = "dark" - }, -/area/security/podbay) -"ahH" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - icon_state = "dark" - }, -/area/security/podbay) -"ahI" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - icon_state = "dark" - }, -/area/security/podbay) -"ahJ" = ( -/obj/machinery/door/airlock/security/glass{ - name = "Security Pods"; - req_access_txt = "71" - }, -/turf/simulated/floor/plasteel{ - icon_state = "dark" - }, -/area/security/podbay) -"ahK" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/turf/simulated/floor/engine, -/area/engine/mechanic_workshop/hanger) -"ahL" = ( -/obj/machinery/door_control{ - desc = "A remote control-switch for the pod doors."; - id = "npodbay"; - name = "Pod Door Control"; - pixel_x = 32; - pixel_y = null - }, -/turf/simulated/floor/engine, -/area/engine/mechanic_workshop/hanger) -"ahM" = ( -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'KEEP CLEAR OF DOCKING AREA'."; - name = "KEEP CLEAR: DOCKING AREA" - }, -/turf/simulated/wall/r_wall, -/area/engine/mechanic_workshop/hanger) -"ahT" = ( -/obj/effect/decal/warning_stripes/east, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/plasteel, -/area/hallway/secondary/entry) "ahV" = ( /obj/item/twohanded/required/kirbyplants, /turf/simulated/floor/mineral/titanium/blue, /area/shuttle/arrival/station) "ahW" = ( -/obj/machinery/hologram/holopad, /obj/machinery/light, +/obj/machinery/hologram/holopad, /turf/simulated/floor/mineral/titanium/blue, /area/shuttle/arrival/station) -"ahX" = ( -/obj/structure/closet/secure_closet/security, -/obj/item/spacepod_equipment/weaponry/laser, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/turf/simulated/floor/plasteel{ - icon_state = "dark" - }, -/area/security/podbay) -"ahY" = ( -/obj/machinery/door_control{ - desc = "A remote control-switch for the pod doors."; - id = "npodbay"; - name = "Pod Door Control"; - pixel_y = -24; - req_access_txt = "71" - }, -/turf/simulated/floor/engine, -/area/security/podbay) -"ahZ" = ( -/turf/simulated/floor/plasteel{ - icon_state = "dark" - }, -/area/security/podbay) -"aia" = ( -/obj/structure/chair/office/dark{ - dir = 4 - }, -/obj/effect/landmark/start{ - name = "Security Pod Pilot" - }, -/turf/simulated/floor/plasteel{ - icon_state = "dark" - }, -/area/security/podbay) -"aib" = ( -/obj/machinery/computer/security{ - network = list("SS13","Research Outpost","Mining Outpost") - }, -/obj/machinery/firealarm{ - dir = 4; - pixel_x = 28 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/turf/simulated/floor/plasteel{ - icon_state = "dark" - }, -/area/security/podbay) -"aif" = ( -/obj/machinery/door/airlock/security/glass{ - name = "Security Pods"; - req_access_txt = "71" - }, -/obj/effect/decal/warning_stripes/west, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/plasteel, -/area/security/podbay) -"aig" = ( -/obj/structure/spacepoddoor{ - luminosity = 3 - }, -/obj/machinery/door/poddoor/multi_tile/three_tile_ver{ - id_tag = "secpodbay"; - req_access_txt = "71" - }, -/turf/simulated/floor/engine, -/area/security/podbay) "aik" = ( /obj/machinery/light{ dir = 1 @@ -1485,13 +1141,6 @@ }, /turf/simulated/floor/plasteel, /area/hallway/secondary/entry) -"air" = ( -/obj/effect/decal/warning_stripes/red/partial, -/turf/simulated/floor/engine{ - icon_state = "stage_stairs"; - name = "reinforced stairs" - }, -/area/security/podbay) "ais" = ( /obj/machinery/light{ dir = 1 @@ -1500,87 +1149,6 @@ /obj/effect/decal/warning_stripes/yellow, /turf/simulated/floor/plasteel, /area/hallway/secondary/entry) -"ait" = ( -/obj/structure/window/reinforced{ - dir = 1; - layer = 2.9 - }, -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/machinery/portable_atmospherics/canister/oxygen, -/obj/effect/decal/warning_stripes/red/hollow, -/obj/machinery/light{ - dir = 8 - }, -/obj/effect/decal/warning_stripes/east, -/turf/simulated/floor/plasteel, -/area/security/podbay) -"aiu" = ( -/obj/structure/spacepoddoor{ - luminosity = 3 - }, -/obj/machinery/door/poddoor/multi_tile/four_tile_ver{ - id_tag = "npodbay" - }, -/turf/simulated/floor/engine, -/area/engine/mechanic_workshop/hanger) -"aiv" = ( -/obj/effect/decal/warning_stripes/southwestcorner, -/obj/machinery/door_control{ - desc = "A remote control-switch for the pod doors."; - id = "npodbay"; - name = "Pod Door Control"; - pixel_x = -24; - req_access_txt = "71" - }, -/turf/simulated/floor/engine, -/area/engine/mechanic_workshop/hanger) -"aiw" = ( -/obj/effect/decal/warning_stripes/east, -/obj/machinery/light/small, -/turf/simulated/floor/engine/vacuum, -/area/engine/mechanic_workshop/hanger) -"aix" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/engine, -/area/engine/mechanic_workshop/hanger) -"aiy" = ( -/obj/structure/spacepoddoor{ - luminosity = 3 - }, -/turf/simulated/floor/engine, -/area/engine/mechanic_workshop/hanger) -"aiz" = ( -/obj/effect/decal/warning_stripes/east, -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/floor/engine/vacuum, -/area/engine/mechanic_workshop/hanger) -"aiA" = ( -/obj/structure/window/reinforced{ - dir = 1; - layer = 2.9 - }, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/structure/reagent_dispensers/fueltank, -/obj/effect/decal/warning_stripes/red/hollow, -/obj/effect/decal/warning_stripes/south, -/turf/simulated/floor/plasteel, -/area/security/podbay) -"aiB" = ( -/obj/structure/window/reinforced{ - dir = 1; - layer = 2.9 - }, -/obj/machinery/space_heater, -/obj/effect/decal/warning_stripes/red/hollow, -/obj/effect/decal/warning_stripes/south, -/turf/simulated/floor/plasteel, -/area/security/podbay) "aiE" = ( /obj/structure/closet/emcloset, /obj/effect/decal/warning_stripes/yellow, @@ -1622,51 +1190,6 @@ /obj/effect/decal/warning_stripes/yellow, /turf/simulated/floor/plasteel, /area/hallway/secondary/entry) -"aiL" = ( -/obj/effect/decal/warning_stripes/east, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/plasteel, -/area/hallway/secondary/entry) -"aiM" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/floodlight{ - on = 1 - }, -/turf/simulated/floor/engine, -/area/engine/mechanic_workshop/hanger) -"aiN" = ( -/turf/simulated/floor/engine, -/area/security/podbay) -"aiO" = ( -/obj/structure/spacepoddoor{ - luminosity = 3 - }, -/turf/simulated/floor/engine, -/area/security/podbay) -"aiP" = ( -/obj/effect/decal/warning_stripes/west, -/turf/simulated/floor/engine, -/area/engine/mechanic_workshop/hanger) "aiT" = ( /obj/effect/decal/warning_stripes/east, /obj/structure/cable{ @@ -1694,22 +1217,6 @@ }, /turf/simulated/floor/mineral/titanium/blue, /area/shuttle/arrival/station) -"aiW" = ( -/obj/structure/rack{ - dir = 1 - }, -/obj/item/extinguisher, -/obj/item/storage/toolbox/mechanical{ - pixel_x = -2; - pixel_y = -1 - }, -/obj/item/radio{ - pixel_y = 6 - }, -/obj/effect/decal/warning_stripes/red/hollow, -/obj/effect/decal/warning_stripes/east, -/turf/simulated/floor/plasteel, -/area/security/podbay) "aiX" = ( /obj/structure/chair{ dir = 4 @@ -1720,66 +1227,21 @@ /obj/effect/decal/warning_stripes/yellow, /turf/simulated/floor/plasteel, /area/hallway/secondary/entry) -"aiY" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/engine, -/area/engine/mechanic_workshop/hanger) "ajd" = ( /obj/item/radio/beacon, /obj/effect/decal/warning_stripes/yellow, /turf/simulated/floor/plasteel, /area/hallway/secondary/entry) -"aje" = ( -/obj/machinery/camera{ - c_tag = "Sec Pod Bay"; - dir = 4; - network = list("Security","SS13"); - pixel_y = -22 - }, -/obj/effect/decal/warning_stripes/red/hollow, -/obj/effect/decal/warning_stripes/east, -/turf/simulated/floor/plasteel, -/area/security/podbay) "ajf" = ( /obj/structure/closet/firecloset, /obj/effect/decal/warning_stripes/yellow, /turf/simulated/floor/plasteel, /area/hallway/secondary/entry) -"ajg" = ( -/obj/machinery/hologram/holopad, -/turf/simulated/floor/engine, -/area/security/podbay) -"ajh" = ( -/obj/spacepod/sec{ - dir = 4; - req_access_txt = "71" - }, -/turf/simulated/floor/engine, -/area/security/podbay) -"aji" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/engine, -/area/engine/mechanic_workshop/hanger) "ajy" = ( /obj/item/twohanded/required/kirbyplants, /obj/effect/decal/warning_stripes/yellow, /turf/simulated/floor/plasteel, /area/hallway/secondary/entry) -"ajC" = ( -/obj/effect/decal/warning_stripes/red/hollow, -/obj/effect/decal/warning_stripes/east, -/turf/simulated/floor/plasteel, -/area/security/podbay) "ajD" = ( /obj/structure/table/reinforced, /obj/item/clipboard, @@ -1792,13 +1254,6 @@ /obj/item/storage/pill_bottle/dice, /turf/simulated/floor/mineral/titanium/blue, /area/shuttle/arrival/station) -"ajG" = ( -/obj/machinery/alarm{ - dir = 1; - pixel_y = -24 - }, -/turf/simulated/floor/engine, -/area/engine/mechanic_workshop/hanger) "ajH" = ( /obj/effect/decal/warning_stripes/east, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -1807,6 +1262,12 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4"; + tag = "90Curve" + }, /turf/simulated/floor/plasteel, /area/hallway/secondary/entry) "ajI" = ( @@ -1833,10 +1294,6 @@ icon_state = "redyellowfull" }, /area/maintenance/fore2) -"ajK" = ( -/obj/effect/decal/warning_stripes/northwestcorner, -/turf/simulated/floor/engine, -/area/engine/mechanic_workshop/hanger) "ajL" = ( /turf/simulated/floor/plasteel{ icon_state = "redyellowfull" @@ -1906,152 +1363,6 @@ }, /turf/simulated/floor/plasteel, /area/hallway/secondary/entry) -"akc" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plasteel{ - icon_state = "dark" - }, -/area/engine/mechanic_workshop) -"akd" = ( -/obj/machinery/camera{ - c_tag = "Mechanic's Office" - }, -/obj/machinery/firealarm{ - dir = 8; - pixel_x = -26; - pixel_y = 28 - }, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/requests_console{ - department = "Mechanic"; - departmentType = 2; - name = "Mechanic's Workshop Requests Console"; - pixel_y = 30 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/plasteel{ - icon_state = "dark" - }, -/area/engine/mechanic_workshop) -"ake" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable{ - d2 = 8; - icon_state = "0-8" - }, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/rack, -/obj/random/toolbox, -/obj/item/wrench, -/turf/simulated/floor/plasteel{ - icon_state = "dark" - }, -/area/engine/mechanic_workshop) -"akf" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/spawner/window/reinforced, -/turf/simulated/floor/plating, -/area/engine/mechanic_workshop) -"akg" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/mecha_part_fabricator/spacepod, -/obj/effect/decal/warning_stripes/yellow/hollow, -/turf/simulated/floor/engine, -/area/engine/mechanic_workshop/hanger) -"akh" = ( -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8"; - tag = "" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/engine, -/area/engine/mechanic_workshop/hanger) -"aki" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/engine, -/area/engine/mechanic_workshop/hanger) -"akj" = ( -/obj/machinery/camera{ - c_tag = "Hanger South"; - dir = 8 - }, -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; - icon_state = "space"; - layer = 4; - name = "EXTERNAL AIRLOCK"; - pixel_x = 32; - pixel_y = null - }, -/turf/simulated/floor/engine, -/area/engine/mechanic_workshop/hanger) "akw" = ( /obj/structure/table/reinforced, /obj/item/paper_bin, @@ -2076,32 +1387,8 @@ /turf/simulated/floor/mineral/titanium/blue, /area/shuttle/arrival/station) "akB" = ( -/turf/simulated/wall, -/area/engine/mechanic_workshop) -"akC" = ( -/obj/machinery/computer/podtracker, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/turf/simulated/floor/plasteel{ - icon_state = "dark" - }, -/area/engine/mechanic_workshop) -"akE" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/turf/simulated/floor/plasteel{ - icon_state = "dark" - }, -/area/engine/mechanic_workshop) -"akF" = ( -/obj/machinery/door/airlock/engineering/glass{ - name = "Mechanic Workshop"; - req_access_txt = "70" - }, -/turf/simulated/floor/engine, -/area/engine/mechanic_workshop) +/turf/simulated/wall/r_wall, +/area/maintenance/fore2) "akG" = ( /obj/machinery/atmospherics/unary/vent_pump/on, /turf/simulated/floor/plasteel{ @@ -2109,24 +1396,6 @@ icon_state = "arrival" }, /area/hallway/secondary/entry) -"akH" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/engine, -/area/engine/mechanic_workshop/hanger) -"akI" = ( -/obj/machinery/firealarm{ - dir = 4; - pixel_x = 28 - }, -/obj/machinery/light/small{ - dir = 4 - }, -/turf/simulated/floor/engine, -/area/engine/mechanic_workshop/hanger) "akU" = ( /obj/machinery/door/airlock/external{ id_tag = "specops_home"; @@ -2135,26 +1404,6 @@ /obj/effect/decal/warning_stripes/west, /turf/simulated/floor/plasteel, /area/hallway/secondary/entry) -"akV" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/engineering/glass{ - name = "Mechanic Workshop"; - req_access_txt = "70" - }, -/obj/effect/decal/warning_stripes/west, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plasteel, -/area/engine/mechanic_workshop) "akY" = ( /obj/machinery/status_display, /turf/simulated/wall/mineral/titanium, @@ -2169,109 +1418,10 @@ /obj/machinery/ai_status_display, /turf/simulated/wall/mineral/titanium, /area/shuttle/arrival/station) -"alc" = ( -/obj/machinery/door/firedoor, -/obj/structure/table/reinforced, -/obj/machinery/door/window/westright{ - name = "Mechanic's Desk"; - req_access = null; - req_access_txt = "70" - }, -/obj/machinery/cell_charger, -/turf/simulated/floor/plasteel{ - icon_state = "dark" - }, -/area/engine/mechanic_workshop) -"ald" = ( -/obj/structure/chair/office/light{ - dir = 8 - }, -/obj/effect/landmark/start{ - name = "Mechanic" - }, -/turf/simulated/floor/plasteel{ - icon_state = "dark" - }, -/area/engine/mechanic_workshop) -"ale" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2"; - tag = "" - }, -/turf/simulated/floor/plasteel{ - icon_state = "dark" - }, -/area/engine/mechanic_workshop) -"alf" = ( -/obj/structure/table/reinforced, -/obj/item/stack/sheet/plasteel, -/obj/item/stack/rods, -/obj/item/storage/box/lights/mixed, -/obj/machinery/alarm{ - dir = 1; - pixel_y = -24 - }, -/turf/simulated/floor/plasteel{ - icon_state = "dark" - }, -/area/engine/mechanic_workshop) -"alg" = ( -/obj/effect/spawner/window/reinforced, -/turf/simulated/floor/plating, -/area/engine/mechanic_workshop) -"alh" = ( -/obj/structure/table, -/obj/item/pod_parts/core, -/obj/item/circuitboard/mecha/pod, -/obj/item/clothing/glasses/welding{ - pixel_y = 12 - }, -/obj/item/gps, -/obj/effect/decal/warning_stripes/yellow/hollow, -/turf/simulated/floor/engine, -/area/engine/mechanic_workshop/hanger) -"ali" = ( -/obj/machinery/door_control{ - id = "mechpod"; - name = "Mechanic's Inner Door Control"; - pixel_y = -24; - req_access_txt = "70" - }, -/obj/structure/table, -/obj/item/stack/sheet/metal{ - amount = 50 - }, -/obj/item/stack/sheet/glass{ - amount = 50 - }, -/obj/item/stack/rods{ - amount = 50 - }, -/obj/item/stack/sheet/mineral/plasma{ - amount = 30 - }, -/obj/effect/decal/warning_stripes/yellow/hollow, -/turf/simulated/floor/engine, -/area/engine/mechanic_workshop/hanger) -"alj" = ( -/obj/structure/cable, -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, -/obj/machinery/computer/rdconsole/mechanics, -/turf/simulated/floor/engine, -/area/engine/mechanic_workshop/hanger) "alk" = ( /obj/effect/spawner/random_spawners/wall_rusted_maybe, /turf/simulated/wall, /area/maintenance/fore2) -"all" = ( -/obj/machinery/light/small, -/turf/simulated/floor/engine, -/area/engine/mechanic_workshop/hanger) "alm" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 1 @@ -2346,22 +1496,6 @@ /obj/effect/decal/warning_stripes/east, /turf/simulated/floor/plasteel, /area/hallway/secondary/entry) -"alz" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2"; - tag = "" - }, -/obj/machinery/door/airlock/maintenance{ - name = "Mechanic Workshop"; - req_access_txt = "70" - }, -/turf/simulated/floor/plasteel, -/area/maintenance/fore2) -"alA" = ( -/turf/simulated/wall/r_wall, -/area/engine/mechanic_workshop) "alE" = ( /obj/docking_port/stationary{ dwidth = 2; @@ -2405,15 +1539,15 @@ dir = 4 }, /obj/effect/decal/warning_stripes/east, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + tag = "" + }, /turf/simulated/floor/plasteel, /area/hallway/secondary/entry) "alM" = ( -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8"; - tag = "" - }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ dir = 5; @@ -2484,11 +1618,6 @@ /turf/space, /area/space/nearstation) "alX" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, /obj/effect/decal/cleanable/dirt, /obj/effect/decal/warning_stripes/yellow, /turf/simulated/floor/plasteel{ @@ -2511,6 +1640,11 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, /turf/simulated/floor/plating, /area/maintenance/fore2) "ama" = ( @@ -2523,6 +1657,11 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, /turf/simulated/floor/plating, /area/maintenance/fore2) "amb" = ( @@ -2532,15 +1671,14 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, /turf/simulated/floor/plating, /area/maintenance/fore2) "amc" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2"; - tag = "" - }, /obj/effect/decal/warning_stripes/yellow, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -2548,6 +1686,12 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8"; + tag = "" + }, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "neutral" @@ -2663,8 +1807,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, @@ -2722,8 +1865,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ @@ -2828,8 +1970,7 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /turf/simulated/floor/plasteel{ dir = 1; @@ -2967,8 +2108,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -3035,6 +2175,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/machinery/hologram/holopad, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralfull" @@ -3112,8 +2253,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /turf/simulated/floor/plating, /area/maintenance/fore2) @@ -3129,10 +2269,10 @@ "aoe" = ( /obj/structure/table, /obj/random/toolbox, +/obj/effect/decal/warning_stripes/yellow, /obj/machinery/newscaster{ pixel_x = 32 }, -/obj/effect/decal/warning_stripes/yellow, /turf/simulated/floor/plasteel, /area/hallway/secondary/entry) "aof" = ( @@ -3143,13 +2283,13 @@ /area/maintenance/fore2) "aog" = ( /obj/effect/decal/cleanable/cobweb2, -/obj/machinery/newscaster{ - pixel_x = 32 - }, /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 + pixel_y = 25 + }, +/obj/machinery/newscaster{ + pixel_x = 32 }, /turf/simulated/floor/plasteel{ icon_state = "red" @@ -3168,7 +2308,7 @@ /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 + pixel_y = 25 }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ @@ -3179,8 +2319,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/door/airlock/maintenance{ req_access_txt = "12" @@ -3197,8 +2336,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/effect/decal/warning_stripes/yellow, /turf/simulated/floor/plasteel{ @@ -3299,8 +2437,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/effect/decal/warning_stripes/yellow, /turf/simulated/floor/plasteel{ @@ -3427,9 +2564,7 @@ /obj/machinery/firealarm{ pixel_y = 32 }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/security/vacantoffice) "aoZ" = ( /obj/machinery/light_switch{ @@ -3438,9 +2573,7 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/security/vacantoffice) "apa" = ( /obj/structure/table/wood, @@ -3482,8 +2615,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/photocopier, /obj/machinery/atmospherics/unary/vent_pump/on, @@ -3544,8 +2676,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/table/reinforced, /obj/item/crowbar, @@ -3571,8 +2702,7 @@ /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ @@ -3584,8 +2714,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/effect/decal/cleanable/dirt, /obj/machinery/light/small{ @@ -3600,8 +2729,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, @@ -3753,9 +2881,7 @@ "apQ" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/security/vacantoffice) "apR" = ( /obj/structure/table/wood, @@ -3790,8 +2916,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /turf/simulated/floor/plating, /area/maintenance/fore) @@ -3919,16 +3044,13 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, -/obj/machinery/hologram/holopad, /obj/effect/decal/warning_stripes/yellow/hollow, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 5 @@ -3936,6 +3058,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 6 }, +/obj/machinery/hologram/holopad, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralfull" @@ -3984,8 +3107,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/effect/decal/cleanable/dirt, /obj/item/cigbutt/roach, @@ -4026,7 +3148,10 @@ /turf/simulated/wall, /area/maintenance/fore2) "aqq" = ( -/turf/simulated/wall/r_wall/rust, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "red" + }, /area/security/permabrig) "aqu" = ( /obj/machinery/door/firedoor, @@ -4072,23 +3197,17 @@ /obj/machinery/status_display{ pixel_y = 32 }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/maintenance/electrical_shop) "aqz" = ( /obj/item/twohanded/required/kirbyplants, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/maintenance/electrical_shop) "aqA" = ( /obj/structure/table/wood, /obj/item/paper_bin, /obj/item/pen, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/maintenance/electrical_shop) "aqB" = ( /obj/structure/table/wood, @@ -4109,9 +3228,7 @@ pixel_x = 4; pixel_y = 3 }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/maintenance/electrical_shop) "aqD" = ( /obj/item/twohanded/required/kirbyplants, @@ -4121,17 +3238,13 @@ /obj/machinery/status_display{ pixel_y = 32 }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/maintenance/electrical_shop) "aqE" = ( /obj/structure/table/wood, /obj/item/clipboard, /obj/item/apc_electronics, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/maintenance/electrical_shop) "aqF" = ( /turf/simulated/floor/plasteel{ @@ -4190,9 +3303,7 @@ /area/security/vacantoffice) "aqN" = ( /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/security/vacantoffice) "aqO" = ( /obj/structure/table/wood, @@ -4219,7 +3330,9 @@ /obj/machinery/ai_status_display{ pixel_x = -32 }, -/obj/machinery/computer/crew, +/obj/machinery/computer/crew{ + dir = 4 + }, /turf/simulated/floor/plasteel{ dir = 10; icon_state = "blue" @@ -4229,8 +3342,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -4301,12 +3413,11 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/hologram/holopad, /obj/effect/decal/warning_stripes/yellow/hollow, +/obj/machinery/hologram/holopad, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralfull" @@ -4320,7 +3431,9 @@ /obj/machinery/status_display{ pixel_x = 32 }, -/obj/machinery/computer/prisoner, +/obj/machinery/computer/prisoner{ + dir = 8 + }, /turf/simulated/floor/plasteel{ dir = 6; icon_state = "red" @@ -4338,7 +3451,9 @@ /area/maintenance/fore2) "arf" = ( /obj/effect/decal/cleanable/cobweb, -/obj/machinery/computer/arcade, +/obj/machinery/computer/arcade{ + dir = 4 + }, /turf/simulated/floor/plating, /area/maintenance/fore2) "arg" = ( @@ -4411,9 +3526,7 @@ }, /area/maintenance/electrical_shop) "ars" = ( -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/maintenance/electrical_shop) "art" = ( /obj/structure/chair/comfy/brown{ @@ -4441,9 +3554,7 @@ /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 4 }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/maintenance/electrical_shop) "arv" = ( /obj/structure/chair/comfy/brown{ @@ -4459,9 +3570,7 @@ /area/maintenance/electrical_shop) "arw" = ( /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/maintenance/electrical_shop) "arx" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -4474,9 +3583,7 @@ "ary" = ( /obj/structure/computerframe, /obj/item/stack/cable_coil/random, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/maintenance/electrical_shop) "arz" = ( /obj/machinery/atmospherics/unary/portables_connector{ @@ -4510,20 +3617,17 @@ /turf/simulated/floor/carpet, /area/security/vacantoffice) "arD" = ( -/obj/machinery/hologram/holopad, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/obj/machinery/hologram/holopad, +/turf/simulated/floor/wood, /area/security/vacantoffice) "arE" = ( /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 5 @@ -4531,48 +3635,38 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 9 }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/security/vacantoffice) "arF" = ( /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 8 }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/security/vacantoffice) "arG" = ( /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" - }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" + icon_state = "4-8" }, +/turf/simulated/floor/wood, /area/security/vacantoffice) "arH" = ( /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/effect/decal/warning_stripes/yellow, /turf/simulated/floor/plasteel{ @@ -4602,7 +3696,9 @@ /obj/item/radio/intercom{ pixel_x = -28 }, -/obj/machinery/computer/card, +/obj/machinery/computer/card{ + dir = 4 + }, /turf/simulated/floor/plasteel{ icon_state = "bluefull" }, @@ -4611,8 +3707,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/cable{ d1 = 1; @@ -4632,8 +3727,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/table/reinforced, /obj/item/folder/blue, @@ -4647,14 +3741,12 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /obj/machinery/atmospherics/unary/vent_scrubber/on, /turf/simulated/floor/plasteel{ @@ -4678,13 +3770,13 @@ }, /area/hallway/secondary/entry) "arP" = ( -/obj/machinery/hologram/holopad, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/machinery/hologram/holopad, /turf/simulated/floor/carpet, /area/hallway/secondary/entry) "arQ" = ( @@ -4696,8 +3788,7 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/machinery/door/firedoor, /obj/machinery/door/window/brigdoor/southright{ @@ -4711,8 +3802,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/table/reinforced, /obj/item/folder/red, @@ -4738,8 +3828,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/cable{ d1 = 1; @@ -4768,7 +3857,9 @@ dir = 1; pixel_x = 28 }, -/obj/machinery/computer/security, +/obj/machinery/computer/security{ + dir = 8 + }, /turf/simulated/floor/plasteel{ icon_state = "redfull" }, @@ -4777,8 +3868,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/effect/landmark{ name = "blobstart" @@ -4801,8 +3891,8 @@ }, /area/maintenance/fore2) "arX" = ( -/obj/machinery/computer/arcade, /obj/effect/decal/cleanable/dirt, +/obj/machinery/computer/arcade, /turf/simulated/floor/plasteel{ dir = 5; icon_state = "dark" @@ -4826,8 +3916,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/chair/stool, /turf/simulated/floor/plasteel{ @@ -4908,15 +3997,11 @@ /obj/item/clipboard, /obj/item/airalarm_electronics, /obj/item/airlock_electronics, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/maintenance/electrical_shop) "asm" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/maintenance/electrical_shop) "asn" = ( /obj/effect/spawner/window/reinforced, @@ -4926,9 +4011,7 @@ "aso" = ( /obj/structure/computerframe, /obj/item/circuitboard/secure_data, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/maintenance/electrical_shop) "asp" = ( /obj/machinery/light/small{ @@ -4951,32 +4034,24 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" - }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" + icon_state = "1-2" }, +/turf/simulated/floor/wood, /area/security/vacantoffice) "ast" = ( -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/security/vacantoffice) "asu" = ( /obj/structure/table/wood, /obj/item/camera_film, /obj/item/camera_film, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/security/vacantoffice) "asv" = ( /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ @@ -4988,7 +4063,9 @@ /obj/machinery/status_display{ pixel_x = -32 }, -/obj/machinery/computer/med_data, +/obj/machinery/computer/med_data{ + dir = 4 + }, /turf/simulated/floor/plasteel{ dir = 9; icon_state = "blue" @@ -4998,8 +4075,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel{ @@ -5040,8 +4116,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plasteel{ @@ -5085,7 +4160,9 @@ /obj/machinery/ai_status_display{ pixel_x = 32 }, -/obj/machinery/computer/secure_data, +/obj/machinery/computer/secure_data{ + dir = 8 + }, /turf/simulated/floor/plasteel{ dir = 5; icon_state = "red" @@ -5114,8 +4191,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /turf/simulated/floor/plasteel{ dir = 5; @@ -5228,8 +4304,7 @@ /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /obj/structure/cable{ d1 = 1; @@ -5297,7 +4372,7 @@ /area/engine/controlroom) "ate" = ( /obj/structure/table/wood, -/obj/item/circuitboard/arcade, +/obj/item/circuitboard/arcade/battle, /turf/simulated/floor/plasteel{ dir = 5; icon_state = "dark" @@ -5314,9 +4389,7 @@ /area/maintenance/electrical_shop) "atg" = ( /obj/structure/chair/stool, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/maintenance/electrical_shop) "ath" = ( /obj/effect/decal/cleanable/dirt, @@ -5329,22 +4402,18 @@ /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /obj/structure/chair/comfy/brown{ dir = 4 }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/maintenance/electrical_shop) "atj" = ( /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/table/wood, /obj/item/folder/red, @@ -5352,16 +4421,13 @@ /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/maintenance/electrical_shop) "atk" = ( /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/chair/comfy/brown{ dir = 8 @@ -5370,27 +4436,21 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 10 }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/maintenance/electrical_shop) "atl" = ( /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" - }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" + icon_state = "4-8" }, +/turf/simulated/floor/wood, /area/maintenance/electrical_shop) "atm" = ( /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /turf/simulated/floor/wood{ broken = 1; @@ -5402,9 +4462,7 @@ /obj/machinery/status_display{ pixel_x = 32 }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/maintenance/electrical_shop) "ato" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -5460,9 +4518,7 @@ /area/security/vacantoffice) "atu" = ( /obj/item/twohanded/required/kirbyplants, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/security/vacantoffice) "atv" = ( /obj/structure/cable, @@ -5470,31 +4526,24 @@ name = "south bump"; pixel_y = -24 }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/security/vacantoffice) "atw" = ( /obj/structure/table/wood, /obj/item/camera, /obj/machinery/light/small, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/security/vacantoffice) "atx" = ( /obj/structure/table/wood, /obj/item/flashlight/lamp, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/security/vacantoffice) "aty" = ( /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, @@ -5515,8 +4564,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 1 @@ -5580,10 +4628,10 @@ }, /area/hallway/secondary/entry) "atG" = ( +/obj/structure/closet/wardrobe/red, /obj/machinery/newscaster/security_unit{ pixel_x = -30 }, -/obj/structure/closet/wardrobe/red, /turf/simulated/floor/plasteel{ dir = 10; icon_state = "red" @@ -5593,8 +4641,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 1 @@ -5647,8 +4694,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ @@ -5660,8 +4706,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -5675,8 +4720,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 6 @@ -5865,10 +4909,10 @@ /area/maintenance/electrical_shop) "aui" = ( /obj/machinery/light/small, +/obj/effect/decal/cleanable/dirt, /obj/machinery/newscaster{ pixel_y = -32 }, -/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ dir = 5; icon_state = "dark" @@ -5898,16 +4942,13 @@ pixel_y = -28 }, /obj/structure/chair/stool, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/maintenance/electrical_shop) "aul" = ( /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/wood{ @@ -5917,16 +4958,12 @@ /area/maintenance/electrical_shop) "aum" = ( /obj/machinery/light/small, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/maintenance/electrical_shop) "aun" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/maintenance/electrical_shop) "auo" = ( /obj/structure/cable, @@ -5935,20 +4972,16 @@ name = "south bump"; pixel_y = -24 }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/maintenance/electrical_shop) "aup" = ( /obj/structure/table/wood, +/obj/item/folder/red, +/obj/item/lighter/zippo, /obj/machinery/newscaster{ pixel_x = 32 }, -/obj/item/folder/red, -/obj/item/lighter/zippo, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/maintenance/electrical_shop) "auq" = ( /obj/machinery/door/airlock/maintenance, @@ -5959,8 +4992,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ @@ -5982,8 +5014,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/door/airlock/maintenance{ name = "Security Maintenance"; @@ -5999,8 +5030,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /turf/simulated/floor/plasteel{ dir = 4; @@ -6131,13 +5161,10 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/door/airlock/maintenance, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/maintenance/electrical_shop) "auN" = ( /obj/machinery/door/airlock/maintenance, @@ -6180,8 +5207,7 @@ /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, @@ -6190,8 +5216,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ @@ -6203,8 +5228,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /turf/simulated/floor/plasteel{ dir = 1; @@ -6215,8 +5239,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/light/small{ dir = 1 @@ -6227,8 +5250,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/cable{ d1 = 1; @@ -6245,8 +5267,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/effect/decal/cleanable/dirt, /obj/structure/sign/poster/official/obey{ @@ -6296,14 +5317,12 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /obj/effect/decal/warning_stripes/yellow, /turf/simulated/floor/plasteel{ @@ -6315,8 +5334,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/door/airlock/maintenance{ req_access_txt = "12" @@ -6328,8 +5346,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/door/airlock/maintenance{ name = "Checkpoint Maintenance"; @@ -6362,8 +5379,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, @@ -6384,8 +5400,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, @@ -6395,7 +5410,9 @@ /turf/simulated/floor/plating, /area/maintenance/fore2) "avn" = ( -/obj/machinery/computer/arcade, +/obj/machinery/computer/arcade{ + dir = 1 + }, /turf/simulated/floor/plating, /area/maintenance/fore2) "avo" = ( @@ -6491,20 +5508,17 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /obj/effect/decal/warning_stripes/north, /turf/simulated/floor/plasteel, @@ -6568,8 +5582,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/effect/decal/cleanable/dirt, /obj/machinery/light/small{ @@ -6584,8 +5597,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/cable{ d1 = 1; @@ -6598,8 +5610,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 5 @@ -6613,8 +5624,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 1 @@ -6628,8 +5638,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -6647,8 +5656,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -6663,8 +5671,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -6678,14 +5685,12 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 1 @@ -6819,8 +5824,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -6840,8 +5844,7 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, /obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, @@ -6884,16 +5887,16 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/navbeacon{ - codes_txt = "patrol;next_patrol=hall1"; - location = "hall15" - }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 10 }, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 1 }, +/obj/machinery/navbeacon{ + codes_txt = "patrol;next_patrol=hall1"; + location = "hall15" + }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralfull" @@ -6949,14 +5952,12 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ @@ -6968,8 +5969,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ @@ -6981,14 +5981,12 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /turf/simulated/floor/plasteel{ dir = 8; @@ -7108,8 +6106,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/effect/decal/warning_stripes/east, /turf/simulated/floor/plasteel{ @@ -7143,8 +6140,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /turf/simulated/floor/plasteel{ icon_state = "yellowfull" @@ -7158,8 +6154,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /turf/simulated/floor/plasteel{ dir = 4; @@ -7178,8 +6173,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /turf/simulated/floor/plasteel{ dir = 8; @@ -7190,8 +6184,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/effect/decal/warning_stripes/west, /turf/simulated/floor/plasteel{ @@ -7203,8 +6196,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /turf/simulated/floor/plasteel{ dir = 8; @@ -7215,8 +6207,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 6 @@ -7229,8 +6220,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 8 @@ -7244,8 +6234,7 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/structure/table/reinforced, /obj/machinery/alarm{ @@ -7278,6 +6267,11 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, /turf/simulated/floor/plasteel, /area/maintenance/fore2) "awZ" = ( @@ -7291,8 +6285,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/effect/decal/cleanable/dirt, /obj/machinery/light/small{ @@ -7328,8 +6321,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -7363,8 +6355,7 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/effect/decal/warning_stripes/yellow, /turf/simulated/floor/plasteel{ @@ -7402,8 +6393,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, @@ -7443,8 +6433,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ @@ -7458,8 +6447,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/effect/decal/warning_stripes/yellow/hollow, /turf/simulated/floor/plasteel{ @@ -7473,8 +6461,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, @@ -7488,8 +6475,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/effect/decal/cleanable/dirt, /obj/effect/decal/warning_stripes/yellow, @@ -7508,8 +6494,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -7528,8 +6513,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/effect/decal/cleanable/dirt, /obj/machinery/door/airlock/maintenance{ @@ -7552,8 +6536,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -7824,8 +6807,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/item/twohanded/required/kirbyplants, /obj/structure/sign/nosmoking_2{ @@ -7877,14 +6859,12 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/cable{ d1 = 1; d2 = 4; - icon_state = "1-4"; - tag = "" + icon_state = "1-4" }, /turf/simulated/floor/greengrid, /area/engine/controlroom) @@ -7898,16 +6878,13 @@ /obj/structure/table/wood, /obj/item/camera_film, /obj/effect/decal/cleanable/cobweb2, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/maintenance/fore) "ayi" = ( /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -7992,6 +6969,9 @@ /obj/machinery/newscaster{ pixel_y = 32 }, +/obj/structure/sign/nosmoking_2{ + pixel_x = 32 + }, /turf/simulated/floor/plasteel, /area/janitor) "ayp" = ( @@ -8056,8 +7036,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/door/airlock/maintenance{ req_access_txt = "12" @@ -8098,8 +7077,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/door/airlock/maintenance{ name = "Cargo Bay Warehouse Maintenance"; @@ -8185,8 +7163,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/visible{ dir = 6 @@ -8223,11 +7200,10 @@ /turf/simulated/floor/plating, /area/engine/controlroom) "ayV" = ( -/obj/structure/cable{ +/obj/structure/cable/yellow{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /obj/effect/decal/warning_stripes/east, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -8276,14 +7252,10 @@ /area/maintenance/fore) "azd" = ( /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/maintenance/fore) "aze" = ( -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/maintenance/fore) "azf" = ( /obj/structure/disposalpipe/segment{ @@ -8303,8 +7275,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -8339,8 +7310,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, @@ -8365,10 +7335,11 @@ /area/janitor) "azm" = ( /obj/structure/reagent_dispensers/watertank, -/obj/structure/sign/nosmoking_2{ - pixel_x = 32 - }, /obj/effect/decal/warning_stripes/yellow/hollow, +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 28 + }, /turf/simulated/floor/plasteel, /area/janitor) "azn" = ( @@ -8385,8 +7356,7 @@ }, /obj/structure/sink{ dir = 8; - pixel_x = -12; - pixel_y = 2 + pixel_x = -12 }, /obj/effect/decal/cleanable/dirt, /obj/effect/decal/warning_stripes/yellow/hollow, @@ -8438,8 +7408,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 9 @@ -8493,8 +7462,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, @@ -8536,6 +7504,13 @@ /area/quartermaster/sorting) "azF" = ( /obj/effect/decal/cleanable/cobweb2, +/obj/machinery/door_control{ + id = "qm_warehouse"; + name = "Warehouse Door Control"; + pixel_x = 24; + pixel_y = -3; + req_access_txt = "31" + }, /turf/simulated/floor/plating, /area/quartermaster/sorting) "azG" = ( @@ -8543,6 +7518,13 @@ /obj/item/stack/packageWrap, /obj/item/hand_labeler, /obj/effect/decal/warning_stripes/yellow/hollow, +/obj/machinery/door_control{ + id = "qm_warehouse"; + name = "Warehouse Door Control"; + pixel_x = -24; + pixel_y = -3; + req_access_txt = "31" + }, /turf/simulated/floor/plasteel{ dir = 9; icon_state = "brown" @@ -8662,11 +7644,10 @@ /turf/simulated/floor/plating, /area/maintenance/disposal) "azT" = ( -/obj/structure/cable{ +/obj/structure/cable/yellow{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/door/poddoor/shutters/radiation/preopen{ id_tag = "engsm" @@ -8684,11 +7665,10 @@ }, /area/engine/controlroom) "azV" = ( -/obj/structure/cable{ +/obj/structure/cable/yellow{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/effect/decal/warning_stripes/west, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -8709,7 +7689,7 @@ dir = 4 }, /obj/machinery/power/rad_collector, -/obj/structure/cable{ +/obj/structure/cable/yellow{ d2 = 8; icon_state = "0-8" }, @@ -8738,14 +7718,14 @@ dir = 8 }, /obj/machinery/power/rad_collector, -/obj/structure/cable{ +/obj/structure/cable/yellow{ d2 = 4; icon_state = "0-4" }, /turf/simulated/floor/engine, /area/engine/supermatter) "aAd" = ( -/obj/structure/cable{ +/obj/structure/cable/yellow{ d1 = 4; d2 = 8; icon_state = "4-8" @@ -8789,8 +7769,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /turf/simulated/floor/plasteel{ dir = 8; @@ -8835,9 +7814,7 @@ "aAo" = ( /obj/structure/table/wood, /obj/item/camera, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/maintenance/fore) "aAp" = ( /obj/structure/chair/comfy/brown{ @@ -8884,14 +7861,13 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, -/obj/machinery/hologram/holopad, /obj/effect/decal/warning_stripes/yellow/hollow, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/machinery/hologram/holopad, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -8917,11 +7893,15 @@ }, /area/janitor) "aAx" = ( -/obj/item/reagent_containers/glass/bucket, -/obj/structure/janitorialcart, -/obj/machinery/firealarm{ - dir = 4; - pixel_x = 28 +/obj/structure/window/reinforced{ + dir = 1; + layer = 2.9 + }, +/obj/structure/window/reinforced, +/obj/effect/decal/warning_stripes/yellow, +/obj/machinery/door/window/westleft{ + name = "Janitoral Delivery"; + req_access_txt = "26" }, /turf/simulated/floor/plating, /area/janitor) @@ -8989,8 +7969,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -9009,8 +7988,7 @@ /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -9026,8 +8004,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /turf/simulated/floor/plasteel{ dir = 4; @@ -9038,8 +8015,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/door/airlock{ name = "Auxillary Restrooms" @@ -9056,8 +8032,7 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, @@ -9075,8 +8050,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 4 @@ -9156,6 +8130,10 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/machinery/door/poddoor/shutters{ + id_tag = "qm_warehouse"; + name = "Warehouse Shutters" + }, /turf/simulated/floor/plasteel, /area/quartermaster/sorting) "aAT" = ( @@ -9217,8 +8195,8 @@ /turf/simulated/floor/plasteel, /area/quartermaster/storage) "aBa" = ( -/obj/machinery/conveyor/north{ - id = "QMLoad2" +/obj/machinery/conveyor/south{ + id = "QMLoad" }, /turf/simulated/floor/plating, /area/quartermaster/storage) @@ -9232,11 +8210,10 @@ /turf/simulated/floor/plating, /area/maintenance/fore) "aBf" = ( -/obj/structure/cable{ +/obj/structure/cable/yellow{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/effect/decal/warning_stripes/west, /obj/machinery/door/poddoor/shutters/radiation/preopen{ @@ -9264,7 +8241,7 @@ dir = 4 }, /obj/machinery/power/rad_collector, -/obj/structure/cable{ +/obj/structure/cable/yellow{ d2 = 8; icon_state = "0-8" }, @@ -9273,7 +8250,9 @@ "aBj" = ( /obj/machinery/door/firedoor, /obj/effect/decal/warning_stripes/yellow, -/obj/machinery/door/airlock/public/glass, +/obj/machinery/door/airlock/public/glass{ + name = "Public Access" + }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel{ @@ -9290,7 +8269,7 @@ dir = 8 }, /obj/machinery/power/rad_collector, -/obj/structure/cable{ +/obj/structure/cable/yellow{ d2 = 4; icon_state = "0-4" }, @@ -9300,8 +8279,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/camera{ c_tag = "Supermatter East"; @@ -9396,9 +8374,7 @@ /obj/structure/table/wood, /obj/item/storage/fancy/crayons, /obj/machinery/light/small, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/maintenance/fore) "aBu" = ( /obj/structure/mirror{ @@ -9407,8 +8383,7 @@ }, /obj/structure/sink{ dir = 8; - pixel_x = -12; - pixel_y = 2 + pixel_x = -12 }, /obj/effect/decal/cleanable/dirt, /obj/effect/decal/warning_stripes/yellow/hollow, @@ -9418,8 +8393,7 @@ /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -9438,10 +8412,12 @@ }, /obj/structure/sink{ dir = 8; - pixel_x = -12; - pixel_y = 2 + pixel_x = -12 }, /obj/effect/decal/warning_stripes/yellow/hollow, +/obj/structure/reagent_dispensers/spacecleanertank{ + pixel_x = -32 + }, /turf/simulated/floor/plasteel, /area/janitor) "aBx" = ( @@ -9453,6 +8429,8 @@ /obj/machinery/light_switch{ pixel_y = -26 }, +/obj/item/reagent_containers/glass/bucket, +/obj/structure/janitorialcart, /turf/simulated/floor/plasteel{ icon_state = "whitegreen" }, @@ -9492,8 +8470,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -9509,8 +8486,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -9519,7 +8495,14 @@ /area/maintenance/fore) "aBE" = ( /obj/structure/disposalpipe/segment, -/obj/structure/table/reinforced, +/obj/machinery/door/window{ + dir = 2; + name = "Bar Door"; + req_access_txt = "25" + }, +/obj/structure/window/reinforced{ + dir = 8 + }, /turf/simulated/floor/plasteel{ dir = 5; icon_state = "dark" @@ -9530,8 +8513,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, @@ -9577,8 +8559,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -9595,6 +8576,10 @@ name = "Cargo Bay"; req_access_txt = "31" }, +/obj/machinery/door/poddoor/shutters{ + id_tag = "qm_warehouse"; + name = "Warehouse Shutters" + }, /turf/simulated/floor/plasteel, /area/quartermaster/sorting) "aBP" = ( @@ -9629,7 +8614,9 @@ "aBU" = ( /obj/machinery/door/firedoor, /obj/effect/decal/warning_stripes/yellow, -/obj/machinery/door/airlock/public/glass, +/obj/machinery/door/airlock/public/glass{ + name = "Public Access" + }, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "neutralcorner" @@ -9646,8 +8633,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/item/twohanded/required/kirbyplants, /obj/effect/decal/warning_stripes/yellow/hollow, @@ -9674,8 +8660,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -9693,8 +8678,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -9711,8 +8695,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/visible/yellow{ dir = 4 @@ -9731,7 +8714,7 @@ dir = 4 }, /obj/machinery/power/rad_collector, -/obj/structure/cable{ +/obj/structure/cable/yellow{ d2 = 8; icon_state = "0-8" }, @@ -9743,7 +8726,7 @@ dir = 8 }, /obj/machinery/power/rad_collector, -/obj/structure/cable{ +/obj/structure/cable/yellow{ d2 = 4; icon_state = "0-4" }, @@ -9802,8 +8785,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/door/airlock{ name = "Custodial Closet"; @@ -9847,13 +8829,13 @@ /area/maintenance/fore) "aCu" = ( /obj/machinery/light/small, -/obj/machinery/newscaster{ - pixel_x = -32 - }, /obj/structure/toilet{ dir = 8 }, /obj/effect/decal/cleanable/vomit, +/obj/machinery/newscaster{ + pixel_x = -32 + }, /turf/simulated/floor/plating, /area/crew_quarters/toilet) "aCv" = ( @@ -9863,8 +8845,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/door/airlock/maintenance{ req_access_txt = "12" @@ -9887,8 +8868,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /turf/simulated/floor/plating, /area/quartermaster/sorting) @@ -9896,8 +8876,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/effect/landmark{ name = "blobstart" @@ -9908,8 +8887,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /turf/simulated/floor/plasteel{ dir = 8; @@ -9962,12 +8940,12 @@ /turf/simulated/floor/plasteel, /area/quartermaster/sorting) "aCJ" = ( +/obj/effect/decal/warning_stripes/yellow, /obj/machinery/navbeacon{ codes_txt = "delivery;dir=4"; dir = 4; location = "QM #1" }, -/obj/effect/decal/warning_stripes/yellow, /turf/simulated/floor/plasteel, /area/quartermaster/storage) "aCK" = ( @@ -9996,7 +8974,7 @@ /area/quartermaster/storage) "aCO" = ( /obj/machinery/conveyor_switch/oneway{ - id = "QMLoad2" + id = "QMLoad" }, /turf/simulated/floor/plasteel{ dir = 4; @@ -10025,17 +9003,15 @@ }, /area/maintenance/fore) "aCS" = ( -/obj/structure/cable{ +/obj/structure/cable/yellow{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, -/obj/structure/cable{ +/obj/structure/cable/yellow{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/effect/decal/warning_stripes/east, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -10048,17 +9024,15 @@ /turf/simulated/floor/plating, /area/maintenance/fore) "aCU" = ( -/obj/structure/cable{ +/obj/structure/cable/yellow{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, -/obj/structure/cable{ +/obj/structure/cable/yellow{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/effect/decal/warning_stripes/west, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -10146,11 +9120,10 @@ /turf/simulated/floor/plating, /area/engine/controlroom) "aDh" = ( -/obj/structure/cable{ +/obj/structure/cable/yellow{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/visible{ dir = 10 @@ -10244,8 +9217,7 @@ /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /turf/simulated/floor/plating, /area/maintenance/fore) @@ -10253,8 +9225,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /turf/simulated/floor/plating, /area/maintenance/fore) @@ -10262,8 +9233,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /turf/simulated/floor/plasteel{ icon_state = "neutral" @@ -10273,8 +9243,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/cable{ d1 = 1; @@ -10294,8 +9263,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -10309,8 +9277,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 1 @@ -10327,8 +9294,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/effect/decal/warning_stripes/yellow/hollow, /turf/simulated/floor/plasteel, @@ -10357,8 +9323,7 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/structure/cable{ d1 = 1; @@ -10424,8 +9389,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /turf/simulated/floor/plasteel{ dir = 8; @@ -10439,8 +9403,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/door/airlock/maintenance{ name = "Cargo Bay Warehouse Maintenance"; @@ -10455,14 +9418,12 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /obj/effect/decal/cleanable/dirt, /obj/effect/decal/warning_stripes/yellow, @@ -10484,8 +9445,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/effect/decal/cleanable/dirt, /obj/effect/decal/warning_stripes/yellow, @@ -10498,8 +9458,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/effect/decal/cleanable/dirt, /obj/effect/decal/warning_stripes/yellow/hollow, @@ -10512,25 +9471,24 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/effect/decal/cleanable/dirt, /obj/effect/decal/warning_stripes/yellow, /turf/simulated/floor/plasteel, /area/quartermaster/sorting) "aDS" = ( -/obj/structure/plasticflaps, /obj/effect/decal/warning_stripes/yellow, +/obj/structure/plasticflaps, /turf/simulated/floor/plasteel, /area/quartermaster/sorting) "aDT" = ( +/obj/effect/decal/warning_stripes/yellow, /obj/machinery/navbeacon{ codes_txt = "delivery;dir=4"; dir = 4; location = "QM #2" }, -/obj/effect/decal/warning_stripes/yellow, /mob/living/simple_animal/bot/mulebot{ home_destination = "QM #2"; suffix = "#2" @@ -10554,8 +9512,8 @@ }, /area/quartermaster/storage) "aDY" = ( -/obj/machinery/conveyor/northwest{ - id = "QMLoad2" +/obj/machinery/conveyor/southeast/ccw{ + id = "QMLoad" }, /turf/simulated/floor/plating, /area/quartermaster/storage) @@ -10602,11 +9560,10 @@ }, /area/engine/controlroom) "aEe" = ( -/obj/structure/cable{ +/obj/structure/cable/yellow{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/light{ dir = 8 @@ -10638,6 +9595,10 @@ pixel_x = -24; shock_proof = 1 }, +/obj/structure/cable/yellow{ + d2 = 4; + icon_state = "0-4" + }, /turf/simulated/floor/engine, /area/engine/supermatter) "aEi" = ( @@ -10657,7 +9618,7 @@ /turf/simulated/floor/plasteel, /area/engine/controlroom) "aEk" = ( -/obj/structure/cable{ +/obj/structure/cable/yellow{ d1 = 4; d2 = 8; icon_state = "4-8" @@ -10684,7 +9645,7 @@ }, /area/engine/controlroom) "aEn" = ( -/obj/structure/cable{ +/obj/structure/cable/yellow{ d1 = 1; d2 = 4; icon_state = "1-4" @@ -10700,8 +9661,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/unary/portables_connector{ dir = 8 @@ -10722,7 +9682,7 @@ /turf/simulated/floor/plasteel, /area/hydroponics/abandoned_garden) "aEs" = ( -/obj/structure/cable{ +/obj/structure/cable/yellow{ d1 = 4; d2 = 8; icon_state = "4-8" @@ -10743,8 +9703,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/effect/decal/cleanable/dirt, /obj/structure/disposalpipe/segment, @@ -10769,8 +9728,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/effect/decal/cleanable/dirt, /obj/machinery/light/small, @@ -10782,8 +9740,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ @@ -10794,8 +9751,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, @@ -10804,8 +9760,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/light/small{ dir = 1 @@ -10832,8 +9787,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /turf/simulated/floor/plasteel{ dir = 1; @@ -10863,8 +9817,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/closet/crate, /obj/effect/decal/warning_stripes/yellow/hollow, @@ -10878,8 +9831,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ @@ -10892,8 +9844,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/cable{ d1 = 1; @@ -10915,8 +9866,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/unary/vent_pump/on{ @@ -10931,8 +9881,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/door/firedoor, /obj/machinery/door/airlock/mining/glass{ @@ -10970,14 +9919,9 @@ /area/quartermaster/office) "aEO" = ( /obj/machinery/light/small, -/obj/machinery/newscaster{ - pixel_x = -32 - }, -/obj/structure/toilet{ - dir = 8 - }, /obj/effect/decal/cleanable/dirt, /obj/effect/decal/warning_stripes/yellow/hollow, +/obj/machinery/recharge_station, /turf/simulated/floor/plasteel, /area/crew_quarters/toilet) "aEP" = ( @@ -11007,8 +9951,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -11106,30 +10049,28 @@ /turf/simulated/floor/plasteel, /area/engine/controlroom) "aFe" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - tag = "" - }, /obj/machinery/atmospherics/pipe/simple/visible{ dir = 4 }, /obj/effect/decal/warning_stripes/north, +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, /turf/simulated/floor/plasteel, /area/engine/controlroom) "aFf" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - tag = "" - }, /obj/machinery/atmospherics/trinary/filter{ dir = 8; filter_type = "n2" }, /obj/effect/decal/warning_stripes/north, +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, /turf/simulated/floor/plasteel, /area/engine/controlroom) "aFg" = ( @@ -11141,14 +10082,13 @@ /turf/simulated/wall/r_wall, /area/engine/supermatter) "aFi" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - tag = "" - }, /obj/machinery/atmospherics/pipe/manifold/visible, /obj/effect/decal/warning_stripes/north, +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, /turf/simulated/floor/plasteel, /area/engine/controlroom) "aFj" = ( @@ -11164,8 +10104,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/unary/portables_connector{ dir = 8 @@ -11174,11 +10113,10 @@ /turf/simulated/floor/plasteel, /area/engine/controlroom) "aFl" = ( -/obj/structure/cable{ +/obj/structure/cable/yellow{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/visible{ dir = 9 @@ -11218,20 +10156,19 @@ /obj/machinery/light{ dir = 8 }, +/obj/effect/decal/warning_stripes/yellow, /obj/machinery/navbeacon{ codes_txt = "delivery;dir=4"; dir = 4; location = "QM #3" }, -/obj/effect/decal/warning_stripes/yellow, /turf/simulated/floor/plasteel, /area/quartermaster/storage) "aFq" = ( /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ @@ -11293,8 +10230,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -11352,8 +10288,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ @@ -11374,8 +10309,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel, @@ -11425,7 +10359,8 @@ name = "Cargo Docking Hatch"; req_access_txt = "31" }, -/turf/simulated/floor/plasteel, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plating, /area/quartermaster/storage) "aFO" = ( /obj/effect/decal/cleanable/dirt, @@ -11441,9 +10376,6 @@ /area/hydroponics/abandoned_garden) "aFQ" = ( /obj/machinery/light/small, -/obj/machinery/newscaster{ - pixel_x = -32 - }, /obj/structure/toilet{ dir = 8 }, @@ -11452,6 +10384,9 @@ name = "Civilian" }, /obj/effect/decal/warning_stripes/yellow/hollow, +/obj/machinery/newscaster{ + pixel_x = -32 + }, /turf/simulated/floor/plasteel, /area/crew_quarters/toilet) "aFR" = ( @@ -11463,11 +10398,10 @@ /turf/simulated/wall, /area/quartermaster/storage) "aFV" = ( -/obj/structure/cable{ +/obj/structure/cable/yellow{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/effect/decal/warning_stripes/west, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -11481,27 +10415,25 @@ }, /area/engine/controlroom) "aFX" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - tag = "" - }, /obj/machinery/atmospherics/binary/pump{ dir = 8; name = "Gas to Filter"; on = 1 }, /obj/effect/decal/warning_stripes/north, +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, /turf/simulated/floor/plasteel, /area/engine/controlroom) "aFY" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - tag = "" - }, /obj/machinery/atmospherics/pipe/manifold/visible, /obj/machinery/camera{ c_tag = "Supermatter South"; @@ -11512,50 +10444,52 @@ icon_state = "0-4" }, /obj/effect/decal/warning_stripes/north, +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, /turf/simulated/floor/plasteel, /area/engine/supermatter) "aFZ" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - tag = "" - }, /obj/machinery/atmospherics/pipe/simple/visible{ dir = 4 }, /obj/effect/decal/warning_stripes/north, +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, /turf/simulated/floor/plasteel, /area/engine/supermatter) "aGa" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - tag = "" - }, /obj/machinery/atmospherics/pipe/manifold/visible, /obj/machinery/meter, /obj/effect/decal/warning_stripes/north, +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, /turf/simulated/floor/plasteel, /area/engine/controlroom) "aGb" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8"; - tag = "" - }, /obj/machinery/atmospherics/pipe/simple/visible{ dir = 4 }, /obj/effect/decal/warning_stripes/northwestcorner, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/yellow{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, /turf/simulated/floor/plasteel, /area/engine/controlroom) "aGc" = ( @@ -11589,8 +10523,7 @@ "aGe" = ( /obj/structure/sink{ dir = 8; - pixel_x = -12; - pixel_y = 2 + pixel_x = -12 }, /obj/structure/sign/nosmoking_2{ pixel_x = -32 @@ -11600,12 +10533,12 @@ /turf/simulated/floor/plasteel, /area/hydroponics/abandoned_garden) "aGf" = ( -/obj/machinery/door/poddoor{ - id_tag = "QMLoaddoor2"; - name = "supply dock loading door" +/obj/machinery/conveyor/east{ + id = "QMLoad" }, -/obj/machinery/conveyor/west{ - id = "QMLoad2" +/obj/machinery/door/poddoor{ + id_tag = "QMLoaddoor"; + name = "supply dock loading door" }, /turf/simulated/floor/plating, /area/quartermaster/storage) @@ -11613,8 +10546,7 @@ /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /obj/machinery/atmospherics/pipe/simple/visible{ dir = 9 @@ -11638,6 +10570,7 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 1 }, +/obj/machinery/hologram/holopad, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralfull" @@ -11647,8 +10580,7 @@ /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /turf/simulated/floor/plasteel, /area/hydroponics/abandoned_garden) @@ -11656,8 +10588,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /turf/simulated/floor/plasteel, /area/hydroponics/abandoned_garden) @@ -11665,8 +10596,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -11677,8 +10607,7 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel, @@ -11750,12 +10679,12 @@ /obj/item/radio/intercom{ pixel_y = 28 }, -/obj/structure/reagent_dispensers/beerkeg, /obj/machinery/firealarm{ dir = 8; pixel_x = -26; pixel_y = 28 }, +/obj/machinery/bottler, /turf/simulated/floor/plasteel{ dir = 5; icon_state = "dark" @@ -11782,7 +10711,7 @@ /area/crew_quarters/bar) "aGx" = ( /obj/structure/sink/kitchen{ - pixel_y = 28 + pixel_y = 25 }, /obj/machinery/camera{ c_tag = "Bar Backroom" @@ -11815,6 +10744,7 @@ pixel_x = 26; pixel_y = 26 }, +/obj/item/gun/projectile/revolver/doublebarrel, /turf/simulated/floor/plasteel{ dir = 5; icon_state = "dark" @@ -11927,8 +10857,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/cable{ d1 = 1; @@ -11975,10 +10904,10 @@ /turf/simulated/floor/plating, /area/quartermaster/sorting) "aGP" = ( -/obj/structure/plasticflaps/mining, -/obj/machinery/conveyor/west{ - id = "QMLoad2" +/obj/machinery/conveyor/east{ + id = "QMLoad" }, +/obj/structure/plasticflaps/mining, /turf/simulated/floor/plating, /area/quartermaster/storage) "aGQ" = ( @@ -12010,15 +10939,6 @@ /obj/machinery/seed_extractor, /turf/simulated/floor/plasteel, /area/security/permabrig) -"aGU" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - tag = "" - }, -/turf/simulated/floor/plasteel, -/area/security/permabrig) "aGV" = ( /obj/structure/cable{ d1 = 4; @@ -12029,8 +10949,10 @@ /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 4 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plasteel, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "neutralfull" + }, /area/security/permabrig) "aGW" = ( /obj/structure/lattice, @@ -12057,7 +10979,7 @@ "aHb" = ( /obj/structure/sink{ dir = 4; - pixel_x = 9 + pixel_x = 12 }, /obj/structure/sign/botany{ pixel_x = 32 @@ -12066,11 +10988,10 @@ /turf/simulated/floor/plasteel, /area/hydroponics/abandoned_garden) "aHc" = ( -/obj/structure/cable{ +/obj/structure/cable/yellow{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/effect/decal/warning_stripes/east, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -12126,8 +11047,7 @@ /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -12144,14 +11064,12 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, -/obj/structure/cable{ +/obj/structure/cable/yellow{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 9 @@ -12175,8 +11093,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/effect/decal/warning_stripes/east, /turf/simulated/floor/plasteel, @@ -12228,8 +11145,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/effect/decal/cleanable/dirt, /obj/effect/decal/warning_stripes/yellow, @@ -12264,8 +11180,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/barricade/wooden, /obj/machinery/door/airlock/maintenance{ @@ -12329,8 +11244,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/effect/decal/warning_stripes/yellow, /turf/simulated/floor/plasteel{ @@ -12339,7 +11253,9 @@ }, /area/crew_quarters/sleep) "aHI" = ( -/obj/structure/plasticflaps, +/obj/structure/plasticflaps{ + opacity = 1 + }, /obj/machinery/navbeacon{ codes_txt = "delivery;dir=4"; dir = 4; @@ -12362,8 +11278,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -12410,13 +11325,13 @@ }, /area/crew_quarters/bar) "aHP" = ( -/obj/machinery/hologram/holopad, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 10 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 10 }, +/obj/machinery/hologram/holopad, /turf/simulated/floor/plasteel{ dir = 5; icon_state = "dark" @@ -12439,21 +11354,16 @@ }, /area/crew_quarters/bar) "aHS" = ( -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" - }, /obj/structure/disposalpipe/sortjunction{ dir = 2; icon_state = "pipe-j2s"; name = "Bar Junction"; - sortType = 4 + sortType = 19 }, /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/cable{ d1 = 1; @@ -12467,13 +11377,13 @@ }, /area/crew_quarters/sleep) "aHT" = ( -/obj/structure/plasticflaps{ - opacity = 1 - }, /obj/machinery/conveyor{ dir = 4; id = "cargodelivery" }, +/obj/structure/plasticflaps{ + opacity = 1 + }, /turf/simulated/floor/plating, /area/quartermaster/office) "aHU" = ( @@ -12487,8 +11397,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/effect/decal/warning_stripes/yellow, /turf/simulated/floor/plasteel, @@ -12497,8 +11406,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/door/airlock/maintenance{ req_access_txt = "12" @@ -12512,8 +11420,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/door/firedoor, /obj/machinery/door/airlock/maintenance{ @@ -12563,10 +11470,6 @@ /obj/machinery/ai_status_display{ pixel_y = 32 }, -/obj/structure/extinguisher_cabinet{ - pixel_x = 25; - pixel_y = 32 - }, /obj/structure/chair/sofa/left, /obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ @@ -12596,14 +11499,14 @@ /area/quartermaster/storage) "aIf" = ( /obj/machinery/door_control{ - id = "QMLoaddoor2"; + id = "QMLoaddoor"; layer = 4; name = "Loading Doors"; pixel_x = 24; pixel_y = 8 }, /obj/machinery/door_control{ - id = "QMLoaddoor"; + id = "QMLoaddoor2"; layer = 4; name = "Loading Doors"; pixel_x = 24; @@ -12617,24 +11520,17 @@ /turf/simulated/floor/plasteel, /area/quartermaster/storage) "aIg" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2"; - tag = "" +/obj/machinery/door/poddoor{ + id_tag = "justice_blast"; + name = "Justice Blast Door" }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 +/obj/effect/decal/warning_stripes/south, +/obj/effect/decal/warning_stripes/north, +/obj/structure/grille{ + layer = 2.69 }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "neutralfull" - }, -/area/hallway/primary/fore) +/turf/simulated/floor/plasteel, +/area/security/execution) "aIh" = ( /obj/machinery/conveyor/southeast{ id = "cargodelivery" @@ -12642,38 +11538,41 @@ /turf/simulated/floor/plating, /area/quartermaster/office) "aIi" = ( -/obj/machinery/conveyor/northeast{ - id = "QMLoad" +/obj/machinery/conveyor/southwest/ccw{ + id = "QMLoad2" }, /turf/simulated/floor/plating, /area/quartermaster/storage) "aIj" = ( -/obj/machinery/door/poddoor{ - id_tag = "QMLoaddoor"; - name = "supply dock loading door" +/obj/machinery/conveyor/west{ + id = "QMLoad2" }, -/obj/machinery/conveyor/east{ - id = "QMLoad" +/obj/machinery/door/poddoor{ + id_tag = "QMLoaddoor2"; + name = "supply dock loading door" }, /turf/simulated/floor/plating, /area/quartermaster/storage) "aIk" = ( -/obj/structure/plasticflaps/mining, -/obj/machinery/conveyor/east{ - id = "QMLoad" +/obj/machinery/conveyor/west{ + id = "QMLoad2" }, +/obj/structure/plasticflaps/mining, /turf/simulated/floor/plating, /area/quartermaster/storage) "aIl" = ( /obj/item/reagent_containers/glass/bottle/nutrient/ez, /obj/item/reagent_containers/glass/bottle/nutrient/ez, -/turf/simulated/floor/plating, +/turf/simulated/floor/plasteel{ + icon_state = "red" + }, /area/security/permabrig) "aIm" = ( /obj/item/reagent_containers/glass/bucket, -/obj/effect/decal/cleanable/dirt, /obj/machinery/hydroponics/constructable, -/turf/simulated/floor/plasteel, +/turf/simulated/floor/plasteel{ + icon_state = "red" + }, /area/security/permabrig) "aIn" = ( /obj/structure/cable{ @@ -12682,20 +11581,25 @@ icon_state = "1-2"; tag = "" }, -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/plasteel, +/turf/simulated/floor/plasteel{ + icon_state = "red" + }, /area/security/permabrig) "aIo" = ( /obj/item/plant_analyzer, /obj/machinery/hydroponics/constructable, -/turf/simulated/floor/plasteel, +/turf/simulated/floor/plasteel{ + icon_state = "red" + }, /area/security/permabrig) "aIp" = ( /obj/item/cultivator, /obj/item/reagent_containers/spray/pestspray, -/turf/simulated/floor/plating, +/turf/simulated/floor/plasteel{ + icon_state = "red" + }, /area/security/permabrig) "aIq" = ( /obj/machinery/atmospherics/unary/portables_connector, @@ -12721,8 +11625,7 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/machinery/camera{ c_tag = "Port Fore Solars"; @@ -12813,8 +11716,7 @@ /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /obj/machinery/atmospherics/pipe/simple/visible{ dir = 10 @@ -12849,8 +11751,7 @@ /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /obj/effect/decal/warning_stripes/south, /turf/simulated/floor/plasteel, @@ -12859,8 +11760,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/effect/decal/warning_stripes/south, /turf/simulated/floor/plasteel, @@ -12869,8 +11769,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/light, /obj/machinery/status_display{ @@ -12883,8 +11782,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/firealarm{ dir = 1; @@ -12897,35 +11795,31 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/effect/decal/warning_stripes/southwestcorner, /turf/simulated/floor/plasteel, /area/engine/controlroom) "aIH" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - tag = "" - }, /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, /turf/simulated/floor/plasteel, /area/engine/controlroom) "aII" = ( /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/effect/decal/warning_stripes/southeastcorner, /turf/simulated/floor/plasteel, @@ -12934,8 +11828,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/light, /obj/effect/decal/warning_stripes/south, @@ -12950,18 +11843,16 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/effect/decal/warning_stripes/south, /turf/simulated/floor/plasteel, /area/engine/controlroom) "aIL" = ( -/obj/structure/cable{ +/obj/structure/cable/yellow{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/effect/decal/warning_stripes/south, /turf/simulated/floor/plasteel, @@ -13008,8 +11899,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /turf/simulated/floor/plasteel{ icon_state = "neutral" @@ -13022,11 +11912,11 @@ dir = 4; pixel_y = -22 }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/newscaster{ pixel_x = -32 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "neutralcorner" @@ -13040,8 +11930,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/effect/decal/warning_stripes/yellow, /obj/machinery/atmospherics/unary/vent_pump/on{ @@ -13063,8 +11952,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/light/small{ dir = 4 @@ -13100,10 +11988,10 @@ }, /area/crew_quarters/bar) "aIY" = ( -/obj/item/twohanded/required/kirbyplants, /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 1 }, +/obj/structure/reagent_dispensers/beerkeg, /turf/simulated/floor/plasteel{ dir = 5; icon_state = "dark" @@ -13152,8 +12040,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/door/firedoor, /obj/machinery/door/airlock/mining/glass{ @@ -13168,8 +12055,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /turf/simulated/floor/plasteel{ dir = 8; @@ -13180,8 +12066,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/effect/decal/warning_stripes/north, /turf/simulated/floor/plasteel{ @@ -13212,7 +12097,9 @@ }, /area/quartermaster/storage) "aJk" = ( -/obj/machinery/computer/arcade/orion_trail, +/obj/machinery/computer/arcade/orion_trail{ + dir = 8 + }, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "yellow" @@ -13220,6 +12107,9 @@ /area/quartermaster/storage) "aJm" = ( /obj/effect/decal/warning_stripes/north, +/obj/structure/extinguisher_cabinet{ + pixel_x = -25 + }, /turf/simulated/floor/plasteel, /area/quartermaster/storage) "aJn" = ( @@ -13263,19 +12153,18 @@ }, /area/quartermaster/storage) "aJs" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - tag = "" - }, /obj/machinery/atmospherics/pipe/manifold/visible, /obj/effect/decal/warning_stripes/north, /obj/machinery/door_control{ id = "engsm"; name = "Radiation Shutters Control"; pixel_y = 24; - req_access_txt = "10" + req_access_txt = "24" + }, +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" }, /turf/simulated/floor/plasteel, /area/engine/controlroom) @@ -13320,7 +12209,7 @@ /obj/machinery/atmospherics/pipe/simple/heat_exchanging, /obj/structure/lattice/catwalk, /turf/space, -/area/space) +/area/space/nearstation) "aJz" = ( /obj/machinery/atmospherics/pipe/simple/visible/yellow, /obj/structure/lattice/catwalk, @@ -13336,8 +12225,12 @@ /area/security/permabrig) "aJC" = ( /obj/structure/table, +/obj/item/book/manual/chef_recipes, /obj/item/clothing/head/chefhat, -/turf/simulated/floor/plasteel, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "neutralfull" + }, /area/security/permabrig) "aJD" = ( /obj/item/twohanded/required/kirbyplants, @@ -13345,8 +12238,8 @@ /turf/simulated/floor/plasteel, /area/engine/controlroom) "aJE" = ( -/obj/machinery/conveyor/north{ - id = "QMLoad" +/obj/machinery/conveyor/south{ + id = "QMLoad2" }, /turf/simulated/floor/plating, /area/quartermaster/storage) @@ -13412,10 +12305,9 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, -/turf/simulated/floor/plasteel, +/turf/simulated/floor/plating, /area/maintenance/auxsolarport) "aJL" = ( /obj/machinery/atmospherics/unary/vent_pump/high_volume{ @@ -13440,10 +12332,9 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, -/turf/simulated/floor/plasteel, +/turf/simulated/floor/plating, /area/maintenance/auxsolarport) "aJM" = ( /obj/structure/cable{ @@ -13454,8 +12345,7 @@ /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /obj/effect/decal/warning_stripes/east, /turf/simulated/floor/plating, @@ -13465,19 +12355,22 @@ /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /obj/effect/decal/cleanable/dirt, /obj/effect/decal/warning_stripes/northwest, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, /turf/simulated/floor/plasteel, /area/maintenance/incinerator) "aJO" = ( /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/binary/pump{ name = "Gas to Turbine" @@ -13489,8 +12382,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/visible, /obj/effect/decal/warning_stripes/north, @@ -13500,14 +12392,12 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/visible, /obj/effect/decal/warning_stripes/north, @@ -13569,8 +12459,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/door/firedoor, /obj/machinery/door/airlock/atmos/glass{ @@ -13597,8 +12486,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /turf/simulated/floor/plating, /area/engine/controlroom) @@ -13606,8 +12494,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/door/firedoor, /obj/machinery/door/airlock/atmos/glass{ @@ -13651,8 +12538,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 @@ -13663,8 +12549,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -13678,8 +12563,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -13697,14 +12581,12 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -13721,18 +12603,14 @@ "aKh" = ( /obj/structure/table/wood, /obj/item/flashlight/lamp, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/crew_quarters/sleep) "aKi" = ( /obj/structure/table/wood, /obj/item/folder, /obj/item/pen, /obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/crew_quarters/sleep) "aKj" = ( /obj/machinery/status_display{ @@ -13740,21 +12618,17 @@ }, /obj/structure/bed, /obj/item/bedsheet/orange, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/crew_quarters/sleep) "aKk" = ( /obj/structure/dresser, /turf/simulated/floor/plasteel{ - icon_state = "wood" + icon_state = "barber" }, -/area/crew_quarters/sleep) +/area/civilian/barber) "aKl" = ( /obj/structure/closet/secure_closet/personal/cabinet, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/crew_quarters/sleep) "aKm" = ( /obj/item/radio/intercom{ @@ -13789,14 +12663,20 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, -/turf/simulated/floor/plasteel, +/turf/simulated/floor/plating, /area/maintenance/auxsolarport) "aKp" = ( /obj/structure/table/wood, -/obj/item/gun/projectile/revolver/doublebarrel, +/obj/item/wrench, +/obj/item/stack/sheet/glass/fifty, +/obj/item/stack/sheet/metal/fifty, +/obj/item/stack/cable_coil/random{ + pixel_x = 2; + pixel_y = 3 + }, +/obj/item/stack/cable_coil/random, /turf/simulated/floor/plasteel{ dir = 5; icon_state = "dark" @@ -13840,14 +12720,14 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/effect/landmark{ name = "lightsout" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/hologram/holopad, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralfull" @@ -13862,6 +12742,8 @@ dir = 4 }, /obj/effect/decal/warning_stripes/northeast, +/obj/structure/table, +/obj/machinery/recharger, /turf/simulated/floor/plasteel, /area/quartermaster/office) "aKw" = ( @@ -13879,8 +12761,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/unary/vent_scrubber/on, /turf/simulated/floor/plasteel{ @@ -13895,16 +12776,6 @@ /obj/effect/spawner/lootdrop/maintenance, /turf/simulated/floor/plating, /area/quartermaster/office) -"aKA" = ( -/obj/item/twohanded/required/kirbyplants, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "whitepurplecorner" - }, -/area/medical/research) "aKB" = ( /obj/structure/chair, /turf/simulated/floor/plasteel{ @@ -13913,9 +12784,12 @@ }, /area/quartermaster/storage) "aKC" = ( -/obj/structure/disposalpipe/junction, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/junction{ + dir = 2; + icon_state = "pipe-y" + }, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -13984,20 +12858,18 @@ /obj/machinery/status_display{ pixel_y = 32 }, -/obj/machinery/computer/library/public, /obj/structure/table, -/turf/simulated/floor/plasteel, -/area/security/permabrig) -"aKS" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plasteel, +/obj/machinery/computer/library/public, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "red" + }, /area/security/permabrig) "aKT" = ( /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/cable{ d1 = 1; @@ -14017,7 +12889,10 @@ /turf/simulated/floor/plasteel, /area/security/permabrig) "aKU" = ( -/turf/simulated/floor/plasteel, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "red" + }, /area/security/permabrig) "aKV" = ( /obj/machinery/status_display{ @@ -14034,11 +12909,10 @@ /turf/simulated/wall, /area/security/execution) "aKX" = ( -/obj/structure/cable{ +/obj/structure/cable/yellow{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/door/firedoor, /obj/machinery/door/airlock/atmos/glass{ @@ -14049,11 +12923,12 @@ /area/engine/controlroom) "aKY" = ( /obj/structure/cable, +/obj/effect/decal/warning_stripes/southwest, /obj/machinery/power/solar_control{ + dir = 4; id = "portsolar"; name = "Aft Port Solar Control" }, -/obj/effect/decal/warning_stripes/southwest, /turf/simulated/floor/plating, /area/maintenance/auxsolarport) "aKZ" = ( @@ -14147,8 +13022,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /turf/simulated/floor/plasteel{ dir = 8; @@ -14156,12 +13030,6 @@ }, /area/maintenance/incinerator) "aLj" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - tag = "" - }, /obj/structure/cable{ d1 = 1; d2 = 8; @@ -14182,8 +13050,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/effect/decal/warning_stripes/west, /turf/simulated/floor/plasteel{ @@ -14195,14 +13062,12 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/machinery/atmospherics/pipe/simple/hidden{ dir = 9 @@ -14223,8 +13088,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/door/firedoor, /obj/machinery/door/airlock/atmos/glass{ @@ -14238,8 +13102,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/effect/decal/warning_stripes/northwest, /turf/simulated/floor/plasteel, @@ -14269,6 +13132,11 @@ name = "Fore Port Solar Access"; req_access_txt = "32" }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, /turf/simulated/floor/plasteel, /area/maintenance/auxsolarport) "aLs" = ( @@ -14283,8 +13151,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/firealarm{ dir = 8; @@ -14294,14 +13161,14 @@ /turf/simulated/floor/plasteel, /area/engine/controlroom) "aLw" = ( -/obj/structure/cable, -/obj/structure/cable{ +/obj/machinery/power/terminal, +/obj/effect/decal/warning_stripes/south, +/obj/structure/cable/yellow, +/obj/structure/cable/yellow{ d1 = 1; d2 = 4; icon_state = "1-4" }, -/obj/machinery/power/terminal, -/obj/effect/decal/warning_stripes/south, /turf/simulated/floor/plasteel, /area/engine/controlroom) "aLx" = ( @@ -14341,8 +13208,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/light/small{ dir = 4 @@ -14357,9 +13223,7 @@ /obj/machinery/newscaster{ pixel_x = -32 }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/crew_quarters/sleep) "aLF" = ( /obj/structure/chair/office/dark{ @@ -14368,17 +13232,13 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 5 }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/crew_quarters/sleep) "aLG" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/crew_quarters/sleep) "aLH" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -14387,9 +13247,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 5 }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/crew_quarters/sleep) "aLI" = ( /obj/machinery/door/airlock/maintenance{ @@ -14401,9 +13259,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/crew_quarters/sleep) "aLJ" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ @@ -14444,15 +13300,7 @@ /area/crew_quarters/bar) "aLN" = ( /obj/machinery/light, -/obj/structure/closet/gmcloset, -/obj/item/wrench, -/obj/item/stack/sheet/glass/fifty, -/obj/item/stack/sheet/metal/fifty, -/obj/item/stack/cable_coil/random{ - pixel_x = 2; - pixel_y = 3 - }, -/obj/item/stack/cable_coil/random, +/obj/machinery/vending/bardrobe, /turf/simulated/floor/plasteel{ dir = 5; icon_state = "dark" @@ -14498,7 +13346,7 @@ name = "Civilian" }, /turf/simulated/floor/plasteel{ - icon_state = "redyellowfull" + icon_state = "bar" }, /area/crew_quarters/bar) "aLT" = ( @@ -14510,12 +13358,12 @@ /turf/simulated/wall, /area/crew_quarters/bar/atrium) "aLV" = ( +/obj/effect/decal/warning_stripes/yellow, /obj/machinery/navbeacon{ codes_txt = "delivery;dir=4"; dir = 4; location = "QM #4" }, -/obj/effect/decal/warning_stripes/yellow, /mob/living/simple_animal/bot/mulebot{ home_destination = "QM #4"; suffix = "#4" @@ -14566,8 +13414,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -14589,7 +13436,6 @@ }, /area/quartermaster/office) "aMb" = ( -/obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 8; initialize_directions = 11 @@ -14598,6 +13444,12 @@ dir = 8; initialize_directions = 11 }, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -14618,13 +13470,13 @@ }, /area/quartermaster/storage) "aMd" = ( -/obj/machinery/hologram/holopad, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 10 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 9 }, +/obj/machinery/hologram/holopad, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralfull" @@ -14676,6 +13528,7 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 8 }, +/mob/living/carbon/human/monkey/punpun, /turf/simulated/floor/plasteel{ dir = 5; icon_state = "dark" @@ -14710,20 +13563,28 @@ }, /area/ai_monitored/storage/eva) "aMq" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/chair/stool, -/turf/simulated/floor/plating, +/obj/structure/chair/stool{ + dir = 1 + }, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "neutralfull" + }, /area/security/permabrig) "aMu" = ( /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" + }, +/obj/structure/chair/stool{ + dir = 4 }, -/obj/structure/chair/stool, /obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/plasteel, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "neutralfull" + }, /area/security/permabrig) "aMv" = ( /turf/simulated/wall/r_wall, @@ -14735,13 +13596,18 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "whitebluecorner" }, /area/medical/medbay) "aMx" = ( -/obj/structure/cable{ +/obj/structure/cable/yellow{ d2 = 8; icon_state = "0-8" }, @@ -14785,9 +13651,7 @@ "aMD" = ( /obj/structure/dresser, /obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/crew_quarters/sleep) "aME" = ( /obj/structure/cable{ @@ -14859,6 +13723,11 @@ /area/engine/controlroom) "aMO" = ( /obj/effect/decal/cleanable/dirt, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "vault" @@ -14873,8 +13742,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/effect/decal/warning_stripes/yellow, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -14893,12 +13761,13 @@ d2 = 4; icon_state = "1-4" }, -/obj/machinery/computer/monitor{ - name = "Engineering Power Monitoring Console" - }, /obj/machinery/status_display{ pixel_y = -32 }, +/obj/machinery/computer/monitor{ + dir = 1; + name = "Engineering Power Monitoring Console" + }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "dark" @@ -14908,8 +13777,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/cable{ d2 = 8; @@ -14917,7 +13785,10 @@ }, /obj/machinery/light/small, /obj/machinery/power/smes, -/turf/simulated/floor/greengrid, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "dark" + }, /area/engine/controlroom) "aMU" = ( /obj/structure/cable{ @@ -14960,8 +13831,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ @@ -14972,9 +13842,7 @@ "aNa" = ( /obj/structure/table/wood, /obj/item/paper_bin, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/crew_quarters/sleep) "aNb" = ( /obj/effect/decal/warning_stripes/yellow/hollow, @@ -14989,15 +13857,11 @@ "aNc" = ( /obj/machinery/light, /obj/structure/closet/wardrobe/mixed, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/crew_quarters/sleep) "aNd" = ( /obj/structure/table/wood, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/crew_quarters/sleep) "aNe" = ( /obj/structure/closet/emcloset, @@ -15019,8 +13883,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/alarm{ dir = 8; @@ -15039,7 +13902,7 @@ pixel_x = -28 }, /turf/simulated/floor/plasteel{ - icon_state = "redyellowfull" + icon_state = "bar" }, /area/crew_quarters/bar) "aNj" = ( @@ -15052,12 +13915,12 @@ pixel_x = 24 }, /turf/simulated/floor/plasteel{ - icon_state = "redyellowfull" + icon_state = "bar" }, /area/crew_quarters/bar) "aNk" = ( /obj/machinery/conveyor_switch/oneway{ - id = "QMLoad" + id = "QMLoad2" }, /turf/simulated/floor/plasteel{ dir = 4; @@ -15081,8 +13944,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /turf/simulated/floor/plasteel{ dir = 4; @@ -15120,8 +13982,7 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 1 @@ -15176,8 +14037,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/door/firedoor, /obj/machinery/door/airlock/mining/glass{ @@ -15231,14 +14091,16 @@ /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 }, -/turf/simulated/floor/plating, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "redcorner" + }, /area/security/permabrig) "aNE" = ( /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 1 @@ -15246,16 +14108,17 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 6 }, -/turf/simulated/floor/plasteel, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "neutralfull" + }, /area/security/permabrig) -"aNF" = ( +"aNG" = ( /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -15263,79 +14126,32 @@ dir = 4 }, /turf/simulated/floor/plasteel{ - dir = 1; - icon_state = "redcorner" + dir = 8; + icon_state = "neutralfull" }, /area/security/permabrig) -"aNG" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - tag = "" - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plasteel, -/area/security/permabrig) "aNI" = ( /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, /obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/turf/simulated/floor/plasteel, -/area/security/permabrig) -"aNJ" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - tag = "" +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "neutralfull" }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/plasteel, -/area/security/permabrig) -"aNK" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - tag = "" - }, -/turf/simulated/floor/plating, /area/security/permabrig) "aNL" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -15347,17 +14163,18 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" + }, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "neutralfull" }, -/turf/simulated/floor/plasteel, /area/security/permabrig) "aNM" = ( /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -15366,8 +14183,8 @@ dir = 4 }, /turf/simulated/floor/plasteel{ - dir = 1; - icon_state = "redcorner" + dir = 8; + icon_state = "neutralfull" }, /area/security/permabrig) "aNN" = ( @@ -15376,27 +14193,40 @@ d2 = 8; icon_state = "1-8" }, -/obj/structure/chair/stool, +/obj/structure/chair/stool{ + dir = 4 + }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 9 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 10 }, -/turf/simulated/floor/plasteel, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "neutralfull" + }, /area/security/permabrig) "aNO" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/table, /obj/item/storage/box/donkpockets, -/turf/simulated/floor/plasteel, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "neutralfull" + }, /area/security/permabrig) "aNP" = ( /obj/machinery/light/small{ dir = 4 }, -/obj/structure/chair/stool, -/turf/simulated/floor/plating, +/obj/structure/chair/stool{ + dir = 8 + }, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "red" + }, /area/security/permabrig) "aNQ" = ( /obj/machinery/light/small{ @@ -15409,7 +14239,6 @@ name = "EXTERNAL AIRLOCK"; pixel_x = -32 }, -/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "vault" @@ -15476,9 +14305,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/crew_quarters/sleep) "aNY" = ( /obj/machinery/atmospherics/pipe/manifold/visible, @@ -15497,7 +14324,9 @@ pixel_x = 24 }, /obj/effect/decal/warning_stripes/yellow/hollow, -/obj/machinery/computer/sm_monitor, +/obj/machinery/computer/sm_monitor{ + dir = 8 + }, /turf/simulated/floor/plasteel, /area/engine/controlroom) "aOa" = ( @@ -15516,7 +14345,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plasteel{ - icon_state = "redyellowfull" + icon_state = "bar" }, /area/crew_quarters/bar) "aOd" = ( @@ -15524,8 +14353,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/visible{ dir = 10 @@ -15593,8 +14421,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/door/firedoor, /obj/machinery/door/airlock/atmos/glass{ @@ -15660,16 +14487,13 @@ /area/maintenance/gambling_den) "aOu" = ( /obj/item/twohanded/required/kirbyplants, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/maintenance/gambling_den) "aOv" = ( /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/disposalpipe/segment, /turf/simulated/floor/plating, @@ -15749,7 +14573,7 @@ /area/crew_quarters/bar) "aOG" = ( /turf/simulated/floor/plasteel{ - icon_state = "redyellowfull" + icon_state = "bar" }, /area/crew_quarters/bar) "aOH" = ( @@ -15785,10 +14609,10 @@ }, /area/quartermaster/office) "aOL" = ( -/obj/machinery/hologram/holopad, /obj/effect/decal/warning_stripes/yellow/hollow, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/hologram/holopad, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralfull" @@ -15799,10 +14623,10 @@ /turf/simulated/wall, /area/quartermaster/office) "aON" = ( -/obj/structure/plasticflaps, /obj/machinery/conveyor{ id = "cargodisposals" }, +/obj/structure/plasticflaps, /turf/simulated/floor/plating, /area/quartermaster/office) "aOO" = ( @@ -15815,8 +14639,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ @@ -15828,7 +14651,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plasteel{ - icon_state = "redyellowfull" + icon_state = "bar" }, /area/crew_quarters/bar) "aOR" = ( @@ -15858,61 +14681,75 @@ /turf/space, /area/space/nearstation) "aOX" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/ai_status_display{ - pixel_y = -32 +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + icon_state = "red" }, -/turf/simulated/floor/plating, /area/security/permabrig) "aOY" = ( /obj/structure/table, /obj/item/storage/pill_bottle/dice, -/turf/simulated/floor/plating, +/obj/machinery/atmospherics/unary/outlet_injector/on{ + dir = 8 + }, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "neutralfull" + }, /area/security/permabrig) "aOZ" = ( /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/table, /obj/item/paper, /obj/item/pen, -/turf/simulated/floor/plasteel, -/area/security/permabrig) -"aPa" = ( -/obj/structure/chair/stool, -/turf/simulated/floor/plasteel, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "neutralfull" + }, /area/security/permabrig) "aPb" = ( -/obj/effect/decal/cleanable/dirt, /mob/living/simple_animal/mouse, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plasteel, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "neutralfull" + }, /area/security/permabrig) "aPd" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 1 }, /turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "redcorner" + dir = 8; + icon_state = "neutralfull" }, /area/security/permabrig) "aPe" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "neutralfull" + }, /area/security/permabrig) "aPf" = ( /obj/machinery/alarm{ dir = 8; pixel_x = 24 }, -/obj/effect/decal/cleanable/dirt, /obj/item/twohanded/required/kirbyplants, -/turf/simulated/floor/plating, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "red" + }, /area/security/permabrig) "aPg" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on{ @@ -15953,8 +14790,18 @@ }, /area/security/execution) "aPj" = ( -/turf/simulated/wall/r_wall/rust, -/area/security/execution) +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "neutralfull" + }, +/area/security/permabrig) "aPk" = ( /obj/machinery/door/poddoor{ id_tag = "turbinevent"; @@ -16009,8 +14856,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/door/airlock/glass{ autoclose = 0; @@ -16027,8 +14873,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /turf/simulated/floor/engine, /area/maintenance/incinerator) @@ -16036,8 +14881,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/door/airlock/glass{ autoclose = 0; @@ -16054,8 +14898,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /turf/simulated/floor/plasteel{ dir = 8; @@ -16066,8 +14909,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/effect/decal/warning_stripes/yellow, /turf/simulated/floor/plasteel{ @@ -16094,13 +14936,13 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plasteel{ - icon_state = "redyellowfull" + icon_state = "bar" }, /area/crew_quarters/bar) "aPv" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light/small, -/turf/simulated/floor/plasteel, +/turf/simulated/floor/plasteel{ + icon_state = "red" + }, /area/security/permabrig) "aPw" = ( /obj/effect/landmark/start{ @@ -16145,8 +14987,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/carpet, @@ -16189,12 +15030,19 @@ /turf/simulated/floor/plasteel, /area/engine/controlroom) "aPF" = ( -/obj/machinery/atmospherics/pipe/simple/visible/cyan{ +/obj/machinery/atmospherics/pipe/simple/visible/yellow{ dir = 4 }, -/obj/effect/decal/warning_stripes/north, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/plasteel, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "neutralfull" + }, /area/atmos) "aPG" = ( /obj/machinery/light{ @@ -16256,13 +15104,10 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/chair/stool, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/maintenance/gambling_den) "aPO" = ( /obj/machinery/light/small{ @@ -16275,13 +15120,13 @@ }, /area/maintenance/gambling_den) "aPP" = ( -/obj/machinery/newscaster{ - pixel_y = 32 - }, /obj/machinery/status_display{ pixel_x = -32 }, /obj/structure/closet/secure_closet/clown, +/obj/machinery/newscaster{ + pixel_y = 32 + }, /turf/simulated/floor/plasteel{ icon_state = "redbluefull" }, @@ -16351,9 +15196,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/maintenance/gambling_den) "aPW" = ( /turf/simulated/floor/carpet, @@ -16362,8 +15205,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/unary/vent_scrubber/on, /turf/simulated/floor/carpet, @@ -16377,18 +15219,11 @@ icon_state = "grimy" }, /area/crew_quarters/bar/atrium) -"aPZ" = ( -/obj/structure/table/wood, -/turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "dark" - }, -/area/crew_quarters/bar) "aQb" = ( /obj/structure/table/wood, /obj/item/storage/pill_bottle/dice, /turf/simulated/floor/plasteel{ - icon_state = "redyellowfull" + icon_state = "bar" }, /area/crew_quarters/bar) "aQc" = ( @@ -16401,14 +15236,14 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plasteel{ - icon_state = "redyellowfull" + icon_state = "bar" }, /area/crew_quarters/bar) "aQd" = ( /obj/structure/table/wood, /obj/item/reagent_containers/food/drinks/cans/cola, /turf/simulated/floor/plasteel{ - icon_state = "redyellowfull" + icon_state = "bar" }, /area/crew_quarters/bar) "aQe" = ( @@ -16433,8 +15268,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/chair/office/dark{ dir = 8 @@ -16454,14 +15288,12 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 4 @@ -16484,8 +15316,8 @@ }, /area/quartermaster/office) "aQi" = ( -/obj/structure/plasticflaps, /obj/effect/decal/warning_stripes/yellow, +/obj/structure/plasticflaps, /turf/simulated/floor/plasteel, /area/quartermaster/office) "aQj" = ( @@ -16500,7 +15332,7 @@ dir = 4 }, /obj/machinery/door/firedoor, -/turf/simulated/floor/plating, +/turf/simulated/floor/wood, /area/medical/psych) "aQk" = ( /obj/structure/table, @@ -16514,8 +15346,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /turf/simulated/floor/plasteel{ dir = 8; @@ -16539,9 +15370,13 @@ }, /area/quartermaster/storage) "aQo" = ( -/obj/structure/table/wood, -/obj/machinery/computer/med_data/laptop, -/turf/simulated/floor/wood, +/obj/structure/chair/comfy/lime{ + dir = 4 + }, +/obj/machinery/computer/med_data/laptop{ + dir = 1 + }, +/turf/simulated/floor/carpet, /area/medical/psych) "aQp" = ( /obj/machinery/door/firedoor, @@ -16563,9 +15398,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/maintenance/gambling_den) "aQr" = ( /obj/effect/spawner/lootdrop/maintenance, @@ -16580,18 +15413,18 @@ /obj/machinery/light{ dir = 4 }, -/obj/machinery/conveyor/northeast/ccw{ - id = "QMLoad" +/obj/machinery/conveyor/southwest{ + id = "QMLoad2" }, /turf/simulated/floor/plating, /area/quartermaster/storage) "aQt" = ( +/obj/structure/chair/stool/bar, /obj/machinery/newscaster{ pixel_x = -32 }, -/obj/structure/chair/stool/bar, /turf/simulated/floor/plasteel{ - icon_state = "redyellowfull" + icon_state = "bar" }, /area/crew_quarters/bar) "aQu" = ( @@ -16627,53 +15460,75 @@ /turf/simulated/floor/plating, /area/maintenance/gambling_den) "aQx" = ( -/obj/structure/table, -/obj/item/book/manual/chef_recipes, /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 4 }, -/turf/simulated/floor/plasteel, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "red" + }, /area/security/permabrig) "aQy" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/plasteel, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "neutralfull" + }, /area/security/permabrig) "aQB" = ( /obj/structure/table, -/turf/simulated/floor/plating, +/obj/item/toy/figure/crew/syndie, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "neutralfull" + }, /area/security/permabrig) "aQC" = ( /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/table, /obj/item/deck/cards, -/turf/simulated/floor/plasteel, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "neutralfull" + }, /area/security/permabrig) "aQD" = ( -/obj/structure/chair/stool, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, +/obj/structure/chair/stool{ + dir = 8 + }, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "neutralfull" + }, /area/security/permabrig) "aQG" = ( /obj/structure/chair/stool, -/turf/simulated/floor/plating, +/turf/simulated/floor/plasteel{ + icon_state = "redcorner" + }, /area/security/permabrig) "aQH" = ( /obj/machinery/computer/cryopod{ pixel_y = -32 }, -/turf/simulated/floor/plasteel, +/turf/simulated/floor/plasteel{ + dir = 0; + icon_state = "red" + }, /area/security/permabrig) "aQI" = ( /obj/machinery/cryopod, -/turf/simulated/floor/plating, +/turf/simulated/floor/plasteel{ + dir = 6; + icon_state = "red" + }, /area/security/permabrig) "aQJ" = ( /turf/simulated/floor/plasteel{ @@ -16743,6 +15598,7 @@ pixel_y = -24 }, /obj/machinery/computer/turbine_computer{ + dir = 1; id = "incineratorturbine" }, /turf/simulated/floor/plasteel{ @@ -16860,13 +15716,13 @@ /obj/structure/window/reinforced{ dir = 4 }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 +/obj/item/tank/internals/emergency_oxygen, +/obj/item/tank/internals/emergency_oxygen, +/obj/item/clothing/mask/breath, +/obj/item/clothing/mask/breath, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 }, -/obj/item/tank/internals/emergency_oxygen, -/obj/item/tank/internals/emergency_oxygen, -/obj/item/clothing/mask/breath, -/obj/item/clothing/mask/breath, /turf/simulated/floor/plasteel{ dir = 5; icon_state = "caution" @@ -16884,7 +15740,9 @@ pixel_x = -22 }, /obj/effect/decal/warning_stripes/yellow/hollow, -/obj/structure/closet/wardrobe/atmospherics_yellow, +/obj/machinery/shower{ + dir = 4 + }, /turf/simulated/floor/plasteel, /area/engine/controlroom) "aRb" = ( @@ -16942,7 +15800,7 @@ dir = 4 }, /turf/simulated/floor/plasteel{ - icon_state = "redyellowfull" + icon_state = "bar" }, /area/crew_quarters/bar) "aRf" = ( @@ -17020,22 +15878,17 @@ }, /area/maintenance/gambling_den) "aRm" = ( -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/maintenance/gambling_den) "aRn" = ( /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/chair/stool, /obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/maintenance/gambling_den) "aRo" = ( /obj/machinery/slot_machine, @@ -17066,8 +15919,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /turf/simulated/floor/plasteel{ icon_state = "redbluefull" @@ -17081,7 +15933,7 @@ dir = 4 }, /turf/simulated/floor/plasteel{ - icon_state = "redyellowfull" + icon_state = "bar" }, /area/crew_quarters/bar) "aRt" = ( @@ -17096,14 +15948,12 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /obj/effect/decal/warning_stripes/yellow, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, @@ -17115,8 +15965,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/light/small{ dir = 4 @@ -17143,7 +15992,7 @@ dir = 4 }, /turf/simulated/floor/plasteel{ - icon_state = "redyellowfull" + icon_state = "bar" }, /area/crew_quarters/bar) "aRy" = ( @@ -17171,7 +16020,7 @@ /obj/structure/table/wood, /obj/item/reagent_containers/food/snacks/cheesiehonkers, /turf/simulated/floor/plasteel{ - icon_state = "redyellowfull" + icon_state = "bar" }, /area/crew_quarters/bar) "aRD" = ( @@ -17179,14 +16028,14 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plasteel{ - icon_state = "redyellowfull" + icon_state = "bar" }, /area/crew_quarters/bar) "aRE" = ( /obj/structure/table/wood, /obj/item/deck/cards, /turf/simulated/floor/plasteel{ - icon_state = "redyellowfull" + icon_state = "bar" }, /area/crew_quarters/bar) "aRH" = ( @@ -17233,7 +16082,13 @@ "aRM" = ( /obj/structure/table, /obj/item/folder/yellow, -/obj/item/destTagger, +/obj/item/destTagger{ + pixel_x = -4 + }, +/obj/item/rcs{ + pixel_x = 8; + pixel_y = 4 + }, /turf/simulated/floor/plasteel{ icon_state = "brown" }, @@ -17242,8 +16097,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -17281,8 +16135,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ @@ -17300,8 +16153,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -17309,6 +16161,9 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "white" @@ -17369,11 +16224,8 @@ /obj/machinery/atmospherics/pipe/simple/visible/yellow{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 + dir = 4 }, /turf/simulated/floor/plasteel{ dir = 8; @@ -17394,64 +16246,61 @@ }, /area/hallway/primary/fore) "aSh" = ( -/obj/structure/table/glass, -/obj/item/reagent_containers/glass/bottle/morphine, -/obj/item/reagent_containers/syringe, +/obj/machinery/computer/security{ + dir = 4; + network = list("SS13","Research Outpost","Mining Outpost") + }, /turf/simulated/floor/plasteel{ dir = 9; - icon_state = "whitered" + icon_state = "red" }, /area/security/permabrig) "aSi" = ( -/obj/structure/table/glass, -/obj/item/folder/blue, -/obj/item/healthanalyzer, /obj/machinery/light{ dir = 1; on = 1 }, -/obj/machinery/newscaster{ - pixel_y = 32 +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" }, /turf/simulated/floor/plasteel{ dir = 1; - icon_state = "whitered" + icon_state = "red" }, /area/security/permabrig) "aSj" = ( -/obj/structure/table/glass, -/obj/item/reagent_containers/glass/bottle/morphine, -/obj/item/reagent_containers/syringe, +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/structure/table/reinforced, +/obj/machinery/recharger, /turf/simulated/floor/plasteel{ dir = 5; - icon_state = "whitered" + icon_state = "red" }, /area/security/permabrig) "aSl" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/plating, -/area/security/permabrig) -"aSm" = ( -/obj/machinery/light/small, -/obj/item/twohanded/required/kirbyplants, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/ai_status_display{ - pixel_y = -32 +/turf/simulated/floor/plasteel{ + dir = 0; + icon_state = "red" }, -/turf/simulated/floor/plasteel, /area/security/permabrig) "aSn" = ( -/obj/structure/chair/stool, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plasteel, +/obj/structure/chair/stool{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "neutralfull" + }, /area/security/permabrig) "aSp" = ( /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -17468,11 +16317,19 @@ /obj/machinery/ai_status_display{ pixel_y = -32 }, -/turf/simulated/floor/plating, +/turf/simulated/floor/plasteel{ + dir = 0; + icon_state = "red" + }, /area/security/permabrig) "aSs" = ( -/obj/machinery/computer/arcade, -/turf/simulated/floor/plating, +/obj/machinery/computer/arcade{ + dir = 1 + }, +/turf/simulated/floor/plasteel{ + dir = 6; + icon_state = "red" + }, /area/security/permabrig) "aSt" = ( /obj/effect/spawner/window/reinforced, @@ -17500,8 +16357,8 @@ }, /area/security/execution) "aSw" = ( -/obj/machinery/conveyor/east{ - id = "QMLoad" +/obj/machinery/conveyor/west{ + id = "QMLoad2" }, /turf/simulated/floor/plating, /area/quartermaster/storage) @@ -17600,8 +16457,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/visible/cyan{ dir = 4 @@ -17615,9 +16471,7 @@ /obj/machinery/atmospherics/pipe/simple/visible/green{ dir = 4 }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralfull" @@ -17681,8 +16535,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -17690,19 +16543,16 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 5 }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/maintenance/gambling_den) "aSS" = ( /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/door/airlock/maintenance{ - req_access_txt = "12" + req_access_txt = "46" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -17716,23 +16566,21 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, -/obj/machinery/hologram/holopad, /obj/effect/decal/warning_stripes/yellow/hollow, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/machinery/hologram/holopad, /turf/simulated/floor/plasteel, /area/crew_quarters/theatre) "aSU" = ( /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -17750,8 +16598,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/effect/decal/warning_stripes/yellow, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -17766,8 +16613,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/cable{ d1 = 1; @@ -17786,8 +16632,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -17802,11 +16647,11 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/door/firedoor, /obj/machinery/door/airlock/maintenance{ + name = "Entertainment Office"; req_access_txt = "46" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -17824,8 +16669,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/effect/decal/warning_stripes/yellow/hollow, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ @@ -17849,14 +16693,12 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /obj/structure/cable{ d1 = 1; @@ -17870,19 +16712,21 @@ }, /area/crew_quarters/sleep) "aTb" = ( -/obj/machinery/hologram/holopad, /obj/item/radio/intercom{ pixel_y = -28 }, /obj/effect/decal/warning_stripes/yellow/hollow, -/turf/simulated/floor/plasteel, +/obj/machinery/hologram/holopad, +/turf/simulated/floor/plasteel{ + dir = 0; + icon_state = "red" + }, /area/security/permabrig) "aTc" = ( /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/door/firedoor, /obj/machinery/door/airlock/maintenance{ @@ -17894,8 +16738,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /turf/simulated/floor/plasteel{ dir = 5; @@ -17906,21 +16749,20 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /turf/simulated/floor/plasteel{ icon_state = "grimy" }, /area/crew_quarters/bar/atrium) "aTf" = ( -/obj/machinery/hologram/holopad, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/machinery/hologram/holopad, /turf/simulated/floor/carpet, /area/crew_quarters/bar/atrium) "aTg" = ( @@ -17947,7 +16789,7 @@ /obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, /obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, /turf/simulated/floor/plasteel{ - icon_state = "redyellowfull" + icon_state = "bar" }, /area/crew_quarters/bar) "aTi" = ( @@ -17966,8 +16808,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 4 @@ -17986,8 +16827,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -18009,7 +16849,7 @@ "aTp" = ( /obj/structure/chair/stool/bar, /turf/simulated/floor/plasteel{ - icon_state = "redyellowfull" + icon_state = "bar" }, /area/crew_quarters/bar) "aTq" = ( @@ -18056,6 +16896,11 @@ /area/quartermaster/storage) "aTw" = ( /obj/structure/table/reinforced, +/obj/item/stamp/granted, +/obj/item/stamp/granted{ + pixel_x = 3; + pixel_y = 3 + }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralfull" @@ -18065,8 +16910,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel{ @@ -18143,28 +16987,40 @@ }, /area/quartermaster/qm) "aTF" = ( -/obj/structure/bed, -/obj/item/clothing/suit/straight_jacket, -/obj/item/clothing/mask/muzzle, -/obj/item/clothing/glasses/sunglasses/blindfold, +/obj/machinery/light{ + dir = 8 + }, +/obj/machinery/computer/area_atmos/area{ + dir = 4 + }, /turf/simulated/floor/plasteel{ dir = 8; - icon_state = "whitered" + icon_state = "red" }, /area/security/permabrig) "aTG" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on, /turf/simulated/floor/plasteel{ - icon_state = "white" + dir = 8; + icon_state = "neutralfull" }, /area/security/permabrig) "aTH" = ( -/obj/structure/bed, -/obj/item/clothing/suit/straight_jacket, -/obj/item/clothing/mask/muzzle, -/obj/item/clothing/glasses/sunglasses/blindfold, +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/machinery/computer/security/telescreen{ + desc = "Used for watching Prison Wing holding areas."; + name = "Prison Monitor"; + network = list("Prison"); + pixel_x = 30 + }, /turf/simulated/floor/plasteel{ dir = 4; - icon_state = "whitered" + icon_state = "red" }, /area/security/permabrig) "aTI" = ( @@ -18184,8 +17040,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/door/airlock/glass{ name = "Prison" @@ -18230,8 +17085,7 @@ /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 6 @@ -18250,6 +17104,12 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 6 }, +/obj/machinery/door_control{ + id = "justice_blast"; + name = "Space Vent"; + pixel_y = 34; + req_access_txt = "2" + }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "darkred" @@ -18264,8 +17124,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -18282,8 +17141,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -18304,8 +17162,7 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/structure/closet/secure_closet/injection, /obj/machinery/atmospherics/unary/vent_scrubber/on{ @@ -18357,8 +17214,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/effect/decal/warning_stripes/yellow, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -18400,6 +17256,9 @@ }, /obj/item/stack/packageWrap, /obj/item/hand_labeler, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, /turf/simulated/floor/plasteel{ dir = 10; icon_state = "caution" @@ -18410,6 +17269,9 @@ dir = 6 }, /obj/effect/decal/warning_stripes/west, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, /turf/simulated/floor/plasteel, /area/atmos) "aTZ" = ( @@ -18432,9 +17294,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralfull" @@ -18478,8 +17337,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/visible/yellow{ dir = 4 @@ -18550,7 +17408,7 @@ dir = 4 }, /turf/simulated/floor/plasteel{ - icon_state = "redyellowfull" + icon_state = "bar" }, /area/crew_quarters/bar) "aUk" = ( @@ -18591,7 +17449,7 @@ dir = 4 }, /turf/simulated/floor/plasteel{ - icon_state = "redyellowfull" + icon_state = "bar" }, /area/crew_quarters/bar) "aUp" = ( @@ -18619,8 +17477,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /turf/simulated/floor/plating, /area/maintenance/gambling_den) @@ -18628,8 +17485,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/barricade/wooden, /obj/machinery/door/airlock/maintenance, @@ -18639,14 +17495,12 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/effect/decal/warning_stripes/yellow, /turf/simulated/floor/plasteel, @@ -18660,7 +17514,7 @@ dir = 5 }, /turf/simulated/floor/plasteel{ - icon_state = "redyellowfull" + icon_state = "bar" }, /area/crew_quarters/bar) "aUx" = ( @@ -18705,7 +17559,7 @@ dir = 4 }, /turf/simulated/floor/plasteel{ - icon_state = "redyellowfull" + icon_state = "bar" }, /area/crew_quarters/bar) "aUC" = ( @@ -18723,8 +17577,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /turf/simulated/floor/plasteel{ dir = 4; @@ -18770,7 +17623,7 @@ "aUI" = ( /obj/structure/table/wood, /turf/simulated/floor/plasteel{ - icon_state = "redyellowfull" + icon_state = "bar" }, /area/crew_quarters/bar) "aUJ" = ( @@ -18779,7 +17632,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel{ - icon_state = "redyellowfull" + icon_state = "bar" }, /area/crew_quarters/bar) "aUL" = ( @@ -18788,7 +17641,7 @@ icon_state = "pipe-y" }, /turf/simulated/floor/plasteel{ - icon_state = "redyellowfull" + icon_state = "bar" }, /area/crew_quarters/bar) "aUM" = ( @@ -18804,6 +17657,14 @@ }, /obj/structure/table/reinforced, /obj/item/paper_bin, +/obj/item/stack/sheet/metal{ + amount = 50 + }, +/obj/item/stack/sheet/glass{ + amount = 50; + pixel_x = 3; + pixel_y = 3 + }, /obj/machinery/newscaster{ layer = 3.3; pixel_x = -27 @@ -18827,8 +17688,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -18838,14 +17698,9 @@ }, /area/quartermaster/office) "aUQ" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2"; - tag = "" - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 +/obj/machinery/atmospherics/pipe/simple/visible/cyan, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 }, /turf/simulated/floor/plasteel{ dir = 8; @@ -18853,10 +17708,10 @@ }, /area/atmos) "aUR" = ( -/obj/machinery/ai_status_display{ +/obj/machinery/photocopier, +/obj/machinery/status_display/supply_display{ pixel_y = 32 }, -/obj/machinery/photocopier, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "brown" @@ -18907,8 +17762,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /turf/simulated/floor/plasteel{ dir = 1; @@ -18932,8 +17786,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/light{ dir = 8 @@ -18968,7 +17821,9 @@ }, /area/quartermaster/storage) "aVa" = ( -/obj/machinery/computer/supplycomp, +/obj/machinery/computer/supplycomp{ + dir = 8 + }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralfull" @@ -19003,8 +17858,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/chair/office/dark{ dir = 4 @@ -19024,7 +17878,9 @@ }, /area/quartermaster/qm) "aVj" = ( -/obj/machinery/computer/supplycomp, +/obj/machinery/computer/supplycomp{ + dir = 8 + }, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "brown" @@ -19034,23 +17890,29 @@ /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 }, +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -24 + }, /turf/simulated/floor/plasteel{ dir = 8; - icon_state = "whitered" + icon_state = "red" }, /area/security/permabrig) "aVl" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 +/obj/machinery/door/window/brigdoor{ + dir = 8; + name = "Riot Control"; + req_access_txt = "2" }, -/obj/machinery/firealarm{ - dir = 4; - pixel_x = 24 +/obj/structure/window/reinforced{ + dir = 1; + layer = 2.9 }, -/turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "whitered" +/obj/machinery/atmospherics/unary/portables_connector{ + dir = 1 }, +/turf/simulated/floor/plating, /area/security/permabrig) "aVm" = ( /obj/structure/bed, @@ -19065,7 +17927,6 @@ /area/security/permabrig) "aVn" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 8 }, @@ -19086,16 +17947,17 @@ network = list("SS13","Security") }, /obj/structure/chair/stool, -/turf/simulated/floor/plating, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "red" + }, /area/security/permabrig) "aVp" = ( /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 6 }, @@ -19137,7 +17999,10 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 6 }, -/turf/simulated/floor/plating, +/turf/simulated/floor/plasteel{ + dir = 0; + icon_state = "neutral" + }, /area/security/permabrig) "aVt" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ @@ -19152,7 +18017,6 @@ network = list("SS13","Security") }, /obj/structure/chair/stool, -/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "red" @@ -19180,8 +18044,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/chair/office/dark{ @@ -19207,8 +18070,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /turf/simulated/floor/plasteel{ dir = 4; @@ -19367,31 +18229,24 @@ }, /area/atmos) "aVN" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - tag = "" - }, /obj/machinery/atmospherics/pipe/simple/visible/green{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralfull" }, /area/atmos) "aVO" = ( -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8"; - tag = "" - }, -/obj/machinery/atmospherics/pipe/simple/visible/green{ - dir = 4 +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 }, /turf/simulated/floor/plasteel{ dir = 8; @@ -19412,7 +18267,7 @@ }, /obj/structure/chair/stool/bar, /turf/simulated/floor/plasteel{ - icon_state = "redyellowfull" + icon_state = "bar" }, /area/crew_quarters/bar) "aVR" = ( @@ -19517,8 +18372,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/item/twohanded/required/kirbyplants, /turf/simulated/floor/plasteel{ @@ -19543,7 +18397,7 @@ /obj/structure/table/wood, /obj/item/reagent_containers/food/snacks/chips, /turf/simulated/floor/plasteel{ - icon_state = "redyellowfull" + icon_state = "bar" }, /area/crew_quarters/bar) "aWh" = ( @@ -19552,26 +18406,26 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel{ - icon_state = "redyellowfull" + icon_state = "bar" }, /area/crew_quarters/bar) "aWi" = ( /obj/structure/table/wood, /obj/item/reagent_containers/food/drinks/britcup, /turf/simulated/floor/plasteel{ - icon_state = "redyellowfull" + icon_state = "bar" }, /area/crew_quarters/bar) "aWj" = ( /obj/structure/chair/stool, /turf/simulated/floor/plasteel{ - icon_state = "redyellowfull" + icon_state = "bar" }, /area/crew_quarters/bar) "aWk" = ( /obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ - icon_state = "redyellowfull" + icon_state = "bar" }, /area/crew_quarters/bar) "aWl" = ( @@ -19594,8 +18448,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 4 @@ -19653,8 +18506,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /turf/simulated/floor/plasteel{ dir = 8; @@ -19665,8 +18517,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/cable{ d1 = 1; @@ -19682,8 +18533,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /turf/simulated/floor/plasteel{ dir = 4; @@ -19699,8 +18549,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/cable{ d1 = 1; @@ -19716,8 +18565,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /turf/simulated/floor/plasteel{ dir = 8; @@ -19728,8 +18576,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 8 @@ -19746,8 +18593,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -19769,8 +18615,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ @@ -19789,14 +18634,12 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -19828,8 +18671,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -19849,8 +18691,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -19871,8 +18712,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -19932,20 +18772,21 @@ }, /area/quartermaster/qm) "aWK" = ( -/obj/structure/table/glass, -/obj/item/storage/firstaid/regular, +/obj/structure/table, +/obj/item/wrench, +/obj/item/screwdriver, +/obj/item/reagent_containers/spray/cleaner, /turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "whitered" + dir = 10; + icon_state = "red" }, /area/security/permabrig) "aWL" = ( -/obj/structure/bed/roller, -/obj/machinery/iv_drip, -/turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "whitered" +/obj/machinery/portable_atmospherics/canister/sleeping_agent, +/obj/structure/window/reinforced{ + dir = 8 }, +/turf/simulated/floor/plating, /area/security/permabrig) "aWM" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on{ @@ -19955,7 +18796,6 @@ id = "Cell 1"; pixel_x = -22 }, -/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "red" @@ -19965,8 +18805,10 @@ /obj/machinery/newscaster{ pixel_y = -32 }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plasteel, +/turf/simulated/floor/plasteel{ + dir = 0; + icon_state = "red" + }, /area/security/permabrig) "aWO" = ( /obj/structure/table, @@ -19985,14 +18827,16 @@ id = "Cell 2"; pixel_x = -22 }, -/turf/simulated/floor/plating, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "red" + }, /area/security/permabrig) "aWQ" = ( /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 10 @@ -20029,8 +18873,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 8 @@ -20053,12 +18896,12 @@ }, /area/security/execution) "aWV" = ( -/obj/machinery/newscaster{ - pixel_y = -32 - }, /obj/machinery/atmospherics/pipe/simple/hidden{ dir = 5 }, +/obj/machinery/newscaster{ + pixel_y = -32 + }, /turf/simulated/floor/plasteel{ icon_state = "darkred" }, @@ -20220,6 +19063,7 @@ dir = 4 }, /obj/machinery/meter, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralfull" @@ -20265,24 +19109,17 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralfull" }, /area/atmos) "aXs" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2"; - tag = "" - }, -/turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "neutralfull" - }, -/area/atmos) -"aXt" = ( /obj/machinery/atmospherics/pipe/simple/visible/cyan{ dir = 6; initialize_directions = 6 @@ -20338,8 +19175,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /turf/simulated/floor/plasteel, /area/maintenance/fore) @@ -20365,14 +19201,12 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /turf/simulated/floor/plasteel{ dir = 4; @@ -20381,11 +19215,11 @@ /area/crew_quarters/sleep) "aXB" = ( /obj/structure/table/wood, +/obj/item/twohanded/staff/broom, +/obj/item/clothing/head/witchwig, /obj/machinery/newscaster{ pixel_x = -32 }, -/obj/item/twohanded/staff/broom, -/obj/item/clothing/head/witchwig, /turf/simulated/floor/plasteel{ dir = 5; icon_state = "dark" @@ -20425,10 +19259,13 @@ }, /area/crew_quarters/bar/atrium) "aXG" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralfull" @@ -20441,7 +19278,7 @@ pixel_y = -28 }, /turf/simulated/floor/plasteel{ - icon_state = "redyellowfull" + icon_state = "bar" }, /area/crew_quarters/bar) "aXI" = ( @@ -20449,15 +19286,14 @@ dir = 8 }, /turf/simulated/floor/plasteel{ - icon_state = "redyellowfull" + icon_state = "bar" }, /area/crew_quarters/bar) "aXJ" = ( /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/disposalpipe/segment{ dir = 4 @@ -20467,10 +19303,10 @@ }, /area/maintenance/fore) "aXK" = ( +/obj/effect/decal/warning_stripes/yellow, /obj/structure/plasticflaps{ opacity = 1 }, -/obj/effect/decal/warning_stripes/yellow, /turf/simulated/floor/plasteel, /area/quartermaster/office) "aXL" = ( @@ -20481,7 +19317,6 @@ }, /area/quartermaster/office) "aXM" = ( -/obj/machinery/hologram/holopad, /obj/effect/decal/warning_stripes/yellow/hollow, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 10 @@ -20489,20 +19324,16 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 9 }, +/obj/machinery/hologram/holopad, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralfull" }, /area/quartermaster/office) "aXN" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2"; - tag = "" - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 +/obj/machinery/atmospherics/pipe/manifold/visible/cyan{ + dir = 8; + initialize_directions = 11 }, /turf/simulated/floor/plasteel{ dir = 8; @@ -20529,6 +19360,7 @@ "aXS" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/hologram/holopad, /turf/simulated/floor/plasteel, /area/quartermaster/miningdock) "aXT" = ( @@ -20555,15 +19387,14 @@ }, /area/atmos) "aXX" = ( +/obj/structure/disposalpipe/segment, /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralfull" @@ -20573,8 +19404,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/disposalpipe/segment{ dir = 4 @@ -20585,11 +19415,11 @@ }, /area/hallway/primary/central) "aXZ" = ( +/obj/structure/disposalpipe/segment, /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 4 @@ -20597,7 +19427,6 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 8 }, -/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralfull" @@ -20605,6 +19434,9 @@ /area/hallway/primary/fore) "aYa" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/item/radio/intercom{ + pixel_y = 28 + }, /turf/simulated/floor/plasteel{ icon_state = "redfull" }, @@ -20629,8 +19461,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ @@ -20693,32 +19524,42 @@ }, /area/quartermaster/qm) "aYj" = ( -/obj/machinery/computer/security/mining, +/obj/machinery/computer/security/mining{ + dir = 8 + }, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "brown" }, /area/quartermaster/qm) "aYk" = ( -/obj/effect/spawner/window/reinforced, -/obj/structure/cable{ - d2 = 2; - icon_state = "0-2" +/turf/simulated/floor/plasteel{ + dir = 9; + icon_state = "red" }, -/turf/simulated/floor/plating, /area/security/permabrig) "aYl" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/medical/glass{ - id_tag = null; - name = "Brig Medical Bay"; - req_one_access_txt = "63" - }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, /turf/simulated/floor/plasteel{ dir = 1; - icon_state = "whitehall" + icon_state = "red" }, /area/security/permabrig) "aYo" = ( @@ -20735,8 +19576,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/door/airlock/security/glass{ @@ -20761,14 +19601,12 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/door/firedoor, /obj/machinery/door/airlock/security{ - name = "Execution Room"; - req_access = null; + name = "Prisoner Re-education Centre"; req_access_txt = "1" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -20813,6 +19651,7 @@ }, /obj/machinery/atmospherics/pipe/simple/visible/green, /obj/machinery/computer/general_air_control/large_tank_control{ + dir = 4; frequency = 1441; input_tag = "co2_in"; name = "Carbon Dioxide Supply Control"; @@ -20913,11 +19752,11 @@ "aYH" = ( /obj/structure/table/reinforced, /obj/item/wrench, +/obj/item/tank/internals/emergency_oxygen/engi, +/obj/effect/decal/warning_stripes/yellow/hollow, /obj/machinery/newscaster{ pixel_x = 32 }, -/obj/item/tank/internals/emergency_oxygen/engi, -/obj/effect/decal/warning_stripes/yellow/hollow, /turf/simulated/floor/plasteel{ dir = 5; icon_state = "caution" @@ -20936,6 +19775,11 @@ dir = 8 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralfull" @@ -20996,8 +19840,7 @@ /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /obj/structure/disposalpipe/segment{ dir = 4; @@ -21015,8 +19858,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -21040,14 +19882,12 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /obj/effect/decal/warning_stripes/yellow, /obj/structure/disposalpipe/sortjunction{ @@ -21064,8 +19904,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/effect/decal/warning_stripes/yellow, /obj/structure/disposalpipe/segment{ @@ -21079,8 +19918,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/door/airlock/maintenance{ req_access_txt = "12" @@ -21094,8 +19932,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -21116,8 +19953,7 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/effect/landmark{ name = "lightsout" @@ -21147,7 +19983,7 @@ dir = 4 }, /turf/simulated/floor/plasteel{ - icon_state = "redyellowfull" + icon_state = "bar" }, /area/crew_quarters/bar) "aZc" = ( @@ -21160,7 +19996,7 @@ }, /obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ - icon_state = "redyellowfull" + icon_state = "bar" }, /area/crew_quarters/bar) "aZd" = ( @@ -21174,20 +20010,13 @@ }, /area/hallway/primary/fore) "aZe" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2"; - tag = "" +/obj/structure/disposalpipe/segment{ + dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "neutralfull" + icon_state = "dark" }, -/area/hallway/primary/fore) +/area/bridge) "aZf" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/glass, @@ -21308,7 +20137,10 @@ id = "Cell 3"; pixel_x = -22 }, -/turf/simulated/floor/plating, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "red" + }, /area/security/permabrig) "aZs" = ( /obj/machinery/door/firedoor, @@ -21353,8 +20185,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ @@ -21436,8 +20267,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -21467,37 +20297,28 @@ }, /area/security/permabrig) "aZH" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2"; - tag = "" - }, /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /turf/simulated/floor/plasteel{ icon_state = "redcorner" }, /area/security/permabrig) "aZI" = ( -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8"; - tag = "" - }, /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, /turf/simulated/floor/plasteel{ icon_state = "redcorner" }, @@ -21506,16 +20327,12 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/cable{ - d1 = 1; + d1 = 4; d2 = 8; - icon_state = "1-8" - }, -/obj/structure/sign/greencross{ - pixel_y = 32 + icon_state = "4-8" }, /turf/simulated/floor/plasteel{ icon_state = "redcorner" @@ -21525,8 +20342,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/door_control{ desc = "A remote control-switch to lock down the prison wing's blast doors"; @@ -21547,8 +20363,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/status_display{ pixel_y = 32 @@ -21561,8 +20376,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -21581,14 +20395,12 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/machinery/status_display{ pixel_y = 32 @@ -21601,8 +20413,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/cable{ d1 = 1; @@ -21619,14 +20430,12 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/machinery/flasher_button{ id = "Cell 2"; @@ -21647,14 +20456,12 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/machinery/status_display{ pixel_y = 32 @@ -21671,14 +20478,12 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/machinery/firealarm{ pixel_y = 24 @@ -21704,14 +20509,12 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/machinery/door/airlock/security/glass{ name = "Prison Wing"; @@ -21731,8 +20534,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/effect/decal/warning_stripes/east, /turf/simulated/floor/plasteel, @@ -21753,9 +20555,8 @@ dir = 4; pixel_x = 28 }, -/obj/structure/chair/stool/bar, /turf/simulated/floor/plasteel{ - icon_state = "redyellowfull" + icon_state = "bar" }, /area/crew_quarters/bar) "baa" = ( @@ -21783,8 +20584,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/effect/decal/warning_stripes/yellow, /turf/simulated/floor/plasteel, @@ -21815,8 +20615,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/door/firedoor, /obj/machinery/door/airlock/mining/glass{ @@ -21848,8 +20647,8 @@ dir = 8 }, /obj/machinery/atmospherics/trinary/filter{ - filter_type = "co2"; - name = "co2 filter"; + filter_type = 3; + name = "Gas filter (CO2 tank)"; on = 1 }, /turf/simulated/floor/plasteel{ @@ -21861,7 +20660,6 @@ /obj/machinery/atmospherics/unary/portables_connector{ dir = 4 }, -/obj/machinery/portable_atmospherics/canister, /obj/effect/decal/warning_stripes/yellow/hollow, /turf/simulated/floor/plasteel{ dir = 8; @@ -21902,8 +20700,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -21921,6 +20718,11 @@ "bau" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralfull" @@ -21938,20 +20740,6 @@ icon_state = "dark" }, /area/construction/hallway) -"baw" = ( -/obj/machinery/atmospherics/trinary/mixer{ - dir = 1; - name = "air mixer"; - node1_concentration = 0.8; - node2_concentration = 0.2; - on = 1; - target_pressure = 4500 - }, -/turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "neutralfull" - }, -/area/atmos) "bax" = ( /obj/structure/window/reinforced{ dir = 4 @@ -22034,8 +20822,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -22048,8 +20835,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/door/airlock/maintenance{ name = "Hydroponics Maintenance"; @@ -22094,8 +20880,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/door/firedoor, /obj/effect/decal/warning_stripes/south, @@ -22135,7 +20920,6 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 4 }, -/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "neutral" @@ -22143,23 +20927,22 @@ /area/security/permabrig) "baQ" = ( /obj/structure/sink/kitchen{ - pixel_y = 30 + pixel_y = 25 }, /obj/effect/decal/warning_stripes/southwest, /turf/simulated/floor/plasteel, /area/crew_quarters/kitchen) "baR" = ( +/obj/item/twohanded/required/kirbyplants, /obj/machinery/newscaster{ pixel_x = -32 }, -/obj/item/twohanded/required/kirbyplants, /turf/simulated/floor/plasteel{ - icon_state = "redyellowfull" + icon_state = "bar" }, /area/crew_quarters/bar) "baS" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 10 }, @@ -22174,7 +20957,7 @@ dir = 1 }, /turf/simulated/floor/plasteel{ - icon_state = "redyellowfull" + icon_state = "bar" }, /area/crew_quarters/bar) "baU" = ( @@ -22252,7 +21035,9 @@ }, /area/quartermaster/office) "bbb" = ( -/obj/machinery/computer/supplycomp, +/obj/machinery/computer/supplycomp{ + dir = 4 + }, /turf/simulated/floor/plasteel{ icon_state = "brown" }, @@ -22279,14 +21064,14 @@ pixel_x = -4; pixel_y = 4 }, -/obj/machinery/newscaster{ - layer = 3.3; - pixel_y = -27 - }, /obj/item/radio/intercom{ dir = 4; pixel_x = 28 }, +/obj/machinery/newscaster{ + layer = 3.3; + pixel_y = -27 + }, /turf/simulated/floor/plasteel{ dir = 6; icon_state = "brown" @@ -22303,10 +21088,8 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, -/obj/machinery/hologram/holopad, /obj/effect/landmark/start{ name = "Quartermaster" }, @@ -22317,6 +21100,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/machinery/hologram/holopad, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralfull" @@ -22333,8 +21117,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/door/firedoor, /obj/machinery/door/airlock/mining/glass{ @@ -22355,7 +21138,6 @@ d2 = 8; icon_state = "1-8" }, -/obj/machinery/hologram/holopad, /obj/effect/decal/warning_stripes/yellow/hollow, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -22363,6 +21145,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/machinery/hologram/holopad, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralfull" @@ -22401,8 +21184,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/cable{ d1 = 1; @@ -22421,8 +21203,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/manifold/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -22437,8 +21218,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -22460,14 +21240,12 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 1 @@ -22481,17 +21259,12 @@ }, /area/security/permabrig) "bbs" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2"; - tag = "" +/obj/machinery/light/small{ + dir = 1 }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, /turf/simulated/floor/plasteel{ dir = 1; - icon_state = "redcorner" + icon_state = "red" }, /area/security/permabrig) "bbt" = ( @@ -22528,8 +21301,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -22761,15 +21533,13 @@ /turf/simulated/floor/plasteel, /area/atmos) "bbV" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2"; - tag = "" - }, /obj/effect/landmark/start{ name = "Life Support Specialist" }, +/obj/machinery/atmospherics/pipe/simple/visible/cyan, +/obj/machinery/atmospherics/pipe/simple/visible/yellow{ + dir = 4 + }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralfull" @@ -22786,6 +21556,7 @@ }, /obj/machinery/atmospherics/pipe/simple/visible/green, /obj/machinery/computer/general_air_control/large_tank_control{ + dir = 8; frequency = 1441; input_tag = "o2_in"; name = "Oxygen Supply Control"; @@ -22838,8 +21609,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/effect/decal/warning_stripes/yellow/hollow, /obj/structure/disposalpipe/segment, @@ -22870,10 +21640,8 @@ /turf/simulated/floor/plasteel, /area/hydroponics) "bci" = ( -/obj/item/radio/intercom{ - pixel_y = 28 - }, /obj/effect/decal/warning_stripes/yellow/hollow, +/obj/machinery/vending/hydrodrobe, /turf/simulated/floor/plasteel, /area/hydroponics) "bcj" = ( @@ -22881,6 +21649,9 @@ /obj/item/wrench, /obj/item/clothing/suit/apron, /obj/effect/decal/warning_stripes/yellow/hollow, +/obj/item/radio/intercom{ + pixel_y = 28 + }, /turf/simulated/floor/plasteel, /area/hydroponics) "bck" = ( @@ -22918,8 +21689,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/effect/decal/warning_stripes/yellow, /turf/simulated/floor/plasteel{ @@ -22928,8 +21698,15 @@ }, /area/crew_quarters/sleep) "bcn" = ( -/obj/structure/plasticflaps, /obj/effect/decal/warning_stripes/yellow, +/obj/structure/plasticflaps{ + opacity = 1 + }, +/obj/machinery/navbeacon{ + codes_txt = "delivery"; + dir = 4; + location = "Kitchen" + }, /turf/simulated/floor/plasteel, /area/crew_quarters/kitchen) "bcp" = ( @@ -22964,7 +21741,7 @@ c_tag = "Kitchen Backroom" }, /obj/structure/sink/kitchen{ - pixel_y = 30 + pixel_y = 25 }, /obj/effect/decal/warning_stripes/southeast, /turf/simulated/floor/plasteel, @@ -22995,16 +21772,11 @@ /turf/simulated/floor/plasteel, /area/crew_quarters/bar) "bcx" = ( -/obj/structure/table/reinforced, -/obj/item/reagent_containers/food/condiment/saltshaker, -/obj/item/reagent_containers/food/drinks/britcup, /obj/machinery/door/firedoor, -/obj/machinery/door/window{ - dir = 2; +/obj/machinery/door/airlock/public/glass{ name = "Kitchen"; req_access_txt = "28" }, -/obj/effect/decal/warning_stripes/yellow, /turf/simulated/floor/plasteel, /area/crew_quarters/kitchen) "bcy" = ( @@ -23015,6 +21787,7 @@ dir = 10 }, /obj/machinery/computer/general_air_control/large_tank_control{ + dir = 8; frequency = 1443; input_tag = "air_in"; name = "Mixed Air Supply Control"; @@ -23028,8 +21801,8 @@ }, /area/atmos) "bcz" = ( -/obj/structure/closet/chefcloset, /obj/effect/decal/warning_stripes/yellow/hollow, +/obj/machinery/vending/chefdrobe, /turf/simulated/floor/plasteel{ icon_state = "freezerfloor" }, @@ -23137,11 +21910,12 @@ /area/quartermaster/storage) "bcL" = ( /obj/machinery/light, +/obj/effect/decal/warning_stripes/yellow/hollow, +/obj/machinery/vending/cargodrobe, /obj/machinery/newscaster{ layer = 3.3; pixel_y = -27 }, -/obj/effect/decal/warning_stripes/yellow/hollow, /turf/simulated/floor/plasteel{ icon_state = "purple" }, @@ -23150,8 +21924,8 @@ /obj/machinery/light{ dir = 1 }, -/obj/machinery/computer/supplycomp/public, /obj/effect/decal/warning_stripes/yellow/hollow, +/obj/machinery/computer/supplycomp/public, /turf/simulated/floor/plasteel{ dir = 5; icon_state = "brown" @@ -23181,15 +21955,11 @@ "bcP" = ( /turf/simulated/wall, /area/hallway/primary/port) -"bcU" = ( -/obj/structure/table/reinforced, -/obj/item/folder/red, -/obj/item/pen, -/turf/simulated/floor/plasteel, -/area/security/permabrig) "bcV" = ( -/obj/machinery/recharger, -/obj/structure/table/reinforced, +/obj/structure/rack, +/obj/item/clothing/suit/straight_jacket, +/obj/item/clothing/mask/muzzle, +/obj/item/clothing/glasses/sunglasses/blindfold, /turf/simulated/floor/plasteel, /area/security/permabrig) "bcW" = ( @@ -23202,8 +21972,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/door/firedoor, @@ -23220,6 +21989,11 @@ opacity = 0 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, /turf/simulated/floor/plasteel, /area/security/permabrig) "bcY" = ( @@ -23238,8 +22012,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/closet/secure_closet/brig, /turf/simulated/floor/plasteel{ @@ -23250,8 +22023,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel, @@ -23303,8 +22075,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/table, /obj/item/restraints/handcuffs, @@ -23415,8 +22186,8 @@ /obj/structure/window/reinforced, /obj/machinery/atmospherics/trinary/filter{ dir = 1; - filter_type = "o2"; - name = "oxygen filter"; + filter_type = 1; + name = "Gas filter (O2 tank)"; on = 1 }, /turf/simulated/floor/plasteel{ @@ -23472,8 +22243,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 5 @@ -23487,8 +22257,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -23502,14 +22271,12 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -23523,8 +22290,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 6 @@ -23541,8 +22307,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -23559,8 +22324,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/effect/decal/warning_stripes/yellow, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -23575,8 +22339,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/door/airlock/glass{ name = "Hydroponics"; @@ -23594,14 +22357,12 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, /obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, @@ -23636,8 +22397,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/door/airlock/freezer{ req_access_txt = "28" @@ -23656,8 +22416,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/effect/decal/warning_stripes/yellow, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -23674,8 +22433,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -23691,8 +22449,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/effect/landmark/start{ name = "Chef" @@ -23708,8 +22465,7 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 9 @@ -23754,11 +22510,18 @@ }, /area/crew_quarters/kitchen) "bdR" = ( -/obj/structure/sink/kitchen{ - pixel_y = 30 +/obj/structure/table/reinforced, +/obj/machinery/door/window{ + dir = 2; + name = "Kitchen"; + req_access_txt = "28" }, +/obj/item/reagent_containers/food/drinks/britcup, +/obj/item/reagent_containers/food/condiment/saltshaker, +/obj/effect/decal/warning_stripes/yellow, +/obj/machinery/door/firedoor, /turf/simulated/floor/plasteel{ - icon_state = "redfull" + icon_state = "bar" }, /area/crew_quarters/kitchen) "bdS" = ( @@ -23777,7 +22540,9 @@ req_access_txt = "28" }, /obj/effect/decal/warning_stripes/yellow, -/turf/simulated/floor/plasteel, +/turf/simulated/floor/plasteel{ + icon_state = "bar" + }, /area/crew_quarters/kitchen) "bdU" = ( /turf/simulated/wall, @@ -23835,6 +22600,7 @@ /area/construction/hallway) "bea" = ( /obj/effect/decal/warning_stripes/yellow/hollow, +/obj/machinery/hologram/holopad, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralfull" @@ -23914,8 +22680,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ @@ -23924,10 +22689,10 @@ }, /area/quartermaster/miningdock) "bel" = ( +/obj/effect/decal/warning_stripes/yellow, /obj/structure/plasticflaps{ opacity = 1 }, -/obj/effect/decal/warning_stripes/yellow, /turf/simulated/floor/plasteel, /area/quartermaster/miningdock) "bem" = ( @@ -23975,8 +22740,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/door/firedoor, /obj/machinery/door/airlock/mining{ @@ -23990,8 +22754,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/effect/decal/warning_stripes/yellow, @@ -24057,6 +22820,7 @@ }, /obj/machinery/atmospherics/pipe/simple/visible/green, /obj/machinery/computer/general_air_control/large_tank_control{ + dir = 4; frequency = 1441; input_tag = "tox_in"; name = "Toxin Supply Control"; @@ -24069,7 +22833,9 @@ }, /area/atmos) "beI" = ( -/obj/machinery/computer/secure_data, +/obj/machinery/computer/secure_data{ + dir = 8 + }, /turf/simulated/floor/plasteel{ icon_state = "grimy" }, @@ -24110,11 +22876,11 @@ /obj/machinery/light{ dir = 4 }, -/obj/structure/closet/wardrobe/atmospherics_yellow, /obj/effect/decal/warning_stripes/yellow/hollow, /obj/structure/closet/fireaxecabinet{ pixel_x = 30 }, +/obj/machinery/vending/atmosdrobe, /turf/simulated/floor/plasteel{ dir = 6; icon_state = "caution" @@ -24128,19 +22894,15 @@ /turf/simulated/floor/plasteel, /area/atmos) "beP" = ( -/obj/machinery/atmospherics/pipe/simple/visible/yellow{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/manifold/visible/yellow, /obj/effect/decal/warning_stripes/east, /turf/simulated/floor/plasteel, /area/atmos) "beQ" = ( -/obj/machinery/atmospherics/binary/pump{ - dir = 8; - name = "N2 to Pure"; - target_pressure = 101 - }, /obj/machinery/atmospherics/pipe/simple/visible/green, +/obj/machinery/atmospherics/pipe/simple/visible/yellow{ + dir = 4 + }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "vault" @@ -24230,16 +22992,22 @@ /turf/simulated/floor/plasteel, /area/hydroponics) "bfb" = ( -/obj/structure/plasticflaps, /obj/effect/decal/warning_stripes/yellow, +/obj/structure/plasticflaps{ + opacity = 1 + }, +/obj/machinery/navbeacon{ + codes_txt = "delivery"; + dir = 8; + location = "Hydroponics" + }, /turf/simulated/floor/plasteel, /area/hydroponics) "bfc" = ( /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/effect/decal/warning_stripes/yellow, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -24302,11 +23070,11 @@ }, /area/crew_quarters/kitchen) "bfj" = ( +/obj/structure/closet/secure_closet/freezer/fridge, +/obj/effect/decal/warning_stripes/yellow, /obj/machinery/newscaster{ pixel_x = -32 }, -/obj/structure/closet/secure_closet/freezer/fridge, -/obj/effect/decal/warning_stripes/yellow, /turf/simulated/floor/plasteel{ icon_state = "redfull" }, @@ -24326,7 +23094,9 @@ req_access_txt = "28" }, /obj/effect/decal/warning_stripes/yellow, -/turf/simulated/floor/plasteel, +/turf/simulated/floor/plasteel{ + icon_state = "bar" + }, /area/crew_quarters/kitchen) "bfm" = ( /obj/machinery/kitchen_machine/oven, @@ -24350,7 +23120,9 @@ req_access_txt = "28" }, /obj/effect/decal/warning_stripes/yellow, -/turf/simulated/floor/plasteel, +/turf/simulated/floor/plasteel{ + icon_state = "bar" + }, /area/crew_quarters/kitchen) "bfp" = ( /obj/machinery/door/firedoor, @@ -24395,8 +23167,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/visible/cyan, /turf/simulated/floor/plasteel{ @@ -24432,8 +23203,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/door/firedoor, /obj/effect/decal/warning_stripes/yellow, @@ -24486,8 +23256,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ @@ -24557,20 +23326,14 @@ /turf/simulated/floor/plasteel, /area/engine/gravitygenerator) "bfR" = ( -/obj/structure/cable{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, -/obj/structure/table/glass, /obj/machinery/alarm{ dir = 4; pixel_x = -24 }, +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, /turf/simulated/floor/plasteel{ dir = 9; icon_state = "whitered" @@ -24612,14 +23375,12 @@ /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/effect/decal/warning_stripes/north, @@ -24630,8 +23391,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/effect/decal/warning_stripes/north, /turf/simulated/floor/plasteel, @@ -24640,8 +23400,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/effect/decal/warning_stripes/west, /obj/machinery/door/airlock/security{ @@ -24662,8 +23421,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/closet/l3closet/security, /obj/effect/decal/cleanable/dirt, @@ -24689,8 +23447,7 @@ dir = 8 }, /obj/machinery/atmospherics/trinary/filter{ - filter_type = "plasma"; - name = "waste filter"; + name = "Gas filter (Toxins tank)"; on = 1 }, /turf/simulated/floor/plasteel{ @@ -24740,7 +23497,7 @@ /area/atmos) "bgg" = ( /obj/machinery/atmospherics/pipe/simple/visible/cyan{ - dir = 5 + dir = 4 }, /turf/simulated/floor/plasteel{ dir = 8; @@ -24774,7 +23531,10 @@ }, /area/atmos) "bgj" = ( -/obj/machinery/atmospherics/pipe/manifold4w/visible/yellow, +/obj/machinery/atmospherics/pipe/simple/visible/yellow, +/obj/machinery/atmospherics/pipe/simple/visible/yellow{ + dir = 4 + }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "dark" @@ -24833,8 +23593,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/door/firedoor, /obj/machinery/door/airlock/glass{ @@ -24859,11 +23618,11 @@ }, /area/crew_quarters/kitchen) "bgv" = ( -/obj/machinery/hologram/holopad, /obj/effect/landmark/start{ name = "Chef" }, /obj/effect/decal/warning_stripes/yellow/hollow, +/obj/machinery/hologram/holopad, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -24872,8 +23631,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/door/firedoor, /obj/effect/decal/warning_stripes/yellow, @@ -25012,8 +23770,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ @@ -25065,8 +23822,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel, @@ -25136,12 +23892,6 @@ /obj/item/clothing/accessory/stethoscope, /obj/item/storage/belt/medical, /obj/item/clothing/glasses/hud/health, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2"; - tag = "" - }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "whitered" @@ -25149,28 +23899,41 @@ /area/security/medbay) "bhc" = ( /obj/structure/sink{ - pixel_y = 26 + pixel_y = 25 }, /obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "whitered" }, /area/security/medbay) "bhd" = ( +/obj/machinery/power/apc{ + dir = 1; + name = "north bump"; + pixel_x = 24 + }, +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "whitered" }, /area/security/medbay) "bhf" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/machinery/photocopier/faxmachine/longrange{ department = "Magistrate's Office" }, /obj/structure/table/wood, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ icon_state = "cult" }, @@ -25179,8 +23942,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/door/firedoor, @@ -25232,6 +23994,7 @@ icon_state = "0-2" }, /obj/machinery/power/apc{ + cell_type = 25000; dir = 1; name = "north bump"; pixel_y = 24 @@ -25282,6 +24045,7 @@ }, /obj/machinery/atmospherics/pipe/simple/visible/green, /obj/machinery/computer/general_air_control/large_tank_control{ + dir = 8; frequency = 1441; input_tag = "n2_in"; name = "Nitrogen Supply Control"; @@ -25294,9 +24058,7 @@ }, /area/atmos) "bhr" = ( -/obj/machinery/atmospherics/binary/valve/open{ - name = "SM Coolant loop" - }, +/obj/machinery/atmospherics/pipe/simple/visible/yellow, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "dark" @@ -25375,10 +24137,10 @@ /obj/structure/table/glass, /obj/item/clipboard, /obj/item/toy/figure/crew/botanist, +/obj/effect/decal/warning_stripes/yellow/hollow, /obj/machinery/newscaster{ pixel_y = 32 }, -/obj/effect/decal/warning_stripes/yellow/hollow, /turf/simulated/floor/plasteel, /area/hydroponics) "bhC" = ( @@ -25405,8 +24167,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -25444,19 +24205,25 @@ }, /area/storage/primary) "bhK" = ( -/obj/item/radio/intercom{ - pixel_y = 28 +/obj/structure/sink/kitchen{ + pixel_y = 25 }, /turf/simulated/floor/plasteel{ icon_state = "white" }, /area/crew_quarters/kitchen) "bhL" = ( -/mob/living/carbon/human/monkey/punpun, -/turf/simulated/floor/plasteel{ - icon_state = "redfull" +/obj/effect/decal/warning_stripes/north, +/obj/structure/disposalpipe/segment{ + dir = 4 }, -/area/crew_quarters/kitchen) +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/plasteel, +/area/engine/engineering) "bhN" = ( /obj/structure/table/reinforced, /obj/item/reagent_containers/food/condiment/flour, @@ -25475,8 +24242,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 8 @@ -25631,8 +24397,7 @@ /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -25649,8 +24414,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -25681,8 +24445,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -25704,8 +24467,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -25723,14 +24485,12 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -25840,15 +24600,9 @@ dir = 4 }, /obj/structure/cable{ - d1 = 2; + d1 = 4; d2 = 8; - icon_state = "2-8" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "4-8" }, /turf/simulated/floor/plasteel{ dir = 8; @@ -25878,8 +24632,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -25917,14 +24670,12 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /obj/structure/closet/secure_closet/security, /turf/simulated/floor/plasteel{ @@ -25936,8 +24687,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/alarm{ pixel_y = 24 @@ -25952,8 +24702,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/light{ dir = 1; @@ -25973,13 +24722,12 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" - }, -/obj/machinery/newscaster{ - pixel_y = 32 + icon_state = "4-8" }, /obj/structure/closet/secure_closet/security, +/obj/machinery/newscaster/security_unit{ + pixel_y = 32 + }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "red" @@ -25991,7 +24739,7 @@ d2 = 8; icon_state = "1-8" }, -/obj/item/twohanded/required/kirbyplants, +/obj/machinery/vending/secdrobe, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "red" @@ -26025,7 +24773,9 @@ }, /area/security/main) "biF" = ( -/obj/machinery/computer/security, +/obj/machinery/computer/security{ + dir = 8 + }, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -26046,14 +24796,12 @@ /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/structure/cable{ d2 = 2; @@ -26205,7 +24953,6 @@ }, /area/atmos) "biU" = ( -/obj/machinery/hologram/holopad, /obj/effect/decal/warning_stripes/yellow/hollow, /obj/effect/decal/warning_stripes/yellow/hollow, /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ @@ -26218,6 +24965,7 @@ dir = 2; icon_state = "pipe-c" }, +/obj/machinery/hologram/holopad, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralfull" @@ -26230,6 +24978,11 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 9 }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralfull" @@ -26244,9 +24997,9 @@ }, /area/storage/primary) "biX" = ( -/obj/machinery/hologram/holopad, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/hologram/holopad, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "vault" @@ -26266,8 +25019,8 @@ /obj/structure/window/reinforced, /obj/machinery/atmospherics/trinary/filter{ dir = 1; - filter_type = "n2"; - name = "nitrogen filter"; + filter_type = 2; + name = "Gas filter (N2 tank)"; on = 1 }, /turf/simulated/floor/plasteel{ @@ -26308,8 +25061,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/effect/decal/cleanable/dirt, /obj/structure/disposalpipe/segment, @@ -26321,8 +25073,7 @@ "bje" = ( /obj/structure/sink{ dir = 8; - pixel_x = -12; - pixel_y = 2 + pixel_x = -12 }, /obj/machinery/alarm{ dir = 4; @@ -26410,13 +25161,12 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, -/obj/machinery/hologram/holopad, /obj/effect/decal/warning_stripes/yellow/hollow, /obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, /obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, +/obj/machinery/hologram/holopad, /turf/simulated/floor/plasteel, /area/crew_quarters/sleep) "bjo" = ( @@ -26433,7 +25183,7 @@ /area/crew_quarters/sleep) "bjp" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass{ +/obj/machinery/door/airlock/public/glass{ name = "Kitchen"; req_access_txt = "28" }, @@ -26516,8 +25266,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -26525,7 +25274,7 @@ dir = 1; icon_state = "pipe-j2s"; name = "Kitchen Junction"; - sortType = 21 + sortType = 20 }, /turf/simulated/floor/plasteel{ dir = 8; @@ -26543,7 +25292,9 @@ /area/hallway/primary/fore) "bjD" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass, +/obj/machinery/door/airlock/glass{ + name = "Primary tool storage" + }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plasteel{ @@ -26581,8 +25332,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /turf/simulated/floor/plasteel, /area/quartermaster/miningdock) @@ -26610,8 +25360,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ @@ -26673,8 +25422,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 10 @@ -26687,8 +25435,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/unary/vent_scrubber/on, /turf/simulated/floor/plasteel{ @@ -26706,30 +25453,28 @@ /obj/item/clothing/gloves/color/latex, /obj/item/healthanalyzer, /obj/item/reagent_containers/spray/cleaner, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "whitered" }, /area/security/medbay) "bka" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - tag = "" - }, -/obj/machinery/hologram/holopad, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 5 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 6 }, +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/hologram/holopad, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -26747,6 +25492,9 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -26780,6 +25528,9 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "whitered" @@ -26789,8 +25540,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/cable{ d1 = 1; @@ -26803,6 +25553,10 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "red" @@ -26812,14 +25566,12 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /turf/simulated/floor/plasteel{ dir = 8; @@ -26827,14 +25579,24 @@ }, /area/security/brig) "bkf" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/command/glass{ + name = "Bridge"; + req_access_txt = "19" + }, /obj/structure/disposalpipe/segment{ dir = 4 }, /turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "red" + dir = 8; + icon_state = "vault" }, -/area/security/brig) +/area/bridge) "bkg" = ( /obj/machinery/door/firedoor, /obj/effect/decal/warning_stripes/south, @@ -26855,8 +25617,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /turf/simulated/floor/plasteel{ dir = 8; @@ -26886,6 +25647,9 @@ dir = 4; network = list("Interrogation") }, +/obj/machinery/newscaster/security_unit{ + pixel_x = -32 + }, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -26903,24 +25667,26 @@ }, /area/security/main) "bkn" = ( -/obj/machinery/computer/secure_data, /obj/machinery/firealarm{ dir = 4; pixel_x = 24 }, +/obj/machinery/computer/secure_data{ + dir = 8 + }, /turf/simulated/floor/plasteel{ icon_state = "dark" }, /area/security/main) "bko" = ( /obj/structure/bed/dogbed, -/obj/machinery/computer/security/telescreen/entertainment{ - pixel_y = 32 - }, /obj/machinery/camera{ c_tag = "Head of Security's Office"; network = list("SS13","Security") }, +/obj/machinery/computer/security/telescreen/entertainment{ + pixel_y = 32 + }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "vault" @@ -26928,7 +25694,7 @@ /area/security/hos) "bkp" = ( /obj/structure/table/wood, -/obj/machinery/photocopier/faxmachine/longrange{ +/obj/machinery/photocopier/faxmachine{ department = "Head of Security's Office" }, /turf/simulated/floor/plasteel{ @@ -26940,8 +25706,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/table/wood, /obj/item/taperecorder, @@ -27012,6 +25777,7 @@ }, /obj/machinery/atmospherics/pipe/simple/visible/green, /obj/machinery/computer/general_air_control/large_tank_control{ + dir = 4; frequency = 1441; input_tag = "n2o_in"; name = "Nitrous Oxide Supply Control"; @@ -27060,8 +25826,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/effect/decal/warning_stripes/south, /turf/simulated/floor/plasteel, @@ -27070,8 +25835,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ @@ -27082,8 +25846,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/door/airlock/maintenance, /turf/simulated/floor/plasteel, @@ -27092,8 +25855,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/effect/decal/warning_stripes/southwestcorner, /turf/simulated/floor/plasteel, @@ -27102,14 +25864,12 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -27121,22 +25881,21 @@ /area/atmos) "bkK" = ( /obj/structure/cable{ - d1 = 4; + d1 = 1; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "1-8" }, /obj/effect/decal/warning_stripes/southeastcorner, /turf/simulated/floor/plasteel, /area/atmos) "bkL" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "neutralfull" }, -/obj/effect/decal/warning_stripes/south, -/turf/simulated/floor/plasteel, /area/atmos) "bkM" = ( /obj/effect/decal/warning_stripes/south, @@ -27154,10 +25913,13 @@ }, /area/atmos) "bkP" = ( -/obj/machinery/atmospherics/pipe/simple/visible/yellow, /obj/machinery/light/small{ dir = 4 }, +/obj/machinery/atmospherics/binary/pump{ + dir = 0; + name = "Pure to SM" + }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "dark" @@ -27230,8 +25992,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -27247,8 +26008,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/unary/vent_scrubber/on, /turf/simulated/floor/plasteel{ @@ -27256,25 +26016,26 @@ }, /area/security/permabrig) "blf" = ( +/obj/structure/foodcart, +/obj/effect/decal/warning_stripes/yellow, /obj/machinery/firealarm{ dir = 1; pixel_y = -24 }, -/obj/effect/decal/warning_stripes/yellow/hollow, /turf/simulated/floor/plasteel, /area/crew_quarters/kitchen) "blg" = ( -/obj/structure/foodcart, +/obj/machinery/light, +/obj/machinery/vending/dinnerware, /obj/effect/decal/warning_stripes/yellow, /turf/simulated/floor/plasteel, /area/crew_quarters/kitchen) "blh" = ( -/obj/machinery/light, -/obj/machinery/vending/dinnerware, +/obj/machinery/icemachine, +/obj/effect/decal/warning_stripes/yellow, /obj/machinery/status_display{ pixel_y = -32 }, -/obj/effect/decal/warning_stripes/yellow, /turf/simulated/floor/plasteel, /area/crew_quarters/kitchen) "bli" = ( @@ -27290,11 +26051,6 @@ }, /area/crew_quarters/kitchen) "blj" = ( -/obj/machinery/icemachine, -/obj/effect/decal/warning_stripes/yellow, -/turf/simulated/floor/plasteel, -/area/crew_quarters/kitchen) -"blk" = ( /obj/structure/rack, /obj/item/storage/box/donkpockets, /obj/item/storage/box/donkpockets, @@ -27302,7 +26058,7 @@ /obj/effect/decal/warning_stripes/yellow/hollow, /turf/simulated/floor/plasteel, /area/crew_quarters/kitchen) -"bll" = ( +"blk" = ( /obj/structure/table/reinforced, /obj/item/reagent_containers/food/snacks/mint, /obj/item/reagent_containers/food/condiment/enzyme, @@ -27310,6 +26066,10 @@ /obj/machinery/reagentgrinder, /turf/simulated/floor/plasteel, /area/crew_quarters/kitchen) +"bll" = ( +/obj/machinery/kitchen_machine/candy_maker, +/turf/simulated/floor/plasteel, +/area/crew_quarters/kitchen) "blm" = ( /obj/machinery/kitchen_machine/grill, /turf/simulated/floor/plasteel, @@ -27330,12 +26090,6 @@ /obj/effect/decal/warning_stripes/yellow/hollow, /turf/simulated/floor/plasteel, /area/crew_quarters/kitchen) -"blp" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plasteel{ - icon_state = "white" - }, -/area/security/medbay) "blq" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -27415,8 +26169,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/effect/decal/warning_stripes/yellow, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -27455,7 +26208,9 @@ }, /area/hallway/primary/fore) "blA" = ( -/obj/machinery/computer/merch, +/obj/machinery/computer/merch{ + dir = 1 + }, /turf/simulated/floor/plasteel{ dir = 6; icon_state = "brown" @@ -27562,8 +26317,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/door/firedoor, /obj/machinery/door/airlock/mining{ @@ -27640,14 +26394,17 @@ /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 + pixel_y = 25 }, /obj/machinery/camera{ c_tag = "Perma-Brig Garden"; network = list("SS13","Security") }, /obj/item/reagent_containers/glass/bucket, -/turf/simulated/floor/plasteel, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "red" + }, /area/security/permabrig) "blS" = ( /obj/structure/closet/secure_closet/brigdoc, @@ -27686,6 +26443,7 @@ pixel_x = -32 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "red" @@ -27695,8 +26453,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /turf/simulated/floor/plasteel{ dir = 8; @@ -27728,8 +26485,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/chair/office/dark{ dir = 4 @@ -27762,9 +26518,6 @@ }, /area/security/main) "bmd" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/structure/table/reinforced, /obj/item/paper_bin, /obj/item/pen, @@ -27806,8 +26559,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/unary/vent_pump/on, /turf/simulated/floor/plasteel{ @@ -27834,12 +26586,12 @@ /area/crew_quarters/heads/hos) "bml" = ( /obj/structure/dresser, -/obj/machinery/newscaster{ - pixel_y = 32 - }, /obj/machinery/light_switch{ pixel_x = -26 }, +/obj/machinery/newscaster{ + pixel_y = 32 + }, /turf/simulated/floor/plasteel{ icon_state = "grimy" }, @@ -27938,8 +26690,8 @@ dir = 8 }, /obj/machinery/atmospherics/trinary/filter{ - filter_type = "n2o"; - name = "n2o filter"; + filter_type = 4; + name = "Gas filter (N2O tank)"; on = 1 }, /turf/simulated/floor/plasteel{ @@ -28036,8 +26788,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/visible/purple{ dir = 4 @@ -28082,14 +26833,14 @@ }, /obj/item/grenade/chem_grenade/metalfoam, /obj/item/grenade/chem_grenade/metalfoam, -/obj/machinery/newscaster{ - pixel_y = -32 - }, /obj/machinery/atmospherics/pipe/simple/visible/purple{ dir = 4 }, /obj/effect/decal/warning_stripes/yellow/hollow, /obj/effect/decal/warning_stripes/yellow/hollow, +/obj/machinery/newscaster{ + pixel_y = -32 + }, /turf/simulated/floor/plasteel, /area/atmos) "bmK" = ( @@ -28135,9 +26886,9 @@ /turf/simulated/floor/plating, /area/atmos) "bmO" = ( +/obj/effect/decal/warning_stripes/yellow/hollow, /obj/structure/disposalpipe/trunk, /obj/machinery/disposal, -/obj/effect/decal/warning_stripes/yellow/hollow, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "red" @@ -28219,8 +26970,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/door/firedoor, /obj/machinery/door/airlock/glass{ @@ -28371,8 +27121,7 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /turf/simulated/floor/plating, /area/security/prisonershuttle) @@ -28388,35 +27137,27 @@ }, /area/security/brig) "bnq" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 + icon_state = "1-2" }, /obj/structure/cable{ d1 = 2; - d2 = 4; - icon_state = "2-4"; - tag = "" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 + d2 = 8; + icon_state = "2-8" }, /turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "neutralfull" + icon_state = "white" }, -/area/security/brig) +/area/security/medbay) "bnr" = ( /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -28424,12 +27165,12 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ icon_state = "redcorner" }, /area/security/brig) "bnt" = ( -/obj/structure/disposalpipe/segment, /obj/structure/cable{ d2 = 4; icon_state = "0-4" @@ -28439,6 +27180,7 @@ name = "west bump"; pixel_x = -24 }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "red" @@ -28448,14 +27190,12 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /turf/simulated/floor/plasteel{ dir = 8; @@ -28489,8 +27229,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/cable{ d2 = 2; @@ -28516,8 +27255,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/table/wood, /obj/item/flashlight/lamp, @@ -28527,7 +27265,9 @@ }, /area/security/hos) "bnI" = ( -/obj/machinery/computer/card/minor/hos, +/obj/machinery/computer/card/minor/hos{ + dir = 8 + }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "vault" @@ -28540,7 +27280,9 @@ }, /area/crew_quarters/heads/hos) "bnL" = ( -/obj/machinery/computer/prisoner, +/obj/machinery/computer/prisoner{ + dir = 8 + }, /turf/simulated/floor/plasteel{ icon_state = "grimy" }, @@ -28663,8 +27405,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -28742,9 +27483,9 @@ }, /area/tcommsat/chamber) "boi" = ( -/obj/machinery/hologram/holopad, /obj/effect/decal/warning_stripes/yellow/hollow, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/hologram/holopad, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralfull" @@ -28776,8 +27517,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, /obj/machinery/atmospherics/pipe/manifold/hidden/supply, @@ -28864,8 +27604,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/manifold/hidden/supply, /obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, @@ -28960,8 +27699,7 @@ /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -28973,6 +27711,9 @@ dir = 4; icon_state = "pipe-c" }, +/obj/machinery/newscaster{ + pixel_y = 32 + }, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "neutralcorner" @@ -28982,11 +27723,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 10 @@ -28994,6 +27731,9 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "neutralcorner" @@ -29007,8 +27747,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/disposalpipe/segment{ dir = 4 @@ -29019,8 +27758,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/effect/decal/warning_stripes/yellow, /obj/structure/disposalpipe/segment, @@ -29046,11 +27784,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 + icon_state = "4-8" }, /obj/machinery/door/airlock/maintenance{ name = "Mining Maintenance"; @@ -29065,15 +27799,13 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/filingcabinet/filingcabinet, /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /turf/simulated/floor/plasteel{ dir = 1; @@ -29091,12 +27823,10 @@ }, /area/security/prisonershuttle) "boN" = ( -/obj/machinery/computer/security{ - network = list("SS13","Mining Outpost") - }, /obj/item/radio/intercom{ pixel_y = 28 }, +/obj/machinery/computer/security, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "red" @@ -29106,11 +27836,11 @@ /obj/machinery/ai_status_display{ pixel_y = 32 }, -/obj/machinery/computer/secure_data, /obj/machinery/camera{ c_tag = "Labour Camp Access"; network = list("SS13","Security") }, +/obj/machinery/computer/secure_data, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "red" @@ -29131,26 +27861,19 @@ }, /area/security/prisonershuttle) "boR" = ( -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "red" }, /area/security/brig) "boS" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/effect/landmark{ name = "lightsout" @@ -29161,24 +27884,19 @@ }, /area/security/brig) "boT" = ( -/obj/structure/disposalpipe/segment, /obj/structure/disposalpipe/segment{ dir = 4 }, /turf/simulated/floor/plasteel{ dir = 8; - icon_state = "red" + icon_state = "vault" }, -/area/security/main) +/area/bridge) "boU" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/chair/office/dark{ dir = 4 @@ -29193,9 +27911,6 @@ }, /area/security/main) "boV" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/structure/table/reinforced, /obj/item/storage/secure/briefcase, /turf/simulated/floor/plasteel{ @@ -29209,8 +27924,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /turf/simulated/floor/plasteel{ dir = 9; @@ -29218,9 +27932,6 @@ }, /area/security/prisonershuttle) "boX" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/structure/table/reinforced, /obj/item/reagent_containers/food/snacks/donut/jelly/cherryjelly, /turf/simulated/floor/plasteel{ @@ -29229,9 +27940,6 @@ }, /area/security/main) "boY" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/machinery/photocopier, /turf/simulated/floor/plasteel{ dir = 8; @@ -29239,44 +27947,39 @@ }, /area/security/main) "boZ" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "red" }, /area/security/main) "bpa" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 }, /turf/simulated/floor/plasteel{ icon_state = "dark" }, /area/security/main) "bpb" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/cable{ d1 = 1; @@ -29286,47 +27989,46 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/machinery/door/airlock/command/glass{ name = "Head of Security"; req_access_txt = "58" }, /obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ icon_state = "grimy" }, /area/security/hos) "bpc" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 }, /turf/simulated/floor/plasteel{ icon_state = "grimy" }, /area/security/hos) "bpd" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 }, /obj/machinery/hologram/holopad, /turf/simulated/floor/plasteel{ @@ -29334,14 +28036,10 @@ }, /area/security/hos) "bpe" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/cable{ d1 = 1; @@ -29351,26 +28049,24 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/structure/table/wood, /obj/item/folder/red, /obj/item/stamp/hos, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ icon_state = "grimy" }, /area/security/hos) "bpf" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/chair/comfy/brown{ dir = 8 @@ -29378,20 +28074,22 @@ /obj/effect/landmark/start{ name = "Head of Security" }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ icon_state = "grimy" }, /area/security/hos) "bpg" = ( -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" - }, /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" }, /turf/simulated/floor/plasteel{ icon_state = "grimy" @@ -29401,8 +28099,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /turf/simulated/floor/plasteel{ dir = 1; @@ -29453,7 +28150,9 @@ icon_state = "4-8"; tag = "" }, -/obj/machinery/computer/crew, +/obj/machinery/computer/crew{ + dir = 8 + }, /turf/simulated/floor/plasteel{ icon_state = "grimy" }, @@ -29702,8 +28401,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/binary/pump{ dir = 4; @@ -29782,8 +28480,7 @@ /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /obj/machinery/light/small{ dir = 1 @@ -29801,8 +28498,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/disposalpipe/segment{ dir = 4 @@ -29816,8 +28512,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/effect/decal/warning_stripes/yellow, /obj/structure/disposalpipe/segment{ @@ -29829,8 +28524,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/effect/decal/cleanable/dirt, /obj/structure/disposalpipe/segment{ @@ -29842,8 +28536,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/disposalpipe/segment{ dir = 4 @@ -29857,8 +28550,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/effect/decal/cleanable/dirt, /obj/structure/disposalpipe/segment{ @@ -29873,8 +28565,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/effect/decal/cleanable/dirt, /obj/machinery/light/small, @@ -29887,8 +28578,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/disposalpipe/segment{ dir = 4 @@ -29899,8 +28589,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/disposalpipe/segment{ dir = 4 @@ -29916,8 +28605,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/disposalpipe/junction{ dir = 8; @@ -29927,10 +28615,10 @@ /area/maintenance/fore) "bqh" = ( /obj/machinery/hydroponics/constructable, +/obj/effect/decal/warning_stripes/yellow, /obj/machinery/newscaster{ pixel_x = -32 }, -/obj/effect/decal/warning_stripes/yellow, /turf/simulated/floor/plasteel, /area/hydroponics) "bqi" = ( @@ -29982,14 +28670,12 @@ /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 8 @@ -30019,8 +28705,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 1 @@ -30044,13 +28729,12 @@ dir = 1; icon_state = "neutralcorner" }, -/area/bridge/meeting_room) +/area/hallway/primary/central/south) "bqs" = ( /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/navbeacon{ codes_txt = "patrol;next_patrol=hall2"; @@ -30078,14 +28762,15 @@ /obj/effect/landmark{ name = "lightsout" }, -/obj/machinery/navbeacon{ - codes_txt = "patrol;next_patrol=hall15"; - location = "hall14" - }, /obj/structure/disposalpipe/segment{ dir = 1; icon_state = "pipe-c" }, +/obj/machinery/hologram/holopad, +/obj/machinery/navbeacon{ + codes_txt = "patrol;next_patrol=hall15"; + location = "hall14" + }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralfull" @@ -30095,8 +28780,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /turf/simulated/floor/plasteel{ dir = 8; @@ -30108,15 +28792,15 @@ dir = 4 }, /turf/simulated/floor/plasteel{ - icon_state = "neutralcorner" + dir = 8; + icon_state = "bluecorner" }, /area/hallway/primary/central) "bqx" = ( /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 1 @@ -30145,27 +28829,25 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 4 }, -/obj/machinery/navbeacon{ - codes_txt = "patrol;next_patrol=hall14"; - location = "hall13" - }, /obj/structure/disposalpipe/sortjunction{ dir = 8; name = "Quartermaster Junction"; sortType = 3 }, +/obj/machinery/navbeacon{ + codes_txt = "patrol;next_patrol=hall14"; + location = "hall13" + }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralfull" @@ -30193,11 +28875,8 @@ /turf/simulated/wall/rust, /area/maintenance/starboard) "bqJ" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/hologram/holopad, /obj/effect/decal/warning_stripes/yellow/hollow, +/obj/machinery/hologram/holopad, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralfull" @@ -30207,8 +28886,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /turf/simulated/floor/plasteel, /area/security/prisonershuttle) @@ -30237,34 +28915,28 @@ }, /area/security/prisonershuttle) "bqQ" = ( -/obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 8 }, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 8 }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "red" }, /area/security/brig) "bqR" = ( -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -30272,20 +28944,20 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralfull" }, /area/security/brig) "bqS" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -30293,20 +28965,19 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "red" }, /area/security/brig) "bqT" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -30318,8 +28989,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/cable{ d1 = 1; @@ -30330,28 +29000,30 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ icon_state = "redfull"; tag = null }, /area/security/main) "bqU" = ( -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, /turf/simulated/floor/plasteel{ dir = 10; icon_state = "red" @@ -30364,8 +29036,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/cable{ d1 = 1; @@ -30388,8 +29059,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -30414,8 +29084,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -30431,8 +29100,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -30451,6 +29119,7 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 1 }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ dir = 6; icon_state = "red" @@ -30473,8 +29142,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/cable, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -30489,8 +29157,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -30520,8 +29187,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 1 @@ -30537,24 +29203,24 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/machinery/computer/security{ - network = list("SS13","Mining Outpost") - }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/machinery/computer/security{ + dir = 1 + }, /turf/simulated/floor/plasteel{ icon_state = "grimy" }, /area/security/hos) "bri" = ( -/obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ icon_state = "grimy" }, @@ -30563,10 +29229,12 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/machinery/computer/prisoner, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/machinery/computer/prisoner{ + dir = 8 + }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "vault" @@ -30657,9 +29325,7 @@ /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 1 }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/library) "bru" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on, @@ -30669,9 +29335,7 @@ "brv" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/library) "brw" = ( /obj/structure/lattice, @@ -30702,8 +29366,7 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/machinery/atmospherics/pipe/simple/hidden{ dir = 5 @@ -30869,14 +29532,13 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, +/obj/structure/disposalpipe/segment, /obj/machinery/navbeacon{ codes_txt = "patrol;next_patrol=engi3"; location = "engi2" }, -/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralfull" @@ -30899,8 +29561,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/effect/decal/cleanable/dirt, /obj/structure/disposalpipe/segment, @@ -30964,18 +29625,20 @@ }, /area/hallway/primary/central) "bsg" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/light, /turf/simulated/floor/plasteel{ - icon_state = "neutralcorner" + dir = 8; + icon_state = "neutralfull" }, /area/hallway/primary/central) "bsh" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 1 }, @@ -31073,8 +29736,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/cable{ d2 = 4; @@ -31093,41 +29755,36 @@ /turf/simulated/floor/plasteel, /area/quartermaster/miningdock) "bsD" = ( -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" }, /turf/simulated/floor/plasteel, /area/security/prisonershuttle) "bsE" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/structure/table/reinforced, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 6 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "vault" }, /area/security/prisonershuttle) "bsF" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/structure/table/reinforced, /obj/item/phone, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -31136,20 +29793,19 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 5 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "vault" }, /area/security/prisonershuttle) "bsG" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -31157,26 +29813,24 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "red" }, /area/security/prisonershuttle) "bsH" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /obj/machinery/door/airlock/security/glass{ name = "Labor Camp Office"; @@ -31189,20 +29843,18 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ icon_state = "redfull" }, /area/security/prisonershuttle) "bsI" = ( -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 4 @@ -31210,6 +29862,11 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 4 }, +/obj/structure/disposalpipe/sortjunction{ + dir = 8; + name = "Brig Physisian Junction"; + sortType = 24 + }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "red" @@ -31225,6 +29882,7 @@ req_access_txt = "63"; req_one_access_txt = null }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -31251,8 +29909,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /turf/simulated/floor/plasteel{ icon_state = "grimy" @@ -31262,8 +29919,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 1 @@ -31295,9 +29951,6 @@ /area/security/hos) "bsY" = ( /obj/structure/table/wood, -/obj/machinery/newscaster{ - pixel_x = 32 - }, /obj/structure/extinguisher_cabinet{ pixel_x = 28; pixel_y = -30 @@ -31306,6 +29959,9 @@ pixel_y = -32 }, /obj/machinery/computer/med_data/laptop, +/obj/machinery/newscaster{ + pixel_x = 32 + }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "vault" @@ -31315,11 +29971,12 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/effect/decal/warning_stripes/west, -/obj/machinery/computer/shuttle/labor, +/obj/machinery/computer/shuttle/labor{ + dir = 4 + }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "red" @@ -31481,14 +30138,12 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -31502,8 +30157,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/effect/decal/warning_stripes/east, /obj/machinery/atmospherics/pipe/simple/visible/cyan{ @@ -31515,8 +30169,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/door/firedoor, /obj/machinery/door/airlock/atmos/glass{ @@ -31532,8 +30185,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/effect/decal/warning_stripes/yellow, /obj/machinery/atmospherics/pipe/simple/visible/cyan{ @@ -31545,8 +30197,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/portable_atmospherics/canister/sleeping_agent, /obj/effect/decal/warning_stripes/yellow/hollow, @@ -31559,8 +30210,7 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/machinery/portable_atmospherics/canister/nitrogen, /obj/effect/decal/warning_stripes/yellow/hollow, @@ -31599,14 +30249,12 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ @@ -31660,8 +30308,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/disposalpipe/segment{ dir = 2; @@ -31676,8 +30323,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/door/airlock/maintenance, /obj/structure/disposalpipe/segment{ @@ -31711,17 +30357,15 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, -/obj/machinery/hologram/holopad, /obj/effect/decal/warning_stripes/yellow/hollow, +/obj/machinery/hologram/holopad, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralfull" @@ -31756,23 +30400,21 @@ /turf/simulated/floor/plasteel, /area/security/prisonershuttle) "btU" = ( -/obj/structure/disposalpipe/segment, /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/door/window/brigdoor{ dir = 1 }, /obj/effect/decal/warning_stripes/north, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel, /area/security/prisonershuttle) "btV" = ( @@ -31798,8 +30440,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 1 @@ -31814,14 +30455,12 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /obj/effect/decal/warning_stripes/north, /obj/machinery/door/window/brigdoor{ @@ -31850,27 +30489,36 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /turf/simulated/floor/plating, /area/security/prisonershuttle) "bub" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2"; - tag = "" +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/sortjunction{ + dir = 1; + icon_state = "pipe-j2s"; + name = "Captain's Junction"; + sortType = 18 }, /turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "neutralfull" + dir = 4; + icon_state = "neutralcorner" }, -/area/security/brig) +/area/hallway/primary/central) "buc" = ( -/turf/simulated/wall, -/area/security/interrogation) +/obj/effect/decal/warning_stripes/yellow, +/obj/machinery/access_button{ + command = "cycle_interior"; + frequency = 1379; + master_tag = "tradedock_inner"; + name = "exterior access button"; + pixel_x = 4; + pixel_y = 24 + }, +/turf/simulated/floor/plasteel, +/area/hallway/secondary/entry) "bud" = ( /obj/structure/chair/office/dark{ dir = 4 @@ -31894,11 +30542,11 @@ }, /area/security/interrogation) "buf" = ( -/obj/machinery/hologram/holopad, /obj/machinery/light{ dir = 1; on = 1 }, +/obj/machinery/hologram/holopad, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -31918,6 +30566,7 @@ /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 1 }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -31970,8 +30619,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/table/wood, /obj/item/storage/fancy/donut_box, @@ -31990,15 +30638,15 @@ }, /area/security/hos) "bun" = ( -/obj/structure/disposalpipe/trunk{ - dir = 1 - }, -/obj/machinery/disposal, /obj/machinery/light, /obj/machinery/alarm{ dir = 1; pixel_y = -24 }, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/obj/machinery/disposal, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "vault" @@ -32124,8 +30772,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/effect/decal/warning_stripes/south, /obj/machinery/atmospherics/pipe/simple/visible/yellow{ @@ -32168,8 +30815,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/effect/decal/warning_stripes/north, /obj/machinery/atmospherics/pipe/simple/visible/yellow{ @@ -32188,8 +30834,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/disposalpipe/segment{ dir = 4 @@ -32232,8 +30877,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/manifold/visible/yellow{ dir = 1 @@ -32271,14 +30915,12 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /obj/structure/cable{ d2 = 2; @@ -32297,8 +30939,7 @@ "buP" = ( /obj/structure/sink{ dir = 8; - pixel_x = -12; - pixel_y = 2 + pixel_x = -12 }, /obj/effect/decal/warning_stripes/yellow/hollow, /turf/simulated/floor/plasteel, @@ -32318,7 +30959,7 @@ "buS" = ( /obj/structure/sink{ dir = 4; - pixel_x = 10 + pixel_x = 12 }, /obj/effect/decal/warning_stripes/yellow/hollow, /turf/simulated/floor/plasteel, @@ -32346,14 +30987,12 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/effect/decal/warning_stripes/yellow, /turf/simulated/floor/plasteel, @@ -32362,8 +31001,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /turf/simulated/floor/plasteel{ dir = 8; @@ -32403,6 +31041,7 @@ /obj/machinery/status_display{ pixel_y = 32 }, +/obj/structure/closet/secure_closet/freezer/money, /turf/simulated/floor/greengrid, /area/security/nuke_storage) "bvf" = ( @@ -32419,12 +31058,19 @@ }, /area/security/nuke_storage) "bvg" = ( -/obj/structure/closet/secure_closet/freezer/money, -/turf/simulated/floor/plasteel{ - dir = 1; - icon_state = "vault" +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" }, -/area/security/nuke_storage) +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "neutralfull" + }, +/area/hallway/primary/fore) "bvh" = ( /obj/structure/lattice, /obj/structure/grille, @@ -32434,14 +31080,12 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/window/reinforced{ dir = 1; @@ -32450,13 +31094,12 @@ /turf/simulated/floor/plasteel, /area/security/prisonershuttle) "bvm" = ( -/obj/structure/disposalpipe/segment, /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel, /area/security/prisonershuttle) "bvn" = ( @@ -32469,12 +31112,14 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -32483,8 +31128,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -32492,6 +31136,9 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 9 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -32500,12 +31147,14 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "vault" @@ -32516,13 +31165,15 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/firealarm{ dir = 1; pixel_y = -24 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -32552,8 +31203,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/cable{ d1 = 1; @@ -32564,19 +31214,25 @@ dir = 8 }, /obj/effect/spawner/window/reinforced, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plating, /area/security/interrogation) "bvx" = ( /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/button/windowtint{ id = 1; pixel_x = 25 }, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -32616,8 +31272,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 8 @@ -32717,16 +31372,13 @@ /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/library) "bvM" = ( /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/door/firedoor, /obj/machinery/door/airlock/atmos/glass{ @@ -32768,8 +31420,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/cable{ d1 = 1; @@ -32789,8 +31440,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/disposalpipe/segment{ dir = 4 @@ -32804,8 +31454,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/door/window{ base_state = "right"; @@ -32833,16 +31482,20 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" - }, -/obj/structure/plasticflaps{ - opacity = 1 + icon_state = "2-8" }, /obj/effect/decal/warning_stripes/yellow, /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/structure/plasticflaps{ + opacity = 1 + }, +/obj/machinery/navbeacon{ + codes_txt = "delivery"; + dir = 8; + location = "Atmospherics" + }, /turf/simulated/floor/plasteel, /area/atmos) "bvT" = ( @@ -32855,6 +31508,7 @@ "bvU" = ( /obj/machinery/atmospherics/pipe/simple/visible/cyan, /obj/machinery/computer/general_air_control/large_tank_control{ + dir = 4; frequency = 1441; input_tag = "waste_in"; name = "Gas Mix Tank Control"; @@ -32875,8 +31529,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/rack, /obj/item/circuitboard/robotics{ @@ -32891,20 +31544,17 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /obj/structure/rack, /obj/item/circuitboard/communications{ @@ -32923,8 +31573,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/rack, /obj/item/circuitboard/aicore{ @@ -32979,8 +31628,7 @@ /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /obj/structure/cable{ d2 = 4; @@ -33000,8 +31648,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/cable{ d2 = 4; @@ -33025,8 +31672,7 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/machinery/door/poddoor{ density = 0; @@ -33064,14 +31710,12 @@ /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/machinery/door/poddoor{ density = 0; @@ -33102,8 +31746,7 @@ /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /obj/structure/cable{ d2 = 2; @@ -33127,8 +31770,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/door/poddoor{ density = 0; @@ -33148,8 +31790,7 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/machinery/door/poddoor{ density = 0; @@ -33231,19 +31872,17 @@ }, /area/security/nuke_storage) "bwy" = ( -/obj/structure/disposalpipe/segment, /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ icon_state = "red" }, @@ -33273,6 +31912,7 @@ name = "Security Blast Door"; opacity = 0 }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "red" @@ -33393,9 +32033,6 @@ }, /area/turret_protected/ai) "bwL" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/machinery/atmospherics/unary/vent_scrubber/on, /turf/simulated/floor/plasteel{ dir = 1; @@ -33502,8 +32139,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/effect/decal/warning_stripes/yellow, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -33521,14 +32157,14 @@ /obj/item/wrench, /obj/item/crowbar, /obj/item/analyzer, -/obj/machinery/newscaster{ - pixel_x = -32 - }, /obj/machinery/camera{ c_tag = "Atmospherics Front Desk"; dir = 4; network = list("SS13","Engineering") }, +/obj/machinery/newscaster{ + pixel_x = -32 + }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "caution" @@ -33564,8 +32200,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ @@ -33640,8 +32275,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/computer/med_data, /turf/simulated/floor/plasteel{ @@ -33671,12 +32305,9 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" - }, -/obj/machinery/computer/security{ - network = list("SS13","Mining Outpost") + icon_state = "1-2" }, +/obj/machinery/computer/security, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "darkred" @@ -33702,8 +32333,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/computer/station_alert, /turf/simulated/floor/plasteel{ @@ -33713,19 +32343,18 @@ /area/bridge) "bxv" = ( /obj/machinery/computer/atmos_alert, -/obj/machinery/computer/atmos_alert, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "darkyellow" }, /area/bridge) "bxw" = ( -/obj/machinery/computer/monitor, /obj/structure/cable{ d2 = 2; icon_state = "0-2"; pixel_y = 1 }, +/obj/machinery/computer/monitor, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "darkyellow" @@ -33735,8 +32364,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/door/airlock/maintenance{ name = "Auxiliary Storage"; @@ -33753,8 +32381,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 8 @@ -33772,8 +32399,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -33789,8 +32415,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -33810,8 +32435,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -33827,8 +32451,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -33842,8 +32465,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 10 @@ -33858,8 +32480,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /turf/simulated/floor/greengrid, /area/security/nuke_storage) @@ -33886,7 +32507,6 @@ }, /area/security/prisonershuttle) "bxK" = ( -/obj/structure/disposalpipe/segment, /obj/structure/cable{ d1 = 1; d2 = 4; @@ -33904,6 +32524,7 @@ opacity = 0 }, /obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ icon_state = "redfull" }, @@ -33950,8 +32571,10 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 }, /turf/simulated/floor/plasteel{ icon_state = "dark" @@ -34006,6 +32629,9 @@ }, /turf/simulated/floor/greengrid, /area/turret_protected/ai) +"bya" = ( +/turf/simulated/wall, +/area/space) "byb" = ( /obj/structure/cable{ d1 = 4; @@ -34163,9 +32789,6 @@ /turf/simulated/floor/plasteel, /area/engine/break_room) "byt" = ( -/obj/machinery/newscaster{ - pixel_x = -32 - }, /obj/structure/rack, /obj/item/stack/cable_coil/random, /obj/item/stack/cable_coil/random, @@ -34188,8 +32811,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/door/firedoor, /obj/machinery/door/airlock/atmos/glass{ @@ -34205,7 +32827,9 @@ /obj/machinery/status_display{ pixel_x = -32 }, -/obj/machinery/computer/security/engineering, +/obj/machinery/computer/security/engineering{ + dir = 4 + }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "caution" @@ -34217,7 +32841,6 @@ d2 = 4; icon_state = "1-4" }, -/obj/machinery/hologram/holopad, /obj/effect/landmark/start{ name = "Life Support Specialist" }, @@ -34225,6 +32848,7 @@ /obj/machinery/atmospherics/pipe/simple/visible/cyan{ dir = 5 }, +/obj/machinery/hologram/holopad, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralfull" @@ -34234,8 +32858,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/visible/cyan{ dir = 4 @@ -34249,8 +32872,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/chair/office/dark{ dir = 4 @@ -34272,8 +32894,7 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/structure/table/reinforced, /obj/item/folder/yellow, @@ -34304,8 +32925,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/manifold/visible/cyan{ dir = 1 @@ -34334,20 +32954,17 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /obj/machinery/door/airlock/highsecurity{ name = "Secure Tech Storage"; @@ -34360,14 +32977,12 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /obj/effect/decal/cleanable/dirt, /obj/effect/decal/warning_stripes/yellow/hollow, @@ -34381,8 +32996,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/disposalpipe/segment{ dir = 2; @@ -34394,14 +33008,12 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /turf/simulated/floor/plating, /area/maintenance/fore) @@ -34409,8 +33021,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/effect/decal/cleanable/dirt, /obj/structure/disposalpipe/segment{ @@ -34423,7 +33034,9 @@ "byN" = ( /obj/machinery/door/firedoor, /obj/effect/decal/warning_stripes/yellow, -/obj/machinery/door/airlock/public/glass, +/obj/machinery/door/airlock/public/glass{ + name = "Public Access" + }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "neutralcorner" @@ -34433,8 +33046,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -34447,14 +33059,12 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /turf/simulated/floor/plasteel{ dir = 8; @@ -34499,8 +33109,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/chair/office/dark{ dir = 1 @@ -34526,13 +33135,20 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ - icon_state = "dark" + dir = 8; + icon_state = "neutralfull" }, -/area/bridge) +/area/hallway/primary/fore) "byX" = ( /obj/structure/chair/office/dark{ dir = 4 @@ -34580,8 +33196,7 @@ /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /obj/machinery/door/poddoor{ density = 0; @@ -34627,7 +33242,10 @@ /turf/space, /area/space) "bzg" = ( -/obj/structure/disposalpipe/segment, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralfull" @@ -34637,8 +33255,7 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/machinery/light/small{ dir = 1 @@ -34678,18 +33295,15 @@ /turf/simulated/floor/plating, /area/security/brig) "bzm" = ( -/obj/structure/disposalpipe/segment, /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -34706,8 +33320,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -34723,14 +33336,12 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 1 @@ -34746,8 +33357,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/light, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -34764,8 +33374,7 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 10 @@ -34796,10 +33405,10 @@ }, /area/turret_protected/ai) "bzx" = ( -/obj/machinery/hologram/holopad, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/machinery/hologram/holopad, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -34856,9 +33465,6 @@ }, /area/engine/gravitygenerator) "bzF" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel{ dir = 8; @@ -34956,8 +33562,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/cable{ d2 = 2; @@ -34992,8 +33597,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/effect/decal/warning_stripes/south, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -35006,7 +33610,9 @@ /turf/simulated/floor/plasteel, /area/engine/break_room) "bzX" = ( -/obj/machinery/computer/atmoscontrol, +/obj/machinery/computer/atmoscontrol{ + dir = 4 + }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "caution" @@ -35064,8 +33670,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/visible/cyan{ dir = 5 @@ -35111,8 +33716,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/effect/decal/warning_stripes/yellow, /turf/simulated/floor/plasteel, @@ -35133,8 +33737,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ @@ -35229,8 +33832,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/computer/supplycomp, /turf/simulated/floor/plasteel{ @@ -35242,8 +33844,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/hologram/holopad, /turf/simulated/floor/plasteel{ @@ -35254,8 +33855,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/unary/vent_pump/on, /turf/simulated/floor/plasteel{ @@ -35266,8 +33866,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/unary/vent_scrubber/on, /turf/simulated/floor/plasteel{ @@ -35297,8 +33896,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/computer/shuttle/mining, /turf/simulated/floor/plasteel{ @@ -35375,8 +33973,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/cable{ d1 = 1; @@ -35386,8 +33983,7 @@ /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 5 @@ -35404,8 +34000,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -35422,14 +34017,12 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /obj/structure/cable{ d1 = 1; @@ -35471,8 +34064,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 4 @@ -35486,6 +34078,7 @@ /obj/machinery/light/small{ dir = 4 }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "red" @@ -35518,14 +34111,12 @@ /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/machinery/door/window/brigdoor{ dir = 2; @@ -35668,8 +34259,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/effect/decal/warning_stripes/east, /turf/simulated/floor/plasteel, @@ -35729,8 +34319,7 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/machinery/door/firedoor, /obj/machinery/door/airlock/engineering/glass{ @@ -35756,14 +34345,12 @@ /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/machinery/door/firedoor, /obj/machinery/door/airlock/engineering/glass{ @@ -35826,8 +34413,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /turf/simulated/floor/plasteel{ dir = 1; @@ -35838,14 +34424,12 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -35878,17 +34462,21 @@ dir = 1; pixel_y = -24 }, -/obj/machinery/computer/station_alert, +/obj/machinery/computer/station_alert{ + dir = 1 + }, /turf/simulated/floor/plasteel{ icon_state = "caution" }, /area/atmos) "bBL" = ( /obj/machinery/light, +/obj/machinery/computer/atmos_alert{ + dir = 1 + }, /obj/machinery/newscaster{ pixel_y = -32 }, -/obj/machinery/computer/atmos_alert, /turf/simulated/floor/plasteel{ icon_state = "caution" }, @@ -35923,8 +34511,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 6 @@ -35969,8 +34556,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /turf/simulated/floor/plasteel{ dir = 8; @@ -36010,13 +34596,12 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, +/obj/effect/decal/warning_stripes/yellow, /obj/structure/plasticflaps{ opacity = 1 }, -/obj/effect/decal/warning_stripes/yellow, /turf/simulated/floor/plasteel, /area/storage/primary) "bBX" = ( @@ -36061,8 +34646,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/effect/decal/warning_stripes/yellow, /turf/simulated/floor/plasteel, @@ -36093,13 +34677,13 @@ /area/storage/primary) "bCd" = ( /obj/structure/table/reinforced, -/obj/machinery/newscaster{ - pixel_y = 32 - }, /obj/item/storage/belt/utility, /obj/item/weldingtool, /obj/item/clothing/head/welding, /obj/effect/decal/warning_stripes/yellow/hollow, +/obj/machinery/newscaster{ + pixel_y = 32 + }, /turf/simulated/floor/plasteel, /area/storage/primary) "bCe" = ( @@ -36115,8 +34699,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -36149,8 +34732,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/cable{ d1 = 1; @@ -36160,8 +34742,7 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -36190,8 +34771,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/cable{ d1 = 1; @@ -36201,8 +34781,7 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -36224,8 +34803,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -36241,8 +34819,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 1 @@ -36258,14 +34835,12 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 1 @@ -36292,8 +34867,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/cable{ d1 = 1; @@ -36303,8 +34877,7 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -36323,8 +34896,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/cable{ d1 = 1; @@ -36343,8 +34915,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -36361,14 +34932,13 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 1 }, /obj/machinery/door/window/brigdoor/southright{ - req_access_txt = "30" + name = "Captains seat" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -36386,8 +34956,7 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 1 @@ -36399,8 +34968,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /turf/simulated/floor/plasteel{ icon_state = "darkblue" @@ -36410,8 +34978,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/cable{ d1 = 1; @@ -36431,8 +34998,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -36440,8 +35006,7 @@ /obj/structure/cable{ d1 = 1; d2 = 4; - icon_state = "1-4"; - tag = "" + icon_state = "1-4" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -36454,8 +35019,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/cable{ d1 = 1; @@ -36479,8 +35043,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -36499,14 +35062,12 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 1 @@ -36533,8 +35094,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -36550,8 +35110,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/cable{ d1 = 1; @@ -36561,8 +35120,7 @@ /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -36584,8 +35142,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -36602,8 +35159,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -36620,14 +35176,12 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -36673,16 +35227,18 @@ /turf/simulated/floor/plating, /area/security/brig) "bCL" = ( -/obj/structure/disposalpipe/sortjunction{ - dir = 8; - name = "HoS Junction"; - sortType = 18 +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "neutralfull" + icon_state = "darkblue" }, -/area/hallway/primary/starboard) +/area/bridge) "bCM" = ( /obj/structure/disposalpipe/segment{ dir = 2; @@ -36690,9 +35246,9 @@ }, /turf/simulated/floor/plasteel{ dir = 4; - icon_state = "redcorner" + icon_state = "red" }, -/area/hallway/primary/starboard) +/area/security/brig) "bCN" = ( /obj/effect/spawner/window/reinforced, /obj/structure/cable, @@ -36802,11 +35358,11 @@ pixel_x = 32; pixel_y = 32 }, +/obj/machinery/ai_slipper, /obj/machinery/newscaster/security_unit{ pixel_x = -32; pixel_y = 32 }, -/obj/machinery/ai_slipper, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -36893,7 +35449,6 @@ /turf/simulated/floor/plasteel, /area/engine/gravitygenerator) "bDf" = ( -/obj/machinery/hologram/holopad, /obj/effect/decal/warning_stripes/yellow/hollow, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -36901,6 +35456,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/machinery/hologram/holopad, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralfull" @@ -36933,8 +35489,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/door/firedoor, /obj/machinery/door/airlock/highsecurity{ @@ -36953,14 +35508,12 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /obj/effect/decal/warning_stripes/west, /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ @@ -36975,24 +35528,22 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, -/obj/machinery/hologram/holopad, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/machinery/hologram/holopad, /turf/simulated/floor/plasteel, /area/engine/gravitygenerator) "bDl" = ( /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/effect/decal/warning_stripes/east, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -37007,8 +35558,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/effect/decal/warning_stripes/southwest, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -37023,8 +35573,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/effect/decal/warning_stripes/south, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -37039,8 +35588,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/cable{ d1 = 1; @@ -37060,8 +35608,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/effect/decal/warning_stripes/southeast, /obj/machinery/atmospherics/pipe/manifold/hidden/supply, @@ -37074,8 +35621,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/door/firedoor, /obj/machinery/door/airlock/engineering{ @@ -37095,8 +35641,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/effect/decal/warning_stripes/west, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, @@ -37109,8 +35654,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -37131,8 +35675,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 1 @@ -37152,14 +35695,12 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 4 @@ -37189,8 +35730,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -37201,16 +35741,15 @@ }, /area/hallway/primary/port) "bDD" = ( -/obj/structure/rack, -/obj/effect/spawner/lootdrop/maintenance{ - lootcount = 3; - name = "3maintenance loot spawner" +/obj/structure/chair, +/obj/machinery/camera{ + c_tag = "Psych Foyer" }, -/obj/machinery/light/small{ - dir = 1 +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "whitebluecorner" }, -/turf/simulated/floor/plating, -/area/maintenance/starboard) +/area/hallway/primary/central) "bDE" = ( /obj/item/twohanded/required/kirbyplants, /obj/machinery/status_display{ @@ -37231,8 +35770,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -37292,8 +35830,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /turf/simulated/floor/plasteel{ dir = 9; @@ -37304,8 +35841,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /turf/simulated/floor/plasteel{ dir = 1; @@ -37376,8 +35912,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/door/firedoor, /obj/machinery/door/airlock/command/glass{ @@ -37423,8 +35958,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -37448,8 +35982,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -37466,8 +35999,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/cable{ d1 = 1; @@ -37477,8 +36009,7 @@ /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -37527,18 +36058,17 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, -/obj/machinery/computer/communications, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/computer/communications, /turf/simulated/floor/carpet, /area/bridge) "bEh" = ( /obj/structure/table/wood, -/obj/machinery/computer/security/wooden_tv, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/computer/security/wooden_tv, /turf/simulated/floor/carpet, /area/bridge) "bEi" = ( @@ -37560,8 +36090,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/door/firedoor, /obj/machinery/door/airlock/command/glass{ @@ -37577,11 +36106,14 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -37590,6 +36122,9 @@ /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 1 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -37598,8 +36133,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/door/firedoor, /obj/machinery/door/airlock/command/glass{ @@ -37613,6 +36147,9 @@ name = "Bridge Blast Doors"; opacity = 0 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "vault" @@ -37644,10 +36181,10 @@ }, /area/hallway/primary/central) "bEr" = ( -/obj/structure/disposalpipe/segment, /obj/machinery/light{ dir = 8 }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "redcorner" @@ -37662,15 +36199,17 @@ }, /area/security/brig) "bEw" = ( -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" +/obj/machinery/camera{ + c_tag = "Security Hallway South"; + dir = 8; + network = list("SS13","Security") }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ - dir = 1; + dir = 4; icon_state = "redcorner" }, -/area/hallway/primary/starboard) +/area/security/brig) "bEx" = ( /turf/simulated/wall/r_wall, /area/security/warden) @@ -37694,8 +36233,7 @@ /obj/structure/cable{ d1 = 1; d2 = 8; - icon_state = "1-8"; - tag = "" + icon_state = "1-8" }, /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 1 @@ -37766,13 +36304,12 @@ }, /area/engine/gravitygenerator) "bEH" = ( -/obj/structure/rack, -/obj/effect/spawner/lootdrop/maintenance{ - lootcount = 3; - name = "3maintenance loot spawner" +/obj/item/twohanded/required/kirbyplants, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "whitebluecorner" }, -/turf/simulated/floor/plating, -/area/maintenance/starboard) +/area/hallway/primary/central) "bEI" = ( /turf/simulated/floor/plasteel{ dir = 8; @@ -37783,8 +36320,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/door/firedoor, /obj/machinery/door/airlock/engineering{ @@ -37820,8 +36356,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/effect/decal/warning_stripes/west, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -37908,8 +36443,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /turf/simulated/floor/plasteel{ dir = 1; @@ -37920,8 +36454,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -37998,8 +36531,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/unary/vent_pump/on, /turf/simulated/floor/plasteel{ @@ -38087,8 +36619,8 @@ }, /area/storage/primary) "bFp" = ( -/obj/machinery/hologram/holopad, /obj/effect/decal/warning_stripes/yellow/hollow, +/obj/machinery/hologram/holopad, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralfull" @@ -38109,8 +36641,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 8 @@ -38215,8 +36746,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/chair/comfy/black{ dir = 1 @@ -38263,8 +36793,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 @@ -38296,8 +36825,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -38333,8 +36861,7 @@ /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /turf/simulated/floor/plating, /area/security/detectives_office) @@ -38363,8 +36890,7 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /turf/simulated/floor/plating, /area/security/detectives_office) @@ -38396,8 +36922,7 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/machinery/light/small{ dir = 1 @@ -38498,8 +37023,7 @@ /obj/structure/cable{ d1 = 1; d2 = 8; - icon_state = "1-8"; - tag = "" + icon_state = "1-8" }, /obj/structure/cable{ d1 = 2; @@ -38590,10 +37114,10 @@ /turf/simulated/floor/plasteel, /area/engine/gravitygenerator) "bGw" = ( +/obj/effect/decal/warning_stripes/southeast, /obj/machinery/newscaster{ pixel_y = -32 }, -/obj/effect/decal/warning_stripes/southeast, /turf/simulated/floor/plasteel, /area/engine/gravitygenerator) "bGx" = ( @@ -38614,8 +37138,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/effect/decal/warning_stripes/southwest, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -38681,14 +37204,12 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 8 @@ -38709,8 +37230,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -38730,8 +37250,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -38749,8 +37268,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/door/firedoor, /obj/machinery/door/airlock/engineering/glass{ @@ -38775,8 +37293,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/effect/decal/warning_stripes/west, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -38797,8 +37314,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/effect/decal/warning_stripes/east, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, @@ -38817,8 +37333,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/effect/landmark{ name = "lightsout" @@ -38841,8 +37356,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/cable{ d1 = 1; @@ -38852,8 +37366,7 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/machinery/door/firedoor, /obj/machinery/door/airlock/engineering/glass{ @@ -38878,8 +37391,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -38899,16 +37411,13 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, -/obj/machinery/hologram/holopad, /obj/effect/decal/warning_stripes/yellow/hollow, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 10 @@ -38916,6 +37425,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 6 }, +/obj/machinery/hologram/holopad, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralfull" @@ -38930,14 +37440,12 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 4 @@ -38985,8 +37493,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 @@ -39000,8 +37507,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -39110,14 +37616,10 @@ }, /area/storage/primary) "bHf" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -39126,6 +37628,9 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel, /area/maintenance/starboard) "bHg" = ( @@ -39139,8 +37644,8 @@ /turf/simulated/floor/plating, /area/crew_quarters/sleep) "bHh" = ( -/obj/machinery/hologram/holopad, /obj/effect/decal/warning_stripes/yellow/hollow, +/obj/machinery/hologram/holopad, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralfull" @@ -39165,8 +37670,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/door/firedoor, @@ -39176,9 +37680,7 @@ req_access_txt = "19" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/bridge/meeting_room) "bHm" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ @@ -39224,8 +37726,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -39301,8 +37802,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/door/firedoor, @@ -39313,9 +37813,8 @@ req_access_txt = "20" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/wood, /area/crew_quarters/captain) "bHA" = ( /obj/machinery/power/apc{ @@ -39336,20 +37835,17 @@ /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /turf/simulated/floor/plasteel{ dir = 8; @@ -39360,8 +37856,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -39375,8 +37870,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/door/airlock/maintenance, /turf/simulated/floor/plating, @@ -39385,8 +37879,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel, @@ -39395,8 +37888,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, @@ -39414,8 +37906,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /turf/simulated/floor/plasteel, /area/maintenance/starboard2) @@ -39423,8 +37914,7 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/effect/decal/cleanable/cobweb2, /obj/effect/decal/cleanable/dirt, @@ -39432,12 +37922,10 @@ /turf/simulated/floor/plasteel, /area/maintenance/starboard2) "bHJ" = ( -/obj/structure/table/wood, -/obj/item/clipboard, -/obj/item/toy/figure/crew/detective, /obj/structure/extinguisher_cabinet{ pixel_x = -28 }, +/obj/machinery/vending/detdrobe, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -39446,8 +37934,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/closet/secure_closet/detective, /turf/simulated/floor/plasteel{ @@ -39479,24 +37966,32 @@ /obj/structure/table/wood, /obj/item/taperecorder, /obj/item/restraints/handcuffs, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, /turf/simulated/floor/plasteel{ icon_state = "dark" }, /area/security/detectives_office) "bHN" = ( /obj/structure/filingcabinet/security, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ icon_state = "dark" }, /area/security/detectives_office) "bHO" = ( -/obj/structure/disposalpipe/trunk, -/obj/machinery/disposal, /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" + }, +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk{ + dir = 8 }, /turf/simulated/floor/plasteel{ icon_state = "dark" @@ -39548,19 +38043,21 @@ }, /area/hallway/primary/starboard) "bHU" = ( -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plasteel{ +/obj/structure/disposalpipe/segment{ dir = 4; - icon_state = "redcorner" + icon_state = "pipe-c" }, -/area/hallway/primary/starboard) +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "red" + }, +/area/security/brig) "bHV" = ( /obj/effect/decal/warning_stripes/east, /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /turf/simulated/floor/plasteel, /area/security/brig) @@ -39568,8 +38065,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /turf/simulated/floor/plasteel{ dir = 4; @@ -39580,14 +38076,12 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /obj/structure/cable{ d1 = 1; @@ -39623,8 +38117,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ @@ -39636,18 +38129,20 @@ }, /area/security/brig) "bHZ" = ( -/obj/structure/disposalpipe/segment, /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" + }, +/obj/structure/disposalpipe/sortjunction{ + dir = 8; + name = "Security Junction"; + sortType = 8 }, /turf/simulated/floor/plasteel{ dir = 8; @@ -39781,10 +38276,10 @@ "bIt" = ( /obj/structure/table/reinforced, /obj/item/clipboard, +/obj/item/gps/engineering, /obj/machinery/newscaster{ pixel_y = 32 }, -/obj/item/gps/engineering, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -39849,8 +38344,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -39962,8 +38456,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -40023,7 +38516,9 @@ /area/storage/primary) "bIV" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass, +/obj/machinery/door/airlock/glass{ + name = "Primary tool storage" + }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralfull" @@ -40043,32 +38538,24 @@ /obj/machinery/newscaster{ pixel_y = 32 }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/bridge/meeting_room) "bIZ" = ( /obj/structure/reagent_dispensers/water_cooler, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/bridge/meeting_room) "bJa" = ( /obj/item/twohanded/required/kirbyplants, /obj/machinery/light{ dir = 1 }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/bridge/meeting_room) "bJb" = ( /obj/machinery/firealarm{ pixel_y = 24 }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/bridge/meeting_room) "bJc" = ( /obj/structure/cable{ @@ -40080,9 +38567,7 @@ name = "north bump"; pixel_y = 24 }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/bridge/meeting_room) "bJd" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -40102,34 +38587,26 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" - }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" + icon_state = "1-2" }, +/turf/simulated/floor/wood, /area/bridge/meeting_room) "bJf" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 8 }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/crew_quarters/captain) "bJg" = ( /obj/structure/table/wood, /obj/item/paicard, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/bridge/meeting_room) "bJi" = ( /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/door/airlock/highsecurity{ name = "AI Upload"; @@ -40145,88 +38622,77 @@ /obj/structure/table/wood, /obj/item/clipboard, /obj/item/toy/figure/crew/captain, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/crew_quarters/captain) "bJk" = ( /obj/machinery/light_switch{ pixel_x = 8; pixel_y = 26 }, -/obj/structure/disposalpipe/trunk, /obj/machinery/disposal, -/turf/simulated/floor/plasteel{ - icon_state = "wood" +/obj/structure/disposalpipe/trunk{ + dir = 4 }, +/turf/simulated/floor/wood, /area/crew_quarters/captain) "bJl" = ( /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plasteel{ - icon_state = "wood" +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" }, +/turf/simulated/floor/wood, /area/crew_quarters/captain) "bJm" = ( /obj/machinery/light{ dir = 1; in_use = 1 }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/crew_quarters/captain) "bJn" = ( /obj/machinery/firealarm{ pixel_y = 24 }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/crew_quarters/captain) "bJo" = ( /obj/machinery/ai_status_display{ pixel_y = 32 }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/crew_quarters/captain) "bJp" = ( /obj/structure/sign/bobross{ pixel_y = 32 }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/crew_quarters/captain) "bJq" = ( /obj/machinery/status_display{ pixel_y = 32 }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/crew_quarters/captain) "bJr" = ( /obj/item/twohanded/required/kirbyplants, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/crew_quarters/captain) "bJs" = ( -/obj/machinery/computer/security/mining, +/obj/effect/decal/warning_stripes/yellow/hollow, +/obj/machinery/computer/security/mining{ + dir = 1 + }, /obj/machinery/newscaster{ layer = 3.3; pixel_y = -27 }, -/obj/effect/decal/warning_stripes/yellow/hollow, /turf/simulated/floor/plasteel, /area/quartermaster/miningdock) "bJt" = ( @@ -40241,8 +38707,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/door/airlock/maintenance{ name = "Detective Maintenance"; @@ -40254,8 +38719,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /turf/simulated/floor/plasteel{ icon_state = "dark" @@ -40270,8 +38734,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 @@ -40284,8 +38747,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -40298,30 +38760,27 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 10 }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ icon_state = "grimy" }, /area/security/detectives_office) "bJz" = ( -/obj/structure/disposalpipe/segment, /obj/structure/cable{ d1 = 1; d2 = 8; @@ -40585,8 +39044,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -40657,8 +39115,7 @@ /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -40677,8 +39134,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/cable{ d1 = 1; @@ -40688,8 +39144,7 @@ /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /obj/machinery/door/firedoor, /obj/machinery/door/airlock/command/glass{ @@ -40711,8 +39166,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -40732,8 +39186,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -40753,14 +39206,12 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 4 @@ -40768,7 +39219,6 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 4 }, -/obj/structure/disposalpipe/segment, /obj/structure/disposalpipe/sortjunction{ name = "CE's Junction"; sortType = 5 @@ -40784,21 +39234,6 @@ icon_state = "yellow" }, /area/engine/break_room) -"bKt" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/disposalpipe/junction{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "purplecorner" - }, -/area/hallway/primary/central) "bKu" = ( /obj/structure/rack, /obj/item/circuitboard/teleporter_hub{ @@ -40816,15 +39251,6 @@ icon_state = "neutralfull" }, /area/storage/tech) -"bKv" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "neutralcorner" - }, -/area/crew_quarters/sleep) "bKw" = ( /obj/structure/sign/electricshock, /turf/simulated/wall, @@ -40864,8 +39290,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/effect/decal/warning_stripes/west, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -40880,9 +39305,6 @@ /turf/simulated/floor/plasteel, /area/engine/break_room) "bKD" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 1 }, @@ -40910,8 +39332,7 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/structure/table/wood, /obj/item/clothing/mask/cigarette/cigar{ @@ -40929,9 +39350,7 @@ pixel_y = -4; req_one_access_txt = "18" }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/bridge/meeting_room) "bKG" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -40977,8 +39396,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /turf/simulated/floor/carpet, /area/bridge/meeting_room) @@ -40987,14 +39405,10 @@ pixel_x = -8; pixel_y = -26 }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/bridge/meeting_room) "bKN" = ( -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/bridge/meeting_room) "bKO" = ( /obj/machinery/vending/coffee, @@ -41025,8 +39439,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -41064,20 +39477,13 @@ /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 }, -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" - }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/crew_quarters/captain) "bLa" = ( /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 4 @@ -41085,26 +39491,16 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 8 }, -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" - }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/crew_quarters/captain) "bLb" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/crew_quarters/captain) "bLc" = ( -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/crew_quarters/captain) "bLd" = ( /obj/structure/chair/comfy/brown{ @@ -41113,33 +39509,25 @@ /obj/effect/landmark/start{ name = "Captain" }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/crew_quarters/captain) "bLe" = ( /obj/structure/table/wood, /obj/item/storage/fancy/donut_box, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/crew_quarters/captain) "bLf" = ( /obj/structure/chair/comfy/brown{ dir = 8 }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/crew_quarters/captain) "bLg" = ( /obj/machinery/alarm{ dir = 8; pixel_x = 24 }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/crew_quarters/captain) "bLh" = ( /turf/simulated/wall, @@ -41171,15 +39559,14 @@ }, /area/storage/tools) "bLk" = ( -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" - }, /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" }, /turf/simulated/floor/plasteel, /area/storage/tools) @@ -41229,13 +39616,14 @@ /area/security/detectives_office) "bLs" = ( /obj/structure/table/wood, +/obj/item/clipboard, +/obj/item/toy/figure/crew/detective, /obj/item/clothing/glasses/sunglasses, /turf/simulated/floor/plasteel{ icon_state = "carpet" }, /area/security/detectives_office) "bLt" = ( -/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ icon_state = "carpet" }, @@ -41245,7 +39633,9 @@ name = "Detective Requests Console"; pixel_x = 30 }, -/obj/machinery/computer/med_data, +/obj/machinery/computer/med_data{ + dir = 8 + }, /turf/simulated/floor/plasteel{ icon_state = "carpet" }, @@ -41275,18 +39665,17 @@ }, /area/security/brig) "bLy" = ( -/obj/structure/disposalpipe/segment, /obj/machinery/alarm{ dir = 4; pixel_x = -24 }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "redcorner" }, /area/hallway/primary/starboard) "bLz" = ( -/obj/structure/disposalpipe/segment, /obj/machinery/light{ dir = 4 }, @@ -41310,12 +39699,6 @@ /obj/machinery/light{ dir = 8 }, -/obj/machinery/camera{ - c_tag = "Research Toxins Storage Room"; - dir = 4; - network = list("Research","SS13"); - pixel_y = -22 - }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel{ dir = 1; @@ -41323,9 +39706,7 @@ }, /area/security/brig) "bLD" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "redcorner" @@ -41335,8 +39716,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/computer/crew, /turf/simulated/floor/plasteel{ @@ -41375,7 +39755,6 @@ }, /area/security/processing) "bLK" = ( -/obj/structure/disposalpipe/segment, /obj/structure/cable{ d1 = 1; d2 = 2; @@ -41490,8 +39869,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/effect/decal/warning_stripes/yellow, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -41509,8 +39887,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/door/airlock/hatch{ name = "MiniSat Transit Tube"; @@ -41538,12 +39915,13 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/door/firedoor, /obj/effect/decal/warning_stripes/yellow, -/obj/machinery/door/airlock/public/glass, +/obj/machinery/door/airlock/public/glass{ + name = "Public Access" + }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/disposalpipe/segment, @@ -41555,19 +39933,21 @@ "bMb" = ( /obj/machinery/door/firedoor, /obj/effect/decal/warning_stripes/yellow, -/obj/machinery/door/airlock/public/glass, +/obj/machinery/door/airlock/public/glass{ + name = "Public Access" + }, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "browncorner" }, /area/hallway/primary/fore) "bMc" = ( -/obj/structure/disposalpipe/segment, /obj/machinery/camera{ c_tag = "Primary Security Hallway North"; dir = 4; pixel_y = -22 }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "redcorner" @@ -41577,8 +39957,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/cable{ d1 = 1; @@ -41626,7 +40005,9 @@ /obj/machinery/status_display{ pixel_x = -32 }, -/obj/machinery/computer/card/minor/ce, +/obj/machinery/computer/card/minor/ce{ + dir = 4 + }, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -41667,8 +40048,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /turf/simulated/floor/plasteel{ icon_state = "dark" @@ -41680,8 +40060,10 @@ /turf/simulated/floor/plating, /area/crew_quarters/chief) "bMn" = ( -/obj/machinery/computer/shuttle/mining, /obj/effect/decal/warning_stripes/yellow/hollow, +/obj/machinery/computer/shuttle/mining{ + dir = 1 + }, /turf/simulated/floor/plasteel, /area/quartermaster/miningdock) "bMo" = ( @@ -41696,7 +40078,9 @@ }, /area/engine/break_room) "bMp" = ( -/obj/machinery/computer/drone_control, +/obj/machinery/computer/drone_control{ + dir = 1 + }, /turf/simulated/floor/plasteel{ dir = 7; icon_state = "yellow" @@ -41728,8 +40112,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -41810,11 +40193,15 @@ }, /area/storage/tech) "bMD" = ( -/obj/structure/sign/poster/random{ - pixel_x = -32 +/obj/structure/table, +/obj/item/paper_bin{ + pixel_y = 5 }, -/turf/simulated/floor/plating, -/area/maintenance/starboard) +/obj/item/pen/multi, +/turf/simulated/floor/plasteel{ + icon_state = "white" + }, +/area/hallway/primary/central) "bME" = ( /obj/structure/table/reinforced, /obj/machinery/light{ @@ -41834,8 +40221,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /turf/simulated/floor/plasteel{ dir = 4; @@ -41887,14 +40273,12 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /obj/structure/cable{ d1 = 1; @@ -41902,28 +40286,22 @@ icon_state = "1-4" }, /obj/machinery/photocopier, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/bridge/meeting_room) "bMN" = ( /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/hologram/holopad, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/bridge/meeting_room) "bMO" = ( /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/table/wood, /obj/item/folder/blue, @@ -41936,8 +40314,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/chair/comfy/brown{ dir = 4 @@ -41964,8 +40341,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/table/wood, /obj/item/folder/red, @@ -41973,8 +40349,7 @@ /obj/structure/cable{ d1 = 1; d2 = 4; - icon_state = "1-4"; - tag = "" + icon_state = "1-4" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -41993,8 +40368,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/cable{ d1 = 1; @@ -42007,17 +40381,13 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/bridge/meeting_room) "bMU" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 8 }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/bridge/meeting_room) "bMV" = ( /obj/machinery/light{ @@ -42052,8 +40422,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/table/glass, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -42080,8 +40449,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/cable{ d1 = 1; @@ -42089,51 +40457,39 @@ icon_state = "1-4" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/hologram/holopad, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/obj/machinery/hologram/holopad, +/turf/simulated/floor/wood, /area/crew_quarters/captain) "bNe" = ( /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" - }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" + icon_state = "4-8" }, +/turf/simulated/floor/wood, /area/crew_quarters/captain) "bNf" = ( /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/chair/comfy/brown{ dir = 4 }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/crew_quarters/captain) "bNg" = ( /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/structure/table/wood, /obj/item/clothing/mask/cigarette/cigar, /obj/item/clothing/mask/cigarette/cigar, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/crew_quarters/captain) "bNh" = ( /obj/machinery/light{ @@ -42142,9 +40498,7 @@ /obj/structure/extinguisher_cabinet{ pixel_x = 28 }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/crew_quarters/captain) "bNi" = ( /obj/structure/rack, @@ -42177,7 +40531,6 @@ }, /area/storage/tools) "bNk" = ( -/obj/structure/disposalpipe/segment, /obj/structure/cable{ d1 = 1; d2 = 8; @@ -42189,6 +40542,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 10 }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralfull" @@ -42236,13 +40590,13 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/chair/office/dark{ dir = 4 }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ icon_state = "grimy" }, @@ -42256,7 +40610,6 @@ }, /area/security/detectives_office) "bNt" = ( -/obj/structure/disposalpipe/segment, /obj/structure/chair/office/dark{ dir = 8 }, @@ -42274,13 +40627,17 @@ /obj/machinery/status_display{ pixel_x = 32 }, -/obj/machinery/computer/secure_data, +/obj/machinery/computer/secure_data{ + dir = 8 + }, /turf/simulated/floor/plasteel{ icon_state = "carpet" }, /area/security/detectives_office) "bNv" = ( -/obj/machinery/computer/secure_data, +/obj/machinery/computer/secure_data{ + dir = 4 + }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "redcorner" @@ -42316,16 +40673,13 @@ /turf/simulated/floor/plasteel, /area/quartermaster/miningdock) "bNC" = ( +/obj/effect/decal/warning_stripes/yellow, /obj/structure/plasticflaps{ opacity = 1 }, -/obj/effect/decal/warning_stripes/yellow, /turf/simulated/floor/plasteel, /area/maintenance/starboard) "bND" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/structure/chair{ dir = 1 }, @@ -42335,18 +40689,17 @@ }, /area/security/processing) "bNE" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 +/obj/structure/disposalpipe/segment, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "redcorner" }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plasteel, -/area/security/processing) +/area/security/brig) "bNF" = ( -/obj/machinery/computer/secure_data, +/obj/machinery/computer/secure_data{ + dir = 8 + }, /turf/simulated/floor/plasteel{ dir = 6; icon_state = "red" @@ -42361,28 +40714,19 @@ }, /area/security/processing) "bNH" = ( -/obj/structure/disposalpipe/sortjunction{ - dir = 1; - name = "Brig Equipment Storage"; - sortType = 8 - }, /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, -/obj/machinery/hologram/holopad, /obj/effect/decal/warning_stripes/yellow/hollow, +/obj/machinery/hologram/holopad, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralfull" }, /area/security/brig) "bNI" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/effect/spawner/window/reinforced, /obj/structure/cable{ d2 = 2; @@ -42455,8 +40799,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/visible/yellow{ dir = 5 @@ -42482,13 +40825,12 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/door/firedoor, /obj/machinery/door/airlock/engineering/glass{ name = "Engineering"; - req_access_txt = "10" + req_access_txt = "32" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -42518,7 +40860,6 @@ }, /area/engine/break_room) "bNZ" = ( -/obj/machinery/computer/atmos_alert, /obj/machinery/camera{ c_tag = "Chief Engineer's Office"; dir = 4; @@ -42532,6 +40873,9 @@ name = "Chief Engineer Requests Console"; pixel_x = -32 }, +/obj/machinery/computer/atmos_alert{ + dir = 4 + }, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -42570,8 +40914,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /turf/simulated/floor/plasteel{ icon_state = "redcorner" @@ -42581,8 +40924,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 4 @@ -42599,8 +40941,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/cable{ d1 = 1; @@ -42676,8 +41017,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -42720,8 +41060,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/effect/decal/warning_stripes/yellow, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -42739,21 +41078,20 @@ /area/storage/tech) "bOu" = ( /obj/structure/table/reinforced, -/obj/machinery/newscaster{ - pixel_y = -32 - }, /obj/item/wrench, /obj/item/crowbar, /obj/item/paicard, /obj/effect/decal/warning_stripes/yellow, +/obj/machinery/newscaster{ + pixel_y = -32 + }, /turf/simulated/floor/plasteel, /area/storage/tech) "bOv" = ( /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/effect/decal/warning_stripes/yellow, /turf/simulated/floor/plasteel{ @@ -42825,9 +41163,7 @@ }, /obj/structure/table/wood, /obj/item/book/manual/security_space_law, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/bridge/meeting_room) "bOF" = ( /obj/structure/chair/comfy/beige{ @@ -42848,14 +41184,11 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/crew_quarters/heads/hop) "bOI" = ( /obj/structure/chair/comfy/brown{ @@ -42871,8 +41204,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/item/pen, /turf/simulated/floor/carpet, @@ -42882,25 +41214,22 @@ pixel_x = 32; pixel_y = -32 }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/bridge/meeting_room) "bOL" = ( /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/crew_quarters/heads/hop) "bOM" = ( -/obj/machinery/computer/account_database, +/obj/machinery/computer/account_database{ + dir = 8 + }, /turf/simulated/floor/plasteel{ dir = 5; icon_state = "dark" @@ -42920,12 +41249,10 @@ /turf/simulated/floor/bluegrid, /area/turret_protected/ai_upload) "bOQ" = ( -/obj/machinery/hologram/holopad, /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 9 @@ -42933,6 +41260,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 5 }, +/obj/machinery/hologram/holopad, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -42957,6 +41285,9 @@ /obj/structure/bed/dogbed{ name = "fox box" }, +/obj/machinery/newscaster/security_unit{ + pixel_x = -32 + }, /mob/living/simple_animal/pet/dog/fox/Renault, /turf/simulated/floor/plasteel{ dir = 5; @@ -42968,13 +41299,7 @@ dir = 1; pixel_y = -28 }, -/obj/machinery/newscaster{ - pixel_x = -32; - pixel_y = -32 - }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/crew_quarters/captain) "bOW" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -42988,23 +41313,18 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/chair/comfy/brown, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/crew_quarters/captain) "bOY" = ( /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -43024,18 +41344,14 @@ name = "south bump"; pixel_y = -24 }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/crew_quarters/captain) "bPb" = ( /obj/machinery/camera{ c_tag = "Captain's Room"; dir = 8 }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/crew_quarters/captain) "bPc" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -43072,9 +41388,9 @@ }, /area/storage/tools) "bPf" = ( -/obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel, /area/storage/tools) "bPg" = ( @@ -43133,6 +41449,9 @@ /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 4 }, +/obj/machinery/newscaster/security_unit{ + pixel_y = -32 + }, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -43149,13 +41468,13 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 10 }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ icon_state = "grimy" }, @@ -43169,27 +41488,25 @@ }, /area/security/detectives_office) "bPp" = ( -/obj/structure/disposalpipe/segment, /obj/structure/table/wood, -/obj/machinery/computer/security/wooden_tv, -/turf/simulated/floor/plasteel{ - icon_state = "carpet" - }, -/area/security/detectives_office) -"bPq" = ( -/obj/structure/table/wood, -/obj/item/storage/secure/safe{ - pixel_x = 32 - }, /obj/item/flashlight/lamp, /obj/item/reagent_containers/food/drinks/flask/detflask, /turf/simulated/floor/plasteel{ icon_state = "carpet" }, /area/security/detectives_office) +"bPq" = ( +/obj/machinery/computer/arcade{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + dir = 5; + icon_state = "dark" + }, +/area/maintenance/fore2) "bPr" = ( /obj/machinery/computer/security{ - network = list("SS13","Mining Outpost") + dir = 4 }, /turf/simulated/floor/plasteel{ dir = 1; @@ -43210,8 +41527,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/cable{ d2 = 4; @@ -43224,8 +41540,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/table/reinforced, /obj/item/paper_bin, @@ -43246,6 +41561,9 @@ d2 = 8; icon_state = "4-8" }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel, /area/security/processing) "bPw" = ( @@ -43259,6 +41577,10 @@ d2 = 8; icon_state = "2-8" }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/hologram/holopad, /turf/simulated/floor/plasteel, /area/security/processing) "bPx" = ( @@ -43267,12 +41589,13 @@ d2 = 8; icon_state = "4-8" }, -/turf/simulated/floor/plasteel, -/area/security/processing) -"bPy" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, +/turf/simulated/floor/plasteel, +/area/security/processing) +"bPy" = ( +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "red" @@ -43284,16 +41607,16 @@ d2 = 8; icon_state = "4-8" }, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "red" }, /area/security/brig) "bPA" = ( -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, /obj/machinery/light{ dir = 4 }, @@ -43311,8 +41634,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/door/airlock/security/glass{ name = "Security Office"; @@ -43355,8 +41677,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/embedded_controller/radio/airlock/airlock_controller{ id_tag = "station_ai_airlock"; @@ -43384,8 +41705,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/door/airlock/external{ frequency = 1379; @@ -43579,8 +41899,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/door/airlock/maintenance{ name = "Mining Maintenance"; @@ -43615,8 +41934,7 @@ /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /obj/structure/table/reinforced, /obj/item/folder/blue, @@ -43638,13 +41956,12 @@ name = "MiniSat Transit Tube"; req_one_access_txt = "32;19" }, -/obj/machinery/door/poddoor{ - icon_state = "open"; - id_tag = "transitlock"; - name = "Transit Tube Blast Doors" - }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/door/poddoor/preopen{ + id_tag = "transitlock"; + name = "Transit Tube Lockdown" + }, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -43666,8 +41983,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/table/reinforced, /obj/item/clipboard, @@ -43752,6 +42068,9 @@ icon_state = "1-8" }, /obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -43844,11 +42163,11 @@ /turf/simulated/floor/plasteel, /area/crew_quarters/kitchen) "bQz" = ( +/obj/machinery/door/firedoor, +/obj/effect/decal/warning_stripes/yellow, /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/door/firedoor, -/obj/effect/decal/warning_stripes/yellow, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "neutralcorner" @@ -43858,8 +42177,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/effect/decal/warning_stripes/north, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -43907,9 +42225,7 @@ }, /obj/item/storage/briefcase, /obj/item/storage/secure/briefcase, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/bridge/meeting_room) "bQF" = ( /obj/item/radio/intercom{ @@ -43917,16 +42233,12 @@ pixel_y = -28 }, /obj/machinery/slot_machine, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/bridge/meeting_room) "bQG" = ( /obj/item/twohanded/required/kirbyplants, /obj/machinery/light, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/bridge/meeting_room) "bQH" = ( /obj/machinery/alarm{ @@ -43937,9 +42249,7 @@ c_tag = "Command Meeting Room"; dir = 1 }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/bridge/meeting_room) "bQI" = ( /turf/simulated/wall, @@ -43950,12 +42260,9 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" - }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" + icon_state = "1-2" }, +/turf/simulated/floor/wood, /area/bridge/meeting_room) "bQK" = ( /obj/machinery/alarm{ @@ -43979,8 +42286,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/ai_slipper, /turf/simulated/floor/bluegrid, @@ -44020,8 +42326,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/table/wood, /obj/machinery/door/window{ @@ -44035,7 +42340,6 @@ /obj/item/stamp/captain, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/disposalpipe/segment, /turf/simulated/floor/carpet/black, /area/crew_quarters/captain) "bQR" = ( @@ -44063,16 +42367,12 @@ /obj/machinery/photocopier/faxmachine/longrange{ department = "Captain's Office" }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/crew_quarters/captain) "bQU" = ( /obj/structure/table/wood, /obj/machinery/recharger, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/crew_quarters/captain) "bQV" = ( /obj/structure/sign/directions/engineering{ @@ -44092,33 +42392,30 @@ /turf/simulated/floor/plating, /area/storage/tools) "bQX" = ( -/obj/structure/disposalpipe/segment, /obj/machinery/door/airlock/glass{ name = "Auxiliary Tool Storage"; req_access_txt = "12" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel, /area/storage/tools) "bRa" = ( /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/door/airlock/security/glass{ @@ -44126,6 +42423,7 @@ req_access_txt = "4" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "red" @@ -44136,8 +42434,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/cable{ d2 = 8; @@ -44146,29 +42443,24 @@ /turf/simulated/floor/plating, /area/security/detectives_office) "bRc" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/spawner/window/reinforced, -/obj/structure/cable{ - d2 = 8; - icon_state = "0-8" +/obj/effect/decal/warning_stripes/yellow, +/obj/structure/disposalpipe/segment{ + dir = 4 }, -/turf/simulated/floor/plating, -/area/security/detectives_office) +/turf/simulated/floor/plasteel, +/area/maintenance/starboard2) "bRd" = ( -/obj/structure/disposalpipe/segment, /obj/machinery/firealarm{ dir = 8; pixel_x = -24 }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "redcorner" }, /area/hallway/primary/starboard) "bRe" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/effect/decal/warning_stripes/east, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -44176,12 +42468,12 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/turf/simulated/floor/plasteel, -/area/security/brig) -"bRf" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, +/turf/simulated/floor/plasteel, +/area/security/brig) +"bRf" = ( /obj/effect/decal/warning_stripes/yellow, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -44190,12 +42482,12 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/turf/simulated/floor/plasteel, -/area/security/brig) -"bRg" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, +/turf/simulated/floor/plasteel, +/area/security/brig) +"bRg" = ( /obj/machinery/door/firedoor, /obj/effect/decal/warning_stripes/west, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -44216,29 +42508,27 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/turf/simulated/floor/plasteel, -/area/security/brig) -"bRh" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, +/turf/simulated/floor/plasteel, +/area/security/brig) +"bRh" = ( /obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, /obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "redcorner" }, /area/security/brig) "bRi" = ( -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -44246,6 +42536,9 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralfull" @@ -44258,6 +42551,10 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "redcorner" @@ -44347,8 +42644,8 @@ }, /area/construction/hallway) "bRt" = ( -/obj/machinery/computer/teleporter, /obj/effect/decal/warning_stripes/southeast, +/obj/machinery/computer/teleporter, /turf/simulated/floor/plating, /area/turret_protected/aisat) "bRu" = ( @@ -44391,9 +42688,6 @@ /turf/simulated/floor/plasteel, /area/maintenance/starboard) "bRx" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, /obj/structure/showcase{ density = 0; dir = 4; @@ -44404,6 +42698,9 @@ pixel_y = 2 }, /obj/effect/decal/warning_stripes/south, +/obj/machinery/atmospherics/pipe/simple/visible/cyan{ + dir = 5 + }, /turf/simulated/floor/plating, /area/turret_protected/aisat) "bRz" = ( @@ -44552,7 +42849,9 @@ /obj/machinery/status_display{ pixel_x = -32 }, -/obj/machinery/computer/station_alert, +/obj/machinery/computer/station_alert{ + dir = 4 + }, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -44575,8 +42874,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/table/reinforced, /obj/item/cartridge/engineering{ @@ -44626,8 +42924,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/cable{ d1 = 1; @@ -44637,8 +42934,7 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/machinery/door/firedoor, /obj/machinery/door/airlock/command/glass{ @@ -44659,8 +42955,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -44676,8 +42971,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -44693,14 +42987,12 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/effect/landmark/start{ name = "Chief Engineer" @@ -44730,8 +43022,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/item/radio/beacon, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -44746,8 +43037,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/door/firedoor, /obj/effect/decal/warning_stripes/yellow, @@ -44760,8 +43050,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /turf/simulated/floor/plasteel{ dir = 8; @@ -44796,8 +43085,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/cable{ d1 = 1; @@ -44815,8 +43103,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /turf/simulated/floor/plasteel{ dir = 4; @@ -44831,9 +43118,7 @@ }, /obj/machinery/meter, /obj/effect/decal/warning_stripes/south, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/manifold/visible/cyan, /turf/simulated/floor/plating, /area/turret_protected/aisat) "bSv" = ( @@ -44845,8 +43130,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -44864,8 +43148,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /turf/simulated/floor/plasteel{ dir = 1; @@ -44876,8 +43159,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /turf/simulated/floor/plasteel{ dir = 1; @@ -44895,8 +43177,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /turf/simulated/floor/plasteel{ dir = 1; @@ -44917,8 +43198,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/cable{ d1 = 1; @@ -44954,8 +43234,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -44976,11 +43255,13 @@ }, /area/turret_protected/ai_upload) "bSJ" = ( -/obj/machinery/computer/aiupload, /obj/machinery/flasher{ id = "AI"; pixel_y = -21 }, +/obj/machinery/computer/aiupload{ + dir = 1 + }, /turf/simulated/floor/bluegrid, /area/turret_protected/ai_upload) "bSK" = ( @@ -44993,10 +43274,12 @@ /turf/simulated/floor/bluegrid, /area/turret_protected/ai_upload) "bSL" = ( -/obj/machinery/computer/borgupload, /obj/item/radio/intercom/private{ pixel_y = -28 }, +/obj/machinery/computer/borgupload{ + dir = 1 + }, /turf/simulated/floor/bluegrid, /area/turret_protected/ai_upload) "bSM" = ( @@ -45021,7 +43304,9 @@ name = "Captain Requests Console"; pixel_x = -30 }, -/obj/machinery/computer/card, +/obj/machinery/computer/card{ + dir = 4 + }, /turf/simulated/floor/carpet/black, /area/crew_quarters/captain) "bSP" = ( @@ -45033,8 +43318,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/chair/comfy/brown{ dir = 1 @@ -45044,7 +43328,6 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/disposalpipe/segment, /turf/simulated/floor/carpet/black, /area/crew_quarters/captain) "bSR" = ( @@ -45064,9 +43347,7 @@ /area/crew_quarters/captain/bedroom) "bSU" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/disposalpipe/segment{ dir = 1; icon_state = "pipe-c" @@ -45109,11 +43390,11 @@ }, /area/hallway/primary/starboard) "bSY" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/disposalpipe/junction{ dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "cautioncorner" @@ -45137,6 +43418,9 @@ dir = 1 }, /obj/effect/decal/warning_stripes/south, +/obj/machinery/atmospherics/pipe/simple/hidden/universal{ + dir = 4 + }, /turf/simulated/floor/plating, /area/turret_protected/aisat) "bTd" = ( @@ -45151,37 +43435,40 @@ /turf/simulated/floor/plasteel, /area/storage/tools) "bTf" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/junction{ + dir = 8 + }, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "neutralcorner" }, /area/hallway/primary/starboard) "bTg" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/disposalpipe/segment{ - dir = 4 +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" }, -/turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "redcorner" +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/junction{ + dir = 1; + icon_state = "pipe-j2" }, -/area/hallway/primary/starboard) +/turf/simulated/floor/plating, +/area/maintenance/starboard2) "bTh" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/unary/vent_scrubber/on, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "redcorner" @@ -45201,8 +43488,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -45310,7 +43596,9 @@ icon_state = "2-4"; tag = "" }, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, @@ -45342,7 +43630,6 @@ }, /area/turret_protected/aisat) "bTw" = ( -/obj/machinery/hologram/holopad, /obj/structure/cable{ d1 = 4; d2 = 8; @@ -45360,6 +43647,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/machinery/hologram/holopad, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -45413,9 +43701,9 @@ icon_state = "2-4"; tag = "" }, -/mob/living/simple_animal/bot/secbot/pingsky, /obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, /obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, +/mob/living/simple_animal/bot/secbot/pingsky, /turf/simulated/floor/plasteel{ icon_state = "grimy" }, @@ -45508,7 +43796,6 @@ }, /area/turret_protected/aisat) "bTK" = ( -/obj/machinery/hologram/holopad, /obj/structure/cable{ d1 = 4; d2 = 8; @@ -45520,6 +43807,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/machinery/hologram/holopad, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "vault" @@ -45613,13 +43901,13 @@ d2 = 8; icon_state = "4-8" }, -/obj/machinery/hologram/holopad, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/machinery/hologram/holopad, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "vault" @@ -45680,8 +43968,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/effect/decal/warning_stripes/west, /turf/simulated/floor/plasteel, @@ -45690,8 +43977,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/door/firedoor, /obj/effect/decal/warning_stripes/yellow, @@ -45704,8 +43990,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /turf/simulated/floor/plasteel{ dir = 8; @@ -45716,8 +44001,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -45816,8 +44100,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /turf/simulated/floor/plasteel{ dir = 1; @@ -45865,16 +44148,15 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /turf/simulated/floor/plasteel{ icon_state = "grimy" }, /area/crew_quarters/chief) "bUq" = ( -/obj/machinery/hologram/holopad, /obj/effect/decal/warning_stripes/yellow/hollow, +/obj/machinery/hologram/holopad, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralfull" @@ -45884,8 +44166,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/door/airlock/engineering{ name = "Tech Storage"; @@ -45899,8 +44180,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 8 @@ -45921,8 +44201,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/door/airlock/maintenance, /turf/simulated/floor/plasteel, @@ -45936,7 +44215,7 @@ }, /obj/machinery/door/airlock/engineering/glass{ name = "Engineering Break Room"; - req_access_txt = "10" + req_access_txt = "32" }, /obj/machinery/door/firedoor, /obj/structure/disposalpipe/segment{ @@ -45954,8 +44233,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/disposalpipe/segment{ dir = 4 @@ -45966,7 +44244,6 @@ }, /area/engine/break_room) "bUw" = ( -/obj/machinery/hologram/holopad, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, @@ -45976,6 +44253,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/machinery/hologram/holopad, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralfull" @@ -46022,12 +44300,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" - }, -/obj/machinery/navbeacon{ - codes_txt = "patrol;next_patrol=engi2"; - location = "engi1" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 5 @@ -46035,22 +44308,26 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 5 }, +/obj/machinery/navbeacon{ + codes_txt = "patrol;next_patrol=engi2"; + location = "engi1" + }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralfull" }, /area/hallway/primary/port) "bUC" = ( -/obj/machinery/navbeacon{ - codes_txt = "patrol;next_patrol=hall4"; - location = "engi3" - }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/machinery/navbeacon{ + codes_txt = "patrol;next_patrol=hall4"; + location = "engi3" + }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralfull" @@ -46063,6 +44340,9 @@ icon_state = "1-8" }, /obj/effect/decal/warning_stripes/south, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, /turf/simulated/floor/plating, /area/turret_protected/aisat) "bUG" = ( @@ -46098,13 +44378,13 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 4 }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, /obj/machinery/navbeacon{ codes_txt = "patrol;next_patrol=engi1"; location = "hall3" }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralfull" @@ -46114,8 +44394,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/navbeacon{ codes_txt = "patrol;next_patrol=hall5"; @@ -46148,10 +44427,9 @@ /area/hallway/primary/central) "bUP" = ( /obj/effect/spawner/window/reinforced/plasma, -/obj/machinery/door/poddoor{ - icon_state = "open"; +/obj/machinery/door/poddoor/preopen{ id_tag = "transitlock"; - name = "Transit Tube Blast Doors" + name = "Transit Tube Lockdown" }, /turf/simulated/floor/plating, /area/engine/break_room) @@ -46166,38 +44444,32 @@ }, /obj/item/paper_bin, /obj/item/stamp/hop, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/crew_quarters/heads/hop) "bUR" = ( /obj/item/twohanded/required/kirbyplants, /obj/machinery/keycard_auth{ pixel_y = 26 }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/crew_quarters/heads/hop) "bUT" = ( /obj/item/twohanded/required/kirbyplants, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/crew_quarters/heads/hop) "bUU" = ( /obj/structure/table/wood, /obj/item/storage/box/ids, /obj/item/storage/box/PDAs, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/crew_quarters/heads/hop) "bUV" = ( -/obj/machinery/computer/communications, /obj/machinery/ai_status_display{ pixel_x = -32 }, +/obj/machinery/computer/communications{ + dir = 4 + }, /turf/simulated/floor/carpet/black, /area/crew_quarters/captain) "bUW" = ( @@ -46215,12 +44487,10 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/disposalpipe/segment, /turf/simulated/floor/carpet/black, /area/crew_quarters/captain) "bUY" = ( @@ -46282,21 +44552,20 @@ /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /obj/structure/cable{ d1 = 1; d2 = 4; icon_state = "1-4" }, +/obj/effect/landmark{ + name = "lightsout" + }, /obj/machinery/navbeacon{ codes_txt = "patrol;next_patrol=hall13"; location = "hall12" }, -/obj/effect/landmark{ - name = "lightsout" - }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralfull" @@ -46306,15 +44575,18 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/navbeacon{ codes_txt = "patrol;next_patrol=hall11"; location = "hall10" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralfull" @@ -46334,8 +44606,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -46352,8 +44623,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 1 @@ -46387,14 +44657,12 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -46414,49 +44682,37 @@ icon_state = "1-4"; tag = "90Curve" }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralfull" }, /area/hallway/primary/starboard) "bVm" = ( -/obj/structure/disposalpipe/segment, /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 +/obj/structure/disposalpipe/junction{ + dir = 1 }, /turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "neutralfull" + dir = 4; + icon_state = "redcorner" }, -/area/hallway/primary/starboard) +/area/security/brig) "bVn" = ( /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -46471,14 +44727,12 @@ /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 1 @@ -46492,12 +44746,7 @@ }, /area/hallway/primary/starboard) "bVp" = ( -/obj/machinery/navbeacon{ - codes_txt = "patrol;next_patrol=hall12"; - location = "hall11" - }, /obj/item/radio/beacon, -/mob/living/simple_animal/bot/secbot/beepsky, /obj/structure/cable{ d1 = 1; d2 = 8; @@ -46509,6 +44758,11 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 9 }, +/obj/machinery/navbeacon{ + codes_txt = "patrol;next_patrol=hall12"; + location = "hall11" + }, +/mob/living/simple_animal/bot/secbot/beepsky, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralfull" @@ -46577,8 +44831,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/door/firedoor, /obj/effect/decal/warning_stripes/yellow, @@ -46597,8 +44850,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/door/firedoor, /obj/effect/decal/warning_stripes/yellow, @@ -46608,11 +44860,11 @@ }, /area/hallway/primary/port) "bVD" = ( +/obj/machinery/door/firedoor, +/obj/effect/decal/warning_stripes/yellow, /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/door/firedoor, -/obj/effect/decal/warning_stripes/yellow, /turf/simulated/floor/plasteel{ icon_state = "neutralcorner" }, @@ -46621,12 +44873,11 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, -/obj/machinery/door/airlock/glass{ - name = "Magistrate's Office"; - req_access_txt = "74" +/obj/machinery/door/airlock{ + name = "Court"; + req_access_txt = "38" }, /turf/simulated/floor/plasteel, /area/crew_quarters/courtroom) @@ -46848,12 +45099,14 @@ name = "east bump"; pixel_x = 24 }, -/obj/machinery/computer/prisoner, /obj/machinery/camera{ c_tag = "Warden's Office"; dir = 8; network = list("SS13","Security") }, +/obj/machinery/computer/prisoner{ + dir = 8 + }, /turf/simulated/floor/plasteel{ dir = 5; icon_state = "red" @@ -46910,7 +45163,9 @@ pixel_y = -8; req_access_txt = "11" }, -/obj/machinery/computer/security/engineering, +/obj/machinery/computer/security/engineering{ + dir = 4 + }, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -47001,8 +45256,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /turf/simulated/floor/plasteel{ dir = 10; @@ -47023,13 +45277,13 @@ /area/engine/break_room) "bWw" = ( /obj/machinery/light, -/obj/machinery/newscaster/security_unit{ - pixel_y = -32 - }, /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 1 }, /obj/structure/table/wood, +/obj/machinery/newscaster{ + pixel_y = -32 + }, /turf/simulated/floor/plasteel{ dir = 0; icon_state = "yellow" @@ -47058,7 +45312,7 @@ }, /obj/machinery/alarm{ dir = 1; - pixel_y = -22 + pixel_y = -24 }, /obj/item/twohanded/required/kirbyplants, /turf/simulated/floor/plasteel{ @@ -47076,8 +45330,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /turf/simulated/floor/plasteel{ dir = 8; @@ -47203,9 +45456,7 @@ }, /area/crew_quarters/heads/hop) "bWR" = ( -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/crew_quarters/heads/hop) "bWT" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ @@ -47218,16 +45469,13 @@ /obj/machinery/computer/security/telescreen/entertainment{ pixel_x = 32 }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/crew_quarters/heads/hop) "bWW" = ( /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/door/airlock/command{ id_tag = "captainofficedoor"; @@ -47237,10 +45485,7 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/crew_quarters/captain) "bWX" = ( /turf/simulated/wall, @@ -47261,9 +45506,7 @@ }, /area/crew_quarters/captain/bedroom) "bXa" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/disposalpipe/segment{ dir = 4; @@ -47290,9 +45533,6 @@ }, /area/hallway/primary/starboard) "bXf" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 1 }, @@ -47301,6 +45541,9 @@ pixel_y = -24 }, /obj/machinery/light, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ icon_state = "neutralcorner" }, @@ -47309,8 +45552,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -47325,38 +45567,36 @@ /turf/simulated/floor/plasteel, /area/lawoffice) "bXh" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 }, /turf/simulated/floor/plasteel{ icon_state = "neutralcorner" }, /area/hallway/primary/starboard) "bXi" = ( +/obj/machinery/light, /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/light, /turf/simulated/floor/plasteel{ icon_state = "neutralcorner" }, /area/hallway/primary/starboard) "bXj" = ( -/obj/structure/disposalpipe/junction{ - dir = 4; - icon_state = "pipe-j2" - }, /obj/machinery/power/apc{ name = "south bump"; pixel_y = -24 }, /obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ icon_state = "neutralcorner" }, @@ -47370,17 +45610,16 @@ }, /area/hallway/primary/starboard) "bXl" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/junction{ + dir = 4 + }, /turf/simulated/floor/plasteel{ icon_state = "redcorner" }, @@ -47395,7 +45634,7 @@ /turf/simulated/floor/plating, /area/turret_protected/aisat) "bXn" = ( -/obj/structure/disposalpipe/segment{ +/obj/structure/disposalpipe/junction{ dir = 4 }, /turf/simulated/floor/plasteel{ @@ -47431,18 +45670,19 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/public/glass, +/obj/machinery/door/airlock/public/glass{ + name = "Public Access" + }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "neutralcorner" }, /area/hallway/primary/port) "bXB" = ( -/obj/structure/disposalpipe/junction{ +/obj/structure/disposalpipe/segment{ dir = 4 }, /turf/simulated/floor/plasteel{ @@ -47453,7 +45693,9 @@ "bXC" = ( /obj/machinery/door/firedoor, /obj/effect/decal/warning_stripes/yellow, -/obj/machinery/door/airlock/public/glass, +/obj/machinery/door/airlock/public/glass{ + name = "Public Access" + }, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -47463,12 +45705,12 @@ }, /area/hallway/primary/starboard) "bXD" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/machinery/camera{ c_tag = "Primary Security Hallway" }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "neutralcorner" @@ -47667,15 +45909,18 @@ /turf/simulated/wall, /area/engine/engineering) "bYa" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2"; - tag = "" +/obj/machinery/light{ + dir = 4 }, -/obj/structure/lattice/catwalk, -/turf/space, -/area/space/nearstation) +/obj/machinery/status_display{ + pixel_x = 32 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "redcorner" + }, +/area/hallway/primary/starboard) "bYb" = ( /obj/structure/sign/securearea{ desc = "A warning sign which reads 'RADIOACTIVE AREA'"; @@ -47701,8 +45946,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /turf/simulated/floor/plasteel{ dir = 0; @@ -47736,15 +45980,14 @@ /turf/space, /area/space/nearstation) "bYm" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - tag = "" +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" }, -/obj/structure/lattice/catwalk, -/turf/space, -/area/space/nearstation) +/turf/simulated/floor/plasteel{ + icon_state = "cult" + }, +/area/magistrateoffice) "bYn" = ( /obj/structure/sign/directions/evac{ pixel_y = -8 @@ -47783,10 +46026,11 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" + }, +/obj/machinery/computer/card{ + dir = 1 }, -/obj/machinery/computer/card, /turf/simulated/floor/plasteel{ dir = 5; icon_state = "dark" @@ -47796,37 +46040,20 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, -/area/crew_quarters/heads/hop) -"bYs" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - tag = "" - }, -/turf/simulated/floor/carpet, +/turf/simulated/floor/wood, /area/crew_quarters/heads/hop) "bYu" = ( /obj/machinery/status_display{ pixel_x = 32 }, /obj/machinery/pdapainter, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/crew_quarters/heads/hop) "bYv" = ( /turf/simulated/wall/r_wall, /area/ntrep) -"bYw" = ( -/turf/simulated/wall, -/area/civilian/barber) "bYx" = ( /turf/simulated/wall/r_wall, /area/blueshield) @@ -47835,36 +46062,30 @@ /obj/machinery/computer/security/telescreen/entertainment{ pixel_x = -32 }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/crew_quarters/captain/bedroom) "bYz" = ( /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/crew_quarters/captain/bedroom) "bYA" = ( /obj/machinery/light_switch{ pixel_x = -8; pixel_y = 26 }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/crew_quarters/captain/bedroom) "bYB" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/public/glass, +/obj/machinery/door/airlock/public/glass{ + name = "Public Access" + }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -47892,8 +46113,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 4 @@ -47934,12 +46154,13 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/door/firedoor, /obj/effect/decal/warning_stripes/yellow, -/obj/machinery/door/airlock/public/glass, +/obj/machinery/door/airlock/public/glass{ + name = "Public Access" + }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -47962,8 +46183,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -47971,9 +46191,8 @@ name = "Internal Affairs Office"; req_access_txt = "38" }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/wood, /area/lawoffice) "bYP" = ( /obj/machinery/door/poddoor/shutters{ @@ -47989,21 +46208,26 @@ req_access_txt = "74" }, /obj/machinery/door/firedoor, -/turf/simulated/floor/plating, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plasteel{ + icon_state = "cult" + }, /area/magistrateoffice) "bYQ" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/spawner/window/reinforced, -/obj/machinery/door/poddoor/shutters{ - density = 0; - dir = 2; - icon_state = "open"; - id_tag = "magistrate"; - name = "Magistrate Privacy Shutters"; - opacity = 0 +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 }, -/turf/simulated/floor/plating, -/area/magistrateoffice) +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/chair/sofa/corp, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + icon_state = "white" + }, +/area/medical/medbay) "bYR" = ( /obj/effect/spawner/window/reinforced, /obj/machinery/door/poddoor/shutters{ @@ -48047,8 +46271,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -48059,8 +46282,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -48077,8 +46299,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 1 @@ -48095,8 +46316,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -48114,8 +46334,7 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 10 @@ -48123,8 +46342,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 10 @@ -48146,8 +46364,7 @@ /obj/structure/cable{ d1 = 1; d2 = 8; - icon_state = "1-8"; - tag = "" + icon_state = "1-8" }, /obj/structure/cable{ d2 = 8; @@ -48185,7 +46402,9 @@ }, /area/turret_protected/aisat) "bZi" = ( -/obj/machinery/door/airlock/public/glass, +/obj/machinery/door/airlock/public/glass{ + name = "Court gallery" + }, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -48322,14 +46541,18 @@ name = "Engineering Junction"; sortType = 4 }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, /turf/simulated/floor/plasteel, /area/engine/engineering) "bZA" = ( /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/effect/decal/warning_stripes/north, /turf/simulated/floor/plasteel, @@ -48338,8 +46561,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/cable{ d1 = 1; @@ -48354,8 +46576,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/cable{ d2 = 8; @@ -48367,8 +46588,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/cable{ d2 = 8; @@ -48377,7 +46597,10 @@ /obj/machinery/power/smes{ charge = 2e+006 }, -/turf/simulated/floor/greengrid, +/turf/simulated/floor/plasteel{ + dir = 5; + icon_state = "dark" + }, /area/engine/engineering) "bZE" = ( /obj/structure/cable{ @@ -48387,7 +46610,10 @@ /obj/machinery/power/smes{ charge = 2e+006 }, -/turf/simulated/floor/greengrid, +/turf/simulated/floor/plasteel{ + dir = 5; + icon_state = "dark" + }, /area/engine/engineering) "bZG" = ( /obj/effect/decal/cleanable/dirt, @@ -48398,15 +46624,6 @@ }, /area/maintenance/port) "bZI" = ( -/obj/structure/cable{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, /obj/structure/closet/crate, /obj/effect/spawner/lootdrop/maintenance{ lootcount = 3; @@ -48416,11 +46633,11 @@ /area/maintenance/port) "bZJ" = ( /obj/structure/table/wood, -/obj/machinery/computer/library, /obj/machinery/light_switch{ pixel_x = 4; pixel_y = 26 }, +/obj/machinery/computer/library, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -48485,12 +46702,12 @@ /obj/structure/table/wood, /obj/item/folder, /obj/item/pen, -/obj/machinery/newscaster{ - pixel_y = 32 - }, /obj/machinery/light/small{ dir = 1 }, +/obj/machinery/newscaster{ + pixel_y = 32 + }, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -48508,10 +46725,10 @@ /obj/item/radio/intercom{ pixel_y = 26 }, +/obj/effect/decal/cleanable/cobweb, /obj/machinery/computer/security/telescreen/entertainment{ pixel_x = -32 }, -/obj/effect/decal/cleanable/cobweb, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -48534,8 +46751,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 8 @@ -48558,10 +46774,12 @@ /turf/simulated/wall/r_wall, /area/crew_quarters/heads/hop) "bZX" = ( -/obj/machinery/computer/secure_data, /obj/machinery/light{ dir = 8 }, +/obj/machinery/computer/secure_data{ + dir = 4 + }, /turf/simulated/floor/plasteel{ dir = 5; icon_state = "dark" @@ -48573,78 +46791,57 @@ /obj/machinery/photocopier/faxmachine{ department = "Head of Personnel's Office" }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/crew_quarters/heads/hop) "cab" = ( /obj/structure/closet/secure_closet/ntrep, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/ntrep) "cac" = ( /obj/machinery/computer/secure_data, -/turf/simulated/floor/carpet, +/obj/machinery/newscaster/security_unit{ + pixel_y = 32 + }, +/turf/simulated/floor/carpet/black, /area/ntrep) "cad" = ( /obj/structure/table/wood, /obj/machinery/photocopier/faxmachine/longrange{ department = "NT Representative's Office" }, -/turf/simulated/floor/carpet, +/turf/simulated/floor/carpet/black, /area/ntrep) "cae" = ( -/obj/item/flag/nt, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/obj/structure/bookcase, +/obj/item/book/manual/sop_command, +/obj/item/book/manual/sop_engineering, +/obj/item/book/manual/sop_general, +/obj/item/book/manual/sop_legal, +/obj/item/book/manual/sop_medical, +/obj/item/book/manual/sop_science, +/obj/item/book/manual/sop_security, +/obj/item/book/manual/sop_service, +/obj/item/book/manual/sop_supply, +/turf/simulated/floor/wood, /area/ntrep) "caf" = ( -/obj/machinery/dye_generator, -/obj/machinery/alarm{ - dir = 4; - pixel_x = -24 +/obj/structure/chair/sofa/right, +/obj/structure/sign/poster/official/random{ + pixel_y = 32 }, -/turf/simulated/floor/plasteel{ - icon_state = "barber" - }, -/area/civilian/barber) +/turf/simulated/floor/wood, +/area/ntrep) "cag" = ( -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, -/obj/structure/chair/barber{ - dir = 4 - }, -/obj/structure/cable{ - d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/floor/plasteel{ - icon_state = "barber" - }, -/area/civilian/barber) +/obj/structure/chair/sofa, +/turf/simulated/floor/wood, +/area/ntrep) "cah" = ( -/obj/structure/table/reinforced, -/obj/structure/mirror{ - pixel_x = 28 - }, -/obj/item/razor, -/obj/machinery/camera{ - c_tag = "Barber Shop" - }, -/turf/simulated/floor/plasteel{ - icon_state = "barber" - }, -/area/civilian/barber) +/obj/structure/chair/sofa/corner, +/turf/simulated/floor/wood, +/area/ntrep) "cai" = ( /obj/item/flag/nt, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/blueshield) "caj" = ( /obj/structure/table/wood, @@ -48655,15 +46852,16 @@ /area/blueshield) "cak" = ( /obj/machinery/computer/crew, +/obj/machinery/newscaster/security_unit{ + pixel_y = 32 + }, /turf/simulated/floor/plasteel{ icon_state = "bcarpet05" }, /area/blueshield) "cal" = ( /obj/structure/closet/secure_closet/blueshield, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/blueshield) "cam" = ( /obj/structure/table/wood, @@ -48679,8 +46877,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 5 @@ -48688,7 +46885,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 5 }, -/obj/structure/disposalpipe/segment, /turf/simulated/floor/carpet/black, /area/crew_quarters/captain/bedroom) "cao" = ( @@ -48698,9 +46894,7 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 1 }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/crew_quarters/captain/bedroom) "cap" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ @@ -48709,17 +46903,13 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 10 }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/crew_quarters/captain/bedroom) "caq" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 1 }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/crew_quarters/captain/bedroom) "car" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -48783,13 +46973,13 @@ }, /area/crew_quarters/courtroom) "caz" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/machinery/camera{ c_tag = "Primary Security Hallway East"; dir = 1 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ icon_state = "redcorner" }, @@ -48848,54 +47038,49 @@ /obj/structure/extinguisher_cabinet{ pixel_x = -28 }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/obj/item/clipboard, +/obj/item/toy/figure/crew/lawyer, +/turf/simulated/floor/wood, /area/lawoffice) "caH" = ( /obj/structure/table/wood, -/obj/item/clipboard, -/obj/item/toy/figure/crew/lawyer, -/turf/simulated/floor/plasteel{ - icon_state = "wood" +/obj/machinery/photocopier/faxmachine/longrange{ + department = "IAA Office" }, +/turf/simulated/floor/wood, /area/lawoffice) "caI" = ( /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plasteel{ - icon_state = "wood" +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" }, +/turf/simulated/floor/wood, /area/lawoffice) "caJ" = ( -/obj/machinery/photocopier/faxmachine/longrange{ - department = "Magistrate's Office" - }, -/obj/structure/table/wood, -/turf/simulated/floor/plasteel{ - icon_state = "wood" +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" }, +/turf/simulated/floor/wood, /area/lawoffice) "caK" = ( /obj/machinery/firealarm{ dir = 4; pixel_x = 24 }, -/obj/structure/closet/lawcloset, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/obj/structure/filingcabinet/security, +/turf/simulated/floor/wood, /area/lawoffice) "caM" = ( /obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" + dir = 4 }, /obj/machinery/computer/prisoner{ req_access = null; @@ -48919,8 +47104,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 8 @@ -48934,8 +47118,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/door_timer/cell_5{ pixel_y = -32 @@ -48950,7 +47133,6 @@ /obj/item/radio/intercom{ pixel_y = 26 }, -/obj/machinery/computer/med_data/laptop, /obj/machinery/flasher_button{ id = "hopflash"; pixel_x = -38; @@ -48977,6 +47159,7 @@ pixel_x = -24; pixel_y = 8 }, +/obj/machinery/computer/med_data/laptop, /turf/simulated/floor/plasteel{ dir = 5; icon_state = "dark" @@ -49232,6 +47415,11 @@ dir = 4; icon_state = "pipe-c" }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, /turf/simulated/floor/plasteel{ icon_state = "yellowfull" }, @@ -49259,6 +47447,12 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/chair/sofa/corp/corner{ + dir = 4 + }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "whiteblue" @@ -49339,9 +47533,7 @@ dir = 1; in_use = 1 }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/crew_quarters/captain/bedroom) "cbB" = ( /obj/effect/decal/cleanable/dirt, @@ -49351,12 +47543,6 @@ /turf/simulated/wall, /area/maintenance/port) "cbE" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2"; - tag = "" - }, /obj/effect/decal/cleanable/dirt, /obj/machinery/light/small{ dir = 4; @@ -49405,8 +47591,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 10; @@ -49424,13 +47609,13 @@ /obj/structure/chair/comfy/black{ dir = 8 }, -/obj/machinery/newscaster{ - pixel_x = 32 - }, /obj/machinery/camera{ c_tag = "Library North"; dir = 8 }, +/obj/machinery/newscaster{ + pixel_x = 32 + }, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -49495,8 +47680,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/effect/decal/warning_stripes/south, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -49508,8 +47692,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/item/twohanded/required/kirbyplants, /turf/simulated/floor/plasteel{ @@ -49538,8 +47721,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/cable, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -49562,9 +47744,10 @@ }, /area/hallway/primary/central) "cbW" = ( -/turf/simulated/floor/plasteel{ - icon_state = "wood" +/obj/machinery/keycard_auth{ + pixel_x = -24 }, +/turf/simulated/floor/wood, /area/ntrep) "cbX" = ( /obj/structure/table/wood, @@ -49574,7 +47757,7 @@ pixel_x = -5; pixel_y = 12 }, -/turf/simulated/floor/carpet, +/turf/simulated/floor/carpet/black, /area/ntrep) "cbY" = ( /obj/structure/chair/office/dark{ @@ -49583,51 +47766,54 @@ /obj/effect/landmark/start{ name = "Nanotrasen Representative" }, -/turf/simulated/floor/carpet, +/turf/simulated/floor/carpet/black, /area/ntrep) "cbZ" = ( /obj/structure/chair/comfy/black{ dir = 8 }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" }, +/turf/simulated/floor/wood, /area/ntrep) "cca" = ( -/obj/machinery/newscaster{ - pixel_x = -32 - }, -/turf/simulated/floor/plasteel{ - icon_state = "barber" - }, -/area/civilian/barber) +/obj/structure/table/wood, +/obj/item/reagent_containers/food/drinks/bottle/whiskey, +/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass, +/turf/simulated/floor/wood, +/area/ntrep) "ccb" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2"; - tag = "" +/obj/structure/table/wood, +/obj/item/clothing/mask/cigarette/cigar/cohiba{ + pixel_x = 3; + pixel_y = -3 }, -/turf/simulated/floor/plasteel{ - icon_state = "barber" +/obj/item/clothing/mask/cigarette/cigar/havana{ + pixel_x = -3; + pixel_y = 3 }, -/area/civilian/barber) +/turf/simulated/floor/wood, +/area/ntrep) "ccc" = ( -/obj/structure/table/reinforced, +/obj/structure/chair/sofa{ + dir = 8 + }, +/obj/structure/sign/poster/official/random{ + pixel_x = 32 + }, /obj/machinery/computer/security/telescreen/entertainment{ pixel_x = 32 }, -/turf/simulated/floor/plasteel{ - icon_state = "barber" - }, -/area/civilian/barber) +/turf/simulated/floor/wood, +/area/ntrep) "ccd" = ( /obj/structure/chair/comfy/black{ dir = 4 }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/blueshield) "cce" = ( /obj/structure/table/wood, @@ -49647,9 +47833,7 @@ }, /area/blueshield) "ccg" = ( -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/blueshield) "cch" = ( /obj/structure/table/wood, @@ -49672,73 +47856,51 @@ /obj/effect/landmark/start{ name = "Captain" }, -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" - }, /turf/simulated/floor/carpet/black, /area/crew_quarters/captain/bedroom) "ccj" = ( /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 1 }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/crew_quarters/captain/bedroom) "cck" = ( /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, -/obj/machinery/hologram/holopad, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" - }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/obj/machinery/hologram/holopad, +/turf/simulated/floor/wood, /area/crew_quarters/captain/bedroom) "ccl" = ( /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 1 }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/crew_quarters/captain/bedroom) "ccm" = ( /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/machinery/door/window{ dir = 8; @@ -49804,8 +47966,7 @@ /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 @@ -49819,8 +47980,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -49834,8 +47994,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/cable{ d1 = 1; @@ -49857,8 +48016,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -49885,14 +48043,12 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -49900,16 +48056,13 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 1 }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/lawoffice) "ccz" = ( /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -49943,8 +48096,7 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 10 @@ -49955,6 +48107,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 10 }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ icon_state = "grimy" }, @@ -49964,10 +48117,8 @@ dir = 8; pixel_x = 24 }, -/obj/structure/filingcabinet/security, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/obj/structure/closet/lawcloset, +/turf/simulated/floor/wood, /area/lawoffice) "ccD" = ( /obj/item/radio/intercom/department/security{ @@ -49991,10 +48142,10 @@ /turf/simulated/floor/carpet, /area/magistrateoffice) "ccF" = ( -/obj/machinery/hologram/holopad, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 10 }, +/obj/machinery/hologram/holopad, /turf/simulated/floor/carpet, /area/magistrateoffice) "ccG" = ( @@ -50004,7 +48155,7 @@ }, /area/magistrateoffice) "ccL" = ( -/obj/structure/closet/secure_closet, +/obj/structure/closet, /obj/machinery/light/small{ dir = 8 }, @@ -50013,7 +48164,7 @@ }, /area/security/evidence) "ccM" = ( -/obj/structure/closet/secure_closet, +/obj/structure/closet, /obj/machinery/power/apc{ dir = 1; name = "north bump"; @@ -50046,7 +48197,7 @@ }, /area/crew_quarters/courtroom) "ccP" = ( -/obj/structure/closet/secure_closet, +/obj/structure/closet, /obj/machinery/light/small{ dir = 4 }, @@ -50160,8 +48311,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/effect/decal/warning_stripes/yellow, /turf/simulated/floor/plasteel{ @@ -50291,9 +48441,7 @@ /obj/machinery/light{ dir = 8 }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/library) "cdy" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -50316,9 +48464,7 @@ /obj/machinery/light/small{ dir = 4 }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/library) "cdB" = ( /obj/structure/sign/nosmoking_2, @@ -50335,7 +48481,9 @@ /turf/simulated/wall/r_wall, /area/crew_quarters/heads/hop) "cdE" = ( -/obj/machinery/computer/supplycomp, +/obj/machinery/computer/supplycomp{ + dir = 4 + }, /turf/simulated/floor/plasteel{ dir = 5; icon_state = "dark" @@ -50354,8 +48502,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/carpet, @@ -50367,98 +48514,60 @@ }, /obj/item/clipboard, /obj/item/toy/figure/crew/hop, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/crew_quarters/heads/hop) "cdI" = ( -/obj/machinery/keycard_auth{ - pixel_x = -24 - }, /obj/machinery/door/window{ dir = 2; name = "Desk Door"; req_access_txt = "73" }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" +/obj/machinery/light{ + dir = 8 }, +/turf/simulated/floor/wood, /area/ntrep) "cdJ" = ( /obj/structure/table/wood, /obj/item/folder, /obj/item/pen/multi/fountain, -/turf/simulated/floor/carpet, +/turf/simulated/floor/carpet/black, /area/ntrep) "cdK" = ( /obj/structure/table/wood, /obj/item/stamp/rep, -/turf/simulated/floor/carpet, +/turf/simulated/floor/carpet/black, /area/ntrep) "cdL" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, -/area/ntrep) -"cdM" = ( -/obj/effect/landmark/start{ - name = "Barber" - }, -/obj/machinery/light/small{ - dir = 8 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - icon_state = "barber" - }, -/area/civilian/barber) -"cdN" = ( /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, -/obj/structure/chair/barber{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/turf/simulated/floor/plasteel{ - icon_state = "barber" - }, -/area/civilian/barber) +/turf/simulated/floor/wood, +/area/ntrep) +"cdN" = ( +/obj/structure/table/wood, +/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass, +/obj/item/storage/fancy/donut_box, +/turf/simulated/floor/wood, +/area/ntrep) "cdO" = ( -/obj/structure/table/reinforced, -/obj/structure/mirror{ - pixel_x = 28 - }, -/obj/item/razor, -/obj/machinery/atmospherics/unary/vent_pump/on{ +/obj/structure/chair/sofa/left{ dir = 8 }, -/turf/simulated/floor/plasteel{ - icon_state = "barber" +/obj/machinery/light{ + dir = 4 }, -/area/civilian/barber) +/turf/simulated/floor/wood, +/area/ntrep) "cdP" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on, /obj/machinery/light{ dir = 8 }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/blueshield) "cdQ" = ( /obj/structure/table/wood, @@ -50495,9 +48604,7 @@ /obj/machinery/keycard_auth{ pixel_x = 24 }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/blueshield) "cdT" = ( /obj/structure/table/wood, @@ -50516,23 +48623,17 @@ dir = 1; pixel_y = -24 }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/crew_quarters/captain/bedroom) "cdW" = ( /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/crew_quarters/captain/bedroom) "cdX" = ( /obj/machinery/firealarm{ @@ -50544,9 +48645,7 @@ c_tag = "Captain's Quarters"; dir = 1 }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/crew_quarters/captain/bedroom) "cdY" = ( /obj/structure/cable, @@ -50619,8 +48718,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /turf/simulated/floor/plasteel{ dir = 1; @@ -50648,19 +48746,13 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" - }, -/obj/machinery/newscaster{ - pixel_x = -32 - }, -/obj/machinery/light{ - dir = 8 + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plasteel{ - icon_state = "wood" +/obj/machinery/newscaster/security_unit{ + pixel_x = -32 }, +/turf/simulated/floor/wood, /area/lawoffice) "cen" = ( /obj/structure/table/wood, @@ -50682,30 +48774,29 @@ }, /area/lawoffice) "cep" = ( -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/junction{ + dir = 1 + }, /turf/simulated/floor/plasteel{ icon_state = "grimy" }, /area/lawoffice) "ceq" = ( +/obj/machinery/light{ + dir = 4 + }, /obj/structure/disposalpipe/trunk{ dir = 8 }, /obj/machinery/disposal, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/lawoffice) "cer" = ( /obj/structure/chair/comfy/brown{ @@ -50714,6 +48805,9 @@ /obj/effect/landmark/start{ name = "Magistrate" }, +/obj/machinery/newscaster/security_unit{ + pixel_x = -32 + }, /turf/simulated/floor/carpet, /area/magistrateoffice) "ces" = ( @@ -50733,42 +48827,26 @@ /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralfull" }, /area/security/brig) -"cez" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - tag = "" - }, -/turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "redcorner" - }, -/area/security/brig) "ceA" = ( /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/door/airlock/security{ - name = "Security-Storage Backroom"; - req_access = null; + name = "Evidence Storage"; req_access_txt = "63" }, /obj/machinery/door/firedoor, @@ -50780,8 +48858,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /turf/simulated/floor/plasteel{ icon_state = "dark" @@ -50841,8 +48918,7 @@ /obj/structure/cable{ d1 = 1; d2 = 8; - icon_state = "1-8"; - tag = "" + icon_state = "1-8" }, /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 1 @@ -50890,8 +48966,11 @@ /turf/simulated/floor/bluegrid, /area/tcommsat/chamber) "ceQ" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 +/obj/structure/disposalpipe/sortjunction{ + dir = 8; + icon_state = "pipe-j2s"; + name = "Chemistry Junction"; + sortType = 11 }, /turf/simulated/floor/plasteel{ dir = 6; @@ -50976,9 +49055,7 @@ /area/engine/engineering) "cfa" = ( /obj/structure/closet/secure_closet/captains, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/crew_quarters/captain/bedroom) "cfb" = ( /obj/structure/disposalpipe/segment, @@ -51040,14 +49117,14 @@ name = "Station Intercom (General)"; pixel_y = -29 }, -/obj/machinery/computer/station_alert, /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, +/obj/machinery/computer/station_alert, /obj/machinery/computer/monitor{ + dir = 1; name = "Grid Power Monitoring Computer" }, /turf/simulated/floor/plasteel{ @@ -51060,12 +49137,13 @@ pixel_x = 28; pixel_y = -28 }, -/obj/machinery/computer/atmos_alert, /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" + }, +/obj/machinery/computer/atmos_alert{ + dir = 1 }, /turf/simulated/floor/plasteel{ dir = 5; @@ -51076,8 +49154,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /turf/simulated/wall/r_wall, /area/engine/engineering) @@ -51086,8 +49163,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/effect/spawner/lootdrop/maintenance, /obj/effect/decal/cleanable/dirt, @@ -51097,14 +49173,12 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /turf/simulated/floor/plating, /area/maintenance/port) @@ -51130,27 +49204,19 @@ dir = 4; pixel_x = -24 }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/library) "cfr" = ( /obj/structure/chair/office/dark, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/library) "cfs" = ( /obj/item/twohanded/required/kirbyplants, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/library) "cft" = ( /obj/machinery/bookbinder, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/library) "cfu" = ( /obj/structure/bookcase, @@ -51160,25 +49226,20 @@ /obj/machinery/newscaster{ pixel_y = 32 }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/library) "cfv" = ( /obj/structure/chair/comfy/red, /obj/effect/landmark/start{ name = "Civilian" }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/library) "cfw" = ( /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -51192,39 +49253,31 @@ /obj/structure/extinguisher_cabinet{ pixel_y = 32 }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/library) "cfy" = ( /obj/structure/bookcase, /obj/machinery/light{ dir = 1 }, -/obj/machinery/newscaster{ - pixel_y = 32 - }, /obj/machinery/camera{ c_tag = "Library Starboard" }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" +/obj/machinery/newscaster{ + pixel_y = 32 }, +/turf/simulated/floor/wood, /area/library) "cfz" = ( /obj/structure/chair/comfy/red, /obj/item/radio/intercom{ pixel_y = 26 }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/library) "cfA" = ( /obj/machinery/vending/coffee, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/library) "cfB" = ( /obj/machinery/light/small, @@ -51241,10 +49294,11 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" + }, +/obj/machinery/computer/security/mining{ + dir = 4 }, -/obj/machinery/computer/security/mining, /turf/simulated/floor/plasteel{ dir = 5; icon_state = "dark" @@ -51254,89 +49308,50 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/chair/office/dark, /obj/effect/landmark/start{ name = "Head of Personnel" }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/crew_quarters/heads/hop) "cfE" = ( /obj/structure/table/wood, /obj/machinery/recharger, -/obj/machinery/newscaster{ +/obj/machinery/newscaster/security_unit{ pixel_x = 32 }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/crew_quarters/heads/hop) -"cfF" = ( -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, -/area/ntrep) "cfG" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 }, -/turf/simulated/floor/carpet, +/turf/simulated/floor/carpet/black, /area/ntrep) "cfH" = ( -/turf/simulated/floor/carpet, +/turf/simulated/floor/carpet/black, /area/ntrep) "cfI" = ( /obj/structure/cable{ + d1 = 1; d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/power/apc{ - cell_type = 25000; - dir = 4; - name = "east bump"; - pixel_x = 24; - shock_proof = 1 + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 10 }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/ntrep) -"cfJ" = ( -/obj/item/twohanded/required/kirbyplants, -/turf/simulated/floor/plasteel{ - icon_state = "barber" - }, -/area/civilian/barber) "cfK" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2"; - tag = "" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plasteel{ - icon_state = "barber" - }, -/area/civilian/barber) +/turf/simulated/floor/wood, +/area/ntrep) "cfL" = ( -/obj/structure/dresser, -/turf/simulated/floor/plasteel{ - icon_state = "barber" - }, -/area/civilian/barber) +/obj/item/flag/nt, +/turf/simulated/floor/wood, +/area/ntrep) "cfM" = ( /obj/structure/cable{ d2 = 2; @@ -51351,9 +49366,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 6 }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/blueshield) "cfN" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ @@ -51372,16 +49385,13 @@ /obj/machinery/light{ dir = 4 }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/blueshield) "cfQ" = ( /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/door/airlock/command{ @@ -51391,15 +49401,13 @@ req_access_txt = "20" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel, /area/crew_quarters/captain/bedroom) "cfR" = ( /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -51462,9 +49470,7 @@ /obj/effect/landmark/start{ name = "Internal Affairs Agent" }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/lawoffice) "cgb" = ( /obj/structure/table/wood, @@ -51487,15 +49493,14 @@ }, /area/lawoffice) "cgd" = ( -/obj/structure/disposalpipe/segment, /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ icon_state = "grimy" }, @@ -51507,7 +49512,7 @@ /turf/simulated/floor/carpet, /area/magistrateoffice) "cgg" = ( -/obj/structure/closet/secure_closet, +/obj/structure/closet, /obj/machinery/alarm{ pixel_y = 24 }, @@ -51545,10 +49550,6 @@ /turf/simulated/floor/carpet, /area/magistrateoffice) "cgj" = ( -/obj/machinery/disposal, -/obj/structure/disposalpipe/trunk{ - dir = 1 - }, /obj/machinery/light, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -51564,6 +49565,10 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, /turf/simulated/floor/plasteel{ icon_state = "cult" }, @@ -51576,8 +49581,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -51593,8 +49597,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 4 @@ -51608,19 +49611,17 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /turf/simulated/floor/plasteel, /area/security/brig) "cgo" = ( -/obj/structure/closet/secure_closet, +/obj/structure/closet, /obj/item/radio/intercom{ dir = 8; pixel_y = -28 @@ -51647,6 +49648,7 @@ /obj/structure/window/reinforced{ dir = 8 }, +/obj/structure/closet, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -51768,15 +49770,15 @@ }, /area/engine/engineering) "cgK" = ( -/obj/machinery/door/airlock/glass{ - name = "Magistrate's Office"; - req_access_txt = "74" +/obj/machinery/door/airlock{ + name = "Court"; + req_access_txt = "38" }, /turf/simulated/floor/plasteel, /area/crew_quarters/courtroom) "cgL" = ( -/obj/machinery/hologram/holopad, /obj/effect/decal/warning_stripes/yellow/hollow, +/obj/machinery/hologram/holopad, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralfull" @@ -51819,9 +49821,7 @@ c_tag = "Magistrate's Office"; dir = 8 }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/lawoffice) "cgW" = ( /obj/structure/table/wood, @@ -51829,17 +49829,13 @@ /obj/machinery/newscaster{ pixel_x = -32 }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/library) "cgX" = ( /obj/structure/table/wood, /obj/item/folder, /obj/item/pen, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/library) "cgY" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on, @@ -51855,7 +49851,10 @@ }, /area/toxins/xenobiology) "cha" = ( -/obj/structure/disposalpipe/segment, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "whiteblue" @@ -51863,7 +49862,9 @@ /area/medical/medbay) "chb" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/public/glass, +/obj/machinery/door/airlock/public/glass{ + name = "Public Access" + }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralcorner" @@ -51899,9 +49900,7 @@ /obj/structure/table/wood, /obj/item/folder/blue, /obj/item/pen, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/crew_quarters/heads/hop) "chh" = ( /obj/structure/table/wood, @@ -51913,84 +49912,78 @@ /area/crew_quarters/heads/hop) "chj" = ( /obj/machinery/photocopier, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/crew_quarters/heads/hop) "chk" = ( -/obj/structure/bookcase, -/obj/item/book/manual/sop_command, -/obj/item/book/manual/sop_engineering, -/obj/item/book/manual/sop_general, -/obj/item/book/manual/sop_legal, -/obj/item/book/manual/sop_medical, -/obj/item/book/manual/sop_science, -/obj/item/book/manual/sop_security, -/obj/item/book/manual/sop_service, -/obj/item/book/manual/sop_supply, -/turf/simulated/floor/plasteel{ - icon_state = "wood" +/obj/machinery/vending/coffee/free, +/obj/structure/sign/poster/official/random{ + pixel_x = -32 }, +/turf/simulated/floor/wood, /area/ntrep) "chl" = ( /obj/machinery/hologram/holopad, -/turf/simulated/floor/carpet, +/turf/simulated/floor/carpet/black, /area/ntrep) "chm" = ( /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/light_switch{ pixel_x = 25 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/ntrep) "chn" = ( -/obj/effect/spawner/window/reinforced, +/obj/structure/cable{ + d2 = 4; + icon_state = "0-4" + }, +/obj/effect/spawner/window/reinforced/polarized, /turf/simulated/floor/plating, -/area/civilian/barber) +/area/ntrep) "cho" = ( /obj/structure/cable{ - d1 = 1; + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/cable{ d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "0-2" }, -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/glass{ - name = "Barber Shop" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plasteel{ - icon_state = "barber" - }, -/area/civilian/barber) +/obj/effect/spawner/window/reinforced/polarized, +/turf/simulated/floor/plating, +/area/ntrep) "chp" = ( -/turf/simulated/wall/r_wall, -/area/civilian/barber) +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, +/obj/effect/spawner/window/reinforced/polarized, +/turf/simulated/floor/plating, +/area/ntrep) "chq" = ( /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/light_switch{ pixel_x = -25 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/blueshield) "chr" = ( /obj/machinery/hologram/holopad, @@ -52007,18 +50000,18 @@ /obj/item/reagent_containers/food/drinks/bottle/whiskey, /obj/item/reagent_containers/food/drinks/drinkingglass, /obj/item/reagent_containers/food/drinks/drinkingglass, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/blueshield) "cht" = ( /turf/simulated/wall/r_wall, /area/teleporter) "chu" = ( /obj/machinery/light, -/obj/machinery/computer/monitor, /obj/structure/cable, /obj/effect/decal/warning_stripes/north, +/obj/machinery/computer/monitor{ + dir = 1 + }, /turf/simulated/floor/plating, /area/turret_protected/aisat) "chv" = ( @@ -52038,8 +50031,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -52048,17 +50040,13 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /turf/simulated/floor/plating, /area/teleporter) "chy" = ( /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 10 @@ -52067,10 +50055,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 10 }, -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" - }, /turf/simulated/floor/plating, /area/teleporter) "chz" = ( @@ -52108,12 +50092,10 @@ }, /area/crew_quarters/courtroom) "chG" = ( -/obj/structure/disposalpipe/segment, /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/door/airlock/maintenance, /turf/simulated/floor/plasteel, @@ -52122,8 +50104,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /turf/simulated/floor/plasteel{ dir = 8; @@ -52170,37 +50151,28 @@ dir = 8; pixel_x = -28 }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/lawoffice) "chM" = ( /obj/structure/table/wood, /obj/item/paper_bin, /obj/item/pen, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/lawoffice) "chN" = ( /obj/item/twohanded/required/kirbyplants, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/lawoffice) "chO" = ( -/obj/structure/disposalpipe/segment, /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/wood, /area/lawoffice) "chP" = ( /obj/structure/rack, @@ -52209,28 +50181,23 @@ pixel_y = 4 }, /obj/item/storage/secure/briefcase, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/lawoffice) "chQ" = ( /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /obj/machinery/door/airlock/security/glass{ id_tag = "BrigEast"; @@ -52296,8 +50263,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/door/firedoor, /obj/machinery/door/airlock/engineering/glass{ @@ -52460,9 +50426,7 @@ /obj/effect/landmark/start{ name = "Civilian" }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/library) "civ" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ @@ -52503,7 +50467,9 @@ "ciA" = ( /obj/machinery/door/firedoor, /obj/effect/decal/warning_stripes/yellow, -/obj/machinery/door/airlock/public/glass, +/obj/machinery/door/airlock/public/glass{ + name = "Public Access" + }, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -52521,9 +50487,7 @@ /obj/machinery/newscaster{ pixel_x = -32 }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/crew_quarters/heads/hop) "ciD" = ( /obj/structure/chair/office/dark{ @@ -52538,9 +50502,7 @@ pixel_x = 24 }, /mob/living/simple_animal/pet/dog/corgi/Ian, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/crew_quarters/heads/hop) "ciF" = ( /obj/machinery/photocopier, @@ -52551,9 +50513,7 @@ dir = 1; pixel_y = -24 }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/ntrep) "ciG" = ( /obj/structure/cable{ @@ -52562,16 +50522,13 @@ icon_state = "2-4" }, /obj/item/flag/nt, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/ntrep) "ciH" = ( /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/alarm{ dir = 1; @@ -52585,16 +50542,13 @@ dir = 4 }, /obj/machinery/disposal, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/ntrep) "ciI" = ( /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/cable{ d1 = 2; @@ -52604,8 +50558,7 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 5 @@ -52617,12 +50570,9 @@ dir = 2; icon_state = "pipe-c" }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/ntrep) "ciJ" = ( -/obj/effect/spawner/window/reinforced, /obj/structure/cable{ d2 = 8; icon_state = "0-8" @@ -52633,31 +50583,32 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/effect/spawner/window/reinforced/polarized, /turf/simulated/floor/plating, /area/ntrep) "ciL" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2"; - tag = "" +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 }, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, -/turf/simulated/floor/plasteel{ +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 1; - icon_state = "neutral" - }, -/area/bridge/meeting_room) -"ciM" = ( -/obj/structure/sign/barber{ - pixel_x = -4; - pixel_y = 32 + initialize_directions = 11 }, /obj/machinery/light{ dir = 1; on = 1 }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "neutral" + }, +/area/hallway/primary/central/south) +"ciM" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -52668,7 +50619,7 @@ dir = 4; icon_state = "neutralcorner" }, -/area/bridge/meeting_room) +/area/hallway/primary/central/south) "ciN" = ( /obj/effect/spawner/window/reinforced, /obj/structure/cable{ @@ -52687,14 +50638,12 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/structure/cable{ d1 = 2; @@ -52711,16 +50660,13 @@ dir = 4; icon_state = "pipe-c" }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/blueshield) "ciP" = ( /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/alarm{ dir = 1; @@ -52734,21 +50680,16 @@ dir = 8 }, /obj/machinery/disposal, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/blueshield) "ciQ" = ( /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/item/flag/nt, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/blueshield) "ciR" = ( /obj/machinery/photocopier, @@ -52759,9 +50700,7 @@ dir = 1; pixel_y = -24 }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/blueshield) "ciS" = ( /turf/simulated/wall, @@ -52774,8 +50713,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/door/airlock/maintenance{ @@ -52783,7 +50721,6 @@ req_access_txt = "17" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel, /area/teleporter) "ciV" = ( @@ -52817,6 +50754,7 @@ icon_state = "0-4" }, /obj/machinery/computer/monitor{ + dir = 1; name = "Grid Power Monitoring Computer" }, /turf/simulated/floor/plasteel{ @@ -52890,8 +50828,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 1 @@ -52941,12 +50878,10 @@ }, /area/crew_quarters/courtroom) "cjk" = ( -/obj/structure/disposalpipe/segment, /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/door/airlock/maintenance{ @@ -52954,6 +50889,7 @@ req_access_txt = "38" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plating, /area/maintenance/starboard2) "cjl" = ( @@ -53024,8 +50960,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /turf/simulated/floor/plasteel, /area/security/range) @@ -53090,8 +51025,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/effect/decal/warning_stripes/yellow, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -53262,12 +51196,10 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel, /area/teleporter) "cka" = ( @@ -53280,27 +51212,15 @@ /turf/simulated/floor/plating, /area/maintenance/port) "cke" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /turf/simulated/floor/plasteel, /area/maintenance/port) @@ -53308,8 +51228,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/door/airlock/maintenance{ name = "Library Maintenance"; @@ -53330,8 +51249,7 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -53340,7 +51258,6 @@ }, /area/library) "cki" = ( -/obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 4; initialize_directions = 11 @@ -53349,20 +51266,22 @@ dir = 8; initialize_directions = 11 }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ icon_state = "white" }, /area/medical/medbay) "ckj" = ( -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/library) "ckk" = ( /obj/machinery/hologram/holopad, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/library) "ckl" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ @@ -53393,7 +51312,7 @@ /obj/machinery/light{ dir = 1 }, -/obj/structure/filingcabinet, +/obj/structure/closet/secure_closet/hop2, /turf/simulated/floor/carpet, /area/crew_quarters/heads/hop) "ckp" = ( @@ -53403,16 +51322,13 @@ /obj/structure/extinguisher_cabinet{ pixel_x = -26 }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/crew_quarters/heads/hop) "ckq" = ( /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /turf/simulated/floor/carpet, /area/crew_quarters/heads/hop) @@ -53431,21 +51347,19 @@ /obj/machinery/ai_status_display{ pixel_x = 32 }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/obj/structure/filingcabinet, +/turf/simulated/floor/wood, /area/crew_quarters/heads/hop) "ckt" = ( -/obj/effect/spawner/window/reinforced, /obj/structure/cable, +/obj/effect/spawner/window/reinforced/polarized, /turf/simulated/floor/plating, /area/ntrep) "cku" = ( /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/door/firedoor, /obj/machinery/door/airlock/command{ @@ -53453,22 +51367,19 @@ req_access_txt = "73" }, /obj/structure/disposalpipe/segment, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/ntrep) "ckv" = ( /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralfull" }, -/area/bridge/meeting_room) +/area/hallway/primary/central/south) "ckw" = ( /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/door/firedoor, /obj/machinery/door/airlock/command{ @@ -53476,13 +51387,11 @@ req_access_txt = "67" }, /obj/structure/disposalpipe/segment, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/blueshield) "ckx" = ( -/obj/effect/spawner/window/reinforced, /obj/structure/cable, +/obj/effect/spawner/window/reinforced, /turf/simulated/floor/plating, /area/blueshield) "cky" = ( @@ -53515,20 +51424,12 @@ }, /obj/structure/table, /obj/item/hand_tele, -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, /turf/simulated/floor/plasteel, /area/teleporter) "ckC" = ( /obj/structure/table, /obj/machinery/cell_charger, /obj/item/stock_parts/cell/high, -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" - }, /turf/simulated/floor/plasteel, /area/teleporter) "ckD" = ( @@ -53540,10 +51441,6 @@ req_access_txt = "17" }, /obj/effect/decal/warning_stripes/east, -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, /turf/simulated/floor/plasteel, /area/teleporter) "ckE" = ( @@ -53555,9 +51452,6 @@ /area/security/range) "ckF" = ( /obj/machinery/teleport/hub, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /turf/simulated/floor/plating, /area/teleporter) "ckG" = ( @@ -53566,9 +51460,6 @@ id_tag = "teleaccessshutter"; name = "Teleporter Access Shutters" }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /turf/simulated/floor/plasteel, /area/teleporter) "ckH" = ( @@ -53576,36 +51467,26 @@ dir = 4 }, /turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "neutralcorner" + icon_state = "white" }, -/area/hallway/primary/central) +/area/medical/research) "ckI" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2"; - tag = "" +/obj/structure/railing/corner{ + dir = 1 }, +/turf/simulated/floor/plasteel{ + icon_state = "white" + }, +/area/medical/research) +"ckJ" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, /turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "neutralfull" - }, -/area/hallway/primary/central) -"ckJ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/junction{ dir = 1; - icon_state = "pipe-j2" + icon_state = "whiteblue" }, -/turf/simulated/floor/plasteel{ - icon_state = "neutralcorner" - }, -/area/hallway/primary/central) +/area/medical/medbay) "ckK" = ( /obj/structure/chair{ dir = 4 @@ -53649,8 +51530,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel{ @@ -53672,15 +51552,10 @@ }, /area/crew_quarters/courtroom) "ckR" = ( -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /obj/effect/landmark{ name = "blobstart" @@ -53689,37 +51564,27 @@ /area/maintenance/starboard2) "ckS" = ( /obj/structure/disposalpipe/segment{ - dir = 4 + dir = 8; + icon_state = "pipe-c" }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - tag = "" +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "whiteblue" }, -/turf/simulated/floor/plasteel, -/area/maintenance/starboard2) +/area/medical/medbay) "ckT" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /turf/simulated/floor/plating, /area/maintenance/starboard2) "ckU" = ( -/obj/structure/disposalpipe/junction{ - dir = 8 - }, /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/cable{ d1 = 1; @@ -53732,17 +51597,17 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 5 }, +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, /turf/simulated/floor/plating, /area/maintenance/starboard2) "ckV" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -53753,17 +51618,16 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/turf/simulated/floor/plating, -/area/maintenance/starboard2) -"ckW" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, +/turf/simulated/floor/plating, +/area/maintenance/starboard2) +"ckW" = ( /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -53771,17 +51635,16 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/turf/simulated/floor/plating, -/area/maintenance/starboard2) -"ckX" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, +/turf/simulated/floor/plating, +/area/maintenance/starboard2) +"ckX" = ( /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -53792,17 +51655,16 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/turf/simulated/floor/plating, -/area/maintenance/starboard2) -"ckY" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, +/turf/simulated/floor/plating, +/area/maintenance/starboard2) +"ckY" = ( /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -53811,24 +51673,21 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel, /area/maintenance/starboard2) "ckZ" = ( -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" - }, /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 1 @@ -53836,14 +51695,17 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 1 }, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, /turf/simulated/floor/plating, /area/maintenance/starboard2) "cla" = ( /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -53861,8 +51723,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/effect/decal/cleanable/dirt, /obj/effect/decal/warning_stripes/west, @@ -53884,14 +51745,12 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -53906,8 +51765,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 1 @@ -53919,8 +51777,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/door/window{ dir = 8; @@ -53938,8 +51795,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /turf/simulated/floor/plating, /area/security/range) @@ -53947,8 +51803,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, @@ -53957,8 +51812,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/effect/landmark{ name = "blobstart" @@ -53969,14 +51823,12 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/effect/decal/warning_stripes/yellow/hollow, /obj/structure/target_stake, @@ -53995,8 +51847,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/door/firedoor, /obj/machinery/door/airlock/engineering/glass{ @@ -54039,8 +51890,8 @@ /turf/simulated/floor/plasteel, /area/engine/engineering) "clt" = ( -/obj/structure/closet/wardrobe/engineering_yellow, /obj/effect/decal/warning_stripes/yellow, +/obj/machinery/vending/engidrobe, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "yellow" @@ -54069,8 +51920,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, @@ -54088,7 +51938,6 @@ }, /area/maintenance/port) "clA" = ( -/obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 }, @@ -54101,8 +51950,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -54112,9 +51960,7 @@ /area/library) "clC" = ( /obj/structure/bookcase, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/library) "clD" = ( /obj/structure/table/wood, @@ -54177,11 +52023,11 @@ }, /area/library) "clI" = ( +/obj/structure/bed, +/obj/item/bedsheet/hop, /obj/machinery/newscaster{ pixel_x = -32 }, -/obj/structure/bed, -/obj/item/bedsheet/hop, /turf/simulated/floor/carpet, /area/crew_quarters/heads/hop) "clJ" = ( @@ -54205,24 +52051,19 @@ name = "Head of Personnel Bedroom"; req_access_txt = "57" }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/crew_quarters/heads/hop) "clL" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/crew_quarters/heads/hop) "clM" = ( /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -54239,8 +52080,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 4 @@ -54256,47 +52096,36 @@ dir = 4; pixel_x = 28 }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/crew_quarters/heads/hop) "clQ" = ( /obj/structure/cable{ d1 = 1; d2 = 4; - icon_state = "1-4"; - tag = "" + icon_state = "1-4" }, /obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "neutralcorner" }, -/area/bridge/meeting_room) +/area/hallway/primary/central/south) "clS" = ( /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "neutralcorner" }, -/area/bridge/meeting_room) +/area/hallway/primary/central/south) "clT" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2"; - tag = "" - }, /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/structure/cable{ d1 = 2; @@ -54305,17 +52134,21 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralfull" }, -/area/bridge/meeting_room) +/area/hallway/primary/central/south) "clU" = ( /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/camera{ c_tag = "Central Ring Hallway Center" @@ -54324,20 +52157,19 @@ dir = 4; icon_state = "neutralcorner" }, -/area/bridge/meeting_room) +/area/hallway/primary/central/south) "clV" = ( /obj/structure/cable{ d1 = 1; d2 = 8; - icon_state = "1-8"; - tag = "" + icon_state = "1-8" }, /obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "neutralcorner" }, -/area/bridge/meeting_room) +/area/hallway/primary/central/south) "clW" = ( /obj/structure/rack, /obj/item/storage/toolbox/emergency, @@ -54372,22 +52204,17 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/machinery/hologram/holopad, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" - }, +/obj/machinery/hologram/holopad, /turf/simulated/floor/plasteel, /area/teleporter) "cma" = ( /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -54395,10 +52222,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/structure/disposalpipe/junction{ - dir = 4; - icon_state = "pipe-j2" - }, /turf/simulated/floor/plasteel, /area/teleporter) "cmb" = ( @@ -54410,8 +52233,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 9 @@ -54419,24 +52241,15 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 4 }, -/obj/structure/disposalpipe/junction{ - dir = 4; - icon_state = "pipe-j2" - }, /turf/simulated/floor/plasteel, /area/teleporter) "cmc" = ( /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/effect/decal/warning_stripes/east, -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, /turf/simulated/floor/plasteel, /area/teleporter) "cmd" = ( @@ -54490,8 +52303,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 1 @@ -54514,15 +52326,10 @@ }, /area/crew_quarters/courtroom) "cmn" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2"; - tag = "" +/turf/simulated/floor/plasteel{ + icon_state = "neutralcorner" }, -/turf/simulated/floor/plating, -/area/maintenance/starboard2) +/area/hallway/primary/aft) "cmo" = ( /obj/structure/closet, /obj/effect/spawner/lootdrop/maintenance{ @@ -54541,17 +52348,17 @@ /turf/simulated/floor/plasteel, /area/maintenance/starboard2) "cmt" = ( -/obj/structure/closet/wardrobe/grey, -/turf/simulated/floor/plating, -/area/maintenance/starboard) +/turf/simulated/floor/plasteel{ + icon_state = "white" + }, +/area/hallway/primary/central) "cmv" = ( -/obj/structure/disposalpipe/segment, /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plating, /area/maintenance/starboard) "cmx" = ( @@ -54592,8 +52399,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/effect/decal/cleanable/dirt, /obj/effect/decal/warning_stripes/south, @@ -54639,8 +52445,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /turf/simulated/floor/plating, /area/security/range) @@ -54657,10 +52462,10 @@ /area/engine/engineering) "cmM" = ( /obj/structure/closet/secure_closet/engineering_personal, +/obj/effect/decal/warning_stripes/yellow, /obj/machinery/newscaster{ pixel_y = -32 }, -/obj/effect/decal/warning_stripes/yellow, /turf/simulated/floor/plasteel, /area/engine/engineering) "cmN" = ( @@ -54844,20 +52649,15 @@ name = "west bump"; pixel_x = -24 }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/library) "cni" = ( /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" - }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" + icon_state = "4-8" }, +/turf/simulated/floor/wood, /area/library) "cnj" = ( /obj/structure/cable{ @@ -54921,16 +52721,13 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/disposal, /obj/structure/disposalpipe/trunk{ dir = 4 }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/crew_quarters/heads/hop) "cnr" = ( /obj/machinery/firealarm{ @@ -54940,16 +52737,13 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/crew_quarters/heads/hop) "cns" = ( /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -54957,9 +52751,7 @@ dir = 2; icon_state = "pipe-c" }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/crew_quarters/heads/hop) "cnt" = ( /obj/item/twohanded/required/kirbyplants, @@ -54967,9 +52759,7 @@ pixel_x = -8; pixel_y = -24 }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/crew_quarters/heads/hop) "cnv" = ( /obj/machinery/hologram/holopad, @@ -54986,26 +52776,25 @@ }, /area/hallway/primary/central) "cnx" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralfull" }, -/area/bridge/meeting_room) +/area/hallway/primary/central/south) "cny" = ( /obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "neutralcorner" }, -/area/bridge/meeting_room) +/area/hallway/primary/central/south) "cnz" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -55056,8 +52845,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/effect/decal/warning_stripes/east, /turf/simulated/floor/plasteel, @@ -55070,7 +52858,9 @@ /turf/simulated/floor/plating, /area/security/range) "cnG" = ( -/obj/machinery/computer/teleporter, +/obj/machinery/computer/teleporter{ + dir = 8 + }, /turf/simulated/floor/plating, /area/teleporter) "cnH" = ( @@ -55112,8 +52902,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /turf/simulated/floor/plasteel{ icon_state = "neutral" @@ -55134,9 +52923,6 @@ }, /area/crew_quarters/courtroom) "cnO" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/machinery/door/firedoor, /obj/effect/decal/warning_stripes/yellow, /turf/simulated/floor/plasteel{ @@ -55148,19 +52934,19 @@ /turf/simulated/wall, /area/crew_quarters/locker) "cnR" = ( -/obj/structure/disposalpipe/segment, /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/door/airlock/maintenance, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel, /area/maintenance/starboard2) "cnS" = ( +/obj/effect/decal/warning_stripes/yellow, /obj/structure/plasticflaps{ opacity = 1 }, @@ -55168,15 +52954,13 @@ codes_txt = "delivery;dir=1"; location = "Security" }, -/obj/effect/decal/warning_stripes/yellow, /turf/simulated/floor/plasteel, /area/security/range) "cnT" = ( /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/door/airlock/maintenance{ name = "Security Maintenance"; @@ -55280,7 +53064,7 @@ /area/engine/engineering) "cog" = ( /obj/effect/decal/cleanable/dirt, -/obj/machinery/the_singularitygen, +/obj/machinery/the_singularitygen/tesla, /turf/simulated/floor/plating, /area/engine/engineering) "coh" = ( @@ -55329,17 +53113,22 @@ icon_state = "1-2" }, /obj/effect/decal/warning_stripes/northeastcorner, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, /turf/simulated/floor/plasteel, /area/engine/engineering) "com" = ( -/obj/structure/cable/yellow{ - d2 = 2; - icon_state = "0-2" - }, /obj/machinery/power/terminal{ dir = 1 }, /obj/effect/decal/warning_stripes/northeast, +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, /turf/simulated/floor/plasteel, /area/engine/engineering) "coo" = ( @@ -55347,11 +53136,6 @@ /obj/effect/decal/warning_stripes/northeast, /turf/simulated/floor/plasteel, /area/engine/engine_smes) -"cop" = ( -/obj/machinery/the_singularitygen, -/obj/effect/decal/warning_stripes/yellow/hollow, -/turf/simulated/floor/plasteel, -/area/engine/engine_smes) "coq" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/door/firedoor, @@ -55396,9 +53180,7 @@ /obj/machinery/light{ dir = 8 }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/library) "cox" = ( /obj/structure/table/wood, @@ -55441,8 +53223,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/door/firedoor, @@ -55460,9 +53241,7 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/disposalpipe/segment, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/crew_quarters/heads/hop) "coC" = ( /obj/effect/spawner/window/reinforced, @@ -55471,14 +53250,14 @@ icon_state = "0-2" }, /turf/simulated/floor/plating, -/area/bridge/meeting_room) +/area/hallway/primary/central/south) "coD" = ( /obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "neutralcorner" }, -/area/bridge/meeting_room) +/area/hallway/primary/central/south) "coE" = ( /obj/machinery/door/firedoor, /obj/effect/decal/warning_stripes/yellow, @@ -55580,17 +53359,15 @@ }, /area/crew_quarters/courtroom) "coQ" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2"; - tag = "" +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" }, /turf/simulated/floor/plasteel{ - icon_state = "dark" + dir = 8; + icon_state = "neutralfull" }, -/area/crew_quarters/locker) +/area/crew_quarters/fitness) "coR" = ( /obj/structure/closet/secure_closet/personal, /turf/simulated/floor/plasteel{ @@ -55626,11 +53403,11 @@ }, /area/maintenance/starboard2) "coW" = ( -/obj/structure/disposalpipe/trunk{ - dir = 8 - }, -/obj/machinery/disposal, /obj/effect/decal/warning_stripes/yellow/hollow, +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, /turf/simulated/floor/plasteel{ icon_state = "neutralcorner" }, @@ -55639,8 +53416,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /turf/simulated/floor/plating, /area/maintenance/starboard2) @@ -55661,8 +53437,16 @@ /area/maintenance/starboard2) "cpa" = ( /obj/effect/decal/cleanable/cobweb2, -/obj/structure/closet/secure_closet/security, +/obj/structure/closet/secure_closet{ + anchored = 1; + name = "Evidence Storage"; + req_access_txt = "4" + }, /obj/item/restraints/handcuffs/pinkcuffs, +/obj/item/clothing/under/rank/security, +/obj/item/clothing/under/rank/security, +/obj/item/grenade/barrier, +/obj/item/book/manual/security_space_law, /turf/simulated/floor/plating, /area/maintenance/starboard2) "cpb" = ( @@ -55837,7 +53621,6 @@ }, /area/engine/engineering) "cpt" = ( -/obj/machinery/hologram/holopad, /obj/structure/cable/yellow{ d1 = 4; d2 = 8; @@ -55851,17 +53634,13 @@ dir = 4 }, /obj/structure/disposalpipe/segment, +/obj/machinery/hologram/holopad, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralfull" }, /area/engine/engineering) "cpu" = ( -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, /obj/structure/cable/yellow{ d1 = 1; d2 = 8; @@ -55878,11 +53657,6 @@ }, /area/engine/engineering) "cpv" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, /obj/effect/decal/warning_stripes/east, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -55984,8 +53758,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/effect/decal/warning_stripes/yellow, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -55995,13 +53768,11 @@ }, /area/toxins/xenobiology) "cpH" = ( +/obj/effect/decal/cleanable/cobweb, /obj/machinery/newscaster{ pixel_x = -32 }, -/obj/effect/decal/cleanable/cobweb, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/library) "cpJ" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -56044,8 +53815,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 1 @@ -56091,13 +53861,12 @@ dir = 1; icon_state = "neutralcorner" }, -/area/bridge/meeting_room) +/area/hallway/primary/central/south) "cpS" = ( /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, @@ -56109,7 +53878,7 @@ dir = 1; icon_state = "neutralcorner" }, -/area/bridge/meeting_room) +/area/hallway/primary/central/south) "cpT" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -56121,7 +53890,7 @@ dir = 1; icon_state = "neutralcorner" }, -/area/bridge/meeting_room) +/area/hallway/primary/central/south) "cpU" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -56142,7 +53911,7 @@ dir = 1; icon_state = "neutralcorner" }, -/area/bridge/meeting_room) +/area/hallway/primary/central/south) "cpV" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -56160,13 +53929,12 @@ dir = 1; icon_state = "neutralcorner" }, -/area/bridge/meeting_room) +/area/hallway/primary/central/south) "cpW" = ( /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -56178,7 +53946,7 @@ dir = 1; icon_state = "neutralcorner" }, -/area/bridge/meeting_room) +/area/hallway/primary/central/south) "cpX" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -56193,7 +53961,7 @@ dir = 1; icon_state = "neutralcorner" }, -/area/bridge/meeting_room) +/area/hallway/primary/central/south) "cpY" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -56209,13 +53977,12 @@ dir = 1; icon_state = "neutralcorner" }, -/area/bridge/meeting_room) +/area/hallway/primary/central/south) "cqb" = ( /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/manifold/hidden/supply, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, @@ -56226,7 +53993,7 @@ dir = 8; icon_state = "neutralfull" }, -/area/bridge/meeting_room) +/area/hallway/primary/central/south) "cqc" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -56241,7 +54008,7 @@ dir = 8; icon_state = "neutralfull" }, -/area/bridge/meeting_room) +/area/hallway/primary/central/south) "cqd" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 1 @@ -56257,7 +54024,7 @@ dir = 4; icon_state = "neutralcorner" }, -/area/bridge/meeting_room) +/area/hallway/primary/central/south) "cqe" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -56275,13 +54042,12 @@ dir = 4; icon_state = "neutralcorner" }, -/area/bridge/meeting_room) +/area/hallway/primary/central/south) "cqf" = ( /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -56296,7 +54062,7 @@ dir = 4; icon_state = "neutralcorner" }, -/area/bridge/meeting_room) +/area/hallway/primary/central/south) "cqg" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -56317,13 +54083,10 @@ dir = 4; icon_state = "neutralcorner" }, -/area/bridge/meeting_room) +/area/hallway/primary/central/south) "cqh" = ( /obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, /obj/structure/disposalpipe/segment{ dir = 4 }, @@ -56331,7 +54094,7 @@ dir = 4; icon_state = "neutralcorner" }, -/area/bridge/meeting_room) +/area/hallway/primary/central/south) "cqj" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -56347,7 +54110,7 @@ dir = 4; icon_state = "neutralcorner" }, -/area/bridge/meeting_room) +/area/hallway/primary/central/south) "cqk" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -56363,7 +54126,7 @@ dir = 4; icon_state = "neutralcorner" }, -/area/bridge/meeting_room) +/area/hallway/primary/central/south) "cql" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -56379,7 +54142,7 @@ dir = 4; icon_state = "neutralcorner" }, -/area/bridge/meeting_room) +/area/hallway/primary/central/south) "cqn" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -56399,8 +54162,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -56453,9 +54215,9 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/machinery/door/airlock/glass{ - name = "Magistrate's Office"; - req_access_txt = "74" +/obj/machinery/door/airlock{ + name = "Court"; + req_access_txt = "38" }, /turf/simulated/floor/plasteel{ icon_state = "dark" @@ -56481,12 +54243,10 @@ }, /area/crew_quarters/courtroom) "cqv" = ( -/obj/structure/disposalpipe/segment, /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/extinguisher_cabinet{ pixel_x = -28 @@ -56565,18 +54325,17 @@ }, /area/maintenance/starboard) "cqD" = ( -/obj/structure/disposalpipe/segment, /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 8; initialize_directions = 11 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plating, /area/maintenance/starboard2) "cqE" = ( @@ -56590,8 +54349,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/cable{ d1 = 1; @@ -56607,8 +54365,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 8 @@ -56658,11 +54415,6 @@ /obj/effect/decal/warning_stripes/northeast, /turf/simulated/floor/plating/airless, /area/space/nearstation) -"cqP" = ( -/obj/machinery/the_singularitygen/tesla, -/obj/effect/decal/warning_stripes/yellow/hollow, -/turf/simulated/floor/plasteel, -/area/engine/engine_smes) "cqQ" = ( /obj/effect/decal/warning_stripes/east, /turf/simulated/floor/plating/airless, @@ -56754,7 +54506,7 @@ dir = 4; icon_state = "neutralcorner" }, -/area/bridge/meeting_room) +/area/hallway/primary/central/south) "crf" = ( /obj/machinery/power/tesla_coil, /obj/effect/decal/cleanable/dirt, @@ -56779,19 +54531,17 @@ dir = 1 }, /obj/machinery/light, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/library) "crl" = ( /obj/structure/table/wood, /obj/item/storage/pill_bottle/dice, -/obj/machinery/computer/security/telescreen/entertainment{ - pixel_y = -32 - }, /obj/structure/window/reinforced{ dir = 8 }, +/obj/machinery/computer/security/telescreen/entertainment{ + pixel_y = -32 + }, /turf/simulated/floor/plasteel{ icon_state = "grimy" }, @@ -56834,8 +54584,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/cable{ d1 = 1; @@ -56854,8 +54603,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /turf/simulated/floor/plasteel{ icon_state = "neutralcorner" @@ -56865,8 +54613,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 4 @@ -56883,8 +54630,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 1 @@ -56894,13 +54640,12 @@ dir = 8; icon_state = "neutralcorner" }, -/area/bridge/meeting_room) +/area/hallway/primary/central/south) "crw" = ( /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/camera{ c_tag = "Central Ring Hallway Center"; @@ -56910,13 +54655,12 @@ dir = 8; icon_state = "neutralcorner" }, -/area/bridge/meeting_room) +/area/hallway/primary/central/south) "crx" = ( /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/cable{ d1 = 1; @@ -56928,43 +54672,39 @@ dir = 8; icon_state = "neutralcorner" }, -/area/bridge/meeting_room) +/area/hallway/primary/central/south) "cry" = ( /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralcorner" }, -/area/bridge/meeting_room) +/area/hallway/primary/central/south) "crz" = ( /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/cable{ d1 = 1; d2 = 8; - icon_state = "1-8"; - tag = "" + icon_state = "1-8" }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralcorner" }, -/area/bridge/meeting_room) +/area/hallway/primary/central/south) "crA" = ( /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/cable{ d1 = 1; @@ -56974,33 +54714,30 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralcorner" }, -/area/bridge/meeting_room) +/area/hallway/primary/central/south) "crB" = ( /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/light/small, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralcorner" }, -/area/bridge/meeting_room) +/area/hallway/primary/central/south) "crC" = ( /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/sign/securearea{ desc = "A warning sign which reads 'HIGH VOLTAGE'"; @@ -57014,20 +54751,19 @@ dir = 8; icon_state = "neutralcorner" }, -/area/bridge/meeting_room) +/area/hallway/primary/central/south) "crE" = ( /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/chair/comfy/black, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralfull" }, -/area/bridge/meeting_room) +/area/hallway/primary/central/south) "crF" = ( /obj/structure/cable{ d1 = 1; @@ -57037,27 +54773,24 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/item/radio/beacon, /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralfull" }, -/area/bridge/meeting_room) +/area/hallway/primary/central/south) "crG" = ( /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/chair/comfy/black, /obj/effect/landmark/start{ @@ -57067,13 +54800,12 @@ dir = 8; icon_state = "neutralfull" }, -/area/bridge/meeting_room) +/area/hallway/primary/central/south) "crH" = ( /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/table/wood, /obj/item/storage/fancy/donut_box, @@ -57081,13 +54813,12 @@ dir = 8; icon_state = "neutralfull" }, -/area/bridge/meeting_room) +/area/hallway/primary/central/south) "crI" = ( /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/sign/securearea{ @@ -57100,25 +54831,23 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralcorner" }, -/area/bridge/meeting_room) +/area/hallway/primary/central/south) "crJ" = ( /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/light/small, /turf/simulated/floor/plasteel{ icon_state = "neutralcorner" }, -/area/bridge/meeting_room) +/area/hallway/primary/central/south) "crK" = ( /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/cable{ d1 = 1; @@ -57128,38 +54857,34 @@ /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /turf/simulated/floor/plasteel{ icon_state = "neutralcorner" }, -/area/bridge/meeting_room) +/area/hallway/primary/central/south) "crN" = ( /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel{ icon_state = "neutralcorner" }, -/area/bridge/meeting_room) +/area/hallway/primary/central/south) "crO" = ( /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 1 @@ -57172,18 +54897,17 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralcorner" }, -/area/bridge/meeting_room) +/area/hallway/primary/central/south) "crP" = ( /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /turf/simulated/floor/plasteel{ icon_state = "neutralcorner" }, -/area/bridge/meeting_room) +/area/hallway/primary/central/south) "crQ" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -57200,13 +54924,12 @@ dir = 4; icon_state = "neutralcorner" }, -/area/bridge/meeting_room) +/area/hallway/primary/central/south) "crR" = ( /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /turf/simulated/floor/plasteel{ dir = 8; @@ -57217,14 +54940,12 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 @@ -57245,12 +54966,10 @@ }, /area/hallway/primary/central) "crV" = ( -/obj/structure/disposalpipe/segment, /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atm{ pixel_x = -32 @@ -57289,6 +55008,10 @@ }, /area/crew_quarters/locker) "csa" = ( +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "neutral" @@ -57298,8 +55021,7 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/structure/cable{ d1 = 1; @@ -57316,6 +55038,9 @@ /area/maintenance/starboard2) "csc" = ( /obj/machinery/door/airlock/maintenance, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel, /area/maintenance/starboard2) "csd" = ( @@ -57331,7 +55056,6 @@ pixel_y = -24 }, /obj/structure/table, -/obj/item/clothing/under/rank/security, /turf/simulated/floor/plating, /area/maintenance/starboard2) "csf" = ( @@ -57350,11 +55074,13 @@ /area/maintenance/starboard2) "csh" = ( /obj/structure/rack, -/obj/item/storage/box/flashes, /obj/structure/reagent_dispensers/peppertank{ pixel_y = -32 }, /obj/effect/decal/cleanable/dirt, +/obj/item/reagent_containers/spray/pepper, +/obj/item/reagent_containers/spray/pepper, +/obj/item/reagent_containers/spray/pepper, /turf/simulated/floor/plating, /area/maintenance/starboard2) "csi" = ( @@ -57573,8 +55299,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -57604,10 +55329,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 5 }, -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" - }, /turf/simulated/floor/plasteel, /area/teleporter) "csM" = ( @@ -57622,7 +55343,7 @@ /obj/effect/spawner/window/reinforced, /obj/structure/cable, /turf/simulated/floor/plating, -/area/bridge/meeting_room) +/area/hallway/primary/central/south) "csO" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 8 @@ -57634,7 +55355,7 @@ dir = 8; icon_state = "neutralcorner" }, -/area/bridge/meeting_room) +/area/hallway/primary/central/south) "csP" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -57646,7 +55367,7 @@ dir = 8; icon_state = "neutralfull" }, -/area/bridge/meeting_room) +/area/hallway/primary/central/south) "csQ" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 8 @@ -57655,23 +55376,22 @@ dir = 8; icon_state = "neutralfull" }, -/area/bridge/meeting_room) +/area/hallway/primary/central/south) "csR" = ( /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, -/obj/machinery/hologram/holopad, /obj/effect/landmark{ name = "lightsout" }, +/obj/machinery/hologram/holopad, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralfull" }, -/area/bridge/meeting_room) +/area/hallway/primary/central/south) "csS" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 @@ -57680,7 +55400,7 @@ dir = 8; icon_state = "neutralfull" }, -/area/bridge/meeting_room) +/area/hallway/primary/central/south) "csT" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -57692,7 +55412,7 @@ dir = 8; icon_state = "neutralfull" }, -/area/bridge/meeting_room) +/area/hallway/primary/central/south) "csU" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 4 @@ -57703,7 +55423,7 @@ /turf/simulated/floor/plasteel{ icon_state = "neutralcorner" }, -/area/bridge/meeting_room) +/area/hallway/primary/central/south) "csV" = ( /turf/simulated/wall/r_wall, /area/gateway) @@ -57712,26 +55432,24 @@ dir = 1; icon_state = "neutralcorner" }, -/area/bridge/meeting_room) +/area/hallway/primary/central/south) "csX" = ( /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/door/firedoor, /obj/effect/decal/warning_stripes/yellow, /turf/simulated/floor/plasteel{ icon_state = "neutralcorner" }, -/area/bridge/meeting_room) +/area/hallway/primary/central/south) "csY" = ( /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/door/firedoor, @@ -57746,41 +55464,45 @@ /obj/machinery/vending/cigarette, /obj/effect/decal/warning_stripes/yellow, /turf/simulated/floor/plasteel, -/area/bridge/meeting_room) +/area/hallway/primary/central/south) "cta" = ( /obj/machinery/vending/coffee, /obj/effect/decal/warning_stripes/yellow, /turf/simulated/floor/plasteel, -/area/bridge/meeting_room) +/area/hallway/primary/central/south) "ctb" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/disposalpipe/segment{ - dir = 1; + dir = 8; icon_state = "pipe-c" }, /turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "neutralcorner" + icon_state = "white" }, -/area/hallway/primary/central) +/area/medical/chemistry) "ctc" = ( /obj/effect/decal/warning_stripes/yellow, /turf/simulated/floor/plasteel, /area/maintenance/starboard2) "ctd" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, /obj/structure/disposalpipe/segment{ dir = 4 }, /turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "neutralcorner" + icon_state = "whitebluefull" }, -/area/hallway/primary/central) +/area/medical/medbay) "ctf" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plasteel{ @@ -57803,29 +55525,32 @@ }, /area/hallway/primary/central) "ctj" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, /obj/structure/disposalpipe/segment{ dir = 4 }, /turf/simulated/floor/plasteel{ - dir = 1; - icon_state = "neutralcorner" + icon_state = "white" }, -/area/hallway/primary/central) +/area/medical/medbay) "ctk" = ( /obj/machinery/vending/cola, /obj/effect/decal/warning_stripes/yellow, /turf/simulated/floor/plasteel, -/area/bridge/meeting_room) +/area/hallway/primary/central/south) "ctl" = ( -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /turf/simulated/floor/plasteel{ dir = 1; @@ -57886,10 +55611,6 @@ }, /area/medical/medbay) "cts" = ( -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, /obj/machinery/atmospherics/pipe/simple/hidden/universal, /turf/simulated/floor/plasteel{ dir = 8; @@ -57911,13 +55632,12 @@ }, /area/crew_quarters/courtroom) "ctv" = ( -/obj/structure/disposalpipe/segment, /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel, /area/maintenance/starboard) "ctw" = ( @@ -57973,12 +55693,6 @@ icon_state = "neutralcorner" }, /area/crew_quarters/fitness) -"ctC" = ( -/turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "neutral" - }, -/area/crew_quarters/fitness) "ctD" = ( /obj/structure/closet/masks, /turf/simulated/floor/plasteel{ @@ -58065,11 +55779,11 @@ /area/library) "ctL" = ( /obj/structure/table/wood, -/obj/item/storage/fancy/candle_box, -/obj/item/storage/fancy/candle_box, /obj/machinery/computer/security/telescreen/entertainment{ pixel_x = 32 }, +/obj/item/storage/fancy/candle_box/full, +/obj/item/storage/fancy/candle_box/full, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -58167,8 +55881,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/door/firedoor, @@ -58198,36 +55911,32 @@ /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /turf/simulated/floor/plating, -/area/bridge/meeting_room) +/area/hallway/primary/central/south) "cua" = ( /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralcorner" }, -/area/bridge/meeting_room) +/area/hallway/primary/central/south) "cub" = ( /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/table/wood, /obj/item/paper_bin, @@ -58235,13 +55944,12 @@ dir = 8; icon_state = "neutralfull" }, -/area/bridge/meeting_room) +/area/hallway/primary/central/south) "cuc" = ( /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/chair/comfy/black{ dir = 1 @@ -58253,7 +55961,7 @@ dir = 8; icon_state = "neutralfull" }, -/area/bridge/meeting_room) +/area/hallway/primary/central/south) "cud" = ( /obj/structure/cable{ d1 = 1; @@ -58263,20 +55971,18 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralfull" }, -/area/bridge/meeting_room) +/area/hallway/primary/central/south) "cue" = ( /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/chair/comfy/black{ dir = 1 @@ -58285,46 +55991,43 @@ dir = 8; icon_state = "neutralfull" }, -/area/bridge/meeting_room) +/area/hallway/primary/central/south) "cuf" = ( /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/item/twohanded/required/kirbyplants, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralfull" }, -/area/bridge/meeting_room) +/area/hallway/primary/central/south) "cug" = ( /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plasteel{ icon_state = "neutralcorner" }, -/area/bridge/meeting_room) +/area/hallway/primary/central/south) "cuh" = ( /obj/effect/spawner/window/reinforced, /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/structure/cable{ d2 = 8; icon_state = "0-8" }, /turf/simulated/floor/plating, -/area/bridge/meeting_room) +/area/hallway/primary/central/south) "cuk" = ( /obj/structure/closet/secure_closet/exile, /obj/effect/decal/warning_stripes/yellow/hollow, @@ -58346,16 +56049,14 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /turf/simulated/floor/plasteel, /area/gateway) @@ -58379,6 +56080,7 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 8 }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralfull" @@ -58453,8 +56155,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -58521,7 +56222,6 @@ }, /area/crew_quarters/locker) "cuC" = ( -/obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 4; initialize_directions = 11 @@ -58541,10 +56241,6 @@ }, /area/crew_quarters/locker) "cuF" = ( -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" - }, /obj/structure/cable{ d1 = 1; d2 = 4; @@ -58556,17 +56252,17 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 5 }, +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, /turf/simulated/floor/plating, /area/maintenance/starboard2) "cuG" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -58575,17 +56271,16 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/turf/simulated/floor/plating, -/area/maintenance/starboard2) -"cuH" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, +/turf/simulated/floor/plating, +/area/maintenance/starboard2) +"cuH" = ( /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -58593,17 +56288,16 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/turf/simulated/floor/plasteel, -/area/maintenance/starboard2) -"cuI" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, +/turf/simulated/floor/plasteel, +/area/maintenance/starboard2) +"cuI" = ( /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -58612,14 +56306,16 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel, /area/maintenance/starboard2) "cuJ" = ( /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/door/airlock/glass{ name = "Cabin" @@ -58627,14 +56323,10 @@ /turf/simulated/floor/plasteel, /area/crew_quarters/locker) "cuK" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -58642,21 +56334,19 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "neutralcorner" }, /area/crew_quarters/fitness) "cuL" = ( -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" - }, /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 10 @@ -58664,6 +56354,10 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 10 }, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralfull" @@ -58812,8 +56506,7 @@ /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /turf/simulated/floor/plating, /area/maintenance/port) @@ -58821,8 +56514,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ @@ -58834,8 +56526,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/effect/decal/cleanable/dirt, /obj/machinery/light/small{ @@ -58850,8 +56541,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/cable{ d1 = 1; @@ -58861,8 +56551,7 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel, @@ -58912,10 +56601,6 @@ }, /area/medical/research) "cvm" = ( -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 1; initialize_directions = 11 @@ -58923,6 +56608,9 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 1 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -58936,12 +56624,12 @@ /area/library) "cvo" = ( /obj/structure/cult/archives, -/obj/machinery/newscaster{ - pixel_x = -32 - }, /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 4 }, +/obj/machinery/newscaster{ + pixel_x = -32 + }, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -58973,12 +56661,12 @@ }, /area/library) "cvr" = ( -/obj/machinery/newscaster{ - pixel_x = 32 - }, /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 8 }, +/obj/machinery/newscaster{ + pixel_x = 32 + }, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -59031,8 +56719,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel{ @@ -59072,8 +56759,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/table/reinforced, /obj/machinery/cell_charger, @@ -59094,37 +56780,36 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralcorner" }, -/area/bridge/meeting_room) +/area/hallway/primary/central/south) "cvE" = ( /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralcorner" }, -/area/bridge/meeting_room) +/area/hallway/primary/central/south) "cvF" = ( /turf/simulated/floor/plasteel{ icon_state = "neutral" }, -/area/bridge/meeting_room) +/area/hallway/primary/central/south) "cvG" = ( /turf/simulated/floor/plasteel{ icon_state = "neutralcorner" }, -/area/bridge/meeting_room) +/area/hallway/primary/central/south) "cvH" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plasteel{ icon_state = "neutralcorner" }, -/area/bridge/meeting_room) +/area/hallway/primary/central/south) "cvI" = ( /obj/effect/spawner/window/reinforced, /obj/structure/cable{ @@ -59150,8 +56835,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/closet/secure_closet/medical1, /obj/effect/decal/warning_stripes/yellow/hollow, @@ -59161,14 +56845,12 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -59234,16 +56916,12 @@ }, /area/medical/chemistry) "cvV" = ( -/obj/structure/disposalpipe/segment, /obj/machinery/door/airlock/glass{ name = "Cabin" }, /turf/simulated/floor/plasteel, /area/crew_quarters/locker) "cvW" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/machinery/light, /turf/simulated/floor/plasteel{ dir = 8; @@ -59251,9 +56929,6 @@ }, /area/hallway/primary/central) "cvX" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/machinery/alarm{ dir = 1; pixel_y = -24 @@ -59269,14 +56944,10 @@ /turf/simulated/floor/plasteel, /area/gateway) "cvZ" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /turf/simulated/floor/plasteel{ dir = 8; @@ -59284,28 +56955,34 @@ }, /area/crew_quarters/locker) "cwa" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 +/obj/machinery/door/airlock/public/glass{ + name = "Public Access" }, -/obj/machinery/door/airlock/public/glass, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "neutralcorner" }, /area/crew_quarters/locker) "cwc" = ( -/obj/structure/disposalpipe/segment{ +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/disposalpipe/junction{ + dir = 8 + }, /turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "neutralfull" + icon_state = "white" }, -/area/crew_quarters/locker) +/area/medical/medbay) "cwd" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/effect/landmark{ name = "lightsout" }, @@ -59314,15 +56991,6 @@ icon_state = "neutralfull" }, /area/crew_quarters/locker) -"cwe" = ( -/obj/structure/disposalpipe/junction, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "neutralfull" - }, -/area/crew_quarters/locker) "cwf" = ( /obj/structure/closet/wardrobe/grey, /obj/machinery/ai_status_display{ @@ -59349,8 +57017,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -59358,6 +57025,9 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ icon_state = "whitebluefull" }, @@ -59366,8 +57036,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -59375,6 +57044,9 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -59481,8 +57153,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /turf/simulated/floor/plasteel, /area/maintenance/port) @@ -59670,8 +57341,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 10 @@ -59684,8 +57354,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/cable{ d1 = 1; @@ -59707,8 +57376,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 6 @@ -59721,8 +57389,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 9 @@ -59753,36 +57420,28 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/command/glass{ - name = "Corporate Lounge"; - req_one_access_txt = "19" - }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" +/obj/machinery/door/airlock/public/glass{ + id_tag = "pub_room"; + name = "Public Meeting Room" }, +/turf/simulated/floor/wood, /area/assembly/showroom) "cxc" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/command/glass{ - name = "Corporate Lounge"; - req_one_access_txt = "19" - }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" +/obj/machinery/door/airlock/public/glass{ + id_tag = "pub_room"; + name = "Public Meeting Room" }, +/turf/simulated/floor/wood, /area/assembly/showroom) "cxd" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/hologram/holopad, /obj/effect/decal/warning_stripes/yellow/hollow, +/obj/machinery/hologram/holopad, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralfull" @@ -59797,8 +57456,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/cable{ d1 = 1; @@ -59816,8 +57474,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /turf/simulated/floor/plasteel, /area/gateway) @@ -59883,8 +57540,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/light{ dir = 8 @@ -59940,7 +57596,6 @@ /turf/simulated/floor/plasteel, /area/medical/research) "cxv" = ( -/obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel{ @@ -59955,12 +57610,10 @@ }, /area/crew_quarters/locker) "cxx" = ( -/obj/structure/disposalpipe/segment, /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 8; @@ -59970,6 +57623,7 @@ dir = 8; initialize_directions = 11 }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralfull" @@ -60025,7 +57679,6 @@ }, /area/crew_quarters/fitness) "cxD" = ( -/obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 8; initialize_directions = 11 @@ -60077,8 +57730,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/table, /obj/item/paper/pamphlet, @@ -60095,8 +57747,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /turf/simulated/floor/plating, /area/engine/engine_smes) @@ -60134,7 +57785,7 @@ dir = 1; icon_state = "neutralcorner" }, -/area/bridge/meeting_room) +/area/hallway/primary/central/south) "cxP" = ( /obj/effect/spawner/random_spawners/wall_rusted_maybe, /turf/simulated/wall, @@ -60143,8 +57794,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /turf/simulated/floor/plasteel{ icon_state = "dark" @@ -60294,42 +57944,33 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/window/reinforced{ dir = 4 }, /obj/structure/window/reinforced, /obj/structure/showcase, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/assembly/showroom) "cyi" = ( /obj/structure/bookcase, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/assembly/showroom) "cyj" = ( /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/assembly/showroom) "cyk" = ( /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /turf/simulated/floor/carpet, /area/assembly/showroom) @@ -60338,7 +57979,7 @@ pixel_y = 32 }, /obj/machinery/camera{ - c_tag = "Showroom" + c_tag = "Public Meeting Room" }, /turf/simulated/floor/carpet, /area/assembly/showroom) @@ -60350,25 +57991,20 @@ /area/assembly/showroom) "cyo" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/assembly/showroom) "cyp" = ( /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/window/reinforced, /obj/structure/window/reinforced{ dir = 8 }, /obj/structure/showcase, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/assembly/showroom) "cyq" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -60402,8 +58038,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 4 @@ -60411,6 +58046,7 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 8 }, +/obj/machinery/hologram/holopad, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralfull" @@ -60446,8 +58082,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/cable{ d2 = 2; @@ -60528,10 +58163,10 @@ /turf/simulated/floor/plasteel, /area/crew_quarters/locker/locker_toilet) "cyG" = ( +/obj/effect/decal/warning_stripes/yellow/hollow, /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/effect/decal/warning_stripes/yellow/hollow, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -60578,8 +58213,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/closet/wardrobe/white, /turf/simulated/floor/plasteel{ @@ -60591,8 +58225,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /turf/simulated/floor/plasteel{ dir = 8; @@ -60603,8 +58236,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/chair/stool, /turf/simulated/floor/plasteel{ @@ -60616,8 +58248,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/table, /obj/item/folder, @@ -60631,8 +58262,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/table, /obj/item/paicard, @@ -60648,8 +58278,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/table, /turf/simulated/floor/plasteel{ @@ -60661,14 +58290,12 @@ /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/chair/stool, /obj/effect/landmark/start{ @@ -60680,12 +58307,10 @@ }, /area/crew_quarters/locker) "cyR" = ( -/obj/structure/disposalpipe/segment, /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -60747,35 +58372,35 @@ }, /area/crew_quarters/sleep) "cyW" = ( -/obj/structure/table/wood, -/obj/item/paper_bin, -/obj/machinery/status_display{ - layer = 4; - pixel_y = 32 - }, -/obj/item/pen, -/obj/machinery/light{ +/obj/machinery/power/apc{ dir = 1; - in_use = 1 + name = "north bump"; + pixel_y = 24 + }, +/obj/structure/chair/barber{ + dir = 4 + }, +/obj/structure/cable{ + d2 = 2; + icon_state = "0-2" }, /turf/simulated/floor/plasteel{ - icon_state = "wood" + icon_state = "barber" }, -/area/crew_quarters/sleep) +/area/civilian/barber) "cyX" = ( -/obj/item/radio/intercom{ - pixel_x = 26; - pixel_y = 28 +/obj/structure/table/reinforced, +/obj/structure/mirror{ + pixel_x = 28 + }, +/obj/item/razor, +/obj/machinery/camera{ + c_tag = "Barber Shop" }, -/obj/structure/closet/secure_closet/personal/cabinet, -/obj/item/clothing/under/lawyer/black, -/obj/item/clothing/under/lawyer/blue, -/obj/item/clothing/under/kilt, -/obj/item/clothing/head/beret, /turf/simulated/floor/plasteel{ - icon_state = "wood" + icon_state = "barber" }, -/area/crew_quarters/sleep) +/area/civilian/barber) "cyY" = ( /obj/machinery/cryopod/right, /turf/simulated/floor/plasteel{ @@ -60787,12 +58412,12 @@ dir = 1; in_use = 1 }, -/obj/machinery/computer/cryopod{ - pixel_y = 32 - }, /obj/machinery/camera{ c_tag = "Cryodorms Fore" }, +/obj/machinery/computer/cryopod{ + pixel_y = 32 + }, /turf/simulated/floor/plasteel{ icon_state = "freezerfloor" }, @@ -60818,21 +58443,6 @@ icon_state = "neutralcorner" }, /area/crew_quarters/fitness) -"czc" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2"; - tag = "" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "neutralfull" - }, -/area/crew_quarters/fitness) "czd" = ( /obj/effect/spawner/window/reinforced, /obj/structure/cable{ @@ -60978,14 +58588,12 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/door/firedoor, /obj/machinery/door/airlock/engineering/glass{ @@ -61005,8 +58613,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/effect/landmark{ name = "blobstart" @@ -61018,7 +58625,6 @@ }, /area/maintenance/port) "czu" = ( -/obj/machinery/hologram/holopad, /obj/effect/decal/warning_stripes/yellow/hollow, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 9 @@ -61026,6 +58632,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 10 }, +/obj/machinery/hologram/holopad, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralfull" @@ -61050,8 +58657,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /turf/simulated/floor/plasteel{ dir = 4; @@ -61122,8 +58728,7 @@ /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /obj/structure/cable{ d2 = 4; @@ -61139,23 +58744,18 @@ name = "west bump"; pixel_x = -24 }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/assembly/showroom) "czK" = ( /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 4 }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/assembly/showroom) "czL" = ( /obj/structure/cable{ @@ -61174,19 +58774,15 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" - }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" + icon_state = "1-2" }, +/turf/simulated/floor/wood, /area/assembly/showroom) "czM" = ( /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/cable{ d1 = 1; @@ -61202,14 +58798,12 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/structure/table/wood, /obj/item/storage/fancy/donut_box, @@ -61219,8 +58813,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/table/wood, /obj/item/reagent_containers/food/drinks/bottle/whiskey, @@ -61230,8 +58823,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/cable{ d1 = 1; @@ -61247,8 +58839,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/table/wood, /obj/item/paper_bin, @@ -61259,29 +58850,23 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 5 }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/assembly/showroom) "czS" = ( /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 8 }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/assembly/showroom) "czT" = ( /obj/structure/cable{ @@ -61292,16 +58877,13 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/machinery/alarm{ dir = 8; pixel_x = 24 }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/assembly/showroom) "czU" = ( /obj/structure/urinal{ @@ -61314,8 +58896,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -61368,13 +58949,12 @@ dir = 4; icon_state = "neutralcorner" }, -/area/bridge/meeting_room) +/area/hallway/primary/central/south) "cAb" = ( /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/unary/vent_pump/on, /obj/effect/decal/warning_stripes/north, @@ -61429,8 +59009,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -61460,8 +59039,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/vending/shoedispenser, /turf/simulated/floor/plasteel{ @@ -61473,8 +59051,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /turf/simulated/floor/plasteel{ dir = 8; @@ -61495,28 +59072,25 @@ }, /area/crew_quarters/sleep) "cAo" = ( -/obj/structure/table/wood, /obj/machinery/newscaster{ pixel_x = -32 }, -/obj/item/folder, -/obj/item/razor, /turf/simulated/floor/plasteel{ - icon_state = "wood" + icon_state = "barber" }, -/area/crew_quarters/sleep) +/area/civilian/barber) "cAp" = ( -/obj/structure/chair/office/dark{ - dir = 8 +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" }, /turf/simulated/floor/plasteel{ - icon_state = "wood" + icon_state = "barber" }, -/area/crew_quarters/sleep) +/area/civilian/barber) "cAq" = ( -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/crew_quarters/sleep) "cAr" = ( /turf/simulated/floor/plasteel{ @@ -61659,8 +59233,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /turf/simulated/floor/plating, /area/engine/engine_smes) @@ -61679,8 +59252,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plasteel{ @@ -61691,8 +59263,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /turf/simulated/floor/plasteel{ dir = 8; @@ -61703,8 +59274,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/effect/decal/warning_stripes/east, /turf/simulated/floor/plasteel, @@ -61759,8 +59329,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /turf/simulated/floor/plating, /area/maintenance/port) @@ -61872,20 +59441,18 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/door/firedoor, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralcorner" }, -/area/bridge/meeting_room) +/area/hallway/primary/central/south) "cBh" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/public/glass, -/obj/structure/disposalpipe/segment{ - dir = 4 +/obj/machinery/door/airlock/public/glass{ + name = "Public Access" }, /turf/simulated/floor/plasteel{ dir = 4; @@ -61948,8 +59515,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/table/wood, /obj/item/clipboard, @@ -61969,8 +59535,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/table/wood, /obj/item/clothing/mask/cigarette/cigar/havana{ @@ -62004,8 +59569,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/table/wood, /obj/item/storage/secure/briefcase, @@ -62043,8 +59607,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/cable{ d1 = 1; @@ -62054,8 +59617,7 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/machinery/door/firedoor, /obj/machinery/door/airlock/command{ @@ -62074,8 +59636,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -62097,6 +59658,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 10 }, +/obj/machinery/hologram/holopad, /turf/simulated/floor/plasteel, /area/gateway) "cBE" = ( @@ -62122,8 +59684,7 @@ /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -62133,8 +59694,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/cable{ d1 = 1; @@ -62148,8 +59708,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /turf/simulated/floor/plasteel, /area/crew_quarters/locker/locker_toilet) @@ -62157,8 +59716,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 1 @@ -62169,8 +59727,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/light, /turf/simulated/floor/plasteel, @@ -62179,8 +59736,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/door/airlock{ name = "Unisex Restrooms" @@ -62222,18 +59778,13 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /turf/simulated/floor/plasteel{ icon_state = "neutralcorner" }, /area/crew_quarters/locker) "cBT" = ( -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" - }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel{ @@ -62264,18 +59815,32 @@ }, /area/crew_quarters/sleep) "cBW" = ( -/obj/item/twohanded/required/kirbyplants, -/turf/simulated/floor/plasteel{ - icon_state = "wood" +/obj/effect/landmark/start{ + name = "Barber" }, -/area/crew_quarters/sleep) +/obj/machinery/light/small{ + dir = 8 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + icon_state = "barber" + }, +/area/civilian/barber) "cBX" = ( -/obj/structure/bed, -/obj/item/bedsheet/brown, -/turf/simulated/floor/plasteel{ - icon_state = "wood" +/obj/structure/table/reinforced, +/obj/structure/mirror{ + pixel_x = 28 }, -/area/crew_quarters/sleep) +/obj/item/razor, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/turf/simulated/floor/plasteel{ + icon_state = "barber" + }, +/area/civilian/barber) "cBY" = ( /obj/machinery/cryopod/right, /obj/machinery/newscaster{ @@ -62315,8 +59880,7 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/effect/decal/warning_stripes/yellow, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -62453,8 +60017,7 @@ /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -62471,8 +60034,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/disposalpipe/segment{ dir = 8; @@ -62527,8 +60089,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ @@ -62617,8 +60178,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/table/wood, /obj/item/folder/yellow, @@ -62648,8 +60208,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/hologram/holopad, /turf/simulated/floor/carpet, @@ -62674,8 +60233,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/table/wood, /obj/item/radio/intercom{ @@ -62705,7 +60263,9 @@ /area/gateway) "cCY" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/public/glass, +/obj/machinery/door/airlock/public/glass{ + name = "Public Access" + }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, @@ -62738,8 +60298,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/effect/landmark{ name = "lightsout" @@ -62760,8 +60319,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -62809,8 +60367,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /turf/simulated/floor/plasteel{ icon_state = "dark" @@ -62824,7 +60381,6 @@ }, /area/crew_quarters/locker) "cDp" = ( -/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -62845,11 +60401,11 @@ /area/crew_quarters/fitness) "cDs" = ( /obj/structure/table/reinforced, +/obj/item/stack/packageWrap, +/obj/item/hand_labeler, /obj/machinery/newscaster{ pixel_x = 32 }, -/obj/item/stack/packageWrap, -/obj/item/hand_labeler, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -62947,9 +60503,6 @@ /area/engine/engine_smes) "cDC" = ( /obj/structure/table/reinforced, -/obj/machinery/newscaster{ - pixel_x = 32 - }, /obj/item/stack/sheet/plasteel{ amount = 25 }, @@ -62959,6 +60512,9 @@ pixel_y = -3 }, /obj/effect/decal/warning_stripes/yellow/hollow, +/obj/machinery/newscaster{ + pixel_x = 32 + }, /turf/simulated/floor/plasteel, /area/engine/engine_smes) "cDD" = ( @@ -63010,8 +60566,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/effect/decal/warning_stripes/south, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -63082,8 +60637,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /turf/simulated/floor/plasteel{ dir = 9; @@ -63186,8 +60740,7 @@ "cEj" = ( /obj/structure/sink{ dir = 8; - pixel_x = -12; - pixel_y = 2 + pixel_x = -12 }, /obj/effect/decal/warning_stripes/yellow/hollow, /turf/simulated/floor/plasteel, @@ -63236,11 +60789,9 @@ /turf/simulated/floor/plasteel, /area/gateway) "cEq" = ( -/obj/structure/toilet{ - dir = 8 - }, /obj/machinery/light/small, /obj/effect/decal/warning_stripes/yellow/hollow, +/obj/machinery/recharge_station, /turf/simulated/floor/plasteel, /area/crew_quarters/locker/locker_toilet) "cEr" = ( @@ -63263,17 +60814,27 @@ }, /area/crew_quarters/sleep) "cEu" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/door/firedoor, /obj/machinery/door/airlock/glass{ - name = "Cabin" + name = "Barber Shop" }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel{ - icon_state = "wood" + icon_state = "barber" }, -/area/crew_quarters/sleep) +/area/civilian/barber) "cEv" = ( /obj/machinery/door/airlock/glass{ name = "Cabin" }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plasteel{ icon_state = "freezerfloor" }, @@ -63313,12 +60874,14 @@ /turf/simulated/wall/r_wall/rust, /area/engine/engineering) "cEB" = ( -/obj/structure/plasticflaps, +/obj/effect/decal/warning_stripes/yellow, +/obj/structure/plasticflaps{ + opacity = 1 + }, /obj/machinery/navbeacon{ codes_txt = "delivery;dir=1"; location = "Engineering" }, -/obj/effect/decal/warning_stripes/yellow, /turf/simulated/floor/plasteel, /area/engine/engineering) "cEC" = ( @@ -63343,14 +60906,13 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "neutralcorner" }, -/area/bridge/meeting_room) +/area/hallway/primary/central/south) "cEL" = ( /turf/simulated/floor/plasteel{ dir = 4; @@ -63451,8 +61013,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /turf/simulated/floor/plasteel{ dir = 4; @@ -63513,9 +61074,15 @@ }, /area/hallway/primary/central) "cFd" = ( -/obj/item/rack_parts, -/turf/simulated/floor/plating, -/area/maintenance/starboard) +/obj/structure/chair, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "whitebluecorner" + }, +/area/hallway/primary/central) "cFe" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 10 @@ -63581,8 +61148,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -63592,18 +61158,20 @@ }, /area/crew_quarters/sleep) "cFo" = ( -/obj/structure/disposalpipe/segment, /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/structure/disposalpipe/segment{ + dir = 4 }, /turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "neutralcorner" + icon_state = "white" }, -/area/crew_quarters/sleep) +/area/medical/medbay) "cFp" = ( /obj/machinery/door/firedoor, /obj/effect/decal/warning_stripes/yellow, @@ -63616,8 +61184,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/unary/vent_pump/on, /turf/simulated/floor/plasteel{ @@ -63629,14 +61196,16 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" + }, +/obj/structure/sign/barber{ + pixel_x = 4; + pixel_y = 32 }, /turf/simulated/floor/plasteel{ dir = 1; @@ -63647,9 +61216,15 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "neutral" @@ -63659,12 +61234,15 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/camera{ c_tag = "Dorm Hallway Starboard" }, +/obj/structure/sign/barber{ + pixel_x = -4; + pixel_y = 32 + }, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "neutralcorner" @@ -63674,8 +61252,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /turf/simulated/floor/plasteel{ dir = 4; @@ -63686,8 +61263,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/door/airlock/glass{ name = "Cabin" @@ -63698,8 +61274,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /turf/simulated/floor/plasteel{ dir = 1; @@ -63707,21 +61282,19 @@ }, /area/crew_quarters/fitness) "cFy" = ( -/obj/structure/disposalpipe/segment, /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralfull" @@ -63845,26 +61418,8 @@ /turf/simulated/floor/plasteel, /area/maintenance/port) "cFN" = ( -/obj/machinery/embedded_controller/radio/airlock/airlock_controller{ - id_tag = "sw_maint_airlock"; - pixel_y = 25; - tag_airpump = "sw_maint_pump"; - tag_chamber_sensor = "sw_maint_sensor"; - tag_exterior_door = "sw_maint_outer"; - tag_interior_door = "sw_maint_inner" - }, -/obj/machinery/airlock_sensor{ - id_tag = "sw_maint_sensor"; - pixel_y = 33 - }, -/obj/effect/decal/warning_stripes/yellow, -/obj/machinery/atmospherics/unary/vent_pump/high_volume{ - dir = 4; - frequency = 1379; - id_tag = "sw_maint_pump" - }, -/turf/simulated/floor/plasteel, -/area/maintenance/port) +/turf/simulated/wall/mineral/titanium, +/area/shuttle/pod_4) "cFO" = ( /obj/effect/decal/warning_stripes/yellow, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -63873,19 +61428,17 @@ }, /area/maintenance/port) "cFP" = ( -/obj/machinery/access_button{ - command = "cycle_interior"; - frequency = 1379; - master_tag = "sw_maint_airlock"; - name = "interior access button"; - pixel_x = -24; - pixel_y = 24 +/obj/docking_port/mobile/pod{ + dir = 4; + id = "pod4"; + name = "escape pod 4" }, -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 10 +/obj/machinery/door/airlock/titanium{ + id_tag = "s_docking_airlock"; + name = "Escape Pod Hatch" }, -/turf/simulated/floor/plating, -/area/maintenance/port) +/turf/simulated/floor/mineral/titanium/blue, +/area/shuttle/pod_4) "cFR" = ( /obj/structure/grille{ density = 0; @@ -63949,8 +61502,7 @@ /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -63967,8 +61519,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -63993,8 +61544,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -64012,14 +61562,12 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /obj/effect/decal/warning_stripes/yellow, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -64037,8 +61585,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -64055,8 +61602,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -64077,8 +61623,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/light/small{ dir = 1 @@ -64102,14 +61647,12 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -64127,8 +61670,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -64146,8 +61688,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -64167,8 +61708,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/cable{ d1 = 1; @@ -64191,8 +61731,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -64212,8 +61751,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/light/small{ dir = 1 @@ -64231,8 +61769,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/cable{ d1 = 1; @@ -64253,8 +61790,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -64272,8 +61808,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -64290,8 +61825,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/effect/landmark{ name = "blobstart" @@ -64311,8 +61845,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -64330,8 +61863,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -64350,8 +61882,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, @@ -64370,14 +61901,12 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -64395,8 +61924,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -64411,20 +61939,19 @@ /turf/simulated/floor/plating, /area/maintenance/port) "cGw" = ( -/obj/machinery/door/airlock/external{ - frequency = 1379; - id_tag = "sw_maint_outer"; - locked = 1; - name = "West Maintenance External Access" +/obj/item/radio/intercom{ + pixel_y = 25 }, -/turf/simulated/floor/plasteel, -/area/maintenance/port) +/obj/structure/chair/comfy/shuttle{ + dir = 4 + }, +/turf/simulated/floor/mineral/titanium/blue, +/area/shuttle/pod_4) "cGx" = ( /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ @@ -64451,19 +61978,18 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 8 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /obj/machinery/navbeacon{ codes_txt = "patrol;next_patrol=hall6"; location = "hall5" }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralfull" @@ -64473,8 +61999,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/cable{ d1 = 1; @@ -64490,8 +62015,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/unary/vent_scrubber/on, /obj/machinery/navbeacon{ @@ -64507,8 +62031,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/navbeacon{ codes_txt = "patrol;next_patrol=hall9"; @@ -64536,12 +62059,12 @@ icon_state = "1-4"; tag = "90Curve" }, -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, /obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, /obj/machinery/navbeacon{ codes_txt = "patrol;next_patrol=hall10"; location = "hall9" @@ -64555,8 +62078,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 8; @@ -64569,7 +62091,7 @@ /obj/structure/disposalpipe/sortjunction{ dir = 1; name = "Medbay Junction"; - sortType = 13 + sortType = 9 }, /turf/simulated/floor/plasteel{ icon_state = "neutralcorner" @@ -64588,16 +62110,15 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/machinery/door/airlock/maintenance, /obj/structure/disposalpipe/segment{ dir = 4 }, -/turf/simulated/floor/wood, -/area/maintenance/starboard) +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "whitebluecorner" + }, +/area/hallway/primary/central) "cGI" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -64611,26 +62132,18 @@ tag = "" }, /obj/machinery/door/airlock/maintenance, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plating, /area/maintenance/starboard) "cGJ" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "whitepurplecorner" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - tag = "" - }, -/turf/simulated/floor/plating, -/area/maintenance/starboard) +/area/medical/research) "cGK" = ( /obj/effect/decal/warning_stripes/north, /turf/simulated/floor/plasteel{ @@ -64648,15 +62161,10 @@ }, /area/hallway/primary/central) "cGM" = ( -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" - }, /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -64664,6 +62172,10 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, /turf/simulated/floor/plating, /area/maintenance/starboard) "cGN" = ( @@ -64721,7 +62233,6 @@ }, /area/crew_quarters/sleep) "cGS" = ( -/obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -64761,8 +62272,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -64820,7 +62330,9 @@ }, /area/crew_quarters/fitness) "cHb" = ( -/obj/machinery/computer/HolodeckControl, +/obj/machinery/computer/HolodeckControl{ + dir = 4 + }, /turf/simulated/floor/plasteel, /area/crew_quarters/fitness) "cHc" = ( @@ -64836,21 +62348,21 @@ /turf/simulated/floor/plasteel, /area/crew_quarters/fitness) "cHe" = ( -/obj/machinery/portable_atmospherics/canister/air, -/obj/machinery/atmospherics/unary/portables_connector{ - dir = 1 +/obj/machinery/status_display{ + layer = 4; + pixel_y = 32 }, -/turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "neutral" +/obj/machinery/light, +/obj/structure/chair/comfy/shuttle{ + dir = 4 }, -/area/maintenance/port) +/turf/simulated/floor/mineral/titanium/blue, +/area/shuttle/pod_4) "cHi" = ( /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/door/airlock/engineering{ name = "Electrical Maintenance"; @@ -64876,8 +62388,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/effect/decal/warning_stripes/yellow, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, @@ -64913,8 +62424,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /turf/simulated/floor/plasteel{ dir = 8; @@ -64932,8 +62442,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /turf/simulated/floor/plasteel{ dir = 4; @@ -64971,8 +62480,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ @@ -65027,22 +62535,6 @@ icon_state = "purplecorner" }, /area/hallway/primary/central) -"cHF" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "purplecorner" - }, -/area/hallway/primary/central) "cHG" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -65050,11 +62542,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/structure/disposalpipe/sortjunction{ - dir = 4; - name = "Research Junction"; - sortType = 20 - }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "purplecorner" @@ -65072,9 +62559,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "purplecorner" @@ -65087,10 +62571,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" - }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "purplecorner" @@ -65112,10 +62592,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, /turf/simulated/floor/plasteel{ icon_state = "bluecorner" }, @@ -65128,9 +62604,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /turf/simulated/floor/plasteel{ icon_state = "bluecorner" }, @@ -65156,10 +62629,9 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/structure/disposalpipe/sortjunction{ +/obj/structure/disposalpipe/segment{ dir = 4; - name = "CMO's Junction"; - sortType = 20 + icon_state = "pipe-c" }, /turf/simulated/floor/plasteel{ icon_state = "bluecorner" @@ -65254,19 +62726,7 @@ icon_state = "neutral" }, /area/crew_quarters/sleep) -"cIe" = ( -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" - }, -/turf/simulated/floor/plasteel{ - icon_state = "neutralcorner" - }, -/area/crew_quarters/sleep) "cIg" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 1 }, @@ -65276,9 +62736,6 @@ }, /area/crew_quarters/sleep) "cIh" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/machinery/light, /obj/machinery/firealarm{ dir = 1; @@ -65290,9 +62747,6 @@ }, /area/crew_quarters/sleep) "cIi" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/structure/cable, /obj/machinery/power/apc{ name = "south bump"; @@ -65308,61 +62762,46 @@ }, /area/crew_quarters/sleep) "cIj" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /turf/simulated/floor/plasteel{ icon_state = "neutral" }, /area/crew_quarters/sleep) "cIk" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /turf/simulated/floor/plasteel{ icon_state = "neutralcorner" }, /area/crew_quarters/sleep) "cIl" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/machinery/light, /turf/simulated/floor/plasteel{ icon_state = "neutralcorner" }, /area/crew_quarters/sleep) "cIm" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/machinery/door/airlock/glass{ name = "Cabin" }, /turf/simulated/floor/plasteel, /area/crew_quarters/sleep) "cIn" = ( -/obj/structure/disposalpipe/segment{ +/obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ dir = 8; - icon_state = "neutralcorner" + icon_state = "whitepurplecorner" }, -/area/crew_quarters/fitness) +/area/medical/research) "cIo" = ( -/obj/structure/disposalpipe/junction{ - dir = 1; - icon_state = "pipe-j2" - }, /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralfull" @@ -65372,8 +62811,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/effect/decal/warning_stripes/west, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -65396,20 +62834,19 @@ /turf/simulated/floor/plasteel, /area/crew_quarters/fitness) "cIs" = ( -/obj/structure/disposalpipe/segment, /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 4; initialize_directions = 11 }, /obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, -/obj/machinery/hologram/holopad, /obj/effect/decal/warning_stripes/yellow/hollow, +/obj/structure/disposalpipe/segment, +/obj/machinery/hologram/holopad, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralfull" @@ -65421,18 +62858,9 @@ /turf/simulated/floor/plasteel, /area/crew_quarters/fitness) "cIu" = ( -/obj/machinery/door/airlock/external{ - frequency = 1379; - id_tag = "sw_maint_inner"; - locked = 1; - name = "West Maintenance External Access"; - req_access_txt = "10;13" - }, -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 4 - }, +/obj/effect/spawner/window/shuttle, /turf/simulated/floor/plating, -/area/maintenance/port) +/area/shuttle/pod_4) "cIv" = ( /obj/structure/girder, /turf/simulated/floor/plasteel{ @@ -65454,8 +62882,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/door/airlock/maintenance{ req_access_txt = "12" @@ -65492,8 +62919,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/effect/decal/cleanable/dirt, /obj/effect/decal/cleanable/dirt, @@ -65594,16 +63020,21 @@ /turf/simulated/floor/plating, /area/medical/research) "cIX" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/spawner/window/reinforced, -/turf/simulated/floor/plating, -/area/medical/research) -"cIY" = ( -/obj/structure/disposalpipe/segment, /obj/machinery/door/firedoor, /obj/effect/decal/warning_stripes/south, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel, /area/medical/research) +"cIY" = ( +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "whitepurplecorner" + }, +/area/medical/research) "cIZ" = ( /obj/machinery/status_display, /turf/simulated/wall, @@ -65628,10 +63059,9 @@ /turf/simulated/wall, /area/medical/research) "cJc" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 +/obj/machinery/door/airlock/public/glass{ + name = "Public Access" }, -/obj/machinery/door/airlock/public/glass, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralcorner" @@ -65682,9 +63112,9 @@ /turf/simulated/wall, /area/medical/medbay) "cJj" = ( -/obj/structure/disposalpipe/segment, /obj/machinery/door/firedoor, /obj/effect/decal/warning_stripes/south, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel, /area/medical/medbay) "cJk" = ( @@ -65695,8 +63125,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/door/airlock/maintenance, @@ -65704,8 +63133,8 @@ /turf/simulated/floor/plasteel, /area/maintenance/starboard) "cJm" = ( -/obj/machinery/hologram/holopad, /obj/effect/decal/warning_stripes/yellow/hollow, +/obj/machinery/hologram/holopad, /turf/simulated/floor/plasteel, /area/crew_quarters/fitness) "cJn" = ( @@ -65732,16 +63161,30 @@ /turf/simulated/floor/plasteel, /area/assembly/chargebay) "cJr" = ( -/obj/machinery/vending/medical, +/obj/structure/table/glass, +/obj/item/tank/internals/emergency_oxygen/nitrogen{ + pixel_x = 5; + pixel_y = 5 + }, +/obj/item/tank/internals/emergency_oxygen/nitrogen{ + pixel_x = 5 + }, +/obj/item/tank/internals/emergency_oxygen/plasma{ + pixel_x = -5; + pixel_y = 5 + }, +/obj/item/tank/internals/emergency_oxygen/plasma{ + pixel_x = -5 + }, /turf/simulated/floor/plasteel{ icon_state = "whitebluefull" }, /area/medical/medbay2) "cJs" = ( +/obj/structure/closet/secure_closet/medical3, /obj/machinery/newscaster{ pixel_y = 32 }, -/obj/structure/closet/secure_closet/medical3, /turf/simulated/floor/plasteel{ icon_state = "whitebluefull" }, @@ -65766,9 +63209,9 @@ }, /area/medical/medbay2) "cJv" = ( +/obj/effect/decal/warning_stripes/yellow/hollow, /obj/structure/disposalpipe/trunk, /obj/machinery/disposal, -/obj/effect/decal/warning_stripes/yellow/hollow, /turf/simulated/floor/plasteel{ icon_state = "whitebluefull" }, @@ -65892,10 +63335,10 @@ /turf/simulated/floor/plating, /area/maintenance/port) "cJL" = ( -/obj/machinery/shieldgen, -/obj/effect/decal/warning_stripes/northeast, -/turf/simulated/floor/plasteel, -/area/maintenance/port) +/obj/machinery/door/airlock/external, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plating, +/area/hallway/secondary/entry) "cJM" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/door/airlock/atmos{ @@ -65915,6 +63358,7 @@ /area/maintenance/port) "cJP" = ( /obj/effect/decal/warning_stripes/west, +/obj/machinery/shieldgen, /turf/simulated/floor/plasteel, /area/maintenance/port) "cJR" = ( @@ -65956,14 +63400,12 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/effect/decal/warning_stripes/yellow, /turf/simulated/floor/plasteel, /area/maintenance/electrical) "cJY" = ( -/obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 8 }, @@ -65981,10 +63423,10 @@ /area/maintenance/electrical) "cKa" = ( /obj/structure/table/reinforced, +/obj/effect/decal/warning_stripes/yellow, /obj/machinery/newscaster{ pixel_y = 32 }, -/obj/effect/decal/warning_stripes/yellow, /turf/simulated/floor/plasteel, /area/maintenance/electrical) "cKb" = ( @@ -65996,8 +63438,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/light/small{ dir = 8 @@ -66048,8 +63489,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/effect/decal/warning_stripes/northwest, /turf/simulated/floor/plasteel{ @@ -66065,8 +63505,7 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/effect/landmark{ name = "blobstart" @@ -66104,21 +63543,17 @@ "cKr" = ( /turf/simulated/wall/r_wall, /area/medical/research) -"cKs" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/turf/simulated/floor/engine, -/area/toxins/explab) "cKt" = ( /obj/machinery/atmospherics/unary/portables_connector, /obj/effect/decal/warning_stripes/northwest, /turf/simulated/floor/plasteel, /area/maintenance/electrical) "cKu" = ( -/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ + dir = 6 + }, /turf/simulated/floor/engine, -/area/toxins/explab) +/area/toxins/mixing) "cKv" = ( /obj/effect/spawner/window/reinforced, /obj/structure/cable{ @@ -66145,22 +63580,30 @@ }, /area/medical/research) "cKx" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/chair, +/obj/structure/chair/office/light{ + dir = 8 + }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "whitepurplecorner" }, /area/medical/research) "cKy" = ( +/obj/item/twohanded/required/kirbyplants, /obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ - dir = 1; - icon_state = "whitepurplecorner" + icon_state = "dark" }, -/area/medical/research) +/area/medical/cmo) "cKz" = ( -/obj/structure/chair, +/obj/item/twohanded/required/kirbyplants, +/turf/simulated/floor/plasteel{ + icon_state = "bluecorner" + }, +/area/hallway/primary/aft) +"cKA" = ( +/obj/item/paicard, +/obj/structure/chair/sofa/corp/right, /obj/effect/landmark/start{ name = "Civilian" }, @@ -66169,52 +63612,37 @@ icon_state = "whitepurplecorner" }, /area/medical/research) -"cKA" = ( -/obj/structure/table, -/obj/item/paicard, -/turf/simulated/floor/plasteel{ - dir = 1; - icon_state = "whitepurplecorner" - }, -/area/medical/research) "cKB" = ( -/obj/item/twohanded/required/kirbyplants, /obj/machinery/light{ dir = 1; on = 1 }, +/obj/structure/chair/sofa/corp, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "whitepurple" }, /area/medical/research) "cKC" = ( -/obj/structure/table, -/obj/item/stack/cable_coil/random, -/obj/item/assembly/igniter, -/obj/item/assembly/timer{ - pixel_x = 4; - pixel_y = 4 - }, +/obj/structure/chair/sofa/corp/left, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "whitepurplecorner" }, /area/medical/research) "cKD" = ( -/obj/structure/chair, +/obj/structure/railing/corner, +/obj/machinery/atmospherics/unary/vent_scrubber/on, /turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "whitepurplecorner" + icon_state = "white" }, /area/medical/research) "cKE" = ( /obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "whitepurplecorner" + icon_state = "white" }, -/area/medical/research) +/area/medical/genetics) "cKF" = ( /turf/simulated/floor/plasteel{ dir = 4; @@ -66235,6 +63663,12 @@ /obj/structure/table, /obj/item/clothing/gloves/color/latex, /obj/item/clothing/glasses/science, +/obj/item/assembly/timer{ + pixel_x = 4; + pixel_y = 4 + }, +/obj/item/assembly/igniter, +/obj/item/stack/cable_coil/random, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "whitepurplecorner" @@ -66244,23 +63678,17 @@ /obj/structure/sign/science, /turf/simulated/wall, /area/medical/research) -"cKL" = ( -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plasteel{ - icon_state = "bluecorner" - }, -/area/hallway/primary/aft) "cKM" = ( -/obj/structure/table, -/obj/item/storage/box/bodybags, -/obj/item/pen, +/obj/structure/chair/sofa/corp/corner{ + dir = 4 + }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "whitebluecorner" }, /area/medical/medbay) "cKN" = ( -/obj/structure/chair, +/obj/structure/chair/sofa/corp/left, /obj/effect/landmark/start{ name = "Civilian" }, @@ -66276,15 +63704,18 @@ }, /area/medical/medbay) "cKP" = ( -/obj/structure/chair, +/obj/structure/chair/comfy/teal, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "whitebluecorner" }, /area/medical/medbay) "cKQ" = ( -/obj/structure/table, -/obj/item/stack/medical/bruise_pack/advanced, +/obj/structure/table/holotable, +/obj/item/reagent_containers/food/drinks/coffee{ + pixel_x = -6; + pixel_y = 6 + }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "whitebluecorner" @@ -66294,30 +63725,33 @@ /obj/machinery/light{ dir = 1 }, -/obj/machinery/vending/medical, +/obj/structure/chair/comfy/teal, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "whiteblue" }, /area/medical/medbay) "cKS" = ( -/obj/structure/table, -/obj/item/stack/medical/ointment/advanced, +/obj/structure/table/tray, +/obj/item/stack/medical/bruise_pack/advanced{ + pixel_x = -7; + pixel_y = 7 + }, +/obj/item/stack/medical/ointment/advanced{ + pixel_x = 4; + pixel_y = 5 + }, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "whitebluecorner" }, /area/medical/medbay) "cKT" = ( -/obj/structure/chair, -/obj/effect/landmark/start{ - name = "Civilian" - }, +/obj/structure/railing, /turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "whitebluecorner" + icon_state = "white" }, -/area/medical/medbay) +/area/medical/research) "cKU" = ( /obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ @@ -66332,7 +63766,10 @@ }, /area/medical/medbay) "cKW" = ( -/obj/structure/chair, +/obj/structure/chair/comfy/teal, +/obj/effect/landmark/start{ + name = "Civilian" + }, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "whitebluecorner" @@ -66353,25 +63790,29 @@ "cKY" = ( /turf/simulated/wall, /area/medical/medbay) -"cKZ" = ( -/obj/structure/table, -/obj/item/storage/toolbox/electrical, -/turf/simulated/floor/plating, -/area/maintenance/starboard) "cLa" = ( -/obj/structure/table, -/obj/item/storage/toolbox/mechanical, -/turf/simulated/floor/plating, -/area/maintenance/starboard) -"cLb" = ( -/obj/structure/table_frame, -/turf/simulated/floor/plating, -/area/maintenance/starboard) -"cLd" = ( -/obj/structure/cable{ - d2 = 4; - icon_state = "0-4" +/obj/machinery/door/poddoor/shutters{ + density = 0; + dir = 2; + icon_state = "open"; + id_tag = "psychoffice"; + name = "Privacy Shutters"; + opacity = 0 }, +/obj/effect/spawner/window/reinforced, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plating, +/area/medical/psych) +"cLb" = ( +/obj/machinery/door/airlock/medical{ + id_tag = "psychfoyer"; + name = "Psych Office"; + req_access_txt = "64" + }, +/obj/machinery/door/firedoor, +/turf/simulated/floor/wood, +/area/hallway/primary/central) +"cLd" = ( /obj/machinery/power/apc{ dir = 8; name = "west bump"; @@ -66382,6 +63823,16 @@ dir = 4; network = list("SS13","Medical") }, +/obj/structure/table/glass, +/obj/item/storage/box/autoinjectors{ + pixel_x = 4; + pixel_y = 4 + }, +/obj/item/storage/box/iv_bags, +/obj/item/storage/box/pillbottles{ + pixel_x = -5; + pixel_y = -5 + }, /turf/simulated/floor/plasteel{ icon_state = "whitebluefull" }, @@ -66390,14 +63841,12 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /turf/simulated/floor/plasteel{ dir = 1; @@ -66408,8 +63857,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /turf/simulated/floor/plasteel{ dir = 1; @@ -66417,46 +63865,39 @@ }, /area/medical/medbay2) "cLg" = ( -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" - }, /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" }, /turf/simulated/floor/plasteel{ icon_state = "whitebluefull" }, /area/medical/medbay2) "cLh" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/door/airlock/maintenance{ name = "Medbay Maintenance"; req_access_txt = "5" }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel, /area/medical/medbay2) "cLi" = ( -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/cable{ d1 = 1; @@ -66464,14 +63905,17 @@ icon_state = "1-4" }, /obj/effect/decal/warning_stripes/yellow, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, /turf/simulated/floor/plasteel, /area/maintenance/starboard) "cLk" = ( /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 5 @@ -66486,8 +63930,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 1 @@ -66501,14 +63944,10 @@ /turf/simulated/floor/plasteel, /area/maintenance/starboard) "cLm" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -66517,6 +63956,9 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel, /area/maintenance/starboard2) "cLn" = ( @@ -66537,9 +63979,7 @@ pixel_x = 26; pixel_y = 28 }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/crew_quarters/sleep) "cLp" = ( /turf/simulated/floor/carpet, @@ -66558,6 +63998,9 @@ pixel_y = 28 }, /obj/machinery/cryopod, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, /turf/simulated/floor/plasteel{ icon_state = "freezerfloor" }, @@ -66615,7 +64058,7 @@ }, /obj/effect/decal/warning_stripes/yellow, /obj/machinery/atmospherics/pipe/simple/hidden/cyan, -/obj/structure/closet/secure_closet/scientist, +/obj/structure/closet/bombcloset, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "whitepurplecorner" @@ -66635,21 +64078,19 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/door/airlock/maintenance{ name = "Science Maintenance"; req_access_txt = "47" }, /turf/simulated/floor/plasteel, -/area/medical/research) +/area/maintenance/port) "cLC" = ( /obj/item/clothing/gloves/color/black, /obj/item/wrench, /obj/item/crowbar/red, -/obj/machinery/light/small, -/obj/effect/decal/warning_stripes/southwest, +/obj/effect/decal/warning_stripes/west, /turf/simulated/floor/plasteel, /area/maintenance/port) "cLD" = ( @@ -66690,14 +64131,12 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /obj/effect/decal/warning_stripes/north, /turf/simulated/floor/plasteel, @@ -66718,8 +64157,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/effect/decal/warning_stripes/north, /turf/simulated/floor/plasteel, @@ -66728,8 +64166,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, @@ -66751,8 +64188,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /turf/simulated/floor/plasteel{ dir = 8; @@ -66812,13 +64248,16 @@ }, /area/toxins/xenobiology) "cLV" = ( -/obj/structure/closet/wardrobe/white, -/obj/effect/decal/warning_stripes/yellow, +/obj/structure/table/wood, +/obj/machinery/kitchen_machine/microwave{ + pixel_x = -3; + pixel_y = 6 + }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "whitepurplefull" }, -/area/medical/research) +/area/toxins/misc_lab) "cLW" = ( /obj/machinery/door/airlock/maintenance, /turf/simulated/floor/plasteel, @@ -66827,14 +64266,13 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "whitepurple" }, -/area/medical/research) +/area/toxins/misc_lab) "cLY" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -66844,16 +64282,14 @@ /obj/machinery/ai_status_display{ pixel_y = 32 }, -/obj/structure/extinguisher_cabinet{ - pixel_x = -28; - pixel_y = 30 +/obj/structure/chair/comfy/purp{ + dir = 8 }, -/obj/machinery/vending/cola, /turf/simulated/floor/plasteel{ - dir = 9; + dir = 1; icon_state = "whitepurple" }, -/area/medical/research) +/area/toxins/misc_lab) "cMb" = ( /obj/item/radio/intercom{ dir = 1; @@ -66867,21 +64303,26 @@ dir = 1; icon_state = "whitepurple" }, -/area/medical/research) +/area/toxins/misc_lab) "cMc" = ( /obj/machinery/status_display{ pixel_y = 32 }, -/obj/structure/chair/comfy/purp, +/obj/machinery/vending/snack, /turf/simulated/floor/plasteel{ dir = 5; icon_state = "whitepurple" }, -/area/medical/research) +/area/toxins/misc_lab) "cMd" = ( /obj/structure/table, -/obj/item/folder/white, -/obj/item/assembly/infra, +/obj/item/folder/white{ + pixel_y = 12 + }, +/obj/machinery/cell_charger{ + pixel_x = -4 + }, +/obj/item/stock_parts/cell/high, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "whitepurplecorner" @@ -66890,11 +64331,11 @@ "cMe" = ( /obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ - icon_state = "white" + dir = 1; + icon_state = "whitepurplecorner" }, /area/medical/research) "cMf" = ( -/obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 6 }, @@ -66906,9 +64347,22 @@ }, /area/medical/research) "cMg" = ( -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8; + initialize_directions = 11 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8; + initialize_directions = 11 + }, +/obj/structure/disposalpipe/junction{ + dir = 4; + icon_state = "pipe-y" }, /turf/simulated/floor/plasteel{ icon_state = "white" @@ -66918,41 +64372,46 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/turf/simulated/floor/plasteel{ - icon_state = "white" - }, -/area/medical/research) +/turf/simulated/floor/plating, +/area/medical/morgue) "cMj" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" }, -/obj/machinery/hologram/holopad, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ icon_state = "white" }, /area/medical/research) "cMk" = ( -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" }, -/turf/simulated/floor/plasteel{ - icon_state = "white" - }, -/area/medical/research) +/obj/effect/decal/warning_stripes/yellow, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plasteel, +/area/maintenance/apmaint) "cMl" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4; - initialize_directions = 11 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8; - initialize_directions = 11 - }, -/turf/simulated/floor/plasteel{ - icon_state = "white" - }, -/area/medical/research) +/obj/effect/decal/warning_stripes/east, +/obj/structure/table/reinforced, +/obj/machinery/reagentgrinder, +/obj/item/storage/box/beakers, +/obj/item/reagent_containers/glass/beaker/large, +/obj/item/reagent_containers/glass/beaker/large, +/obj/item/reagent_containers/glass/beaker/large, +/obj/item/reagent_containers/glass/beaker/large, +/obj/item/reagent_containers/glass/beaker/large, +/obj/item/reagent_containers/glass/beaker/large, +/obj/item/reagent_containers/glass/beaker/large, +/obj/item/reagent_containers/glass/beaker/large, +/obj/item/reagent_containers/glass/beaker/large, +/obj/item/reagent_containers/glass/beaker/large, +/turf/simulated/floor/engine, +/area/toxins/misc_lab) "cMm" = ( /turf/simulated/floor/plasteel{ icon_state = "white" @@ -66966,7 +64425,9 @@ }, /area/medical/research) "cMo" = ( -/obj/item/twohanded/required/kirbyplants, +/obj/structure/chair/sofa/corp/right{ + dir = 4 + }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "whitebluecorner" @@ -67040,8 +64501,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /turf/simulated/floor/plasteel{ dir = 8; @@ -67054,20 +64514,11 @@ icon_state = "cmo" }, /area/medical/medbay2) -"cMD" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - icon_state = "white" - }, -/area/toxins/mixing) "cME" = ( /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -67079,7 +64530,14 @@ /turf/simulated/floor/plasteel, /area/maintenance/starboard) "cMF" = ( -/obj/structure/plasticflaps, +/obj/structure/plasticflaps{ + opacity = 1 + }, +/obj/machinery/navbeacon{ + codes_txt = "delivery"; + dir = 8; + location = "Medbay" + }, /turf/simulated/floor/plasteel, /area/medical/medbay2) "cMG" = ( @@ -67110,17 +64568,15 @@ "cMM" = ( /obj/structure/bed, /obj/item/bedsheet/red, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/crew_quarters/sleep) "cMN" = ( /obj/structure/table/wood, +/obj/item/storage/briefcase, +/obj/item/cane, /obj/machinery/newscaster{ pixel_x = -32 }, -/obj/item/storage/briefcase, -/obj/item/cane, /turf/simulated/floor/carpet, /area/crew_quarters/sleep) "cMO" = ( @@ -67130,14 +64586,14 @@ /turf/simulated/floor/carpet, /area/crew_quarters/sleep) "cMP" = ( -/obj/machinery/newscaster{ - pixel_x = -32 - }, -/obj/machinery/cryopod/right, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/hologram/holopad, /turf/simulated/floor/plasteel{ - icon_state = "freezerfloor" + dir = 8; + icon_state = "neutralfull" }, -/area/crew_quarters/sleep) +/area/hallway/secondary/entry) "cMQ" = ( /obj/machinery/vending/snack, /obj/effect/decal/warning_stripes/yellow, @@ -67206,8 +64662,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /turf/simulated/floor/plasteel{ dir = 8; @@ -67232,8 +64687,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ @@ -67273,10 +64727,6 @@ /turf/simulated/floor/plating, /area/toxins/xenobiology) "cNl" = ( -/obj/structure/disposalpipe/trunk{ - dir = 1 - }, -/obj/machinery/disposal, /obj/structure/window/reinforced{ dir = 8 }, @@ -67285,6 +64735,10 @@ pixel_y = 32 }, /obj/effect/decal/warning_stripes/yellow/hollow, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/obj/machinery/disposal, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -67293,8 +64747,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/effect/decal/warning_stripes/yellow, /turf/simulated/floor/plasteel{ @@ -67324,8 +64777,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/door/firedoor, /obj/machinery/door/airlock/research{ @@ -67349,14 +64801,12 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /obj/machinery/door/poddoor/preopen{ id_tag = "xeno4"; @@ -67372,26 +64822,24 @@ }, /area/toxins/xenobiology) "cNr" = ( -/obj/structure/disposalpipe/segment, /obj/effect/spawner/window/reinforced, /obj/structure/cable{ d2 = 8; icon_state = "0-8" }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plating, /area/toxins/xenobiology) "cNs" = ( /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /obj/machinery/door/poddoor/preopen{ id_tag = "xeno5"; @@ -67410,14 +64858,12 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /obj/machinery/door/poddoor/preopen{ id_tag = "xeno6"; @@ -67445,14 +64891,12 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /obj/machinery/door/airlock/research/glass{ autoclose = 0; @@ -67479,35 +64923,20 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /turf/simulated/floor/plasteel{ icon_state = "white" }, -/area/medical/research) -"cNy" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ +/area/toxins/misc_lab) +"cNA" = ( +/obj/structure/chair/comfy/purp{ dir = 8 }, -/turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "whitepurplecorner" - }, -/area/medical/research) -"cNA" = ( -/obj/machinery/vending/snack, -/turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "whitepurple" - }, -/area/medical/research) -"cNB" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, /turf/simulated/floor/plasteel{ icon_state = "white" }, -/area/medical/research) +/area/toxins/misc_lab) "cND" = ( /obj/item/twohanded/required/kirbyplants, /turf/simulated/floor/plasteel{ @@ -67516,32 +64945,24 @@ }, /area/medical/research) "cNE" = ( -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ - icon_state = "whitepurple" + dir = 1; + icon_state = "neutral" }, -/area/medical/research) +/area/maintenance/apmaint) "cNF" = ( -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" - }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1; initialize_directions = 11 }, +/obj/structure/railing{ + dir = 4 + }, +/obj/structure/table/glass, +/obj/item/stock_parts/cell/high, /turf/simulated/floor/plasteel{ icon_state = "whitepurple" }, @@ -67553,9 +64974,9 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/turf/simulated/floor/plasteel{ - icon_state = "whitepurple" - }, +/obj/structure/flora/ausbushes/sunnybush, +/obj/structure/flora/ausbushes/brflowers, +/turf/simulated/floor/grass, /area/medical/research) "cNH" = ( /obj/effect/landmark{ @@ -67567,30 +64988,28 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/turf/simulated/floor/plasteel{ - icon_state = "whitepurple" - }, +/turf/simulated/floor/grass, /area/medical/research) "cNI" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 +/obj/effect/decal/cleanable/dirt, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" }, /turf/simulated/floor/plasteel{ - icon_state = "whitepurple" + icon_state = "redyellowfull" }, -/area/medical/research) +/area/maintenance/apmaint) "cNJ" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/structure/railing{ + dir = 8 + }, +/obj/structure/table/glass, +/obj/item/paicard, /turf/simulated/floor/plasteel{ icon_state = "whitepurple" }, @@ -67630,7 +65049,6 @@ /turf/simulated/floor/plasteel, /area/medical/research) "cNN" = ( -/obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -67651,7 +65069,6 @@ }, /area/hallway/primary/aft) "cNP" = ( -/obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -67703,6 +65120,10 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, /turf/simulated/floor/plasteel{ dir = 9; icon_state = "whiteblue" @@ -67715,12 +65136,29 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 1 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/rack/holorack, +/obj/item/paper/pamphlet{ + pixel_x = -5; + pixel_y = 3 + }, +/obj/item/paper/pamphlet{ + pixel_x = 7; + pixel_y = 3 + }, +/obj/item/paper/pamphlet{ + pixel_x = -3 + }, +/obj/item/paper/pamphlet{ + pixel_x = 10 + }, /turf/simulated/floor/plasteel{ icon_state = "white" }, /area/medical/medbay) "cNV" = ( -/obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -67728,6 +65166,11 @@ dir = 1; initialize_directions = 11 }, +/obj/structure/disposalpipe/junction{ + dir = 1; + icon_state = "pipe-j2" + }, +/obj/item/twohanded/required/kirbyplants, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -67792,25 +65235,35 @@ /turf/space, /area/space/nearstation) "cOa" = ( -/obj/structure/chair/comfy/lime{ - dir = 4 - }, /obj/machinery/door_control{ id = "psychoffice"; name = "Privacy Shutters Control"; - pixel_x = -25 + pixel_x = -25; + pixel_y = 5 }, -/turf/simulated/floor/carpet, +/obj/structure/chair/office/light{ + dir = 4 + }, +/obj/effect/landmark/start{ + name = "Psychiatrist" + }, +/obj/machinery/door_control{ + id = "psychfoyer"; + layer = 3.3; + name = "Psych Foyer Doors"; + normaldoorcontrol = 1; + pixel_x = -25; + pixel_y = -6 + }, +/turf/simulated/floor/wood, /area/medical/psych) "cOb" = ( -/obj/machinery/light{ - dir = 1 +/obj/structure/table/wood, +/obj/item/paper_bin{ + pixel_y = 5 }, -/obj/item/radio/intercom{ - dir = 1; - pixel_y = 25 - }, -/turf/simulated/floor/carpet, +/obj/item/pen/multi, +/turf/simulated/floor/wood, /area/medical/psych) "cOc" = ( /obj/machinery/firealarm{ @@ -67821,14 +65274,10 @@ pixel_x = 28; pixel_y = 30 }, -/obj/structure/bed/psych, -/turf/simulated/floor/carpet, +/turf/simulated/floor/wood, /area/medical/psych) "cOd" = ( /obj/structure/table, -/obj/machinery/newscaster{ - pixel_y = 32 - }, /obj/item/storage/box/bodybags{ pixel_x = 5; pixel_y = 5 @@ -67839,6 +65288,9 @@ pixel_x = 5; pixel_y = 5 }, +/obj/machinery/newscaster{ + pixel_y = 32 + }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "whitebluecorner" @@ -67955,27 +65407,22 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /turf/simulated/floor/plating, /area/maintenance/starboard) "cOp" = ( /obj/structure/table/wood, +/obj/item/paper_bin, +/obj/item/pen, /obj/machinery/newscaster{ pixel_x = -32 }, -/obj/item/paper_bin, -/obj/item/pen, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/crew_quarters/sleep) "cOq" = ( /obj/structure/chair/office/dark, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/crew_quarters/sleep) "cOr" = ( /obj/structure/table/wood, @@ -68050,14 +65497,12 @@ /turf/simulated/floor/plasteel, /area/maintenance/electrical) "cOB" = ( -/obj/machinery/atmospherics/binary/volume_pump{ - name = "Ports to Distro" +/obj/machinery/atmospherics/unary/portables_connector{ + dir = 8 }, -/turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "caution" - }, -/area/maintenance/electrical) +/obj/effect/decal/warning_stripes/west, +/turf/simulated/floor/plasteel, +/area/atmos) "cOC" = ( /obj/structure/table/reinforced, /obj/effect/decal/warning_stripes/yellow/hollow, @@ -68076,10 +65521,8 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, -/obj/machinery/hologram/holopad, /obj/effect/decal/warning_stripes/yellow/hollow, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 6 @@ -68087,6 +65530,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 10 }, +/obj/machinery/hologram/holopad, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralfull" @@ -68150,8 +65594,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/effect/decal/warning_stripes/yellow, /turf/simulated/floor/plasteel{ @@ -68185,8 +65628,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/effect/decal/warning_stripes/yellow/hollow, /obj/machinery/atmospherics/unary/vent_pump/on{ @@ -68251,10 +65693,8 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, -/obj/effect/decal/warning_stripes/yellow, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "whitepurple" @@ -68264,26 +65704,13 @@ /obj/structure/sign/biohazard, /turf/simulated/wall, /area/toxins/xenobiology) -"cOZ" = ( -/obj/machinery/chem_master, -/obj/effect/decal/warning_stripes/yellow/hollow, -/turf/simulated/floor/plasteel{ - dir = 1; - icon_state = "whitepurple" - }, -/area/toxins/xenobiology) "cPa" = ( -/obj/machinery/chem_dispenser, /obj/item/radio/intercom{ dir = 4; name = "Station Intercom (General)"; pixel_x = 29; pixel_y = 22 }, -/obj/structure/reagent_dispensers/fueltank/chem{ - pixel_y = 32 - }, -/obj/effect/decal/warning_stripes/yellow, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "whitepurple" @@ -68304,8 +65731,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/effect/decal/warning_stripes/east, /turf/simulated/floor/plasteel{ @@ -68314,97 +65740,51 @@ }, /area/toxins/xenobiology) "cPe" = ( -/obj/structure/chair/office/light{ - dir = 1; - pixel_y = 3 - }, /obj/effect/decal/warning_stripes/northwest, /turf/simulated/floor/plasteel, /area/toxins/xenobiology) "cPf" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 +/obj/machinery/camera{ + c_tag = "Experimention Lab"; + dir = 1; + network = list("Research","SS13") + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 }, /turf/simulated/floor/engine, /area/toxins/explab) "cPg" = ( /obj/structure/cable{ d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 + d2 = 8; + icon_state = "1-8" }, /turf/simulated/floor/plasteel{ icon_state = "white" }, -/area/medical/research) +/area/toxins/misc_lab) "cPh" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - tag = "" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ +/obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 }, /turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "whitepurplecorner" + icon_state = "white" }, -/area/medical/research) +/area/toxins/misc_lab) "cPi" = ( /obj/machinery/atmospherics/pipe/manifold/visible, /obj/effect/decal/warning_stripes/southeast, /turf/simulated/floor/plasteel, /area/maintenance/electrical) -"cPj" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8"; - tag = "" - }, -/turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "whitepurple" - }, -/area/medical/research) "cPk" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, /obj/effect/landmark/start{ name = "Scientist" }, /turf/simulated/floor/plasteel{ icon_state = "white" }, -/area/medical/research) -"cPl" = ( -/obj/structure/table/wood, -/turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "whitepurple" - }, -/area/medical/research) +/area/toxins/misc_lab) "cPn" = ( /turf/simulated/floor/plasteel{ dir = 8; @@ -68412,7 +65792,6 @@ }, /area/medical/research) "cPo" = ( -/obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel{ @@ -68420,9 +65799,13 @@ }, /area/medical/research) "cPq" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 +/obj/structure/railing{ + dir = 4 + }, +/obj/structure/table/glass, +/obj/item/gps, +/obj/item/flash{ + pixel_x = -5 }, /turf/simulated/floor/plasteel{ dir = 1; @@ -68430,23 +65813,22 @@ }, /area/medical/research) "cPr" = ( -/turf/simulated/floor/plasteel{ - dir = 1; - icon_state = "whitepurple" - }, +/obj/structure/flora/bush, +/turf/simulated/floor/grass, /area/medical/research) "cPs" = ( -/obj/structure/disposalpipe/segment, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ - dir = 1; - icon_state = "whitepurple" + icon_state = "redyellowfull" }, -/area/medical/research) +/area/maintenance/apmaint) "cPt" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 +/obj/structure/railing{ + dir = 8 }, +/obj/structure/table/glass, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "whitepurple" @@ -68477,25 +65859,13 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/hologram/holopad, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralfull" }, /area/hallway/primary/aft) -"cPz" = ( -/obj/structure/disposalpipe/sortjunction{ - dir = 1; - name = "Chemistry Junction"; - sortType = 13 - }, -/turf/simulated/floor/plasteel{ - icon_state = "bluecorner" - }, -/area/hallway/primary/aft) "cPA" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/machinery/door/firedoor, /obj/effect/decal/warning_stripes/east, /turf/simulated/floor/plasteel, @@ -68504,18 +65874,13 @@ /turf/simulated/wall/r_wall, /area/maintenance/starboardsolar) "cPD" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ dir = 10; icon_state = "whiteblue" }, /area/medical/medbay) "cPE" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 1 }, @@ -68525,13 +65890,13 @@ /area/medical/medbay) "cPF" = ( /obj/structure/disposalpipe/segment{ - dir = 2; + dir = 8; icon_state = "pipe-c" }, /turf/simulated/floor/plasteel{ - icon_state = "whiteblue" + icon_state = "redyellowfull" }, -/area/medical/medbay) +/area/maintenance/apmaint) "cPH" = ( /obj/effect/landmark{ name = "lightsout" @@ -68541,13 +65906,13 @@ }, /area/medical/medbay) "cPI" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, /obj/structure/disposalpipe/segment{ dir = 1; icon_state = "pipe-c" }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -68584,12 +65949,12 @@ }, /area/medical/medbay) "cPM" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/disposalpipe/segment{ dir = 2; icon_state = "pipe-c" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -68604,17 +65969,17 @@ name = "Privacy Shutters"; opacity = 0 }, +/obj/machinery/door/firedoor, /turf/simulated/floor/plating, /area/medical/psych) "cPQ" = ( -/turf/simulated/floor/carpet, +/turf/simulated/floor/wood, /area/medical/psych) "cPR" = ( -/obj/item/twohanded/required/kirbyplants, /obj/structure/sign/poster/random{ pixel_x = 32 }, -/turf/simulated/floor/carpet, +/turf/simulated/floor/wood, /area/medical/psych) "cPS" = ( /obj/effect/spawner/window/reinforced, @@ -68688,16 +66053,10 @@ /turf/space, /area/space/nearstation) "cPY" = ( -/obj/machinery/access_button{ - command = "cycle_exterior"; - frequency = 1379; - master_tag = "sw_maint_airlock"; - name = "exterior access button"; - pixel_x = 24; - pixel_y = 24 +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "neutral" }, -/obj/structure/lattice/catwalk, -/turf/space, /area/space/nearstation) "cPZ" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -68717,9 +66076,6 @@ /turf/simulated/floor/plasteel, /area/maintenance/starboard) "cQb" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/machinery/door/firedoor, /obj/machinery/door/airlock/medical/glass{ id_tag = "medbayfoyer"; @@ -68729,6 +66085,9 @@ /obj/effect/mapping_helpers/airlock/unres{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ icon_state = "whiteblue" }, @@ -68740,9 +66099,6 @@ /obj/structure/toilet{ dir = 4 }, -/obj/machinery/newscaster{ - pixel_y = 32 - }, /obj/effect/landmark{ name = "xeno_spawn"; pixel_x = -1 @@ -68750,6 +66106,9 @@ /obj/machinery/light/small{ dir = 1 }, +/obj/machinery/newscaster{ + pixel_y = 32 + }, /turf/simulated/floor/plating, /area/medical/medbay3) "cQd" = ( @@ -68769,17 +66128,13 @@ }, /obj/machinery/light, /obj/item/paicard, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/crew_quarters/sleep) "cQf" = ( /obj/structure/closet/secure_closet/personal/cabinet, /obj/item/clothing/under/maid, /obj/item/clothing/suit/browntrenchcoat, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/crew_quarters/sleep) "cQg" = ( /obj/structure/dresser, @@ -68800,13 +66155,13 @@ /area/crew_quarters/sleep) "cQj" = ( /obj/machinery/light, -/obj/machinery/computer/cryopod{ - pixel_y = -32 - }, /obj/machinery/camera{ c_tag = "Cryodorms Aft"; dir = 1 }, +/obj/machinery/computer/cryopod{ + pixel_y = -32 + }, /turf/simulated/floor/plasteel{ icon_state = "freezerfloor" }, @@ -68879,13 +66234,9 @@ /turf/simulated/floor/plating, /area/crew_quarters/fitness) "cQs" = ( -/obj/structure/table, -/obj/machinery/light/small{ - dir = 1 - }, /obj/effect/decal/warning_stripes/northwest, /turf/simulated/floor/plasteel, -/area/maintenance/port) +/area/hallway/secondary/entry) "cQu" = ( /obj/effect/decal/warning_stripes/yellow, /turf/simulated/floor/plasteel{ @@ -68894,29 +66245,23 @@ }, /area/maintenance/port) "cQv" = ( -/obj/machinery/space_heater, -/obj/effect/decal/warning_stripes/northeast, +/obj/structure/sign/pods{ + pixel_x = -32 + }, +/obj/effect/decal/warning_stripes/west, /turf/simulated/floor/plasteel, -/area/maintenance/port) +/area/hallway/secondary/entry) "cQw" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - tag = "" - }, -/obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 + dir = 6 }, -/obj/machinery/door/airlock/research{ - name = "Research Break Room"; - req_access_txt = "47" +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 }, /turf/simulated/floor/plasteel{ icon_state = "white" }, -/area/medical/research) +/area/toxins/misc_lab) "cQx" = ( /obj/machinery/meter, /obj/machinery/atmospherics/pipe/simple/visible{ @@ -68939,8 +66284,7 @@ /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /obj/effect/decal/warning_stripes/northwest, /turf/simulated/floor/plating, @@ -68972,8 +66316,7 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/effect/decal/warning_stripes/northeast, /turf/simulated/floor/plating, @@ -68983,8 +66326,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/cable{ d2 = 2; @@ -69011,8 +66353,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/door/window/brigdoor{ dir = 2; @@ -69031,14 +66372,14 @@ }, /area/toxins/xenobiology) "cQI" = ( -/obj/structure/disposalpipe/trunk{ - dir = 1 - }, -/obj/machinery/disposal, /obj/structure/window/reinforced{ dir = 8 }, /obj/effect/decal/warning_stripes/yellow/hollow, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/obj/machinery/disposal, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -69051,10 +66392,10 @@ /obj/item/stack/sheet/mineral/plasma, /obj/item/reagent_containers/glass/beaker, /obj/item/reagent_containers/dropper, +/obj/effect/decal/warning_stripes/north, /obj/machinery/newscaster{ pixel_x = 32 }, -/obj/effect/decal/warning_stripes/north, /turf/simulated/floor/plasteel, /area/toxins/xenobiology) "cQK" = ( @@ -69071,14 +66412,12 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /obj/effect/decal/warning_stripes/east, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -69111,8 +66450,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/unary/vent_scrubber/on, /turf/simulated/floor/plasteel{ @@ -69141,8 +66479,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/door/firedoor, /obj/effect/decal/warning_stripes/east, @@ -69161,8 +66498,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /turf/simulated/floor/plasteel{ icon_state = "white" @@ -69170,14 +66506,16 @@ /area/toxins/xenobiology) "cQU" = ( /obj/effect/decal/warning_stripes/west, +/obj/structure/chair/office/light{ + dir = 4 + }, /turf/simulated/floor/plasteel, /area/toxins/xenobiology) "cQV" = ( /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/effect/decal/warning_stripes/east, /turf/simulated/floor/plasteel{ @@ -69198,34 +66536,13 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "neutral" }, /area/maintenance/port) -"cQZ" = ( -/obj/structure/cable, -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, -/turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "whitepurple" - }, -/area/medical/research) -"cRa" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/turf/simulated/floor/plasteel{ - icon_state = "white" - }, -/area/medical/research) "cRb" = ( /obj/machinery/disposal, /obj/structure/disposalpipe/trunk{ @@ -69235,14 +66552,15 @@ dir = 4; icon_state = "whitepurple" }, -/area/medical/research) +/area/toxins/misc_lab) "cRc" = ( -/obj/effect/spawner/window/reinforced, -/obj/structure/disposalpipe/segment{ - dir = 4 +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/public/glass{ + name = "Public Access" }, -/turf/simulated/floor/plating, -/area/medical/research) +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plasteel, +/area/hallway/primary/aft) "cRd" = ( /obj/item/twohanded/required/kirbyplants, /turf/simulated/floor/plasteel{ @@ -69252,12 +66570,10 @@ /area/medical/research) "cRe" = ( /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel{ - icon_state = "white" + icon_state = "redyellowfull" }, -/area/medical/research) +/area/maintenance/apmaint) "cRf" = ( /obj/structure/cable{ d1 = 2; @@ -69278,24 +66594,21 @@ }, /area/medical/research) "cRh" = ( -/obj/structure/disposalpipe/junction{ - dir = 1 - }, /turf/simulated/floor/plasteel{ icon_state = "bluecorner" }, /area/hallway/primary/aft) "cRi" = ( +/obj/effect/decal/cleanable/dirt, /obj/structure/disposalpipe/segment{ - dir = 4 + dir = 8; + icon_state = "pipe-c" }, -/obj/effect/spawner/window/reinforced, -/turf/simulated/floor/plating, -/area/medical/medbay) +/turf/simulated/floor/plasteel{ + icon_state = "neutral" + }, +/area/maintenance/apmaint) "cRj" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/item/twohanded/required/kirbyplants, /turf/simulated/floor/plasteel{ dir = 8; @@ -69311,10 +66624,7 @@ }, /area/medical/medbay) "cRl" = ( -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" - }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "whiteblue" @@ -69368,13 +66678,15 @@ dir = 10; initialize_directions = 10 }, +/obj/machinery/hologram/holopad, /turf/simulated/floor/wood, /area/medical/psych) "cRr" = ( -/obj/structure/closet/secure_closet/psychiatrist, -/obj/item/clipboard{ - pixel_x = -5 +/obj/item/radio/intercom{ + dir = 1; + pixel_x = 28 }, +/obj/item/twohanded/required/kirbyplants, /turf/simulated/floor/wood, /area/medical/psych) "cRt" = ( @@ -69396,8 +66708,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -69437,8 +66748,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -69471,7 +66781,6 @@ }, /area/crew_quarters/fitness) "cRB" = ( -/obj/structure/disposalpipe/segment, /obj/structure/cable{ d1 = 1; d2 = 8; @@ -69480,11 +66789,11 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralfull" @@ -69503,10 +66812,8 @@ /turf/simulated/floor/plating, /area/maintenance/starboardsolar) "cRD" = ( -/obj/structure/rack, -/obj/effect/decal/warning_stripes/west, -/turf/simulated/floor/plasteel, -/area/maintenance/port) +/turf/simulated/wall/mineral/titanium, +/area/shuttle/pod_2) "cRE" = ( /obj/machinery/light/small{ dir = 8 @@ -69562,8 +66869,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/effect/landmark{ name = "blobstart" @@ -69594,8 +66900,7 @@ /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /obj/machinery/door/window/brigdoor{ dir = 8; @@ -69629,8 +66934,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/effect/decal/warning_stripes/west, /turf/simulated/floor/plasteel{ @@ -69641,8 +66945,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/effect/landmark/start{ name = "Scientist" @@ -69661,8 +66964,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -69689,14 +66991,12 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /obj/effect/landmark{ name = "lightsout" @@ -69731,8 +67031,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -69753,8 +67052,7 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/effect/landmark/start{ name = "Scientist" @@ -69778,10 +67076,12 @@ /turf/simulated/floor/plasteel, /area/toxins/xenobiology) "cSh" = ( -/obj/machinery/computer/camera_advanced/xenobio, /obj/machinery/status_display{ pixel_x = 32 }, +/obj/machinery/computer/camera_advanced/xenobio{ + dir = 8 + }, /turf/simulated/floor/plasteel, /area/toxins/xenobiology) "cSi" = ( @@ -69796,15 +67096,6 @@ icon_state = "dark" }, /area/toxins/xenobiology) -"cSj" = ( -/obj/machinery/newscaster{ - pixel_x = -32 - }, -/turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "whitepurple" - }, -/area/medical/research) "cSl" = ( /obj/machinery/light/small{ dir = 1 @@ -69823,25 +67114,23 @@ /obj/item/airlock_electronics, /obj/item/stack/sheet/glass, /obj/item/assembly/signaler, +/obj/item/assembly/infra, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "whitepurplecorner" }, /area/medical/research) "cSn" = ( -/obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "whitepurplecorner" }, /area/medical/research) "cSp" = ( -/obj/structure/table, /obj/machinery/light, -/obj/machinery/cell_charger, -/obj/item/stock_parts/cell/high, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "whitepurplecorner" @@ -69860,33 +67149,37 @@ }, /area/toxins/xenobiology) "cSr" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/table, -/obj/item/paper_bin, -/obj/item/pen, +/obj/structure/railing/corner{ + dir = 8 + }, +/obj/machinery/atmospherics/unary/vent_pump/on, /turf/simulated/floor/plasteel{ - icon_state = "whitepurplecorner" + icon_state = "white" }, /area/medical/research) "cSs" = ( -/obj/structure/disposalpipe/trunk{ - dir = 1 +/obj/structure/table/glass, +/obj/item/book/random{ + pixel_x = 2; + pixel_y = 4 }, -/obj/machinery/disposal, /turf/simulated/floor/plasteel{ - icon_state = "whitepurplecorner" + icon_state = "white" }, -/area/medical/research) +/area/medical/medbay) "cSt" = ( /turf/simulated/floor/plasteel{ icon_state = "whitepurplecorner" }, /area/medical/research) "cSu" = ( -/obj/machinery/autolathe, -/turf/simulated/floor/plasteel{ - icon_state = "whitepurplecorner" +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/grass, /area/medical/research) "cSv" = ( /obj/structure/table, @@ -69936,8 +67229,8 @@ }, /area/medical/medbay) "cSB" = ( -/obj/structure/disposalpipe/segment, /obj/item/twohanded/required/kirbyplants, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "whitebluecorner" @@ -69985,17 +67278,20 @@ }, /area/medical/medbay) "cSG" = ( -/obj/structure/table, -/obj/item/paper_bin, -/obj/item/pen, +/obj/machinery/vending/coffee, /turf/simulated/floor/plasteel{ icon_state = "whitebluecorner" }, /area/medical/medbay) "cSH" = ( -/obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -70013,7 +67309,6 @@ /turf/simulated/floor/wood, /area/medical/psych) "cSJ" = ( -/obj/machinery/hologram/holopad, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 5 }, @@ -70026,14 +67321,17 @@ /obj/machinery/ai_status_display{ pixel_x = 32 }, +/obj/structure/closet/secure_closet/psychiatrist, +/obj/item/clipboard{ + pixel_x = -5 + }, /turf/simulated/floor/wood, /area/medical/psych) "cSL" = ( /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -70072,6 +67370,7 @@ /turf/simulated/wall, /area/medical/medbay2) "cSP" = ( +/obj/machinery/vending/medical, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -70080,8 +67379,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/door/airlock/medical/glass{ id_tag = "MedbayFoyer"; @@ -70119,7 +67417,7 @@ "cST" = ( /obj/structure/sink{ dir = 4; - pixel_x = 10 + pixel_x = 12 }, /obj/effect/decal/cleanable/vomit, /obj/effect/decal/cleanable/dirt, @@ -70224,9 +67522,9 @@ }, /area/crew_quarters/fitness) "cTg" = ( -/obj/effect/spawner/random_spawners/wall_rusted_probably, -/turf/simulated/wall/rust, -/area/maintenance/port) +/obj/effect/spawner/window/shuttle, +/turf/simulated/floor/plating, +/area/shuttle/pod_2) "cTh" = ( /obj/machinery/atmospherics/pipe/manifold/visible{ dir = 1 @@ -70235,12 +67533,15 @@ /turf/simulated/floor/plasteel, /area/maintenance/electrical) "cTi" = ( -/obj/structure/reagent_dispensers/fueltank, -/obj/effect/decal/warning_stripes/southwest, -/turf/simulated/floor/plasteel, +/obj/effect/decal/cleanable/dirt, +/obj/item/reagent_containers/glass/bucket, +/obj/item/bikehorn/rubberducky, +/turf/simulated/floor/plasteel{ + icon_state = "neutral" + }, /area/maintenance/port) "cTj" = ( -/obj/structure/closet/secure_closet/engineering_welding, +/obj/structure/closet/toolcloset, /turf/simulated/floor/plating, /area/maintenance/electrical) "cTk" = ( @@ -70277,8 +67578,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/light/small{ dir = 8 @@ -70300,25 +67600,23 @@ }, /area/toxins/xenobiology) "cTq" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/effect/spawner/window/reinforced, /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/cable, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plating, /area/toxins/xenobiology) "cTr" = ( /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/effect/decal/warning_stripes/west, /turf/simulated/floor/plasteel{ @@ -70330,8 +67628,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/door/window/brigdoor{ id = null; @@ -70357,14 +67654,12 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /obj/effect/decal/warning_stripes/west, /turf/simulated/floor/plasteel{ @@ -70375,8 +67670,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/effect/decal/warning_stripes/yellow, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -70393,14 +67687,12 @@ /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/machinery/camera{ c_tag = "Xenobio West"; @@ -70419,8 +67711,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/effect/decal/warning_stripes/west, /obj/effect/decal/warning_stripes/east, @@ -70450,8 +67741,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 1 @@ -70461,7 +67751,6 @@ }, /area/toxins/xenobiology) "cTB" = ( -/obj/structure/disposalpipe/segment, /obj/machinery/door/firedoor, /obj/machinery/door/airlock/research{ name = "Research Division Access"; @@ -70470,10 +67759,10 @@ /obj/effect/decal/warning_stripes/south, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel, /area/medical/research) "cTC" = ( -/obj/structure/disposalpipe/segment, /obj/machinery/door/firedoor, /obj/machinery/door/airlock/research{ name = "Research Division Access"; @@ -70494,8 +67783,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 8; @@ -70505,8 +67793,8 @@ dir = 4; initialize_directions = 11 }, -/obj/machinery/hologram/holopad, /obj/effect/decal/warning_stripes/yellow/hollow, +/obj/machinery/hologram/holopad, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -70564,31 +67852,43 @@ /obj/machinery/light{ dir = 8 }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 +/obj/structure/table/reinforced, +/obj/item/clothing/mask/gas, +/obj/item/crowbar, +/obj/item/storage/box/pillbottles, +/obj/item/storage/box/monkeycubes, +/obj/item/stack/sheet/glass{ + amount = 50; + pixel_x = 3; + pixel_y = 3 }, -/turf/simulated/floor/plasteel{ - dir = 1; - icon_state = "whitepurplecorner" +/obj/item/stack/sheet/metal{ + amount = 50 }, -/area/medical/research) +/obj/item/stack/sheet/mineral/plasma{ + layer = 2.9 + }, +/turf/simulated/floor/engine, +/area/toxins/misc_lab) "cTJ" = ( -/obj/structure/chair/comfy/purp, -/turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "whitepurple" - }, -/area/medical/research) -"cTL" = ( /obj/item/twohanded/required/kirbyplants, +/turf/simulated/floor/plasteel{ + icon_state = "white" + }, +/area/toxins/misc_lab) +"cTL" = ( /obj/machinery/light_switch{ pixel_x = 26 }, -/turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "whitepurple" +/obj/machinery/camera{ + c_tag = "Research Chemistry"; + dir = 8; + network = list("Research","SS13","Security") }, -/area/medical/research) +/obj/machinery/chem_dispenser, +/obj/item/reagent_containers/glass/beaker/large, +/turf/simulated/floor/engine, +/area/toxins/misc_lab) "cTM" = ( /obj/machinery/processor{ desc = "A machine used to process slimes and retrieve their extract."; @@ -70627,15 +67927,15 @@ /turf/simulated/wall, /area/toxins/lab) "cTS" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/spawner/window/reinforced, -/obj/machinery/door/poddoor/shutters/preopen{ - dir = 2; - id_tag = "researchdesk1"; - name = "Research Desk Shutters" +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 }, -/turf/simulated/floor/plating, -/area/toxins/lab) +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "neutralfull" + }, +/area/hallway/primary/aft) "cTT" = ( /obj/effect/spawner/window/reinforced, /obj/machinery/door/poddoor/shutters/preopen{ @@ -70653,7 +67953,6 @@ }, /area/medical/research) "cTV" = ( -/obj/structure/disposalpipe/segment, /obj/machinery/light{ dir = 8 }, @@ -70666,7 +67965,6 @@ }, /area/hallway/primary/aft) "cTW" = ( -/obj/structure/disposalpipe/segment, /obj/structure/extinguisher_cabinet{ pixel_x = 28 }, @@ -70687,7 +67985,7 @@ /turf/simulated/floor/plating, /area/medical/medbay) "cTZ" = ( -/obj/machinery/smartfridge/secure/chemistry, +/obj/machinery/smartfridge/medbay, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -70711,13 +68009,13 @@ /turf/simulated/floor/plasteel, /area/medical/medbay) "cUb" = ( -/obj/structure/disposalpipe/segment, /obj/effect/spawner/window/reinforced, /obj/machinery/door/poddoor/shutters/preopen{ dir = 2; id_tag = "chemdesk1"; name = "Chemistry Desk Shutters" }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plating, /area/medical/medbay) "cUc" = ( @@ -70782,14 +68080,9 @@ network = list("Medical","SS13","Security") }, /obj/structure/cable, -/turf/simulated/floor/wood, -/area/medical/psych) -"cUh" = ( -/obj/structure/chair/office/light, -/obj/effect/landmark/start{ - name = "Psychiatrist" - }, -/turf/simulated/floor/wood, +/obj/structure/table/wood, +/obj/item/flashlight/lamp/green, +/turf/simulated/floor/carpet, /area/medical/psych) "cUi" = ( /obj/machinery/light{ @@ -70799,7 +68092,7 @@ dir = 8; pixel_x = 24 }, -/turf/simulated/floor/wood, +/turf/simulated/floor/carpet, /area/medical/psych) "cUj" = ( /obj/machinery/light{ @@ -70833,8 +68126,7 @@ }, /area/medical/medbay3) "cUm" = ( -/obj/structure/closet/wardrobe/medical_white, -/obj/item/storage/backpack/satchel_med, +/obj/machinery/vending/medidrobe, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "neutralcorner" @@ -70866,11 +68158,11 @@ }, /area/medical/medbay3) "cUq" = ( +/obj/effect/decal/warning_stripes/yellow/hollow, /obj/structure/disposalpipe/trunk{ dir = 8 }, /obj/machinery/disposal, -/obj/effect/decal/warning_stripes/yellow/hollow, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "neutralcorner" @@ -70895,27 +68187,22 @@ /obj/machinery/defibrillator_mount/loaded{ pixel_y = 30 }, +/obj/item/reagent_containers/spray/cleaner, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "whiteblue" }, /area/medical/medbay3) "cUu" = ( -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 8; @@ -70931,31 +68218,13 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - tag = "" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - icon_state = "neutral" - }, -/area/maintenance/starboard) +/turf/simulated/floor/plasteel, +/area/hallway/primary/aft) "cUw" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -70967,14 +68236,10 @@ /turf/simulated/floor/plating, /area/maintenance/starboard) "cUx" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -70986,14 +68251,10 @@ /turf/simulated/floor/plating, /area/maintenance/starboard) "cUy" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -71007,14 +68268,10 @@ }, /area/maintenance/starboard) "cUA" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -71022,17 +68279,16 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/turf/simulated/floor/plating, -/area/maintenance/starboard) -"cUB" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, +/turf/simulated/floor/plating, +/area/maintenance/starboard) +"cUB" = ( /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 1 @@ -71043,14 +68299,10 @@ /turf/simulated/floor/plating, /area/maintenance/starboard) "cUC" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -71065,14 +68317,10 @@ }, /area/maintenance/starboard) "cUD" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -71084,14 +68332,10 @@ /turf/simulated/floor/plasteel, /area/maintenance/starboard) "cUE" = ( -/obj/structure/disposalpipe/junction{ - dir = 4 - }, /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -71105,10 +68349,6 @@ }, /area/crew_quarters/fitness) "cUF" = ( -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, /obj/structure/cable{ d1 = 1; d2 = 8; @@ -71116,6 +68356,7 @@ }, /obj/machinery/atmospherics/pipe/manifold/hidden/supply, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralfull" @@ -71202,12 +68443,6 @@ icon_state = "neutral" }, /area/maintenance/starboard) -"cUN" = ( -/turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "escape" - }, -/area/crew_quarters/fitness) "cUO" = ( /obj/structure/table/wood, /obj/item/storage/fancy/crayons, @@ -71217,14 +68452,28 @@ }, /area/crew_quarters/fitness) "cUP" = ( -/obj/structure/mopbucket, -/obj/item/mop, -/turf/simulated/floor/plating, -/area/maintenance/port) +/obj/machinery/status_display{ + layer = 4; + pixel_x = 32 + }, +/obj/machinery/light{ + dir = 4 + }, +/obj/structure/chair/comfy/shuttle{ + dir = 1 + }, +/turf/simulated/floor/mineral/titanium/blue, +/area/shuttle/pod_2) "cUQ" = ( -/obj/item/reagent_containers/glass/bucket, -/turf/simulated/floor/plating, -/area/maintenance/port) +/obj/item/radio/intercom{ + dir = 4; + pixel_x = 28 + }, +/obj/structure/chair/comfy/shuttle{ + dir = 1 + }, +/turf/simulated/floor/mineral/titanium/blue, +/area/shuttle/pod_2) "cUR" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/sign/securearea, @@ -71249,8 +68498,7 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/structure/cable{ d1 = 1; @@ -71265,8 +68513,7 @@ /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /obj/effect/decal/warning_stripes/west, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -71281,15 +68528,15 @@ }, /area/toxins/xenobiology) "cUV" = ( -/obj/machinery/disposal, -/obj/structure/disposalpipe/trunk{ - dir = 8 - }, /obj/structure/window/reinforced{ dir = 1; layer = 2.9 }, /obj/effect/decal/warning_stripes/yellow/hollow, +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -71303,18 +68550,18 @@ }, /area/toxins/xenobiology) "cUX" = ( -/obj/machinery/hologram/holopad, /obj/effect/decal/warning_stripes/yellow/hollow, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/hologram/holopad, /turf/simulated/floor/plasteel{ icon_state = "white" }, /area/toxins/xenobiology) "cUY" = ( -/obj/structure/disposalpipe/segment, /obj/effect/decal/warning_stripes/northwest, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel, /area/medical/research) "cUZ" = ( @@ -71333,10 +68580,12 @@ }, /area/toxins/xenobiology) "cVc" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/decal/warning_stripes/northeast, +/obj/structure/disposalpipe/junction{ + dir = 1; + icon_state = "pipe-y" + }, /turf/simulated/floor/plasteel, -/area/medical/research) +/area/hallway/primary/aft) "cVd" = ( /obj/structure/closet/firecloset, /obj/effect/decal/warning_stripes/yellow/hollow, @@ -71345,11 +68594,9 @@ }, /area/medical/research) "cVe" = ( -/obj/structure/disposalpipe/trunk{ - dir = 4 - }, -/obj/machinery/disposal, /obj/effect/decal/warning_stripes/northeast, +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "whitepurplecorner" @@ -71364,8 +68611,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/effect/landmark/start{ name = "Scientist" @@ -71387,25 +68633,19 @@ /turf/simulated/floor/plating, /area/toxins/xenobiology) "cVj" = ( -/obj/structure/table/wood, /turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "whitepurple" + icon_state = "white" }, -/area/medical/research) +/area/toxins/misc_lab) "cVl" = ( -/obj/structure/table/wood, -/obj/item/storage/box/donkpockets, /obj/machinery/firealarm{ dir = 4; pixel_x = 24; pixel_y = -1 }, -/turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "whitepurple" - }, -/area/medical/research) +/obj/machinery/chem_master, +/turf/simulated/floor/engine, +/area/toxins/misc_lab) "cVm" = ( /obj/machinery/smartfridge/secure/extract, /obj/machinery/light_switch{ @@ -71421,8 +68661,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/effect/decal/warning_stripes/southwest, /turf/simulated/floor/plasteel, @@ -71446,28 +68685,18 @@ /obj/effect/decal/warning_stripes/south, /turf/simulated/floor/plasteel, /area/toxins/xenobiology) -"cVq" = ( -/obj/effect/decal/warning_stripes/yellow/hollow, -/turf/simulated/floor/plasteel{ - icon_state = "white" - }, -/area/medical/research) "cVr" = ( /obj/structure/sign/nosmoking_2, /turf/simulated/wall, /area/toxins/lab) "cVs" = ( -/obj/structure/disposalpipe/segment, /obj/effect/decal/warning_stripes/west, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel, /area/medical/research) "cVt" = ( -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "whitepurplecorner" @@ -71511,9 +68740,6 @@ }, /area/toxins/lab) "cVy" = ( -/obj/machinery/newscaster{ - pixel_y = 32 - }, /obj/structure/table, /obj/item/stack/sheet/metal/fifty, /obj/item/stack/sheet/glass/fifty{ @@ -71522,6 +68748,9 @@ }, /obj/item/wrench, /obj/item/clothing/glasses/welding, +/obj/machinery/newscaster{ + pixel_y = 32 + }, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "whitepurplecorner" @@ -71536,7 +68765,6 @@ /turf/simulated/floor/plating, /area/toxins/lab) "cVA" = ( -/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "purplecorner" @@ -71554,19 +68782,19 @@ "cVE" = ( /obj/structure/table/glass, /obj/item/folder/white, +/obj/item/assembly/timer{ + pixel_x = -3; + pixel_y = -3 + }, +/obj/item/assembly/igniter, +/obj/item/assembly/igniter, +/obj/item/assembly/timer{ + pixel_x = -3; + pixel_y = -3 + }, /obj/machinery/newscaster{ pixel_y = 32 }, -/obj/item/assembly/timer{ - pixel_x = -3; - pixel_y = -3 - }, -/obj/item/assembly/igniter, -/obj/item/assembly/igniter, -/obj/item/assembly/timer{ - pixel_x = -3; - pixel_y = -3 - }, /turf/simulated/floor/plasteel{ dir = 9; icon_state = "whiteyellow" @@ -71599,31 +68827,27 @@ /obj/effect/landmark/start{ name = "Chemist" }, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, /turf/simulated/floor/plasteel, /area/medical/chemistry) "cVI" = ( -/obj/structure/disposalpipe/segment, /obj/machinery/chem_dispenser, /obj/effect/decal/warning_stripes/east, +/obj/structure/disposalpipe/junction{ + dir = 1; + icon_state = "pipe-j2" + }, /turf/simulated/floor/plasteel, /area/medical/chemistry) -"cVJ" = ( -/obj/machinery/camera{ - c_tag = "Research Hallway North"; - dir = 8; - network = list("Research","SS13") - }, -/turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "whitepurplecorner" - }, -/area/medical/research) "cVK" = ( -/obj/structure/closet/wardrobe/chemistry_white, /obj/effect/decal/warning_stripes/northwest, /obj/structure/reagent_dispensers/fueltank/chem{ pixel_x = 32 }, +/obj/machinery/vending/chemdrobe, /turf/simulated/floor/plasteel, /area/medical/chemistry) "cVL" = ( @@ -71636,7 +68860,9 @@ /turf/simulated/floor/plating, /area/maintenance/starboardsolar) "cVM" = ( -/obj/machinery/computer/med_data, +/obj/machinery/computer/med_data{ + dir = 4 + }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "whitebluecorner" @@ -71676,25 +68902,17 @@ }, /area/medical/medbay) "cVQ" = ( -/obj/structure/table/wood, -/obj/item/paper_bin{ - pixel_y = 5 - }, -/obj/item/pen/multi, -/turf/simulated/floor/wood, +/turf/simulated/floor/carpet, /area/medical/psych) "cVR" = ( -/obj/structure/table/wood, -/obj/item/flashlight/lamp/green, -/obj/item/storage/briefcase, -/turf/simulated/floor/wood, +/obj/structure/bed/psych, +/turf/simulated/floor/carpet, /area/medical/psych) "cVS" = ( /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -71707,8 +68925,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ @@ -71758,17 +68975,16 @@ }, /area/assembly/robotics) "cWb" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2"; - tag = "" +/obj/effect/decal/warning_stripes/north, +/obj/machinery/light{ + dir = 1; + on = 1 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/maintenance/starboard) +/obj/structure/disposalpipe/junction{ + dir = 4 + }, +/turf/simulated/floor/plasteel, +/area/hallway/secondary/exit) "cWc" = ( /turf/simulated/wall/rust, /area/medical/medbay3) @@ -71776,11 +68992,11 @@ /turf/simulated/wall, /area/medical/medbay3) "cWe" = ( -/obj/structure/disposalpipe/trunk{ - dir = 1 - }, -/obj/machinery/disposal, /obj/effect/decal/warning_stripes/yellow/hollow, +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralcorner" @@ -71811,10 +69027,7 @@ /area/crew_quarters/fitness) "cWi" = ( /obj/structure/chair/stool, -/turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "escape" - }, +/turf/simulated/floor/plasteel, /area/crew_quarters/fitness) "cWj" = ( /obj/machinery/vending/coffee, @@ -71824,18 +69037,21 @@ }, /area/medical/medbay3) "cWk" = ( -/obj/structure/table, -/obj/item/bikehorn/rubberducky, -/obj/effect/decal/warning_stripes/west, -/turf/simulated/floor/plasteel, +/obj/structure/lattice, +/turf/simulated/wall/r_wall, /area/maintenance/port) "cWl" = ( /obj/effect/decal/warning_stripes/east, +/obj/machinery/shieldgen, /turf/simulated/floor/plasteel, /area/maintenance/port) "cWm" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/decal/warning_stripes/yellow, +/obj/machinery/portable_atmospherics/canister/air, +/obj/machinery/atmospherics/unary/portables_connector{ + layer = 2 + }, /turf/simulated/floor/plasteel, /area/maintenance/port) "cWn" = ( @@ -71914,8 +69130,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -71928,30 +69143,11 @@ icon_state = "neutral" }, /area/maintenance/port) -"cWu" = ( -/obj/machinery/camera{ - c_tag = "Research Break Room"; - dir = 8; - network = list("Research","SS13","Security") - }, -/obj/machinery/light{ - dir = 4 - }, -/obj/machinery/alarm{ - dir = 8; - pixel_x = 24 - }, -/turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "whitepurple" - }, -/area/medical/research) "cWv" = ( /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -71977,8 +69173,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -71996,8 +69191,8 @@ }, /area/toxins/xenobiology) "cWz" = ( -/obj/machinery/hologram/holopad, /obj/effect/decal/warning_stripes/yellow/hollow, +/obj/machinery/hologram/holopad, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralfull" @@ -72013,8 +69208,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/effect/decal/warning_stripes/west, /turf/simulated/floor/plasteel{ @@ -72031,12 +69225,12 @@ }, /area/toxins/xenobiology) "cWD" = ( -/obj/structure/disposalpipe/segment, /obj/effect/spawner/window/reinforced, /obj/structure/cable{ d2 = 4; icon_state = "0-4" }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plating, /area/toxins/xenobiology) "cWE" = ( @@ -72112,10 +69306,12 @@ }, /area/toxins/xenobiology) "cWH" = ( -/obj/structure/disposalpipe/segment, -/obj/effect/decal/warning_stripes/east, +/obj/effect/decal/warning_stripes/north, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel, -/area/medical/research) +/area/hallway/secondary/exit) "cWI" = ( /turf/simulated/floor/plasteel{ dir = 8; @@ -72126,8 +69322,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/cable{ d1 = 1; @@ -72144,20 +69339,16 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /turf/simulated/floor/plasteel{ icon_state = "white" }, /area/toxins/xenobiology) "cWL" = ( -/obj/structure/table, /obj/machinery/status_display{ pixel_y = -32 }, -/obj/item/gps, -/obj/item/flash, /obj/machinery/camera{ c_tag = "Research Lobby"; dir = 1; @@ -72180,37 +69371,30 @@ /obj/item/stock_parts/matter_bin, /obj/item/stock_parts/micro_laser, /obj/effect/decal/warning_stripes/east, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "whitepurplecorner" }, /area/toxins/lab) "cWN" = ( -/obj/structure/chair/comfy/purp{ - dir = 1 +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 }, /turf/simulated/floor/plasteel{ - dir = 10; - icon_state = "whitepurple" + icon_state = "white" }, -/area/medical/research) -"cWO" = ( -/obj/machinery/light, -/turf/simulated/floor/plasteel{ - icon_state = "whitepurple" - }, -/area/medical/research) +/area/toxins/misc_lab) "cWP" = ( -/obj/structure/table/wood, -/obj/machinery/kitchen_machine/microwave{ - pixel_x = -3; - pixel_y = 6 +/obj/machinery/light{ + dir = 4 }, -/turf/simulated/floor/plasteel{ - dir = 6; - icon_state = "whitepurple" +/obj/structure/reagent_dispensers/fueltank/chem{ + pixel_x = 32 }, -/area/medical/research) +/obj/machinery/chem_heater, +/turf/simulated/floor/engine, +/area/toxins/misc_lab) "cWQ" = ( /obj/machinery/r_n_d/destructive_analyzer, /obj/effect/decal/warning_stripes/northwest, @@ -72293,26 +69477,25 @@ }, /area/toxins/xenobiology) "cXb" = ( -/obj/structure/closet/emcloset, /obj/item/radio/intercom{ dir = 1; name = "Station Intercom (General)"; pixel_y = -29 }, /obj/effect/decal/warning_stripes/yellow/hollow, +/obj/structure/closet/emcloset, /turf/simulated/floor/plasteel{ icon_state = "white" }, /area/medical/research) "cXc" = ( -/obj/structure/disposalpipe/segment, /obj/effect/decal/warning_stripes/southwest, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel, /area/medical/research) "cXd" = ( -/obj/structure/disposalpipe/segment, /obj/machinery/camera{ c_tag = "Central Hallway South 1"; dir = 8 @@ -72344,14 +69527,15 @@ /area/medical/chemistry) "cXh" = ( /obj/effect/decal/warning_stripes/south, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel, /area/medical/chemistry) "cXi" = ( +/obj/effect/decal/warning_stripes/southeast, /obj/structure/disposalpipe/trunk{ dir = 1 }, /obj/machinery/disposal, -/obj/effect/decal/warning_stripes/southeast, /turf/simulated/floor/plasteel, /area/medical/chemistry) "cXj" = ( @@ -72368,8 +69552,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -72395,11 +69578,13 @@ }, /area/medical/medbay3) "cXm" = ( -/obj/machinery/computer/crew, /obj/item/radio/intercom{ dir = 8; pixel_x = -28 }, +/obj/machinery/computer/crew{ + dir = 4 + }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "whiteblue" @@ -72460,8 +69645,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/cable{ d1 = 2; @@ -72475,9 +69659,6 @@ }, /area/medical/medbay3) "cXz" = ( -/obj/machinery/hologram/holopad{ - pixel_y = -16 - }, /obj/effect/landmark/start{ name = "Medical Doctor" }, @@ -72492,6 +69673,9 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 9 }, +/obj/machinery/hologram/holopad{ + pixel_y = -16 + }, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -72600,10 +69784,7 @@ "cXP" = ( /obj/structure/table/wood, /obj/item/stack/packageWrap, -/turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "escape" - }, +/turf/simulated/floor/plasteel, /area/crew_quarters/fitness) "cXQ" = ( /obj/structure/table/wood, @@ -72614,16 +69795,31 @@ }, /area/crew_quarters/fitness) "cXR" = ( -/obj/structure/reagent_dispensers/watertank, -/obj/machinery/light/small, -/turf/simulated/floor/plating, +/obj/machinery/embedded_controller/radio/airlock/airlock_controller{ + id_tag = "sw_maint_airlock"; + pixel_y = 25; + tag_airpump = "sw_maint_pump"; + tag_chamber_sensor = "sw_maint_sensor"; + tag_exterior_door = "sw_maint_outer"; + tag_interior_door = "sw_maint_inner" + }, +/obj/machinery/airlock_sensor{ + id_tag = "sw_maint_sensor"; + pixel_y = 33 + }, +/obj/effect/decal/warning_stripes/yellow, +/obj/machinery/atmospherics/unary/vent_pump/high_volume{ + dir = 4; + frequency = 1379; + id_tag = "sw_maint_pump" + }, +/turf/simulated/floor/plasteel, /area/maintenance/port) "cXS" = ( /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/effect/decal/warning_stripes/yellow, /obj/machinery/atmospherics/pipe/manifold/hidden/supply, @@ -72635,6 +69831,9 @@ /area/maintenance/port) "cXT" = ( /obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 9 + }, /turf/simulated/floor/plasteel, /area/maintenance/port) "cXU" = ( @@ -72664,8 +69863,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, @@ -72674,8 +69872,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /turf/simulated/floor/plasteel{ icon_state = "neutral" @@ -72685,8 +69882,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /turf/simulated/floor/plating, /area/maintenance/port) @@ -72694,8 +69890,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/cable{ d1 = 1; @@ -72714,10 +69909,6 @@ }, /area/maintenance/port) "cYh" = ( -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" - }, /obj/structure/closet/wardrobe/yellow, /turf/simulated/floor/plasteel{ icon_state = "neutralcorner" @@ -72739,9 +69930,11 @@ /area/medical/research) "cYk" = ( /obj/structure/disposalpipe/segment, -/obj/effect/decal/warning_stripes/southeast, -/turf/simulated/floor/plasteel, -/area/medical/research) +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "neutralfull" + }, +/area/hallway/secondary/exit) "cYl" = ( /obj/structure/closet/l3closet/scientist, /obj/effect/decal/warning_stripes/yellow/hollow, @@ -72762,25 +69955,28 @@ /obj/item/stock_parts/manipulator, /obj/item/stock_parts/manipulator, /obj/effect/decal/warning_stripes/east, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "whitepurplecorner" }, /area/toxins/lab) "cYn" = ( -/obj/machinery/computer/rdconsole/core, /obj/effect/decal/warning_stripes/southwest, +/obj/machinery/computer/rdconsole/core{ + dir = 4 + }, /turf/simulated/floor/plasteel, /area/toxins/lab) "cYo" = ( /obj/structure/extinguisher_cabinet{ - pixel_x = 28 + pixel_y = -32 }, +/obj/item/twohanded/required/kirbyplants, /turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "whitepurplecorner" + icon_state = "white" }, -/area/medical/research) +/area/toxins/misc_lab) "cYq" = ( /obj/effect/decal/warning_stripes/south, /turf/simulated/floor/plasteel, @@ -72791,47 +69987,6 @@ /obj/effect/decal/warning_stripes/southeast, /turf/simulated/floor/plasteel, /area/toxins/lab) -"cYs" = ( -/obj/machinery/door/firedoor, -/obj/effect/decal/warning_stripes/south, -/obj/effect/decal/warning_stripes/north, -/turf/simulated/floor/plasteel{ - dir = 1; - icon_state = "whitepurplecorner" - }, -/area/medical/research) -"cYt" = ( -/obj/machinery/door/firedoor, -/obj/effect/decal/warning_stripes/south, -/obj/effect/decal/warning_stripes/north, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plasteel{ - icon_state = "white" - }, -/area/medical/research) -"cYu" = ( -/obj/machinery/door/firedoor, -/obj/effect/decal/warning_stripes/south, -/obj/effect/decal/warning_stripes/north, -/turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "whitepurplecorner" - }, -/area/medical/research) -"cYv" = ( -/obj/structure/table, -/obj/item/storage/box/bodybags{ - pixel_x = 5; - pixel_y = 5 - }, -/obj/item/storage/box/gloves, -/obj/effect/decal/warning_stripes/yellow, -/turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "whitepurplefull" - }, -/area/medical/research) "cYy" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel{ @@ -72839,26 +69994,13 @@ }, /area/toxins/lab) "cYz" = ( -/obj/structure/table, -/obj/item/crowbar, -/obj/item/wrench, -/obj/item/clothing/mask/gas, -/obj/effect/decal/warning_stripes/yellow, -/turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "whitepurplefull" - }, -/area/medical/research) +/obj/effect/spawner/window/reinforced, +/turf/simulated/floor/plating, +/area/toxins/misc_lab) "cYA" = ( -/obj/item/twohanded/required/kirbyplants, -/obj/effect/decal/warning_stripes/yellow, -/turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "whitepurplefull" - }, -/area/medical/research) +/turf/simulated/wall, +/area/toxins/misc_lab) "cYB" = ( -/obj/structure/disposalpipe/segment, /obj/machinery/door/firedoor, /obj/machinery/door/airlock/research{ name = "Research Division Access"; @@ -72867,10 +70009,10 @@ /obj/effect/decal/warning_stripes/north, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel, /area/medical/research) "cYC" = ( -/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ icon_state = "orangecorner" }, @@ -72902,6 +70044,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -72958,8 +70101,14 @@ }, /area/medical/medbay) "cYM" = ( -/obj/item/twohanded/required/kirbyplants, +/obj/structure/table, /obj/machinery/light/small, +/obj/item/storage/box/masks, +/obj/item/storage/box/gloves{ + pixel_x = 5; + pixel_y = 5 + }, +/obj/item/reagent_containers/spray/cleaner, /turf/simulated/floor/plasteel{ icon_state = "whitebluecorner" }, @@ -72973,9 +70122,14 @@ }, /area/medical/morgue) "cYO" = ( -/obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -73013,8 +70167,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /turf/simulated/floor/plasteel{ icon_state = "white" @@ -73034,6 +70187,11 @@ /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 4 }, +/obj/item/storage/box/masks, +/obj/item/storage/box/gloves{ + pixel_x = 5; + pixel_y = 5 + }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralcorner" @@ -73097,12 +70255,10 @@ }, /area/maintenance/starboard) "cZd" = ( -/obj/structure/disposalpipe/segment, /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/sign/examroom{ @@ -73175,8 +70331,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/door/airlock/maintenance{ name = "Gambling Den" @@ -73222,7 +70377,6 @@ /turf/simulated/floor/plasteel, /area/maintenance/electrical) "cZr" = ( -/obj/structure/disposalpipe/segment, /obj/machinery/door/firedoor, /obj/machinery/door/airlock/research{ name = "Research Division Access"; @@ -73248,6 +70402,7 @@ /obj/item/stack/sheet/glass, /obj/item/stack/sheet/glass, /obj/effect/decal/warning_stripes/southeast, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "whitepurple" @@ -73256,15 +70411,6 @@ "cZt" = ( /turf/simulated/wall, /area/medical/research) -"cZu" = ( -/obj/machinery/door/firedoor, -/obj/effect/decal/warning_stripes/west, -/obj/effect/decal/warning_stripes/east, -/turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "whitepurplecorner" - }, -/area/medical/research) "cZv" = ( /obj/structure/table/reinforced, /obj/item/folder, @@ -73291,18 +70437,8 @@ /turf/simulated/wall, /area/medical/research) "cZy" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/obj/effect/decal/warning_stripes/west, -/obj/effect/decal/warning_stripes/east, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -73311,8 +70447,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /turf/simulated/floor/plasteel{ icon_state = "white" @@ -73322,13 +70457,12 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/hologram/holopad{ pixel_x = -16 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -73407,8 +70541,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 9 @@ -73416,6 +70549,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 5 }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -73452,6 +70586,7 @@ "cZM" = ( /obj/machinery/door/firedoor, /obj/effect/decal/warning_stripes/yellow, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "whitebluecorner" @@ -73470,8 +70605,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /turf/simulated/floor/plasteel{ icon_state = "whiteblue" @@ -73483,7 +70617,6 @@ }, /area/medical/medbay3) "cZR" = ( -/obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 }, @@ -73507,18 +70640,15 @@ }, /area/medical/medbay3) "cZT" = ( -/obj/structure/disposalpipe/segment, /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 8; @@ -73539,9 +70669,9 @@ }, /area/medical/medbay3) "cZV" = ( -/obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ icon_state = "neutral" }, @@ -73664,8 +70794,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /turf/simulated/floor/plating, /area/maintenance/gambling_den) @@ -73688,8 +70817,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -73705,8 +70833,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -73723,8 +70850,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -73738,8 +70864,7 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 10 @@ -73797,8 +70922,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -73807,6 +70931,9 @@ dir = 1; initialize_directions = 11 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralfull" @@ -73836,12 +70963,11 @@ }, /area/medical/research) "daB" = ( -/obj/structure/sign/poster/official/nanotrasen_logo{ - pixel_x = 32; - pixel_y = 32 - }, +/obj/machinery/door/firedoor, +/obj/effect/decal/warning_stripes/west, +/obj/effect/decal/warning_stripes/east, /turf/simulated/floor/plasteel{ - dir = 4; + dir = 1; icon_state = "whitepurplecorner" }, /area/medical/research) @@ -73870,11 +70996,11 @@ /turf/simulated/wall/rust, /area/toxins/xenobiology) "daE" = ( -/obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ - dir = 4; + dir = 1; icon_state = "whitepurplecorner" }, /area/medical/research) @@ -73884,8 +71010,8 @@ on = 1 }, /turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "whitepurplecorner" + dir = 1; + icon_state = "whitepurple" }, /area/medical/research) "daG" = ( @@ -73908,11 +71034,15 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ icon_state = "white" }, /area/toxins/lab) "daI" = ( +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "whitepurplecorner" @@ -73935,8 +71065,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/table, /obj/item/disk/tech_disk{ @@ -73968,9 +71097,6 @@ }, /area/hallway/primary/aft) "daO" = ( -/obj/structure/disposalpipe/junction{ - dir = 1 - }, /obj/structure/sign/chemistry{ pixel_x = 32; pixel_y = 32 @@ -73980,9 +71106,6 @@ }, /area/hallway/primary/aft) "daP" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/structure/table/reinforced, /obj/item/paper_bin, /turf/simulated/floor/plasteel{ @@ -73990,17 +71113,17 @@ }, /area/hallway/primary/aft) "daQ" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" }, -/obj/effect/spawner/window/reinforced, -/obj/machinery/door/poddoor/shutters/preopen{ +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plasteel{ dir = 8; - id_tag = "chemdesk2"; - name = "Chemistry Desk Shutters" + icon_state = "neutralfull" }, -/turf/simulated/floor/plating, -/area/medical/chemistry) +/area/hallway/secondary/exit) "daR" = ( /obj/item/crowbar, /obj/effect/decal/cleanable/dirt, @@ -74043,8 +71166,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /turf/simulated/floor/plasteel{ icon_state = "white" @@ -74064,11 +71186,11 @@ /obj/machinery/door/window/westleft{ dir = 4; name = "Chemistry Desk"; - req_access_txt = "5; 33" + req_one_access_txt = "5;33" }, /obj/machinery/door/window/westleft{ name = "Chemistry Desk"; - req_access_txt = "5; 33" + req_access_txt = "33" }, /turf/simulated/floor/plasteel{ icon_state = "white" @@ -74100,9 +71222,14 @@ }, /area/medical/cmo) "dbb" = ( -/obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ icon_state = "whitebluefull" }, @@ -74117,9 +71244,6 @@ }, /area/maintenance/starboardsolar) "dbd" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/machinery/chem_dispenser, /obj/effect/decal/warning_stripes/north, /turf/simulated/floor/plasteel, @@ -74142,6 +71266,7 @@ }, /area/medical/medbay) "dbj" = ( +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ icon_state = "whitepurple" }, @@ -74150,8 +71275,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/door/airlock/maintenance, /turf/simulated/floor/plasteel, @@ -74187,12 +71311,10 @@ /turf/simulated/floor/plating, /area/maintenance/apmaint) "dbq" = ( -/obj/structure/disposalpipe/segment, /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/sign/greencross{ @@ -74217,8 +71339,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/door/firedoor, /obj/effect/decal/warning_stripes/yellow, @@ -74266,18 +71387,17 @@ "dbA" = ( /obj/item/hemostat, /obj/effect/decal/cleanable/dirt, +/obj/structure/table/tray, /obj/machinery/newscaster{ pixel_y = -32 }, -/obj/structure/table/tray, /turf/simulated/floor/plating, /area/medical/surgery) "dbB" = ( /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -74292,12 +71412,12 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plating, /area/maintenance/apmaint) "dbD" = ( @@ -74309,8 +71429,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /turf/simulated/floor/plating, /area/maintenance/gambling_den) @@ -74318,15 +71437,13 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /turf/simulated/floor/plasteel{ icon_state = "dark" }, /area/maintenance/gambling_den) "dbF" = ( -/obj/structure/disposalpipe/segment, /obj/machinery/door/firedoor, /obj/machinery/door/airlock/medical/glass{ id_tag = null; @@ -74334,6 +71451,7 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -74349,8 +71467,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 9 @@ -74366,11 +71483,11 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel, /area/maintenance/apmaint) "dbJ" = ( @@ -74396,6 +71513,7 @@ /obj/machinery/light{ dir = 8 }, +/obj/structure/reagent_dispensers/fueltank, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "whitepurple" @@ -74422,27 +71540,26 @@ }, /area/medical/research) "dbR" = ( -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ - icon_state = "white" + dir = 8; + icon_state = "neutralfull" }, -/area/medical/research) +/area/hallway/secondary/exit) "dbS" = ( -/obj/structure/disposalpipe/segment{ +/obj/item/radio/beacon, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/item/radio/beacon, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -74467,41 +71584,37 @@ }, /area/toxins/lab) "dbV" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, +/obj/item/twohanded/required/kirbyplants, +/obj/effect/decal/warning_stripes/yellow, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ - icon_state = "white" - }, -/area/medical/research) -"dbW" = ( -/obj/structure/disposalpipe/segment{ dir = 8; - icon_state = "pipe-c" + icon_state = "neutralfull" }, +/area/hallway/secondary/exit) +"dbW" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/supply, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/structure/disposalpipe/sortjunction{ + dir = 2; + icon_state = "pipe-j2s"; + name = "Research Junction"; + sortType = 12 + }, /turf/simulated/floor/plasteel{ icon_state = "white" }, /area/medical/research) "dbX" = ( -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -74513,6 +71626,9 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "whitepurple" @@ -74538,6 +71654,10 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "whitepurplecorner" @@ -74547,8 +71667,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/effect/landmark/start{ name = "Scientist" @@ -74596,11 +71715,11 @@ }, /area/hallway/primary/aft) "dcg" = ( -/obj/structure/disposalpipe/trunk{ - dir = 8 - }, -/obj/machinery/disposal, /obj/effect/decal/warning_stripes/northeast, +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, /turf/simulated/floor/plasteel, /area/medical/chemistry) "dch" = ( @@ -74664,8 +71783,7 @@ /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -74682,8 +71800,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 1 @@ -74697,8 +71814,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/manifold/hidden/supply, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, @@ -74707,24 +71823,29 @@ }, /area/medical/medbay) "dcr" = ( -/obj/structure/disposalpipe/segment, /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /obj/effect/landmark{ name = "lightsout" }, /obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, /obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/disposalpipe/junction{ + dir = 1 + }, /turf/simulated/floor/plasteel{ icon_state = "whitebluefull" }, @@ -74737,8 +71858,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -74746,6 +71866,9 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /obj/machinery/hologram/holopad, /turf/simulated/floor/plasteel{ dir = 1; @@ -74756,14 +71879,12 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 1; @@ -74772,6 +71893,9 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 1 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ icon_state = "whitebluefull" }, @@ -74780,8 +71904,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/cable{ d1 = 1; @@ -74794,6 +71917,9 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -74802,43 +71928,40 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 1 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ icon_state = "white" }, /area/medical/medbay) "dcy" = ( -/obj/structure/disposalpipe/junction{ - dir = 4; - icon_state = "pipe-y" - }, /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/manifold/hidden/supply, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/structure/disposalpipe/junction{ + dir = 8; + icon_state = "pipe-y" + }, /turf/simulated/floor/plasteel{ icon_state = "white" }, /area/medical/medbay) "dcz" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -74858,14 +71981,10 @@ }, /area/maintenance/apmaint) "dcB" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/effect/decal/warning_stripes/yellow, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -74877,10 +71996,6 @@ /turf/simulated/floor/plasteel, /area/maintenance/starboard) "dcC" = ( -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, /obj/structure/cable{ d1 = 1; d2 = 8; @@ -74889,8 +72004,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 4; @@ -74907,14 +72021,13 @@ }, /area/maintenance/starboard) "dcD" = ( -/obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/door/airlock/medical/glass{ - id_tag = ""; name = "Staff Room"; req_access_txt = "5" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel, /area/medical/medbay3) "dcE" = ( @@ -74926,8 +72039,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -74943,8 +72055,7 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -75006,8 +72117,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, @@ -75020,12 +72130,9 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" - }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" + icon_state = "1-2" }, +/turf/simulated/floor/wood, /area/maintenance/gambling_den) "dcQ" = ( /turf/simulated/floor/plasteel{ @@ -75054,24 +72161,18 @@ /area/hallway/primary/aft) "dcT" = ( /obj/structure/chair/wood, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/maintenance/gambling_den) "dcU" = ( /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/table/wood/poker, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/maintenance/gambling_den) "dcV" = ( -/obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -75138,21 +72239,11 @@ }, /turf/simulated/floor/plasteel, /area/hallway/primary/aft) -"dde" = ( -/obj/machinery/door/firedoor, -/obj/effect/decal/warning_stripes/west, -/obj/effect/decal/warning_stripes/east, -/turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "whitepurplecorner" - }, -/area/medical/research) "ddf" = ( /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -75186,9 +72277,8 @@ /area/toxins/lab) "ddk" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/public/glass, -/obj/structure/disposalpipe/segment{ - dir = 4 +/obj/machinery/door/airlock/public/glass{ + name = "Public Access" }, /turf/simulated/floor/plasteel{ icon_state = "neutralcorner" @@ -75218,11 +72308,11 @@ /turf/simulated/floor/plasteel, /area/hallway/primary/central) "ddn" = ( +/obj/effect/decal/warning_stripes/yellow, /obj/structure/disposalpipe/trunk{ dir = 1 }, /obj/machinery/disposal, -/obj/effect/decal/warning_stripes/yellow, /turf/simulated/floor/plasteel, /area/hallway/primary/central) "ddo" = ( @@ -75282,8 +72372,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -75310,18 +72399,22 @@ }, /area/maintenance/apmaint) "ddw" = ( -/obj/structure/disposalpipe/segment, +/obj/item/twohanded/required/kirbyplants, +/obj/effect/decal/warning_stripes/yellow, +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, /turf/simulated/floor/plasteel{ dir = 8; - icon_state = "whitepurplecorner" + icon_state = "neutralfull" }, -/area/medical/research) +/area/hallway/secondary/exit) "ddx" = ( /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -75334,12 +72427,9 @@ /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 4 }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/library/abandoned) "ddA" = ( -/obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plasteel{ @@ -75350,9 +72440,7 @@ /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 8 }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/library/abandoned) "ddC" = ( /obj/effect/spawner/window/reinforced, @@ -75402,8 +72490,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 1 @@ -75458,18 +72545,13 @@ }, /area/hallway/primary/aft) "ddL" = ( -/obj/machinery/smartfridge/medbay, +/obj/machinery/smartfridge/secure/medbay, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/machinery/door/window/westleft{ - dir = 4; - name = "Chemistry Desk"; - req_access_txt = "5; 33" - }, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -75478,8 +72560,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/door/firedoor, /obj/effect/decal/warning_stripes/yellow, @@ -75489,6 +72570,9 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -75535,8 +72619,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /turf/simulated/floor/plasteel{ icon_state = "whiteyellow" @@ -75546,8 +72629,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/light_switch{ pixel_x = 4; @@ -75613,8 +72695,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -75625,15 +72706,14 @@ }, /area/maintenance/apmaint) "ddX" = ( -/obj/structure/disposalpipe/segment, /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ icon_state = "whitebluefull" }, @@ -75642,8 +72722,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 8; @@ -75675,8 +72754,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /turf/simulated/floor/plasteel{ dir = 4; @@ -75684,14 +72762,10 @@ }, /area/medical/medbay) "dec" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/door/airlock/maintenance{ name = "Medbay Maintenance"; @@ -75709,8 +72783,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -75719,7 +72792,9 @@ }, /area/medical/medbay) "deh" = ( -/obj/structure/disposalpipe/segment, +/obj/structure/disposalpipe/junction{ + dir = 1 + }, /turf/simulated/floor/plasteel{ icon_state = "whitebluecorner" }, @@ -75755,8 +72830,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -75791,8 +72865,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/shower{ dir = 4 @@ -75860,16 +72933,13 @@ /obj/effect/decal/cleanable/cobweb, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/library/abandoned) "deA" = ( /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /obj/structure/cable{ d2 = 2; @@ -75897,8 +72967,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /turf/simulated/floor/plasteel{ icon_state = "dark" @@ -75908,8 +72977,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/cable{ d2 = 4; @@ -75929,8 +72997,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/cable{ d2 = 4; @@ -75947,15 +73014,13 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/cable, /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/structure/grille, /obj/structure/window/reinforced{ @@ -75971,8 +73036,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -76045,8 +73109,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -76061,8 +73124,7 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -76081,10 +73143,10 @@ /obj/item/wrench, /obj/item/crowbar, /obj/item/clothing/mask/gas, +/obj/effect/decal/warning_stripes/yellow/hollow, /obj/machinery/newscaster{ pixel_x = -32 }, -/obj/effect/decal/warning_stripes/yellow/hollow, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "whitepurplecorner" @@ -76123,7 +73185,12 @@ }, /area/library/abandoned) "deV" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + tag = "" + }, /turf/simulated/floor/plasteel{ icon_state = "whitegreen" }, @@ -76132,8 +73199,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ @@ -76169,8 +73235,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ @@ -76246,8 +73311,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/cable{ d2 = 4; @@ -76265,8 +73329,7 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/structure/cable{ d2 = 2; @@ -76320,8 +73383,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/door/firedoor, /obj/machinery/door/airlock/research{ @@ -76333,7 +73395,6 @@ }, /area/assembly/chargebay) "dft" = ( -/obj/structure/disposalpipe/segment, /obj/machinery/door/firedoor, /obj/effect/decal/warning_stripes/yellow, /turf/simulated/floor/plasteel{ @@ -76351,8 +73412,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/door/firedoor, /obj/machinery/door/airlock/medical/glass{ @@ -76423,22 +73483,19 @@ }, /area/medical/medbay) "dfF" = ( -/obj/structure/disposalpipe/segment, /obj/machinery/door/firedoor, /obj/machinery/door/airlock/medical/glass{ id_tag = null; name = "Patient Room"; req_access_txt = "5" }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "cmo" }, /area/medical/medbay) "dfG" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -76449,8 +73506,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -76465,8 +73521,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -76495,8 +73550,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/cable{ d2 = 2; @@ -76518,8 +73572,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/cable, /obj/structure/grille, @@ -76561,8 +73614,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ @@ -76589,8 +73641,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -76620,8 +73671,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /turf/simulated/floor/plasteel{ icon_state = "white" @@ -76695,8 +73745,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /turf/simulated/floor/plasteel{ dir = 8; @@ -76713,8 +73762,7 @@ /obj/structure/cable{ d1 = 1; d2 = 4; - icon_state = "1-4"; - tag = "" + icon_state = "1-4" }, /turf/simulated/floor/plasteel{ icon_state = "white" @@ -76740,18 +73788,15 @@ /turf/simulated/floor/plasteel, /area/toxins/misc_lab) "dgq" = ( -/obj/structure/disposalpipe/segment, /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/effect/decal/warning_stripes/north, /turf/simulated/floor/plasteel, @@ -76760,8 +73805,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/door/airlock/maintenance{ name = "Xenobiology Maintenance"; @@ -76788,8 +73832,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/effect/decal/warning_stripes/west, /turf/simulated/floor/plasteel, @@ -76803,7 +73846,6 @@ }, /area/medical/research) "dgw" = ( -/obj/structure/disposalpipe/segment, /obj/machinery/door/firedoor, /obj/machinery/firealarm{ dir = 4; @@ -76823,17 +73865,16 @@ }, /area/medical/medbay) "dgy" = ( -/obj/structure/disposalpipe/segment, /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/door/firedoor, /obj/effect/decal/warning_stripes/yellow, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -76849,8 +73890,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/door/firedoor, /obj/effect/decal/warning_stripes/yellow, @@ -76861,7 +73901,6 @@ }, /area/medical/medbay) "dgC" = ( -/obj/structure/disposalpipe/segment, /obj/machinery/light{ dir = 8 }, @@ -76940,11 +73979,11 @@ dir = 1; on = 1 }, -/obj/machinery/computer/cloning, /obj/structure/sign/nosmoking_2{ pixel_y = 32 }, /obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/machinery/computer/cloning, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "whitepurplecorner" @@ -76968,6 +74007,8 @@ }, /area/medical/genetics_cloning) "dgM" = ( +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "whitebluecorner" @@ -76982,6 +74023,7 @@ /obj/item/storage/box/bodybags, /obj/item/pen, /obj/machinery/atmospherics/unary/vent_pump/on, +/obj/item/reagent_containers/spray/cleaner, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "whitepurplecorner" @@ -77012,15 +74054,14 @@ /turf/simulated/floor/plating, /area/maintenance/apmaint) "dgQ" = ( -/obj/structure/disposalpipe/segment, /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -77068,6 +74109,7 @@ }, /obj/item/screwdriver, /obj/effect/decal/warning_stripes/north, +/obj/item/reagent_containers/spray/cleaner, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -77085,8 +74127,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -77146,8 +74187,7 @@ /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /turf/simulated/floor/plating, /area/maintenance/starboard) @@ -77265,9 +74305,7 @@ /obj/structure/chair/wood{ dir = 4 }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/maintenance/gambling_den) "dhx" = ( /obj/effect/landmark{ @@ -77294,11 +74332,8 @@ /obj/structure/girder, /obj/structure/grille, /obj/machinery/door/poddoor{ - density = 0; - icon_state = "pdoor0"; id_tag = "maintrobotics"; - name = "Decrepit Blast Door"; - opacity = 0 + name = "Decrepit Blast Door" }, /obj/effect/decal/warning_stripes/east, /obj/effect/decal/warning_stripes/west, @@ -77308,8 +74343,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/door/airlock/maintenance{ name = "Experimentor Maintenance"; @@ -77336,8 +74370,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/cable{ d1 = 1; @@ -77365,8 +74398,7 @@ /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /obj/effect/decal/warning_stripes/south, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -77385,8 +74417,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/cable{ d1 = 1; @@ -77411,8 +74442,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/effect/decal/warning_stripes/south, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -77431,28 +74461,23 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1; - initialize_directions = 11 +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 }, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, /turf/simulated/floor/plasteel{ icon_state = "white" }, /area/toxins/explab) "dhL" = ( -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -77460,19 +74485,18 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/structure/table/reinforced, +/obj/effect/decal/warning_stripes/northwest, +/obj/item/book/manual/experimentor, /turf/simulated/floor/plasteel{ icon_state = "white" }, /area/toxins/explab) "dhM" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -77480,6 +74504,11 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/structure/chair/office/light, +/obj/effect/landmark/start{ + name = "Scientist" + }, +/obj/effect/decal/warning_stripes/north, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -77507,36 +74536,34 @@ }, /area/crew_quarters/hor) "dhQ" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, /turf/simulated/floor/plasteel{ icon_state = "white" }, /area/toxins/explab) "dhR" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/structure/cable{ d1 = 1; d2 = 8; icon_state = "1-8" }, -/obj/structure/table/reinforced, -/obj/item/taperecorder, -/obj/item/stack/sheet/mineral/plasma, -/obj/effect/decal/warning_stripes/northwest, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/structure/table/reinforced, +/obj/item/hand_labeler, +/obj/item/stack/packageWrap, +/obj/effect/decal/warning_stripes/northeast, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -77564,34 +74591,18 @@ }, /area/toxins/xenobiology) "dhT" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/hologram/holopad, -/obj/structure/chair/office/light, -/obj/effect/landmark/start{ - name = "Scientist" - }, -/obj/effect/decal/warning_stripes/north, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/machinery/hologram/holopad, /turf/simulated/floor/plasteel{ icon_state = "white" }, /area/toxins/explab) "dhU" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/table/reinforced, -/obj/item/clipboard, -/obj/item/folder/white, -/obj/item/pen, -/obj/effect/decal/warning_stripes/northeast, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, @@ -77603,9 +74614,6 @@ }, /area/toxins/explab) "dhV" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/effect/decal/warning_stripes/yellow, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -77613,14 +74621,14 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ icon_state = "whitepurplecorner" }, /area/toxins/explab) "dhW" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/effect/decal/warning_stripes/yellow/hollow, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -77628,6 +74636,9 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -77645,9 +74656,6 @@ }, /area/medical/research) "dhY" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/effect/decal/warning_stripes/west, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -77655,16 +74663,15 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/turf/simulated/floor/plasteel, -/area/medical/research) -"dhZ" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, +/turf/simulated/floor/plasteel, +/area/medical/research) +"dhZ" = ( /obj/effect/landmark{ name = "lightsout" }, -/obj/machinery/hologram/holopad, /obj/effect/decal/warning_stripes/yellow/hollow, /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 4; @@ -77673,43 +74680,45 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/hologram/holopad, /turf/simulated/floor/plasteel, /area/medical/research) "dia" = ( +/obj/effect/decal/cleanable/dirt, /obj/structure/disposalpipe/segment{ dir = 2; icon_state = "pipe-c" }, -/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel, /area/toxins/misc_lab) "dib" = ( +/obj/effect/decal/warning_stripes/east, /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/effect/decal/warning_stripes/east, /turf/simulated/floor/plasteel, /area/medical/research) "dic" = ( +/obj/effect/decal/warning_stripes/west, /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/effect/decal/warning_stripes/west, /turf/simulated/floor/plasteel, /area/toxins/misc_lab) "did" = ( -/obj/structure/disposalpipe/junction{ - dir = 4; - icon_state = "pipe-j2" - }, /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/effect/decal/cleanable/dirt, /obj/effect/decal/warning_stripes/yellow/hollow, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel, /area/toxins/misc_lab) "die" = ( @@ -77725,8 +74734,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/effect/decal/warning_stripes/southwest, /turf/simulated/floor/plasteel, @@ -77736,8 +74744,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/cable{ d2 = 2; @@ -77759,26 +74766,20 @@ }, /area/medical/research) "dii" = ( -/obj/structure/disposalpipe/sortjunction{ - dir = 1; - name = "Robotics Junction"; - sortType = 13 - }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/plasteel{ - icon_state = "white" - }, -/area/medical/research) -"dij" = ( /obj/structure/disposalpipe/segment{ dir = 2; icon_state = "pipe-c" }, /turf/simulated/floor/plasteel{ - icon_state = "whitepurplecorner" + icon_state = "white" }, /area/medical/research) +"dij" = ( +/obj/structure/grille, +/turf/space, +/area/space/nearstation) "dik" = ( /turf/simulated/floor/plasteel{ dir = 1; @@ -77817,14 +74818,15 @@ /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /obj/effect/decal/warning_stripes/northwest, /turf/simulated/floor/plasteel, /area/assembly/chargebay) "dio" = ( -/obj/machinery/computer/mech_bay_power_console, +/obj/machinery/computer/mech_bay_power_console{ + dir = 8 + }, /turf/simulated/floor/bluegrid, /area/assembly/chargebay) "dip" = ( @@ -77834,8 +74836,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/effect/decal/warning_stripes/north, /turf/simulated/floor/plasteel, @@ -77844,8 +74845,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/cable{ d1 = 1; @@ -77884,7 +74884,6 @@ }, /area/assembly/chargebay) "diu" = ( -/obj/structure/disposalpipe/segment, /obj/machinery/camera{ c_tag = "Central Hallway South 2"; dir = 4 @@ -77909,10 +74908,10 @@ /turf/simulated/floor/plasteel, /area/medical/paramedic) "diy" = ( -/obj/machinery/hologram/holopad, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/machinery/hologram/holopad, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -77921,8 +74920,7 @@ /obj/structure/cable{ d1 = 1; d2 = 4; - icon_state = "1-4"; - tag = "" + icon_state = "1-4" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 6 @@ -77979,6 +74977,9 @@ /area/maintenance/apmaint) "diE" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -77989,6 +74990,9 @@ d2 = 4; icon_state = "1-4" }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "whitepurplecorner" @@ -78005,8 +75009,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/door/firedoor, /obj/machinery/door/airlock/medical/glass{ @@ -78014,27 +75017,31 @@ name = "Medbay Cloning"; req_access_txt = "5" }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "whitepurple" }, /area/medical/genetics_cloning) "diI" = ( -/obj/structure/disposalpipe/segment, /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/junction{ + dir = 1; + icon_state = "pipe-j2" + }, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -78043,8 +75050,10 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 }, /turf/simulated/floor/plasteel{ dir = 1; @@ -78109,8 +75118,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /turf/simulated/floor/plasteel{ dir = 8; @@ -78199,9 +75207,7 @@ /obj/structure/chair/wood{ dir = 8 }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/maintenance/gambling_den) "djb" = ( /obj/structure/table/reinforced, @@ -78216,8 +75222,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/door/airlock/maintenance, /obj/structure/barricade/wooden, @@ -78234,17 +75239,13 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/girder, /obj/structure/grille, /obj/machinery/door/poddoor{ - density = 0; - icon_state = "pdoor0"; id_tag = "maintrobotics"; - name = "Decrepit Blast Door"; - opacity = 0 + name = "Decrepit Blast Door" }, /obj/effect/decal/warning_stripes/east, /obj/effect/decal/warning_stripes/west, @@ -78264,15 +75265,15 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/effect/decal/warning_stripes/yellow, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1; + initialize_directions = 11 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 }, /turf/simulated/floor/plasteel{ dir = 8; @@ -78283,8 +75284,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/effect/decal/warning_stripes/southeast, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -78313,8 +75313,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -78331,8 +75330,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/cable{ d1 = 1; @@ -78358,8 +75356,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/effect/decal/warning_stripes/yellow, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -78373,10 +75370,9 @@ }, /area/medical/research) "djn" = ( -/obj/structure/table, -/obj/item/stack/medical/bruise_pack, -/obj/item/stack/medical/ointment, /obj/effect/decal/warning_stripes/yellow/hollow, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "whitepurplecorner" @@ -78384,8 +75380,12 @@ /area/toxins/explab) "djo" = ( /obj/effect/decal/warning_stripes/yellow, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/door_control{ + id = "experimentor"; + name = "Experimentor Control"; + pixel_x = -6; + pixel_y = -26 + }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "whitepurplecorner" @@ -78407,12 +75407,9 @@ }, /area/crew_quarters/hor) "djs" = ( -/obj/structure/table/reinforced, -/obj/item/clothing/gloves/color/white, -/obj/item/clothing/gloves/color/white, -/obj/item/clothing/glasses/science, -/obj/item/clothing/glasses/science, -/obj/effect/decal/warning_stripes/northwest, +/obj/machinery/computer/rdconsole/experiment{ + dir = 1 + }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "whitepurplecorner" @@ -78420,16 +75417,17 @@ /area/toxins/explab) "djt" = ( /obj/structure/table/reinforced, -/obj/item/book/manual/experimentor, -/obj/item/healthanalyzer, -/obj/effect/decal/warning_stripes/northwestcorner, +/obj/item/clothing/gloves/color/white, +/obj/item/clothing/gloves/color/white, +/obj/item/clothing/glasses/science, +/obj/item/clothing/glasses/science, +/obj/effect/decal/warning_stripes/east, /turf/simulated/floor/plasteel{ - icon_state = "whitepurple" + dir = 8; + icon_state = "whitepurplecorner" }, /area/toxins/explab) "dju" = ( -/obj/machinery/computer/rdconsole/experiment, -/obj/effect/decal/warning_stripes/yellow/hollow, /turf/simulated/floor/plasteel{ icon_state = "whitepurplecorner" }, @@ -78439,20 +75437,20 @@ /turf/simulated/wall, /area/toxins/explab) "djw" = ( -/obj/structure/table/reinforced, -/obj/item/stack/packageWrap, -/obj/item/hand_labeler, -/obj/effect/decal/warning_stripes/northeastcorner, +/obj/machinery/vending/wallmed{ + name = "Emergency NanoMed"; + pixel_y = -32 + }, /turf/simulated/floor/plasteel{ icon_state = "whitepurplecorner" }, /area/toxins/explab) "djx" = ( -/obj/structure/table/reinforced, /obj/machinery/light, -/obj/item/paper_bin, -/obj/item/pen, -/obj/effect/decal/warning_stripes/northeast, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/obj/machinery/disposal, /turf/simulated/floor/plasteel{ icon_state = "whitepurplecorner" }, @@ -78514,33 +75512,30 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /obj/effect/decal/warning_stripes/south, /turf/simulated/floor/plasteel, /area/toxins/misc_lab) "djG" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/cable{ d1 = 1; d2 = 4; icon_state = "1-4"; - tag = "90Curve" + tag = null + }, +/obj/structure/disposalpipe/segment{ + dir = 4 }, /turf/simulated/floor/plasteel{ dir = 1; @@ -78548,20 +75543,15 @@ }, /area/crew_quarters/hor) "djH" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 6 @@ -78569,20 +75559,19 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 6 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "whitepurple" }, /area/crew_quarters/hor) "djI" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -78590,34 +75579,32 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "whitepurplecorner" }, /area/crew_quarters/hor) "djJ" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/effect/decal/warning_stripes/yellow, /obj/structure/disposalpipe/segment{ dir = 1; icon_state = "pipe-c" }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - tag = "" - }, -/obj/effect/decal/warning_stripes/yellow, /turf/simulated/floor/plasteel, /area/toxins/misc_lab) "djK" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/cable{ d1 = 1; @@ -78630,19 +75617,18 @@ req_access = null; req_access_txt = "30" }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ icon_state = "white" }, /area/crew_quarters/hor) "djL" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -78650,21 +75636,19 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "whitepurplecorner" }, /area/medical/research) "djM" = ( -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 4; @@ -78674,6 +75658,11 @@ dir = 4; initialize_directions = 11 }, +/obj/structure/disposalpipe/sortjunction{ + dir = 2; + name = "RD Junction 1"; + sortType = 13 + }, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -78703,8 +75692,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/door/airlock/maintenance{ name = "Paramedic's maintenance"; @@ -78779,6 +75767,10 @@ dir = 1; initialize_directions = 11 }, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -78788,6 +75780,9 @@ dir = 4 }, /obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -78799,6 +75794,9 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ icon_state = "whitebluecorner" }, @@ -78819,24 +75817,31 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "whitebluecorner" }, /area/medical/medbay) "dkg" = ( -/obj/structure/disposalpipe/segment, /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 4; initialize_directions = 11 }, /obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, +/obj/structure/disposalpipe/sortjunction{ + dir = 1; + icon_state = "pipe-j2s"; + name = "Genetics Junction"; + sortType = 23 + }, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -78861,6 +75866,9 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ icon_state = "whiteblue" }, @@ -78946,8 +75954,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/cable, /obj/structure/grille, @@ -78982,12 +75989,12 @@ }, /area/medical/research) "dkx" = ( -/obj/structure/disposalpipe/trunk{ - dir = 1 - }, -/obj/machinery/disposal, /obj/machinery/light, /obj/effect/decal/warning_stripes/yellow/hollow, +/obj/structure/table/reinforced, +/obj/item/taperecorder, +/obj/item/stack/sheet/mineral/plasma, +/obj/effect/decal/warning_stripes/west, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "whitepurplecorner" @@ -79032,36 +76039,35 @@ /turf/simulated/floor/plating, /area/maintenance/apmaint) "dkD" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door_control{ - id = "experimentor"; - name = "Experimentor Control"; - pixel_x = -26 +/obj/machinery/atmospherics/trinary/mixer{ + dir = 1; + name = "air mixer"; + node1_concentration = 0.8; + node2_concentration = 0.2; + on = 1; + target_pressure = 4500 }, -/obj/machinery/door/poddoor/preopen{ - id_tag = "experimentor"; - name = "Experimentor Blast Door" +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "neutralfull" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/engine, -/area/toxins/explab) +/area/atmos) "dkE" = ( /obj/structure/sign/securearea, /turf/simulated/wall/r_wall, /area/toxins/explab) "dkF" = ( -/obj/machinery/status_display, -/turf/simulated/wall/r_wall, -/area/toxins/explab) -"dkH" = ( +/obj/effect/spawner/window/reinforced, /obj/machinery/door/poddoor/preopen{ id_tag = "experimentor"; name = "Experimentor Blast Door" }, -/obj/effect/spawner/window/reinforced, /turf/simulated/floor/plating, /area/toxins/explab) +"dkH" = ( +/obj/machinery/status_display, +/turf/simulated/wall/r_wall, +/area/toxins/mixing) "dkI" = ( /turf/simulated/wall/r_wall, /area/toxins/mixing) @@ -79074,22 +76080,22 @@ /turf/simulated/floor/plating, /area/toxins/mixing) "dkL" = ( -/obj/structure/disposalpipe/junction{ - dir = 4 - }, /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /obj/effect/decal/warning_stripes/yellow, +/obj/structure/disposalpipe/sortjunction{ + dir = 4; + name = "RD Junction 2"; + sortType = 13 + }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "whitepurplecorner" @@ -79103,8 +76109,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /turf/simulated/floor/engine, /area/toxins/misc_lab) @@ -79115,14 +76120,10 @@ /turf/simulated/floor/engine, /area/toxins/misc_lab) "dkQ" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/effect/decal/warning_stripes/yellow, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -79131,16 +76132,19 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "whitepurplecorner" }, /area/crew_quarters/hor) "dkR" = ( -/obj/machinery/hologram/holopad, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/machinery/hologram/holopad, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -79149,8 +76153,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/chair/office/light, /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ @@ -79175,14 +76178,10 @@ }, /area/crew_quarters/hor) "dkU" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/cable{ d1 = 1; @@ -79201,6 +76200,9 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -79218,8 +76220,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 8; @@ -79229,12 +76230,12 @@ dir = 8; initialize_directions = 11 }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ icon_state = "white" }, /area/medical/research) "dkX" = ( -/obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -79284,13 +76285,13 @@ /turf/simulated/floor/plasteel, /area/assembly/chargebay) "dlb" = ( -/obj/machinery/hologram/holopad, /obj/effect/landmark/start{ name = "Roboticist" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/machinery/hologram/holopad, /turf/simulated/floor/plasteel, /area/assembly/chargebay) "dlc" = ( @@ -79306,7 +76307,6 @@ }, /area/medical/medbay) "dle" = ( -/obj/structure/disposalpipe/segment, /obj/machinery/alarm{ dir = 8; pixel_x = 24 @@ -79401,6 +76401,7 @@ "dlq" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -79453,8 +76454,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -79481,7 +76481,6 @@ /turf/simulated/wall, /area/medical/surgery) "dlA" = ( -/obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 6 }, @@ -79489,6 +76488,7 @@ dir = 10; initialize_directions = 10 }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ icon_state = "redbluefull" }, @@ -79520,9 +76520,9 @@ }, /area/hallway/secondary/exit) "dlE" = ( -/obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "whitebluecorner" @@ -79532,8 +76532,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, @@ -79555,8 +76554,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/effect/decal/cleanable/blood, /turf/simulated/floor/plasteel{ @@ -79586,15 +76584,11 @@ /area/maintenance/port) "dlO" = ( /obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/engine, /area/toxins/explab) "dlP" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 }, /turf/simulated/floor/engine, /area/toxins/explab) @@ -79611,13 +76605,19 @@ }, /area/toxins/mixing) "dlS" = ( +/obj/machinery/atmospherics/unary/portables_connector{ + dir = 8 + }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "whitepurplecorner" }, /area/toxins/mixing) "dlT" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8; + initialize_directions = 11 + }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel{ dir = 1; @@ -79625,13 +76625,15 @@ }, /area/toxins/mixing) "dlU" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "whitepurplecorner" }, /area/toxins/mixing) "dlV" = ( -/obj/structure/disposalpipe/segment, /obj/structure/cable, /obj/machinery/power/apc{ dir = 8; @@ -79643,18 +76645,20 @@ /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "whitepurplecorner" }, /area/crew_quarters/hor) "dlW" = ( -/obj/machinery/hologram/holopad, /obj/structure/cable{ d1 = 4; d2 = 8; icon_state = "4-8" }, +/obj/structure/disposalpipe/segment, +/obj/machinery/hologram/holopad, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -79663,31 +76667,27 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/engine, /area/toxins/misc_lab) "dlY" = ( -/obj/machinery/firealarm{ - dir = 8; - pixel_x = -26 +/obj/machinery/atmospherics/binary/pump{ + dir = 8 }, -/obj/structure/closet/bombcloset, -/obj/effect/decal/warning_stripes/southeast, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "whitepurplecorner" }, /area/toxins/mixing) "dlZ" = ( -/obj/structure/closet/bombcloset, +/obj/structure/closet/secure_closet/scientist, /obj/machinery/light_switch{ pixel_x = 26; pixel_y = 26 }, -/obj/effect/decal/warning_stripes/southwest, +/obj/effect/decal/warning_stripes/west, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "whitepurplecorner" @@ -79697,8 +76697,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /turf/simulated/floor/plasteel{ icon_state = "white" @@ -79708,8 +76707,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/cable{ d1 = 1; @@ -79751,7 +76749,6 @@ /turf/simulated/floor/greengrid, /area/assembly/chargebay) "dmh" = ( -/obj/structure/disposalpipe/segment, /obj/item/radio/intercom{ dir = 4; pixel_x = 28 @@ -79886,9 +76883,9 @@ }, /area/medical/surgeryobs) "dmA" = ( -/obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -79914,8 +76911,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ @@ -80103,8 +77099,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ @@ -80113,42 +77108,66 @@ }, /area/maintenance/port) "dnc" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/engine, -/area/toxins/explab) -"dnd" = ( -/mob/living/simple_animal/pet/dog/pug, -/turf/simulated/floor/engine, -/area/toxins/explab) -"dne" = ( -/obj/effect/landmark{ - name = "revenantspawn" - }, -/turf/simulated/floor/engine, -/area/toxins/explab) -"dnf" = ( /obj/machinery/r_n_d/experimentor, /turf/simulated/floor/engine, /area/toxins/explab) +"dnd" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "neutralfull" + }, +/area/security/brig) +"dne" = ( +/obj/structure/cable{ + d2 = 2; + icon_state = "0-2" + }, +/obj/machinery/power/apc{ + dir = 1; + name = "north bump"; + pixel_y = 24 + }, +/turf/simulated/floor/wood, +/area/ntrep) +"dnf" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/floor/wood, +/area/ntrep) "dng" = ( /turf/simulated/floor/engine, /area/toxins/explab) "dnh" = ( -/obj/effect/landmark{ - name = "xeno_spawn"; - pixel_x = -1 +/obj/machinery/atmospherics/pipe/manifold/visible{ + dir = 8 }, /turf/simulated/floor/engine, -/area/toxins/explab) +/area/toxins/mixing) "dni" = ( /obj/effect/decal/warning_stripes/east, /turf/simulated/floor/engine, /area/toxins/misc_lab) "dnj" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4; - initialize_directions = 11 - }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 8; initialize_directions = 11 @@ -80158,17 +77177,16 @@ }, /area/toxins/mixing) "dnk" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/effect/decal/warning_stripes/yellow, /obj/structure/disposalpipe/trunk{ dir = 1 }, /obj/machinery/disposal, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - tag = "" - }, -/obj/effect/decal/warning_stripes/yellow, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "whitepurple" @@ -80194,8 +77212,10 @@ /obj/machinery/ai_status_display{ pixel_x = 32 }, -/obj/machinery/computer/card/minor/rd, /obj/effect/decal/warning_stripes/yellow/hollow, +/obj/machinery/computer/card/minor/rd{ + dir = 8 + }, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "whitepurple" @@ -80205,8 +77225,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/cable{ d1 = 1; @@ -80215,7 +77234,9 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/computer/aifixer, +/obj/machinery/computer/aifixer{ + dir = 4 + }, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -80224,8 +77245,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/chair/office/light{ dir = 1; @@ -80239,15 +77259,15 @@ }, /area/crew_quarters/hor) "dnr" = ( -/obj/machinery/alarm{ - dir = 4; - pixel_x = -24 - }, -/obj/effect/decal/warning_stripes/yellow, -/obj/machinery/atmospherics/unary/vent_pump/on{ +/obj/machinery/atmospherics/pipe/simple/insulated{ dir = 4 }, -/obj/structure/closet/secure_closet/scientist, +/obj/machinery/computer/general_air_control{ + dir = 4; + frequency = 1222; + name = "Bomb Mix Monitor"; + sensors = list("burn_sensor" = "Burn Mix") + }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "whitepurplecorner" @@ -80269,8 +77289,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/effect/decal/warning_stripes/west, /turf/simulated/floor/plasteel, @@ -80286,7 +77305,9 @@ }, /area/assembly/chargebay) "dnA" = ( -/obj/machinery/computer/mech_bay_power_console, +/obj/machinery/computer/mech_bay_power_console{ + dir = 8 + }, /turf/simulated/floor/greengrid, /area/assembly/chargebay) "dnB" = ( @@ -80307,7 +77328,6 @@ }, /area/assembly/chargebay) "dnC" = ( -/obj/structure/disposalpipe/segment, /obj/effect/decal/warning_stripes/west, /turf/simulated/floor/plasteel, /area/hallway/primary/aft) @@ -80315,12 +77335,6 @@ /obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel, /area/hallway/primary/aft) -"dnE" = ( -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plasteel{ - icon_state = "purplecorner" - }, -/area/hallway/primary/aft) "dnF" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/research{ @@ -80338,9 +77352,7 @@ }, /area/assembly/chargebay) "dnG" = ( -/obj/structure/extinguisher_cabinet{ - pixel_y = 30 - }, +/obj/machinery/vending/genedrobe, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "whitepurplecorner" @@ -80403,6 +77415,7 @@ name = "Genetics"; req_access_txt = "9" }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -80412,8 +77425,8 @@ dir = 1; on = 1 }, -/obj/machinery/computer/scan_consolenew, /obj/effect/decal/warning_stripes/southwest, +/obj/machinery/computer/scan_consolenew, /turf/simulated/floor/plasteel, /area/medical/genetics) "dnO" = ( @@ -80507,14 +77520,12 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 8; @@ -80557,8 +77568,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -80592,7 +77602,6 @@ }, /area/medical/surgeryobs) "doi" = ( -/obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 4; initialize_directions = 11 @@ -80605,6 +77614,7 @@ d2 = 8; icon_state = "2-8" }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -80646,8 +77656,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -80770,7 +77779,7 @@ /obj/machinery/light, /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 + dir = 4 }, /turf/simulated/floor/engine, /area/toxins/explab) @@ -80788,14 +77797,16 @@ /area/medical/chemistry) "doD" = ( /obj/machinery/light, +/obj/machinery/atmospherics/pipe/simple/insulated{ + dir = 9 + }, /turf/simulated/floor/engine, -/area/toxins/explab) +/area/toxins/mixing) "doE" = ( /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /turf/simulated/floor/plasteel{ icon_state = "white" @@ -80820,11 +77831,11 @@ pixel_x = 29; pixel_y = 22 }, -/obj/effect/decal/warning_stripes/yellow, /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 8 }, /obj/structure/closet/secure_closet/scientist, +/obj/effect/decal/warning_stripes/west, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "whitepurplecorner" @@ -80852,11 +77863,12 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, -/obj/machinery/computer/mecha, /obj/effect/decal/warning_stripes/yellow/hollow, +/obj/machinery/computer/mecha{ + dir = 8 + }, /turf/simulated/floor/plasteel{ icon_state = "whitepurplecorner" }, @@ -80865,8 +77877,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /turf/simulated/floor/plasteel{ dir = 8; @@ -80877,8 +77888,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/cable{ d1 = 1; @@ -80900,7 +77910,11 @@ /obj/machinery/atmospherics/unary/thermomachine/heater{ dir = 8 }, -/obj/effect/decal/warning_stripes/northwest, +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 28 + }, +/obj/effect/decal/warning_stripes/west, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "whitepurplecorner" @@ -80929,7 +77943,6 @@ }, /area/assembly/chargebay) "doS" = ( -/obj/structure/disposalpipe/segment, /obj/effect/decal/warning_stripes/west, /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 @@ -80956,8 +77969,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/effect/landmark/start{ name = "Cyborg" @@ -80980,7 +77992,6 @@ /turf/simulated/floor/greengrid, /area/assembly/chargebay) "doY" = ( -/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralcorner" @@ -80995,11 +78006,6 @@ }, /area/hallway/primary/aft) "dpa" = ( -/obj/structure/disposalpipe/sortjunction{ - dir = 1; - name = "Genetics Junction"; - sortType = 13 - }, /turf/simulated/floor/plasteel{ icon_state = "purplecorner" }, @@ -81026,9 +78032,6 @@ }, /area/assembly/chargebay) "dpd" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 6 }, @@ -81038,14 +78041,10 @@ }, /area/medical/genetics) "dpe" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -81114,6 +78113,7 @@ "dpm" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -81134,18 +78134,15 @@ /turf/simulated/floor/grass, /area/medical/genetics) "dpr" = ( -/obj/structure/disposalpipe/segment, /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 8; @@ -81155,6 +78152,11 @@ dir = 8; initialize_directions = 11 }, +/obj/structure/disposalpipe/sortjunction{ + dir = 1; + name = "CMO's Junction"; + sortType = 10 + }, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -81163,8 +78165,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -81172,6 +78173,9 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ icon_state = "whitebluecorner" }, @@ -81183,8 +78187,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -81192,6 +78195,10 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -81200,14 +78207,12 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -81224,8 +78229,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 10 @@ -81243,8 +78247,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /turf/simulated/floor/plasteel{ dir = 8; @@ -81255,8 +78258,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /turf/simulated/floor/plasteel{ icon_state = "dark" @@ -81266,8 +78268,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/cable{ d1 = 1; @@ -81277,8 +78278,7 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/machinery/door/airlock/command/glass{ name = "Chief Medical Officer"; @@ -81290,6 +78290,9 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -81298,8 +78301,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /turf/simulated/floor/plasteel{ dir = 8; @@ -81310,14 +78312,12 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/effect/landmark{ name = "lightsout" @@ -81349,6 +78349,16 @@ /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 1 }, +/obj/structure/table, +/obj/item/storage/box/masks, +/obj/item/storage/box/gloves{ + pixel_x = 5; + pixel_y = 5 + }, +/obj/item/reagent_containers/spray/cleaner{ + desc = "Someone has crossed out the Space from Space Cleaner and written in Surgery. 'Do not remove under punishment of death!!!' is scrawled on the back."; + name = "Surgery Cleaner" + }, /turf/simulated/floor/plasteel{ icon_state = "darkblue" }, @@ -81359,7 +78369,6 @@ }, /area/medical/surgeryobs) "dpI" = ( -/obj/structure/disposalpipe/segment, /obj/structure/cable{ d1 = 1; d2 = 2; @@ -81367,6 +78376,7 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -81434,14 +78444,10 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/table/reinforced, /obj/machinery/light, -/obj/machinery/newscaster{ - pixel_y = -32 - }, /obj/item/radio/intercom{ dir = 0; pixel_x = -28; @@ -81451,6 +78457,9 @@ department = "Research Director's Office" }, /obj/effect/decal/warning_stripes/yellow/hollow, +/obj/machinery/newscaster{ + pixel_y = -32 + }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "whitepurplecorner" @@ -81480,7 +78489,9 @@ /turf/simulated/floor/greengrid, /area/medical/research) "dpV" = ( -/obj/machinery/computer/mech_bay_power_console, +/obj/machinery/computer/mech_bay_power_console{ + dir = 1 + }, /turf/simulated/floor/greengrid, /area/medical/research) "dpW" = ( @@ -81505,8 +78516,16 @@ dir = 8 }, /obj/machinery/portable_atmospherics/scrubber, -/obj/structure/sign/nosmoking_2{ - pixel_x = -32 +/obj/machinery/door_control{ + id = "toxmix1"; + name = "Space Vent"; + pixel_x = -32; + req_access_txt = "47" + }, +/obj/machinery/ignition_switch{ + id = "toxinsigniter"; + pixel_x = -32; + pixel_y = 8 }, /turf/simulated/floor/plasteel{ dir = 1; @@ -81536,8 +78555,10 @@ /obj/machinery/status_display{ pixel_x = 32 }, -/obj/machinery/computer/robotics, /obj/effect/decal/warning_stripes/yellow/hollow, +/obj/machinery/computer/robotics{ + dir = 8 + }, /turf/simulated/floor/plasteel{ icon_state = "whitepurplecorner" }, @@ -81628,8 +78649,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/effect/decal/warning_stripes/south, /turf/simulated/floor/plasteel, @@ -81674,8 +78694,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/hologram/holopad, /turf/simulated/floor/plasteel{ @@ -81701,8 +78720,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/cable{ d1 = 1; @@ -81712,8 +78730,7 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/machinery/door/airlock/command/glass{ name = "Chief Medical Officer"; @@ -81724,17 +78741,11 @@ }, /area/medical/cmo) "dqw" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /turf/simulated/floor/plasteel{ icon_state = "dark" }, /area/medical/genetics) "dqx" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 }, @@ -81744,9 +78755,6 @@ }, /area/medical/genetics) "dqz" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -81755,10 +78763,6 @@ }, /area/medical/genetics) "dqA" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/hologram/holopad, /obj/effect/landmark/start{ name = "Geneticist" }, @@ -81768,15 +78772,13 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 5 }, +/obj/structure/disposalpipe/segment, +/obj/machinery/hologram/holopad, /turf/simulated/floor/plasteel{ icon_state = "white" }, /area/medical/genetics) "dqB" = ( -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" - }, /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 8 }, @@ -81802,15 +78804,14 @@ }, /area/medical/medbay) "dqF" = ( -/obj/structure/disposalpipe/segment, /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -81830,8 +78831,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /turf/simulated/floor/plasteel{ dir = 8; @@ -81927,8 +78927,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -82050,6 +79049,9 @@ /obj/machinery/atmospherics/pipe/simple/hidden/cyan{ dir = 5 }, +/obj/structure/sign/nosmoking_2{ + pixel_x = -32 + }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "whitepurple" @@ -82067,20 +79069,19 @@ /turf/simulated/floor/plating, /area/maintenance/port) "drp" = ( -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8"; - tag = "" +/obj/machinery/button/windowtint{ + pixel_y = -24 }, -/turf/simulated/floor/plasteel{ - dir = 1; - icon_state = "neutral" - }, -/area/maintenance/port) +/obj/item/twohanded/required/kirbyplants, +/turf/simulated/floor/wood, +/area/ntrep) "drr" = ( /obj/machinery/atmospherics/unary/portables_connector, /obj/machinery/portable_atmospherics/pump, +/obj/machinery/alarm{ + dir = 4; + pixel_x = -24 + }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "whitepurplecorner" @@ -82105,8 +79106,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/cable{ d1 = 1; @@ -82165,8 +79165,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 9 @@ -82201,8 +79200,7 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/effect/decal/warning_stripes/south, /turf/simulated/floor/plasteel, @@ -82227,9 +79225,6 @@ }, /area/assembly/chargebay) "drH" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/effect/decal/warning_stripes/yellow/hollow, /turf/simulated/floor/plasteel, /area/medical/genetics) @@ -82262,7 +79257,6 @@ }, /area/hallway/primary/aft) "drL" = ( -/obj/structure/disposalpipe/segment, /obj/structure/sign/science{ pixel_x = -32; pixel_y = 32 @@ -82273,7 +79267,6 @@ }, /area/hallway/primary/aft) "drM" = ( -/obj/structure/disposalpipe/segment, /obj/structure/sign/science{ pixel_x = 32; pixel_y = 32 @@ -82286,13 +79279,13 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/door/firedoor, /obj/effect/decal/warning_stripes/yellow, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -82310,8 +79303,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /turf/simulated/floor/plasteel{ icon_state = "white" @@ -82369,13 +79361,6 @@ icon_state = "white" }, /area/medical/genetics) -"drY" = ( -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "whitepurple" - }, -/area/medical/genetics) "drZ" = ( /obj/structure/window/reinforced, /obj/structure/window/reinforced{ @@ -82415,6 +79400,7 @@ /obj/structure/bed/dogbed{ name = "kitty basket" }, +/obj/structure/disposalpipe/segment, /mob/living/simple_animal/pet/cat/Runtime, /turf/simulated/floor/plasteel{ icon_state = "dark" @@ -82424,8 +79410,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/hologram/holopad, /turf/simulated/floor/plasteel{ @@ -82446,8 +79431,7 @@ /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /obj/structure/chair/office/light, /turf/simulated/floor/plasteel{ @@ -82494,8 +79478,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/light/small{ dir = 8 @@ -82509,8 +79492,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/door/airlock/maintenance, /turf/simulated/floor/plasteel, @@ -82561,8 +79543,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /turf/simulated/floor/plasteel{ dir = 8; @@ -82570,7 +79551,6 @@ }, /area/maintenance/port) "dsu" = ( -/obj/structure/disposalpipe/segment, /obj/machinery/door/firedoor, /obj/effect/decal/warning_stripes/yellow, /turf/simulated/floor/plasteel{ @@ -82591,8 +79571,7 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ @@ -82607,8 +79586,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 5 @@ -82639,8 +79617,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/effect/decal/cleanable/dirt, /obj/effect/decal/warning_stripes/yellow/hollow, @@ -82650,8 +79627,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/effect/landmark/start{ name = "Research Director" @@ -82683,8 +79659,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/door/firedoor, /obj/machinery/door/airlock/research/glass{ @@ -82696,7 +79671,6 @@ }, /area/assembly/robotics) "dsI" = ( -/obj/structure/disposalpipe/segment, /obj/machinery/door/firedoor, /obj/effect/decal/warning_stripes/yellow, /turf/simulated/floor/plasteel{ @@ -82798,8 +79772,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /turf/simulated/floor/plasteel{ dir = 8; @@ -82839,9 +79812,6 @@ }, /area/medical/genetics) "dsU" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/machinery/door/firedoor, /obj/machinery/door/airlock/medical{ name = "Genetics Office"; @@ -82851,8 +79821,10 @@ /area/medical/genetics) "dsV" = ( /obj/machinery/light, -/obj/machinery/computer/scan_consolenew, /obj/effect/decal/warning_stripes/northwest, +/obj/machinery/computer/scan_consolenew{ + dir = 1 + }, /turf/simulated/floor/plasteel, /area/medical/genetics) "dsW" = ( @@ -82868,18 +79840,23 @@ /area/medical/genetics) "dsX" = ( /obj/structure/table/glass, -/obj/machinery/computer/med_data/laptop, /obj/structure/mirror{ pixel_y = -30 }, +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/obj/machinery/computer/med_data/laptop{ + dir = 1 + }, /turf/simulated/floor/plasteel{ icon_state = "white" }, /area/medical/genetics) "dsY" = ( /obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" + dir = 4 }, /obj/machinery/newscaster{ pixel_y = -32 @@ -82906,37 +79883,31 @@ pixel_x = -32; pixel_y = -32 }, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/obj/machinery/disposal, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "whitepurplecorner" }, /area/medical/medbay) "dtc" = ( -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" - }, /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/junction{ + dir = 1; + icon_state = "pipe-j2" + }, /turf/simulated/floor/plasteel{ icon_state = "whiteblue" }, /area/medical/medbay) -"dtd" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/item/twohanded/required/kirbyplants, -/turf/simulated/floor/plasteel{ - icon_state = "whitebluecorner" - }, -/area/medical/medbay) "dte" = ( /obj/item/twohanded/required/kirbyplants, /obj/machinery/alarm{ @@ -82946,11 +79917,11 @@ /turf/simulated/floor/plasteel, /area/gateway) "dtf" = ( +/obj/effect/decal/warning_stripes/yellow/hollow, /obj/structure/disposalpipe/trunk{ dir = 8 }, /obj/machinery/disposal, -/obj/effect/decal/warning_stripes/yellow/hollow, /turf/simulated/floor/plasteel, /area/medical/genetics) "dtg" = ( @@ -82973,14 +79944,12 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/structure/table/glass, /obj/item/paper_bin, @@ -82995,8 +79964,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/cable{ d1 = 1; @@ -83018,8 +79986,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/table/glass, /obj/machinery/computer/med_data/laptop, @@ -83054,8 +80021,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /turf/simulated/floor/plasteel{ dir = 1; @@ -83063,7 +80029,6 @@ }, /area/medical/surgery1) "dtn" = ( -/obj/machinery/hologram/holopad, /obj/structure/cable{ d1 = 1; d2 = 8; @@ -83071,6 +80036,7 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/hologram/holopad, /turf/simulated/floor/plasteel{ dir = 5; icon_state = "darkblue" @@ -83083,8 +80049,6 @@ /turf/simulated/wall/r_wall, /area/medical/research) "dtq" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/hologram/holopad, /obj/structure/cable{ d1 = 1; d2 = 4; @@ -83092,6 +80056,8 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment, +/obj/machinery/hologram/holopad, /turf/simulated/floor/plasteel{ dir = 9; icon_state = "darkblue" @@ -83101,8 +80067,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/effect/landmark/start{ name = "Medical Doctor" @@ -83139,8 +80104,7 @@ /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /obj/structure/cable{ d1 = 2; @@ -83158,8 +80122,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /turf/simulated/floor/plating, /area/maintenance/starboard) @@ -83167,8 +80130,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/effect/decal/cleanable/dirt, /obj/structure/cable{ @@ -83185,8 +80147,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /turf/simulated/floor/plasteel{ dir = 1; @@ -83197,26 +80158,6 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel, /area/hallway/secondary/construction) -"dtC" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - tag = "" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - icon_state = "white" - }, -/area/medical/medbay) "dtD" = ( /obj/structure/cable{ d1 = 4; @@ -83240,8 +80181,7 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/effect/decal/cleanable/dirt, /obj/effect/decal/warning_stripes/yellow, @@ -83351,13 +80291,9 @@ }, /area/toxins/mixing) "dtS" = ( -/obj/machinery/camera{ - c_tag = "Research Hallway"; - network = list("Research","SS13") - }, /obj/structure/closet/walllocker/emerglocker/north, /turf/simulated/floor/plasteel{ - dir = 4; + dir = 1; icon_state = "whitepurplecorner" }, /area/medical/research) @@ -83372,26 +80308,25 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, -/obj/machinery/hologram/holopad, /obj/effect/decal/warning_stripes/yellow/hollow, /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 4; initialize_directions = 11 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/hologram/holopad, /turf/simulated/floor/plasteel{ icon_state = "whitepurplefull" }, /area/toxins/mixing) "dtW" = ( +/obj/effect/decal/warning_stripes/yellow, +/obj/structure/closet/secure_closet/scientist, /obj/machinery/newscaster{ pixel_x = 32 }, -/obj/effect/decal/warning_stripes/yellow, -/obj/structure/closet/secure_closet/scientist, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "whitepurple" @@ -83426,8 +80361,7 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /turf/simulated/floor/plasteel{ icon_state = "whitepurplecorner" @@ -83435,30 +80369,23 @@ /area/crew_quarters/hor) "dub" = ( /obj/structure/table/wood, -/obj/machinery/newscaster{ - pixel_y = -32 - }, /obj/item/radio/intercom{ dir = 4; pixel_x = 28 }, /obj/item/flashlight/lamp, +/obj/machinery/newscaster{ + pixel_y = -32 + }, /turf/simulated/floor/plasteel{ icon_state = "whitepurplecorner" }, /area/crew_quarters/hor) -"duc" = ( -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plasteel{ - icon_state = "whitepurplecorner" - }, -/area/medical/research) "due" = ( /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/effect/decal/warning_stripes/yellow, /turf/simulated/floor/plasteel{ @@ -83547,17 +80474,16 @@ /turf/simulated/wall, /area/medical/morgue) "dul" = ( -/obj/structure/disposalpipe/trunk{ - dir = 8 - }, -/obj/machinery/disposal, /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/effect/decal/warning_stripes/yellow/hollow, +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -83570,8 +80496,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/door/airlock/maintenance{ @@ -83579,6 +80504,7 @@ req_access_txt = "5" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel, /area/medical/morgue) "dur" = ( @@ -83608,8 +80534,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 8; @@ -83643,10 +80568,12 @@ /obj/machinery/ai_status_display{ pixel_x = 32 }, -/obj/machinery/computer/card/minor/cmo, /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 8 }, +/obj/machinery/computer/card/minor/cmo{ + dir = 8 + }, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -83686,11 +80613,13 @@ }, /area/medical/surgery1) "duA" = ( -/obj/machinery/computer/operating, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 5 }, +/obj/machinery/computer/operating{ + dir = 4 + }, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "darkblue" @@ -83699,7 +80628,7 @@ "duB" = ( /obj/structure/sink{ dir = 4; - pixel_x = 11 + pixel_x = 12 }, /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 8 @@ -83747,8 +80676,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 8; @@ -83793,8 +80721,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 8; @@ -83913,22 +80840,21 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/door/airlock/maintenance{ name = "Robotics Maintenance"; req_access_txt = "29" }, /obj/effect/decal/warning_stripes/south, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel, /area/maintenance/fpmaint2) "dva" = ( /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -83956,8 +80882,8 @@ /turf/simulated/wall/r_wall, /area/toxins/misc_lab) "dve" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/purple{ - dir = 10 +/obj/machinery/atmospherics/unary/portables_connector{ + dir = 8 }, /turf/simulated/floor/plasteel{ icon_state = "white" @@ -83990,16 +80916,15 @@ }, /area/medical/research) "dvj" = ( -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" - }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ icon_state = "whitepurplecorner" }, @@ -84008,8 +80933,7 @@ /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /obj/effect/decal/warning_stripes/northwest, /turf/simulated/floor/plasteel, @@ -84018,8 +80942,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/effect/decal/warning_stripes/north, /turf/simulated/floor/plasteel, @@ -84046,19 +80969,28 @@ /obj/effect/landmark/start{ name = "Roboticist" }, +/obj/effect/decal/warning_stripes/southeastcorner, /turf/simulated/floor/plasteel, /area/assembly/robotics) "dvp" = ( -/obj/structure/window/reinforced/polarized, -/obj/effect/decal/warning_stripes/south, -/obj/machinery/computer/rdconsole/robotics, -/turf/simulated/floor/plasteel, +/obj/structure/window/reinforced/polarized{ + dir = 8 + }, +/turf/simulated/floor/plasteel{ + icon_state = "white" + }, /area/assembly/robotics) "dvq" = ( -/obj/structure/window/reinforced/polarized, -/obj/effect/decal/warning_stripes/southeast, -/obj/structure/filingcabinet/chestdrawer, -/turf/simulated/floor/plasteel, +/obj/structure/mirror{ + pixel_x = 32 + }, +/obj/structure/sink{ + dir = 4; + pixel_x = 12 + }, +/turf/simulated/floor/plasteel{ + icon_state = "white" + }, /area/assembly/robotics) "dvr" = ( /obj/structure/chair/office/light{ @@ -84086,8 +81018,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/unary/vent_scrubber/on, /turf/simulated/floor/plasteel{ @@ -84157,11 +81088,11 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plating, /area/medical/morgue) "dvE" = ( @@ -84175,12 +81106,12 @@ name = "Emergency NanoMed"; pixel_y = -32 }, -/obj/machinery/newscaster{ - pixel_x = -32 - }, /obj/machinery/photocopier/faxmachine{ department = "Chief Medical Officer's Office" }, +/obj/machinery/newscaster{ + pixel_x = -32 + }, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -84195,8 +81126,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -84220,7 +81150,6 @@ }, /area/medical/cmo) "dvJ" = ( -/obj/machinery/computer/crew, /obj/machinery/requests_console{ announcementConsole = 1; department = "Chief Medical Officer's Desk"; @@ -84228,6 +81157,9 @@ name = "Chief Medical Officer Requests Console"; pixel_x = 30 }, +/obj/machinery/computer/crew{ + dir = 8 + }, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -84283,10 +81215,10 @@ /turf/simulated/floor/plating, /area/medical/research) "dvQ" = ( -/obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 5 }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ dir = 10; icon_state = "darkblue" @@ -84323,8 +81255,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/effect/decal/cleanable/dirt, /obj/effect/decal/warning_stripes/yellow, @@ -84332,6 +81263,7 @@ /area/maintenance/port) "dvX" = ( /obj/structure/closet, +/obj/effect/spawner/lootdrop/maintenance, /turf/simulated/floor/plasteel{ dir = 6; icon_state = "neutral" @@ -84406,8 +81338,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/door/firedoor, /obj/machinery/door/airlock/research{ @@ -84417,8 +81348,8 @@ /turf/simulated/floor/plasteel, /area/toxins/misc_lab) "dwe" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/purple{ - dir = 4 +/obj/machinery/atmospherics/pipe/simple/hidden/purple{ + dir = 10 }, /turf/simulated/floor/plasteel{ icon_state = "white" @@ -84459,7 +81390,9 @@ dir = 4; pixel_x = -24 }, -/obj/machinery/computer/rdservercontrol, +/obj/machinery/computer/rdservercontrol{ + dir = 4 + }, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -84537,8 +81470,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/effect/decal/warning_stripes/west, /turf/simulated/floor/plasteel, @@ -84564,7 +81496,6 @@ }, /area/hallway/primary/aft) "dwu" = ( -/obj/structure/disposalpipe/segment, /obj/machinery/camera{ c_tag = "Central Hallway South 3"; dir = 8 @@ -84588,8 +81519,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel{ @@ -84632,12 +81562,12 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plating, /area/medical/morgue) "dwF" = ( @@ -84719,6 +81649,10 @@ dir = 1; network = list("Medical","SS13") }, +/obj/item/reagent_containers/spray/cleaner{ + desc = "Someone has crossed out the Space from Space Cleaner and written in Surgery. 'Do not remove under punishment of death!!!' is scrawled on the back."; + name = "Surgery Cleaner" + }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "whiteblue" @@ -84740,8 +81674,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/effect/decal/cleanable/dirt, @@ -84792,9 +81725,7 @@ /obj/machinery/newscaster{ pixel_y = 32 }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/crew_quarters/theatre) "dwU" = ( /turf/simulated/floor/plasteel{ @@ -84806,9 +81737,7 @@ dir = 8; name = "Abandoned Theater" }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/crew_quarters/theatre) "dwW" = ( /obj/item/twohanded/required/kirbyplants, @@ -84909,10 +81838,10 @@ dir = 8; pixel_x = 24 }, +/obj/effect/decal/warning_stripes/southeast, /obj/machinery/newscaster{ pixel_y = 32 }, -/obj/effect/decal/warning_stripes/southeast, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -84950,14 +81879,14 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/effect/decal/warning_stripes/yellow, /turf/simulated/floor/plasteel, /area/toxins/storage) "dxl" = ( /obj/structure/table/reinforced, +/obj/effect/decal/warning_stripes/west, /obj/machinery/computer/security/telescreen{ desc = "Used for watching the test chamber."; dir = 4; @@ -84965,7 +81894,6 @@ name = "Test Chamber Telescreen"; network = list("Toxins") }, -/obj/effect/decal/warning_stripes/west, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -85060,14 +81988,12 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /obj/machinery/atmospherics/pipe/manifold/hidden{ dir = 1 @@ -85080,8 +82006,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden{ dir = 9 @@ -85094,8 +82019,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/door/airlock/command{ name = "Server Room"; @@ -85110,8 +82034,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /turf/simulated/floor/plasteel{ dir = 8; @@ -85122,15 +82045,14 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -85141,22 +82063,19 @@ /turf/simulated/floor/plasteel, /area/assembly/robotics) "dxA" = ( -/obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 6 }, /obj/effect/landmark/start{ name = "Medical Doctor" }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "cmo" }, /area/medical/medbay) "dxB" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/machinery/door/firedoor, /obj/machinery/door/airlock/research/glass{ name = "Robotics Lab"; @@ -85168,15 +82087,14 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ icon_state = "white" }, /area/assembly/robotics) "dxC" = ( -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" - }, /obj/effect/decal/warning_stripes/yellow, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -85184,6 +82102,11 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/structure/disposalpipe/sortjunction{ + dir = 4; + name = "Robotics Junction"; + sortType = 14 + }, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -85192,8 +82115,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/effect/decal/warning_stripes/west, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -85202,6 +82124,10 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, /turf/simulated/floor/plasteel, /area/assembly/robotics) "dxE" = ( @@ -85216,8 +82142,9 @@ }, /area/medical/research) "dxF" = ( -/obj/structure/disposalpipe/junction{ - dir = 1 +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" }, /turf/simulated/floor/plasteel{ icon_state = "neutralcorner" @@ -85227,8 +82154,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/door/firedoor, /obj/machinery/door/airlock/centcom{ @@ -85242,9 +82168,8 @@ }, /area/medical/morgue) "dxH" = ( -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" +/obj/structure/disposalpipe/junction{ + dir = 4 }, /turf/simulated/floor/plasteel{ icon_state = "dark" @@ -85259,8 +82184,7 @@ /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 6 @@ -85268,6 +82192,9 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 5 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralfull" @@ -85277,8 +82204,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -85286,6 +82212,9 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralfull" @@ -85302,13 +82231,15 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/manifold/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralfull" @@ -85318,8 +82249,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -85327,6 +82257,9 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -85346,8 +82279,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -85355,14 +82287,16 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel, /area/medical/morgue) "dxR" = ( /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 1 @@ -85374,14 +82308,16 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plating, /area/medical/morgue) "dxS" = ( /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -85390,20 +82326,21 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plating, /area/medical/morgue) "dxT" = ( /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 4; @@ -85414,6 +82351,10 @@ dir = 4; initialize_directions = 11 }, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralfull" @@ -85429,8 +82370,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/door/firedoor, /obj/effect/decal/warning_stripes/yellow, @@ -85470,8 +82410,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 4; @@ -85486,12 +82425,12 @@ }, /area/medical/medbay) "dya" = ( -/obj/structure/disposalpipe/segment, /obj/machinery/door/firedoor, /obj/machinery/door/airlock/medical{ name = "Operating Theatre Storage"; req_access_txt = "45" }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ icon_state = "showroomfloor" }, @@ -85512,8 +82451,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -85535,8 +82473,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /turf/simulated/floor/plating, /area/crew_quarters/theatre) @@ -85573,12 +82510,12 @@ /area/medical/medbay) "dyl" = ( /obj/item/twohanded/required/kirbyplants, -/obj/machinery/newscaster{ - pixel_x = -32 - }, /obj/machinery/light/small{ dir = 8 }, +/obj/machinery/newscaster{ + pixel_x = -32 + }, /turf/simulated/floor/plating, /area/security/detectives_office) "dym" = ( @@ -85657,8 +82594,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /turf/simulated/floor/plasteel{ icon_state = "neutral" @@ -85676,7 +82612,8 @@ "dyy" = ( /obj/machinery/driver_button{ id_tag = "toxinsdriver"; - pixel_x = -26 + pixel_x = -26; + range = 18 }, /obj/structure/chair/office/dark{ dir = 8 @@ -85695,8 +82632,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -85714,7 +82650,9 @@ /area/toxins/mixing) "dyC" = ( /obj/effect/decal/warning_stripes/northwest, -/obj/machinery/computer/area_atmos, +/obj/machinery/computer/area_atmos{ + dir = 4 + }, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -85723,8 +82661,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/effect/decal/warning_stripes/north, /turf/simulated/floor/plasteel{ @@ -85757,8 +82694,7 @@ /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /obj/effect/decal/warning_stripes/southwest, /obj/machinery/atmospherics/unary/vent_pump/on, @@ -85807,22 +82743,22 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ icon_state = "white" }, /area/medical/research) "dyM" = ( -/obj/structure/disposalpipe/segment, /obj/structure/rack, /obj/item/storage/firstaid, /obj/item/storage/firstaid, /obj/item/paicard, /obj/effect/decal/warning_stripes/yellow/hollow, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -85831,26 +82767,28 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/effect/decal/warning_stripes/west, /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 1 }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel, /area/assembly/robotics) "dyO" = ( -/obj/effect/decal/warning_stripes/southeastcorner, +/obj/effect/decal/warning_stripes/east, /turf/simulated/floor/plasteel, /area/assembly/robotics) "dyP" = ( +/obj/effect/decal/warning_stripes/yellow, /obj/machinery/navbeacon{ codes_txt = "delivery;dir=1"; location = "Robotics" }, -/obj/structure/plasticflaps, -/obj/effect/decal/warning_stripes/yellow, +/obj/structure/plasticflaps{ + opacity = 1 + }, /turf/simulated/floor/plasteel, /area/assembly/robotics) "dyR" = ( @@ -85868,18 +82806,26 @@ }, /area/assembly/robotics) "dyT" = ( -/obj/structure/window/reinforced/polarized, -/obj/effect/decal/warning_stripes/south, -/obj/machinery/r_n_d/circuit_imprinter, -/obj/item/reagent_containers/glass/beaker/sulphuric, -/turf/simulated/floor/plasteel, -/area/assembly/robotics) +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8"; + tag = "" + }, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/lattice/catwalk, +/turf/space, +/area/maintenance/auxsolarstarboard) "dyU" = ( -/obj/structure/disposalpipe/segment, /obj/machinery/firealarm{ dir = 8; pixel_x = -24 }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "vault" @@ -85889,8 +82835,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plasteel{ @@ -85926,8 +82871,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -85944,9 +82888,6 @@ /turf/simulated/floor/plasteel, /area/medical/morgue) "dzi" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/structure/cable{ d1 = 1; d2 = 4; @@ -85958,16 +82899,18 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 }, /turf/simulated/floor/plasteel, /area/maintenance/starboard) "dzj" = ( -/obj/machinery/hologram/holopad, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/machinery/hologram/holopad, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "cmo" @@ -86002,8 +82945,8 @@ }, /area/medical/cmo) "dzm" = ( -/obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/unary/vent_pump/on, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ icon_state = "showroomfloor" }, @@ -86031,9 +82974,7 @@ /obj/machinery/light_switch{ pixel_x = -26 }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/crew_quarters/theatre) "dzr" = ( /obj/structure/chair/wood{ @@ -86103,8 +83044,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/cable{ d1 = 1; @@ -86140,8 +83080,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/door/airlock/research{ name = "Toxin Mixing"; @@ -86160,8 +83099,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -86178,8 +83116,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/light_switch{ pixel_x = -26; @@ -86215,8 +83152,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -86237,14 +83173,12 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/machinery/atmospherics/pipe/manifold/hidden/supply, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, @@ -86256,8 +83190,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -86307,8 +83240,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/effect/decal/warning_stripes/yellow, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -86325,8 +83257,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/door/firedoor, /obj/machinery/door/airlock/research{ @@ -86345,8 +83276,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/cable{ d1 = 1; @@ -86441,8 +83371,9 @@ d1 = 1; d2 = 4; icon_state = "1-4"; - tag = "90Curve" + tag = null }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -86462,10 +83393,6 @@ }, /area/medical/research) "dzV" = ( -/obj/structure/disposalpipe/trunk{ - dir = 1 - }, -/obj/machinery/disposal, /obj/structure/cable{ d2 = 4; icon_state = "0-4" @@ -86476,6 +83403,10 @@ pixel_x = -24 }, /obj/effect/decal/warning_stripes/yellow, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/obj/machinery/disposal, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -86484,16 +83415,15 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/effect/decal/warning_stripes/southwest, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel, /area/assembly/robotics) "dzX" = ( @@ -86501,12 +83431,13 @@ /turf/simulated/floor/plasteel, /area/assembly/robotics) "dzY" = ( +/obj/machinery/computer/operating{ + dir = 1; + name = "Robotics Operating Computer" + }, /obj/machinery/newscaster{ pixel_y = -32 }, -/obj/machinery/computer/operating{ - name = "Robotics Operating Computer" - }, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -86607,8 +83538,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -86618,8 +83548,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -86634,16 +83563,21 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ icon_state = "dark" }, /area/medical/morgue) "dAp" = ( /obj/structure/table/glass, +/obj/machinery/computer/med_data/laptop{ + dir = 1 + }, /obj/machinery/newscaster{ pixel_y = -32 }, -/obj/machinery/computer/med_data/laptop, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "cmo" @@ -86678,8 +83612,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 8; @@ -86694,24 +83627,21 @@ }, /area/medical/medbay) "dAu" = ( -/obj/structure/disposalpipe/junction{ - dir = 1; - icon_state = "pipe-y" - }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 9 }, +/obj/structure/disposalpipe/junction{ + dir = 1; + icon_state = "pipe-y" + }, /turf/simulated/floor/plasteel{ icon_state = "showroomfloor" }, /area/medical/surgery2) "dAv" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/machinery/camera{ c_tag = "Medbay Surgery East Storage"; dir = 1 @@ -86719,16 +83649,19 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 9 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ icon_state = "showroomfloor" }, /area/medical/surgery2) "dAw" = ( +/obj/machinery/iv_drip, /obj/structure/disposalpipe/segment{ dir = 8; icon_state = "pipe-c" }, -/obj/machinery/iv_drip, /turf/simulated/floor/plasteel{ icon_state = "showroomfloor" }, @@ -86740,14 +83673,12 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 8; @@ -86763,31 +83694,25 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, /obj/machinery/door/airlock/maintenance, /obj/structure/barricade/wooden, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/crew_quarters/theatre) "dAB" = ( /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/crew_quarters/theatre) "dAC" = ( /obj/structure/cable{ @@ -86798,17 +83723,13 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 1 }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/crew_quarters/theatre) "dAD" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/crew_quarters/theatre) "dAE" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ @@ -86830,8 +83751,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/effect/decal/cleanable/dirt, /obj/effect/decal/warning_stripes/yellow/hollow, @@ -86847,8 +83767,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/effect/decal/cleanable/dirt, /obj/effect/decal/warning_stripes/west, @@ -86912,8 +83831,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /turf/simulated/floor/plasteel{ dir = 1; @@ -86949,8 +83867,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/effect/decal/warning_stripes/yellow, /turf/simulated/floor/plasteel{ @@ -86960,12 +83877,10 @@ "dAU" = ( /obj/machinery/door/window/southright{ dir = 1; - name = "Toxins Launcher"; - req_access_txt = "7" + name = "Toxins Launcher" }, /obj/machinery/door/window/southright{ - name = "Toxins Launcher"; - req_access_txt = "7" + name = "Toxins Launcher" }, /obj/effect/decal/warning_stripes/arrow, /obj/effect/decal/warning_stripes/yellow/partial, @@ -86975,8 +83890,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/effect/decal/warning_stripes/yellow, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -86988,8 +83902,7 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/effect/decal/warning_stripes/yellow, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -87095,12 +84008,10 @@ }, /area/toxins/server) "dBh" = ( -/obj/structure/disposalpipe/segment, /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/door/firedoor, /obj/machinery/door/airlock/maintenance{ @@ -87110,10 +84021,10 @@ /obj/effect/decal/warning_stripes/south, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel, /area/medical/research) "dBj" = ( -/obj/structure/disposalpipe/segment, /obj/machinery/firealarm{ dir = 4; pixel_x = 24 @@ -87121,9 +84032,9 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ icon_state = "neutralcorner" }, @@ -87136,8 +84047,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/door/airlock/maintenance, @@ -87148,11 +84058,10 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/door/airlock/maintenance{ - name = "Medbay Maintenance"; + name = "Virology Lobby"; req_access_txt = "5" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -87169,9 +84078,7 @@ }, /area/medical/medbay) "dBq" = ( -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/crew_quarters/theatre) "dBr" = ( /obj/structure/chair/wood{ @@ -87182,11 +84089,11 @@ }, /area/crew_quarters/theatre) "dBt" = ( -/obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 10 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -87239,18 +84146,15 @@ /turf/simulated/floor/plasteel, /area/maintenance/apmaint) "dBD" = ( -/obj/structure/disposalpipe/segment, /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /obj/machinery/door/firedoor, /obj/machinery/door/airlock/research/glass{ @@ -87285,8 +84189,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/effect/decal/warning_stripes/yellow, /turf/simulated/floor/plasteel, @@ -87295,8 +84198,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/effect/decal/warning_stripes/yellow, /turf/simulated/floor/plasteel, @@ -87308,9 +84210,6 @@ /obj/item/bonegel, /obj/item/FixOVein, /obj/item/surgicaldrill, -/obj/structure/mirror{ - pixel_x = 32 - }, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -87319,8 +84218,7 @@ /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -87330,19 +84228,17 @@ }, /area/hallway/primary/aft) "dBQ" = ( -/obj/structure/disposalpipe/segment, /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/cable{ d1 = 1; d2 = 8; - icon_state = "1-8"; - tag = "" + icon_state = "1-8" }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ icon_state = "neutralcorner" }, @@ -87357,9 +84253,6 @@ }, /area/hallway/primary/aft) "dBS" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/machinery/door/firedoor, /obj/machinery/door/airlock/centcom{ id_tag = null; @@ -87367,6 +84260,9 @@ opacity = 1; req_access_txt = "6" }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -87375,8 +84271,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -87391,8 +84286,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /turf/simulated/floor/plating, /area/maintenance/aft) @@ -87400,8 +84294,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, @@ -87410,14 +84303,12 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /turf/simulated/floor/plating, /area/maintenance/aft) @@ -87425,8 +84316,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ @@ -87438,8 +84328,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/effect/spawner/random_spawners/oil_maybe, /turf/simulated/floor/plating, @@ -87448,8 +84337,7 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /turf/simulated/floor/plating, /area/maintenance/aft) @@ -87461,8 +84349,7 @@ /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ @@ -87474,8 +84361,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /turf/simulated/floor/plasteel{ dir = 1; @@ -87486,8 +84372,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/cable{ d1 = 1; @@ -87502,8 +84387,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/light/small{ dir = 1 @@ -87524,8 +84408,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -87661,14 +84544,12 @@ /turf/simulated/wall/indestructible/riveted, /area/toxins/test_area) "dCz" = ( -/obj/machinery/camera{ - active_power_usage = 0; - c_tag = "Bomb Test Site"; - dir = 4; - invuln = 1; - network = list("SS13,Toxins") - }, /obj/item/target, +/obj/machinery/camera{ + c_tag = "Research Toxins Test Chamber East"; + dir = 4; + network = list("Toxins","Research","SS13") + }, /turf/simulated/floor/plasteel/airless/indestructible, /area/toxins/test_area) "dCA" = ( @@ -87688,8 +84569,9 @@ /area/toxins/mixing) "dCD" = ( /obj/machinery/door/poddoor{ - id_tag = "toxindriver"; - name = "Toxins Podlock" + id_tag = "toxinsdriver"; + name = "Toxins Launcher Bay Door"; + protected = 0 }, /obj/structure/fans/tiny, /turf/simulated/floor/plating, @@ -87700,7 +84582,7 @@ "dCF" = ( /obj/machinery/mass_driver{ dir = 8; - id_tag = "toxindriver" + id_tag = "toxinsdriver" }, /obj/effect/decal/warning_stripes/west, /turf/simulated/floor/plating/airless, @@ -87795,14 +84677,12 @@ /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 6 @@ -87810,14 +84690,14 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 6 }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plating, /area/maintenance/apmaint) "dCW" = ( /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -87832,8 +84712,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -87850,15 +84729,15 @@ /obj/machinery/light{ dir = 8 }, -/obj/machinery/newscaster{ - pixel_x = -32 - }, /obj/item/storage/toolbox/mechanical, /obj/item/storage/toolbox/electrical, /obj/item/screwdriver, /obj/item/multitool, /obj/item/clothing/head/welding, /obj/effect/decal/warning_stripes/yellow/hollow, +/obj/machinery/newscaster{ + pixel_x = -32 + }, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -87875,12 +84754,10 @@ /turf/simulated/floor/plasteel, /area/hallway/primary/aft) "dDb" = ( -/obj/structure/disposalpipe/segment, /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -87907,13 +84784,13 @@ }, /area/hallway/primary/aft) "dDd" = ( -/obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ icon_state = "neutralcorner" }, @@ -88028,8 +84905,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -88079,8 +84955,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -88094,8 +84969,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -88110,8 +84984,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -88138,14 +85011,12 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, /obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, @@ -88157,8 +85028,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -88175,8 +85045,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -88191,8 +85060,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -88209,8 +85077,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -88224,8 +85091,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -88270,9 +85136,7 @@ /area/crew_quarters/theatre) "dDJ" = ( /obj/item/twohanded/required/kirbyplants, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/crew_quarters/theatre) "dDK" = ( /obj/item/twohanded/required/kirbyplants, @@ -88280,9 +85144,7 @@ dir = 1; pixel_y = -24 }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/crew_quarters/theatre) "dDL" = ( /obj/machinery/vending/cigarette, @@ -88335,8 +85197,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/cable{ d1 = 1; @@ -88349,8 +85210,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /turf/simulated/floor/plating, /area/maintenance/apmaint) @@ -88358,8 +85218,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /turf/simulated/floor/plasteel{ dir = 8; @@ -88375,8 +85234,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /turf/simulated/floor/plating, /area/maintenance/apmaint) @@ -88384,8 +85242,7 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /turf/simulated/floor/plasteel{ dir = 4; @@ -88412,26 +85269,29 @@ "dEl" = ( /obj/machinery/door/firedoor, /obj/effect/decal/warning_stripes/yellow, -/obj/machinery/door/airlock/public/glass, +/obj/machinery/door/airlock/public/glass{ + name = "Public Access" + }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel, /area/hallway/primary/aft) "dEm" = ( -/obj/structure/disposalpipe/segment, /obj/machinery/door/firedoor, /obj/effect/decal/warning_stripes/yellow, -/obj/machinery/door/airlock/public/glass, +/obj/machinery/door/airlock/public/glass{ + name = "Public Access" + }, /turf/simulated/floor/plasteel, /area/hallway/primary/aft) "dEn" = ( /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/effect/decal/warning_stripes/yellow/hollow, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -88504,8 +85364,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/effect/decal/warning_stripes/yellow, /turf/simulated/floor/plasteel, @@ -88589,8 +85448,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden{ dir = 9 @@ -88622,8 +85480,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /turf/simulated/floor/plasteel{ dir = 4; @@ -88646,8 +85503,7 @@ }, /obj/structure/sink{ dir = 8; - pixel_x = -12; - pixel_y = 2 + pixel_x = -12 }, /turf/simulated/floor/plating, /area/maintenance/apmaint) @@ -88669,16 +85525,8 @@ }, /area/maintenance/apmaint) "dER" = ( -/obj/machinery/camera{ - c_tag = "Experimention Lab"; - dir = 1; - network = list("Research","SS13") - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/engine, -/area/toxins/explab) +/turf/simulated/wall, +/area/hallway/primary/central/south) "dES" = ( /obj/structure/rack, /obj/effect/spawner/lootdrop/maintenance{ @@ -88760,9 +85608,6 @@ }, /area/hallway/primary/aft) "dFb" = ( -/obj/machinery/newscaster{ - pixel_x = 32 - }, /obj/machinery/light{ dir = 4 }, @@ -88770,6 +85615,9 @@ pixel_y = 24 }, /obj/item/twohanded/required/kirbyplants, +/obj/machinery/newscaster{ + pixel_x = 32 + }, /turf/simulated/floor/plasteel, /area/hallway/primary/aft) "dFc" = ( @@ -88823,8 +85671,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/barricade/wooden, /obj/machinery/door/airlock/maintenance, @@ -88871,14 +85718,14 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/effect/landmark{ name = "blobstart" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel, /area/maintenance/apmaint) "dFu" = ( @@ -88935,6 +85782,7 @@ pixel_x = -4; pixel_y = 4 }, +/obj/item/reagent_containers/spray/cleaner, /obj/machinery/button/windowtint{ id = 1; pixel_x = 24 @@ -89105,9 +85953,6 @@ /turf/simulated/floor/plasteel, /area/maintenance/apmaint) "dGa" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/effect/spawner/window/reinforced, /obj/structure/cable{ d2 = 4; @@ -89133,20 +85978,15 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel, /area/maintenance/apmaint) "dGh" = ( -/obj/machinery/power/apc{ - dir = 8; - name = "west bump"; - pixel_x = -24 - }, /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 4 }, @@ -89163,10 +86003,10 @@ }, /area/hallway/primary/aft) "dGm" = ( +/obj/machinery/vending/snack, /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/vending/snack, /turf/simulated/floor/plasteel, /area/hallway/primary/aft) "dGn" = ( @@ -89282,14 +86122,14 @@ /area/medical/virology) "dGx" = ( /obj/structure/table/glass, -/obj/machinery/newscaster{ - pixel_x = -32 - }, /obj/item/radio/intercom{ pixel_y = 28 }, /obj/item/paper_bin, /obj/machinery/atmospherics/unary/vent_pump/on, +/obj/machinery/newscaster{ + pixel_x = -32 + }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "whitegreencorner" @@ -89321,10 +86161,10 @@ /obj/machinery/light/small{ dir = 4 }, +/obj/machinery/atmospherics/unary/vent_scrubber/on, /obj/machinery/computer/security/telescreen/entertainment{ pixel_y = 32 }, -/obj/machinery/atmospherics/unary/vent_scrubber/on, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "whitegreencorner" @@ -89387,8 +86227,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /turf/simulated/floor/plasteel{ dir = 8; @@ -89456,7 +86295,6 @@ }, /area/hallway/primary/aft) "dGT" = ( -/obj/structure/closet/wardrobe/robotics_black, /obj/structure/window/reinforced{ dir = 4 }, @@ -89465,12 +86303,12 @@ dir = 1; pixel_y = -24 }, +/obj/machinery/vending/robodrobe, /turf/simulated/floor/plasteel{ icon_state = "white" }, /area/assembly/robotics) "dGU" = ( -/obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, @@ -89691,10 +86529,10 @@ "dHo" = ( /obj/structure/table/glass, /obj/item/flashlight/lamp, +/obj/machinery/atmospherics/unary/vent_pump/on, /obj/machinery/newscaster{ pixel_y = 32 }, -/obj/machinery/atmospherics/unary/vent_pump/on, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -89717,15 +86555,15 @@ /area/medical/virology) "dHq" = ( /obj/structure/table/glass, -/obj/machinery/computer/security/telescreen/entertainment{ - pixel_y = 32 - }, /obj/item/radio/intercom{ dir = 4; pixel_x = 28 }, -/obj/machinery/computer/med_data/laptop, /obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/machinery/computer/security/telescreen/entertainment{ + pixel_y = 32 + }, +/obj/machinery/computer/med_data/laptop, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -89746,9 +86584,7 @@ "dHt" = ( /obj/structure/bookcase, /obj/effect/decal/cleanable/cobweb2, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/library/abandoned) "dHu" = ( /obj/structure/table/wood, @@ -89799,14 +86635,12 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -89821,8 +86655,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -89846,8 +86679,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -89861,8 +86693,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -89878,8 +86709,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -89894,14 +86724,12 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 1; @@ -89920,8 +86748,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -89938,8 +86765,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -89956,8 +86782,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -89976,8 +86801,7 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 4; @@ -89988,6 +86812,7 @@ dir = 4; initialize_directions = 11 }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel, /area/maintenance/apmaint) "dHN" = ( @@ -90021,11 +86846,10 @@ }, /area/assembly/robotics) "dHS" = ( -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, /obj/machinery/vending/cigarette, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel, /area/hallway/primary/aft) "dHT" = ( @@ -90048,22 +86872,24 @@ /obj/machinery/light{ dir = 4 }, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/obj/machinery/disposal, /turf/simulated/floor/plasteel, /area/hallway/primary/aft) "dHX" = ( /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/mirror{ pixel_x = -32 }, /obj/structure/sink{ dir = 8; - pixel_x = -12; - pixel_y = 2 + pixel_x = -12 }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, @@ -90134,16 +86960,15 @@ }, /area/maintenance/port) "dIg" = ( -/obj/machinery/atmospherics/unary/portables_connector{ - dir = 4 - }, /obj/machinery/camera{ c_tag = "Research Toxins Mixing North"; dir = 4; network = list("Research","SS13"); pixel_y = -22 }, -/obj/machinery/portable_atmospherics/scrubber, +/obj/machinery/atmospherics/binary/pump{ + dir = 4 + }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "whitepurplecorner" @@ -90160,7 +86985,6 @@ /turf/simulated/floor/engine, /area/toxins/misc_lab) "dIi" = ( -/obj/structure/disposalpipe/segment, /obj/machinery/camera{ c_tag = "Research Central Hall"; dir = 8; @@ -90273,15 +87097,11 @@ "dIp" = ( /obj/structure/bookcase, /obj/effect/decal/cleanable/cobweb, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/library/abandoned) "dIq" = ( /obj/structure/bookcase, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/library/abandoned) "dIr" = ( /obj/effect/landmark{ @@ -90294,17 +87114,14 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /turf/simulated/floor/plasteel{ icon_state = "grimy" }, /area/library/abandoned) "dIu" = ( -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/library/abandoned) "dIv" = ( /obj/effect/landmark{ @@ -90336,6 +87153,10 @@ "dIC" = ( /obj/effect/decal/warning_stripes/yellow/hollow, /obj/structure/closet/wardrobe/toxins_white, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/obj/machinery/disposal, /turf/simulated/floor/plasteel{ dir = 10; icon_state = "neutral" @@ -90354,13 +87175,13 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/door/airlock/maintenance, /obj/effect/decal/warning_stripes/south, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel, /area/maintenance/apmaint) "dIH" = ( @@ -90368,13 +87189,17 @@ /area/hallway/secondary/exit) "dII" = ( /obj/structure/cable, -/obj/machinery/door/airlock/public/glass, +/obj/machinery/door/airlock/public/glass{ + name = "Public Access" + }, /obj/effect/decal/warning_stripes/south, /obj/machinery/door/firedoor, /turf/simulated/floor/plasteel, /area/hallway/secondary/exit) "dIJ" = ( -/obj/machinery/door/airlock/public/glass, +/obj/machinery/door/airlock/public/glass{ + name = "Public Access" + }, /obj/effect/decal/warning_stripes/south, /obj/machinery/door/firedoor, /turf/simulated/floor/plasteel, @@ -90397,8 +87222,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/camera{ c_tag = "Mech Lab"; @@ -90601,8 +87425,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /turf/simulated/floor/wood{ broken = 1; @@ -90613,19 +87436,15 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" - }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" + icon_state = "4-8" }, +/turf/simulated/floor/wood, /area/library/abandoned) "dJo" = ( /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /turf/simulated/floor/plasteel{ icon_state = "grimy" @@ -90707,19 +87526,27 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/effect/decal/warning_stripes/northwest, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, /turf/simulated/floor/plasteel, /area/hallway/secondary/exit) "dJC" = ( +/obj/effect/decal/warning_stripes/north, +/obj/structure/disposalpipe/sortjunction{ + dir = 4; + name = "Chapel Junction"; + sortType = 17 + }, /obj/machinery/newscaster{ pixel_y = 32 }, -/obj/effect/decal/warning_stripes/north, /turf/simulated/floor/plasteel, /area/hallway/secondary/exit) "dJD" = ( @@ -90872,7 +87699,7 @@ }, /area/medical/virology) "dJZ" = ( -/obj/structure/closet/wardrobe/virology_white, +/obj/machinery/vending/virodrobe, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -90934,11 +87761,11 @@ /area/chapel/office) "dKf" = ( /obj/structure/table/wood, -/obj/item/storage/fancy/candle_box{ +/obj/item/storage/fancy/candle_box/full{ pixel_x = 2; pixel_y = 3 }, -/obj/item/storage/fancy/candle_box, +/obj/item/storage/fancy/candle_box/full, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -90972,8 +87799,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -91009,8 +87835,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/effect/decal/warning_stripes/west, @@ -91027,8 +87852,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /turf/simulated/floor/plasteel{ dir = 8; @@ -91074,33 +87898,14 @@ /turf/simulated/floor/plating, /area/maintenance/starboardsolar) "dKz" = ( -/obj/effect/spawner/window/reinforced, -/obj/structure/cable{ - d2 = 4; - icon_state = "0-4" - }, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4"; - tag = "" - }, -/turf/simulated/floor/plating, -/area/medical/virology) +/obj/item/stack/cable_coil/random, +/turf/space, +/area/space) "dKA" = ( -/obj/effect/spawner/window/reinforced, -/obj/structure/cable{ - d2 = 2; - icon_state = "0-2" - }, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4"; - tag = "" - }, -/turf/simulated/floor/plating, -/area/medical/virology) +/obj/structure/lattice, +/obj/item/stack/cable_coil/random, +/turf/space, +/area/space/nearstation) "dKB" = ( /obj/effect/spawner/window/reinforced, /obj/structure/cable{ @@ -91162,8 +87967,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -91190,8 +87994,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -91200,14 +88003,14 @@ }, /area/chapel/main) "dKO" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/machinery/door/firedoor, /obj/machinery/door/airlock/centcom{ name = "Chapel"; opacity = 1 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -91227,18 +88030,15 @@ /turf/simulated/floor/plasteel, /area/hallway/secondary/exit) "dKV" = ( -/obj/structure/disposalpipe/segment, /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/effect/landmark/start{ name = "Medical Doctor" @@ -91251,6 +88051,7 @@ dir = 8; initialize_directions = 11 }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -91259,14 +88060,12 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/effect/decal/warning_stripes/yellow, /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ @@ -91284,8 +88083,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/door/airlock/maintenance{ name = "Crematorium Maintenance"; @@ -91301,8 +88099,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/effect/decal/warning_stripes/yellow, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -91318,8 +88115,7 @@ }, /obj/structure/sink{ dir = 8; - pixel_x = -12; - pixel_y = 2 + pixel_x = -12 }, /obj/effect/decal/warning_stripes/yellow/hollow, /turf/simulated/floor/plasteel, @@ -91350,8 +88146,7 @@ "dLd" = ( /obj/structure/sink{ dir = 8; - pixel_x = -12; - pixel_y = 2 + pixel_x = -12 }, /obj/structure/mirror{ pixel_x = -32 @@ -91408,10 +88203,10 @@ /obj/machinery/light/small{ dir = 1 }, -/mob/living/carbon/human/monkey, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/mob/living/carbon/human/monkey, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "whitegreencorner" @@ -91433,10 +88228,10 @@ /obj/machinery/light/small{ dir = 1 }, -/mob/living/carbon/human/monkey, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/mob/living/carbon/human/monkey, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "whitegreencorner" @@ -91463,8 +88258,7 @@ /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /turf/simulated/floor/plasteel{ dir = 8; @@ -91495,8 +88289,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/effect/landmark/start{ name = "Chaplain" @@ -91527,8 +88320,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 4; @@ -91554,13 +88346,13 @@ }, /area/chapel/main) "dLx" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, /obj/structure/disposalpipe/segment{ dir = 4; icon_state = "pipe-c" }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, /turf/simulated/floor/plasteel{ icon_state = "grimy" }, @@ -91574,9 +88366,6 @@ }, /area/chapel/main) "dLz" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/structure/cable{ d1 = 1; d2 = 4; @@ -91585,31 +88374,36 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/effect/decal/warning_stripes/west, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel, /area/hallway/secondary/exit) "dLA" = ( +/obj/effect/decal/warning_stripes/yellow, /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/effect/decal/warning_stripes/yellow, /turf/simulated/floor/plasteel, /area/hallway/secondary/exit) "dLD" = ( -/obj/machinery/door/airlock/public/glass, -/obj/structure/disposalpipe/segment, +/obj/machinery/door/airlock/public/glass{ + name = "Public Access" + }, /obj/effect/decal/warning_stripes/south, /obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel, /area/hallway/secondary/exit) "dLE" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" }, /turf/simulated/floor/plasteel{ dir = 8; @@ -91625,8 +88419,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /turf/simulated/floor/plasteel{ dir = 8; @@ -91637,8 +88430,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /turf/simulated/floor/plasteel{ dir = 8; @@ -91649,17 +88441,12 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/effect/decal/warning_stripes/east, /turf/simulated/floor/plasteel, /area/hallway/secondary/exit) "dLI" = ( -/obj/machinery/navbeacon{ - codes_txt = "patrol;next_patrol=hall8"; - location = "hall7" - }, /obj/machinery/door/airlock/security/glass{ name = "Holding Area"; req_access_txt = "63" @@ -91667,8 +88454,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/cable{ d1 = 2; @@ -91681,6 +88467,10 @@ icon_state = "2-8" }, /obj/machinery/door/firedoor, +/obj/machinery/navbeacon{ + codes_txt = "patrol;next_patrol=hall8"; + location = "hall7" + }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralfull" @@ -91697,7 +88487,6 @@ /turf/simulated/floor/plasteel, /area/hallway/secondary/exit) "dLP" = ( -/obj/structure/disposalpipe/segment, /obj/machinery/door/firedoor, /obj/structure/cable{ d1 = 1; @@ -91713,6 +88502,7 @@ /obj/machinery/holosign/surgery{ id = "surgery2" }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -91729,24 +88519,36 @@ }, /area/medical/virology) "dLR" = ( -/obj/structure/chair/office/dark{ - dir = 1 - }, -/turf/simulated/floor/plasteel{ - icon_state = "whitegreen" - }, -/area/medical/virology) -"dLT" = ( /obj/structure/cable{ d1 = 1; d2 = 2; icon_state = "1-2"; tag = "" }, +/obj/structure/table/glass, +/obj/structure/reagent_dispensers/virusfood{ + pixel_x = -32 + }, +/obj/machinery/reagentgrinder, +/obj/effect/decal/warning_stripes/east, /turf/simulated/floor/plasteel{ - icon_state = "whitegreen" + dir = 1; + icon_state = "whitegreencorner" }, /area/medical/virology) +"dLT" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "neutralfull" + }, +/area/hallway/primary/central/south) "dLU" = ( /obj/structure/cable{ d1 = 4; @@ -91791,15 +88593,11 @@ dir = 4; pixel_x = -24 }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/library/abandoned) "dMd" = ( /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/library/abandoned) "dMe" = ( /obj/item/twohanded/required/kirbyplants, @@ -91882,9 +88680,6 @@ /turf/simulated/floor/plasteel, /area/hallway/secondary/exit) "dMr" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -91895,13 +88690,6 @@ /turf/simulated/floor/plasteel, /area/hallway/secondary/exit) "dMs" = ( -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -91924,6 +88712,31 @@ /turf/simulated/floor/plasteel, /area/medical/virology) "dMw" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + tag = "" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4"; + tag = "" + }, +/obj/machinery/smartfridge/secure/chemistry/virology/preloaded, +/obj/effect/decal/warning_stripes/east, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "whitegreen" + }, +/area/medical/virology) +"dMx" = ( /obj/structure/cable{ d1 = 4; d2 = 8; @@ -91935,7 +88748,7 @@ icon_state = "whitegreen" }, /area/medical/virology) -"dMx" = ( +"dMy" = ( /obj/structure/disposalpipe/segment{ dir = 4; icon_state = "pipe-c" @@ -91962,26 +88775,6 @@ icon_state = "whitegreen" }, /area/medical/virology) -"dMy" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - tag = "" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/turf/simulated/floor/plasteel{ - icon_state = "white" - }, -/area/medical/virology) "dMz" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -91997,12 +88790,6 @@ d2 = 4; icon_state = "1-4" }, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4"; - tag = "" - }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, @@ -92015,22 +88802,13 @@ }, /area/medical/virology) "dMA" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2"; - tag = "" +/obj/item/storage/secure/safe{ + pixel_x = 32 }, -/obj/structure/table/glass, -/obj/item/clothing/gloves/color/latex, -/obj/item/healthanalyzer, -/obj/item/clothing/glasses/hud/health, -/obj/effect/decal/warning_stripes/southeastcorner, /turf/simulated/floor/plasteel{ - dir = 1; - icon_state = "whitegreencorner" + icon_state = "grimy" }, -/area/medical/virology) +/area/security/detectives_office) "dMB" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -92117,19 +88895,17 @@ }, /area/medical/virology) "dMG" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + tag = "" + }, /obj/structure/table/glass, -/obj/item/folder/white, -/obj/item/pen/red, -/obj/item/stack/sheet/mineral/plasma{ - amount = 5 - }, -/obj/machinery/requests_console{ - department = "Virology"; - departmentType = 3; - name = "Virology Requests Console"; - pixel_y = 30 - }, -/obj/effect/decal/warning_stripes/south, +/obj/item/clothing/gloves/color/latex, +/obj/item/healthanalyzer, +/obj/item/clothing/glasses/hud/health, +/obj/effect/decal/warning_stripes/southeastcorner, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "whitegreencorner" @@ -92147,9 +88923,7 @@ /obj/structure/table/wood, /obj/item/paper_bin, /obj/item/pen, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/library/abandoned) "dMJ" = ( /obj/structure/chair/office/dark, @@ -92191,8 +88965,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/effect/landmark{ name = "blobstart" @@ -92239,8 +89012,8 @@ }, /area/chapel/main) "dMW" = ( -/obj/structure/disposalpipe/segment, /obj/structure/chair/wood, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "chapel" @@ -92296,20 +89069,46 @@ }, /area/hallway/secondary/exit) "dNi" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2"; - tag = "" +/obj/structure/table/glass, +/obj/item/folder/white, +/obj/item/pen/red, +/obj/item/stack/sheet/mineral/plasma{ + amount = 5 }, +/obj/machinery/requests_console{ + department = "Virology"; + departmentType = 3; + name = "Virology Requests Console"; + pixel_y = 30 + }, +/obj/effect/decal/warning_stripes/south, /obj/machinery/computer/pandemic, -/obj/effect/decal/warning_stripes/southeast, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "whitegreencorner" }, /area/medical/virology) "dNj" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + tag = "" + }, +/obj/structure/table/glass, +/obj/item/reagent_containers/spray/cleaner, +/obj/item/reagent_containers/dropper, +/obj/machinery/alarm{ + dir = 4; + pixel_x = -24 + }, +/obj/effect/decal/warning_stripes/east, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "whitegreencorner" + }, +/area/medical/virology) +"dNk" = ( /obj/structure/chair/office/dark{ dir = 8 }, @@ -92321,7 +89120,7 @@ icon_state = "whitegreen" }, /area/medical/virology) -"dNk" = ( +"dNl" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable{ d1 = 1; @@ -92334,7 +89133,7 @@ icon_state = "whitegreen" }, /area/medical/virology) -"dNl" = ( +"dNm" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 1 }, @@ -92343,19 +89142,7 @@ icon_state = "whitegreen" }, /area/medical/virology) -"dNm" = ( -/turf/simulated/floor/plasteel{ - dir = 1; - icon_state = "whitegreen" - }, -/area/medical/virology) "dNn" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2"; - tag = "" - }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "whitegreen" @@ -92368,8 +89155,7 @@ "dNs" = ( /obj/structure/sink{ dir = 8; - pixel_x = -12; - pixel_y = 2 + pixel_x = -12 }, /turf/simulated/floor/plasteel{ dir = 1; @@ -92428,9 +89214,7 @@ /obj/structure/table/wood, /obj/item/folder, /obj/item/pen, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/library/abandoned) "dNz" = ( /obj/item/twohanded/required/kirbyplants, @@ -92442,16 +89226,12 @@ /area/library/abandoned) "dNA" = ( /obj/structure/table/wood, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/library/abandoned) "dNB" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/library/abandoned) "dNC" = ( /obj/machinery/light/small, @@ -92461,9 +89241,7 @@ "dND" = ( /obj/structure/table/wood, /obj/item/storage/fancy/crayons, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/library/abandoned) "dNE" = ( /obj/structure/table/wood, @@ -92495,14 +89273,13 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" - }, -/obj/machinery/newscaster{ - pixel_x = 32 + icon_state = "2-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/newscaster{ + pixel_x = 32 + }, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -92522,8 +89299,8 @@ }, /area/chapel/main) "dNM" = ( -/obj/structure/disposalpipe/segment, /obj/structure/chair/wood, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "chapel" @@ -92574,6 +89351,19 @@ /turf/space, /area/space) "dNW" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + tag = "" + }, +/obj/effect/decal/warning_stripes/southeast, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "whitegreencorner" + }, +/area/medical/virology) +"dNX" = ( /obj/structure/filingcabinet/chestdrawer, /obj/effect/decal/warning_stripes/yellow/hollow, /turf/simulated/floor/plasteel{ @@ -92581,7 +89371,7 @@ icon_state = "whitegreen" }, /area/medical/virology) -"dNX" = ( +"dNY" = ( /obj/machinery/light{ dir = 1; on = 1 @@ -92602,19 +89392,6 @@ icon_state = "whitegreencorner" }, /area/medical/virology) -"dNY" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2"; - tag = "" - }, -/obj/effect/decal/warning_stripes/yellow/hollow, -/turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "whitegreencorner" - }, -/area/medical/virology) "dNZ" = ( /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ @@ -92628,23 +89405,16 @@ }, /area/medical/surgery) "dOc" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2"; - tag = "" +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 }, -/obj/structure/table/glass, -/obj/structure/reagent_dispensers/virusfood{ - pixel_x = -32 +/obj/structure/window/reinforced/polarized, +/obj/effect/decal/warning_stripes/south, +/obj/machinery/computer/rdconsole/robotics{ + dir = 1 }, -/obj/machinery/reagentgrinder, -/obj/effect/decal/warning_stripes/east, -/turf/simulated/floor/plasteel{ - dir = 1; - icon_state = "whitegreencorner" - }, -/area/medical/virology) +/turf/simulated/floor/plasteel, +/area/assembly/robotics) "dOd" = ( /turf/simulated/floor/plasteel{ dir = 8; @@ -92766,6 +89536,7 @@ }, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, /obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/machinery/hologram/holopad, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -92826,8 +89597,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/effect/decal/cleanable/dirt, /obj/machinery/light/small{ @@ -92842,8 +89612,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/door/airlock/centcom{ name = "Chapel Morgue"; @@ -92921,6 +89690,16 @@ }, /area/hallway/secondary/exit) "dOD" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/r_n_d/circuit_imprinter, +/obj/item/reagent_containers/glass/beaker/sulphuric, +/obj/structure/window/reinforced/polarized, +/obj/effect/decal/warning_stripes/south, +/turf/simulated/floor/plasteel, +/area/assembly/robotics) +"dOE" = ( /obj/effect/spawner/window/reinforced, /obj/structure/cable{ d2 = 4; @@ -92934,26 +89713,21 @@ }, /turf/simulated/floor/plating, /area/medical/virology) -"dOE" = ( -/obj/effect/spawner/window/reinforced, -/obj/structure/cable, +"dOF" = ( /obj/structure/cable{ d1 = 1; d2 = 8; - icon_state = "1-8" + icon_state = "1-8"; + tag = "" }, -/turf/simulated/floor/plating, -/area/medical/virology) -"dOF" = ( -/obj/effect/spawner/window/reinforced, -/obj/structure/cable, /obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" + d1 = 2; + d2 = 8; + icon_state = "2-8" }, -/turf/simulated/floor/plating, -/area/medical/virology) +/obj/structure/lattice/catwalk, +/turf/space, +/area/maintenance/starboardsolar) "dOG" = ( /obj/machinery/light{ dir = 8 @@ -92986,8 +89760,7 @@ }, /obj/structure/sink{ dir = 8; - pixel_x = -12; - pixel_y = 2 + pixel_x = -12 }, /turf/simulated/floor/plasteel{ dir = 8; @@ -93029,9 +89802,6 @@ }, /obj/structure/table/glass, /obj/item/paper_bin, -/obj/machinery/newscaster{ - pixel_x = 32 - }, /obj/machinery/camera{ c_tag = "Mining Dock External"; dir = 8 @@ -93040,6 +89810,9 @@ /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 1 }, +/obj/machinery/newscaster{ + pixel_x = 32 + }, /turf/simulated/floor/plasteel{ dir = 5; icon_state = "whitegreencorner" @@ -93059,8 +89832,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /turf/simulated/floor/plating, /area/maintenance/apmaint) @@ -93099,8 +89871,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /turf/simulated/floor/plasteel{ dir = 4; @@ -93111,8 +89882,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /turf/simulated/floor/plasteel{ dir = 1; @@ -93207,7 +89977,6 @@ }, /area/medical/virology) "dPn" = ( -/obj/structure/disposalpipe/segment, /obj/structure/cable{ d1 = 1; d2 = 2; @@ -93215,6 +89984,7 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ icon_state = "whiteblue" }, @@ -93270,9 +90040,11 @@ /area/maintenance/apmaint) "dPu" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/public/glass, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/door/airlock/public/glass{ + name = "Public Access" + }, /turf/simulated/floor/plasteel, /area/hallway/primary/aft) "dPv" = ( @@ -93303,8 +90075,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -93577,8 +90348,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -93589,6 +90359,9 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralfull" @@ -93722,7 +90495,6 @@ }, /area/assembly/robotics) "dQr" = ( -/obj/structure/disposalpipe/segment, /obj/machinery/power/apc{ dir = 4; name = "east bump"; @@ -93732,6 +90504,7 @@ d2 = 2; icon_state = "0-2" }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ icon_state = "neutralcorner" }, @@ -93740,8 +90513,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/door/airlock/maintenance, /turf/simulated/floor/plasteel, @@ -93763,16 +90535,10 @@ }, /area/medical/surgery2) "dQv" = ( +/obj/effect/spawner/window/reinforced, /obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - tag = "" - }, -/obj/structure/cable{ - d1 = 1; d2 = 4; - icon_state = "1-4" + icon_state = "0-4" }, /obj/structure/cable{ d1 = 2; @@ -93780,12 +90546,7 @@ icon_state = "2-4"; tag = "" }, -/obj/machinery/smartfridge/secure/chemistry/virology/preloaded, -/obj/effect/decal/warning_stripes/east, -/turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "whitegreen" - }, +/turf/simulated/floor/plating, /area/medical/virology) "dQw" = ( /obj/structure/disposalpipe/segment{ @@ -93892,32 +90653,26 @@ name = "revenantspawn" }, /obj/effect/decal/warning_stripes/yellow, -/mob/living/carbon/human/monkey, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/mob/living/carbon/human/monkey, /turf/simulated/floor/plasteel{ icon_state = "whitegreen" }, /area/medical/virology) "dQH" = ( +/obj/effect/spawner/window/reinforced, /obj/structure/cable{ - d1 = 1; d2 = 2; - icon_state = "1-2"; + icon_state = "0-2" + }, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4"; tag = "" }, -/obj/structure/table/glass, -/obj/item/reagent_containers/spray/cleaner, -/obj/item/reagent_containers/dropper, -/obj/machinery/alarm{ - dir = 4; - pixel_x = -24 - }, -/obj/effect/decal/warning_stripes/east, -/turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "whitegreencorner" - }, +/turf/simulated/floor/plating, /area/medical/virology) "dQI" = ( /obj/effect/decal/warning_stripes/north, @@ -93984,7 +90739,7 @@ pixel_y = -25 }, /obj/effect/decal/warning_stripes/yellow, -/turf/simulated/floor/plasteel, +/turf/simulated/floor/plating, /area/maintenance/portsolar) "dQM" = ( /obj/structure/cable{ @@ -94173,6 +90928,16 @@ /turf/simulated/floor/plasteel, /area/maintenance/portsolar) "dRf" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plasteel{ + icon_state = "whitegreen" + }, +/area/medical/virology) +"dRg" = ( /obj/structure/cable{ d1 = 1; d2 = 2; @@ -94188,7 +90953,7 @@ icon_state = "whitegreencorner" }, /area/medical/virology) -"dRg" = ( +"dRh" = ( /obj/structure/table/glass, /obj/structure/sign/deathsposal{ pixel_y = -32 @@ -94200,7 +90965,7 @@ icon_state = "whitegreencorner" }, /area/medical/virology) -"dRh" = ( +"dRi" = ( /obj/machinery/disposal, /obj/structure/disposalpipe/trunk{ dir = 1 @@ -94217,13 +90982,6 @@ icon_state = "whitegreencorner" }, /area/medical/virology) -"dRi" = ( -/obj/item/twohanded/required/kirbyplants, -/obj/effect/decal/warning_stripes/yellow/hollow, -/turf/simulated/floor/plasteel{ - icon_state = "whitegreen" - }, -/area/medical/virology) "dRj" = ( /obj/effect/decal/warning_stripes/north, /turf/simulated/floor/plasteel, @@ -94259,8 +91017,8 @@ }, /area/maintenance/apmaint) "dRn" = ( -/obj/machinery/hologram/holopad, /obj/effect/decal/warning_stripes/yellow/hollow, +/obj/machinery/hologram/holopad, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralfull" @@ -94268,11 +91026,12 @@ /area/hallway/secondary/exit) "dRo" = ( /obj/structure/cable, +/obj/effect/decal/warning_stripes/southwest, /obj/machinery/power/solar_control{ + dir = 4; id = "portsolar"; name = "Aft Port Solar Control" }, -/obj/effect/decal/warning_stripes/southwest, /turf/simulated/floor/plating, /area/maintenance/portsolar) "dRp" = ( @@ -94301,10 +91060,10 @@ /obj/item/clothing/gloves/color/black, /obj/item/clothing/suit/storage/hazardvest, /obj/item/clothing/mask/breath, +/obj/item/reagent_containers/food/drinks/coffee, /obj/machinery/newscaster{ pixel_x = 32 }, -/obj/item/reagent_containers/food/drinks/coffee, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -94323,8 +91082,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -94644,12 +91402,6 @@ icon_state = "dark" }, /area/chapel/office) -"dSl" = ( -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plasteel{ - icon_state = "dark" - }, -/area/chapel/office) "dSm" = ( /obj/machinery/light_switch{ pixel_x = 24; @@ -94721,6 +91473,17 @@ }, /turf/simulated/floor/plasteel, /area/hallway/secondary/exit) +"dSz" = ( +/obj/structure/window/reinforced{ + dir = 1; + layer = 2.9 + }, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/lattice, +/turf/space, +/area/space/nearstation) "dSA" = ( /obj/structure/table/reinforced, /obj/item/stack/sheet/metal/fifty{ @@ -94824,8 +91587,8 @@ }, /area/chapel/office) "dSK" = ( -/obj/machinery/hologram/holopad, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/hologram/holopad, /turf/simulated/floor/plasteel{ icon_state = "grimy" }, @@ -94836,13 +91599,6 @@ icon_state = "grimy" }, /area/chapel/office) -"dSM" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/chair/office/dark, -/turf/simulated/floor/plasteel{ - icon_state = "grimy" - }, -/area/chapel/office) "dSN" = ( /obj/item/twohanded/required/kirbyplants, /turf/simulated/floor/plasteel{ @@ -94879,7 +91635,10 @@ /area/maintenance/apmaint) "dST" = ( /obj/effect/decal/warning_stripes/north, -/obj/structure/disposalpipe/segment, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, /turf/simulated/floor/plasteel, /area/hallway/secondary/exit) "dSU" = ( @@ -94894,7 +91653,6 @@ }, /area/hallway/secondary/exit) "dSV" = ( -/obj/structure/disposalpipe/segment, /obj/machinery/alarm{ dir = 4; pixel_x = -24 @@ -94928,13 +91686,6 @@ }, /turf/simulated/floor/plating, /area/hallway/secondary/exit) -"dSZ" = ( -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "neutralfull" - }, -/area/hallway/secondary/exit) "dTa" = ( /obj/structure/flora/ausbushes/ywflowers, /obj/structure/flora/ausbushes/brflowers, @@ -94947,9 +91698,6 @@ /turf/simulated/floor/grass, /area/hallway/secondary/exit) "dTe" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/machinery/door/firedoor, /obj/machinery/door/airlock/research/glass{ name = "Experimentor"; @@ -94961,6 +91709,9 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -94997,7 +91748,6 @@ /turf/simulated/floor/plasteel, /area/hallway/secondary/exit) "dTi" = ( -/obj/structure/disposalpipe/segment, /obj/machinery/power/apc{ dir = 8; name = "west bump"; @@ -95119,9 +91869,7 @@ }, /area/chapel/office) "dTs" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -95136,11 +91884,7 @@ }, /area/chapel/office) "dTu" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, +/obj/machinery/atmospherics/unary/vent_scrubber/on, /turf/simulated/floor/plasteel{ icon_state = "whitegreen" }, @@ -95155,20 +91899,15 @@ icon_state = "4-8"; tag = "" }, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 + dir = 5 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 + dir = 6 }, +/obj/machinery/hologram/holopad, /turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "whitegreen" + icon_state = "white" }, /area/medical/virology) "dTw" = ( @@ -95280,34 +92019,16 @@ }, /area/hallway/secondary/exit) "dTJ" = ( -/obj/structure/disposalpipe/segment, /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "red" }, /area/hallway/secondary/exit) -"dTK" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - tag = "" - }, -/obj/structure/disposalpipe/sortjunction{ - name = "Chapel Junction"; - sortType = 17 - }, -/turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "neutralfull" - }, -/area/hallway/secondary/exit) "dTV" = ( /obj/machinery/power/solar{ name = "Aft Starboard Solar Panel" @@ -95399,7 +92120,7 @@ /area/chapel/office) "dUf" = ( /obj/structure/table/wood, -/obj/item/storage/fancy/donut_box, +/obj/item/reagent_containers/food/drinks/bottle/holywater, /turf/simulated/floor/carpet, /area/chapel/office) "dUg" = ( @@ -95434,7 +92155,6 @@ /turf/simulated/floor/plasteel, /area/hallway/secondary/exit) "dUk" = ( -/obj/structure/disposalpipe/segment, /obj/structure/cable{ d1 = 1; d2 = 8; @@ -95675,11 +92395,11 @@ /area/chapel/office) "dUL" = ( /obj/structure/table/wood, -/obj/item/storage/fancy/candle_box{ +/obj/item/storage/fancy/candle_box/full{ pixel_x = 2; pixel_y = 3 }, -/obj/item/storage/fancy/candle_box, +/obj/item/storage/fancy/candle_box/full, /turf/simulated/floor/plasteel{ icon_state = "grimy" }, @@ -95728,17 +92448,17 @@ /area/chapel/office) "dUQ" = ( /obj/structure/table/wood, -/obj/machinery/newscaster{ - pixel_x = 32 - }, /obj/machinery/light{ dir = 4 }, -/obj/item/storage/fancy/candle_box{ +/obj/item/storage/fancy/candle_box/full{ pixel_x = 2; pixel_y = 3 }, -/obj/item/storage/fancy/candle_box, +/obj/item/storage/fancy/candle_box/full, +/obj/machinery/newscaster{ + pixel_x = 32 + }, /turf/simulated/floor/carpet, /area/chapel/office) "dUR" = ( @@ -95762,22 +92482,6 @@ /obj/effect/decal/warning_stripes/southwest, /turf/simulated/floor/plasteel, /area/hallway/secondary/exit) -"dUU" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "neutralfull" - }, -/area/hallway/secondary/exit) "dUY" = ( /obj/machinery/light, /obj/machinery/alarm{ @@ -95818,27 +92522,11 @@ temperature = 80 }, /area/toxins/server) -"dVe" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "neutralfull" - }, -/area/hallway/secondary/exit) "dVj" = ( /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -95876,8 +92564,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /turf/simulated/floor/plasteel{ dir = 8; @@ -95910,11 +92597,6 @@ icon_state = "dark" }, /area/medical/cmo) -"dVw" = ( -/obj/machinery/disposal, -/obj/structure/disposalpipe/trunk, -/turf/simulated/floor/plasteel, -/area/hallway/primary/aft) "dVx" = ( /obj/structure/table/wood, /obj/item/ashtray/plastic, @@ -95937,8 +92619,7 @@ /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /obj/effect/decal/warning_stripes/east, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -96003,8 +92684,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/effect/decal/cleanable/dirt, /obj/effect/decal/warning_stripes/yellow, @@ -96016,8 +92696,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/door/airlock/maintenance{ @@ -96036,14 +92715,14 @@ /turf/simulated/floor/plating, /area/engine/engineering) "dWj" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/machinery/door/firedoor, /obj/machinery/door/airlock/research/glass{ name = "Research Division"; req_access_txt = "47" }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -96057,8 +92736,7 @@ /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /obj/effect/decal/warning_stripes/yellow, /turf/simulated/floor/plasteel{ @@ -96069,8 +92747,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/effect/decal/warning_stripes/yellow/hollow, /obj/machinery/atmospherics/unary/vent_scrubber/on{ @@ -96091,8 +92768,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/door/airlock/maintenance, /turf/simulated/floor/plasteel, @@ -96101,8 +92777,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/door/airlock/maintenance{ name = "Toxin Mixing Lab Maintenance"; @@ -96111,12 +92786,12 @@ /turf/simulated/floor/plasteel, /area/toxins/mixing) "dWp" = ( -/obj/structure/disposalpipe/trunk, -/obj/machinery/disposal, /obj/structure/window/reinforced{ dir = 4 }, /obj/effect/decal/warning_stripes/yellow/hollow, +/obj/structure/disposalpipe/trunk, +/obj/machinery/disposal, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -96125,8 +92800,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/door/window/brigdoor{ dir = 1; @@ -96158,8 +92832,6 @@ }, /area/toxins/xenobiology) "dWs" = ( -/obj/structure/disposalpipe/trunk, -/obj/machinery/disposal, /obj/structure/window/reinforced{ dir = 4 }, @@ -96168,6 +92840,8 @@ pixel_y = -32 }, /obj/effect/decal/warning_stripes/yellow/hollow, +/obj/structure/disposalpipe/trunk, +/obj/machinery/disposal, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -96188,10 +92862,10 @@ }, /area/toxins/xenobiology) "dWu" = ( +/obj/effect/decal/warning_stripes/yellow/hollow, /obj/machinery/newscaster{ pixel_y = -32 }, -/obj/effect/decal/warning_stripes/yellow/hollow, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -96226,8 +92900,7 @@ /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /obj/machinery/atmospherics/pipe/simple/hidden{ dir = 4 @@ -96240,8 +92913,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden{ dir = 4 @@ -96307,12 +92979,12 @@ /turf/simulated/floor/plating, /area/hallway/secondary/exit) "dWK" = ( -/obj/machinery/hologram/holopad, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 4; initialize_directions = 11 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/hologram/holopad, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralfull" @@ -96322,17 +92994,16 @@ /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 4 }, -/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralfull" }, /area/hallway/primary/aft) "dWM" = ( -/obj/structure/disposalpipe/junction{ - dir = 8 - }, /obj/machinery/vending/coffee, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel, /area/hallway/primary/aft) "dWN" = ( @@ -96342,22 +93013,12 @@ icon_state = "dark" }, /area/medical/cmo) -"dWO" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/door/firedoor, -/obj/effect/decal/warning_stripes/yellow, -/turf/simulated/floor/plasteel{ - icon_state = "neutralcorner" - }, -/area/hallway/primary/central) "dWP" = ( +/obj/effect/decal/warning_stripes/yellow, /obj/structure/disposalpipe/trunk{ dir = 1 }, /obj/machinery/disposal, -/obj/effect/decal/warning_stripes/yellow, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralfull" @@ -96382,22 +93043,15 @@ /area/hallway/primary/central) "dWS" = ( /obj/item/twohanded/required/kirbyplants, -/obj/machinery/light, -/obj/machinery/status_display{ - pixel_y = -32 - }, /obj/effect/decal/warning_stripes/yellow/hollow, /turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "whitegreencorner" + icon_state = "whitegreen" }, /area/medical/virology) "dWT" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2"; - tag = "" +/obj/machinery/light, +/obj/machinery/status_display{ + pixel_y = -32 }, /obj/effect/decal/warning_stripes/yellow/hollow, /turf/simulated/floor/plasteel{ @@ -96470,8 +93124,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/door/airlock/maintenance{ @@ -96564,9 +93217,10 @@ }, /area/medical/virology) "dXj" = ( -/obj/structure/disposalpipe/segment, /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/public/glass, +/obj/machinery/door/airlock/public/glass{ + name = "Public Access" + }, /turf/simulated/floor/plasteel, /area/hallway/primary/aft) "dXk" = ( @@ -96592,7 +93246,6 @@ /turf/simulated/floor/plasteel, /area/maintenance/apmaint) "dXm" = ( -/obj/structure/disposalpipe/segment, /obj/machinery/door/airlock/security/glass{ name = "Holding Area"; req_access_txt = "63" @@ -96655,8 +93308,9 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 9 }, -/obj/effect/decal/warning_stripes/east, -/obj/item/twohanded/required/kirbyplants, +/obj/effect/decal/warning_stripes/southeast, +/obj/structure/filingcabinet/chestdrawer, +/obj/structure/window/reinforced/polarized, /turf/simulated/floor/plasteel, /area/assembly/robotics) "dXs" = ( @@ -96702,13 +93356,13 @@ }, /area/medical/research) "dXw" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ icon_state = "showroomfloor" }, @@ -96832,13 +93486,13 @@ c_tag = "Chapel South"; dir = 1 }, -/obj/machinery/hologram/holopad, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 9 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 5 }, +/obj/machinery/hologram/holopad, /turf/simulated/floor/plasteel{ icon_state = "grimy" }, @@ -96861,6 +93515,9 @@ pixel_y = 24 }, /obj/effect/decal/warning_stripes/southwest, +/obj/machinery/newscaster{ + pixel_y = -30 + }, /turf/simulated/floor/plasteel, /area/hallway/secondary/exit) "dXQ" = ( @@ -96964,21 +93621,24 @@ /obj/structure/table/glass, /obj/item/clipboard, /obj/item/toy/figure/crew/geneticist, +/obj/structure/extinguisher_cabinet{ + pixel_y = 30 + }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "whitepurplecorner" }, /area/medical/genetics) "dYc" = ( -/obj/machinery/newscaster{ - pixel_y = 32 - }, /obj/structure/table/glass, /obj/item/storage/box/beakers{ pixel_x = 5; pixel_y = 5 }, /obj/item/storage/box/masks, +/obj/machinery/newscaster{ + pixel_y = 32 + }, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "whitepurplecorner" @@ -96993,15 +93653,10 @@ }, /area/medical/genetics) "dYi" = ( -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" - }, /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -97029,19 +93684,7 @@ icon_state = "whitepurplecorner" }, /area/medical/genetics) -"dYk" = ( -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" - }, -/turf/simulated/floor/plasteel{ - icon_state = "white" - }, -/area/medical/genetics) "dYl" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 1 }, @@ -97091,9 +93734,7 @@ /area/maintenance/gambling_den) "dYu" = ( /obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plasteel{ - icon_state = "wood" - }, +/turf/simulated/floor/wood, /area/maintenance/gambling_den) "dYw" = ( /obj/effect/decal/warning_stripes/northwest, @@ -97369,14 +94010,24 @@ /area/chapel/office) "dYV" = ( /obj/structure/rack, +/obj/item/storage/secure/briefcase, /obj/machinery/newscaster{ pixel_y = -32 }, -/obj/item/storage/secure/briefcase, /turf/simulated/floor/plasteel{ icon_state = "dark" }, /area/crew_quarters/chief) +"dZb" = ( +/obj/machinery/camera{ + c_tag = "Research Hallway"; + network = list("Research","SS13") + }, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "whitepurplecorner" + }, +/area/medical/research) "dZi" = ( /obj/docking_port/stationary{ dir = 4; @@ -97480,8 +94131,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 10 @@ -97497,6 +94147,12 @@ }, /turf/simulated/floor/plasteel, /area/security/permasolitary) +"elb" = ( +/obj/machinery/door/airlock/external{ + name = "Escape Pod" + }, +/turf/space, +/area/maintenance/port) "emr" = ( /obj/effect/spawner/window/reinforced, /obj/structure/cable, @@ -97507,6 +94163,24 @@ }, /turf/simulated/floor/plating, /area/security/prisonershuttle) +"emK" = ( +/obj/machinery/door/poddoor/shutters/preopen{ + dir = 2; + id_tag = "researchdesk1"; + name = "Research Desk Shutters" + }, +/obj/machinery/autolathe, +/obj/machinery/door/window/southleft{ + name = "Research Lab Desk"; + req_access_txt = "7" + }, +/obj/machinery/door/window/northleft, +/obj/structure/window/reinforced{ + dir = 8; + pixel_x = -4 + }, +/turf/simulated/floor/plating, +/area/toxins/lab) "eqc" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/unary/vent_pump/on, @@ -97549,6 +94223,25 @@ /obj/effect/decal/warning_stripes/northwest, /turf/simulated/floor/plasteel, /area/security/securearmoury) +"esK" = ( +/obj/machinery/atmospherics/pipe/simple/insulated{ + dir = 4 + }, +/obj/structure/window/plasmareinforced{ + dir = 4 + }, +/obj/structure/window/plasmareinforced{ + dir = 8 + }, +/obj/structure/grille, +/obj/structure/window/plasmareinforced{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/toxins/mixing) +"euc" = ( +/turf/simulated/wall/r_wall, +/area/hallway/primary/central/south) "eud" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 1 @@ -97565,6 +94258,18 @@ }, /turf/simulated/floor/plasteel, /area/security/permasolitary) +"ewj" = ( +/obj/structure/railing{ + dir = 1 + }, +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/turf/simulated/floor/plasteel{ + icon_state = "white" + }, +/area/medical/research) "ewF" = ( /obj/structure/cable{ d2 = 2; @@ -97578,9 +94283,6 @@ dir = 4 }, /obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "purplecorner" @@ -97595,6 +94297,13 @@ icon_state = "neutral" }, /area/maintenance/starboard) +"eAi" = ( +/obj/structure/window/reinforced{ + dir = 1; + layer = 2.9 + }, +/turf/space, +/area/space) "eCs" = ( /obj/structure/cable{ d1 = 4; @@ -97605,7 +94314,10 @@ /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 8 }, -/turf/simulated/floor/plasteel, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "neutralfull" + }, /area/security/permabrig) "eDh" = ( /obj/structure/rack, @@ -97651,9 +94363,9 @@ /area/security/brig) "eNm" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/command/glass{ - name = "Corporate Lounge"; - req_one_access_txt = "19" +/obj/machinery/door/airlock/public/glass{ + id_tag = "pub_room"; + name = "Public Meeting Room" }, /turf/simulated/floor/carpet, /area/assembly/showroom) @@ -97661,14 +94373,12 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 10 @@ -97681,6 +94391,14 @@ icon_state = "barber" }, /area/security/permabrig) +"eOL" = ( +/obj/structure/disposalpipe/junction{ + dir = 8 + }, +/turf/simulated/floor/plasteel{ + icon_state = "white" + }, +/area/medical/research) "ePS" = ( /obj/structure/lattice, /turf/simulated/wall/r_wall, @@ -97699,17 +94417,11 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" - }, -/turf/simulated/floor/plasteel{ - icon_state = "wood" + icon_state = "1-2" }, +/turf/simulated/floor/wood, /area/crew_quarters/theatre) "eSe" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/machinery/door/airlock/medical{ name = "Operating Theatre Storage"; req_access_txt = "45" @@ -97720,12 +94432,19 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ icon_state = "showroomfloor" }, /area/medical/surgery2) "eSX" = ( /obj/item/twohanded/required/kirbyplants, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "redcorner" @@ -97735,14 +94454,12 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel, @@ -97756,14 +94473,12 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/structure/cable{ d1 = 1; @@ -97817,11 +94532,30 @@ /obj/machinery/hydroponics/constructable, /obj/item/seeds/chili, /obj/item/seeds/chili, -/turf/simulated/floor/plasteel, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "red" + }, /area/security/permabrig) +"ffm" = ( +/obj/structure/chair{ + dir = 1 + }, +/turf/simulated/floor/plasteel{ + icon_state = "white" + }, +/area/hallway/primary/central) "fhF" = ( /turf/space, /area/shuttle/gamma/station) +"fjv" = ( +/obj/effect/landmark{ + name = "revenantspawn" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/mob/living/simple_animal/pet/dog/pug, +/turf/simulated/floor/engine, +/area/toxins/explab) "fjJ" = ( /obj/machinery/camera{ c_tag = "Security Armory"; @@ -97868,6 +94602,12 @@ }, /turf/simulated/floor/plasteel, /area/security/securearmoury) +"fqy" = ( +/obj/item/twohanded/required/kirbyplants, +/turf/simulated/floor/plasteel{ + icon_state = "barber" + }, +/area/civilian/barber) "frp" = ( /obj/structure/flora/ausbushes/sunnybush, /obj/structure/flora/ausbushes/lavendergrass, @@ -97886,14 +94626,39 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, /turf/simulated/floor/plasteel, /area/security/seceqstorage) +"fuR" = ( +/obj/effect/decal/warning_stripes/east, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + tag = "" + }, +/turf/simulated/floor/plasteel, +/area/hallway/secondary/entry) +"fxr" = ( +/obj/machinery/door/airlock/external{ + frequency = 1379; + id_tag = "sw_maint_inner"; + locked = 1; + name = "West Maintenance External Access"; + req_access_txt = "10;13" + }, +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/port) "fzQ" = ( /obj/effect/spawner/window/reinforced, /obj/structure/cable, @@ -97919,6 +94684,14 @@ icon_state = "dark" }, /area/tcommsat/chamber) +"fBm" = ( +/obj/effect/decal/warning_stripes/west, +/obj/structure/table/reinforced, +/obj/item/reagent_containers/dropper/precision, +/obj/item/storage/box/syringes, +/obj/item/reagent_containers/dropper, +/turf/simulated/floor/engine, +/area/toxins/misc_lab) "fDE" = ( /obj/effect/spawner/window/reinforced, /obj/structure/cable{ @@ -97936,8 +94709,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/effect/decal/warning_stripes/north, /turf/simulated/floor/plasteel, @@ -97987,11 +94759,6 @@ name = "Security Checkpoint"; req_access_txt = "1" }, -/obj/machinery/door/window/brigdoor{ - dir = 3; - name = "Security Checkpoint"; - req_access_txt = "1" - }, /obj/item/folder/red, /obj/item/folder/red, /obj/machinery/door/poddoor{ @@ -98015,6 +94782,13 @@ icon_state = "grimy" }, /area/security/detectives_office) +"fMg" = ( +/obj/structure/chair/office/light{ + dir = 4 + }, +/obj/effect/decal/warning_stripes/west, +/turf/simulated/floor/engine, +/area/toxins/misc_lab) "fPC" = ( /obj/structure/table/reinforced, /obj/item/flash, @@ -98031,6 +94805,14 @@ icon_state = "red" }, /area/security/seceqstorage) +"fPS" = ( +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/lattice, +/turf/space, +/area/space/nearstation) "fTZ" = ( /turf/simulated/wall/rust, /area/security/detectives_office) @@ -98052,16 +94834,16 @@ /turf/simulated/floor/plating, /area/security/brig) "fVZ" = ( -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" - }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, /turf/simulated/floor/plasteel{ icon_state = "showroomfloor" }, @@ -98080,12 +94862,31 @@ /turf/simulated/floor/plating, /area/security/prisonershuttle) "ggp" = ( -/obj/machinery/vending/coffee, +/obj/machinery/vending/coffee/free, /obj/structure/sign/electricshock{ pixel_y = 32 }, -/turf/simulated/floor/plating, +/turf/simulated/floor/plasteel{ + dir = 5; + icon_state = "red" + }, /area/security/permabrig) +"giz" = ( +/obj/structure/table/glass, +/obj/item/book/random{ + pixel_y = 6 + }, +/turf/simulated/floor/plasteel{ + icon_state = "white" + }, +/area/medical/medbay) +"gkk" = ( +/obj/machinery/hologram/holopad, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "neutralfull" + }, +/area/hallway/secondary/exit) "glQ" = ( /obj/structure/window/reinforced{ dir = 8 @@ -98100,7 +94901,10 @@ d2 = 8; icon_state = "4-8" }, -/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/machinery/atmospherics/unary/vent_pump/on, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "red" @@ -98109,6 +94913,17 @@ "goP" = ( /turf/simulated/wall, /area/security/processing) +"gpU" = ( +/obj/structure/plasticflaps{ + opacity = 1 + }, +/obj/machinery/navbeacon{ + codes_txt = "delivery"; + dir = 8; + location = "Janitor" + }, +/turf/simulated/floor/plating, +/area/janitor) "gpX" = ( /obj/effect/landmark{ name = "blobstart" @@ -98118,12 +94933,31 @@ icon_state = "neutral" }, /area/maintenance/starboard) +"gqM" = ( +/obj/structure/reagent_dispensers/watertank, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "whitepurplecorner" + }, +/area/medical/research) +"gsy" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + tag = "" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/chapel/office) "gwn" = ( /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/rack, /obj/item/gun/energy/gun{ @@ -98149,9 +94983,6 @@ }, /area/security/processing) "gxd" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/structure/chair{ dir = 1 }, @@ -98180,22 +95011,31 @@ /obj/effect/decal/cleanable/dirt, /obj/effect/decal/warning_stripes/north, /obj/machinery/light, -/turf/simulated/floor/plasteel, +/turf/simulated/floor/plating, /area/quartermaster/storage) "gyY" = ( /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/command/glass{ - name = "Corporate Lounge"; - req_one_access_txt = "19" +/obj/machinery/door/airlock/public/glass{ + id_tag = "pub_room"; + name = "Public Meeting Room" }, /turf/simulated/floor/carpet, /area/assembly/showroom) +"gzU" = ( +/obj/machinery/atmospherics/unary/vent_pump/on, +/obj/machinery/newscaster{ + pixel_y = 32 + }, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "arrival" + }, +/area/hallway/secondary/entry) "gBV" = ( /turf/simulated/floor/plasteel{ dir = 1; @@ -98222,15 +95062,14 @@ /turf/simulated/floor/plating, /area/hallway/secondary/exit) "gGu" = ( -/obj/structure/disposalpipe/segment, /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plating, /area/maintenance/starboard2) "gGJ" = ( @@ -98265,7 +95104,6 @@ /turf/simulated/floor/plating, /area/hallway/secondary/entry) "gJk" = ( -/obj/machinery/hologram/holopad, /obj/effect/decal/warning_stripes/yellow/hollow, /obj/structure/cable{ d1 = 2; @@ -98273,6 +95111,7 @@ icon_state = "2-4" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/hologram/holopad, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "neutralfull" @@ -98301,8 +95140,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /turf/simulated/floor/plasteel, /area/security/permasolitary) @@ -98315,9 +95153,37 @@ icon_state = "grimy" }, /area/security/detectives_office) +"gTA" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plasteel{ + icon_state = "yellowfull" + }, +/area/engine/engineering) "gTW" = ( /turf/simulated/floor/plasteel, /area/security/securearmoury) +"gUi" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/turf/simulated/floor/plasteel{ + icon_state = "freezerfloor" + }, +/area/crew_quarters/sleep) "haD" = ( /obj/structure/cable{ d2 = 8; @@ -98346,13 +95212,30 @@ icon_state = "red" }, /area/security/seceqstorage) +"haY" = ( +/obj/structure/closet/wardrobe/atmospherics_yellow, +/turf/simulated/floor/plating, +/area/maintenance/electrical) +"hbU" = ( +/obj/structure/chair/office/dark{ + dir = 1 + }, +/turf/simulated/floor/plasteel{ + icon_state = "whitegreen" + }, +/area/medical/virology) "hch" = ( -/obj/structure/chair/stool, +/obj/structure/chair/stool{ + dir = 8 + }, /obj/machinery/firealarm{ dir = 4; pixel_x = 24 }, -/turf/simulated/floor/plating, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "red" + }, /area/security/permabrig) "hcQ" = ( /obj/structure/bed, @@ -98390,8 +95273,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /turf/simulated/floor/plasteel, /area/security/permasolitary) @@ -98399,8 +95281,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -98409,12 +95290,32 @@ icon_state = "redcorner" }, /area/security/brig) +"hgq" = ( +/obj/machinery/atmospherics/unary/passive_vent{ + dir = 4 + }, +/turf/simulated/floor/engine, +/area/toxins/mixing) "hjo" = ( /obj/structure/closet/crate, /obj/effect/landmark/costume/random, /obj/effect/spawner/lootdrop/maintenance, /turf/simulated/floor/plating, /area/maintenance/starboard) +"hly" = ( +/obj/structure/table/wood, +/turf/simulated/floor/plasteel{ + dir = 5; + icon_state = "dark" + }, +/area/crew_quarters/bar) +"hlY" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/yellow{ + dir = 4 + }, +/obj/effect/decal/warning_stripes/east, +/turf/simulated/floor/plasteel, +/area/atmos) "hmC" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -98446,8 +95347,18 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/turf/simulated/floor/plating, -/area/maintenance/starboard) +/turf/simulated/floor/plasteel{ + icon_state = "white" + }, +/area/hallway/primary/central) +"hsQ" = ( +/obj/structure/chair/sofa/corp/right{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + icon_state = "whiteblue" + }, +/area/medical/medbay) "hzb" = ( /obj/machinery/light{ dir = 4 @@ -98457,6 +95368,27 @@ icon_state = "redcorner" }, /area/security/permasolitary) +"hzl" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/turret_protected/aisat) +"hAi" = ( +/obj/machinery/vending/scidrobe, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "whitepurple" + }, +/area/toxins/misc_lab) "hDZ" = ( /obj/docking_port/stationary{ dir = 8; @@ -98473,7 +95405,7 @@ /obj/machinery/light{ dir = 1 }, -/turf/simulated/floor/plasteel, +/turf/simulated/floor/plating, /area/quartermaster/storage) "hHM" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -98482,17 +95414,38 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/structure/disposalpipe/sortjunction{ + dir = 1; + name = "HoS Junction"; + sortType = 7 + }, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "red" }, /area/security/brig) +"hJG" = ( +/turf/simulated/floor/plasteel/stairs, +/area/medical/research) +"hLa" = ( +/obj/effect/spawner/window/reinforced, +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden, +/turf/simulated/floor/plating, +/area/security/permabrig) "hLZ" = ( /obj/structure/table/glass, /obj/item/hemostat{ @@ -98513,14 +95466,41 @@ layer = 4; pixel_y = -32 }, +/obj/item/reagent_containers/spray/cleaner{ + desc = "Someone has crossed out the Space from Space Cleaner and written in Surgery. 'Do not remove under punishment of death!!!' is scrawled on the back."; + name = "Surgery Cleaner" + }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "whiteblue" }, /area/medical/surgery1) +"hMu" = ( +/obj/effect/spawner/window/reinforced, +/obj/structure/cable, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/floor/plating, +/area/medical/virology) "hOL" = ( /turf/simulated/floor/carpet, /area/magistrateoffice) +"hPT" = ( +/obj/machinery/door/airlock/atmos/glass{ + heat_proof = 1; + name = "Supermatter Chamber"; + req_one_access_txt = "24; 10" + }, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/engine, +/area/engine/supermatter) "hTk" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/rack, @@ -98553,9 +95533,6 @@ /turf/simulated/wall, /area/magistrateoffice) "hTW" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/machinery/camera{ c_tag = "Medbay Surgery East Storage"; dir = 1 @@ -98564,16 +95541,43 @@ dir = 4 }, /obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ icon_state = "showroomfloor" }, /area/medical/surgery1) -"hZF" = ( -/turf/simulated/floor/plasteel{ - dir = 1; - icon_state = "redcorner" +"hWz" = ( +/obj/effect/spawner/window/reinforced, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" }, -/area/hallway/primary/starboard) +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/cable{ + d2 = 2; + icon_state = "0-2" + }, +/turf/simulated/floor/plating, +/area/security/permabrig) +"hZR" = ( +/obj/structure/chair/stool{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "neutralfull" + }, +/area/security/permabrig) "ibc" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -98603,8 +95607,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /turf/simulated/floor/plasteel, /area/security/securearmoury) @@ -98616,19 +95619,29 @@ /turf/simulated/floor/plasteel, /area/security/securearmoury) "ifj" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ icon_state = "showroomfloor" }, /area/medical/surgery2) +"iiv" = ( +/obj/machinery/navbeacon{ + codes_txt = "delivery"; + location = "Science" + }, +/obj/structure/plasticflaps{ + opacity = 1 + }, +/turf/simulated/floor/plating, +/area/toxins/misc_lab) "iiM" = ( /obj/structure/window/reinforced{ dir = 8 @@ -98636,20 +95649,46 @@ /obj/structure/piano, /turf/simulated/floor/plating, /area/crew_quarters/theatre) +"iiY" = ( +/obj/machinery/atmospherics/pipe/simple/visible/cyan{ + dir = 4 + }, +/obj/effect/decal/warning_stripes/north, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plasteel, +/area/atmos) +"ijT" = ( +/obj/machinery/atmospherics/pipe/simple/visible/cyan{ + dir = 5 + }, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "neutralfull" + }, +/area/atmos) "ipD" = ( /obj/structure/closet/wardrobe/pjs, -/turf/simulated/floor/plating, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "red" + }, /area/security/permabrig) "isz" = ( /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/vending/sustenance, -/turf/simulated/floor/plasteel, +/turf/simulated/floor/plasteel{ + dir = 9; + icon_state = "red" + }, /area/security/permabrig) +"iuU" = ( +/obj/item/twohanded/required/kirbyplants, +/turf/simulated/floor/wood, +/area/crew_quarters/sleep) "iwQ" = ( /obj/machinery/light_switch{ pixel_y = 26 @@ -98671,8 +95710,7 @@ /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /turf/simulated/floor/plasteel, /area/security/prisonershuttle) @@ -98688,20 +95726,27 @@ }, /area/maintenance/starboard) "iDa" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/machinery/door_control{ id = "magistrate"; name = "Privacy Shutters Control"; pixel_y = 25 }, /obj/structure/table/wood, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /obj/machinery/computer/secure_data/laptop, /turf/simulated/floor/plasteel{ icon_state = "cult" }, /area/magistrateoffice) +"iDz" = ( +/obj/machinery/door/poddoor{ + id_tag = "toxmix1"; + name = "Space Vent" + }, +/turf/simulated/floor/engine, +/area/toxins/mixing) "iFx" = ( /obj/structure/sink{ dir = 8; @@ -98722,6 +95767,28 @@ icon_state = "whiteblue" }, /area/medical/surgery2) +"iIw" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/machinery/newscaster{ + pixel_y = 32 + }, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "arrival" + }, +/area/hallway/secondary/entry) +"iIY" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/structure/table/wood, +/obj/item/storage/briefcase, +/obj/machinery/light_switch{ + pixel_x = -26; + pixel_y = -4 + }, +/turf/simulated/floor/wood, +/area/medical/psych) "iKj" = ( /obj/machinery/light_switch{ pixel_x = -23; @@ -98737,18 +95804,20 @@ icon_state = "whiteblue" }, /area/medical/surgery2) +"iLr" = ( +/obj/item/relic, +/turf/simulated/floor/engine, +/area/toxins/explab) "iLL" = ( /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/machinery/door/airlock/security/glass{ name = "Prison Wing"; @@ -98761,27 +95830,38 @@ /obj/structure/closet/emcloset, /turf/simulated/floor/plating, /area/maintenance/starboard) +"iPQ" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/obj/structure/rack, +/obj/effect/spawner/lootdrop/maintenance{ + lootcount = 2; + name = "2maintenance loot spawner" + }, +/turf/simulated/floor/plating, +/area/maintenance/port) "iTV" = ( /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/effect/decal/warning_stripes/northwestcorner, /turf/simulated/floor/plasteel, /area/security/securearmoury) "iUc" = ( -/obj/effect/decal/cleanable/dirt, /obj/item/twohanded/required/kirbyplants, -/turf/simulated/floor/plasteel, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "red" + }, /area/security/permabrig) "iVO" = ( /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/effect/decal/cleanable/dirt, @@ -98798,6 +95878,12 @@ /obj/effect/decal/warning_stripes/south, /turf/simulated/floor/plasteel, /area/security/securearmoury) +"iWE" = ( +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "whitebluecorner" + }, +/area/hallway/primary/central) "iXX" = ( /obj/structure/cable{ d1 = 1; @@ -98811,7 +95897,7 @@ /obj/machinery/door/window/brigdoor{ dir = 2; name = "Warden's Desk"; - req_access_txt = "3" + req_access_txt = "63" }, /obj/machinery/door/window/brigdoor{ dir = 1; @@ -98834,6 +95920,27 @@ icon_state = "cult" }, /area/magistrateoffice) +"jbq" = ( +/obj/structure/table/reinforced, +/obj/item/clothing/mask/gas, +/obj/item/clothing/mask/gas, +/obj/item/wrench, +/obj/item/clothing/glasses/science, +/obj/item/reagent_containers/spray/cleaner{ + desc = "Someone has crossed out the 'Space' from Space Cleaner and written in Chemistry. Scrawled on the back is, 'Okay, whoever filled this with polytrinic acid, it was only funny the first time. It was hard enough replacing the CMO's first cat!'"; + name = "Chemistry Cleaner" + }, +/turf/simulated/floor/engine, +/area/toxins/misc_lab) +"jdF" = ( +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/turf/simulated/floor/plasteel{ + icon_state = "whitebluecorner" + }, +/area/medical/medbay) "jgO" = ( /obj/machinery/door/airlock/security/glass{ id_tag = "Brig"; @@ -98848,8 +95955,7 @@ /obj/structure/cable{ d1 = 1; d2 = 8; - icon_state = "1-8"; - tag = "" + icon_state = "1-8" }, /obj/structure/cable{ d1 = 2; @@ -98857,6 +95963,9 @@ icon_state = "2-8" }, /obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -98868,9 +95977,9 @@ }, /area/engine/break_room) "jkU" = ( +/obj/effect/decal/warning_stripes/yellow/hollow, /obj/structure/disposalpipe/trunk, /obj/machinery/disposal, -/obj/effect/decal/warning_stripes/yellow/hollow, /turf/simulated/floor/plasteel{ icon_state = "showroomfloor" }, @@ -98885,6 +95994,26 @@ icon_state = "redcorner" }, /area/security/permasolitary) +"jsi" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + tag = "" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + icon_state = "white" + }, +/area/hallway/primary/central) "jsV" = ( /obj/structure/cable{ d1 = 4; @@ -98917,6 +96046,31 @@ icon_state = "dark" }, /area/security/processing) +"jBp" = ( +/obj/machinery/door/poddoor{ + density = 0; + icon_state = "open"; + id_tag = "Prison Gate"; + name = "Prison Lockdown Blast Doors"; + opacity = 0 + }, +/obj/effect/spawner/window/reinforced, +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, +/turf/simulated/floor/plating, +/area/security/permabrig) +"jBy" = ( +/obj/structure/window/reinforced{ + dir = 1; + layer = 2.9 + }, +/obj/structure/window/reinforced{ + dir = 4 + }, +/turf/space, +/area/space) "jCt" = ( /obj/structure/table/reinforced, /turf/simulated/floor/plasteel{ @@ -98925,18 +96079,29 @@ }, /area/security/warden) "jCU" = ( -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" - }, /obj/structure/sign/poster/official/random{ pixel_y = 32 }, /obj/structure/filingcabinet, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, /turf/simulated/floor/plasteel{ icon_state = "cult" }, /area/magistrateoffice) +"jFV" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plasteel{ + icon_state = "yellowfull" + }, +/area/engine/engineering) "jHa" = ( /obj/machinery/atm{ pixel_x = -32 @@ -98946,23 +96111,65 @@ icon_state = "neutralcorner" }, /area/crew_quarters/fitness) +"jHd" = ( +/obj/machinery/door/airlock/glass{ + name = "Cabin" + }, +/turf/simulated/floor/wood, +/area/crew_quarters/sleep) "jIs" = ( /turf/simulated/wall/r_wall, /area/security/evidence) "jIV" = ( -/obj/machinery/hologram/holopad, /obj/effect/decal/warning_stripes/yellow/hollow, /obj/structure/cable{ d1 = 1; d2 = 4; - icon_state = "1-4"; - tag = "" + icon_state = "1-4" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/machinery/hologram/holopad, /turf/simulated/floor/plasteel, /area/security/seceqstorage) +"jKp" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + tag = "" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "whitebluecorner" + }, +/area/hallway/primary/central) +"jLu" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "redcorner" + }, +/area/security/permabrig) +"jLB" = ( +/obj/effect/spawner/window/reinforced, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/toxins/misc_lab) "jQY" = ( /turf/simulated/wall/r_wall, /area/security/seceqstorage) @@ -98977,18 +96184,15 @@ }, /area/hallway/primary/central) "jUH" = ( -/obj/structure/disposalpipe/segment, /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 8 @@ -98998,6 +96202,12 @@ icon_state = "neutralfull" }, /area/security/brig) +"jVL" = ( +/obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction{ + dir = 8 + }, +/turf/simulated/floor/engine, +/area/toxins/mixing) "jYK" = ( /obj/effect/spawner/window/reinforced, /obj/structure/cable{ @@ -99013,16 +96223,46 @@ }, /turf/simulated/floor/plating, /area/security/seceqstorage) +"jYY" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/firedoor, +/obj/machinery/door/window/southleft{ + name = "Medbay Desk"; + req_access_txt = "5" + }, +/obj/effect/decal/warning_stripes/yellow, +/obj/item/paper_bin, +/turf/simulated/floor/plasteel{ + icon_state = "white" + }, +/area/medical/medbay) +"kdR" = ( +/obj/machinery/door/airlock/external{ + frequency = 1379; + id_tag = "sw_maint_outer"; + locked = 1; + name = "West Maintenance External Access" + }, +/turf/simulated/floor/plasteel, +/area/maintenance/port) +"keD" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "neutralfull" + }, +/area/security/permabrig) "khY" = ( -/obj/structure/disposalpipe/segment, /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel, /area/maintenance/starboard2) "kii" = ( @@ -99036,11 +96276,8 @@ pixel_x = -24 }, /obj/item/ammo_box/shotgun/rubbershot, -/obj/item/ammo_box/shotgun/buck, /obj/item/storage/box/rubbershot, /obj/item/storage/box/rubbershot, -/obj/item/storage/box/buck, -/obj/item/storage/box/buck, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "vault" @@ -99053,6 +96290,13 @@ }, /turf/simulated/floor/plasteel, /area/security/permabrig) +"kjL" = ( +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "whitebluecorner" + }, +/area/medical/medbay) "kkM" = ( /obj/vehicle/secway, /obj/item/key/security, @@ -99061,6 +96305,12 @@ icon_state = "vault" }, /area/security/securearmoury) +"klh" = ( +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "whitebluecorner" + }, +/area/hallway/primary/central) "klk" = ( /obj/machinery/firealarm{ dir = 1; @@ -99080,8 +96330,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -99111,6 +96360,15 @@ }, /turf/simulated/floor/plating, /area/hallway/secondary/entry) +"kpI" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + tag = "" + }, +/turf/simulated/floor/plating, +/area/maintenance/port) "kxq" = ( /obj/structure/table/wood, /obj/item/paper_bin, @@ -99120,29 +96378,23 @@ }, /area/security/detectives_office) "kyq" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/structure/table/reinforced, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "vault" }, /area/security/prisonershuttle) -"kzg" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, +"kyU" = ( /obj/effect/spawner/window/reinforced, -/obj/structure/cable{ - d2 = 2; - icon_state = "0-2" - }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, -/area/security/warden) +/area/maintenance/port) "kCi" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -99162,7 +96414,7 @@ /obj/machinery/door/window/brigdoor{ dir = 2; name = "Secure Armory"; - req_access_txt = "3" + req_access_txt = "63" }, /obj/machinery/door/window/brigdoor{ dir = 1; @@ -99181,8 +96433,18 @@ icon_state = "1-2" }, /obj/item/clipboard, -/turf/simulated/floor/plating, +/turf/simulated/floor/plasteel{ + dir = 9; + icon_state = "red" + }, /area/security/permabrig) +"kRz" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/plasteel{ + icon_state = "white" + }, +/area/toxins/misc_lab) "kSX" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -99201,20 +96463,38 @@ icon_state = "vault" }, /area/security/securearmoury) +"kTW" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/chapel/office) "kVM" = ( +/obj/effect/decal/warning_stripes/yellow/hollow, /obj/structure/disposalpipe/trunk, /obj/machinery/disposal, -/obj/effect/decal/warning_stripes/yellow/hollow, /turf/simulated/floor/plasteel{ icon_state = "showroomfloor" }, /area/medical/surgery2) +"kWO" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/railing/corner{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + icon_state = "white" + }, +/area/medical/research) "kYe" = ( /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/effect/decal/warning_stripes/east, /obj/effect/decal/warning_stripes/west, @@ -99238,6 +96518,26 @@ icon_state = "solarpanel" }, /area/maintenance/auxsolarstarboard) +"lah" = ( +/obj/machinery/dye_generator, +/obj/machinery/alarm{ + dir = 4; + pixel_x = -24 + }, +/turf/simulated/floor/plasteel{ + icon_state = "barber" + }, +/area/civilian/barber) +"lee" = ( +/obj/structure/table/glass, +/obj/item/grown/sunflower{ + pixel_x = -2; + pixel_y = 2 + }, +/turf/simulated/floor/plasteel{ + icon_state = "white" + }, +/area/medical/medbay) "ljZ" = ( /obj/machinery/door/poddoor{ density = 0; @@ -99269,38 +96569,12 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /turf/simulated/floor/plasteel{ icon_state = "red" }, /area/security/seceqstorage) -"loP" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2"; - tag = "" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4"; - tag = "" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "neutralfull" - }, -/area/security/brig) "lso" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -99327,14 +96601,10 @@ }, /area/crew_quarters/courtroom) "ltY" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -99343,6 +96613,9 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel, /area/maintenance/starboard) "luc" = ( @@ -99353,6 +96626,12 @@ icon_state = "grimy" }, /area/security/detectives_office) +"lxh" = ( +/obj/effect/decal/warning_stripes/southeast, +/obj/effect/spawner/lootdrop/maintenance, +/obj/structure/rack, +/turf/simulated/floor/plating, +/area/maintenance/port) "lzY" = ( /obj/structure/table/wood, /obj/machinery/alarm{ @@ -99397,8 +96676,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /turf/simulated/floor/plasteel{ dir = 8; @@ -99406,7 +96684,9 @@ }, /area/security/securearmoury) "lEt" = ( -/obj/machinery/door/airlock/public/glass, +/obj/machinery/door/airlock/public/glass{ + name = "Court gallery" + }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel{ @@ -99447,8 +96727,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/closet/secure_closet/security, /obj/machinery/atmospherics/unary/vent_pump/on{ @@ -99458,6 +96737,19 @@ icon_state = "red" }, /area/security/seceqstorage) +"lKc" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/chair/office/dark, +/turf/simulated/floor/plasteel{ + icon_state = "grimy" + }, +/area/chapel/office) +"lMo" = ( +/turf/simulated/floor/plasteel{ + dir = 0; + icon_state = "red" + }, +/area/security/permabrig) "lVO" = ( /obj/machinery/turretid/lethal{ control_area = "\improper Telecoms Central Compartment"; @@ -99468,6 +96760,17 @@ icon_state = "dark" }, /area/turret_protected/aisat) +"lVT" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/hologram/holopad, +/turf/simulated/floor/plasteel{ + icon_state = "white" + }, +/area/toxins/explab) "lZw" = ( /obj/machinery/ai_status_display{ pixel_x = -32 @@ -99475,8 +96778,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -99484,12 +96786,16 @@ icon_state = "redcorner" }, /area/security/permasolitary) +"maf" = ( +/obj/structure/mopbucket, +/obj/item/mop, +/turf/simulated/floor/plating, +/area/maintenance/port) "meB" = ( /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 8 @@ -99511,6 +96817,13 @@ icon_state = "dark" }, /area/security/interrogation) +"mfl" = ( +/obj/effect/decal/warning_stripes/east, +/obj/machinery/atmospherics/unary/thermomachine/freezer{ + dir = 4 + }, +/turf/simulated/floor/plasteel, +/area/atmos) "mft" = ( /obj/effect/spawner/window/reinforced, /obj/machinery/door/poddoor{ @@ -99532,6 +96845,14 @@ "mhu" = ( /turf/simulated/wall/r_wall, /area/security/permasolitary) +"mhT" = ( +/obj/structure/reagent_dispensers/fueltank/chem{ + pixel_x = -32; + pixel_y = null + }, +/obj/machinery/chem_heater, +/turf/simulated/floor/engine, +/area/toxins/misc_lab) "miL" = ( /turf/simulated/floor/plasteel{ dir = 1; @@ -99563,12 +96884,21 @@ /obj/effect/spawner/window/reinforced, /turf/simulated/floor/plating, /area/security/brig) +"mlR" = ( +/obj/machinery/atmospherics/unary/outlet_injector{ + dir = 4; + frequency = 1443; + icon_state = "on"; + id = "air_in"; + on = 1 + }, +/turf/simulated/floor/engine, +/area/toxins/mixing) "mmw" = ( /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/chair/stool, /obj/effect/landmark/start{ @@ -99577,8 +96907,7 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/machinery/alarm{ pixel_y = 24 @@ -99592,8 +96921,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/manifold/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -99604,6 +96932,16 @@ icon_state = "redcorner" }, /area/security/permabrig) +"mnG" = ( +/obj/item/twohanded/required/kirbyplants, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "whitepurplecorner" + }, +/area/medical/research) "moa" = ( /obj/structure/window/reinforced{ dir = 8 @@ -99641,18 +96979,34 @@ icon_state = "vault" }, /area/security/securearmoury) +"mrW" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/newscaster{ + pixel_y = -32 + }, +/turf/simulated/floor/plasteel{ + icon_state = "neutralcorner" + }, +/area/hallway/primary/starboard) +"mtx" = ( +/obj/item/radio/beacon, +/turf/simulated/floor/plasteel/airless, +/area/toxins/test_area) "mtL" = ( -/obj/effect/decal/cleanable/dirt, /obj/structure/cable{ d1 = 4; d2 = 8; icon_state = "4-8"; tag = "" }, -/turf/simulated/floor/plasteel, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "neutralfull" + }, /area/security/permabrig) "mtR" = ( -/obj/structure/disposalpipe/segment, /obj/structure/cable{ d1 = 4; d2 = 8; @@ -99665,6 +97019,7 @@ /area/hallway/primary/starboard) "muI" = ( /obj/machinery/hologram/holopad, +/obj/structure/railing, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -99705,10 +97060,19 @@ dir = 8 }, /turf/simulated/floor/plasteel{ - dir = 1; - icon_state = "whitepurplecorner" + dir = 8; + icon_state = "whitepurple" }, -/area/medical/research) +/area/toxins/misc_lab) +"mzZ" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "neutralfull" + }, +/area/atmos) "mDm" = ( /obj/effect/spawner/window/reinforced, /turf/simulated/floor/plating, @@ -99734,39 +97098,35 @@ }, /turf/simulated/floor/plasteel, /area/security/permasolitary) -"mHf" = ( -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "red" - }, -/area/security/brig) "mHP" = ( -/obj/structure/disposalpipe/sortjunction{ - dir = 1; - name = "Security Junction"; - sortType = 13 - }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "redcorner" }, /area/hallway/primary/starboard) +"mIp" = ( +/obj/machinery/atmospherics/pipe/simple/heat_exchanging, +/obj/machinery/sparker{ + id = "toxinsigniter"; + pixel_x = -20 + }, +/turf/simulated/floor/engine, +/area/toxins/mixing) "mKe" = ( /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/cable{ d1 = 2; @@ -99778,6 +97138,32 @@ icon_state = "neutralfull" }, /area/security/brig) +"mLW" = ( +/obj/machinery/door/firedoor, +/obj/effect/decal/warning_stripes/west, +/obj/effect/decal/warning_stripes/east, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + icon_state = "white" + }, +/area/medical/research) +"mMt" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "neutralfull" + }, +/area/engine/engineering) "mOF" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -99803,8 +97189,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/flasher_button{ id = "Cell 3"; @@ -99821,6 +97206,13 @@ icon_state = "redcorner" }, /area/security/permabrig) +"mTO" = ( +/obj/machinery/air_sensor{ + frequency = 1222; + id_tag = "burn_sensor" + }, +/turf/simulated/floor/engine, +/area/toxins/mixing) "mWj" = ( /obj/machinery/door/airlock/external{ frequency = 1379; @@ -99838,11 +97230,69 @@ }, /turf/simulated/floor/plating, /area/hallway/secondary/entry) +"mYH" = ( +/obj/machinery/newscaster{ + pixel_x = -32 + }, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "neutralcorner" + }, +/area/crew_quarters/fitness) +"mZY" = ( +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/turf/simulated/floor/plasteel{ + icon_state = "white" + }, +/area/medical/genetics_cloning) +"nbz" = ( +/obj/machinery/camera{ + c_tag = "Research Break Room"; + dir = 4; + network = list("Research","SS13") + }, +/obj/machinery/vending/cola, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "whitepurple" + }, +/area/toxins/misc_lab) "nbE" = ( /obj/machinery/hydroponics/constructable, /obj/item/seeds/ambrosia, -/turf/simulated/floor/plating, +/turf/simulated/floor/plasteel{ + dir = 6; + icon_state = "red" + }, /area/security/permabrig) +"ncs" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/flora/ausbushes/lavendergrass, +/turf/simulated/floor/grass, +/area/medical/research) +"ncT" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/chair/sofa/corp, +/turf/simulated/floor/plasteel{ + icon_state = "white" + }, +/area/medical/medbay) "ncZ" = ( /obj/machinery/light/small{ dir = 8 @@ -99850,8 +97300,7 @@ /obj/structure/cable{ d1 = 1; d2 = 8; - icon_state = "1-8"; - tag = "" + icon_state = "1-8" }, /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 1 @@ -99871,6 +97320,15 @@ icon_state = "redcorner" }, /area/security/brig) +"neQ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/hologram/holopad, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "neutralfull" + }, +/area/hallway/primary/aft) "nfo" = ( /obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ @@ -99885,14 +97343,16 @@ /obj/item/clothing/gloves/botanic_leather, /obj/item/reagent_containers/spray/pestspray, /obj/item/reagent_containers/spray/pestspray, -/turf/simulated/floor/plating, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "red" + }, /area/security/permabrig) "nit" = ( /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /turf/simulated/floor/plasteel{ dir = 4; @@ -99900,7 +97360,6 @@ }, /area/security/warden) "njE" = ( -/obj/effect/decal/cleanable/dirt, /obj/machinery/light/small{ dir = 1 }, @@ -99914,12 +97373,6 @@ icon_state = "barber" }, /area/security/permabrig) -"nkh" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/plasteel, -/area/security/processing) "nli" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/sign/poster/official/cleanliness{ @@ -99931,11 +97384,10 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/computer/security{ - network = list("SS13","Mining Outpost") + dir = 8 }, /turf/simulated/floor/plasteel{ icon_state = "redfull" @@ -99950,8 +97402,32 @@ /obj/machinery/hydroponics/constructable, /obj/item/seeds/orange, /obj/item/seeds/orange, -/turf/simulated/floor/plasteel, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "red" + }, /area/security/permabrig) +"nqC" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/newscaster{ + pixel_y = 32 + }, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "neutralcorner" + }, +/area/hallway/primary/central) +"nte" = ( +/obj/machinery/atmospherics/pipe/simple/insulated{ + dir = 4 + }, +/turf/simulated/floor/engine, +/area/toxins/mixing) "nvc" = ( /obj/structure/table/reinforced, /obj/machinery/recharger, @@ -99965,16 +97441,15 @@ /area/security/warden) "nCz" = ( /obj/structure/table/wood, -/obj/item/storage/fancy/candle_box, -/obj/item/storage/fancy/candle_box, +/obj/item/storage/fancy/candle_box/full, +/obj/item/storage/fancy/candle_box/full, /turf/simulated/floor/plating, /area/crew_quarters/theatre) "nDV" = ( /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/chair{ dir = 1 @@ -99984,14 +97459,17 @@ }, /area/security/prisonershuttle) "nFL" = ( -/obj/machinery/computer/security/telescreen/entertainment{ - pixel_y = 32 - }, /obj/machinery/light/small{ dir = 1 }, /obj/machinery/smartfridge/drying_rack, -/turf/simulated/floor/plating, +/obj/machinery/computer/security/telescreen/entertainment{ + pixel_y = 32 + }, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "red" + }, /area/security/permabrig) "nFN" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -100000,6 +97478,20 @@ icon_state = "darkblue" }, /area/ai_monitored/storage/eva) +"nFX" = ( +/obj/effect/spawner/window/reinforced, +/turf/simulated/floor/plating, +/area/civilian/barber) +"nGA" = ( +/obj/effect/spawner/window/reinforced, +/obj/structure/cable, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/plating, +/area/medical/virology) "nGL" = ( /obj/machinery/bodyscanner{ dir = 4 @@ -100010,14 +97502,18 @@ }, /area/medical/surgery1) "nHs" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 10 }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel{ - icon_state = "white" + dir = 8; + icon_state = "neutralfull" }, /area/security/permabrig) "nJr" = ( @@ -100056,8 +97552,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -100066,7 +97561,6 @@ }, /area/security/permasolitary) "nQq" = ( -/obj/structure/disposalpipe/segment, /obj/machinery/atm{ pixel_x = 32 }, @@ -100089,8 +97583,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -100103,6 +97596,12 @@ icon_state = "dark" }, /area/medical/surgery1) +"nXf" = ( +/obj/machinery/computer/security/wooden_tv, +/turf/simulated/floor/plasteel{ + icon_state = "carpet" + }, +/area/security/detectives_office) "nYz" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/firealarm{ @@ -100115,6 +97614,29 @@ icon_state = "redcorner" }, /area/security/brig) +"nZa" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + tag = "" + }, +/obj/structure/lattice/catwalk, +/turf/space, +/area/space/nearstation) +"oaB" = ( +/obj/effect/spawner/window/reinforced, +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/plating, +/area/security/permabrig) "obL" = ( /obj/structure/chair{ dir = 8 @@ -100152,7 +97674,6 @@ d2 = 2; icon_state = "1-2" }, -/obj/effect/decal/cleanable/dirt, /obj/machinery/camera{ c_tag = "Perma-Brig General Population West"; dir = 4; @@ -100162,14 +97683,16 @@ dir = 8; pixel_x = -24 }, -/turf/simulated/floor/plasteel, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "red" + }, /area/security/permabrig) "ohh" = ( /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /turf/simulated/floor/plasteel, /area/security/seceqstorage) @@ -100177,6 +97700,22 @@ /obj/structure/filingcabinet, /turf/simulated/floor/plating, /area/security/detectives_office) +"ops" = ( +/obj/structure/window/reinforced, +/obj/structure/lattice, +/turf/space, +/area/space/nearstation) +"orz" = ( +/obj/structure/window/reinforced{ + dir = 1; + layer = 2.9 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/lattice, +/turf/space, +/area/space/nearstation) "osS" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -100185,8 +97724,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -100198,17 +97736,57 @@ icon_state = "neutral" }, /area/maintenance/fore2) +"oyG" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/chair/sofa/corp/corner, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "whiteblue" + }, +/area/medical/medbay) +"ozX" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/railing{ + dir = 1 + }, +/turf/simulated/floor/plasteel{ + icon_state = "white" + }, +/area/medical/research) +"oAd" = ( +/obj/structure/chair/sofa/corp/left{ + dir = 8 + }, +/turf/simulated/floor/plasteel{ + icon_state = "whiteblue" + }, +/area/medical/medbay) "oBE" = ( /obj/effect/spawner/lootdrop/maintenance, /obj/item/vending_refill/coffee, /turf/simulated/floor/plating, /area/maintenance/starboard) +"oBS" = ( +/obj/structure/window/reinforced{ + dir = 4 + }, +/turf/space, +/area/space) "oDD" = ( /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel{ @@ -100219,6 +97797,12 @@ "oEG" = ( /turf/simulated/floor/plating, /area/space/nearstation) +"oHv" = ( +/obj/structure/table/reinforced, +/turf/simulated/floor/plasteel{ + icon_state = "barber" + }, +/area/civilian/barber) "oHY" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -100233,6 +97817,36 @@ icon_state = "dark" }, /area/crew_quarters/courtroom) +"oMO" = ( +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/lattice, +/turf/space, +/area/space/nearstation) +"oNd" = ( +/turf/simulated/wall, +/area/civilian/barber) +"oOe" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/hologram/holopad, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "neutralfull" + }, +/area/quartermaster/storage) +"oQs" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plasteel{ + icon_state = "wood" + }, +/area/maintenance/gambling_den) "oSH" = ( /obj/effect/spawner/window/reinforced, /obj/structure/cable, @@ -100270,17 +97884,40 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /turf/simulated/floor/plasteel, /area/security/brig) +"oXY" = ( +/obj/machinery/cryopod/right, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + icon_state = "freezerfloor" + }, +/area/crew_quarters/sleep) +"oZY" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/visible/yellow{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "neutralfull" + }, +/area/atmos) "pcv" = ( /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -100301,10 +97938,11 @@ icon_state = "neutralcorner" }, /area/hallway/primary/central) +"pfE" = ( +/obj/effect/spawner/window/reinforced, +/turf/simulated/floor/plating, +/area/space) "pgF" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/machinery/door/firedoor, /obj/machinery/door/airlock/security/glass{ id_tag = "BrigWest"; @@ -100325,6 +97963,9 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel, /area/security/brig) "phv" = ( @@ -100337,8 +97978,7 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/structure/chair/stool, /obj/effect/landmark/start{ @@ -100349,6 +97989,30 @@ icon_state = "red" }, /area/security/seceqstorage) +"pjY" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8; + initialize_directions = 11 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4; + initialize_directions = 11 + }, +/turf/simulated/floor/plasteel{ + icon_state = "white" + }, +/area/toxins/misc_lab) +"plm" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/plasteel{ + icon_state = "neutralcorner" + }, +/area/crew_quarters/sleep) +"pnF" = ( +/obj/structure/window/reinforced, +/turf/space, +/area/space) "ppj" = ( /obj/machinery/door/firedoor, /obj/effect/decal/warning_stripes/yellow, @@ -100367,6 +98031,20 @@ icon_state = "redfull" }, /area/security/seceqstorage) +"pxj" = ( +/obj/machinery/portable_atmospherics/scrubber/huge/stationary, +/turf/simulated/floor/plasteel{ + dir = 10; + icon_state = "red" + }, +/area/security/permabrig) +"pAC" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/port) "pBz" = ( /obj/structure/closet/secure_closet/personal/cabinet, /obj/item/clothing/suit/browntrenchcoat, @@ -100375,12 +98053,37 @@ /obj/item/clothing/head/fedora, /turf/simulated/floor/plating, /area/security/detectives_office) +"pDD" = ( +/obj/structure/chair{ + dir = 1 + }, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "whitebluecorner" + }, +/area/hallway/primary/central) +"pGk" = ( +/obj/structure/flora/ausbushes/lavendergrass, +/obj/structure/railing{ + dir = 6; + pixel_x = 6; + pixel_y = -4 + }, +/obj/item/twohanded/required/kirbyplants{ + pixel_y = 7 + }, +/obj/structure/railing/corner{ + dir = 9; + pixel_x = 2; + pixel_y = -28 + }, +/turf/simulated/floor/grass, +/area/medical/research) "pGr" = ( /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /turf/simulated/floor/plasteel{ icon_state = "red" @@ -100396,6 +98099,29 @@ icon_state = "neutralfull" }, /area/hallway/secondary/exit) +"pML" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/chair/sofa/corp/right{ + dir = 8 + }, +/turf/simulated/floor/plasteel{ + icon_state = "whitepurple" + }, +/area/medical/research) +"pOq" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/hologram/holopad, +/turf/simulated/floor/plasteel, +/area/security/prisonershuttle) "pOB" = ( /obj/effect/decal/warning_stripes/east, /obj/machinery/atmospherics/unary/vent_pump/on{ @@ -100414,12 +98140,22 @@ icon_state = "grimy" }, /area/crew_quarters/theatre) +"pPG" = ( +/obj/structure/flora/ausbushes/sparsegrass, +/obj/structure/flora/bush, +/turf/simulated/floor/grass, +/area/medical/research) +"pRe" = ( +/obj/structure/table/wood, +/turf/simulated/floor/plasteel{ + icon_state = "white" + }, +/area/toxins/misc_lab) "pRg" = ( /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/door_control{ id = "Secure Gate"; @@ -100446,6 +98182,10 @@ /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "red" @@ -100467,6 +98207,13 @@ /obj/effect/spawner/window/reinforced, /turf/simulated/floor/plating, /area/hallway/primary/starboard) +"pVN" = ( +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/lattice, +/turf/space, +/area/space/nearstation) "pWQ" = ( /obj/effect/spawner/window/reinforced, /obj/structure/cable{ @@ -100482,6 +98229,11 @@ }, /turf/simulated/floor/plating, /area/security/permabrig) +"pWT" = ( +/obj/machinery/door/airlock/maintenance, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/port) "pXX" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on, /obj/machinery/camera{ @@ -100516,12 +98268,23 @@ /turf/space, /area/space) "qeU" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/door/airlock{ - name = "Bathroom" +/obj/machinery/ai_status_display{ + pixel_x = -32 + }, +/turf/simulated/floor/plasteel{ + dir = 10; + icon_state = "red" + }, +/area/security/permabrig) +"qfH" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + tag = "" }, /turf/simulated/floor/plating, -/area/security/permabrig) +/area/maintenance/apmaint) "qgr" = ( /turf/simulated/floor/plasteel{ dir = 1; @@ -100559,14 +98322,39 @@ icon_state = "dark" }, /area/crew_quarters/courtroom) +"qqh" = ( +/obj/machinery/cryopod, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/turf/simulated/floor/plasteel{ + icon_state = "freezerfloor" + }, +/area/crew_quarters/sleep) "qqW" = ( /obj/structure/table, /obj/machinery/kitchen_machine/microwave, -/turf/simulated/floor/plating, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "red" + }, /area/security/permabrig) "qrT" = ( /turf/simulated/wall/r_wall, /area/tcommsat/chamber) +"qxp" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + tag = "" + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "neutral" + }, +/area/maintenance/apmaint) "qzr" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -100581,7 +98369,7 @@ dir = 1; icon_state = "neutralcorner" }, -/area/bridge/meeting_room) +/area/hallway/primary/central/south) "qHs" = ( /obj/machinery/atmospherics/pipe/simple/hidden{ dir = 10; @@ -100615,6 +98403,14 @@ }, /turf/simulated/floor/plating, /area/security/permabrig) +"qOO" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/hologram/holopad, +/turf/simulated/floor/plasteel{ + icon_state = "white" + }, +/area/toxins/misc_lab) "qRT" = ( /obj/structure/cable{ d1 = 4; @@ -100647,6 +98443,31 @@ icon_state = "red" }, /area/security/warden) +"qWp" = ( +/obj/machinery/atmospherics/pipe/simple/insulated{ + dir = 4 + }, +/obj/machinery/meter{ + layer = 3.31 + }, +/obj/structure/window/plasmareinforced{ + dir = 4 + }, +/obj/structure/window/plasmareinforced{ + dir = 8 + }, +/obj/structure/grille, +/turf/simulated/floor/plating, +/area/toxins/mixing) +"qWs" = ( +/obj/machinery/computer/arcade{ + dir = 1 + }, +/turf/simulated/floor/plasteel{ + dir = 5; + icon_state = "dark" + }, +/area/maintenance/fore2) "qXF" = ( /obj/machinery/alarm{ pixel_y = 24 @@ -100665,8 +98486,7 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /turf/simulated/floor/plasteel{ icon_state = "redcorner" @@ -100683,8 +98503,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/unary/vent_pump/on, /turf/simulated/floor/plasteel{ @@ -100696,14 +98515,34 @@ /obj/effect/spawner/lootdrop/maintenance, /turf/simulated/floor/plating, /area/maintenance/starboard) +"qZV" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/chair/sofa/corp, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "whiteblue" + }, +/area/medical/medbay) +"raB" = ( +/obj/structure/grille/broken, +/obj/structure/lattice, +/turf/space, +/area/space/nearstation) "raK" = ( /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, -/obj/structure/closet/wardrobe/red, +/obj/machinery/vending/secdrobe, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "red" @@ -100712,8 +98551,14 @@ "rbw" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, /turf/simulated/floor/plasteel{ - icon_state = "white" + dir = 0; + icon_state = "red" }, /area/security/permabrig) "reo" = ( @@ -100726,14 +98571,11 @@ }, /obj/item/seeds/carrot, /turf/simulated/floor/plasteel{ - dir = 1; - icon_state = "redcorner" + dir = 9; + icon_state = "red" }, /area/security/permabrig) "reH" = ( -/obj/machinery/newscaster{ - pixel_x = 32 - }, /obj/machinery/light{ dir = 4 }, @@ -100742,6 +98584,7 @@ dir = 8; network = list("SS13","Security") }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "red" @@ -100758,33 +98601,49 @@ icon_state = "darkblue" }, /area/medical/surgery2) -"rjr" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" +"rke" = ( +/obj/structure/window/reinforced{ + dir = 8 }, -/turf/simulated/floor/plasteel{ - icon_state = "neutralcorner" +/turf/space, +/area/space) +"rkv" = ( +/obj/structure/rack, +/obj/effect/spawner/lootdrop/maintenance{ + lootcount = 3; + name = "3maintenance loot spawner" }, -/area/hallway/primary/central) +/turf/simulated/floor/plating, +/area/maintenance/port) "rkB" = ( /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel, /area/security/warden) +"rkJ" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "neutralfull" + }, +/area/crew_quarters/sleep) +"rkV" = ( +/obj/machinery/light/small, +/obj/effect/decal/warning_stripes/southwest, +/obj/effect/spawner/lootdrop/maintenance, +/obj/structure/rack, +/turf/simulated/floor/plating, +/area/maintenance/port) "rmq" = ( /turf/simulated/floor/plasteel{ dir = 6; @@ -100806,6 +98665,20 @@ icon_state = "darkblue" }, /area/medical/surgery2) +"rtH" = ( +/obj/structure/table/wood, +/obj/item/storage/box/donkpockets, +/obj/structure/extinguisher_cabinet{ + pixel_y = 30 + }, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "whitepurple" + }, +/area/toxins/misc_lab) +"rvc" = ( +/turf/simulated/wall/r_wall, +/area/space/nearstation) "rvx" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 8 @@ -100815,6 +98688,24 @@ icon_state = "neutralfull" }, /area/hallway/secondary/exit) +"rBP" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/hologram/holopad, +/turf/simulated/floor/plasteel{ + icon_state = "arrival" + }, +/area/hallway/secondary/entry) +"rCe" = ( +/obj/machinery/atmospherics/pipe/simple/insulated{ + dir = 10 + }, +/turf/simulated/floor/engine, +/area/toxins/mixing) "rCw" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 8; @@ -100824,6 +98715,18 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel, /area/hallway/secondary/exit) +"rCJ" = ( +/obj/structure/chair/comfy/purp{ + dir = 4 + }, +/obj/machinery/alarm{ + pixel_y = 24 + }, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "whitepurple" + }, +/area/toxins/misc_lab) "rDp" = ( /obj/structure/cable{ d2 = 4; @@ -100844,6 +98747,35 @@ /obj/effect/spawner/window/reinforced, /turf/simulated/floor/plating, /area/security/brig) +"rHU" = ( +/obj/structure/chair, +/obj/machinery/newscaster{ + pixel_y = 32 + }, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "whitebluecorner" + }, +/area/hallway/primary/central) +"rIy" = ( +/obj/machinery/door/airlock/research{ + name = "Research Break Room" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plasteel{ + icon_state = "white" + }, +/area/toxins/misc_lab) +"rIK" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/port) "rNi" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -100895,8 +98827,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 4 @@ -100906,8 +98837,7 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /turf/simulated/floor/plasteel{ icon_state = "redcorner" @@ -100926,8 +98856,7 @@ /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /obj/machinery/door/poddoor{ density = 0; @@ -100939,6 +98868,16 @@ /obj/effect/spawner/window/reinforced, /turf/simulated/floor/plating, /area/security/brig) +"rUS" = ( +/obj/machinery/door_control{ + id = "pub_room"; + name = "Door Bolt Control"; + normaldoorcontrol = 1; + pixel_y = 25; + specialfunctions = 4 + }, +/turf/simulated/floor/carpet, +/area/assembly/showroom) "rZK" = ( /obj/structure/cable{ d1 = 1; @@ -100958,15 +98897,21 @@ icon_state = "2-4"; tag = "" }, -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 6 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 10 }, -/turf/simulated/floor/plasteel, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "neutralfull" + }, /area/security/permabrig) +"sak" = ( +/obj/structure/table/wood, +/turf/simulated/floor/wood, +/area/medical/psych) "scA" = ( /obj/machinery/firealarm{ dir = 8; @@ -100978,6 +98923,33 @@ icon_state = "red" }, /area/hallway/secondary/exit) +"sdP" = ( +/obj/structure/cable/yellow{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/engine, +/area/engine/supermatter) +"seE" = ( +/obj/machinery/access_button{ + command = "cycle_exterior"; + frequency = 1379; + master_tag = "sw_maint_airlock"; + name = "exterior access button"; + pixel_x = 24; + pixel_y = 24 + }, +/obj/structure/lattice/catwalk, +/turf/space, +/area/space/nearstation) +"seQ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/engine, +/area/toxins/explab) "shi" = ( /obj/structure/cable{ d2 = 2; @@ -101009,13 +98981,31 @@ }, /turf/simulated/floor/plating, /area/hallway/secondary/entry) -"soN" = ( +"sjV" = ( /obj/structure/disposalpipe/segment, -/obj/machinery/computer/operating, +/obj/structure/chair/sofa/corp/right{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "whitepurple" + }, +/area/medical/research) +"slE" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/remains/robot, +/obj/effect/decal/cleanable/blood/oil, +/turf/simulated/floor/plating, +/area/maintenance/port) +"soN" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 9 }, +/obj/structure/disposalpipe/segment, +/obj/machinery/computer/operating{ + dir = 8 + }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "darkblue" @@ -101033,6 +99023,22 @@ icon_state = "red" }, /area/security/seceqstorage) +"spS" = ( +/obj/item/twohanded/required/kirbyplants, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10; + initialize_directions = 10 + }, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "vault" + }, +/area/atmos) +"sso" = ( +/obj/structure/lattice, +/obj/structure/grille/broken, +/turf/space, +/area/space/nearstation) "ssp" = ( /obj/machinery/door/airlock/security/glass{ name = "Solitary Confinement"; @@ -101047,11 +99053,18 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /turf/simulated/floor/plasteel, /area/security/permasolitary) +"ssy" = ( +/obj/structure/table/reinforced, +/obj/machinery/cell_charger, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "neutralfull" + }, +/area/space) "suy" = ( /obj/machinery/firealarm{ dir = 1; @@ -101067,8 +99080,22 @@ "swV" = ( /obj/machinery/hydroponics/constructable, /obj/item/seeds/glowshroom, -/turf/simulated/floor/plasteel, +/turf/simulated/floor/plasteel{ + dir = 10; + icon_state = "red" + }, /area/security/permabrig) +"sxS" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/door/airlock/research{ + name = "Research Chemistry"; + req_access_txt = "7" + }, +/turf/simulated/floor/plasteel{ + icon_state = "white" + }, +/area/toxins/misc_lab) "sAW" = ( /obj/structure/closet/secure_closet/medical2, /turf/simulated/floor/plasteel{ @@ -101082,25 +99109,25 @@ d2 = 8; icon_state = "4-8" }, -/obj/machinery/atmospherics/unary/vent_pump/on, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "red" }, /area/security/processing) "sEN" = ( -/obj/structure/disposalpipe/segment, /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/structure/cable{ d1 = 2; @@ -101112,19 +99139,79 @@ icon_state = "neutralfull" }, /area/security/brig) +"sGz" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "neutralfull" + }, +/area/atmos) +"sMj" = ( +/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ + dir = 5 + }, +/turf/simulated/floor/engine, +/area/toxins/mixing) +"sOo" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/turf/simulated/floor/plasteel{ + icon_state = "freezerfloor" + }, +/area/crew_quarters/sleep) +"sPz" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/obj/structure/sign/vacuum{ + pixel_y = 32 + }, +/turf/simulated/floor/plating, +/area/maintenance/port) "sPS" = ( /obj/structure/cable, -/obj/machinery/power/solar_control{ - id = "starboardsolar"; - name = "Aft Starboard Solar Control" - }, /obj/machinery/alarm{ dir = 1; pixel_y = -24 }, /obj/effect/decal/warning_stripes/southeast, +/obj/machinery/power/solar_control{ + dir = 8; + id = "starboardsolar"; + name = "Aft Starboard Solar Control" + }, /turf/simulated/floor/plating, /area/maintenance/starboardsolar) +"sQr" = ( +/mob/living/simple_animal/mouse, +/turf/simulated/floor/plating, +/area/maintenance/port) +"sQZ" = ( +/obj/machinery/access_button{ + command = "cycle_interior"; + frequency = 1379; + master_tag = "sw_maint_airlock"; + name = "interior access button"; + pixel_x = -24; + pixel_y = 24 + }, +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/port) "sTz" = ( /obj/structure/closet/secure_closet/security, /turf/simulated/floor/plasteel{ @@ -101136,8 +99223,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/door/airlock/security{ - name = "Security-Storage Backroom"; - req_access = null; + name = "Evidence Storage"; req_access_txt = "63" }, /obj/machinery/door/firedoor, @@ -101160,17 +99246,30 @@ icon_state = "redcorner" }, /area/security/brig) +"sYw" = ( +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "whitebluecorner" + }, +/area/medical/medbay) "sYQ" = ( /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /turf/simulated/floor/plasteel{ icon_state = "grimy" }, /area/security/detectives_office) +"sZp" = ( +/obj/machinery/light/small, +/turf/simulated/floor/plasteel{ + icon_state = "neutral" + }, +/area/maintenance/port) "sZT" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -101180,10 +99279,8 @@ }, /area/maintenance/starboard) "tah" = ( -/obj/structure/disposalpipe/trunk{ - dir = 8 - }, /obj/machinery/disposal, +/obj/structure/disposalpipe/trunk, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "red" @@ -101196,8 +99293,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -101215,7 +99311,10 @@ /obj/effect/decal/cleanable/cobweb2, /obj/item/seeds/tower, /obj/item/seeds/amanita, -/turf/simulated/floor/plating, +/turf/simulated/floor/plasteel{ + dir = 5; + icon_state = "red" + }, /area/security/permabrig) "tgs" = ( /obj/structure/chair/office/dark, @@ -101226,12 +99325,21 @@ "tgE" = ( /turf/simulated/wall/r_wall, /area/maintenance/starboard) +"tiC" = ( +/obj/machinery/atmospherics/binary/pump{ + dir = 4; + name = "N2 to Pure" + }, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "neutralfull" + }, +/area/atmos) "tiS" = ( /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -101244,6 +99352,18 @@ icon_state = "redcorner" }, /area/security/permabrig) +"tke" = ( +/obj/structure/table, +/obj/item/storage/box/bodybags{ + pixel_x = 5; + pixel_y = 5 + }, +/obj/item/storage/box/gloves, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "whitepurplecorner" + }, +/area/medical/research) "tks" = ( /turf/simulated/floor/plasteel{ icon_state = "wood" @@ -101268,20 +99388,43 @@ /turf/simulated/floor/plasteel, /area/security/permasolitary) "tsN" = ( -/obj/structure/chair/comfy/purp{ - dir = 1 - }, +/obj/structure/closet/secure_closet/scientist, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "whitepurple" }, -/area/medical/research) +/area/toxins/misc_lab) "tvq" = ( -/obj/structure/table, -/obj/item/toy/figure/crew/syndie, -/obj/item/paper_bin, -/turf/simulated/floor/plating, +/obj/machinery/portable_atmospherics/scrubber/huge/stationary, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "red" + }, /area/security/permabrig) +"tvI" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "neutralcorner" + }, +/area/crew_quarters/sleep) +"txW" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/newscaster{ + pixel_y = -32 + }, +/turf/simulated/floor/plasteel, +/area/crew_quarters/locker/locker_toilet) "tFw" = ( /obj/effect/spawner/window/reinforced, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -101295,7 +99438,6 @@ /area/security/processing) "tFK" = ( /obj/item/soap/nanotrasen, -/obj/effect/decal/cleanable/dirt, /obj/machinery/light/small{ dir = 4 }, @@ -101303,14 +99445,15 @@ /obj/machinery/shower{ pixel_y = 22 }, -/turf/simulated/floor/plasteel, +/turf/simulated/floor/plasteel{ + icon_state = "freezerfloor" + }, /area/security/permabrig) "tFO" = ( /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/structure/cable{ d1 = 1; @@ -101320,14 +99463,16 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/machinery/door/airlock/security/glass{ name = "Warden's Office"; req_access_txt = "3" }, /obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel, /area/security/warden) "tHf" = ( @@ -101338,12 +99483,10 @@ /turf/simulated/floor/plating, /area/crew_quarters/theatre) "tJH" = ( -/obj/structure/disposalpipe/segment, /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/effect/spawner/window/reinforced, /obj/structure/cable{ @@ -101362,12 +99505,38 @@ icon_state = "neutralfull" }, /area/security/brig) +"tLE" = ( +/obj/structure/chair/comfy/purp{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + icon_state = "white" + }, +/area/toxins/misc_lab) +"tMu" = ( +/obj/machinery/door/firedoor, +/obj/effect/decal/warning_stripes/west, +/obj/effect/decal/warning_stripes/east, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "whitepurplecorner" + }, +/area/medical/research) +"tNq" = ( +/obj/item/radio/intercom{ + dir = 1; + pixel_x = 28 + }, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "whitebluecorner" + }, +/area/hallway/primary/central) "tNO" = ( /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/machinery/firealarm{ pixel_y = 26 @@ -101377,6 +99546,14 @@ icon_state = "red" }, /area/security/warden) +"tOv" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 6 + }, +/turf/simulated/floor/plasteel{ + icon_state = "red" + }, +/area/security/permabrig) "tOM" = ( /obj/machinery/door/airlock/security/glass{ name = "Solitary Confinement"; @@ -101391,8 +99568,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /turf/simulated/floor/plasteel, /area/security/permasolitary) @@ -101400,8 +99576,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -101413,12 +99588,14 @@ }, /area/security/brig) "tRM" = ( -/obj/structure/disposalpipe/segment, /obj/structure/cable{ d1 = 2; d2 = 4; icon_state = "2-4" }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "red" @@ -101455,8 +99632,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -101466,6 +99642,25 @@ }, /turf/simulated/floor/plating, /area/security/range) +"tXj" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/chair/barber{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/turf/simulated/floor/plasteel{ + icon_state = "barber" + }, +/area/civilian/barber) "uil" = ( /obj/machinery/atmospherics/unary/portables_connector{ dir = 8 @@ -101481,8 +99676,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -101511,8 +99705,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -101528,9 +99721,6 @@ dir = 4 }, /obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /turf/simulated/floor/plasteel{ icon_state = "bluecorner" }, @@ -101560,6 +99750,10 @@ /obj/effect/spawner/window/reinforced, /turf/simulated/floor/plating, /area/security/brig) +"unt" = ( +/obj/effect/decal/warning_stripes/east, +/turf/simulated/floor/plasteel, +/area/maintenance/port) "uod" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -101614,6 +99808,20 @@ icon_state = "dark" }, /area/security/interrogation) +"uza" = ( +/obj/machinery/atmospherics/pipe/simple/insulated{ + dir = 4 + }, +/obj/structure/window/plasmareinforced{ + dir = 4 + }, +/obj/structure/window/plasmareinforced{ + dir = 8 + }, +/obj/structure/grille, +/obj/structure/window/plasmareinforced, +/turf/simulated/floor/plating, +/area/toxins/mixing) "uAP" = ( /obj/structure/chair/office/dark{ dir = 4 @@ -101636,14 +99844,25 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "vault" }, /area/security/securearmoury) +"uKI" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/plasteel{ + icon_state = "white" + }, +/area/security/medbay) "uQK" = ( /obj/machinery/bodyscanner, /turf/simulated/floor/plasteel{ @@ -101651,20 +99870,8 @@ icon_state = "whiteblue" }, /area/medical/surgery2) -"uSJ" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/spawner/window/reinforced, -/obj/structure/cable{ - d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/floor/plating, -/area/security/main) "uUu" = ( /obj/effect/decal/cleanable/cobweb, -/obj/effect/decal/cleanable/dirt, /obj/structure/toilet{ pixel_y = 8 }, @@ -101673,7 +99880,7 @@ dir = 8 }, /obj/item/seeds/ambrosia, -/turf/simulated/floor/plating, +/turf/simulated/floor/plasteel, /area/security/permabrig) "uVQ" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ @@ -101708,8 +99915,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -101752,6 +99958,19 @@ icon_state = "red" }, /area/security/seceqstorage) +"veH" = ( +/obj/machinery/atmospherics/pipe/simple/visible/yellow{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "neutralfull" + }, +/area/atmos) "vhT" = ( /obj/structure/chair/office/dark{ dir = 8 @@ -101762,8 +99981,10 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 }, /obj/machinery/computer/security/telescreen{ desc = "Used for watching interrogations."; @@ -101779,24 +100000,39 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" + }, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "redcorner" }, -/turf/simulated/floor/plasteel, /area/security/permabrig) +"viE" = ( +/obj/machinery/power/apc{ + dir = 8; + name = "west bump"; + pixel_x = -24 + }, +/obj/structure/cable{ + d2 = 4; + icon_state = "0-4" + }, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "whitepurple" + }, +/area/toxins/misc_lab) "vmw" = ( /obj/structure/fans/tiny, /obj/structure/cable{ d1 = 1; d2 = 4; - icon_state = "1-4"; - tag = "" + icon_state = "1-4" }, /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/door/airlock/external{ id_tag = "laborcamp_home"; @@ -101810,8 +100046,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/effect/decal/warning_stripes/southwest, /obj/machinery/alarm{ @@ -101823,12 +100058,25 @@ icon_state = "red" }, /area/security/prisonershuttle) +"vnM" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/turf/simulated/floor/engine, +/area/toxins/explab) "voo" = ( /obj/structure/table, /obj/item/clothing/shoes/orange, /obj/item/clothing/under/color/orange/prison, /turf/simulated/floor/plating, /area/maintenance/starboard) +"vrp" = ( +/obj/structure/chair/office/light{ + dir = 8 + }, +/obj/effect/decal/warning_stripes/east, +/turf/simulated/floor/engine, +/area/toxins/misc_lab) "vrB" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/medical{ @@ -101839,6 +100087,13 @@ icon_state = "showroomfloor" }, /area/medical/surgery1) +"vrF" = ( +/obj/effect/decal/warning_stripes/west, +/obj/structure/disaster_counter/scichem{ + pixel_y = 32 + }, +/turf/simulated/floor/engine, +/area/toxins/misc_lab) "vsy" = ( /obj/item/twohanded/required/kirbyplants, /obj/machinery/power/apc{ @@ -101866,6 +100121,14 @@ icon_state = "red" }, /area/security/brig) +"vzs" = ( +/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "neutralfull" + }, +/area/crew_quarters/sleep) "vzz" = ( /obj/machinery/light{ dir = 4 @@ -101896,12 +100159,22 @@ icon_state = "dark" }, /area/tcommsat/chamber) +"vDY" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/plasteel{ + icon_state = "yellowfull" + }, +/area/engine/engineering) "vEh" = ( /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /turf/simulated/floor/plasteel{ dir = 9; @@ -101934,12 +100207,15 @@ icon_state = "wood-broken" }, /area/security/detectives_office) +"vFq" = ( +/obj/machinery/chem_master, +/turf/simulated/floor/engine, +/area/toxins/misc_lab) "vGw" = ( /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 8 @@ -101951,6 +100227,36 @@ icon_state = "red" }, /area/security/warden) +"vGz" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/plating, +/area/maintenance/port) +"vGB" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + tag = "" + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "neutral" + }, +/area/maintenance/port) +"vJs" = ( +/obj/structure/chair/sofa/corp/left{ + dir = 8 + }, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "whitepurple" + }, +/area/medical/research) "vJK" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/rack, @@ -101965,6 +100271,28 @@ }, /turf/simulated/floor/plasteel, /area/security/securearmoury) +"vKt" = ( +/obj/structure/shuttle/engine/propulsion/burst, +/turf/simulated/wall/mineral/titanium, +/area/shuttle/pod_2) +"vKB" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/flora/ausbushes/sunnybush, +/obj/structure/flora/ausbushes/ppflowers, +/turf/simulated/floor/grass, +/area/medical/research) +"vLu" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plasteel{ + icon_state = "white" + }, +/area/toxins/misc_lab) "vLN" = ( /obj/structure/table/wood, /obj/item/instrument/violin, @@ -102001,9 +100329,31 @@ icon_state = "red" }, /area/hallway/secondary/exit) +"vUu" = ( +/obj/docking_port/mobile/pod{ + id = "pod2"; + name = "escape pod 2" + }, +/obj/machinery/door/airlock/titanium{ + id_tag = "s_docking_airlock"; + name = "Escape Pod Hatch" + }, +/turf/simulated/floor/mineral/titanium/blue, +/area/shuttle/pod_2) +"vVf" = ( +/obj/machinery/chem_dispenser, +/obj/item/reagent_containers/glass/beaker/large, +/turf/simulated/floor/engine, +/area/toxins/misc_lab) "vXX" = ( /turf/space, /area/space/nearstation) +"vYC" = ( +/turf/simulated/floor/plasteel{ + dir = 9; + icon_state = "whitepurple" + }, +/area/toxins/misc_lab) "wdH" = ( /obj/effect/spawner/window/reinforced, /obj/machinery/door/poddoor/shutters{ @@ -102041,6 +100391,31 @@ icon_state = "neutralfull" }, /area/hallway/secondary/exit) +"why" = ( +/obj/machinery/cryopod/right, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/simulated/floor/plasteel{ + icon_state = "freezerfloor" + }, +/area/crew_quarters/sleep) +"wil" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/door/poddoor/preopen{ + id_tag = "experimentor"; + name = "Experimentor Blast Door" + }, +/obj/machinery/door/firedoor, +/turf/simulated/floor/engine, +/area/toxins/explab) +"wiR" = ( +/obj/structure/chair/office/light, +/turf/simulated/floor/plasteel{ + icon_state = "white" + }, +/area/medical/medbay) "wmQ" = ( /obj/item/radio/intercom{ pixel_y = 28 @@ -102059,6 +100434,18 @@ icon_state = "red" }, /area/security/processing) +"wtE" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plasteel{ + icon_state = "barber" + }, +/area/civilian/barber) "wtK" = ( /obj/structure/lattice, /obj/structure/sign/electricshock{ @@ -102080,6 +100467,14 @@ /obj/structure/closet/radiation, /turf/simulated/floor/plasteel, /area/engine/controlroom) +"wGL" = ( +/obj/machinery/newscaster/security_unit{ + pixel_x = -32 + }, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/bridge) "wIT" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/rack, @@ -102115,6 +100510,33 @@ icon_state = "vault" }, /area/security/securearmoury) +"wMv" = ( +/turf/simulated/floor/plasteel{ + icon_state = "wood" + }, +/area/maintenance/gambling_den) +"wPI" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/telepad_cargo, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "brown" + }, +/area/quartermaster/office) +"wRP" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + tag = "" + }, +/obj/structure/lattice/catwalk, +/turf/space, +/area/space/nearstation) "wVr" = ( /obj/effect/spawner/window/reinforced, /obj/machinery/door/poddoor{ @@ -102143,20 +100565,17 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel, @@ -102169,33 +100588,36 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" + }, +/turf/simulated/floor/plasteel{ + dir = 0; + icon_state = "red" }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plasteel, /area/security/permabrig) "xda" = ( -/obj/effect/decal/cleanable/dirt, /obj/item/cultivator, /obj/item/reagent_containers/glass/bottle/nutrient/ez, /obj/machinery/firealarm{ pixel_y = 26 }, -/turf/simulated/floor/plating, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "red" + }, /area/security/permabrig) "xgm" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 9 }, /obj/structure/chair/office/dark, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, /obj/machinery/navbeacon{ codes_txt = "patrol;next_patrol=Armory_North"; location = "Armory_South" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, /turf/simulated/floor/plasteel, /area/security/securearmoury) "xgR" = ( @@ -102216,8 +100638,26 @@ /obj/structure/barricade/wooden, /turf/simulated/floor/plasteel, /area/security/detectives_office) +"xme" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, +/obj/structure/chair/sofa/corp/left{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + icon_state = "whitepurple" + }, +/area/medical/research) "xom" = ( /obj/effect/decal/warning_stripes/north, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, /obj/machinery/navbeacon{ codes_txt = "patrol;next_patrol=Armory_South"; location = "Armory_North" @@ -102225,11 +100665,29 @@ /mob/living/simple_animal/bot/secbot/armsky{ auto_patrol = 1 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, /turf/simulated/floor/plasteel, /area/security/securearmoury) +"xoq" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + tag = "" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/apmaint) +"xpu" = ( +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plasteel{ + icon_state = "white" + }, +/area/medical/research) "xqH" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -102242,6 +100700,10 @@ icon_state = "neutralcorner" }, /area/hallway/primary/central) +"xtS" = ( +/obj/structure/reagent_dispensers/fueltank, +/turf/simulated/floor/plating, +/area/maintenance/port) "xuC" = ( /obj/structure/cable{ d1 = 1; @@ -102251,8 +100713,7 @@ /obj/structure/cable{ d1 = 2; d2 = 8; - icon_state = "2-8"; - tag = "" + icon_state = "2-8" }, /obj/effect/landmark/start{ name = "Warden" @@ -102266,12 +100727,43 @@ "xwk" = ( /obj/structure/sink{ dir = 4; - pixel_x = 11 + pixel_x = 12 }, /turf/simulated/floor/plasteel{ icon_state = "showroomfloor" }, /area/medical/surgery1) +"xAc" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/railing/corner{ + dir = 1 + }, +/turf/simulated/floor/plasteel{ + icon_state = "white" + }, +/area/medical/research) +"xBJ" = ( +/obj/structure/railing{ + dir = 10; + pixel_x = -6; + pixel_y = -4 + }, +/obj/item/twohanded/required/kirbyplants{ + pixel_y = 7 + }, +/obj/structure/railing/corner{ + dir = 5; + pixel_x = -2; + pixel_y = -28 + }, +/turf/simulated/floor/grass, +/area/medical/research) +"xCC" = ( +/obj/effect/decal/warning_stripes/north, +/turf/simulated/floor/plating, +/area/maintenance/port) "xDn" = ( /obj/structure/sign/electricshock{ pixel_y = 32 @@ -102292,15 +100784,15 @@ }, /area/security/warden) "xHj" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ icon_state = "showroomfloor" }, @@ -102340,8 +100832,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/manifold/hidden/supply, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, @@ -102351,14 +100842,10 @@ }, /area/hallway/primary/starboard) "xQW" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -102369,6 +100856,9 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plating, /area/maintenance/starboard) "xUI" = ( @@ -102385,8 +100875,7 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, @@ -102403,16 +100892,29 @@ /obj/structure/cable{ d1 = 4; d2 = 8; - icon_state = "4-8"; - tag = "" + icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plasteel{ icon_state = "dark" }, /area/security/interrogation) +"ydp" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "neutral" + }, +/area/maintenance/port) "yds" = ( /obj/structure/cable{ d2 = 4; @@ -102434,8 +100936,7 @@ /obj/structure/cable{ d1 = 2; d2 = 4; - icon_state = "2-4"; - tag = "" + icon_state = "2-4" }, /turf/simulated/floor/plating, /area/security/brig) @@ -102468,7 +100969,7 @@ dir = 4; icon_state = "neutralcorner" }, -/area/bridge/meeting_room) +/area/hallway/primary/central/south) "ygH" = ( /turf/simulated/wall/r_wall, /area/security/permabrig) @@ -102479,8 +100980,7 @@ /obj/structure/cable{ d1 = 1; d2 = 2; - icon_state = "1-2"; - tag = "" + icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel, @@ -107999,21 +106499,21 @@ aaa aaa aaa aaa -abi -abi -abi -abi -abj -abi -abi -abi -abj -abi -abi -abi -abj -abi -abi +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -108256,21 +106756,21 @@ aaa aaa aaa aaa -abi aaa -bmo -bpm -bmo -bpm -bmo -bpm -bmo -bpm -bmo -bpm -bmo aaa -abi +oBS +bpm +pVN +bpm +pVN +bpm +oBS +oBS +oBS +oBS +oBS +aaa +aaa aaa aaa aaa @@ -108513,8 +107013,8 @@ aaa aaa aaa aaa -abj -bkt +aaa +pnF bpn brp bRu @@ -108526,8 +107026,8 @@ brp brp brp cpb -brs -abi +bLR +aaa aaa aaa aaa @@ -108757,20 +107257,20 @@ aaa aaa aaa aaa -abj -abi -abi -abi -abi -abi -abj -abi -abi -abj -abi -abi -abi -abi +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa bku bpo bLM @@ -108784,7 +107284,7 @@ bms bnR bpo brr -abj +aaa aaa aaa aaa @@ -109014,21 +107514,21 @@ aaa aaa aaa aaa -abj aaa +abj bpm -bmo -bmo -bpm -bmo -bmo -bpm -bmo -bmo -bpm -bmo -bpm -bnM +oBS +oBS +oBS +oBS +oBS +oBS +oBS +oBS +oBS +oBS +oBS +bPR bpo brr bNM @@ -109040,8 +107540,8 @@ bNM bNM bkt bpo -brs -abi +bLR +aaa aaa aaa aaa @@ -109271,7 +107771,7 @@ aaa aaa aaa aaa -abi +aaa bku bpn brp @@ -109298,13 +107798,13 @@ bNM bkt bpo brr -abi -abi -abi -abi -abi -abi -abi +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -109528,8 +108028,8 @@ aaa aaa aaa aaa -abi -bkt +aaa +ops bpo brq bpu @@ -109554,14 +108054,14 @@ cgI bNM bkt bpo -bLS -bmo +dSz +pVN bpm -bmo -bmo +pVN +oBS bpm aaa -abi +aaa aaa aaa aaa @@ -109785,8 +108285,8 @@ aaa aaa aaa aaa -abi -bkt +aaa +pnF bpo brr abj @@ -109817,8 +108317,8 @@ brp brp brp cpb -brs -abi +eAi +aaa aaa aaa aaa @@ -110042,7 +108542,7 @@ aaa aaa aaa aaa -abj +aaa bku bpo brs @@ -110062,7 +108562,7 @@ btd bNM bPP bUD -bTL +hzl bXI chE bNM @@ -110074,8 +108574,8 @@ bpu bms bPC bpo -brr -abi +eAi +aaa aaa aaa aaa @@ -110299,8 +108799,8 @@ aaa aaa aaa aaa -abi -bkt +aaa +ops bpo brs aaa @@ -110331,8 +108831,8 @@ qrT abj bku bpo -brs -abj +eAi +aaa aaa aaa aaa @@ -110554,9 +109054,9 @@ aaa aaa aaa aaa -abi -abi -abi +aaa +aaa +aaa bku bpo brr @@ -110588,10 +109088,10 @@ qrT qrT bkt bpo -brr -abi -abi -abi +eAi +aaa +aaa +aaa aaa aaa aaa @@ -110811,10 +109311,10 @@ aaa aaa aaa aaa -abi aaa -bmo -bnM +aaa +oBS +adM bpo brs aaa @@ -110845,10 +109345,10 @@ qrT qrT bkt bpo -bLS -bpm +jBy +oBS +aaa aaa -abi aaa aaa aaa @@ -111068,8 +109568,8 @@ aaa aaa aaa aaa -abi -bkt +aaa +pnF bmp cqK bpq @@ -111104,8 +109604,8 @@ bku bmq cqK csk -brr -abi +eAi +aaa aaa aaa aaa @@ -111325,7 +109825,7 @@ aaa aaa aaa aaa -abi +aaa bku bmq bnO @@ -111361,8 +109861,8 @@ bkt bmq cqL bpq -brs -abi +eAi +aaa aaa aaa aaa @@ -111582,8 +110082,8 @@ aaa aaa aaa aaa -abj -bkt +aaa +pnF bav bnP bvv @@ -111618,8 +110118,8 @@ cKl bav bnP btk -brr -abj +eAi +aaa aaa aaa aaa @@ -111839,7 +110339,7 @@ aaa aaa aaa aaa -abi +aaa bku baE bcA @@ -111875,8 +110375,8 @@ bkt brT bsb btx -brs -abi +eAi +aaa aaa aaa aaa @@ -112096,8 +110596,8 @@ aaa aaa aaa aaa -abi -bkt +aaa +ops bmr cqM bps @@ -112132,8 +110632,8 @@ bku cpd cqM csl -brr -abi +eAi +aaa aaa aaa aaa @@ -112353,10 +110853,10 @@ aaa aaa aaa aaa -abi aaa -bms -bnR +abj +oMO +fPS bJP brs aaa @@ -112387,10 +110887,10 @@ qrT qrT bkt bJP -bLM +orz bpu aaa -abi +aaa aaa aaa aaa @@ -112610,9 +111110,9 @@ aaa aaa aaa aaa -abi -abi -abi +aaa +aaa +aaa bku bJP brr @@ -112645,9 +111145,9 @@ qrT bkt bJP brr -abi -abi -abi +aaa +aaa +aaa aaa aaa aaa @@ -112869,8 +111369,8 @@ aaa aaa aaa aaa -abi -bkt +aaa +pnF bJP brs aaa @@ -112901,8 +111401,8 @@ qrT abj bku bJP -brs -abi +bLR +aaa aaa aaa aaa @@ -113126,8 +111626,8 @@ aaa aaa aaa aaa -abj -bkt +aaa +pnF bJP brs abj @@ -113159,7 +111659,7 @@ bmo cnY bJP brr -abi +aaa aaa aaa aaa @@ -113383,8 +111883,8 @@ aaa aaa aaa aaa -abi -bkt +aaa +pnF bJP brr alW @@ -113415,8 +111915,8 @@ chS chS chS cpe -brs -abj +eAi +aaa aaa aaa aaa @@ -113640,8 +112140,8 @@ aaa aaa aaa aaa -abi -bkt +aaa +pnF bJP brw bpm @@ -113666,14 +112166,14 @@ bXO bNM bkt bJP -bLM -bms +orz +oMO bpu -bms -bms -bms +rke +rke +rke +aaa aaa -abi aaa aaa aaa @@ -113897,7 +112397,7 @@ aaa aaa aaa aaa -abi +aaa bku bJY chS @@ -113924,13 +112424,13 @@ bNM bkt bJP brr -abi -abi -abj -abi -abi -abi -abi +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -114154,21 +112654,21 @@ aaa aaa aaa aaa -abi aaa +abj bpu -bms -bms +oMO +rke +rke +rke +rke +rke +rke +rke +rke +rke bpu -bms -bms -bpu -bms -bms -bpu -bms -bpu -bnR +fPS bJP bLR bNM @@ -114180,11 +112680,11 @@ bNM bNM bku bJP -brs -abi +eAi +aaa +aaa aaa aaa -abj aaa aaa aaa @@ -114411,20 +112911,20 @@ aaa aaa aaa aaa -abi -abi -abi -abi -abj -abi -abi -abi -abj -abi -abi -abi -abi -abi +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa bku bJP bLS @@ -114437,11 +112937,11 @@ brw bmo bnM bJP -brr -abi +eAi +aaa +aaa aaa aaa -abj aaa aaa aaa @@ -114678,11 +113178,11 @@ aaa aaa aaa aaa -abj aaa -abj -abi -bkt +aaa +aaa +aaa +pnF bJY bLT bRv @@ -114694,11 +113194,11 @@ chS chS chS cpe -brs -abj -abj -abj -abj +eAi +aaa +aaa +aaa +aaa aaa aaa aaa @@ -114935,12 +113435,12 @@ aaa aaa aaa aaa -abj aaa -abj -abj aaa -bnR +aaa +aaa +aaa +fPS bLU bLM bPC @@ -114948,13 +113448,9 @@ bmq bTS bpq brq -bms +oMO bpu -bms -aaa -abi -aaa -aaa +oMO abj aaa aaa @@ -115005,6 +113501,10 @@ aaa aaa aaa aaa +aaa +aaa +aaa +aaa abj aaa abj @@ -115192,11 +113692,11 @@ aaa aaa aaa aaa -abj aaa -abj -abi -abi +aaa +aaa +aaa +aaa bku bLV brr @@ -115205,14 +113705,14 @@ bRL bTQ bmY brr -abi -abi -abi -abj -abi -abj -abj -abi +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -115449,11 +113949,11 @@ aaa aaa aaa aaa -abi aaa -abj aaa -abj +aaa +aaa +aaa aaa bUJ aaa @@ -115463,13 +113963,13 @@ bTR bpq brr aaa -abj aaa aaa aaa -abj aaa -abi +aaa +aaa +aaa aaa aaa aaa @@ -115706,11 +114206,11 @@ aaa aaa aaa aaa -abi aaa -abi aaa -abj +aaa +aaa +aaa aaa bUJ aaa @@ -115720,13 +114220,13 @@ bTS bpq brr aaa -abj aaa aaa aaa -abi -abj -abi +aaa +aaa +aaa +aaa aaa aaa aaa @@ -115963,12 +114463,12 @@ aaa aaa aaa aaa -abi aaa -abi aaa -abj -abj +aaa +aaa +aaa +aaa bUJ abj bPS @@ -115976,14 +114476,14 @@ bRM bTT bVX bPS -abj -abj -abj -abj -abj -abi aaa -abi +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -116220,11 +114720,11 @@ aaa aaa aaa aaa -abj aaa -abi aaa -abj +aaa +aaa +aaa aaa bUJ aaa @@ -116234,13 +114734,13 @@ bTU bVY bXQ aaa -abj aaa aaa aaa -abi -abj -abi +aaa +aaa +aaa +aaa aaa aaa aaa @@ -116477,11 +114977,11 @@ aaa aaa aaa aaa -abi -abj -abi aaa -abj +aaa +aaa +aaa +aaa aaa bUJ aaa @@ -116491,13 +114991,13 @@ bZw bVZ bXR aaa -abj aaa aaa aaa -abj aaa -abi +aaa +aaa +aaa aaa aaa aaa @@ -116548,7 +115048,7 @@ dyo dzv dAH dAH -dAH +mtx dAH dAH dFf @@ -116734,12 +115234,12 @@ aaa aaa aaa aaa -abi aaa -abi -abj -abj -abj +aaa +aaa +aaa +aaa +aaa bUJ abj bPV @@ -116747,14 +115247,14 @@ abj chw abj bPV -abj -abj -abj -abj -abj -abi aaa -abj +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -116991,11 +115491,11 @@ aaa aaa aaa aaa -abi aaa -abj aaa -abj +aaa +aaa +aaa aaa bUJ aaa @@ -117005,13 +115505,13 @@ chw bWa bXS aaa -abj aaa aaa aaa -abi -abj -abi +aaa +aaa +aaa +aaa aaa aaa aaa @@ -117248,11 +115748,11 @@ aaa aaa aaa aaa -abj aaa -abi aaa -abj +aaa +aaa +aaa aaa bUJ aaa @@ -117262,13 +115762,13 @@ cjl bWb bXT aaa -abj aaa aaa aaa -abi aaa -abi +aaa +aaa +aaa aaa aaa aaa @@ -117505,11 +116005,11 @@ aaa aaa aaa aaa -abi aaa -abi aaa -abj +aaa +aaa +aaa aaa bUJ aaa @@ -117519,13 +116019,13 @@ cnH bWc abj aaa -abj aaa aaa aaa -abi -abj -abi +aaa +aaa +aaa +aaa aaa aaa aaa @@ -117762,12 +116262,12 @@ aaa aaa aaa aaa -abi aaa -abi -abj -abj -abj +aaa +aaa +aaa +aaa +aaa bVf bXG bYl @@ -117775,14 +116275,14 @@ abj coi abj abj -abj -abj -abj -abj -abj -abj aaa -abi +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -118019,11 +116519,11 @@ aaa aaa aaa aaa -abi aaa -abj aaa -abj +aaa +aaa +aaa aaa abj aaa @@ -118033,13 +116533,13 @@ csr aaa abj aaa -abj aaa aaa aaa -abi -abj -abi +aaa +aaa +aaa +aaa aaa aaa aaa @@ -118276,11 +116776,11 @@ aaa aaa aaa aaa -abi -abj -abi aaa -abj +aaa +aaa +aaa +aaa aaa abj aaa @@ -118290,13 +116790,13 @@ csr aaa abj aaa -abj aaa aaa aaa -abi aaa -abj +aaa +aaa +aaa aaa aaa aaa @@ -118533,12 +117033,12 @@ aaa aaa aaa aaa -abj aaa -abi -abj -abj -abj +aaa +aaa +aaa +aaa +aaa abj abj bUJ @@ -118546,14 +117046,14 @@ abj coi abj abj -abj -abj -abj -abj -abj -abi aaa -abi +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -118790,9 +117290,9 @@ aaa aaa aaa aaa -abi aaa -abj +aaa +aaa aaa aaa aaa @@ -118804,13 +117304,13 @@ csr aaa abj aaa -abj aaa aaa aaa -abi -abj -abi +aaa +aaa +aaa +aaa aaa aaa aaa @@ -119047,9 +117547,9 @@ aaa aaa aaa aaa -abi -abj -abi +aaa +aaa +aaa aaa aaa aaa @@ -119061,13 +117561,13 @@ csr aaa abj aaa -abj aaa aaa aaa -abj aaa -abi +aaa +aaa +aaa aaa aaa aaa @@ -119304,27 +117804,27 @@ aaa aaa aaa aaa -abi aaa -abi +aaa +aaa +aaa +aaa +aaa abj abj -abj -abj -abj -bYm +nZa abj coi abj abj -abj -abj -abj -abj -abj -abi -abj -abi +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -119561,27 +118061,27 @@ aaa aaa aaa aaa -abi -abj -abi +aaa +aaa +aaa aaa aaa aaa abj aaa -bYm +nZa aaa csr aaa abj aaa -abj aaa aaa aaa -abi aaa -abj +aaa +aaa +aaa aaa aaa aaa @@ -119818,27 +118318,27 @@ aaa aaa aaa aaa -abi aaa -abj +aaa +aaa aaa aaa aaa abj aaa -bYm +nZa aaa csr aaa abj aaa -abj aaa aaa aaa -abi aaa -abi +aaa +aaa +aaa aaa aaa aaa @@ -120031,13 +118531,19 @@ aaa aaa aaa aaa -abi +dij abj -abi +dij abj -abi -abi -abi +dij +dij +dij +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -120075,27 +118581,21 @@ aaa aaa aaa aaa -abi -abj -abi abj abj -abj -abj -abj -bYm +nZa abj coi abj abj -abj -abj -abj -abj -abj -abi -abj -abi +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -120284,21 +118784,23 @@ aaa aaa aaa aaa -abi -abi -abj -abi -abi +dij +dij +aGW +dij +dij aaa abj aaa abj aaa -abi -abi +dij +dij abj -abi -abi +dij +dij +aaa +aaa aaa aaa aaa @@ -120332,27 +118834,25 @@ aaa aaa aaa aaa -abj aaa -abj aaa aaa aaZ abj aaa -bYm +nZa aaa csr aaa abj aaa -abj aaa aaa aaa -abi aaa -abj +aaa +aaa +aaa aaa aaa aaZ @@ -120541,7 +119041,7 @@ aaa aaa aaa aaa -abi +dij aaa abj aaa @@ -120555,7 +119055,19 @@ abj aaa abj aaa -abi +dij +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -120583,64 +119095,52 @@ aaa aaa aaa aaa -abi -abi -abj -abi -abi -abi -abj -abi -abi -abi -abj -abi abj abj -bYm +nZa aaa csr aaa abj aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +dmq +dmq +dmq +dmq +cJK +cJK +cHA +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +acF abj aaa aaa aaa -abj -aaa -abj -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa aaa aaa aaa @@ -120798,7 +119298,7 @@ aaa aaa aaa aaa -abi +dij aaa ash asV @@ -120840,47 +119340,59 @@ aaa aaa aaa aaa -abi aaa aaa -abj -aaa -abj -aaa -abj -aaa -abj -aaa -abj aaa aaa -bYm +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +nZa abj coi abj abj aaa -abj +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +cRD +cRD +cRD +vKt +xCC +cHA +cXX +cXX +cHA +aaa +aaa +aaa +aaa +aaa +aaa aaa abj -abi -abi -abi -abi -abj -abi -abi -abj -abi -abi -abi -abi -abi -abi -abj -abj -abj -aaa acF aaa aaa @@ -120904,18 +119416,6 @@ aaa aaa aaa aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa -aaa abj aaa abj @@ -121069,7 +119569,7 @@ ash ata atY aaa -abi +dij aaa aaa aaa @@ -121097,63 +119597,63 @@ aaa aaa aaa aaa -abi +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +dij abj -abi -abi -aaa -abi -abi -abi -abi -abj -abi -abi -abi -abj -bYm +nZa aaa csr aaa abj aaa -abj -aaa -abj -aaa -aaa -abj aaa aaa aaa -abj aaa aaa aaa -abj aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +cTg +cUP +cUQ +vUu +xCC +elb +drn +drn +cHA abj aaa aaa aaa aaa -abj +aaa +aaa +aaa acF -abj -abj -abi -abi -abi -abj -abi -abi -abi -abj -abi -abi -abj -abi -abi +aaa +aaa +aaa aaa aaa aaa @@ -121312,7 +119812,7 @@ aaa aaa aaa aaa -abi +dij abj ash ata @@ -121326,7 +119826,7 @@ ash ata atY abj -abi +dij aaa aaa aaa @@ -121354,63 +119854,63 @@ aaa aaa aaa aaa -abi aaa -abi +aaa +aaa +acF +acF +acF abj abj abj -abj -abj -abj -abj -abj -abj -abi +acF +acF +acF +dij aaa -bYm +nZa aaa csr aaa abj -abj -abi -abi -abi -abj -abi -abi -abi -abj -abi -abi -abi -abj -abi -abi -abi -abj -abi -abi -abi -abj aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +cRD +cRD +cRD +vKt +xCC +cHA +sPz +cXU +cHA +bya +pfE +pfE +cHA +cHA +aaa +aaa +abj acF -aaa abj aaa -abj aaa -abj -aaa -abj -aaa -abj -aaa -abj -abj -aaa -abi aaa aaa aaa @@ -121569,7 +120069,7 @@ aaa aaa aaa aaa -abi +dij aaa ash ata @@ -121611,10 +120111,10 @@ aaa aaa aaa aaa -abj aaa -abi -abj +aaa +aaa +acF bwN bwN bwN @@ -121622,52 +120122,52 @@ bwN bwN bwN bwN +acF abj abj -abj -bYm +nZa abj coi abj abj -abj aaa abj -aaa abj -aaa abj -aaa abj -aaa abj -aaa abj -aaa abj -aaa abj -aaa abj -aaa abj abj +abj +abj +abj +abj +abj +abj +abj +cWk +dmq +cHA +cHA +drn +slE +drn +pAC +dpX +cLA +dtU +cHA +cHA +aaa +abj acF abj -abi -abi -abi -abj -abi -abi -abi -abj -abi -abj -abi -abi -abj -abj +aaa +aaa aaa aaa aaa @@ -121823,10 +120323,10 @@ aaa aaa aaa aaa -abi +dij abj -abi -abi +dij +dij aaa ash ata @@ -121868,10 +120368,10 @@ aaa aaa aaa aaa -abi -abj -abi -abj +aaa +aaa +aaa +acF bwN bzE bzE @@ -121879,14 +120379,14 @@ bDb bzE bzE bwN -abj -abi +acF +dij aaa -bYm +nZa aaa csr aaa -aaa +abj bXU cba cba @@ -121908,23 +120408,23 @@ cie cie cie bXU -aaa -acF +xtS +cPY +drn +dhG +drn +drn +drn +dhG +drn +cCy +cHA aaa abj +seE +bPS +vXX aaa -abj -abj -abj -aaa -abj -abj -abj -aaa -abj -abj -abj -abi aaa aaa aaa @@ -122080,7 +120580,7 @@ aaa aaa aaa aaa -abi +dij aaa abj abj @@ -122125,9 +120625,9 @@ aaa aaa aaa aaa -abi aaa -abj +aaa +aaa abj bwN bzE @@ -122137,9 +120637,9 @@ bBi bGB bwN abj -abi +dij aaa -bYm +nZa aaa csr aaa @@ -122165,23 +120665,23 @@ bXU bXU bXU bXU -abj +iPQ cPY +drn cHA cHA +cHA +cHA +cHA +drn +maf cJK +aaa cHA +kdR cHA -cHA -cJK -cHA -cHA -cCx -cJK -cCx -cCx -abj -abi +vXX +aaa aaa aaa aaa @@ -122337,7 +120837,7 @@ aaa aaa aaa aaa -abi +dij abj apF aEc @@ -122382,9 +120882,9 @@ aaa aaa aaa aaa -abi -abj -abi +aaa +aaa +aaa abj bwN bzE @@ -122396,7 +120896,7 @@ bwN abj abj abj -bYm +nZa abj coi abj @@ -122422,23 +120922,23 @@ cie cie cie bXU -dmq -cGw +rkv +drn +dhG cHA -cjV cJP cLC +rkV cHA -cQs -cRD +drn cTi -cTg -cUP -cWk -cXR -cCx +cJK +aaa +cHA +cXR +cHA +aaa aaa -abi aaa aaa aaa @@ -122594,7 +121094,7 @@ aaa aaa aaa aaa -abi +dij aaa abj abj @@ -122625,7 +121125,6 @@ abj acF aaa abj -abj aaa aaa aaa @@ -122639,10 +121138,11 @@ aaa aaa aaa aaa -abj aaa -abi -abj +aaa +aaa +aaa +acF bwN bzE bBi @@ -122651,9 +121151,9 @@ bBi bzE bwN abj -abi +dij aaa -bYm +nZa aaa csr aaa @@ -122680,22 +121180,22 @@ abj cbb bXU dmq -cFN -cHA -cJL -cWl -cYb -cHA -cQv drn -drn -cTg -cUQ +cXU +cHA cWl -cYb -cCx -abj -abj +unt +lxh +cHA +sQr +sZp +cHA +aaa +cHA +fxr +cHA +vXX +aaa aaa aaa aaa @@ -122851,8 +121351,8 @@ aaa aaa aaa aaa -abi -abi +dij +dij abj abj aaa @@ -122881,25 +121381,25 @@ aPk aNT aWR abj -abi -abj -abj -abi -abi -abi -abi -abi -abj -abi -abi -abi -abi -abi -abj -abi -abj -abi abj +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +acF bwN bzE bzE @@ -122910,7 +121410,7 @@ bwN abj abj aaa -bYm +nZa aaa csr aaa @@ -122937,19 +121437,19 @@ cda cbb cDx bXU -cIu +drn +dhG cHA cHA -cjX -cLz +pWT cHA cHA -cjX +dtU +drn +cJK cHA cHA -cHA -cjX -cHA +sQZ cHA abj aaa @@ -123111,7 +121611,7 @@ aaa aaa aaa aaa -abi +dij aaa ash atL @@ -123125,7 +121625,7 @@ ash atL atY aaa -abi +dij aaa abj abj @@ -123138,25 +121638,25 @@ aPl aGZ aSx aTS -aaa -abj -aaa -abj -aaa -abj -aaa -abj -aaa -abj -aaa -abj -aaa -abj -aaa abj aaa aaa -abj +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +acF bwN bzG bBl @@ -123166,7 +121666,7 @@ bGs bwN abj bVs -bYa +wRP bYJ abj csr @@ -123194,8 +121694,8 @@ cCg cbb cDx bXU -cFP -cHe +dhG +drn cIv dhG cLA @@ -123207,7 +121707,7 @@ cLA drn cWm cXT -cHA +kyU abj aaa aaa @@ -123368,7 +121868,7 @@ aaa aaa aaa aaa -abi +dij aaa ash atL @@ -123381,8 +121881,8 @@ abj ash atL atY -abj -abi +dKA +dij abj abj aGX @@ -123395,24 +121895,24 @@ aPm aGZ aGZ aZY -abi -abi -abi -abi -abi -abj -abi -abi -abi -abi -abi -abj -abi -abi -abi -abi -abi abj +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa abj bwN bzH @@ -123625,7 +122125,7 @@ aaa aaa aaa aaa -abi +dij aaa ash atL @@ -123639,7 +122139,7 @@ ash atL atY aaa -abi +dij aaa abj aGY @@ -123662,7 +122162,7 @@ aaa abj abj abj -aaa +abj abj abj abj @@ -123734,8 +122234,8 @@ dbz dbz aaa aaa -abi -abi +aaa +aaa aaa aaa aaa @@ -124139,7 +122639,7 @@ aaZ aaa aaa aaa -abi +dij aaa abj aaa @@ -124153,7 +122653,7 @@ abj aaa abj aaa -abi +dij abj abj aGY @@ -124251,7 +122751,7 @@ dbz aMW aMW abj -abi +aaa aaa aaa aaa @@ -124395,11 +122895,11 @@ aaa aaa aaa aaa -abj -abi -abi -abj -abi +aaa +dij +dij +aGW +dij abj aaa abj @@ -124407,12 +122907,12 @@ aaa abj aaa abj -abi -abj -abi -abi -abj +dij +aGW +dij +dij abj +aaa aGY aGY aLr @@ -124485,7 +122985,7 @@ bLP cJR cLD cMV -cOB +cLD cQx cLD cJR @@ -124508,8 +123008,8 @@ dpR aOs aMW abj -abi -abi +aaa +aaa aaa aaa aaa @@ -124652,24 +123152,24 @@ aaa aaa aaa aaa +aaa +aaa +aaa +aaa +dij +dij +dij +dij +dij +dij +dij +dij +dij +abj +abj +abj abj aaa -abj -aaa -abi -abi -abi -abi -abi -abi -abi -abi -abi -abj -abj -abj -abj -abj aGZ aIt aMO @@ -124768,7 +123268,7 @@ abj abj abj abj -abi +aaa aaa aaa abj @@ -124914,7 +123414,7 @@ aaa aaa aaa aaa -abj +aaa aaa abj aaa @@ -124924,7 +123424,7 @@ aaa abj aaa aaa -abi +aaa aaa acF aHa @@ -124996,7 +123496,7 @@ bXU cFT cHk cIx -cJT +haY cLF cMX cOC @@ -125016,8 +123516,8 @@ dhw diY dkr dYt -dYu -dYu +oQs +oQs dcX dqZ aMY @@ -125025,7 +123525,7 @@ abj aaa aaa abj -abi +aaa aaa aaa abj @@ -125171,7 +123671,7 @@ aaa aaa aaa aaa -abj +aaa aaa abj abj @@ -125274,7 +123774,7 @@ dfM dfM dfM dmN -aRm +wMv dcX dra dbz @@ -125282,7 +123782,7 @@ dbz dbz aaa abj -abi +abj abj abj abj @@ -125428,9 +123928,9 @@ aaa aaa aaa aaa -abi -aaa -abi +dij +dij +dij aaa aAe aBV @@ -125532,8 +124032,8 @@ dfN aUp dmO aSP -aRm -aRm +wMv +wMv aUp aUp dbz @@ -125685,9 +124185,9 @@ aaa aaa aaa aaa -abi -abj -abi +dij +rvc +dij abj aAi ayG @@ -125942,9 +124442,9 @@ aaa aaa aaa aaa -abj -aaa -abi +dij +rvc +dij aaa aAi aAi @@ -126194,14 +124694,14 @@ aaa aaa aaa aaa -abi -abj -abi -abi -abi -abi -abj -abi +aaa +aaa +aaa +aaa +aaa +dij +rvc +dij abj aAi ayG @@ -126302,10 +124802,10 @@ dfN dcX dcX dmO -aRm +wMv dYy drd -aRm +wMv dtL aMW abj @@ -126451,14 +124951,14 @@ aaa aaa aaa aaa -abi -abj +aaa +aaa aaa aaa abj -abj -abj -abj +dij +dij +dij abj aAi aDC @@ -126477,9 +124977,9 @@ aMG aOb aPH aQV -aPF +aSD aSc -aSI +aVF aXj aYz bam @@ -126559,7 +125059,7 @@ aUp dcX dfN dmO -dYu +oQs dYz drc aUp @@ -126708,11 +125208,11 @@ aaa aaa aaa aaa -abi +aaa +aaa abj -abj -abi -abi +aaa +aaa abj atd atd @@ -126855,13 +125355,13 @@ aaa aaa aaa aaa -abi -abi -abi +dij +dij +dij abj -abj -abi -abi +sso +dij +dij aaa aaa aaa @@ -126965,7 +125465,7 @@ aaa aaa aaa aaa -abi +aaa aaa abj aaa @@ -126992,10 +125492,10 @@ aOg aPy aQX aSD -aUc -aVF +aPF +aSI aXl -ban +aVO ban bbP ban @@ -127073,7 +125573,7 @@ dja aSP aRm dmQ -aRm +wMv dcX drf aMW @@ -127081,7 +125581,7 @@ abj aaa aaa abj -abi +aaa aaa aaa abj @@ -127108,21 +125608,21 @@ aaa aaa aaa aaa -abi +dij abj abj -abi -abi +dij +dij aaa aaa abj aaa aaa -abi -abi -abj -abi -abi +dij +dij +sso +dij +dij aaa aaa aaa @@ -127222,9 +125722,9 @@ aaa aaa aaa aaa -abi -abj -abi +dij +dij +dij abj atd atd @@ -127338,7 +125838,7 @@ abj abj abj abj -abi +abj abj abj abj @@ -127365,7 +125865,7 @@ aaa aaa aaa aaa -abi +dij aaa aaa abj @@ -127379,7 +125879,7 @@ aaa abj aaa aaa -abi +dij aaa aaa aaa @@ -127479,9 +125979,9 @@ aaa aaa aaa aaa -abj -aaa -abi +dij +rvc +dij abj atd aua @@ -127504,15 +126004,15 @@ aLn aML aOg aPH -aQZ -aSD -aUc +spS +iiY +veH aVI aXn aYD +cOB bap -bap -bap +cOB beK aXq bhk @@ -127595,7 +126095,7 @@ abj aaa aaa abj -abi +aaa aaa aaa abj @@ -127622,7 +126122,7 @@ aaa aaa aaa aaa -abi +dij aaa dTV dYL @@ -127636,7 +126136,7 @@ dTV dYL dVn aaa -abj +sso aaa aaa aaa @@ -127736,9 +126236,9 @@ aaa aaa aaa aaa -abi -abj -abi +dij +rvc +dij aaa atd aub @@ -127852,7 +126352,7 @@ cZt cZt cZt abj -abi +aaa aaa aaa abj @@ -127879,7 +126379,7 @@ aaa aaa aaa aaa -abj +sso aaa dTV dYM @@ -127893,7 +126393,7 @@ dTV dYM dVn aaa -abi +dij aaa aaa aaa @@ -127993,9 +126493,9 @@ aaa aaa aaa aaa -abi -aaa -abi +dij +rvc +dij abj atd aub @@ -128136,7 +126636,7 @@ aaa aaa aaa aaa -abj +sso abj dTV dYM @@ -128150,7 +126650,7 @@ dTV dYM dVn abj -abi +dij aaa aaa aaa @@ -128250,9 +126750,9 @@ aaa aaa aaa aaa -abi -abj -abj +dij +rvc +dij aaa atd aub @@ -128393,7 +126893,7 @@ aaa aaa aaa aaa -abi +dij aaa dTV dYM @@ -128507,9 +127007,9 @@ aaa aaa aaa aaa -abj -aaa -abi +dij +rvc +dij abj atd aue @@ -128644,13 +127144,13 @@ aaa aaa aaa aaa -abi -abi +dij +dij aaa -abi -abi +dij +dij aaa -abi +dij aaa dTV dYM @@ -128665,9 +127165,9 @@ dYM dVn aaa abj -abi -abi -abi +dij +dij +dij aaa aaa aaa @@ -128764,9 +127264,9 @@ aaa aaa aaa aaa -abi -abj -abi +dij +rvc +dij aaa atd aub @@ -128826,16 +127326,16 @@ bWK bWK bYo bXZ -bZx +bhL cbp -cgN -bos -cgN -cfb -cgN -cfb -cgN -cfb +mMt +gTA +mMt +jFV +mMt +jFV +mMt +vDY cpt cfb cgN @@ -128901,7 +127401,7 @@ aaa abj abj abj -abi +dij abj abj abj @@ -128924,7 +127424,7 @@ aaa aaa abj aaa -abi +dij aaa aaa aaa @@ -129021,9 +127521,9 @@ aaa aaa aaa aaa -abi -aaa -abi +dij +rvc +dij abj atd aud @@ -129036,8 +127536,8 @@ aAa aBX aAa aCZ -aAa -aCZ +sdP +hPT aFX aGi aIH @@ -129053,7 +127553,7 @@ aVM aXq aYI bhp -bhp +mfl bhp beO aXn @@ -129158,7 +127658,7 @@ abj acF aaa aaa -abi +dij abj dQB dQB @@ -129278,9 +127778,9 @@ aaa aaa aaa aaa -abi -aaa -abj +dij +rvc +dij aaa atd aub @@ -129310,11 +127810,11 @@ aVN aXr aYJ bau -bau +oZY bau aXG aXr -bau +sGz biV bkK bmH @@ -129394,7 +127894,7 @@ dfW dYG cZt abj -abi +dij aaa aaa abj @@ -129438,7 +127938,7 @@ aaa aaa abj aaa -abi +dij aaa aaa aaa @@ -129535,9 +128035,9 @@ aaa aaa aaa aaa -abi -abj -abi +dij +rvc +dij abj atd aue @@ -129563,17 +128063,17 @@ aPG aRf aSD aTZ -aVO +aVF aXs aUQ -aXs +dkD bbV -aXs +aYK aXN -aXs -aXs -aXs -bkL +ijT +mzZ +ban +bkM bmI aOg aOg @@ -129651,7 +128151,7 @@ dfW duS cZt abj -abi +dij aaa aaa abj @@ -129672,13 +128172,13 @@ abj acF aaa aaa -abi +dij abj dYI abj aaa aaa -abi +dij aaa dTV dYO @@ -129693,9 +128193,9 @@ dYO dVn aaa abj -abi -abi -abi +dij +dij +dij aaa aaa aaa @@ -129792,9 +128292,9 @@ aaa aaa aaa aaa -abi -abj -abi +dij +rvc +dij aaa atd aub @@ -129821,12 +128321,12 @@ aRg aSD aTZ aVF -aXt -aYK -baw -aYK -aYK -aYK +bgg +bkL +bgg +aTZ +ban +tiC bgg ban ban @@ -129908,7 +128408,7 @@ drk duU cZt abj -abi +dij aaa aaa abj @@ -129929,13 +128429,13 @@ aaa abj abj abj -abi +dij abj dYJ abj aaa aaa -abi +dij aaa dTV dYO @@ -130049,9 +128549,9 @@ aaa aaa aaa aaa -abj -abj -abi +dij +rvc +dij abj atd aub @@ -130081,7 +128581,7 @@ aVP aXu aYL aXu -bbW +hlY bbW beP bgh @@ -130119,8 +128619,8 @@ bXU bQr bQr clv -cop -cqP +cnb +cnb buB cso cuR @@ -130165,7 +128665,7 @@ dfW duV cZt abj -abi +dij aaa aaa abj @@ -130181,9 +128681,9 @@ aaa abj aaa aaa -abi -abi -abi +dij +dij +dij abj abj abj @@ -130192,7 +128692,7 @@ dYK abj abj aaa -abi +dij abj dTV dYO @@ -130206,7 +128706,7 @@ dTV dYO dVn abj -abi +dij aaa aaa aaa @@ -130306,9 +128806,9 @@ aaa aaa aaa aaa -abi -abj -abj +dij +rvc +dij abj atd auf @@ -130449,7 +128949,7 @@ dQK dPp abj aaa -abi +dij aaa dTV dYO @@ -130463,7 +128963,7 @@ dTV dYO dVn aaa -abi +dij aaa aaa aaa @@ -130563,9 +129063,9 @@ aaa aaa aaa aaa -abi -aaa -abi +dij +rvc +dij abj atd aug @@ -130688,17 +129188,17 @@ acF abj abj abj -abi -abi +dij +dij abj -abi -abi -abi -abi -abi +dij +dij +dij +dij +dij abj -abi -abi +dij +dij abj abj dPp @@ -130706,7 +129206,7 @@ dQL dPp abj abj -abi +raB aaa dTV dYP @@ -130720,7 +129220,7 @@ dTV dYP dVn aaa -abi +dij aaa aaa aaa @@ -130820,9 +129320,9 @@ aaa aaa aaa aaa -aaa -aaa -abi +dij +dij +dij abj atd atd @@ -130963,12 +129463,12 @@ dQO dPp dPp abj -abj +aaa aaa aaa abj aaa -aaa +dKz dTV dYP dVn @@ -130977,7 +129477,7 @@ aaa abj aaa aaa -abi +dij aaa aaa aaa @@ -131203,15 +129703,15 @@ dXX acF abj aaa -abi -abi -abi -abi -abi +dij +dij +dij +dij +dij abj -abi -abi -abi +dij +dij +dij aaa abj dPq @@ -131220,21 +129720,21 @@ dQQ dRo dPq abj -abi aaa -abi -abi +aaa +dij +dij aaa aaa aaa abj aaa aaa -abj -abi -abi -abj -abi +sso +dij +dij +sso +dij aaa aaa aaa @@ -131441,9 +129941,9 @@ dhH djk cAS cAS -dna +vGB doA -cAS +kpI dro dIf cHA @@ -131480,14 +129980,14 @@ abj aaa aaa aaa -abj +sso aaa -abi -abi -abj -abi -abi +dij +dij abj +dij +dij +sso aaa aaa aaa @@ -131737,9 +130237,9 @@ abj abj abj aaa -abj aaa -abj +aaa +aaa aaa aaa aaa @@ -131953,10 +130453,10 @@ deQ dga djf djn -ddi -dng -dng -dng +wil +seQ +fjv +vnM ddi cYc cXU @@ -131993,10 +130493,10 @@ dPq dku ddy abj -abi -abj aaa -abi +aaa +aaa +aaa aaa aaa aaa @@ -132210,7 +130710,7 @@ deR dgb dhK djo -dkD +ddi dlO dnc doB @@ -132243,17 +130743,17 @@ dNy dFg dOO dPr -deW +qxp dQM dcA dbp dSn dlc abj -abi -abi -abj -abi +aaa +aaa +aaa +aaa aaa aaa aaZ @@ -132469,7 +130969,7 @@ dhL dkx dkE dlP -dnd +dng cPf ddi cQY @@ -132510,7 +131010,7 @@ abj abj abj aaa -abi +aaa aaa aaa aaa @@ -132725,9 +131225,9 @@ dgf dhM djs dkF -dlP -dne -cPf +dng +iLr +dng ddi cQY cXU @@ -132766,9 +131266,9 @@ dbw dQS dbw abj -abj -abj -abj +aaa +aaa +aaa aaa aaa aaa @@ -132940,10 +131440,10 @@ bWH cHA bZI cbE -cly -dna -cHs -cAS +dhG +dtP +cNh +drn cke cly dna @@ -132977,15 +131477,15 @@ cIM cIM ddi dxr -dge +lVT dge dhR djt dkH -cKs -dnf -dER -ddi +dkI +dkI +dkI +dkI cYc dsr cHA @@ -133023,9 +131523,9 @@ dSA dTf dQb abj -abi aaa -abi +aaa +aaa aaa aaa aaa @@ -133238,11 +131738,11 @@ dgc dgf dhT dju -dkH +dkI cKu -dng -dng -ddi +mIp +sMj +dkI cQY dhG cHA @@ -133280,9 +131780,9 @@ dSF dUi dTW abj -abi -abj -abi +aaa +aaa +aaa aaa aaa aaa @@ -133495,14 +131995,14 @@ dgc dgc dhU djw -dkH -dng -dng -dng -ddi -cYe -drn -cLA +dkI +jVL +mTO +jVL +dkI +vGz +cAS +ydp drn dvV dxh @@ -133527,7 +132027,7 @@ dHs dNC dFg dEi -dPw +xoq dQe dRj dRB @@ -133537,9 +132037,9 @@ dSG dUl dTW abj -abi aaa -abi +aaa +aaa aaa aaa aaa @@ -133752,14 +132252,14 @@ dgc dgg dhQ djx -dkF -dng +dkI +rCe dnh doD -ddi -drp -dst -cly +dkI +dmq +dmq +rIK dst dvW dWn @@ -133794,9 +132294,9 @@ dSO dUS dQS abj -abj aaa -abj +aaa +aaa aaa aaa aaa @@ -134009,13 +132509,13 @@ dgj dgk dhV djy -ddi -dng -dng -dng -ddi -dsq -cNh +dkI +mlR +nte +hgq +iDz +vXX +dmq dtP cNh dvX @@ -134051,9 +132551,9 @@ dSQ dlJ dQS abj -abi -abj -abi +aaa +aaa +aaa aaa aaa aaa @@ -134267,9 +132767,9 @@ dds dTe djv dkI -dkI -dkI -dkI +esK +qWp +uza dkI dkI dkI @@ -134308,9 +132808,9 @@ dSW dTj dbw abj -abi aaa -abi +aaa +aaa aaa aaa aaa @@ -134516,9 +133016,9 @@ cTM cVm cWT dto -cND +tke dbO -cPn +gqM cZx dgl dhW @@ -134562,12 +133062,12 @@ dRF dkh dSq dTg -dOQ +qfH dTW abj -abj aaa -abi +aaa +aaa aaa aaa aaa @@ -134782,7 +133282,7 @@ dhY dhD dkK dlS -cMD +dve dve dwe dCN @@ -134822,9 +133322,9 @@ dSH dVo dTW abj -abi -abj -abi +aaa +aaa +aaa aaa aaa aaa @@ -135079,9 +133579,9 @@ dSI dTl dQb abj -abi aaa -abj +aaa +aaa aaa aaa aaa @@ -135279,7 +133779,7 @@ cIO bQx cLU cNw -cOZ +cQP cVf cVf cSc @@ -135287,7 +133787,7 @@ cVf cWK cWV dvN -dau +cND dbP cPn cIW @@ -135336,9 +133836,9 @@ dbw dbw dbw abj -abi -abj -abj +aaa +aaa +aaa aaa aaa aaa @@ -135416,7 +133916,7 @@ aaa acC acC acC -afb +buc adv adZ adZ @@ -135595,7 +134095,7 @@ aaa abj aaa aaa -abj +aaa aaa aaa aaa @@ -135687,7 +134187,7 @@ ajZ ajZ ajZ ajZ -ajZ +cMP ajZ ajZ ajZ @@ -135790,9 +134290,9 @@ cDW cGr dmq dmq -cKr -cKr -cKr +dvf +dvf +dvf cPb cQJ cSh @@ -135852,7 +134352,7 @@ abj abj abj abj -abj +aaa aaa aaa aaa @@ -136047,17 +134547,17 @@ dhG cGs cHw cIQ -cZt +cYA cLV -cKr -cKr -cKr -cKr -cKr -cKr -cKr -cKr -cKr +dvf +dvf +dvf +dvf +dvf +dvf +dvf +dvf +dvf dau dbP cPn @@ -136109,7 +134609,7 @@ dTX dIx dIx abj -abi +aaa aaa aaa aaa @@ -136213,7 +134713,7 @@ acC adb adb adb -anl +iIw anK adb aoS @@ -136304,20 +134804,20 @@ drn cGt cHx cXU -cZt -dau +iiv +vYC mzQ -dau -dau -dau +viE +nbz +cYA cTI +mhT +vVf +vFq +cYA dau -dau -dau -cYs -dau -dbR -ddw +dbP +cPn dBD dgq did @@ -136366,7 +134866,7 @@ dTY dUJ dIx abj -abi +aaa aaa aaa aaa @@ -136565,14 +135065,14 @@ cLB cLX cNx cPg -daA -daA +cTJ +cYA cMl -daA -daA -daA -cYt -daA +dni +vrp +dni +cYz +dau dbS cPn dfe @@ -136614,7 +135114,7 @@ dRu dPE dQi dQU -dRu +gsy dRM dSe dRM @@ -136623,7 +135123,7 @@ dTZ dUK dTX abj -abi +aaa aaa aaa aaa @@ -136818,20 +135318,20 @@ cJO cGv drn cIS -cZt -cMn -cKF +cYA +rCJ +tLE +cPh +cVj +cYz +cVj +cVj cPh -cKF -cVJ -cNy -cKF -cKF cYo -cYu +cYA daB -dbV -cPn +mLW +tMu dff dff czd @@ -136880,9 +135380,9 @@ dUb dUL dTX aaa -abj aaa -abi +aaa +aaa aaa aaa aaa @@ -137075,20 +135575,20 @@ cHA cIz cHA cHA -cZt -cZt -cZt +cYA +rtH +pRe cQw -cZt -cZt -cIW -cIW -cIW -cZt -cZt -cZu +vLu +rIy +kRz +qOO +pjY +kRz +sxS +ctm cZy -dde +cPn dff dgs die @@ -137137,9 +135637,9 @@ dUb dUM dTX abj -abi aaa -abi +aaa +aaa aaa aaa aaa @@ -137332,19 +135832,19 @@ bst cGx cHB bvV -cZt +cYA cMa cNA -cPj -cQZ -cSj +cWN +cVj +cYz cTJ cVj cWN -cIW -cYv -cKF -dbV +cVj +cYA +dau +dbP cPn dfg dgt @@ -137394,9 +135894,9 @@ dUc dUN dIx abj -abi -abj -abi +aaa +aaa +aaa aaa aaa aaa @@ -137589,19 +136089,19 @@ cDd cGy xqH ddm -cZt +cYA cMb -cNB +cVj cPk -cRa -muI -cMm -cMm -cWO -cIW +cTJ +cYA +vrF +fMg +dmd +fBm cYz -cKF -dbV +dau +dbP cPn dfh dhN @@ -137653,7 +136153,7 @@ dIx abj aaa aaa -abi +aaa aaa aaa aaa @@ -137756,7 +136256,7 @@ alY afb alY ant -anP +rBP aoo aoX apM @@ -137846,19 +136346,19 @@ cEL btE cHC ddn -cZt +cYA cMc -cPl +hAi tsN cRb -cWu +cYA cTL cVl cWP -cIW +jbq cYA -cKF -dbV +dau +dbP cPn dfi dhO @@ -137908,9 +136408,9 @@ dml dUO dIx abj -abi -abj -abi +aaa +aaa +aaa aaa aaa aaa @@ -138056,7 +136556,7 @@ bhH bjp bQc aYZ -boo +nqC bqu bhX bsv @@ -138103,19 +136603,19 @@ cFp dxV ddl cIV -cZt -cIW -cIW -cIW -cRc -cZt -cZt -cZt -cZt -cZt -cZt +cYA +cYz +cYz +cYz +jLB +cYA +cYA +cYA +cYA +cYA +cYA dtS -dbV +dbP cPn dfj dhP @@ -138160,14 +136660,14 @@ dXI dJx dSi dSJ -dTs +kTW dml dSi dTX abj -abi aaa -abi +aaa +aaa aaa aaa aaa @@ -138364,15 +136864,15 @@ cKw cMd cND cPn -aKA +mnG cSm cZt cTU -cVq +cMm cXb cZt -cKF -dbV +dZb +dbP cPn dfk dig @@ -138394,10 +136894,10 @@ dwi dwi cKr dCQ -dEP -dFr -dFr -dGc +cNI +cRe +cRe +cRi dJy dHE dID @@ -138422,9 +136922,9 @@ dUe dUP dTX aaa -abj aaa -abi +aaa +aaa aaa aaa aaZ @@ -138615,10 +137115,10 @@ cDO csK cEL bqu -cHE -cIX +bIG +cIW cKx -cMe +cMm cMf cPo aKC @@ -138630,10 +137130,10 @@ cXc cYB daE dbW -cPn -cPn -dih -cPn +cGJ +cGJ +cIn +cIY djL dkV cPn @@ -138651,7 +137151,7 @@ dXv cRd cZt dCR -dFr +cPs dEP dOO dGc @@ -138679,9 +137179,9 @@ dUh dYT dTX aaa -abj aaa -abj +aaa +aaa aaa aaa aaa @@ -138872,13 +137372,13 @@ cEb csK cGY bqu -cHF -cIY -cKy +cHE +cIX cMe -cNE -cPr -cMm +xpu +xme +sjV +eOL cPn cKI cUZ @@ -138888,7 +137388,7 @@ cKI daF cvm ddA -cRe +daA cxD dii djM @@ -138900,15 +137400,15 @@ drN dyL dyL dyL -dkW +cMg cZH dxx -cNx +cMj dzT dbj dBh -dik -dFr +cNE +cPF dOO dFr dID @@ -138929,16 +137429,16 @@ dMm dPL dRz dRP -dSl -dSM +dTs +lKc dUg dUR dYT dTX abj -abi aaa -abi +aaa +aaa aaa aaa aaa @@ -139055,7 +137555,7 @@ aBb axb axc axb -axb +gpU axb axb aDF @@ -139130,33 +137630,33 @@ cEP cIT bqu cHG -cIY -cKy -cMg +cJa +dau +cKD cNF cPq -cMe -ddw +kWO +cPn cTC -cVc -cWH -cYk +dje +dfR +djD cZr -cKE +cKF dbX cSt dfm dgv -dij -duc +cSt +cSt dkX -duc -duc +cSt +cSt dIi dsu -duc -duc -duc +cSt +cSt +cSt dvj dgv cSt @@ -139193,9 +137693,9 @@ dUQ dYU dIx abj -abi -abj -abi +aaa +aaa +aaa aaa aaa aaa @@ -139362,11 +137862,11 @@ bQH ciB bUR chi -bYs +cbT chi -bYs +cbT cnv -bYs +cbT chh ciD ckq @@ -139386,14 +137886,14 @@ cEr cEQ cIT bqu -bIG +cHG cIW -cKz -cMi +cND +cKT cNG cPr -cMm -cRd +ozX +cPn cZx cVd cZG @@ -139450,9 +137950,9 @@ dIx dIx dIx abj -abj aaa -abi +aaa +aaa aaa aaa aaa @@ -139582,11 +138082,11 @@ aKq aFA aFA aOF -aPZ +hly aRA aRd aRA -aPZ +hly aIZ aYZ aYZ @@ -139643,13 +138143,13 @@ cEr cER cIT bqu -bIG +cHG cIW cKA -cMi -cNG -cPr -cMm +cKT +cSu +pGk +xAc cSp cTQ cVr @@ -139709,9 +138209,9 @@ dWH dYQ acF aaa -abj aaa -abi +aaa +aaa aaa aaa aaa @@ -139799,7 +138299,7 @@ ajZ ajZ ajZ ajZ -ajZ +cMP ajZ ajZ ajZ @@ -139851,7 +138351,7 @@ aZa bdN bfj bgy -bhL +bdP aZh blm bmZ @@ -139903,10 +138403,10 @@ qZt exL cIZ cKB -cMj +muI cNH -cPr -cMm +hJG +ckH cWL cTR cVe @@ -139934,7 +138434,7 @@ dzW dEn dEn duZ -dEy +cMk dCV dbC dbI @@ -139964,11 +138464,11 @@ dIH uil dIH abj -abj aaa -abi -abj -abi +aaa +aaa +aaa +aaa aaa aaa aaa @@ -140103,7 +138603,7 @@ aWj aLS aUj aOG -aTp +aOG bcx bdP bdQ @@ -140157,15 +138657,15 @@ cEN csK cES bqu -bIG +cHG cIW cKC -cMk -cNI -cPs -cMe -cSr -cTS +cKT +ncs +xBJ +kWO +cSt +cTT cVt daJ daJ @@ -140201,8 +138701,8 @@ dfu dfu dIH dJC -dKo -dKo +cYk +cYk dLE dXJ dKo @@ -140221,11 +138721,11 @@ dIH dIH dIH abj -abi -abj -abi aaa -abi +aaa +aaa +aaa +aaa aaa aaa aaa @@ -140379,7 +138879,7 @@ abj bwe bAx bCp -byW +bAB bFC bHk bJg @@ -140414,14 +138914,14 @@ cCK csK cET bqu -bIG +cHG cIW -cKD -cMm -cNG -cPr -cMm -cRg +cMn +cKT +vKB +pPG +ewj +cSt cTR cVu cWY @@ -140457,13 +138957,13 @@ dGh dGP dHN dHU -dQI -dKo -dKo -dLE -dXJ -dNa -dNa +cWb +cYk +cYk +daQ +dbR +dbV +ddw dNa dKo dKo @@ -140478,9 +138978,9 @@ dSP dUT dIH abj -abj aaa -abi +aaa +aaa aaa aaa aaa @@ -140617,9 +139117,9 @@ aUJ aWh aUw aOG -aOG -aYZ +aTp bdR +bdP bgv bgB bhR @@ -140651,13 +139151,13 @@ bOZ cab cbW cdI -cfF +cfK chk ciF bYv aaa aaa -bHk +dER cpV cry csK @@ -140671,14 +139171,14 @@ csK csK cEU bqu -bKt -cIY -cKE -cMe +cHG +cJa +cKF +cSr cNJ cPt -cMe -cSs +ckI +cSt cTT cVv cYy @@ -140699,7 +139199,7 @@ dqm dsL dvl dui -dvn +dOc dvp dam dFw @@ -140714,10 +139214,10 @@ dGl dGS dHT dII -dJD +cWH dKo dKo -dLE +dLG dXJ dNb dNN @@ -140735,9 +139235,9 @@ dWA dVb dIO aaa -abj aaa -abj +aaa +aaa aaa aaa aaa @@ -140891,7 +139391,7 @@ aaa bwd bxm byR -byU +wGL bCl byU bFy @@ -140928,12 +139428,12 @@ cCL cEe cEL bqu -bIG +cHG cJa cKF cMm -cNG -cPr +pML +vJs cMm cSt cTF @@ -140956,8 +139456,8 @@ dsH due dvm dws -dvn -dyT +dOD +dav dav dyR dzY @@ -140971,10 +139471,10 @@ dGl dGS dHT dIJ -dJD +cWH dKo -dKo -dLE +gkk +dLG dXJ dNc dNO @@ -140992,9 +139492,9 @@ dUm dVb dIO abj -abj aaa -abi +aaa +aaa aaa aaa aaa @@ -141169,12 +139669,12 @@ cfG chl ciH bYv -bHk -bHk -bHk +dER +dER +dER cpX crB -bHj +euc ctZ csN cxa @@ -141185,15 +139685,15 @@ cCM cEf cEL bqu -bIG +cHG cIW cKG cMm cNK cPu cMm -cSu -cTT +cSt +emK cVx cWR cYq @@ -141229,10 +139729,10 @@ dGS dHQ dLD dST -dSZ -dSZ -dTK -dUU +dKo +dKo +dLG +dXJ dNb dNP dOw @@ -141249,9 +139749,9 @@ dUn dVb dIO abj -abi -abj -abi +aaa +aaa +aaa aaa aaa aaa @@ -141442,7 +139942,7 @@ cyk gyY cEV cGz -bIG +cHG cIW cKH cMn @@ -141489,7 +139989,7 @@ dXC dKp dKp dLF -dVe +dXJ dOu dNQ dOx @@ -141498,7 +139998,7 @@ dPN dQF dNQ dRH -dKo +gkk dXJ dSU dNQ @@ -141506,9 +140006,9 @@ dOw dUY dIH abj -abi aaa -abj +aaa +aaa aaa aaa aaa @@ -141676,10 +140176,10 @@ bMX bOT aaa bOZ -bOZ -bOZ -bOZ -bOZ +dne +dnf +cfK +drp bYv ciJ bYv @@ -141736,7 +140236,7 @@ dql dBH dCX dfu -dVw +dHT dcV dGU dWL @@ -141746,7 +140246,7 @@ dQI dKo dKo dLG -dVe +dXJ dNb bGr dOw @@ -141763,9 +140263,9 @@ dUp suy dIH abj -abi aaa -abi +aaa +aaa aaa aaa aaa @@ -141932,11 +140432,11 @@ bQL bSJ bOT aaa -bYw +bOZ caf cca -cdM -cfJ +cfK +cfK chn cpT csW @@ -141978,7 +140478,7 @@ diu dnC doS dnC -dnD +dHT doY dft drL @@ -141993,7 +140493,7 @@ doY doY dDb dXj -dnD +dHT dcV dGU dGU @@ -142020,9 +140520,9 @@ dUq dUZ dIH abj -abi -abj -abi +aaa +aaa +aaa aaa aaa aaa @@ -142140,30 +140640,30 @@ asB aBj azv aAG -aZe -aZe -aZe +aXX +aXX +aXX aGI -aIg +aXZ aGI -aZe -aZe +aXX +aXX aKu -aZe -aZe -aZe -aZe -aZe +aXX +aXX +aXX +aXX +aXX aTj aWm -aZe -aZe aXX aXX +bvg +bvg bgw -aXZ -aXX -aXX +byW +bvg +bvg bhP bjB bar @@ -142175,7 +140675,7 @@ btH aaa bwh bxr -byW +bAB bAy bCt bEg @@ -142189,7 +140689,7 @@ bQM bSK bOT abj -bYw +bOZ cag ccb cdN @@ -142198,15 +140698,15 @@ cho ciL cnx clT -cnx -cnx +dLT +dLT cqb crF csR cud cvF cxa -cBo +rUS czN cBq cCP @@ -142240,7 +140740,7 @@ doZ dfB doZ doZ -doZ +neQ doZ dwt doZ @@ -142254,7 +140754,7 @@ dEZ dcj dWK dcS -dHT +cUv dXn dXn dXn @@ -142277,9 +140777,9 @@ dUr dVb dIO abj -abj aaa -abi +aaa +aaa aaa aaa aaa @@ -142446,7 +140946,7 @@ bQL bSL bOT aaa -bYw +bOZ cah ccc cdO @@ -142472,12 +140972,12 @@ cFa cGB cHK dEm -cKL -cKL -cNP -cPz +cKz cRh -diw +cNP +cRh +cRh +cmn cTW cYC cXd @@ -142487,16 +140987,16 @@ daO cYC cYC dgw -diw -diw +cmn +cmn dle cJY dmh -dnE +dpa dpa dsI drM -dnE +dpa nQq cTW dwu @@ -142506,12 +141006,12 @@ dQr dBj dBQ dDd -dXj +cRc dnD dGo dGo -dcV -dnD +cTS +cVc dXm dSV dTi @@ -142534,9 +141034,9 @@ dUs dVb dIO aaa -abj aaa -abj +aaa +aaa aaa aaa aaa @@ -142733,7 +141233,7 @@ cJk cJg cNQ cPA -cRi +cJg cJk cTX cVD @@ -142791,9 +141291,9 @@ dUt dVc dIO abj -abj aaa -abi +aaa +aaa aaa aaa aaa @@ -142984,12 +141484,12 @@ cBo eNm cFa bqu -cHN +cHK cJg cKM cMo cNR -cPL +cSA cRj cSx cTX @@ -142997,7 +141497,7 @@ cVE cXf cYD cXe -daQ +cVD dcl cVD dgD @@ -143048,9 +141548,9 @@ dKP dXQ dIH abj -abi -abj -abi +aaa +aaa +aaa aaa aaa aaa @@ -143225,12 +141725,12 @@ cfN chr ciP bYx -bHk -bHk -bHk +dER +dER +dER cqe crJ -bHj +euc cuh csN cxa @@ -143241,13 +141741,13 @@ cCS cEf cFa bqu -cHN +cHK cJg cKN -cMq +cSs cNS -cRk -cRk +cMq +wiR cSy cTY cVF @@ -143271,7 +141771,7 @@ dsO duk cYN dww -dww +cMi dwz dAd dwB @@ -143305,7 +141805,7 @@ dIO dIO dIO abj -abi +aaa aaa aaa aaa @@ -143498,7 +141998,7 @@ cCT cEe cFa bqu -cHN +cHK cJh cKO dea @@ -143666,7 +142166,7 @@ aaa aaa aaa adb -akG +gzU als aoC apl @@ -143693,7 +142193,7 @@ aJf aKy aLZ aNo -aNo +wPI aQh aRO aJd @@ -143741,7 +142241,7 @@ ciR bYx aaa aaa -bHk +dER cqg crP csV @@ -143755,7 +142255,7 @@ csV csV cEY bqu -cHN +cHK cJh cKO dea @@ -143768,7 +142268,7 @@ cVH cXh cYF dlW -cXg +ctb cXg ddN dgD @@ -143779,7 +142279,7 @@ dfv dfv dYc dYi -dYk +drX drX dsQ duk @@ -143896,10 +142396,10 @@ aaa aaa aaa aaa -aaa -aaa -adN adb +acC +acC +acC adb adb adb @@ -144012,12 +142512,12 @@ cCV csV cFa bqu -cHN +cHK cJg cKP dea cbr -cPF +hsQ cha cSB cUb @@ -144153,13 +142653,13 @@ aaa aaa aaa aaa -adg -adg -adg -adQ -aey acC -afc +adg +aeg +aeg +acC +cQs +cQv adZ adZ agm @@ -144269,13 +142769,13 @@ cCW csV cEZ bqu -cHN +cHK cJg cKQ dea -cNS -cMq -cUn +bYQ +lee +ckJ cSA cTZ cZF @@ -144410,26 +142910,26 @@ aaa aaa aaa aaa -adh +acC adz -adP aeg -aez -aeK +aeg +cJL afh aea +aea afM ajZ ahg ajZ -ahi +ajZ +ajZ +ajZ +cMP ajZ ajZ ajZ ajZ -ajZ -ajZ -ahi ahg ajZ ajZ @@ -144492,7 +142992,7 @@ bwf aos bCy bEl -bFP +bCL bHz bJl bLa @@ -144530,9 +143030,9 @@ ukK cJi cKR cMr -cbr +qZV cPH -cUn +ckJ cSD cTY cVK @@ -144667,30 +143167,30 @@ aaa aaa aaa aaa -adg -adg -adg -adQ -aeA +acC +adh +adh +adh acC afj aeb +aeb afN agn agH aiT -ahT +aiT aiT aiT aiT aiT aiT akb -aiL -agB -aeb +aiT +fuR +aiT alK -aeb +aiT ajH amB amL @@ -144783,13 +143283,13 @@ dte csV cFa bqu -cHN +cHK cJg cKS dea -cNS -cMq -cUn +ncT +giz +ckJ cSE cTX cXe @@ -144924,29 +143424,29 @@ aaa aaa aaa aaa -aaa -aaa -adN adb +aeK +cFP +aeK adb adb adb adb afa adb -agI -agI -aif -agI -agI -agI -agI -agI -agI -akV -akB -alc -akB +adN +adN +adN +adN +adN +adN +adN +adN +adN +adN +adN +adN +axm axm awY axm @@ -145005,7 +143505,7 @@ abj bwf bAG bCl -byU +aZe bFQ bWX bJn @@ -145040,13 +143540,13 @@ cDa csV cFa bqu -cHN +cHK cJg -cKT +dbn dea -cbr -dea -cUn +oyG +oAd +ckJ cRm cJg cVM @@ -145181,28 +143681,28 @@ aaa aaa aaa aaa -aaa -aaa -abj -abj +adb +cFN +cGw +cFN adb aeL afd afx afP ago -agI -agY -ahG -ahX -ait -aiW -aje -ajC -agI -akc -akC -ald +adN +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa akB alJ alZ @@ -145262,7 +143762,7 @@ aaa bwf bAt bCl -byU +aZe bFx bWX bJo @@ -145303,7 +143803,7 @@ cKU cMs cNV cPI -cUn +ckJ cSF cUc cVN @@ -145438,29 +143938,29 @@ aaa aaa aaa aaa -aaa -aaa -aaa -abj +adN +cFN +cHe +cFN adb aeM afe afy afQ agp -agI -agZ -ahH -ahZ -air -aiN -aiN -ajg -agI -akd -ale -ale -alz +adN +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +akB alX ama amC @@ -145519,7 +144019,7 @@ aaa bwf aot bCA -bEk +bkf asz bHx bJp @@ -145560,7 +144060,7 @@ cKV dea cbH ceQ -cUn +ckS cSF cUd cUn @@ -145572,14 +144072,14 @@ dco cSA dfz dgM -diC +mZY dkb dlq dnM dpm dpm dqA -drX +cKE dsX duk dvz @@ -145696,29 +144196,29 @@ aaa aaa aaa aaa -aaa -aaa -abj +cFN +cIu +cFN adb aeN aff afz afR agq -agI -aha -ahj -ahZ -air -aiN -aiN -ajh -agI -ake -akE -alf +adN +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa akB -aps +auu amb amD aoE @@ -145732,7 +144232,7 @@ arW asJ aKd aux -arW +qWs axm axu ayD @@ -145776,7 +144276,7 @@ aaa bwf bAs bCB -bAs +boT bAs bHx bJq @@ -145819,7 +144319,7 @@ cNS cRk cMq cSF -cUd +jYY cVO cnX cSF @@ -145836,7 +144336,7 @@ dta dnQ dpn dqB -drY +dpn dsY duk duk @@ -145954,27 +144454,27 @@ aaa aaa aaa aaa -abi -abj +aaa +aaa aeB aeB afg aeB aeB aeC -agI -ahb -ahI -aia -aiA -aiN -aiN -aiN -agI -akf -akF -alg -alA +adN +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +akB alM amc amE @@ -146033,7 +144533,7 @@ btH bwf bAr bCl -byU +aZe bFR bHx bJr @@ -146211,7 +144711,7 @@ aaa aaa aaa aaa -abi +dij abj aeB dtF @@ -146219,19 +144719,19 @@ duO dGZ aeB abj -agI -ahc -ahk -aib -aiB -aiN -aiN -ahY -agI -akg -ahe -alh -agK +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +akB alN amd amF @@ -146468,27 +144968,27 @@ aaa aaa aaa aaa -abi -abi +dij +dij aeC dtG afi afB aeB aaa -agI -ahd -ahJ -agI -agI -aiO -aiO -aig -agI -aiM -ahe -ali -agK +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +akB alO ame amG @@ -146499,7 +144999,7 @@ apo apw aqp arf -arW +bPq auu atP axf @@ -146547,7 +145047,7 @@ bwm bza bEo bCC -bEo +bqv bEo bHA bwm @@ -146565,7 +145065,7 @@ bwm bwm bwm ciV -ckH +bwm bwm bwm coE @@ -146733,19 +145233,19 @@ afk afC aeB abj -agK -ahe -ahe -ahe -aiv -aiP -aiP -aiP -ajK -akh -akH -alj -agK +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +akB alP ajI ajM @@ -146804,7 +145304,7 @@ btK bva bva bCD -bva +bsg bFM bHB bva @@ -146822,7 +145322,7 @@ bva bva bva bva -ckI +bva bva bva bSi @@ -146990,19 +145490,19 @@ afl aeC aeC abj -agK -ahf -ahe -ahe -ahe -ahe -ahe -ahe -ahe -aiY -ahe -afA -agK +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +akB alQ amf amG @@ -147017,7 +145517,7 @@ auu asM atR asK -arW +qWs ayS osS wXI @@ -147028,7 +145528,7 @@ aCN aBS aCN aCN -aLa +oOe aBS aBS aBS @@ -147061,7 +145561,7 @@ bxz bzb bEq bCE -bEq +bub bHm bHC bEq @@ -147079,15 +145579,15 @@ pfp cfS cnw cnC -ckJ +bSF cme bSF jUC cqp crT -ctb +bEq cuo -rjr +bSF bSF cyA bSF @@ -147110,7 +145610,7 @@ cKV cKV cKV cKV -don +ctd cSF dil cSF @@ -147122,7 +145622,7 @@ cSF dps cSF dsc -dtd +cRm duk dvE dwF @@ -147247,19 +145747,19 @@ afm aeC abj abj -agK -ahe -ahe -ahD -aix -aix -aix -aix -aix -aji -ahe -ajG -agK +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +akB alR amg amH @@ -147351,11 +145851,11 @@ cxn cxn cxn cxn -bng +rHU cGF -bng -bng -bng +iWE +pDD +cYP cYP cYP cPO @@ -147504,19 +146004,19 @@ afn aeC abj abj -agK -ahh -ahe -ahK -ahe -ahe -ahe -ahe -ahe -aki -ahe -ahe -agK +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +akB alS ajJ amI @@ -147551,7 +146051,7 @@ aQr aCN aKK azL -aTw +ssy aVa aWy aBS @@ -147585,7 +146085,7 @@ bPd bLh bSW bVg -bXc +mrW bYH cav ccp @@ -147599,9 +146099,9 @@ cvu coI cqq bYH -ctd +cEL cuu -bqv +bIX cxn cyB cAc @@ -147612,8 +146112,8 @@ cFd hos cmt bMD -cKZ -cYP +cLa +iIY cOa cPQ cRp @@ -147634,7 +146134,7 @@ dFE dmt dnU dpu -dqH +cKy dsd dul dur @@ -147746,34 +146246,34 @@ aaa aaa aaa aaa -abi -abi +dij +dij abj -abi -abi +dij +dij abj -abi +dij +aaa +aaa aaa -abj -abj abj aec abj abj aaa -agK -ahe -ahe -ahe -ahe -ahe -ahe -ahe -ahe -ahe -ahe -all -agK +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +akB alT ajL ajN @@ -147856,9 +146356,9 @@ cax cax cax bYK -ctd +cEL cuu -bqv +bIX cxn cyC cAd @@ -147866,16 +146366,16 @@ cBF cAc cxn bDD -buF -boG -boG +jsi +cmt +ffm cLa -cYP +sak cOb cPQ cRq cSJ -cUh +cVQ cVQ cYP cYR @@ -147999,38 +146499,38 @@ aaa aaa aaa aaa -abi -abi +dij +dij abj -abi -abi -aaa +dij +dij +dKz aaa abj aaa aaa -abi -abi -abj -abi +dij +dij +aGW +dij abj acp abj -abi abj -agK -ahe -ahe -ahe -ahe -ahe -ahe -ahe -ahe -ahe -ahe -ahe -agK +abj +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +akB alQ amG ajL @@ -148115,7 +146615,7 @@ chC lEt ctf cus -bsg +bhX cxn cyD bBk @@ -148123,11 +146623,11 @@ cAc cyD cxn bEH -cGJ -boG -boG +jKp +tNq +klh cLb -cYP +cPQ cOc cPR cRr @@ -148161,7 +146661,7 @@ dmt dCd dDh dEq -aaa +abj aaa aaa aaa @@ -148256,7 +146756,7 @@ aaa aaa aaa aaa -abi +dij aaa aaa abj @@ -148273,21 +146773,21 @@ aaa abj acp aaa -abi abj -agK -ahe -ahl -ahL -ahe -ahe -ahe -ahe -ahe -akj -akI -ahe -agK +abj +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +akB axm amh amh @@ -148370,9 +146870,9 @@ cay cax cqr bYK -ctj +cFa cuu -bqv +bIX cxn cxn cAe @@ -148381,8 +146881,8 @@ cxn cxn bng cGI -cJp -dfK +bng +bng bng cYP cYP @@ -148395,7 +146895,7 @@ cYP cJg cJg daZ -dcn +ctj ddU cKY diG @@ -148530,21 +147030,21 @@ aaa abj acp abj -abi abj -agK -agK -agK -agK -aiy -aiy -aiy -aiu -agK -agK -agK -agK -agK +abj +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +akB abj acF acF @@ -148627,9 +147127,9 @@ ccq coK cqr bYH -ctj +cFa cuu -bqv +bIX cxn cyF bBu @@ -148637,7 +147137,7 @@ cEj cEj cEn cxn -cGJ +buF boG cJo bRw @@ -148649,10 +147149,10 @@ cKO cUj cKO cKO -cKO +sYw cZM -cKO -dqW +kjL +cwc cSA cJg dgS @@ -148678,9 +147178,9 @@ dEp abj abj aaa -aaa -aaa -aaa +abj +abj +abj aaa aaa aaa @@ -148770,7 +147270,7 @@ aaa aaa aaa aaa -abi +dij aaa kYo acf @@ -148792,12 +147292,12 @@ abj aaa aaa aaa -ahM -aiz -agL -agL -aiw -ahM +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -148909,7 +147409,7 @@ dbi dbi cZN dbi -dco +cFo dfE cKY cJg @@ -148939,13 +147439,13 @@ dFG dFG dFG aaa -dKz -dIc -dFG -dFI -dFG -dFH -dOD +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -149027,7 +147527,7 @@ aaa aaa aaa aaa -abi +dij abj kYo acf @@ -149044,8 +147544,8 @@ abj abj acp aaa -abi -abi +abj +aaa aaa aaa aaa @@ -149111,7 +147611,7 @@ bng bng abj btL -bvg +btL bwv bxG bwv @@ -149143,7 +147643,7 @@ cqr bYH cnO cti -dWO +bSz cxn cyH cAh @@ -149166,7 +147666,7 @@ cKV cKV dci cMq -don +ctd cSA dgx cSA @@ -149196,12 +147696,12 @@ dLd dLY dIW abj -dFJ -dMA -dOc dQv -dQH -dRf +dIc +dFG +dFI +dFG +dFH dOE abj aaa @@ -149301,7 +147801,7 @@ aaa abj acp abj -abi +abj aaa aaa aaa @@ -149398,9 +147898,9 @@ cnK coM cqt bYH -ctj +cFa cuu -ckH +bwm cxn czU bBu @@ -149453,15 +147953,15 @@ dLQ dMa dFG aaa -dFG +dFJ dMG dLR dMw dNj dRg -dFG +hMu abj -abi +aaa aaa aaa aaa @@ -149538,10 +148038,10 @@ aaa aaa aaa aaa -abi -abj -abi -abi +dij +aGW +dij +dij abj kYo acf @@ -149558,7 +148058,7 @@ aaa abj acp aaa -abi +aaa aaa aaa aaa @@ -149655,13 +148155,13 @@ cnL coN cqt bYH -ctj +cFa cuu -ckH +bwm cxn czU bBu -cBK +txW cxn cxn cxn @@ -149710,15 +148210,15 @@ dLU dMv dIX abj -dKA +dFG dNi -dLT +hbU dMx dNk dRh -dOF +dFG +aaa aaa -abi aaa aaa aaa @@ -149795,7 +148295,7 @@ aaa aaa aaa aaa -abi +dij aaa abj aaa @@ -149814,9 +148314,9 @@ abj abj abj acp +aaa abj -abi -abj +aaa aaa aaa aaa @@ -149836,9 +148336,9 @@ aaa aaa abj aaa -abi -abi -abi +aaa +aaa +aaa abj asc aqG @@ -149912,7 +148412,7 @@ cnM coO cqt bYH -ctj +cFa cuu cvW cxn @@ -149967,17 +148467,17 @@ dHa dFG dFG aaa -dKB +dQH dNW deV dMy dNl dRi -dKB +nGA +aaa +aaa +aaa aaa -abj -abj -abi aaa aaa aaa @@ -150095,7 +148595,7 @@ aaa aaa aaa aaa -abi +aaa abj asd asR @@ -150169,9 +148669,9 @@ cnM coM cqt bYH -ctj +cFa cuu -ckH +bwm cxn cyJ cAf @@ -150224,17 +148724,17 @@ dHb dFG aaa aaa -dFG +dKB dNX dTu dTv dNm dWS -dFG +dKB abj -abi -abj -abi +aaa +aaa +aaa aaa aaa aaa @@ -150309,7 +148809,7 @@ aaa aaa aaa aaa -abi +dij aaa abj aaa @@ -150329,7 +148829,6 @@ abj abj abj abj -abi abj aaa aaa @@ -150353,6 +148852,7 @@ aaa aaa aaa aaa +aaa abj asd asS @@ -150426,7 +148926,7 @@ cnN coP cqu bYH -ctj +cFa cuv cvX cxn @@ -150481,16 +148981,16 @@ dHc dIc abj abj -dFH +dFG dNY -dLT +dRf dMz dNn dWT -dIc +dFG +aaa +aaa aaa -abi -abj aaa aaa aaa @@ -150566,10 +149066,10 @@ aaa aaa aaa aaa -abi -abi -abi -abi +dij +dij +dij +dij abj kYo acj @@ -150583,10 +149083,11 @@ kYo acj aco abj -abi -abj -abi -abi +dij +aaa +aaa +aaa +aaa aaa aaa aaa @@ -150609,7 +149110,6 @@ aaa aaa aaa aaa -abi abj asd asT @@ -150748,8 +149248,8 @@ dFG abj abj abj -abi -abi +aaa +aaa aaa aaa aaa @@ -150826,7 +149326,7 @@ aaa aaa aaa aaa -abi +dij aaa kYo acj @@ -150840,9 +149340,9 @@ kYo acj aco aaa -abi -abj -abj +dij +aaa +aaa aaa aaa aaa @@ -150923,9 +149423,9 @@ bJz bLt bNt bPp -bRc -bTg -bVm +bFU +rOn +bVk bXj bYM caG @@ -150935,9 +149435,9 @@ cga chL bYM ckR -cmn +coX chG -coQ +cDn cqv crV ctl @@ -151083,7 +149583,7 @@ aaa aaa aaa aaa -abj +aGW abj kYo acj @@ -151097,7 +149597,7 @@ kYo acj aco abj -abi +dij aaa aaa aaa @@ -151129,8 +149629,8 @@ abj aaa abj aaa -abi -abi +aaa +aaa aaa aaa aaa @@ -151176,10 +149676,10 @@ aaa aaa bFS bHP -dDN +dMA bLu bNu -bPq +nXf bFS bTh bVn @@ -151191,7 +149691,7 @@ cen cgb chM bYM -ckS +bHH cmo cnP coR @@ -151340,7 +149840,7 @@ aaa aaa aaa aaa -abi +dij aaa kYo acj @@ -151354,7 +149854,7 @@ kYo acj aco aaa -abi +dij aaa aaa aaa @@ -151456,7 +149956,7 @@ cqw crW ctn byo -cwc +crW crW cyM crW @@ -151597,10 +150097,10 @@ aaa aaa aaa aaa -abi +dij aaa kYo -acj +dyT aco aaa kYo @@ -151608,7 +150108,7 @@ acj aco aaa kYo -acj +dyT aco aaa abj @@ -151713,7 +150213,7 @@ cqw crX cto cuy -cwc +crW cxr cyN crX @@ -151854,21 +150354,21 @@ aaa aaa aaa aaa -abi +dij aaa aaa abj aaa aaa kYo -acj +dyT aco aaa aaa abj aaa -aaa -abi +dKz +dij aaa aaa aaa @@ -151993,8 +150493,8 @@ cYZ cZW cUr cKV -dtC -cSF +dqW +cPJ cJg dhe dye @@ -152036,7 +150536,7 @@ dFG dFG dFG abj -abi +aaa aaa aaa aaa @@ -152111,21 +150611,21 @@ aaa aaa aaa aaa -abi -abi +dij +dij abj -abi -abi +dij +dij aaa aaa abj aaa aaa -abi -abi +dij +dij abj -abi -abi +dij +dij aaa aaa aaa @@ -152227,7 +150727,7 @@ cqy crY ctq cuA -cwc +crW cxt cyP crW @@ -152251,7 +150751,7 @@ cZX cWd dbn dcz -cSF +jdF cKY dhf diO @@ -152293,9 +150793,9 @@ dQx dXf dFG abj -abi -abj -abi +aaa +aaa +aaa aaa aaa aaa @@ -152372,13 +150872,13 @@ aaa aaa aaa aaa -abi -abi +dij +dij abj -abi -abi +dij +dij abj -abi +dij aaa aaa aaa @@ -152456,8 +150956,8 @@ bxJ vnm bno eSX -hZF -bEw +bFX +bFX bEr bFX bMc @@ -152470,7 +150970,7 @@ bTj bVg bXn bYP -bXW +bYm ccD cer cgf @@ -152550,9 +151050,9 @@ dQy dXg dNr aaa -abj aaa -abi +aaa +aaa aaa aaa aaa @@ -152713,8 +151213,8 @@ bvm bwy bxK bzg -bzg -bCL +bJF +bJF bJF bJF bHT @@ -152726,7 +151226,7 @@ meB bTk bVp bXB -bYQ +bYR caM ccE ces @@ -152741,7 +151241,7 @@ cqA crZ cts cuC -cwe +cxv cxv cyR cxv @@ -152807,9 +151307,9 @@ dGw dGw dFG abj -abi -abj -abi +aaa +aaa +aaa aaa aaa aaa @@ -152971,16 +151471,16 @@ bwz bxL bHS bAN -bCM -bHU -bHU -bHU -bHU +bAN +bAN +bAN +bAN +bAN bLz -bHU +bAN mtR mHP -bLz +bYa bVq bXp bYR @@ -153005,9 +151505,9 @@ cAm cYh cDp cvV -cFo +cFv cGS -cIe +cIk aFx cLn cbm @@ -153016,8 +151516,8 @@ cQd cRz cjF cUu -cWb -cWb +dyd +dyd cZd cZT dbq @@ -153064,9 +151564,9 @@ dQz dXg dNr aaa -abj aaa -abi +aaa +aaa aaa aaa aaa @@ -153223,7 +151723,7 @@ boN bqN kyq btX -bqK +pOq esa bno bCK @@ -153272,7 +151772,7 @@ aFx aFx aFx cSX -cUv +dDE cXI dlz dlz @@ -153321,9 +151821,9 @@ dQA dXf dFG abj -abi -abj -abi +aaa +aaa +aaa aaa aaa aaa @@ -153468,11 +151968,11 @@ rTE pcv aZE bbo -bcU +bcV bex bhc -blp -blp +uKI +bnq bka blT bno @@ -153509,7 +152009,7 @@ brS bgs coU cJn -ctc +bRc cqI brS cqI @@ -153524,12 +152024,12 @@ cGT cIg aFx cAq -cBW +iuU cOp aKh aFx cSY -cUv +dDE cXI cZb cZY @@ -153580,7 +152080,7 @@ dFG abj aaa aaa -abi +aaa aaa aaa aaa @@ -153766,7 +152266,7 @@ gGu cnR gGu cqD -gGu +bTg khY cuF cqI @@ -153778,8 +152278,8 @@ aFv cEt bEY cGV -bKv -cEu +cIc +jHd cAq cAq cOq @@ -153835,9 +152335,9 @@ abj abj abj abj -abi -abj -abi +aaa +aaa +aaa aaa aaa aaa @@ -153971,7 +152471,7 @@ aaa abj ygH ygH -aqq +ygH yez mhu mhu @@ -154081,18 +152581,18 @@ dJj dJZ dFG abj -abi -abi -abi -abj -abi -abi -abi aaa -abi -abi -abi -abi +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -154224,19 +152724,19 @@ aaa aaa acF abj -abi +mkp aaa -aqq -tFK -qeU -abQ -aKS ygH +tFK +kju +aYk +qeU +aJJ aSh aTF aVk aWK -aYk +aJJ aZH bbr bcX @@ -154246,7 +152746,7 @@ bhg biu bkd blV -bnp +boR boR bqQ bsI @@ -154284,12 +152784,12 @@ csd bqj ckW brS -aFx -aFx -aFx -aFx -aFx -aFx +oNd +oNd +oNd +oNd +oNd +oNd cFr cGW cIi @@ -154338,15 +152838,15 @@ dFG dFG dFG aaa -abj aaa aaa aaa aaa aaa -abj aaa -abj +aaa +aaa +aaa aaa aaa aaa @@ -154481,22 +152981,22 @@ aaa aaa aaa aaa -abi +mkp abj ygH aJx nli -abQ +bbs aPv -ygH +hWz aSi aTG nHs rbw aYl aZI -bbs -aml +bbv +jBp beA bfW bLB @@ -154507,25 +153007,25 @@ blW boS bqR bHZ -bub -loP +blW +dnd tJH -bub +blW bzm -bHZ -bub -bub -bub +mKe +blW +blW +blW jUH -bub -bub +blW +blW bNH sEN bRi mKe blW blW -bnq +dnd caO blW cey @@ -154541,15 +153041,15 @@ cse bgs cuG cjm -aFx -aKh +oNd +lah cAo cBW -cAq -aFx +fqy +nFX bEY cGV -bKv +cIc aFx cLp cMN @@ -154557,7 +153057,7 @@ cOr cQg aFx cTa -cUv +dDE dlz cZh dac @@ -154595,16 +153095,16 @@ aaa abj abj abj -abi -abi -abj -abj -abj -abi -abi -abi -abi -abi +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -154738,19 +153238,19 @@ aaa aaa aaa aaa -abi +mkp aaa ygH uUu kju -abQ aKU -ygH +tOv +hLa aSj aTH aVl aWL -aYk +aJA aZJ bbt bdi @@ -154761,23 +153261,23 @@ biw bHW blX blX -bkf -bqS blX +bqS +bCM reH hHM bwA -bxQ +bLD bnr bAT -bxQ -bxQ -bxQ -bNm -bxQ -bxQ bLD -mEG +bLD +bLD +bEw +bLD +bNE +bLD +bVm bRj bxQ bxQ @@ -154785,7 +153285,7 @@ bXt bYW bNm bxQ -cez +mEG bxQ chR cju @@ -154798,14 +153298,14 @@ csf bgt cuH bqj -aFx +oNd cyW cAp -cAq -cAq +tXj +wtE cEu cFs -cGV +rkJ cIj cJy cLp @@ -154814,7 +153314,7 @@ cLp cQi aFx cSY -cUv +dDE dlz cZi daR @@ -154844,13 +153344,13 @@ moa iiM aOx abj -abi -abi -abi -abj -abi -abi -abi +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -155002,11 +153502,11 @@ xDn aJx iUc aOX +oaB +fcg ygH ygH ygH -aqq -ygH ygH bOc bbt @@ -155018,10 +153518,10 @@ bhh bwE blY bhh -uSJ +bhi bqT bsL -buc +bsL xXw bsL biv @@ -155055,12 +153555,12 @@ brS bgs cuH cmq -aFx +oNd cyX -cAq +oHv cBX aKk -aFx +nFX cFv cGV cIk @@ -155071,7 +153571,7 @@ cLp cQh aFx cTb -cUA +dDD dlz cZj daS @@ -155103,9 +153603,9 @@ dEt abj aaa aaa -abj aaa -abj +aaa +aaa aaa aaa aaa @@ -155248,8 +153748,8 @@ aaa aaa aaa aaa -abi -abi +aaa +aaa aaa aaa abj @@ -155258,9 +153758,9 @@ aml kOC ofZ aND -abQ +jLu aQx -aQB +pxj aJx aVm aWM @@ -155275,7 +153775,7 @@ bix bmO blZ bnt -boT +blZ bqU bsL bkj @@ -155312,12 +153812,12 @@ csg bgs ckX cmr -aFx -aFx -aFx -aFx -aFx -aFx +oNd +oNd +oNd +oNd +oNd +oNd cFu cGV cIk @@ -155328,7 +153828,7 @@ aFx aFx aFx cjn -cUv +dDE dlz dlz dbr @@ -155358,12 +153858,12 @@ dCu tHf dEt abj -abj -abi -abi -abi -abi -abi +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -155505,7 +154005,7 @@ aaa aaa aaa aaa -abi +aaa abj ygH ygH @@ -155513,7 +154013,7 @@ qJC ygH ygH ipD -abQ +aPe aNE aPb aQy @@ -155547,7 +154047,7 @@ bGj bLB bJM bLF -bNE +bLF bPv bRl obL @@ -155573,19 +154073,19 @@ aFx cyY cyY cBY -cyY +why bmW cFv cGV cIl bmW -cyY -cMP +oXY +cBY cyY cyY aFx cTc -cUA +dDD cqC cMH cMH @@ -155615,9 +154115,9 @@ dCv vLN dDG abj -abj aaa -abj +aaa +aaa aaa aaa aaa @@ -155762,26 +154262,26 @@ aaa aaa aaa aaa -abi +aaa abj -aqq +ygH reo aGT swV ygH nFL -aKU -aNF -aKS -abQ -aSm +aPe +aNG +keD +aPe +aSr aJx aVo aWO aJx aZK bbt -aqq +ygH ygH aJA bhh @@ -155804,7 +154304,7 @@ bGk bLB bGp bLG -nkh +bLG bPw hTr gwZ @@ -155830,13 +154330,13 @@ aFx cyZ cAr cAr -cAr +gUi cEv -cFv -cGV -cIk +tvI +vzs +plm cEv -cAr +sOo cAr cAr cQj @@ -155872,9 +154372,9 @@ bLn bLn bLn abj -abi aaa -abj +aaa +aaa aaa aaa aaa @@ -156023,13 +154523,13 @@ aaa abj ygH xda -aGU +mtL aIl aJx aKR aMq aNG -abQ +hZR aSn aWN aJx @@ -156061,7 +154561,7 @@ bGl bLB bJN bLG -nkh +bLG bPx bRl bNG @@ -156087,7 +154587,7 @@ aFx cza cAs cAs -cAs +qqh bmW bFh cGT @@ -156129,9 +154629,9 @@ dCw dDO bLn abj -abi -abj -abi +aaa +aaa +aaa aaa aaa aaa @@ -156283,12 +154783,12 @@ feV aGV aIm aJJ -aKS aKU -aNF +aPe +aNG aOY aQB -aPe +lMo aJx aVm aWP @@ -156386,9 +154886,9 @@ luc dDN mDm abj -abi -abj -abi +aaa +aaa +aaa aaa aaa aaa @@ -156541,7 +155041,7 @@ rZK aIn aKT aSp -aSp +aPj aNI aOZ aQC @@ -156602,10 +155102,10 @@ czb cAt cBZ jHa -ctx +mYH cFx cGX -cIn +cJz cJz cLs cMQ @@ -156645,7 +155145,7 @@ mDm abj aaa aaa -abi +aaa aaa aaa aaa @@ -156798,11 +155298,11 @@ eCs aIo aJA aKU -aKS -aNJ -aPa +aPe +aNM aQD -aKU +aQD +lMo aJx aVq aWO @@ -156830,8 +155330,8 @@ bBa bBa bBa bBa -bBa -bBa +bHU +bPy bPy bPz bRo @@ -156853,25 +155353,25 @@ abj csj ctx cuL -czc +cIo cxx -czc -czc -czc -czc -czc +cIo +cIo +cIo +cIo +cIo cFy cIs cIo -czc -czc -czc -czc -czc +cIo +cIo +cIo +cIo +cIo cRB -czc +cIo cUF -cuM +coQ cJz csj abj @@ -156900,9 +155400,9 @@ dAF tks mDm abj -abj -abj -abj +aaa +aaa +aaa aaa aaa aaa @@ -157056,9 +155556,9 @@ aIp aJx aKV fFd -aNK -abQ -aKU +aNL +aPe +aPe aTb aJx aJx @@ -157086,7 +155586,7 @@ blX blX blX blX -mHf +blX tRM bLK bPA @@ -157157,9 +155657,9 @@ phv wAE fTZ aaa -abj aaa -abi +aaa +aaa aaa aaa aaa @@ -157304,18 +155804,18 @@ aaa aaa aaa aaZ -abi +aaa abj ygH tge eQg nbE -aqq +ygH njE eNI aNL -aKS -aKS +aPe +aPe aSr aJx aVr @@ -157343,7 +155843,7 @@ bBc bJL bEx bEx -kzg +bEA tFO bIe bEx @@ -157413,10 +155913,10 @@ bLn mDm bLn bLn -abi -abj aaa -abj +aaa +aaa +aaa aaa aaa aaa @@ -157561,7 +156061,7 @@ aaa aaa aaa aaa -abi +aaa abj ygH ygH @@ -157569,11 +156069,11 @@ pWQ ygH ygH tvq -aKU +aPe aNM -aKS aPe aPe +lMo aTK aVs baS @@ -157581,7 +156081,7 @@ aYq aZM bbv bdd -aqq +ygH aaa bhh biG @@ -157618,7 +156118,7 @@ aaa aaa abj abj -abi +dij abj abj csj @@ -157647,16 +156147,16 @@ cXN csj abj aaa -abi -abi -abi -abi -abi aaa -abi aaa -abi -abi +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa cPS cPS dGX @@ -157672,9 +156172,9 @@ abj abj abj abj -abi -abi -abi +aaa +aaa +aaa aaa aaa aaa @@ -157821,7 +156321,7 @@ aaa aaa aaa aaa -abj +aaa aaa qli isz @@ -157920,18 +156420,18 @@ dKx cPS abj abj -abi -abi -abi +dij +dij +dij abj -abi -abi -abi +dij +dij +dij aaa abj -aaa -aaa -abi +abj +abj +sso aaa aaa aaa @@ -158078,16 +156578,16 @@ aaa aaa aaa aaa -abi +aaa aaa pWQ qqW -aKU +aPe aJC aNO aPe aQH -aPj +aMv aMv aMv aMv @@ -158131,8 +156631,8 @@ abj abj alW abj -abi -abi +dij +dij abj abj csj @@ -158160,7 +156660,7 @@ cOt cWh csj abj -abi +aaa aaa aaa aaa @@ -158177,7 +156677,7 @@ qRT cPS abj abj -abi +dij abj aaa aaa @@ -158188,7 +156688,7 @@ aaa abj aaa aaa -abj +sso aaa aaa aaa @@ -158335,11 +156835,11 @@ aaa aaa aaa aaa -abi +aaa aaa ygH ggp -aKU +aqq hch aNP aPf @@ -158417,7 +156917,7 @@ cuM cWh csj abj -abi +aaa aaa aaa aaa @@ -158428,7 +156928,7 @@ aaa aaZ aaa aaa -abj +aaa aaa fGG abj @@ -158438,14 +156938,14 @@ abj aaa aaa dak -daC +daz dbc aaa aaa abj aaa aaa -abi +dij aaa aaa aaa @@ -158592,7 +157092,7 @@ aaa aaa aaa aaa -abj +aaa abj ygH ygH @@ -158647,7 +157147,7 @@ abj abj abj abj -abi +dij abj csj ctB @@ -158685,7 +157185,7 @@ aaa aaa aaa aaa -abi +abj abj cSN abj @@ -158699,7 +157199,7 @@ daC dbc aaa dak -daC +daz dbc aaa abj @@ -158854,7 +157354,7 @@ aaa acF abj abj -aIO +aIg aNQ aPg aQJ @@ -158907,9 +157407,9 @@ aaa aaa aaa csj -ctC -ctC -ctC +cFK +cFK +cFK csj csj csj @@ -158926,12 +157426,12 @@ csj csj csj csj -cUN +cFK cWi cXP csj abj -abi +aaa aaa aaa aaa @@ -158959,7 +157459,7 @@ dak daC dbc aaa -abi +dij aaa aaa aaa @@ -159188,7 +157688,6 @@ dlC cXQ csj abj -abi aaa aaa aaa @@ -159199,8 +157698,9 @@ aaa aaa aaa aaa -abi +aaa abj +aaa cTN abj aaa @@ -159456,7 +157956,7 @@ aaa aaa aaa aaa -abi +abj aaa cTN abj @@ -159473,7 +157973,7 @@ dak daC dbc aaa -abi +dij aaa aaa aaa @@ -159627,7 +158127,7 @@ aaa aKW aMv aMv -aPj +aMv aMv aMv aTQ @@ -159636,7 +158136,7 @@ aWX aMv bad bbH -aqq +ygH abj aaa abj @@ -159702,7 +158202,6 @@ abj abj abj abj -abi aaa aaa aaa @@ -159713,7 +158212,8 @@ aaa aaa aaa aaa -abi +aaa +abj abj cTN abj @@ -159730,10 +158230,10 @@ dak daC dbc aaa -abi +dij abj -abi -abi +dij +dij aaa aaa aaa @@ -159957,9 +158457,6 @@ csj abj aaa aaa -abi -abi -abi aaa aaa aaa @@ -159970,7 +158467,10 @@ aaa aaa aaa aaa -abj +aaa +aaa +aaa +aaa aaa cTN abj @@ -159990,7 +158490,7 @@ aaa aaa abj aaa -abi +dij aaa aaa aaa @@ -160135,25 +158635,25 @@ aaa aaa aaa aaa -abi -abi -abi aaa -abi -abi -abi +aaa +aaa +aaa +aaa +aaa +aaa aaa aMv aMv -aPj -aPj +aMv +aMv aMv bda bbE bdf aJx aaa -abj +aaa aaa aZw bmn @@ -160191,7 +158691,7 @@ aaa aaa aaa aaa -abi +aaa abj abj abj @@ -160212,7 +158712,6 @@ cwl abj csj abj -abi aaa aaa aaa @@ -160227,7 +158726,8 @@ aaa aaa aaa aaa -abi +aaa +aaa abj cTN ewF @@ -160247,7 +158747,7 @@ cYU cYU rnO abj -abi +dij aaa aaa aaa @@ -160410,7 +158910,7 @@ bvB bdg fcg aaa -abj +aaa aaa aZw aZw @@ -160423,12 +158923,12 @@ aaa abj abj abj -abi -abi -abi -abi +mkp +mkp +mkp +mkp abj -abi +mkp fhF fhF fhF @@ -160438,7 +158938,7 @@ fhF fhF abj abj -abi +mkp aaa aaa aaa @@ -160469,7 +158969,6 @@ cQq aaa csj abj -abi aaa aaa aaa @@ -160484,7 +158983,8 @@ aaa aaa aaa aaa -abi +aaa +abj aaa aaa abj @@ -160497,14 +158997,14 @@ abj cTN abj abj -abj +dKA daG abj aaa aaa abj aaa -abj +sso aaa aaa aaa @@ -160667,25 +159167,25 @@ abQ bdh aJx aaa -abj +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa abj -aaa -abj -aaa -abj -aaa -aaa abj aaa abj abj aaa -abj -abj -aaa -abi +mkp fhF fhF fhF @@ -160695,7 +159195,8 @@ fhF fhF abj aaa -abi +mkp +aaa aaa aaa aaa @@ -160707,7 +159208,6 @@ aaa aaa aaa aaa -abi abj csj aaa @@ -160726,7 +159226,7 @@ cQq aaa csj abj -abi +aaa aaa aaa aaa @@ -160741,8 +159241,8 @@ aaa aaa aaa aaa -abi -abi +abj +abj abj abj aaa @@ -160758,10 +159258,10 @@ dak daT dbc aaa -abi -abi +dij +dij abj -abi +dij aaa aaa aaa @@ -160923,25 +159423,25 @@ bab bcW bab aJx -abj -abi -abi -abi -abj -abi -abi -abi -abi -abi -abi -abj +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa abj abj abj -abi -abi -abi +mkp +mkp +mkp abj fhF fhF @@ -160952,7 +159452,8 @@ fhF fhF abj aaa -abi +mkp +aaa aaa aaa aaa @@ -160964,7 +159465,6 @@ aaa aaa aaa aaa -abi abj csi abj @@ -160983,7 +159483,7 @@ cQr abj csi abj -abi +aaa aaa aaa aaa @@ -161015,7 +159515,7 @@ dak daT dbc aaa -abi +dij aaa aaa aaa @@ -161173,7 +159673,7 @@ aaa aaa aaa aaa -abi +aaa abj aJx bac @@ -161184,10 +159684,10 @@ aaa aaa aaa aaa -abj aaa aaa -abj +aaa +aaa aaa aaa aaa @@ -161209,7 +159709,7 @@ fhF fhF mkp abj -abi +mkp aaa aaa aaa @@ -161257,8 +159757,8 @@ aaa aaa aaa aaa -vXX -abi +aaa +dij aaa dak daT @@ -161272,7 +159772,7 @@ dak daT dbc abj -abi +dij aaa aaa aaa @@ -161430,24 +159930,24 @@ aaa aaa aaa aaa -abi +aaa abj aJx bpr bbI bpr aJx -abj -abj -abi -abi -abi -abi -abi -abj -abi -abi -abj +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa abj @@ -161456,7 +159956,7 @@ aaa aaa aaa aaa -oEG +mkp fhF fhF fhF @@ -161497,7 +159997,6 @@ csj csj csj abj -abi aaa aaa aaa @@ -161514,8 +160013,9 @@ aaa aaa aaa aaa -vXX -abi +aaa +aaa +dij abj dak daT @@ -161707,14 +160207,14 @@ aaa aaa aaa aaa -abi +mkp aaa aaa aaa aaa aaa bPS -oEG +mkp mkp abj abj @@ -161772,10 +160272,10 @@ aaa aaa aaa aaa -abi +dij aaa dak -daT +dOF dbc aaa dak @@ -161783,10 +160283,10 @@ daT dbc aaa dak -daT +dOF dbc aaa -abi +dij aaa aaa aaa @@ -161964,7 +160464,7 @@ aaa aaa aaa aaa -abi +mkp aaa aaa aaa @@ -161994,10 +160494,10 @@ aaa aaa aaa aaa -abi -abi aaa -abi +aaa +aaa +aaa abj csi cFJ @@ -162007,8 +160507,6 @@ cJJ csi abj aaa -abi -abi aaa aaa aaa @@ -162029,21 +160527,23 @@ aaa aaa aaa aaa -abi +aaa +aaa +dij aaa aaa aaa aaa aaa dak -daT +dOF dbc aaa aaa aaa aaa aaa -abi +dij aaa aaa aaa @@ -162221,7 +160721,7 @@ aaa aaa aaa aaa -abi +mkp aaa aaa aaa @@ -162229,11 +160729,11 @@ aaa aaa aaa aaa -abi -abi -abi -abi -abi +mkp +mkp +mkp +mkp +mkp aaa aaa aaa @@ -162286,19 +160786,19 @@ aaa aaa aaa aaa -abi -abi +dij +dij abj -abi -abi +dij +dij aaa aaa aaa aaa aaa -abi +dij abj -abi +dij abj abj aaa @@ -162547,13 +161047,13 @@ aaa aaa aaa aaa -abi -abi +dij +dij abj -abi -abi +dij +dij abj -abi +dij aaa aaa aaa diff --git a/_maps/map_files/MetaStation/MetaStation.dmm b/_maps/map_files/MetaStation/MetaStation.dmm index 37caea366cd..ad41c5fb5fd 100644 --- a/_maps/map_files/MetaStation/MetaStation.dmm +++ b/_maps/map_files/MetaStation/MetaStation.dmm @@ -664,8 +664,7 @@ dir = 4 }, /turf/simulated/floor/plasteel{ - dir = 9; - icon_state = "warndark" + icon_state = "dark" }, /area/security/permabrig) "add" = ( @@ -673,8 +672,7 @@ dir = 8 }, /turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "warndark" + icon_state = "dark" }, /area/security/permabrig) "ade" = ( @@ -682,8 +680,7 @@ dir = 1 }, /turf/simulated/floor/plasteel{ - dir = 1; - icon_state = "warndark" + icon_state = "dark" }, /area/security/permabrig) "adf" = ( @@ -863,8 +860,7 @@ dir = 4 }, /turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "warndark" + icon_state = "dark" }, /area/security/permabrig) "ady" = ( @@ -877,20 +873,15 @@ dir = 8 }, /turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "warndark" + icon_state = "dark" }, /area/security/permabrig) "adz" = ( -/obj/structure/bed, -/obj/item/clothing/suit/straight_jacket, -/obj/item/clothing/glasses/sunglasses/blindfold, -/obj/item/clothing/mask/muzzle, -/obj/item/radio/electropack, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 1 }, +/obj/structure/chair/e_chair, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -949,16 +940,6 @@ icon_state = "floorgrime" }, /area/security/permabrig) -"adF" = ( -/obj/structure/table, -/obj/item/clothing/glasses/welding, -/obj/item/storage/toolbox/mechanical, -/obj/machinery/cell_charger, -/obj/item/stock_parts/cell/high, -/turf/simulated/floor/plasteel{ - icon_state = "dark" - }, -/area/security/podbay) "adG" = ( /obj/structure/cable{ d2 = 2; @@ -972,18 +953,6 @@ icon_state = "solarpanel" }, /area/solar/auxstarboard) -"adH" = ( -/obj/structure/rack, -/obj/item/tank/jetpack/oxygen, -/obj/item/clothing/shoes/magboots, -/obj/machinery/camera{ - c_tag = "Engineering Secure Storage South"; - dir = 4 - }, -/turf/simulated/floor/plasteel{ - icon_state = "dark" - }, -/area/security/podbay) "adI" = ( /obj/machinery/newscaster{ pixel_y = 32 @@ -1089,20 +1058,17 @@ icon_state = "dark" }, /area/security/permabrig) -"adZ" = ( -/obj/machinery/suit_storage_unit/security/secure, -/turf/simulated/floor/plasteel{ - icon_state = "dark" - }, -/area/security/podbay) "aea" = ( /obj/machinery/camera{ c_tag = "Prisoner Education Chamber"; dir = 4 }, +/obj/structure/table, +/obj/item/clothing/suit/straight_jacket, +/obj/item/clothing/mask/muzzle, +/obj/item/clothing/glasses/sunglasses/blindfold, /turf/simulated/floor/plasteel{ - dir = 10; - icon_state = "warndark" + icon_state = "dark" }, /area/security/permabrig) "aeb" = ( @@ -1110,15 +1076,14 @@ name = "justice injector" }, /turf/simulated/floor/plasteel{ - dir = 6; - icon_state = "warndark" + icon_state = "dark" }, /area/security/permabrig) "aec" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plasteel{ - icon_state = "warndark" + icon_state = "dark" }, /area/security/permabrig) "aed" = ( @@ -1238,10 +1203,7 @@ id_tag = "executionfireblast"; opacity = 0 }, -/turf/simulated/floor/plasteel{ - dir = 9; - icon_state = "warndark" - }, +/turf/simulated/floor/plating, /area/security/permabrig) "aey" = ( /obj/machinery/door/window/brigdoor{ @@ -1283,10 +1245,7 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/plasteel{ - dir = 9; - icon_state = "warndark" - }, +/turf/simulated/floor/plating, /area/security/permabrig) "aeA" = ( /obj/structure/cable{ @@ -1331,14 +1290,6 @@ icon_state = "white" }, /area/security/permabrig) -"aeM" = ( -/obj/structure/grille, -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'KEEP CLEAR OF DOCKING AREA'."; - name = "KEEP CLEAR: DOCKING AREA" - }, -/turf/space, -/area/security/podbay) "aeN" = ( /obj/effect/spawner/window/reinforced, /turf/simulated/floor/plating, @@ -1414,15 +1365,6 @@ icon_state = "whitered" }, /area/security/permabrig) -"aeV" = ( -/obj/structure/grille, -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'KEEP CLEAR OF DOCKING AREA'."; - name = "KEEP CLEAR: DOCKING AREA" - }, -/obj/effect/decal/warning_stripes/east, -/turf/simulated/floor/engine, -/area/security/podbay) "aeW" = ( /obj/structure/table, /obj/item/reagent_containers/glass/bottle/morphine{ @@ -1451,8 +1393,8 @@ }, /obj/item/reagent_containers/dropper, /obj/item/assembly/signaler{ - pixel_x = -3; - pixel_y = 2 + code = 6; + frequency = 1445 }, /obj/machinery/alarm{ dir = 4; @@ -1605,10 +1547,6 @@ /obj/structure/lattice/catwalk, /turf/space, /area/solar/auxstarboard) -"afr" = ( -/obj/effect/spawner/window/reinforced, -/turf/simulated/floor/plating, -/area/security/podbay) "afu" = ( /obj/machinery/door/poddoor{ density = 0; @@ -1817,17 +1755,6 @@ icon_state = "floorgrime" }, /area/security/permabrig) -"afR" = ( -/obj/effect/decal/warning_stripes/north, -/obj/machinery/door_control{ - desc = "A remote control-switch for the pod doors."; - id = "secpodbay"; - name = "Pod Door Control"; - pixel_y = 24; - req_access_txt = "71" - }, -/turf/simulated/floor/engine, -/area/security/podbay) "afS" = ( /obj/structure/bed, /obj/machinery/camera{ @@ -1985,10 +1912,6 @@ /obj/structure/lattice, /turf/space, /area/security/armoury) -"agd" = ( -/obj/effect/decal/warning_stripes/east, -/turf/simulated/floor/engine, -/area/security/podbay) "age" = ( /obj/structure/cable{ d1 = 1; @@ -2034,16 +1957,6 @@ }, /turf/simulated/floor/mineral/titanium/blue, /area/shuttle/pod_3) -"agj" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/security/glass{ - name = "Security Pods"; - req_access_txt = "71" - }, -/turf/simulated/floor/plasteel{ - icon_state = "dark" - }, -/area/security/podbay) "agk" = ( /obj/effect/spawner/window/shuttle, /turf/simulated/floor/plating, @@ -2414,9 +2327,6 @@ pixel_x = -26; pixel_y = 34 }, -/obj/item/spacepod_key{ - id = 100000 - }, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -2427,29 +2337,12 @@ /area/maintenance/auxsolarport) "agY" = ( /obj/structure/rack, -/obj/item/storage/box/buck{ - pixel_x = -3; - pixel_y = 3 - }, -/obj/item/storage/box/buck, -/obj/item/storage/box/buck{ - pixel_x = 3; - pixel_y = -3 - }, +/obj/item/storage/box/tranquilizer, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "vault" }, /area/security/armoury) -"agZ" = ( -/obj/machinery/space_heater, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - icon_state = "dark" - }, -/area/security/podbay) "aha" = ( /obj/machinery/computer/prisoner, /turf/simulated/floor/plasteel{ @@ -2465,12 +2358,12 @@ }, /area/security/hos) "ahc" = ( -/obj/machinery/computer/secure_data, /obj/structure/cable/yellow{ d1 = 1; d2 = 2; icon_state = "1-2" }, +/obj/machinery/computer/secure_data, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -2481,12 +2374,6 @@ d2 = 8; icon_state = "4-8" }, -/obj/machinery/computer/security/telescreen{ - desc = "Used for watching Prison Wing holding areas."; - name = "Prison Monitor"; - network = list("Prison"); - pixel_y = 30 - }, /obj/machinery/camera{ c_tag = "Prison Hallway Port"; network = list("SS13","Prison") @@ -2502,6 +2389,12 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/machinery/computer/security/telescreen{ + desc = "Used for watching Prison Wing holding areas."; + name = "Prison Monitor"; + network = list("Prison"); + pixel_y = 30 + }, /turf/simulated/floor/plasteel{ icon_state = "redcorner" }, @@ -2558,18 +2451,6 @@ /area/crew_quarters/fitness{ name = "\improper Recreation Area" }) -"ahl" = ( -/obj/machinery/firealarm{ - dir = 8; - pixel_x = -26; - pixel_y = 28 - }, -/obj/effect/decal/warning_stripes/blue/hollow, -/obj/machinery/portable_atmospherics/canister/oxygen, -/turf/simulated/floor/plasteel{ - icon_state = "dark" - }, -/area/security/podbay) "ahq" = ( /obj/structure/cable/yellow{ d1 = 1; @@ -2591,12 +2472,6 @@ d2 = 8; icon_state = "4-8" }, -/obj/machinery/computer/security/telescreen{ - desc = "Used for watching Prison Wing holding areas."; - name = "Prison Monitor"; - network = list("Prison"); - pixel_y = 30 - }, /obj/structure/cable/yellow{ d1 = 2; d2 = 4; @@ -2608,6 +2483,12 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/machinery/computer/security/telescreen{ + desc = "Used for watching Prison Wing holding areas."; + name = "Prison Monitor"; + network = list("Prison"); + pixel_y = 30 + }, /turf/simulated/floor/plasteel{ icon_state = "redcorner" }, @@ -3081,20 +2962,6 @@ icon_state = "redcorner" }, /area/security/permabrig) -"aid" = ( -/turf/simulated/wall/r_wall, -/area/security/podbay) -"aie" = ( -/obj/effect/decal/warning_stripes/northwest, -/obj/machinery/alarm{ - pixel_y = 24 - }, -/turf/simulated/floor/engine, -/area/security/podbay) -"aif" = ( -/obj/machinery/ai_status_display, -/turf/simulated/wall/r_wall, -/area/security/podbay) "aig" = ( /obj/machinery/shower{ dir = 4 @@ -3291,20 +3158,6 @@ icon_state = "redcorner" }, /area/security/permabrig) -"aiC" = ( -/obj/effect/decal/warning_stripes/yellow/hollow, -/obj/machinery/light_switch{ - name = "light switch "; - pixel_y = -22 - }, -/obj/structure/reagent_dispensers/fueltank, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/plasteel{ - icon_state = "dark" - }, -/area/security/podbay) "aiE" = ( /obj/structure/table, /obj/item/folder/red{ @@ -3642,7 +3495,9 @@ name = "\improper Arcade" }) "ajm" = ( -/obj/machinery/computer/arcade/battle, +/obj/machinery/computer/arcade/battle{ + dir = 4 + }, /turf/simulated/floor/carpet/arcade, /area/crew_quarters/fitness{ name = "\improper Arcade" @@ -3693,14 +3548,6 @@ icon_state = "whitered" }, /area/security/brig) -"ajv" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - icon_state = "dark" - }, -/area/security/podbay) "ajw" = ( /obj/structure/extinguisher_cabinet{ pixel_x = 27 @@ -3723,6 +3570,10 @@ pixel_x = -24; pixel_y = -20 }, +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, /obj/machinery/computer/security/telescreen{ desc = "Used for watching certain areas."; dir = 1; @@ -3730,10 +3581,6 @@ network = list("Prison","MiniSat","tcomm"); pixel_y = -30 }, -/obj/machinery/disposal, -/obj/structure/disposalpipe/trunk{ - dir = 4 - }, /turf/simulated/floor/plasteel{ icon_state = "vault" }, @@ -3780,14 +3627,14 @@ /turf/simulated/wall/r_wall, /area/maintenance/auxsolarport) "ajC" = ( -/obj/machinery/power/solar_control{ - id = "foreport"; - name = "Fore Port Solar Control" - }, /obj/structure/cable{ d2 = 4; icon_state = "0-4" }, +/obj/machinery/power/solar_control{ + id = "foreport"; + name = "Fore Port Solar Control" + }, /turf/simulated/floor/plating, /area/maintenance/auxsolarport) "ajD" = ( @@ -4258,26 +4105,12 @@ d2 = 8; icon_state = "4-8" }, -/mob/living/simple_animal/hostile/retaliate/araneus, /obj/structure/disposalpipe/segment{ dir = 4 }, +/mob/living/simple_animal/hostile/retaliate/araneus, /turf/simulated/floor/carpet, /area/security/hos) -"akC" = ( -/obj/structure/table/reinforced, -/obj/machinery/light{ - dir = 8 - }, -/obj/item/clothing/head/beret/sec, -/obj/item/clothing/suit/jacket/pilot, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - icon_state = "dark" - }, -/area/security/podbay) "akD" = ( /turf/simulated/wall, /area/security/brig) @@ -4398,23 +4231,6 @@ icon_state = "vault" }, /area/security/armoury) -"akO" = ( -/obj/machinery/firealarm{ - dir = 8; - pixel_x = -26; - pixel_y = 28 - }, -/obj/machinery/alarm{ - dir = 4; - pixel_x = -22 - }, -/obj/structure/table/reinforced, -/obj/item/radio, -/obj/item/flashlight, -/turf/simulated/floor/plasteel{ - icon_state = "dark" - }, -/area/security/podbay) "akP" = ( /obj/machinery/camera{ c_tag = "Engineering - Storage" @@ -4860,20 +4676,6 @@ icon_state = "showroomfloor" }, /area/security/main) -"alE" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/obj/machinery/light_switch{ - name = "light switch "; - pixel_y = -22 - }, -/obj/structure/table/reinforced, -/obj/item/book/manual/security_space_law, -/turf/simulated/floor/plasteel{ - icon_state = "dark" - }, -/area/security/podbay) "alF" = ( /turf/simulated/floor/plasteel{ dir = 1; @@ -4890,46 +4692,11 @@ }, /area/security/main) "alH" = ( -/obj/structure/closet/wardrobe/red, +/obj/machinery/vending/secdrobe, /turf/simulated/floor/plasteel{ icon_state = "showroomfloor" }, /area/security/main) -"alI" = ( -/obj/machinery/door/airlock/security/glass{ - name = "Security Pods"; - req_access_txt = "71" - }, -/obj/machinery/door/firedoor, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/security/podbay) -"alK" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plasteel{ - icon_state = "dark" - }, -/area/security/podbay) "alL" = ( /obj/effect/spawner/window/reinforced, /turf/simulated/floor/plating, @@ -5113,7 +4880,9 @@ name = "\improper Recreation Area" }) "ami" = ( -/obj/machinery/computer/HolodeckControl, +/obj/machinery/computer/HolodeckControl{ + dir = 4 + }, /turf/simulated/floor/plasteel, /area/crew_quarters/fitness{ name = "\improper Recreation Area" @@ -5312,34 +5081,14 @@ /obj/effect/spawner/window/reinforced, /turf/simulated/floor/plating, /area/security/brig) -"amF" = ( -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - dir = 1; - icon_state = "red" - }, -/area/security/main) "amG" = ( /obj/structure/cable/yellow{ d1 = 4; d2 = 8; icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 }, /turf/simulated/floor/plasteel{ dir = 1; @@ -5361,9 +5110,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "red" @@ -5391,12 +5137,6 @@ d2 = 8; icon_state = "1-8" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, /turf/simulated/floor/plasteel{ dir = 5; icon_state = "red" @@ -5424,12 +5164,12 @@ /turf/simulated/floor/plating, /area/security/brig) "amM" = ( -/obj/machinery/computer/secure_data, /obj/structure/cable/yellow{ d1 = 1; d2 = 2; icon_state = "1-2" }, +/obj/machinery/computer/secure_data, /turf/simulated/floor/plasteel{ icon_state = "vault" }, @@ -5633,9 +5373,6 @@ "ano" = ( /turf/space, /area/maintenance/auxsolarstarboard) -"anq" = ( -/turf/simulated/wall/r_wall, -/area/engine/mechanic_workshop) "anr" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -5876,6 +5613,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 10 }, +/obj/structure/closet/secure_closet/security, /turf/simulated/floor/plasteel{ icon_state = "showroomfloor" }, @@ -6084,20 +5822,6 @@ icon_state = "dark" }, /area/crew_quarters/sleep) -"aol" = ( -/obj/effect/decal/warning_stripes/north, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/engine, -/area/security/podbay) -"aom" = ( -/obj/machinery/door/poddoor/multi_tile/four_tile_ver{ - id_tag = "secpodbay" - }, -/obj/structure/spacepoddoor, -/turf/simulated/floor/engine, -/area/security/podbay) "aon" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/security/glass{ @@ -6308,9 +6032,6 @@ icon_state = "whitered" }, /area/security/brig) -"aoN" = ( -/turf/simulated/floor/engine, -/area/engine/mechanic_workshop) "aoS" = ( /obj/machinery/conveyor/north{ id = "garbage" @@ -6705,10 +6426,6 @@ icon_state = "vault" }, /area/engine/gravitygenerator) -"apK" = ( -/obj/effect/decal/warning_stripes/north, -/turf/simulated/floor/engine, -/area/security/podbay) "apL" = ( /obj/structure/cable/yellow{ d1 = 4; @@ -6899,15 +6616,15 @@ d2 = 8; icon_state = "4-8" }, -/obj/machinery/computer/security/telescreen/entertainment{ - pixel_y = -32 - }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/machinery/computer/security/telescreen/entertainment{ + pixel_y = -32 + }, /turf/simulated/floor/plasteel{ icon_state = "red" }, @@ -7690,7 +7407,6 @@ /area/security/brig) "asa" = ( /obj/structure/rack, -/obj/item/lock_buster, /obj/item/storage/box/flashbangs{ pixel_x = -2; pixel_y = -2 @@ -7776,10 +7492,6 @@ }, /turf/simulated/floor/plating, /area/engine/gravitygenerator) -"ask" = ( -/obj/structure/spacepoddoor, -/turf/simulated/floor/engine, -/area/security/podbay) "asl" = ( /obj/structure/disposalpipe/trunk{ dir = 4 @@ -8165,14 +7877,14 @@ /turf/simulated/wall, /area/maintenance/auxsolarstarboard) "asU" = ( -/obj/machinery/power/solar_control{ - id = "forestarboard"; - name = "Fore Starboard Solar Control" - }, /obj/structure/cable{ d2 = 4; icon_state = "0-4" }, +/obj/machinery/power/solar_control{ + id = "forestarboard"; + name = "Fore Starboard Solar Control" + }, /turf/simulated/floor/plating, /area/maintenance/auxsolarstarboard) "asV" = ( @@ -8188,13 +7900,6 @@ }, /area/security/brig) "asW" = ( -/obj/machinery/computer/security/telescreen{ - desc = "Used for watching Prison Wing holding areas."; - dir = 1; - name = "Prison Monitor"; - network = list("Prison"); - pixel_x = 30 - }, /obj/structure/cable/yellow{ d1 = 1; d2 = 2; @@ -8204,13 +7909,17 @@ dir = 8 }, /obj/machinery/vending/security, +/obj/machinery/computer/security/telescreen{ + desc = "Used for watching Prison Wing holding areas."; + dir = 1; + name = "Prison Monitor"; + network = list("Prison"); + pixel_x = 30 + }, /turf/simulated/floor/plasteel{ icon_state = "showroomfloor" }, /area/security/warden) -"asZ" = ( -/turf/simulated/floor/engine, -/area/security/podbay) "ata" = ( /obj/effect/spawner/lootdrop/maintenance, /turf/simulated/floor/plating/airless, @@ -8736,10 +8445,6 @@ icon_state = "redcorner" }, /area/security/brig) -"aui" = ( -/obj/effect/decal/warning_stripes/west, -/turf/simulated/floor/engine, -/area/security/podbay) "auj" = ( /obj/structure/chair/stool{ pixel_y = 8 @@ -8960,6 +8665,7 @@ /area/maintenance/fore) "auM" = ( /obj/machinery/computer/security{ + dir = 4; name = "Labor Camp Monitoring"; network = list("Labor") }, @@ -9135,10 +8841,6 @@ icon_state = "redcorner" }, /area/security/brig) -"ava" = ( -/obj/spacepod/sec, -/turf/simulated/floor/engine, -/area/security/podbay) "avb" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/security/glass{ @@ -9160,9 +8862,6 @@ }, /area/security/brig) "avd" = ( -/obj/machinery/computer/security{ - network = list("SS13","Research Outpost","Mining Outpost") - }, /obj/structure/cable/yellow{ d1 = 4; d2 = 8; @@ -9173,6 +8872,10 @@ d2 = 4; icon_state = "2-4" }, +/obj/machinery/computer/security{ + dir = 4; + network = list("SS13","Research Outpost","Mining Outpost") + }, /turf/simulated/floor/plasteel{ icon_state = "showroomfloor" }, @@ -9502,17 +9205,6 @@ "avN" = ( /turf/simulated/wall/mineral/titanium, /area/shuttle/pod_4) -"avO" = ( -/obj/item/radio/intercom/department/security, -/turf/simulated/wall/r_wall, -/area/security/podbay) -"avP" = ( -/obj/machinery/computer/podtracker, -/turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "vault" - }, -/area/engine/mechanic_workshop) "avQ" = ( /obj/effect/landmark{ name = "xeno_spawn"; @@ -9591,10 +9283,10 @@ name = "Port Maintenance" }) "avY" = ( -/mob/living/simple_animal/mouse, /obj/structure/disposalpipe/segment{ dir = 4 }, +/mob/living/simple_animal/mouse, /turf/simulated/floor/plating, /area/maintenance/fpmaint2{ name = "Port Maintenance" @@ -9676,10 +9368,12 @@ c_tag = "Labor Shuttle Control Desk"; dir = 4 }, -/obj/machinery/computer/shuttle/labor, /obj/machinery/light{ dir = 8 }, +/obj/machinery/computer/shuttle/labor{ + dir = 4 + }, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -9830,14 +9524,6 @@ }, /turf/simulated/floor/plating, /area/maintenance/starboard) -"aww" = ( -/obj/effect/decal/warning_stripes/south, -/turf/simulated/floor/engine, -/area/security/podbay) -"awx" = ( -/obj/effect/decal/warning_stripes/southwest, -/turf/simulated/floor/engine, -/area/security/podbay) "awy" = ( /obj/structure/cable/yellow{ d1 = 1; @@ -9916,7 +9602,9 @@ }, /area/security/main) "awH" = ( -/obj/machinery/computer/secure_data, +/obj/machinery/computer/secure_data{ + dir = 4 + }, /obj/machinery/computer/security/telescreen{ desc = "Used for watching Prison Wing holding areas."; dir = 1; @@ -10167,10 +9855,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" - }, /obj/structure/disposalpipe/sortjunction{ dir = 4; icon_state = "pipe-j2s"; @@ -10483,7 +10167,9 @@ }, /area/security/main) "axG" = ( -/obj/machinery/computer/prisoner, +/obj/machinery/computer/prisoner{ + dir = 4 + }, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -10821,22 +10507,6 @@ }, /turf/simulated/floor/plating, /area/maintenance/starboard) -"ays" = ( -/obj/structure/closet/secure_closet/security, -/obj/item/spacepod_equipment/weaponry/laser, -/obj/machinery/power/apc{ - dir = 4; - name = "Security Podbay APC"; - pixel_x = 25 - }, -/obj/structure/cable/yellow{ - d2 = 8; - icon_state = "0-8" - }, -/turf/simulated/floor/plasteel{ - icon_state = "dark" - }, -/area/security/podbay) "ayt" = ( /obj/structure/cable/yellow{ d1 = 1; @@ -10848,7 +10518,9 @@ d2 = 8; icon_state = "4-8" }, -/obj/machinery/computer/prisoner, +/obj/machinery/computer/prisoner{ + dir = 4 + }, /turf/simulated/floor/plasteel{ icon_state = "showroomfloor" }, @@ -11282,17 +10954,6 @@ }, /turf/simulated/floor/plating, /area/maintenance/starboard) -"azt" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/turf/simulated/floor/plasteel{ - icon_state = "stage_stairs" - }, -/area/security/podbay) "azu" = ( /obj/item/stack/sheet/cardboard, /obj/item/flashlight, @@ -11356,31 +11017,16 @@ name = "Port Maintenance" }) "azC" = ( -/obj/machinery/computer/cryopod{ - pixel_y = -25 - }, /obj/effect/landmark{ name = "JoinLateCryo" }, +/obj/machinery/computer/cryopod{ + pixel_y = -25 + }, /turf/simulated/floor/plasteel{ icon_state = "dark" }, /area/crew_quarters/sleep) -"azD" = ( -/obj/structure/spacepoddoor, -/obj/machinery/door/poddoor/multi_tile/three_tile_ver{ - id_tag = "mechpodbay" - }, -/turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "vault" - }, -/area/engine/mechanic_workshop) -"azE" = ( -/turf/simulated/floor/plasteel{ - icon_state = "dark" - }, -/area/security/podbay) "azF" = ( /obj/structure/cable/yellow{ d2 = 2; @@ -11886,7 +11532,6 @@ /turf/simulated/floor/wood, /area/crew_quarters/mrchangs) "aAE" = ( -/obj/effect/spawner/window/reinforced, /obj/structure/cable/yellow{ d2 = 4; icon_state = "0-4" @@ -11895,6 +11540,7 @@ id_tag = "Secure Gate"; name = "brig shutters" }, +/obj/effect/spawner/window/reinforced, /turf/simulated/floor/plating, /area/security/brig) "aAH" = ( @@ -11995,15 +11641,15 @@ }, /area/security/brig) "aAO" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, /obj/machinery/computer/security/telescreen{ dir = 4; name = "MiniSat Monitor"; network = list("MiniSat","tcomm"); pixel_x = -29 }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "yellow" @@ -12267,16 +11913,6 @@ }, /turf/simulated/floor/wood, /area/crew_quarters/mrchangs) -"aBK" = ( -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/plasteel{ - icon_state = "dark" - }, -/area/security/podbay) "aBL" = ( /obj/structure/cable/yellow{ d2 = 4; @@ -12591,7 +12227,6 @@ /turf/simulated/floor/plating/airless, /area/space/nearstation) "aCr" = ( -/obj/effect/spawner/window/reinforced, /obj/structure/cable/yellow{ d2 = 8; icon_state = "0-8" @@ -12600,6 +12235,7 @@ id_tag = "Secure Gate"; name = "brig shutters" }, +/obj/effect/spawner/window/reinforced, /turf/simulated/floor/plating, /area/security/brig) "aCs" = ( @@ -12724,20 +12360,22 @@ name = "\improper Warehouse" }) "aCF" = ( -/obj/effect/spawner/window/reinforced, /obj/structure/cable/yellow, -/obj/structure/cable/yellow{ - d2 = 4; - icon_state = "0-4" - }, -/obj/structure/cable/yellow{ - d2 = 8; - icon_state = "0-8" - }, /obj/machinery/door/poddoor/preopen{ id_tag = "Secure Gate"; name = "brig shutters" }, +/obj/effect/spawner/window/reinforced, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, /turf/simulated/floor/plating, /area/security/brig) "aCG" = ( @@ -13077,7 +12715,9 @@ /area/maintenance/starboard) "aDg" = ( /obj/structure/table, -/obj/machinery/computer/crew, +/obj/machinery/computer/crew{ + dir = 8 + }, /turf/simulated/floor/plasteel{ icon_state = "showroomfloor" }, @@ -14224,7 +13864,9 @@ dir = 8; pixel_x = 24 }, -/obj/machinery/computer/secure_data, +/obj/machinery/computer/secure_data{ + dir = 8 + }, /turf/simulated/floor/carpet, /area/security/detectives_office) "aFy" = ( @@ -14311,12 +13953,12 @@ }, /area/crew_quarters/sleep) "aFH" = ( +/obj/structure/table/wood, /obj/machinery/computer/security/wooden_tv{ density = 0; pixel_x = 3; pixel_y = 2 }, -/obj/structure/table/wood, /obj/machinery/computer/security/telescreen{ desc = "Used for watching Prison Wing holding areas."; name = "Prison Monitor"; @@ -14371,18 +14013,8 @@ }, /area/crew_quarters/sleep) "aFM" = ( -/obj/structure/rack{ - dir = 8; - layer = 2.9 - }, -/obj/item/clothing/gloves/color/yellow, -/obj/item/clothing/gloves/color/yellow, -/obj/item/clothing/gloves/color/yellow, -/obj/item/clothing/suit/storage/hazardvest, -/obj/item/clothing/suit/storage/hazardvest, -/obj/item/tank/internals/emergency_oxygen/engi, -/obj/item/tank/internals/emergency_oxygen/engi, /obj/effect/decal/warning_stripes/yellow, +/obj/machinery/vending/engidrobe, /turf/simulated/floor/plasteel, /area/engine/engineering) "aFO" = ( @@ -14486,7 +14118,18 @@ /obj/machinery/camera{ c_tag = "Engineering - Fore" }, -/obj/effect/decal/warning_stripes/northwest, +/obj/effect/decal/warning_stripes/yellow, +/obj/structure/rack{ + dir = 8; + layer = 2.9 + }, +/obj/item/clothing/gloves/color/yellow, +/obj/item/clothing/gloves/color/yellow, +/obj/item/clothing/gloves/color/yellow, +/obj/item/clothing/suit/storage/hazardvest, +/obj/item/clothing/suit/storage/hazardvest, +/obj/item/tank/internals/emergency_oxygen/engi, +/obj/item/tank/internals/emergency_oxygen/engi, /turf/simulated/floor/plasteel, /area/engine/engineering) "aGc" = ( @@ -14787,10 +14430,12 @@ /turf/simulated/floor/carpet, /area/security/detectives_office) "aGH" = ( -/obj/machinery/computer/med_data, /obj/machinery/newscaster{ pixel_x = 28 }, +/obj/machinery/computer/med_data{ + dir = 8 + }, /turf/simulated/floor/carpet, /area/security/detectives_office) "aGI" = ( @@ -14922,10 +14567,10 @@ /turf/simulated/floor/plating, /area/maintenance/starboard) "aGX" = ( +/obj/machinery/suit_storage_unit/ce/secure, /obj/machinery/computer/security/telescreen/entertainment{ pixel_y = -29 }, -/obj/machinery/suit_storage_unit/ce/secure, /turf/simulated/floor/plasteel{ dir = 5; icon_state = "vault" @@ -15064,7 +14709,9 @@ /obj/machinery/light{ dir = 8 }, -/obj/machinery/computer/shuttle/mining, +/obj/machinery/computer/shuttle/mining{ + dir = 4 + }, /turf/simulated/floor/plasteel{ dir = 9; icon_state = "brown" @@ -15289,7 +14936,6 @@ name = "Storage Wing" }) "aHS" = ( -/obj/machinery/computer/secure_data, /obj/machinery/flasher_button{ id = "secentranceflasher"; name = "Brig Entrance Flash Control"; @@ -15331,6 +14977,7 @@ pixel_y = 27; req_access_txt = "63" }, +/obj/machinery/computer/secure_data, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -15436,18 +15083,7 @@ }, /area/crew_quarters/sleep) "aIa" = ( -/obj/structure/rack{ - dir = 8; - layer = 2.9 - }, -/obj/item/storage/briefcase{ - pixel_x = -3; - pixel_y = 2 - }, -/obj/item/storage/secure/briefcase{ - pixel_x = 2; - pixel_y = -2 - }, +/obj/machinery/vending/detdrobe, /turf/simulated/floor/plasteel{ icon_state = "grimy" }, @@ -15784,7 +15420,9 @@ name = "Port Maintenance" }) "aIN" = ( -/obj/machinery/computer/security/mining, +/obj/machinery/computer/security/mining{ + dir = 4 + }, /turf/simulated/floor/plasteel, /area/quartermaster/miningdock{ name = "\improper Mining Office" @@ -17257,9 +16895,8 @@ icon_state = "1-2" }, /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/centcom{ - name = "Courtroom"; - opacity = 1 +/obj/machinery/door/airlock{ + name = "Courtroom" }, /turf/simulated/floor/plasteel{ icon_state = "dark" @@ -17384,13 +17021,13 @@ }) "aMc" = ( /obj/effect/decal/cleanable/dirt, -/mob/living/simple_animal/mouse, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/mob/living/simple_animal/mouse, /turf/simulated/floor/plating, /area/maintenance/fore) "aMd" = ( @@ -17761,6 +17398,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/machinery/vending/cargodrobe, /turf/simulated/floor/plasteel, /area/quartermaster/storage) "aMU" = ( @@ -18371,12 +18009,12 @@ /turf/simulated/floor/engine, /area/engine/engineering) "aOb" = ( -/obj/machinery/computer/security{ - network = list("SS13","Research Outpost","Mining Outpost") - }, /obj/machinery/newscaster/security_unit{ pixel_y = -30 }, +/obj/machinery/computer/security{ + network = list("SS13","Research Outpost","Mining Outpost") + }, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -18443,6 +18081,10 @@ pixel_x = -4; pixel_y = 2 }, +/obj/item/restraints/handcuffs, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, /obj/machinery/computer/security/telescreen{ desc = "Used for watching Prison Wing holding areas."; dir = 1; @@ -18450,10 +18092,6 @@ network = list("Prison"); pixel_y = -30 }, -/obj/item/restraints/handcuffs, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -19036,8 +18674,8 @@ }) "aPK" = ( /obj/structure/table, -/obj/machinery/computer/guestpass, /obj/effect/decal/warning_stripes/yellow, +/obj/machinery/computer/guestpass, /turf/simulated/floor/plasteel, /area/engine/engineering) "aPL" = ( @@ -19901,11 +19539,11 @@ }, /area/security/brig) "aRQ" = ( -/mob/living/simple_animal/mouse, /obj/machinery/atmospherics/binary/valve, /obj/structure/disposalpipe/segment{ dir = 4 }, +/mob/living/simple_animal/mouse, /turf/simulated/floor/plasteel{ icon_state = "floorgrime" }, @@ -19957,14 +19595,14 @@ /obj/structure/table/wood, /obj/item/book/manual/security_space_law, /obj/item/book/manual/security_space_law, +/obj/item/cartridge/lawyer, +/obj/item/pen/multi, /obj/machinery/computer/security/telescreen{ desc = "Used for watching Prison Wing holding areas."; name = "Prison Monitor"; network = list("Prison"); pixel_y = 30 }, -/obj/item/cartridge/lawyer, -/obj/item/pen/multi, /turf/simulated/floor/wood, /area/lawoffice) "aRX" = ( @@ -20156,7 +19794,9 @@ }) "aSC" = ( /obj/effect/decal/warning_stripes/yellow, -/obj/machinery/computer/sm_monitor, +/obj/machinery/computer/sm_monitor{ + dir = 4 + }, /turf/simulated/floor/plasteel, /area/engine/engineering) "aSD" = ( @@ -20205,8 +19845,10 @@ pixel_x = -27; pixel_y = 5 }, -/obj/machinery/computer/supplycomp, /obj/effect/decal/warning_stripes/yellow/hollow, +/obj/machinery/computer/supplycomp{ + dir = 4 + }, /turf/simulated/floor/plasteel, /area/quartermaster/storage) "aSH" = ( @@ -20326,7 +19968,6 @@ }, /area/turret_protected/ai_upload) "aSV" = ( -/obj/machinery/computer/borgupload, /obj/structure/window/reinforced{ dir = 1 }, @@ -20342,6 +19983,7 @@ name = "Cyborg Upload Console Window"; req_access_txt = "16" }, +/obj/machinery/computer/borgupload, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -20353,7 +19995,6 @@ }, /area/turret_protected/ai_upload) "aSX" = ( -/obj/machinery/computer/aiupload, /obj/structure/window/reinforced{ dir = 1 }, @@ -20371,6 +20012,7 @@ name = "Upload Console Window"; req_access_txt = "16" }, +/obj/machinery/computer/aiupload, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -20986,10 +20628,7 @@ d2 = 8; icon_state = "2-8" }, -/obj/machinery/ai_slipper{ - icon_state = "motion0"; - uses = 8 - }, +/obj/machinery/ai_slipper, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 10 }, @@ -21213,12 +20852,12 @@ /turf/simulated/floor/plating, /area/engine/engineering) "aUL" = ( -/obj/machinery/computer/station_alert, /obj/structure/sign/double/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/computer/station_alert, /turf/simulated/floor/plasteel{ icon_state = "vault" }, @@ -22145,7 +21784,6 @@ /turf/simulated/floor/plasteel, /area/quartermaster/storage) "aWN" = ( -/obj/machinery/computer/atmos_alert, /obj/structure/sign/double/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"; @@ -22155,15 +21793,18 @@ dir = 8; pixel_x = -26 }, +/obj/machinery/computer/atmos_alert, /turf/simulated/floor/plasteel{ icon_state = "vault" }, /area/engine/engineering) "aWO" = ( -/obj/machinery/computer/supplycomp, /obj/machinery/light_switch{ pixel_x = -23 }, +/obj/machinery/computer/supplycomp{ + dir = 4 + }, /turf/simulated/floor/plasteel{ dir = 10; icon_state = "brown" @@ -22256,9 +21897,6 @@ d2 = 4; icon_state = "0-4" }, -/obj/machinery/computer/monitor{ - name = "Engineering Power Monitoring Console" - }, /obj/machinery/status_display{ layer = 4; pixel_y = 32 @@ -22266,6 +21904,9 @@ /obj/machinery/camera{ c_tag = "Engineering - Power Monitoring" }, +/obj/machinery/computer/monitor{ + name = "Engineering Power Monitoring Console" + }, /turf/simulated/floor/plasteel{ icon_state = "vault" }, @@ -22292,9 +21933,8 @@ /area/turret_protected/ai_upload) "aXb" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/centcom{ - name = "Courtroom"; - opacity = 1 +/obj/machinery/door/airlock{ + name = "Courtroom" }, /turf/simulated/floor/plasteel{ icon_state = "dark" @@ -22400,7 +22040,9 @@ /turf/simulated/floor/engine, /area/engine/engineering) "aXt" = ( -/obj/machinery/computer/security/mining, +/obj/machinery/computer/security/mining{ + dir = 4 + }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "brown" @@ -22887,12 +22529,7 @@ /turf/simulated/floor/plasteel, /area/hallway/primary/fore) "aYA" = ( -/obj/structure/grille, -/obj/structure/window/reinforced/tinted{ - dir = 5; - max_integrity = 120; - reinf = 0 - }, +/obj/effect/spawner/window/reinforced/polarized, /turf/simulated/floor/plating, /area/crew_quarters/courtroom) "aYC" = ( @@ -23561,6 +23198,11 @@ }, /obj/structure/table, /obj/item/storage/fancy/donut_box, +/obj/machinery/button/windowtint{ + dir = 4; + pixel_x = -26; + range = 10 + }, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -23939,9 +23581,6 @@ name = "Arrivals" }) "baL" = ( -/obj/machinery/newscaster{ - pixel_y = -32 - }, /obj/machinery/light, /obj/machinery/camera{ c_tag = "Courtroom - Gallery"; @@ -24101,7 +23740,7 @@ /obj/machinery/door/firedoor, /obj/machinery/door/airlock/engineering/glass{ name = "Engineering"; - req_access_txt = "32" + req_one_access_txt = "32;70" }, /obj/structure/cable/yellow{ d1 = 4; @@ -24622,12 +24261,6 @@ }, /area/engine/engineering) "bcl" = ( -/obj/machinery/turretid{ - control_area = "\improper AI Upload Chamber"; - icon_state = "control_stun"; - name = "AI Upload turret control"; - pixel_y = 28 - }, /obj/item/radio/intercom{ broadcasting = 1; frequency = 1447; @@ -24656,6 +24289,12 @@ network = list("AIUpload"); pixel_x = -29 }, +/obj/machinery/turretid/stun{ + control_area = "\improper AI Upload Chamber"; + name = "AI Upload Turret Control"; + pixel_y = 28; + req_access = list(75) + }, /turf/simulated/floor/plasteel{ dir = 6; icon_state = "vault" @@ -24680,13 +24319,6 @@ /obj/machinery/light/small{ dir = 4 }, -/obj/machinery/computer/security/telescreen{ - desc = "Used for watching areas on the MiniSat."; - dir = 8; - name = "MiniSat Monitor"; - network = list("MiniSat","tcomm"); - pixel_x = 29 - }, /obj/machinery/camera/motion{ c_tag = "AI Upload Foyer"; network = list("SS13","RD","AIUpload") @@ -24694,6 +24326,13 @@ /obj/machinery/alarm{ pixel_y = 24 }, +/obj/machinery/computer/security/telescreen{ + desc = "Used for watching areas on the MiniSat."; + dir = 8; + name = "MiniSat Monitor"; + network = list("MiniSat","tcomm"); + pixel_x = 29 + }, /turf/simulated/floor/plasteel{ dir = 10; icon_state = "vault" @@ -26074,7 +25713,9 @@ network = list("Singulo"); pixel_x = 32 }, -/obj/machinery/computer/drone_control, +/obj/machinery/computer/drone_control{ + dir = 8 + }, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "yellow" @@ -27167,13 +26808,14 @@ }, /area/storage/tech) "bhK" = ( -/obj/structure/reagent_dispensers/spacecleanertank{ - pixel_y = 30 - }, /obj/structure/disposalpipe/segment{ dir = 2; icon_state = "pipe-c" }, +/obj/structure/closet/jcloset, +/obj/machinery/light_switch{ + pixel_x = 23 + }, /turf/simulated/floor/plasteel, /area/janitor) "bhL" = ( @@ -27494,7 +27136,6 @@ name = "Customs" }) "biy" = ( -/obj/machinery/computer/card, /obj/machinery/light{ dir = 1 }, @@ -27506,6 +27147,7 @@ /obj/machinery/camera{ c_tag = "Customs Checkpoint" }, +/obj/machinery/computer/card, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "red" @@ -27515,8 +27157,9 @@ }) "biz" = ( /obj/effect/decal/warning_stripes/southwest, -/obj/structure/closet/wardrobe/atmospherics_yellow, +/obj/structure/rack, /obj/item/flashlight, +/obj/item/painter, /turf/simulated/floor/plasteel, /area/atmos) "biA" = ( @@ -27525,8 +27168,9 @@ pixel_y = 28 }, /obj/effect/decal/warning_stripes/southeast, -/obj/structure/closet/wardrobe/atmospherics_yellow, +/obj/structure/rack, /obj/item/flashlight, +/obj/item/painter, /turf/simulated/floor/plasteel, /area/atmos) "biB" = ( @@ -27640,7 +27284,9 @@ /turf/simulated/floor/carpet, /area/crew_quarters/theatre) "biN" = ( -/obj/machinery/computer/supplycomp, +/obj/machinery/computer/supplycomp{ + dir = 1 + }, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "brown" @@ -27688,9 +27334,7 @@ d2 = 2; icon_state = "1-2" }, -/obj/machinery/ai_slipper{ - icon_state = "motion0" - }, +/obj/machinery/ai_slipper, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/bluegrid, /area/turret_protected/ai) @@ -27719,8 +27363,7 @@ /area/hallway/primary/central) "biY" = ( /obj/structure/reagent_dispensers/watertank, -/obj/machinery/light_switch{ - pixel_x = 8; +/obj/structure/reagent_dispensers/spacecleanertank{ pixel_y = 30 }, /turf/simulated/floor/plasteel{ @@ -28092,6 +27735,8 @@ /obj/machinery/light{ dir = 4 }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, /obj/machinery/computer/security/telescreen{ desc = "A telescreen that connects to the engine's camera network."; dir = 8; @@ -28100,8 +27745,6 @@ network = list("engine"); pixel_x = 30 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ dir = 5; icon_state = "vault" @@ -28132,8 +27775,8 @@ }, /area/engine/chiefs_office) "bjJ" = ( -/obj/machinery/computer/supplycomp/public, /obj/effect/decal/warning_stripes/yellow, +/obj/machinery/computer/supplycomp/public, /turf/simulated/floor/plasteel{ dir = 9; icon_state = "brown" @@ -28264,9 +27907,7 @@ }, /area/turret_protected/ai) "bjY" = ( -/obj/machinery/ai_slipper{ - icon_state = "motion0" - }, +/obj/machinery/ai_slipper, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/bluegrid, /area/turret_protected/ai) @@ -28622,7 +28263,7 @@ "bkL" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 + dir = 5 }, /turf/simulated/floor/plating, /area/janitor) @@ -28632,6 +28273,9 @@ d2 = 4; icon_state = "2-4" }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, /turf/simulated/floor/plasteel{ icon_state = "floorgrime" }, @@ -28801,21 +28445,6 @@ /area/hallway/secondary/construction{ name = "\improper Garden" }) -"bli" = ( -/obj/effect/spawner/window/reinforced, -/turf/simulated/floor/plating, -/area/engine/mechanic_workshop) -"blj" = ( -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "vault" - }, -/area/engine/mechanic_workshop) "bll" = ( /obj/structure/closet/emcloset, /obj/structure/sign/double/map/left{ @@ -28947,9 +28576,7 @@ name = "\improper MiniSat Exterior" }) "blF" = ( -/obj/machinery/ai_slipper{ - icon_state = "motion0" - }, +/obj/machinery/ai_slipper, /obj/machinery/flasher{ id = "AI"; pixel_x = 24; @@ -29563,13 +29190,13 @@ d2 = 8; icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, /mob/living/simple_animal/lizard{ name = "Wags-His-Tail"; real_name = "Wags-His-Tail" }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, /turf/simulated/floor/plasteel{ icon_state = "floorgrime" }, @@ -29583,9 +29210,6 @@ /obj/effect/landmark/start{ name = "Janitor" }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, /turf/simulated/floor/plasteel{ icon_state = "floorgrime" }, @@ -29736,14 +29360,12 @@ pixel_x = -24 }, /obj/structure/table, -/obj/item/clothing/gloves/color/orange, -/obj/item/storage/box/mousetraps, -/obj/item/storage/box/mousetraps, /obj/structure/cable/yellow{ d2 = 4; icon_state = "0-4" }, /obj/item/key/janitor, +/obj/item/reagent_containers/spray/cleaner, /turf/simulated/floor/plasteel{ icon_state = "floorgrime" }, @@ -29758,10 +29380,10 @@ /turf/simulated/floor/plating, /area/maintenance/starboard) "bmS" = ( -/obj/machinery/computer/secure_data, /obj/machinery/newscaster/security_unit{ pixel_y = 30 }, +/obj/machinery/computer/secure_data, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "red" @@ -30073,20 +29695,6 @@ /area/crew_quarters/captain{ name = "\improper Captain's Quarters" }) -"bnC" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/turf/simulated/floor/plasteel, -/area/engine/break_room) "bnE" = ( /obj/machinery/light_switch{ pixel_x = 28 @@ -30221,9 +29829,7 @@ name = "\improper MiniSat Exterior" }) "bnQ" = ( -/obj/machinery/ai_slipper{ - icon_state = "motion0" - }, +/obj/machinery/ai_slipper, /turf/simulated/floor/bluegrid, /area/turret_protected/ai) "bnR" = ( @@ -30496,6 +30102,8 @@ /obj/item/grenade/chem_grenade/cleaner, /obj/item/grenade/chem_grenade/cleaner, /obj/item/grenade/chem_grenade/cleaner, +/obj/item/storage/box/mousetraps, +/obj/item/storage/box/mousetraps, /turf/simulated/floor/plasteel{ icon_state = "floorgrime" }, @@ -30650,12 +30258,12 @@ name = "Station Intercom (General)"; pixel_x = -27 }, -/obj/machinery/computer/security/telescreen/entertainment{ - pixel_y = 32 - }, /obj/item/paper/safe_code{ owner = "captain" }, +/obj/machinery/computer/security/telescreen/entertainment{ + pixel_y = 32 + }, /turf/simulated/floor/carpet, /area/crew_quarters/captain{ name = "\improper Captain's Quarters" @@ -30663,13 +30271,11 @@ "boN" = ( /obj/item/restraints/legcuffs/beartrap, /obj/item/restraints/legcuffs/beartrap, -/obj/structure/table, /obj/machinery/requests_console{ department = "Janitorial"; departmentType = 1; pixel_x = -29 }, -/obj/item/reagent_containers/spray/cleaner, /obj/machinery/camera{ c_tag = "Custodial Closet"; dir = 4 @@ -30677,9 +30283,12 @@ /obj/machinery/light/small{ dir = 8 }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 +/obj/item/mop, +/obj/item/reagent_containers/glass/bucket, +/obj/structure/rack{ + dir = 1 }, +/obj/item/clothing/gloves/color/orange, /turf/simulated/floor/plasteel{ icon_state = "floorgrime" }, @@ -31240,8 +30849,6 @@ dir = 4; pixel_x = 11 }, -/obj/item/reagent_containers/glass/bucket, -/obj/item/mop, /obj/machinery/firealarm{ dir = 4; pixel_x = 24 @@ -31771,9 +31378,7 @@ /turf/space, /area/space/nearstation) "bqZ" = ( -/obj/machinery/ai_slipper{ - icon_state = "motion0" - }, +/obj/machinery/ai_slipper, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 1 }, @@ -32412,7 +32017,9 @@ }, /area/bridge) "bsi" = ( -/obj/machinery/computer/merch, +/obj/machinery/computer/merch{ + dir = 4 + }, /turf/simulated/floor/plasteel{ dir = 10; icon_state = "brown" @@ -32781,57 +32388,6 @@ }, /turf/simulated/floor/plasteel, /area/engine/break_room) -"bsZ" = ( -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door_control{ - id = "mechpod"; - name = "Mechanic's Inner Door Control"; - pixel_y = -24; - req_access_txt = "70" - }, -/obj/structure/table, -/obj/item/pod_parts/core, -/obj/item/circuitboard/mecha/pod, -/obj/item/clothing/glasses/welding{ - pixel_y = 12 - }, -/turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "vault" - }, -/area/engine/mechanic_workshop) -"bta" = ( -/obj/structure/cable/yellow{ - d2 = 8; - icon_state = "0-8" - }, -/obj/machinery/power/apc{ - name = "Mechanic Workshop APC"; - pixel_y = -25 - }, -/obj/structure/table, -/obj/item/stack/sheet/mineral/plasma{ - amount = 30 - }, -/obj/item/stack/rods{ - amount = 50 - }, -/obj/item/stack/sheet/glass{ - amount = 50 - }, -/obj/item/stack/sheet/metal{ - amount = 50 - }, -/obj/machinery/cell_charger, -/turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "vault" - }, -/area/engine/mechanic_workshop) "btb" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 8 @@ -32843,16 +32399,6 @@ /area/turret_protected/aisat_interior{ name = "\improper MiniSat Central Foyer" }) -"btc" = ( -/obj/machinery/door_control{ - desc = "A remote control-switch for the pod doors."; - id = "mechpodbay"; - name = "Pod Door Control"; - pixel_y = -24; - req_access_txt = "70" - }, -/turf/simulated/floor/engine, -/area/engine/mechanic_workshop) "btd" = ( /obj/machinery/door/firedoor, /obj/machinery/door/poddoor/shutters{ @@ -33265,19 +32811,19 @@ }, /area/bridge) "btV" = ( -/obj/machinery/computer/communications, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/computer/communications, /turf/simulated/floor/plasteel{ icon_state = "dark" }, /area/bridge) "btW" = ( +/obj/structure/table/glass, /obj/machinery/computer/security/wooden_tv{ pixel_x = 1; pixel_y = 6 }, -/obj/structure/table/glass, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -33303,10 +32849,10 @@ name = "Station Intercom (General)"; pixel_y = 29 }, -/obj/machinery/computer/teleporter, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 6 }, +/obj/machinery/computer/sm_monitor, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -33425,7 +32971,6 @@ name = "\improper Captain's Quarters" }) "buh" = ( -/obj/machinery/computer/communications, /obj/item/radio/intercom{ dir = 8; name = "Station Intercom (Captain)"; @@ -33438,6 +32983,9 @@ pixel_x = 24; pixel_y = 24 }, +/obj/machinery/computer/communications{ + dir = 8 + }, /turf/simulated/floor/wood, /area/crew_quarters/captain{ name = "\improper Captain's Quarters" @@ -33490,13 +33038,13 @@ d2 = 4; icon_state = "2-4" }, -/obj/machinery/computer/security/mining, /obj/machinery/keycard_auth{ pixel_y = 24 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 10 }, +/obj/machinery/computer/security/mining, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -33955,9 +33503,7 @@ /obj/machinery/light_switch{ pixel_x = -23 }, -/obj/machinery/ai_slipper{ - icon_state = "motion0" - }, +/obj/machinery/ai_slipper, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -34226,9 +33772,7 @@ name = "\improper MiniSat Teleporter Foyer" }) "bvx" = ( -/obj/machinery/ai_slipper{ - icon_state = "motion0" - }, +/obj/machinery/ai_slipper, /obj/machinery/turretid/stun{ control_area = "\improper AI Satellite Antechamber"; name = "AI Antechamber Turret Control"; @@ -34599,7 +34143,9 @@ /obj/machinery/newscaster/security_unit{ pixel_x = 32 }, -/obj/machinery/computer/security/mining, +/obj/machinery/computer/security/mining{ + dir = 8 + }, /turf/simulated/floor/wood, /area/crew_quarters/heads) "bwd" = ( @@ -35309,9 +34855,7 @@ name = "\improper MiniSat Teleporter Foyer" }) "bxx" = ( -/obj/machinery/ai_slipper{ - icon_state = "motion0" - }, +/obj/machinery/ai_slipper, /obj/structure/cable/yellow{ d1 = 4; d2 = 8; @@ -35666,14 +35210,14 @@ }, /area/hallway/primary/port) "bye" = ( +/obj/structure/bed/dogbed/ian, +/mob/living/simple_animal/pet/dog/corgi/Ian, /obj/machinery/computer/security/telescreen{ desc = "Used for watching Prison Wing holding areas."; name = "Prison Monitor"; network = list("Prison"); pixel_y = 30 }, -/obj/structure/bed/dogbed/ian, -/mob/living/simple_animal/pet/dog/corgi/Ian, /turf/simulated/floor/wood, /area/crew_quarters/heads) "byf" = ( @@ -35707,7 +35251,6 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, /obj/structure/disposalpipe/sortjunction{ dir = 1; name = "Custodial Junction"; @@ -35980,6 +35523,14 @@ pixel_x = -3; pixel_y = 5 }, +/obj/item/storage/briefcase{ + pixel_x = -3; + pixel_y = 2 + }, +/obj/item/storage/secure/briefcase{ + pixel_x = 2; + pixel_y = -2 + }, /turf/simulated/floor/carpet, /area/security/detectives_office) "byE" = ( @@ -36051,7 +35602,6 @@ }, /area/civilian/barber) "byJ" = ( -/obj/machinery/computer/card, /obj/machinery/light/small{ dir = 4 }, @@ -36062,6 +35612,9 @@ name = "Captain RC"; pixel_x = 32 }, +/obj/machinery/computer/card{ + dir = 8 + }, /turf/simulated/floor/wood, /area/crew_quarters/captain{ name = "\improper Captain's Quarters" @@ -36091,14 +35644,10 @@ /turf/simulated/floor/wood, /area/crew_quarters/bar) "byN" = ( -/obj/structure/closet/gmcloset{ - desc = "It's a storage unit."; - name = "spare gear" - }, -/obj/item/wrench, /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 8 }, +/obj/machinery/vending/bardrobe, /turf/simulated/floor/wood, /area/crew_quarters/bar) "byO" = ( @@ -36147,7 +35696,7 @@ "byV" = ( /obj/machinery/door/airlock/maintenance{ name = "Engineering Foyer Maintenance"; - req_one_access_txt = "32;19" + req_one_access_txt = "32;19;70" }, /turf/simulated/floor/plating, /area/engine/break_room) @@ -36224,9 +35773,7 @@ /turf/space, /area/space/nearstation) "bze" = ( -/obj/machinery/ai_slipper{ - icon_state = "motion0" - }, +/obj/machinery/ai_slipper, /obj/structure/cable/yellow{ d1 = 4; d2 = 8; @@ -36372,9 +35919,7 @@ dir = 1; layer = 2.9 }, -/obj/machinery/ai_slipper{ - icon_state = "motion0" - }, +/obj/machinery/ai_slipper, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, @@ -36440,10 +35985,10 @@ name = "\improper MiniSat Exterior" }) "bzr" = ( +/obj/machinery/vending/cigarette, /obj/machinery/computer/security/telescreen/entertainment{ pixel_y = -30 }, -/obj/machinery/vending/cigarette, /turf/simulated/floor/plasteel{ dir = 5; icon_state = "cafeteria" @@ -36606,9 +36151,7 @@ /obj/machinery/door/airlock/public/glass{ name = "Library" }, -/turf/simulated/floor/plasteel{ - icon_state = "carpetsymbol" - }, +/turf/simulated/floor/carpet, /area/library) "bzN" = ( /obj/machinery/door/firedoor, @@ -36617,9 +36160,7 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plasteel{ - icon_state = "carpetsymbol" - }, +/turf/simulated/floor/carpet, /area/library) "bzO" = ( /obj/structure/sign/directions/engineering{ @@ -37063,7 +36604,9 @@ }) "bAT" = ( /obj/machinery/light, -/obj/machinery/computer/station_alert, +/obj/machinery/computer/station_alert{ + dir = 1 + }, /obj/machinery/computer/security/telescreen{ dir = 1; name = "MiniSat Monitor"; @@ -37321,10 +36864,10 @@ /obj/machinery/light_switch{ pixel_x = -23 }, +/obj/machinery/cryopod/robot, /obj/machinery/computer/cryopod/robot{ pixel_y = -28 }, -/obj/machinery/cryopod/robot, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "darkbluecorners" @@ -37598,11 +37141,15 @@ d2 = 2; icon_state = "1-2" }, -/obj/machinery/computer/secure_data, +/obj/machinery/computer/secure_data{ + dir = 1 + }, /turf/simulated/floor/wood, /area/crew_quarters/heads) "bCa" = ( -/obj/machinery/computer/card, +/obj/machinery/computer/card{ + dir = 1 + }, /turf/simulated/floor/wood, /area/crew_quarters/heads) "bCb" = ( @@ -37937,11 +37484,11 @@ /turf/simulated/floor/wood, /area/crew_quarters/bar) "bCJ" = ( -/obj/machinery/computer/arcade, /obj/machinery/alarm{ dir = 8; pixel_x = 24 }, +/obj/machinery/computer/arcade, /obj/machinery/computer/security/telescreen/entertainment{ pixel_y = 32 }, @@ -38956,7 +38503,6 @@ /turf/simulated/floor/engine, /area/engine/engineering) "bEM" = ( -/obj/machinery/computer/atmos_alert, /obj/structure/sign/double/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"; @@ -38965,6 +38511,7 @@ /obj/machinery/camera{ c_tag = "Atmospherics - Control Room" }, +/obj/machinery/computer/atmos_alert, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "caution" @@ -39181,14 +38728,15 @@ name = "Arrivals" }) "bFf" = ( -/obj/machinery/computer/monitor{ - name = "Grid Power Monitoring Computer" - }, /obj/item/radio/intercom{ name = "Station Intercom (General)"; pixel_x = 5; pixel_y = -26 }, +/obj/machinery/computer/monitor{ + dir = 1; + name = "Grid Power Monitoring Computer" + }, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -39274,11 +38822,6 @@ /area/security/vacantoffice) "bFr" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/centcom{ - name = "Vacant Office"; - opacity = 1; - req_access_txt = "32" - }, /obj/structure/cable/yellow{ d1 = 1; d2 = 2; @@ -39286,9 +38829,11 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/plasteel{ - icon_state = "carpetsymbol" +/obj/machinery/door/airlock{ + id_tag = null; + name = "Vacant Office" }, +/turf/simulated/floor/wood, /area/security/vacantoffice) "bFs" = ( /obj/structure/cable/yellow{ @@ -40125,11 +39670,13 @@ /turf/simulated/floor/wood, /area/security/vacantoffice) "bHi" = ( -/obj/machinery/computer/message_monitor, /obj/machinery/alarm{ dir = 4; pixel_x = -24 }, +/obj/machinery/computer/message_monitor{ + dir = 4 + }, /turf/simulated/floor/plasteel{ icon_state = "grimy" }, @@ -40307,13 +39854,13 @@ }) "bHC" = ( /obj/machinery/light, +/mob/living/simple_animal/pet/dog/fox/Renault, /obj/machinery/computer/security/telescreen{ dir = 1; name = "MiniSat Monitor"; network = list("MiniSat","tcomm"); pixel_y = -29 }, -/mob/living/simple_animal/pet/dog/fox/Renault, /turf/simulated/floor/carpet, /area/crew_quarters/captain{ name = "\improper Captain's Quarters" @@ -40430,12 +39977,7 @@ }, /area/crew_quarters/bar) "bHR" = ( -/obj/structure/grille, -/obj/structure/window/reinforced/tinted{ - dir = 5; - max_integrity = 120; - reinf = 0 - }, +/obj/effect/spawner/window/reinforced/polarized, /turf/simulated/floor/plating, /area/crew_quarters/bar) "bHS" = ( @@ -40519,18 +40061,9 @@ icon_state = "neutralcorner" }, /area/atmos) -"bIe" = ( -/obj/machinery/atmospherics/binary/volume_pump/on{ - dir = 4; - name = "External to Filter" - }, -/turf/simulated/floor/plasteel{ - icon_state = "neutralcorner" - }, -/area/atmos) "bIf" = ( -/obj/machinery/atmospherics/pipe/simple/visible/purple{ - dir = 10 +/obj/machinery/atmospherics/pipe/simple/hidden/purple{ + dir = 4 }, /turf/simulated/floor/plasteel{ icon_state = "neutralcorner" @@ -40538,12 +40071,16 @@ /area/atmos) "bIg" = ( /obj/machinery/computer/general_air_control{ + dir = 8; frequency = 1443; level = 3; name = "Distribution and Waste Monitor"; pixel_y = -2; sensors = list("mair_in_meter" = "Mixed Air In", "air_sensor" = "Mixed Air Supply Tank", "mair_out_meter" = "Mixed Air Out", "dloop_atm_meter" = "Distribution Loop", "wloop_atm_meter" = "Waste Loop") }, +/obj/machinery/atmospherics/pipe/simple/hidden/purple{ + dir = 4 + }, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "caution" @@ -40561,11 +40098,10 @@ }, /area/medical/reception) "bIi" = ( -/obj/structure/table, -/obj/item/storage/belt/utility, -/obj/item/t_scanner, -/obj/item/t_scanner, -/obj/item/t_scanner, +/obj/machinery/atmospherics/binary/volume_pump/on{ + dir = 4; + name = "External to Filter" + }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "caution" @@ -40577,6 +40113,9 @@ d2 = 2; icon_state = "1-2" }, +/obj/machinery/atmospherics/pipe/simple/visible/purple{ + dir = 10 + }, /turf/simulated/floor/plasteel, /area/atmos) "bIk" = ( @@ -40832,17 +40371,18 @@ name = "\improper Auxiliary Restrooms" }) "bIY" = ( -/obj/machinery/computer/general_air_control{ - frequency = 1441; - name = "Tank Monitor"; - sensors = list("n2_sensor" = "Nitrogen", "o2_sensor" = "Oxygen", "co2_sensor" = "Carbon Dioxide", "tox_sensor" = "Toxins", "n2o_sensor" = "Nitrous Oxide", "waste_sensor" = "Gas Mix Tank") - }, /obj/machinery/requests_console{ department = "Atmospherics"; departmentType = 4; name = "Atmos RC"; pixel_x = 30 }, +/obj/machinery/computer/general_air_control{ + dir = 8; + frequency = 1441; + name = "Tank Monitor"; + sensors = list("n2_sensor" = "Nitrogen", "o2_sensor" = "Oxygen", "co2_sensor" = "Carbon Dioxide", "tox_sensor" = "Toxins", "n2o_sensor" = "Nitrous Oxide", "waste_sensor" = "Gas Mix Tank") + }, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "caution" @@ -41352,9 +40892,8 @@ /area/crew_quarters/bar) "bJK" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/centcom{ - name = "Club"; - opacity = 1 +/obj/machinery/door/airlock/public{ + name = "Club" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -41465,9 +41004,6 @@ }, /area/atmos) "bJU" = ( -/obj/machinery/atmospherics/pipe/simple/visible/purple{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -41484,9 +41020,6 @@ name = "Atmospherics Monitoring"; req_access_txt = "24" }, -/obj/machinery/atmospherics/pipe/simple/visible/purple{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -41507,9 +41040,7 @@ d2 = 2; icon_state = "1-2" }, -/obj/machinery/atmospherics/pipe/simple/visible/purple{ - dir = 10 - }, +/obj/machinery/atmospherics/pipe/simple/visible/purple, /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 1 }, @@ -41528,7 +41059,11 @@ /turf/simulated/floor/plasteel, /area/atmos) "bJZ" = ( -/obj/structure/closet/crate, +/obj/structure/table, +/obj/item/storage/belt/utility, +/obj/item/t_scanner, +/obj/item/t_scanner, +/obj/item/t_scanner, /turf/simulated/floor/plasteel, /area/atmos) "bKa" = ( @@ -41569,14 +41104,15 @@ /turf/simulated/floor/plasteel, /area/atmos) "bKg" = ( +/obj/machinery/atmospherics/pipe/simple/visible/cyan, /obj/machinery/computer/general_air_control/large_tank_control{ + dir = 8; frequency = 1441; input_tag = "waste_in"; name = "Gas Mix Tank Control"; output_tag = "waste_out"; sensors = list("waste_sensor" = "Tank") }, -/obj/machinery/atmospherics/pipe/simple/visible/cyan, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "green" @@ -42269,9 +41805,8 @@ icon_state = "4-8" }, /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/centcom{ - name = "Club"; - opacity = 1 +/obj/machinery/door/airlock/public{ + name = "Club" }, /turf/simulated/floor/plasteel{ icon_state = "bar" @@ -42283,11 +41818,6 @@ d2 = 4; icon_state = "2-4" }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 1 }, @@ -42451,9 +41981,8 @@ }, /area/atmos) "bLU" = ( -/obj/machinery/atmospherics/binary/volume_pump/on{ - dir = 8; - name = "Air to External" +/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ + dir = 4 }, /obj/structure/disposalpipe/segment{ dir = 4 @@ -42463,7 +41992,7 @@ }, /area/atmos) "bLV" = ( -/obj/machinery/atmospherics/pipe/simple/visible/cyan{ +/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ dir = 4 }, /obj/structure/disposalpipe/segment{ @@ -42485,7 +42014,7 @@ pixel_y = -26; req_access_txt = "24" }, -/obj/machinery/atmospherics/pipe/simple/visible/cyan{ +/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ dir = 4 }, /obj/machinery/disposal, @@ -42905,6 +42434,10 @@ /obj/effect/decal/warning_stripes/yellow/partial{ dir = 1 }, +/obj/machinery/ticket_machine{ + layer = 4; + pixel_x = 32 + }, /turf/simulated/floor/plasteel, /area/bridge/meeting_room{ name = "\improper Command Hallway" @@ -42932,10 +42465,6 @@ }, /obj/effect/decal/warning_stripes/arrow, /obj/effect/decal/warning_stripes/yellow/partial, -/obj/machinery/ticket_machine{ - layer = 4; - pixel_x = -32 - }, /turf/simulated/floor/plasteel, /area/bridge/meeting_room{ name = "\improper Command Hallway" @@ -43301,7 +42830,9 @@ name = "E.V.A. Storage" }) "bNN" = ( -/obj/machinery/computer/card/minor/rd, +/obj/machinery/computer/card/minor/rd{ + dir = 4 + }, /turf/simulated/floor/plasteel{ dir = 5; icon_state = "cafeteria" @@ -43316,7 +42847,10 @@ /obj/machinery/light{ dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/visible/cyan, +/obj/machinery/atmospherics/binary/volume_pump/on{ + dir = 1; + name = "Air to External" + }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "caution" @@ -43366,17 +42900,6 @@ }, /turf/simulated/floor/plating, /area/security/detectives_office) -"bNW" = ( -/obj/effect/spawner/window/reinforced, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plating, -/area/hallway/secondary/entry{ - name = "Arrivals" - }) "bNX" = ( /obj/structure/window/reinforced{ dir = 4 @@ -43597,15 +43120,15 @@ /area/library) "bOw" = ( /obj/structure/table/wood, -/obj/machinery/computer/security/telescreen/entertainment{ - pixel_x = -32 - }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 5 }, /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 }, +/obj/machinery/computer/security/telescreen/entertainment{ + pixel_x = -32 + }, /turf/simulated/floor/wood, /area/library) "bOx" = ( @@ -44227,16 +43750,6 @@ /area/toxins/xenobiology{ name = "\improper Secure Lab" }) -"bPL" = ( -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plasteel{ - icon_state = "dark" - }, -/area/security/podbay) "bPO" = ( /obj/structure/foodcart, /turf/simulated/floor/plasteel{ @@ -44252,16 +43765,6 @@ /area/security/vacantoffice) "bPS" = ( /obj/effect/decal/warning_stripes/southeast, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel, @@ -44332,7 +43835,11 @@ /obj/structure/window/reinforced{ dir = 1 }, -/obj/structure/closet/secure_closet/medical2, +/obj/structure/table, +/obj/item/tank/internals/anesthetic, +/obj/item/clothing/mask/breath/medical, +/obj/item/storage/firstaid/machine, +/obj/item/storage/firstaid/machine, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -44624,22 +44131,12 @@ d2 = 2; icon_state = "1-2" }, -/obj/machinery/firealarm{ - dir = 8; +/obj/machinery/button/windowtint{ + dir = 4; pixel_x = -26 }, /turf/simulated/floor/wood, /area/crew_quarters/bar) -"bQN" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/public/glass{ - name = "Pod Bay" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/hallway/secondary/entry{ - name = "Arrivals" - }) "bQO" = ( /obj/structure/cable/yellow{ d1 = 1; @@ -44665,6 +44162,10 @@ /area/crew_quarters/bar) "bQQ" = ( /obj/machinery/vending/coffee, +/obj/machinery/firealarm{ + dir = 1; + pixel_y = -24 + }, /turf/simulated/floor/carpet, /area/crew_quarters/bar) "bQR" = ( @@ -44706,7 +44207,6 @@ pixel_x = 6; pixel_y = -30 }, -/obj/machinery/computer/card/minor/cmo, /obj/machinery/keycard_auth{ pixel_x = -26; pixel_y = -7 @@ -44717,6 +44217,9 @@ pixel_x = -26; pixel_y = 4 }, +/obj/machinery/computer/card/minor/cmo{ + dir = 4 + }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "barber" @@ -45172,19 +44675,6 @@ /area/ai_monitored/storage/eva{ name = "E.V.A. Storage" }) -"bRR" = ( -/obj/structure/chair, -/obj/effect/landmark/start{ - name = "Civilian" - }, -/obj/machinery/light{ - dir = 1 - }, -/obj/effect/decal/warning_stripes/north, -/turf/simulated/floor/plasteel, -/area/hallway/secondary/entry{ - name = "Arrivals" - }) "bRS" = ( /obj/structure/cable/yellow{ d1 = 4; @@ -45333,11 +44823,11 @@ c_tag = "Club - Aft"; dir = 1 }, +/obj/item/clothing/mask/cigarette/pipe, +/obj/structure/table/wood, /obj/machinery/computer/security/telescreen/entertainment{ pixel_y = -29 }, -/obj/item/clothing/mask/cigarette/pipe, -/obj/structure/table/wood, /turf/simulated/floor/carpet, /area/crew_quarters/bar) "bSk" = ( @@ -45421,17 +44911,18 @@ name = "\improper Command Hallway" }) "bSs" = ( +/obj/machinery/atmospherics/pipe/simple/visible/green, +/obj/structure/window/reinforced{ + dir = 4 + }, /obj/machinery/computer/general_air_control/large_tank_control{ + dir = 8; frequency = 1441; input_tag = "n2o_in"; name = "Nitrous Oxide Supply Control"; output_tag = "n2o_out"; sensors = list("n2o_sensor" = "Tank") }, -/obj/machinery/atmospherics/pipe/simple/visible/green, -/obj/structure/window/reinforced{ - dir = 4 - }, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "escape" @@ -45804,33 +45295,6 @@ icon_state = "whiteblue" }, /area/medical/paramedic) -"bTf" = ( -/obj/machinery/computer/security{ - network = list("SS13","Research Outpost","Mining Outpost") - }, -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - icon_state = "dark" - }, -/area/security/podbay) -"bTg" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/effect/landmark/start{ - name = "Security Pod Pilot" - }, -/obj/structure/chair/office/dark{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - icon_state = "dark" - }, -/area/security/podbay) "bTh" = ( /obj/machinery/computer/account_database, /turf/simulated/floor/bluegrid, @@ -46103,23 +45567,13 @@ /turf/simulated/floor/plasteel, /area/gateway) "bTH" = ( -/obj/machinery/camera{ - c_tag = "Arrivals - Aft Arm - Far"; - dir = 1 +/obj/machinery/newscaster{ + pixel_y = -32 }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" +/turf/simulated/floor/plasteel{ + icon_state = "dark" }, -/obj/effect/decal/warning_stripes/south, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/turf/simulated/floor/plasteel, -/area/hallway/secondary/entry{ - name = "Arrivals" - }) +/area/crew_quarters/courtroom) "bTI" = ( /obj/machinery/hologram/holopad, /obj/structure/cable/yellow{ @@ -46131,17 +45585,6 @@ /area/teleporter{ name = "\improper Teleporter Room" }) -"bTJ" = ( -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/effect/decal/warning_stripes/south, -/turf/simulated/floor/plasteel, -/area/hallway/secondary/entry{ - name = "Arrivals" - }) "bTK" = ( /obj/machinery/alarm{ dir = 1; @@ -46468,12 +45911,6 @@ /area/construction/hallway{ name = "\improper MiniSat Exterior" }) -"bUB" = ( -/obj/effect/decal/warning_stripes/east, -/turf/simulated/floor/plasteel, -/area/hallway/secondary/entry{ - name = "Arrivals" - }) "bUC" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 9 @@ -46506,19 +45943,15 @@ }) "bUI" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/centcom{ - name = "Quiet Room"; - opacity = 1 - }, -/turf/simulated/floor/plasteel{ - icon_state = "carpetsymbol" +/obj/machinery/door/airlock/glass{ + name = "Quiet Room" }, +/turf/simulated/floor/carpet, /area/library) "bUJ" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/centcom{ - name = "Quiet Room"; - opacity = 1 +/obj/machinery/door/airlock/glass{ + name = "Quiet Room" }, /obj/structure/cable/yellow{ d1 = 1; @@ -46527,9 +45960,7 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/plasteel{ - icon_state = "carpetsymbol" - }, +/turf/simulated/floor/carpet, /area/library) "bUK" = ( /obj/machinery/door/morgue{ @@ -46576,73 +46007,23 @@ name = "E.V.A. Storage" }) "bUO" = ( -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" +/obj/machinery/door/airlock/external{ + id_tag = "specops_home"; + locked = 1 }, -/obj/effect/decal/warning_stripes/south, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/turf/simulated/floor/plasteel, -/area/hallway/secondary/entry{ - name = "Arrivals" - }) +/turf/simulated/floor/plating, +/area/hallway/secondary/entry) "bUP" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plasteel, /area/ai_monitored/storage/eva{ name = "E.V.A. Storage" }) -"bUQ" = ( -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/decal/warning_stripes/south, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plasteel, -/area/hallway/secondary/entry{ - name = "Arrivals" - }) "bUR" = ( /obj/machinery/door/airlock/welded, /turf/simulated/floor/plating, /area/maintenance/aft) "bUS" = ( -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/decal/warning_stripes/south, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/turf/simulated/floor/plasteel, -/area/hallway/secondary/entry{ - name = "Arrivals" - }) -"bUT" = ( -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/decal/warning_stripes/southwestcorner, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, @@ -46667,18 +46048,9 @@ name = "Station Intercom (General)"; pixel_y = -25 }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/decal/warning_stripes/south, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, /turf/simulated/floor/plasteel, /area/hallway/secondary/entry{ name = "Arrivals" @@ -46743,8 +46115,8 @@ "bVd" = ( /obj/structure/table/wood, /obj/item/folder, -/obj/item/stamp/centcom, /obj/item/pen/multi/fountain, +/obj/item/stamp/rep, /turf/simulated/floor/carpet, /area/ntrep) "bVe" = ( @@ -47132,11 +46504,6 @@ d2 = 8; icon_state = "1-8" }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, /obj/effect/decal/warning_stripes/east, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -47321,11 +46688,6 @@ dir = 4; pixel_x = -24 }, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, /obj/effect/decal/warning_stripes/southwest, /turf/simulated/floor/plasteel, /area/teleporter{ @@ -47471,18 +46833,12 @@ name = "E.V.A. Storage" }) "bWB" = ( -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, /obj/effect/decal/warning_stripes/south, /turf/simulated/floor/plasteel, /area/teleporter{ name = "\improper Teleporter Room" }) "bWC" = ( -/obj/structure/cable/yellow, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "vault" @@ -47517,7 +46873,6 @@ name = "\improper Teleporter Room" }) "bWF" = ( -/obj/structure/cable/yellow, /obj/machinery/shieldwallgen, /turf/simulated/floor/plasteel{ dir = 4; @@ -47615,11 +46970,6 @@ /obj/item/clothing/mask/gas, /obj/structure/table, /obj/item/radio/off, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, /obj/effect/decal/warning_stripes/yellow/hollow, /turf/simulated/floor/plasteel, /area/teleporter{ @@ -48141,7 +47491,9 @@ }, /area/crew_quarters/kitchen) "bXY" = ( -/obj/machinery/computer/teleporter, +/obj/machinery/computer/teleporter{ + dir = 1 + }, /turf/simulated/floor/plating, /area/teleporter{ name = "\improper Teleporter Room" @@ -48170,17 +47522,18 @@ /turf/simulated/floor/wood, /area/blueshield) "bYc" = ( +/obj/machinery/atmospherics/pipe/simple/visible/green, +/obj/structure/window/reinforced{ + dir = 4 + }, /obj/machinery/computer/general_air_control/large_tank_control{ + dir = 8; frequency = 1441; input_tag = "tox_in"; name = "Toxin Supply Control"; output_tag = "tox_out"; sensors = list("tox_sensor" = "Tank") }, -/obj/machinery/atmospherics/pipe/simple/visible/green, -/obj/structure/window/reinforced{ - dir = 4 - }, /turf/simulated/floor/plasteel{ icon_state = "purplefull" }, @@ -48374,13 +47727,13 @@ }, /area/crew_quarters/kitchen) "bYv" = ( -/obj/machinery/computer/security/telescreen/entertainment{ - pixel_x = 30 - }, /obj/machinery/photocopier, /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 8 }, +/obj/machinery/computer/security/telescreen/entertainment{ + pixel_x = 30 + }, /turf/simulated/floor/wood, /area/library) "bYw" = ( @@ -48489,7 +47842,9 @@ pixel_y = -24; req_access_txt = "67" }, -/obj/machinery/computer/crew, +/obj/machinery/computer/crew{ + dir = 1 + }, /turf/simulated/floor/wood, /area/blueshield) "bYK" = ( @@ -48524,7 +47879,9 @@ pixel_y = -24; req_access_txt = "73" }, -/obj/machinery/computer/secure_data, +/obj/machinery/computer/secure_data{ + dir = 1 + }, /turf/simulated/floor/wood, /area/ntrep) "bYO" = ( @@ -49174,18 +48531,6 @@ /obj/effect/decal/warning_stripes/west, /turf/simulated/floor/plating, /area/maintenance/starboard) -"caq" = ( -/obj/machinery/door_control{ - desc = "A remote control-switch for the pod doors."; - id = "escapepodbay"; - name = "Pod Door Control"; - pixel_x = -24; - req_access_txt = "13" - }, -/turf/simulated/floor/engine, -/area/hallway/secondary/entry{ - name = "Arrivals" - }) "car" = ( /turf/simulated/floor/plasteel{ dir = 1; @@ -49446,16 +48791,11 @@ /turf/simulated/floor/plasteel, /area/crew_quarters/kitchen) "caT" = ( -/obj/structure/closet{ - name = "spare parts locker" - }, -/obj/item/rack_parts, -/obj/item/rack_parts, -/obj/item/wrench, /obj/structure/window/reinforced{ dir = 4 }, /obj/effect/decal/warning_stripes/yellow, +/obj/machinery/vending/chefdrobe, /turf/simulated/floor/plasteel, /area/crew_quarters/kitchen) "caU" = ( @@ -49506,8 +48846,8 @@ /turf/simulated/floor/plating, /area/crew_quarters/hor) "caZ" = ( -/mob/living/simple_animal/mouse, /obj/structure/disposalpipe/segment, +/mob/living/simple_animal/mouse, /turf/simulated/floor/plating, /area/maintenance/starboard) "cba" = ( @@ -49622,12 +48962,8 @@ /turf/simulated/floor/engine/co2, /area/atmos) "cbn" = ( -/obj/structure/table/glass, -/obj/item/book/manual/sop_service{ - pixel_x = 2; - pixel_y = 5 - }, /obj/effect/decal/warning_stripes/south, +/obj/machinery/vending/hydrodrobe, /turf/simulated/floor/plasteel, /area/hydroponics) "cbo" = ( @@ -49726,7 +49062,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 5 }, -/obj/structure/disposalpipe/segment, /obj/structure/disposalpipe/sortjunction{ dir = 1; icon_state = "pipe-j2s"; @@ -50318,17 +49653,18 @@ }, /area/hallway/primary/central) "ccT" = ( +/obj/machinery/atmospherics/pipe/simple/visible/green, +/obj/structure/window/reinforced{ + dir = 4 + }, /obj/machinery/computer/general_air_control/large_tank_control{ + dir = 8; frequency = 1441; input_tag = "co2_in"; name = "Carbon Dioxide Supply Control"; output_tag = "co2_out"; sensors = list("co2_sensor" = "Tank") }, -/obj/machinery/atmospherics/pipe/simple/visible/green, -/obj/structure/window/reinforced{ - dir = 4 - }, /turf/simulated/floor/plasteel{ icon_state = "vault" }, @@ -50655,15 +49991,16 @@ }, /area/gateway) "cdC" = ( -/obj/machinery/power/solar_control{ - id = "aftport"; - name = "Aft Port Solar Control" - }, /obj/structure/cable{ d2 = 4; icon_state = "0-4" }, /obj/structure/cable, +/obj/machinery/power/solar_control{ + dir = 1; + id = "aftport"; + name = "Aft Port Solar Control" + }, /turf/simulated/floor/plating, /area/maintenance/portsolar) "cdD" = ( @@ -50697,16 +50034,6 @@ /area/maintenance/fpmaint2{ name = "Port Maintenance" }) -"cdG" = ( -/obj/machinery/light{ - dir = 1; - on = 1 - }, -/obj/structure/reagent_dispensers/watertank, -/turf/simulated/floor/plasteel, -/area/hallway/secondary/entry{ - name = "Arrivals" - }) "cdH" = ( /obj/structure/closet, /obj/item/flashlight, @@ -50777,16 +50104,6 @@ icon_state = "vault" }, /area/atmos) -"cdR" = ( -/obj/structure/grille, -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'KEEP CLEAR OF DOCKING AREA'."; - name = "KEEP CLEAR: DOCKING AREA"; - pixel_y = 32 - }, -/obj/effect/decal/warning_stripes/south, -/turf/simulated/floor/engine/vacuum, -/area/space/nearstation) "cdS" = ( /obj/machinery/atmospherics/binary/pump{ dir = 8; @@ -50818,17 +50135,6 @@ /area/medical/medbay2{ name = "Medbay Storage" }) -"cdV" = ( -/obj/machinery/door/poddoor/multi_tile/four_tile_hor{ - id_tag = "escapepodbay" - }, -/obj/structure/spacepoddoor{ - dir = 4 - }, -/turf/simulated/floor/engine, -/area/hallway/secondary/entry{ - name = "Arrivals" - }) "cdW" = ( /turf/simulated/floor/plasteel{ dir = 8; @@ -51123,14 +50429,6 @@ icon_state = "whiteblue" }, /area/medical/paramedic) -"ceM" = ( -/obj/structure/spacepoddoor{ - dir = 4 - }, -/turf/simulated/floor/engine, -/area/hallway/secondary/entry{ - name = "Arrivals" - }) "ceN" = ( /obj/structure/cable/yellow{ d1 = 1; @@ -51211,11 +50509,11 @@ /turf/simulated/floor/mech_bay_recharge_floor, /area/maintenance/aft) "ceV" = ( -/obj/machinery/computer/mech_bay_power_console, /obj/structure/cable/yellow{ d2 = 2; icon_state = "0-2" }, +/obj/machinery/computer/mech_bay_power_console, /turf/simulated/floor/bluegrid, /area/maintenance/aft) "ceW" = ( @@ -51542,7 +50840,7 @@ name = "Station Intercom (Medbay)"; pixel_y = 30 }, -/obj/structure/closet/wardrobe/medical_white, +/obj/machinery/vending/medidrobe, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "whiteblue" @@ -51656,7 +50954,6 @@ icon_state = "1-2" }, /obj/machinery/atmospherics/pipe/simple/visible/yellow, -/obj/machinery/atmospherics/pipe/simple/visible/yellow, /turf/simulated/floor/plating, /area/maintenance/incinerator) "cfM" = ( @@ -51688,6 +50985,7 @@ /area/atmos) "cfQ" = ( /obj/machinery/atmospherics/pipe/simple/visible/cyan, +/obj/machinery/meter, /turf/simulated/floor/plasteel, /area/atmos) "cfR" = ( @@ -52468,6 +51766,9 @@ /obj/effect/landmark{ name = "lightsout" }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -52485,6 +51786,12 @@ icon_state = "1-2" }, /obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -52643,7 +51950,9 @@ dir = 8; pixel_x = 24 }, -/obj/machinery/computer/crew, +/obj/machinery/computer/crew{ + dir = 8 + }, /turf/simulated/floor/plasteel{ dir = 6; icon_state = "whiteblue" @@ -52699,6 +52008,8 @@ icon_state = "1-2" }, /obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -52985,16 +52296,17 @@ /area/atmos) "ciN" = ( /obj/structure/window/reinforced, +/obj/machinery/atmospherics/pipe/simple/visible/green{ + dir = 4 + }, /obj/machinery/computer/general_air_control/large_tank_control{ + dir = 1; frequency = 1441; input_tag = "n2_in"; name = "Nitrogen Supply Control"; output_tag = "n2_out"; sensors = list("n2_sensor" = "Tank") }, -/obj/machinery/atmospherics/pipe/simple/visible/green{ - dir = 4 - }, /turf/simulated/floor/plasteel{ icon_state = "redfull" }, @@ -53040,16 +52352,17 @@ /area/atmos) "ciR" = ( /obj/structure/window/reinforced, +/obj/machinery/atmospherics/pipe/simple/visible/green{ + dir = 4 + }, /obj/machinery/computer/general_air_control/large_tank_control{ + dir = 1; frequency = 1441; input_tag = "o2_in"; name = "Oxygen Supply Control"; output_tag = "o2_out"; sensors = list("o2_sensor" = "Tank") }, -/obj/machinery/atmospherics/pipe/simple/visible/green{ - dir = 4 - }, /turf/simulated/floor/plasteel{ icon_state = "bluefull" }, @@ -53101,7 +52414,11 @@ /area/atmos) "ciV" = ( /obj/structure/window/reinforced, +/obj/machinery/atmospherics/pipe/simple/visible/green{ + dir = 4 + }, /obj/machinery/computer/general_air_control/large_tank_control{ + dir = 1; frequency = 1443; input_tag = "air_in"; name = "Mixed Air Supply Control"; @@ -53109,9 +52426,6 @@ pressure_setting = 2000; sensors = list("air_sensor" = "Tank") }, -/obj/machinery/atmospherics/pipe/simple/visible/green{ - dir = 4 - }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "barber" @@ -53384,6 +52698,8 @@ icon_state = "1-2" }, /obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel{ icon_state = "whiteblue" }, @@ -53693,8 +53009,9 @@ }, /area/atmos) "ckm" = ( -/obj/machinery/atmospherics/pipe/simple/visible/cyan{ - dir = 4 +/obj/machinery/atmospherics/binary/valve/digital/open{ + dir = 8; + name = "Mixed Air Outlet Valve" }, /turf/simulated/floor/plasteel{ icon_state = "dark" @@ -54191,10 +53508,12 @@ }) "cll" = ( /obj/item/wrench, -/obj/item/clothing/suit/apron, -/obj/item/clothing/accessory/armband/hydro, /obj/structure/table/glass, /obj/effect/decal/warning_stripes/northwest, +/obj/item/book/manual/sop_service{ + pixel_x = 2; + pixel_y = 5 + }, /turf/simulated/floor/plasteel, /area/hydroponics) "clm" = ( @@ -54952,11 +54271,11 @@ icon_state = "map-left-MS"; pixel_y = 32 }, +/obj/item/storage/box/donkpockets, +/obj/structure/table/glass, /obj/machinery/computer/security/telescreen/entertainment{ pixel_x = -32 }, -/obj/item/storage/box/donkpockets, -/obj/structure/table/glass, /turf/simulated/floor/plasteel{ dir = 5; icon_state = "cafeteria" @@ -55237,6 +54556,7 @@ pixel_x = -31 }, /obj/machinery/computer/turbine_computer{ + dir = 1; id = "incineratorturbine" }, /turf/simulated/floor/plating, @@ -55736,10 +55056,10 @@ /obj/item/multitool{ pixel_x = 3 }, +/obj/effect/decal/warning_stripes/east, /obj/machinery/computer/guestpass{ pixel_y = 30 }, -/obj/effect/decal/warning_stripes/east, /turf/simulated/floor/plasteel, /area/toxins/lab) "coI" = ( @@ -56135,6 +55455,8 @@ icon_state = "1-2" }, /obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel{ icon_state = "whitebluefull" }, @@ -56180,7 +55502,6 @@ dir = 4; network = list("SS13","Medbay") }, -/obj/structure/filingcabinet/filingcabinet, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "whiteblue" @@ -56249,10 +55570,10 @@ /area/medical/reception) "cpN" = ( /obj/structure/table, -/obj/machinery/computer/guestpass, /obj/machinery/camera{ c_tag = "Medbay Surgery 1 North" }, +/obj/machinery/computer/guestpass, /turf/simulated/floor/plasteel{ dir = 9; icon_state = "whiteblue" @@ -56260,7 +55581,9 @@ /area/medical/reception) "cpO" = ( /obj/structure/table, -/obj/machinery/computer/crew, +/obj/machinery/computer/crew{ + dir = 8 + }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "whiteblue" @@ -56568,12 +55891,14 @@ }, /area/medical/research) "cqv" = ( -/obj/machinery/computer/rdconsole/core, /obj/machinery/alarm{ dir = 4; pixel_x = -24 }, /obj/effect/decal/warning_stripes/south, +/obj/machinery/computer/rdconsole/core{ + dir = 4 + }, /turf/simulated/floor/plasteel, /area/toxins/lab) "cqw" = ( @@ -56884,6 +56209,8 @@ icon_state = "1-2" }, /obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "whiteblue" @@ -57829,13 +57156,9 @@ d2 = 8; icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, /obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -58101,7 +57424,9 @@ /turf/simulated/floor/plating/airless, /area/maintenance/incinerator) "ctw" = ( -/obj/machinery/computer/arcade/orion_trail, +/obj/machinery/computer/arcade/orion_trail{ + dir = 4 + }, /turf/simulated/floor/carpet/arcade, /area/crew_quarters/fitness{ name = "\improper Arcade" @@ -58266,12 +57591,14 @@ }, /area/medical/surgery1) "ctW" = ( -/obj/machinery/computer/operating, /obj/structure/cable/yellow{ d1 = 1; d2 = 2; icon_state = "1-2" }, +/obj/machinery/computer/operating{ + dir = 8 + }, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -58332,19 +57659,18 @@ }, /area/medical/exam_room) "cui" = ( -/obj/structure/closet/wardrobe/chemistry_white, -/obj/item/storage/backpack/satchel_chem, /obj/effect/decal/warning_stripes/south, /obj/structure/disaster_counter/chemistry{ pixel_y = 32 }, +/obj/machinery/vending/chemdrobe, /turf/simulated/floor/plasteel{ icon_state = "white" }, /area/medical/chemistry) "cuj" = ( -/obj/machinery/computer/rdconsole/experiment, /obj/effect/decal/warning_stripes/south, +/obj/machinery/computer/rdconsole/experiment, /turf/simulated/floor/plasteel, /area/toxins/explab) "cuk" = ( @@ -58667,7 +57993,9 @@ /area/medical/reception) "cuU" = ( /obj/structure/table, -/obj/machinery/computer/crew, +/obj/machinery/computer/crew{ + dir = 1 + }, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "whiteblue" @@ -58773,6 +58101,7 @@ maxcharge = 15000 }, /obj/effect/decal/warning_stripes/south, +/obj/machinery/recharger, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "whitepurple" @@ -59165,7 +58494,9 @@ /area/medical/reception) "cvM" = ( /obj/structure/table, -/obj/machinery/computer/crew, +/obj/machinery/computer/crew{ + dir = 4 + }, /turf/simulated/floor/plasteel{ icon_state = "whiteblue" }, @@ -60231,6 +59562,10 @@ name = "privacy shutters"; opacity = 0 }, +/obj/structure/cable/yellow{ + d2 = 2; + icon_state = "0-2" + }, /turf/simulated/floor/plating, /area/medical/cmo) "cyt" = ( @@ -60483,7 +59818,6 @@ }, /area/medical/research) "czc" = ( -/obj/machinery/computer/aifixer, /obj/machinery/requests_console{ announcementConsole = 1; department = "Research Director's Desk"; @@ -60495,6 +59829,9 @@ /obj/structure/window/reinforced{ dir = 4 }, +/obj/machinery/computer/aifixer{ + dir = 8 + }, /turf/simulated/floor/plasteel{ dir = 5; icon_state = "cafeteria" @@ -60540,6 +59877,16 @@ /obj/machinery/camera{ c_tag = "Medbay Surgery 1 North" }, +/obj/structure/cable/yellow{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/cable/yellow{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "barber" @@ -60572,6 +59919,11 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/structure/cable/yellow{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -60737,6 +60089,11 @@ pixel_y = 2 }, /obj/item/clothing/accessory/stethoscope, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "barber" @@ -60763,6 +60120,11 @@ /obj/item/folder/white, /obj/item/stamp/cmo, /obj/item/clothing/glasses/hud/health, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "barber" @@ -60941,10 +60303,12 @@ }, /area/crew_quarters/hor) "czT" = ( -/obj/machinery/computer/robotics, /obj/structure/window/reinforced{ dir = 4 }, +/obj/machinery/computer/robotics{ + dir = 8 + }, /turf/simulated/floor/plasteel{ dir = 5; icon_state = "cafeteria" @@ -61340,7 +60704,6 @@ /turf/simulated/floor/plating, /area/toxins/test_area) "cAM" = ( -/obj/machinery/computer/area_atmos, /obj/machinery/light/small{ dir = 1 }, @@ -61348,6 +60711,7 @@ pixel_y = 32 }, /obj/effect/decal/warning_stripes/northeast, +/obj/machinery/computer/area_atmos, /turf/simulated/floor/plasteel, /area/toxins/storage) "cAN" = ( @@ -61357,10 +60721,12 @@ }, /area/crew_quarters/hor) "cAO" = ( -/obj/machinery/computer/mecha, /obj/structure/window/reinforced{ dir = 4 }, +/obj/machinery/computer/mecha{ + dir = 8 + }, /turf/simulated/floor/plasteel{ dir = 5; icon_state = "cafeteria" @@ -61507,13 +60873,13 @@ /turf/space, /area/solar/port) "cBf" = ( +/obj/structure/table/reinforced, /obj/machinery/computer/security/telescreen{ desc = "Used for watching the RD's goons from the safety of his office."; name = "Research Monitor"; network = list("RD"); pixel_y = 2 }, -/obj/structure/table/reinforced, /turf/simulated/floor/plasteel{ dir = 5; icon_state = "cafeteria" @@ -61610,12 +60976,27 @@ name = "Chief Medical Officer's Office"; req_access_txt = "40" }, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/cable/yellow{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "barber" }, /area/medical/cmo) "cBs" = ( +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "barber" @@ -61625,6 +61006,11 @@ /obj/effect/landmark/start{ name = "Chief Medical Officer" }, +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "barber" @@ -61632,6 +61018,16 @@ /area/medical/cmo) "cBu" = ( /obj/machinery/hologram/holopad, +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "barber" @@ -61683,12 +61079,14 @@ }, /area/medical/genetics_cloning) "cBz" = ( -/obj/machinery/computer/scan_consolenew, /obj/machinery/camera{ c_tag = "Genetics Lab"; dir = 4; network = list("SS13","Medbay") }, +/obj/machinery/computer/scan_consolenew{ + dir = 4 + }, /turf/simulated/floor/plasteel{ icon_state = "whitebluefull" }, @@ -61729,7 +61127,9 @@ }, /area/medical/genetics) "cBD" = ( -/obj/machinery/computer/scan_consolenew, +/obj/machinery/computer/scan_consolenew{ + dir = 8 + }, /turf/simulated/floor/plasteel{ icon_state = "whitebluefull" }, @@ -62615,9 +62015,8 @@ /obj/machinery/light_switch{ pixel_y = 28 }, -/obj/structure/rack, /obj/effect/decal/warning_stripes/south, -/obj/item/painter, +/obj/machinery/vending/atmosdrobe, /turf/simulated/floor/plasteel, /area/atmos) "cDe" = ( @@ -62694,10 +62093,6 @@ /obj/effect/decal/warning_stripes/north, /turf/simulated/floor/plasteel, /area/medical/cryo) -"cDn" = ( -/obj/effect/decal/warning_stripes/south, -/turf/simulated/floor/engine/vacuum, -/area/space/nearstation) "cDo" = ( /obj/machinery/atmospherics/pipe/simple/hidden{ dir = 5 @@ -62944,23 +62339,23 @@ /area/toxins/storage) "cDO" = ( /obj/structure/bed/dogbed, -/mob/living/simple_animal/pet/cat/Runtime, /obj/machinery/light_switch{ pixel_y = -25 }, +/mob/living/simple_animal/pet/cat/Runtime, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "barber" }, /area/medical/cmo) "cDP" = ( -/obj/machinery/computer/security/telescreen/entertainment{ - pixel_y = -32 - }, /obj/machinery/disposal, /obj/structure/disposalpipe/trunk{ dir = 1 }, +/obj/machinery/computer/security/telescreen/entertainment{ + pixel_y = -32 + }, /turf/simulated/floor/plasteel{ dir = 5; icon_state = "cafeteria" @@ -63397,10 +62792,12 @@ }, /area/medical/genetics_cloning) "cEW" = ( -/obj/machinery/computer/cloning, /obj/machinery/light{ dir = 4 }, +/obj/machinery/computer/cloning{ + dir = 8 + }, /turf/simulated/floor/plasteel{ dir = 5; icon_state = "whiteblue" @@ -63590,11 +62987,11 @@ /turf/simulated/floor/mech_bay_recharge_floor, /area/assembly/chargebay) "cFo" = ( -/obj/machinery/computer/mech_bay_power_console, /obj/item/radio/intercom{ name = "Station Intercom (General)"; pixel_y = 20 }, +/obj/machinery/computer/mech_bay_power_console, /turf/simulated/floor/bluegrid{ icon_state = "gcircuit" }, @@ -63683,9 +63080,8 @@ name = "\improper Toxins Lab" }) "cFD" = ( -/obj/machinery/atmospherics/trinary/filter{ - dir = 8; - req_access = "0" +/obj/machinery/atmospherics/trinary/mixer{ + dir = 8 }, /turf/simulated/floor/plasteel{ icon_state = "white" @@ -64118,11 +63514,11 @@ name = "\improper Toxins Lab" }) "cGz" = ( -/obj/structure/closet/secure_closet/scientist, /obj/structure/window/reinforced{ dir = 4 }, /obj/effect/decal/warning_stripes/south, +/obj/machinery/vending/scidrobe, /turf/simulated/floor/plasteel, /area/toxins/mixing{ name = "\improper Toxins Lab" @@ -64314,6 +63710,7 @@ pixel_y = 24 }, /obj/effect/decal/warning_stripes/south, +/obj/machinery/portable_atmospherics/canister, /turf/simulated/floor/plasteel, /area/toxins/mixing{ name = "\improper Toxins Lab" @@ -64338,7 +63735,6 @@ /obj/structure/window/reinforced{ dir = 4 }, -/obj/machinery/portable_atmospherics/canister, /obj/effect/decal/warning_stripes/south, /turf/simulated/floor/plasteel, /area/toxins/mixing{ @@ -65127,11 +64523,11 @@ }, /area/medical/morgue) "cIp" = ( +/obj/item/reagent_containers/spray/cleaner, +/obj/structure/table/glass, /obj/machinery/computer/security/telescreen/entertainment{ pixel_y = -30 }, -/obj/item/reagent_containers/spray/cleaner, -/obj/structure/table/glass, /turf/simulated/floor/plasteel{ dir = 5; icon_state = "cafeteria" @@ -65717,6 +65113,7 @@ /obj/structure/chair{ dir = 4 }, +/obj/effect/decal/warning_stripes/northeast, /obj/machinery/computer/security/telescreen{ desc = "Used for watching the test chamber."; dir = 8; @@ -65725,7 +65122,6 @@ network = list("Toxins"); pixel_x = 30 }, -/obj/effect/decal/warning_stripes/northeast, /turf/simulated/floor/plasteel, /area/toxins/mixing{ name = "\improper Toxins Lab" @@ -66044,7 +65440,7 @@ }, /area/medical/genetics_cloning) "cKo" = ( -/obj/structure/closet/wardrobe/black, +/obj/machinery/vending/genedrobe, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -66139,6 +65535,7 @@ pixel_x = 24; pixel_y = -24 }, +/obj/effect/decal/warning_stripes/southeast, /obj/machinery/computer/security/telescreen{ desc = "Used for watching the test chamber."; dir = 8; @@ -66147,7 +65544,6 @@ network = list("Toxins"); pixel_x = 30 }, -/obj/effect/decal/warning_stripes/southeast, /turf/simulated/floor/plasteel, /area/toxins/mixing{ name = "\improper Toxins Lab" @@ -66188,12 +65584,14 @@ /turf/simulated/floor/plating, /area/maintenance/aft) "cKD" = ( -/obj/machinery/computer/operating, /obj/structure/cable/yellow{ d1 = 1; d2 = 2; icon_state = "1-2" }, +/obj/machinery/computer/operating{ + dir = 8 + }, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -66828,16 +66226,16 @@ }) "cLS" = ( /obj/effect/spawner/window/reinforced, -/obj/structure/cable/yellow{ - d2 = 4; - icon_state = "0-4" - }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/structure/cable/yellow{ + d2 = 2; + icon_state = "0-2" + }, /turf/simulated/floor/plating, /area/hallway/secondary/exit{ name = "\improper Departure Lounge" @@ -67421,6 +66819,16 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/cable/yellow{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "barber" @@ -67436,6 +66844,11 @@ dir = 4; icon_state = "pipe-c" }, +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "barber" @@ -67874,7 +67287,6 @@ }, /area/maintenance/aft) "cNQ" = ( -/obj/machinery/computer/rdconsole/robotics, /obj/machinery/requests_console{ department = "Robotics"; departmentType = 2; @@ -67882,6 +67294,9 @@ pixel_x = -31 }, /obj/effect/decal/warning_stripes/yellow/hollow, +/obj/machinery/computer/rdconsole/robotics{ + dir = 4 + }, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -67987,8 +67402,11 @@ pixel_y = -4 }, /obj/effect/decal/warning_stripes/yellow, -/obj/item/storage/firstaid/machine, -/obj/item/storage/firstaid/machine, +/obj/item/clothing/glasses/hud/diagnostic{ + pixel_x = 2; + pixel_y = 5 + }, +/obj/item/clothing/glasses/hud/diagnostic, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -68337,12 +67755,11 @@ }, /area/medical/virology) "cOD" = ( -/obj/structure/closet/wardrobe/virology_white, -/obj/item/storage/backpack/satchel_vir, /obj/structure/disposalpipe/segment{ dir = 1; icon_state = "pipe-c" }, +/obj/machinery/vending/virodrobe, /turf/simulated/floor/plasteel{ icon_state = "vault" }, @@ -68487,10 +67904,6 @@ /obj/item/scalpel{ pixel_y = 12 }, -/obj/structure/window/reinforced{ - dir = 1; - pixel_y = 1 - }, /obj/item/razor{ pixel_y = 5 }, @@ -69007,6 +68420,7 @@ /area/assembly/robotics) "cPS" = ( /obj/machinery/computer/operating{ + dir = 1; name = "Robotics Operating Computer" }, /turf/simulated/floor/plasteel{ @@ -69027,13 +68441,11 @@ /turf/space, /area/space/nearstation) "cPV" = ( -/obj/structure/closet/wardrobe/robotics_black{ - pixel_x = 2 - }, /obj/structure/window/reinforced{ dir = 8 }, /obj/effect/decal/warning_stripes/yellow, +/obj/machinery/vending/robodrobe, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -69077,7 +68489,9 @@ name = "Station Intercom (General)"; pixel_y = -28 }, -/obj/machinery/computer/rdservercontrol, +/obj/machinery/computer/rdservercontrol{ + dir = 1 + }, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -69344,6 +68758,7 @@ pixel_x = -24 }, /obj/effect/decal/warning_stripes/east, +/obj/structure/cable/yellow, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -69633,11 +69048,8 @@ /turf/simulated/wall, /area/chapel/office) "cRi" = ( -/obj/machinery/door/airlock/centcom{ - icon = 'icons/obj/doors/airlocks/station/maintenance.dmi'; +/obj/machinery/door/airlock/maintenance{ name = "Crematorium Maintenance"; - opacity = 1; - overlays_file = 'icons/obj/doors/airlocks/station/overlays.dmi'; req_access_txt = "27" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -69645,11 +69057,8 @@ /turf/simulated/floor/plating, /area/maintenance/aft) "cRj" = ( -/obj/machinery/door/airlock/centcom{ - icon = 'icons/obj/doors/airlocks/station/maintenance.dmi'; +/obj/machinery/door/airlock/maintenance{ name = "Chapel Office Maintenance"; - opacity = 1; - overlays_file = 'icons/obj/doors/airlocks/station/overlays.dmi'; req_access_txt = "27" }, /obj/structure/cable/yellow{ @@ -69790,16 +69199,16 @@ }, /obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, /obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, -/turf/simulated/floor/plasteel, -/area/hallway/secondary/exit{ - name = "\improper Departure Lounge" - }) -"cRB" = ( /obj/structure/cable/yellow{ d1 = 1; d2 = 4; icon_state = "1-4" }, +/turf/simulated/floor/plasteel, +/area/hallway/secondary/exit{ + name = "\improper Departure Lounge" + }) +"cRB" = ( /obj/structure/cable/yellow{ d1 = 1; d2 = 2; @@ -69951,11 +69360,6 @@ }, /area/medical/medbay3) "cRO" = ( -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, /obj/machinery/firealarm{ dir = 4; pixel_x = 24 @@ -70136,16 +69540,10 @@ }, /area/chapel/office) "cSh" = ( -/obj/item/spellbook/oneuse/smoke{ - name = "mysterious old book of " - }, /obj/item/reagent_containers/food/drinks/bottle/holywater{ pixel_x = -2; pixel_y = 2 }, -/obj/item/nullrod{ - pixel_x = 4 - }, /obj/item/organ/internal/heart, /obj/structure/closet/secure_closet/chaplain, /turf/simulated/floor/plasteel{ @@ -70518,8 +69916,9 @@ /obj/effect/spawner/window/reinforced, /obj/structure/cable/yellow, /obj/structure/cable/yellow{ + d1 = 1; d2 = 4; - icon_state = "0-4" + icon_state = "1-4" }, /turf/simulated/floor/plating, /area/hallway/secondary/exit{ @@ -70540,11 +69939,6 @@ }, /area/medical/research) "cSX" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, /obj/effect/decal/warning_stripes/east, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -70552,6 +69946,11 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, /turf/simulated/floor/plasteel, /area/hallway/secondary/exit{ name = "\improper Departure Lounge" @@ -70653,11 +70052,11 @@ codes_txt = "patrol;next_patrol=10-Aft-To-Central"; location = "9.4-Escape-4" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 }, /turf/simulated/floor/plasteel, /area/hallway/secondary/exit{ @@ -70943,9 +70342,8 @@ /area/chapel/main) "cTM" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/centcom{ - name = "Chapel"; - opacity = 1 +/obj/machinery/door/airlock/public/glass{ + name = "Chapel" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -70953,9 +70351,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/turf/simulated/floor/plasteel{ - icon_state = "dark" - }, +/turf/simulated/floor/carpet, /area/chapel/main) "cTN" = ( /obj/machinery/atmospherics/unary/portables_connector{ @@ -70977,8 +70373,8 @@ name = "\improper Departure Lounge" }) "cTQ" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 }, /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 4 @@ -71013,18 +70409,15 @@ name = "\improper Departure Lounge" }) "cTT" = ( -/obj/machinery/computer/secure_data, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/machinery/computer/secure_data{ + dir = 1 + }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "red" @@ -71192,9 +70585,8 @@ }, /area/chapel/office) "cUi" = ( -/obj/machinery/door/airlock/centcom{ +/obj/machinery/door/airlock/maintenance{ name = "Crematorium"; - opacity = 1; req_access_txt = "27" }, /turf/simulated/floor/plasteel{ @@ -71234,9 +70626,7 @@ "cUn" = ( /obj/structure/grille, /obj/structure/window/reinforced/tinted{ - dir = 5; - max_integrity = 120; - reinf = 0 + dir = 5 }, /turf/simulated/floor/plasteel{ icon_state = "dark" @@ -71306,13 +70696,10 @@ /area/chapel/main) "cUt" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/centcom{ - name = "Chapel"; - opacity = 1 - }, -/turf/simulated/floor/plasteel{ - icon_state = "dark" +/obj/machinery/door/airlock/public/glass{ + name = "Chapel" }, +/turf/simulated/floor/carpet, /area/chapel/main) "cUu" = ( /obj/effect/decal/warning_stripes/northeastcorner, @@ -71381,6 +70768,11 @@ d2 = 8; icon_state = "4-8" }, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, /turf/simulated/floor/plasteel{ icon_state = "redfull" }, @@ -71388,11 +70780,6 @@ name = "\improper Departure Lounge" }) "cUD" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, /obj/structure/cable/yellow{ d1 = 4; d2 = 8; @@ -71876,12 +71263,12 @@ /obj/machinery/light{ dir = 1 }, -/obj/machinery/computer/security/telescreen/entertainment{ - pixel_y = 29 - }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/machinery/computer/security/telescreen/entertainment{ + pixel_y = 29 + }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "whitegreen" @@ -71953,7 +71340,9 @@ name = "\improper Departure Lounge" }) "cWc" = ( -/obj/machinery/computer/mech_bay_power_console, +/obj/machinery/computer/mech_bay_power_console{ + dir = 1 + }, /turf/simulated/floor/bluegrid, /area/assembly/chargebay) "cWd" = ( @@ -72117,9 +71506,9 @@ /area/chapel/main) "cWt" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/centcom{ - name = "Funeral Parlour"; - opacity = 1 +/obj/machinery/door/airlock/maintenance{ + name = "Chapel Office"; + req_access_txt = "27" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -73626,8 +73015,10 @@ name = "\improper Secure Lab" }) "cZL" = ( -/obj/machinery/computer/camera_advanced/xenobio, /obj/effect/decal/warning_stripes/southwestcorner, +/obj/machinery/computer/camera_advanced/xenobio{ + dir = 1 + }, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -74250,20 +73641,15 @@ /turf/simulated/wall, /area/medical/surgeryobs) "dbv" = ( -/obj/structure/sign/biohazard{ - pixel_x = -32 +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "whitegreen" + icon_state = "white" }, -/area/maintenance/aft) +/area/medical/medbay2{ + name = "Medbay Storage" + }) "dbw" = ( /obj/item/radio/intercom{ name = "Station Intercom (General)"; @@ -75411,21 +74797,6 @@ /area/toxins/xenobiology{ name = "\improper Secure Lab" }) -"deC" = ( -/obj/structure/table/reinforced, -/obj/item/paper_bin{ - pixel_x = -4; - pixel_y = 10 - }, -/obj/item/pen, -/obj/machinery/camera{ - c_tag = "Engineering Equipment East"; - dir = 8 - }, -/turf/simulated/floor/plasteel{ - icon_state = "dark" - }, -/area/security/podbay) "deD" = ( /obj/structure/sign/directions/evac, /obj/structure/sign/directions/medical{ @@ -75466,15 +74837,6 @@ }, /turf/simulated/wall, /area/maintenance/maintcentral) -"deG" = ( -/obj/structure/table/reinforced, -/obj/item/spacepod_key{ - id = 100000 - }, -/turf/simulated/floor/plasteel{ - icon_state = "dark" - }, -/area/security/podbay) "deH" = ( /obj/machinery/vending/shoedispenser, /turf/simulated/floor/plating, @@ -75556,17 +74918,6 @@ d2 = 2; icon_state = "1-2" }, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, /turf/simulated/floor/plasteel{ icon_state = "redfull" }, @@ -75607,25 +74958,6 @@ icon_state = "chapel" }, /area/chapel/main) -"deW" = ( -/obj/structure/rack{ - dir = 1 - }, -/obj/item/radio{ - pixel_y = 6 - }, -/obj/item/storage/toolbox/mechanical{ - pixel_x = -2; - pixel_y = -1 - }, -/obj/item/storage/toolbox/electrical, -/obj/item/storage/belt/utility, -/obj/item/extinguisher, -/turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "vault" - }, -/area/engine/mechanic_workshop) "deX" = ( /obj/structure/chair/stool, /obj/structure/cable/yellow{ @@ -75650,57 +74982,11 @@ icon_state = "chapel" }, /area/chapel/main) -"dfa" = ( -/obj/machinery/computer/rdconsole/mechanics, -/turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "vault" - }, -/area/engine/mechanic_workshop) -"dfg" = ( -/turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "vault" - }, -/area/engine/mechanic_workshop) -"dfh" = ( -/obj/structure/chair/office/light{ - dir = 1; - pixel_y = 3 - }, -/turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "vault" - }, -/area/engine/mechanic_workshop) "dfi" = ( /obj/effect/decal/warning_stripes/northeastcorner, /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/aft) -"dfj" = ( -/obj/effect/decal/warning_stripes/west, -/obj/effect/decal/warning_stripes/north, -/obj/machinery/door/poddoor{ - density = 0; - icon_state = "open"; - id_tag = "mechpod"; - name = "Mechanic's Workshop Inner Door"; - opacity = 0 - }, -/turf/simulated/floor/engine, -/area/engine/mechanic_workshop) -"dfk" = ( -/obj/effect/decal/warning_stripes/north, -/turf/simulated/floor/engine, -/area/engine/mechanic_workshop) -"dfl" = ( -/obj/structure/spacepoddoor, -/turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "vault" - }, -/area/engine/mechanic_workshop) "dfn" = ( /obj/structure/cable/yellow{ d1 = 1; @@ -75730,39 +75016,15 @@ icon_state = "dark" }, /area/chapel/main) -"dfq" = ( -/obj/effect/landmark/start{ - name = "Mechanic" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "vault" - }, -/area/engine/mechanic_workshop) "dfs" = ( -/obj/machinery/door/airlock/centcom{ +/obj/machinery/door/airlock/maintenance{ name = "Chapel Office"; - opacity = 1; req_access_txt = "27" }, /turf/simulated/floor/plasteel{ icon_state = "dark" }, /area/chapel/main) -"dfu" = ( -/obj/effect/decal/warning_stripes/west, -/obj/machinery/door/poddoor{ - density = 0; - icon_state = "open"; - id_tag = "mechpod"; - name = "Mechanic's Workshop Inner Door"; - opacity = 0 - }, -/turf/simulated/floor/engine, -/area/engine/mechanic_workshop) "dfv" = ( /obj/effect/spawner/window/reinforced, /obj/machinery/door/poddoor{ @@ -75780,15 +75042,6 @@ icon_state = "chapel" }, /area/chapel/main) -"dfx" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "vault" - }, -/area/engine/mechanic_workshop) "dfz" = ( /obj/structure/cable/yellow{ d1 = 2; @@ -75805,19 +75058,6 @@ }, /turf/simulated/floor/plasteel, /area/engine/break_room) -"dfA" = ( -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/airlock/engineering/glass{ - name = "Mechanic Workshop"; - req_access_txt = "70" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plasteel, -/area/engine/mechanic_workshop) "dfB" = ( /obj/structure/cable/yellow{ d1 = 1; @@ -75825,12 +75065,6 @@ icon_state = "1-8" }, /obj/machinery/hologram/holopad, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 4 }, @@ -75883,46 +75117,6 @@ /area/toxins/xenobiology{ name = "\improper Secure Lab" }) -"dfI" = ( -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/vending/cola, -/turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "vault" - }, -/area/engine/mechanic_workshop) -"dfJ" = ( -/obj/effect/decal/warning_stripes/west, -/obj/machinery/firealarm{ - dir = 1; - pixel_y = -24 - }, -/obj/machinery/door/poddoor{ - density = 0; - icon_state = "open"; - id_tag = "mechpod"; - name = "Mechanic's Workshop Inner Door"; - opacity = 0 - }, -/turf/simulated/floor/engine, -/area/engine/mechanic_workshop) -"dfK" = ( -/obj/machinery/alarm{ - dir = 1; - pixel_y = -24 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "vault" - }, -/area/engine/mechanic_workshop) "dfO" = ( /obj/structure/sign/lifestar, /turf/simulated/wall, @@ -76051,11 +75245,6 @@ }, /area/medical/virology) "dfZ" = ( -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -76100,23 +75289,6 @@ icon_state = "dark" }, /area/chapel/main) -"dgh" = ( -/obj/structure/table, -/obj/item/storage/toolbox/mechanical, -/obj/item/crowbar, -/turf/simulated/floor/plasteel, -/area/hallway/secondary/entry{ - name = "Arrivals" - }) -"dgi" = ( -/obj/machinery/light{ - dir = 1; - on = 1 - }, -/turf/simulated/floor/plasteel, -/area/hallway/secondary/entry{ - name = "Arrivals" - }) "dgj" = ( /obj/structure/cable/yellow{ d1 = 1; @@ -76124,65 +75296,16 @@ icon_state = "1-2" }, /turf/simulated/floor/plasteel, -/area/hallway/secondary/entry{ - name = "Arrivals" - }) -"dgk" = ( -/obj/structure/rack, -/obj/item/clothing/mask/gas, -/obj/item/clothing/mask/gas, -/turf/simulated/floor/plasteel, -/area/hallway/secondary/entry{ - name = "Arrivals" - }) -"dgm" = ( -/obj/effect/decal/warning_stripes/yellow/hollow, -/obj/structure/closet/emcloset, -/obj/item/tank/internals/emergency_oxygen, -/obj/item/clothing/mask/breath, -/turf/simulated/floor/plasteel, -/area/hallway/secondary/entry{ - name = "Arrivals" - }) -"dgn" = ( -/obj/structure/table, -/obj/item/flashlight, -/obj/item/storage/belt/utility, -/obj/item/stock_parts/cell, -/turf/simulated/floor/plasteel, -/area/hallway/secondary/entry{ - name = "Arrivals" - }) -"dgo" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plasteel, -/area/hallway/secondary/entry{ - name = "Arrivals" - }) -"dgq" = ( -/obj/effect/decal/warning_stripes/yellow/hollow, -/obj/machinery/portable_atmospherics/canister/oxygen, -/turf/simulated/floor/plasteel, /area/hallway/secondary/entry{ name = "Arrivals" }) "dgr" = ( -/turf/simulated/wall/r_wall, -/area/hallway/secondary/entry{ - name = "Arrivals" - }) -"dgt" = ( -/obj/effect/decal/warning_stripes/south, -/obj/machinery/power/apc{ - dir = 8; - name = "Escape Podbay APC"; - pixel_x = -25 +/obj/machinery/atmospherics/pipe/simple/visible/purple{ + dir = 4 }, -/obj/structure/cable/yellow, -/turf/simulated/floor/plasteel, -/area/hallway/secondary/entry{ - name = "Arrivals" - }) +/obj/effect/spawner/window/reinforced, +/turf/simulated/floor/plating, +/area/atmos) "dgu" = ( /obj/structure/cable/yellow{ d1 = 4; @@ -76200,54 +75323,21 @@ /area/maintenance/fpmaint2{ name = "Port Maintenance" }) -"dgv" = ( -/obj/effect/decal/warning_stripes/south, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/turf/simulated/floor/plasteel, -/area/hallway/secondary/entry{ - name = "Arrivals" - }) -"dgw" = ( -/obj/effect/decal/warning_stripes/south, -/obj/effect/decal/warning_stripes/east, -/turf/simulated/floor/plasteel, -/area/hallway/secondary/entry{ - name = "Arrivals" - }) "dgx" = ( /obj/effect/decal/warning_stripes/south, /turf/simulated/floor/plasteel, -/area/hallway/secondary/entry{ - name = "Arrivals" - }) -"dgy" = ( -/obj/structure/extinguisher_cabinet, -/turf/simulated/wall/r_wall, -/area/hallway/secondary/entry{ - name = "Arrivals" - }) -"dgz" = ( -/turf/simulated/floor/engine, -/area/hallway/secondary/entry{ - name = "Arrivals" - }) -"dgA" = ( -/obj/machinery/firealarm, -/turf/simulated/wall/r_wall, /area/hallway/secondary/entry{ name = "Arrivals" }) "dgB" = ( +/obj/structure/table/reinforced, +/obj/effect/decal/warning_stripes/south, /obj/machinery/computer/security/telescreen{ dir = 1; name = "Test Chamber Monitor"; network = list("Xeno"); pixel_y = 2 }, -/obj/structure/table/reinforced, -/obj/effect/decal/warning_stripes/south, /turf/simulated/floor/plasteel, /area/toxins/xenobiology{ name = "\improper Secure Lab" @@ -76257,18 +75347,6 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/aft) -"dgD" = ( -/obj/machinery/camera{ - c_tag = "Quartermaster's Office"; - dir = 8 - }, -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/floor/engine, -/area/hallway/secondary/entry{ - name = "Arrivals" - }) "dgE" = ( /obj/structure/cable/yellow{ d1 = 4; @@ -76316,36 +75394,14 @@ /obj/machinery/light/small, /turf/simulated/floor/plating, /area/maintenance/starboard) -"dgJ" = ( -/obj/machinery/light{ - dir = 8 - }, -/obj/machinery/alarm{ - dir = 4; - pixel_x = -24 - }, -/turf/simulated/floor/engine, -/area/hallway/secondary/entry{ - name = "Arrivals" - }) -"dgK" = ( -/obj/machinery/light, -/turf/simulated/floor/engine, -/area/engine/mechanic_workshop) -"dgL" = ( -/obj/machinery/light{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plasteel, -/area/engine/break_room) "dgO" = ( -/obj/machinery/light_switch, +/obj/structure/sign/pods, /turf/simulated/wall, -/area/engine/mechanic_workshop) +/area/engine/break_room) "dgW" = ( -/obj/machinery/computer/camera_advanced/xenobio, +/obj/machinery/computer/camera_advanced/xenobio{ + dir = 1 + }, /turf/simulated/floor/plasteel{ icon_state = "whitepurplecorner" }, @@ -76926,6 +75982,7 @@ dir = 4 }, /obj/effect/spawner/window/reinforced, +/obj/structure/cable/yellow, /turf/simulated/floor/plating, /area/medical/cmo) "ebA" = ( @@ -77133,15 +76190,20 @@ icon_state = "whitebluefull" }, /area/medical/reception) -"eNd" = ( +"eMs" = ( +/obj/effect/decal/warning_stripes/south, +/obj/effect/decal/warning_stripes/northwestcorner, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "vault" +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 }, -/area/engine/mechanic_workshop) +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/plasteel, +/area/engine/engineering) "ePy" = ( /obj/structure/chair/comfy/beige, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -77264,16 +76326,6 @@ /obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel, /area/security/brig) -"fhW" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/public/glass{ - name = "Pod Bay" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/plating, -/area/hallway/secondary/entry{ - name = "Arrivals" - }) "fla" = ( /obj/structure/chair/office/dark{ dir = 8 @@ -77361,12 +76413,21 @@ }, /area/medical/research) "fwO" = ( -/obj/machinery/door/airlock/external{ - id_tag = "specops_home"; - locked = 1 +/obj/item/twohanded/required/kirbyplants{ + level = 4.1 }, -/turf/simulated/floor/plating, -/area/hallway/secondary/entry) +/obj/effect/decal/warning_stripes/northwest, +/obj/structure/sign/securearea{ + desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; + icon_state = "space"; + layer = 4; + name = "EXTERNAL AIRLOCK"; + pixel_y = 32 + }, +/turf/simulated/floor/plasteel, +/area/hallway/secondary/entry{ + name = "Arrivals" + }) "fxB" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plasteel{ @@ -77532,12 +76593,12 @@ }, /area/hydroponics) "gbT" = ( -/obj/machinery/door/airlock/external{ - id_tag = "admin_home"; - locked = 1 +/obj/machinery/atmospherics/pipe/simple/visible/cyan{ + dir = 4 }, +/obj/effect/spawner/window/reinforced, /turf/simulated/floor/plating, -/area/hallway/secondary/entry) +/area/atmos) "gda" = ( /obj/structure/cable/yellow{ d1 = 1; @@ -78093,6 +77154,17 @@ /area/construction/Storage{ name = "Storage Wing" }) +"hDX" = ( +/obj/machinery/atmospherics/pipe/simple/visible/cyan, +/obj/machinery/atmospherics/binary/valve/digital{ + color = ""; + dir = 4; + name = "CO2 Outlet Valve" + }, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/atmos) "hEA" = ( /obj/machinery/camera/autoname{ dir = 4 @@ -78137,11 +77209,13 @@ dir = 4; pixel_x = 24 }, -/obj/machinery/computer/monitor, /obj/structure/cable/yellow{ d2 = 8; icon_state = "0-8" }, +/obj/machinery/computer/monitor{ + dir = 8 + }, /turf/simulated/floor/plasteel{ dir = 6; icon_state = "yellow" @@ -78153,6 +77227,17 @@ }, /turf/simulated/floor/plasteel, /area/security/armoury) +"hIZ" = ( +/obj/docking_port/stationary{ + dir = 8; + dwidth = 2; + height = 11; + id = "specops_home"; + name = "port bay 2"; + width = 5 + }, +/turf/space, +/area/space) "hKu" = ( /obj/machinery/atmospherics/unary/vent_pump/on, /turf/simulated/floor/plasteel{ @@ -78289,16 +77374,18 @@ /turf/simulated/floor/engine, /area/engine/engineering) "ibR" = ( -/obj/docking_port/stationary{ - dir = 8; - dwidth = 2; - height = 11; - id = "specops_home"; - name = "port bay 2"; - width = 5 +/obj/structure/chair, +/obj/effect/landmark/start{ + name = "Civilian" }, -/turf/space, -/area/space) +/obj/machinery/light{ + dir = 1 + }, +/obj/effect/decal/warning_stripes/north, +/turf/simulated/floor/plasteel, +/area/hallway/secondary/entry{ + name = "Arrivals" + }) "idx" = ( /obj/structure/cable/yellow{ d1 = 1; @@ -78546,15 +77633,6 @@ }, /turf/simulated/floor/plasteel, /area/engine/engineering) -"iMC" = ( -/obj/effect/decal/warning_stripes/west, -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor/plasteel, -/area/hallway/secondary/entry{ - name = "Arrivals" - }) "iNu" = ( /turf/simulated/floor/plasteel{ dir = 8; @@ -78644,10 +77722,6 @@ /obj/machinery/atmospherics/unary/vent_scrubber/on, /turf/simulated/floor/plasteel, /area/quartermaster/storage) -"iZY" = ( -/obj/structure/sign/pods, -/turf/simulated/wall, -/area/engine/mechanic_workshop) "jap" = ( /obj/structure/disposalpipe/segment, /turf/simulated/floor/plating, @@ -78728,6 +77802,18 @@ }, /turf/simulated/floor/wood, /area/library) +"juN" = ( +/obj/machinery/camera{ + c_tag = "Arrivals - Aft Arm - Far"; + dir = 1 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/turf/simulated/floor/plasteel, +/area/hallway/secondary/entry{ + name = "Arrivals" + }) "jwh" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 @@ -78770,8 +77856,7 @@ }, /area/hallway/primary/central) "jGE" = ( -/obj/effect/decal/warning_stripes/southeast, -/obj/effect/decal/warning_stripes/north, +/obj/effect/decal/warning_stripes/northwest, /turf/simulated/floor/plasteel, /area/hallway/secondary/entry) "jGU" = ( @@ -79013,8 +78098,8 @@ /turf/simulated/floor/bluegrid, /area/tcommsat/server) "kxf" = ( -/obj/effect/decal/warning_stripes/northwestcorner, /obj/effect/decal/warning_stripes/southeastcorner, +/obj/effect/decal/warning_stripes/north, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, @@ -79113,15 +78198,15 @@ /turf/space, /area/space/nearstation) "kKz" = ( -/obj/machinery/computer/cryopod{ - pixel_y = -25 - }, /obj/effect/landmark{ name = "JoinLateCryo" }, /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 1 }, +/obj/machinery/computer/cryopod{ + pixel_y = -25 + }, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -79264,6 +78349,10 @@ icon_state = "neutralcorner" }, /area/crew_quarters/locker) +"lfm" = ( +/obj/effect/decal/warning_stripes/northeast, +/turf/simulated/floor/plasteel, +/area/hallway/secondary/entry) "lfV" = ( /obj/structure/chair/stool/bar, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -79309,6 +78398,10 @@ }, /turf/simulated/floor/plasteel, /area/quartermaster/storage) +"lio" = ( +/obj/effect/decal/warning_stripes/southwest, +/turf/simulated/floor/plasteel, +/area/hallway/secondary/entry) "ljZ" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/wood, @@ -79337,6 +78430,15 @@ /obj/effect/decal/warning_stripes/southeast, /turf/simulated/floor/engine, /area/engine/engineering) +"lrA" = ( +/obj/structure/sign/biohazard{ + pixel_x = -32 + }, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "whitegreen" + }, +/area/maintenance/aft) "lwN" = ( /obj/effect/spawner/lootdrop{ loot = list(/obj/structure/grille,/obj/structure/grille,/obj/structure/grille,/obj/structure/grille,/obj/structure/grille,/obj/item/cigbutt,/obj/item/trash/cheesie,/obj/item/trash/candy,/obj/item/trash/chips,/obj/item/trash/pistachios,/obj/item/trash/plate,/obj/item/trash/popcorn,/obj/item/trash/raisins,/obj/item/trash/sosjerky,/obj/item/trash/syndi_cakes); @@ -79451,12 +78553,6 @@ /obj/effect/decal/warning_stripes/west, /turf/simulated/floor/engine, /area/engine/engineering) -"lPA" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/plasteel, -/area/hallway/secondary/entry{ - name = "Arrivals" - }) "lSh" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -79500,18 +78596,6 @@ /area/construction/hallway{ name = "\improper MiniSat Exterior" }) -"mcY" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/security/glass{ - name = "Security Pods"; - req_access_txt = "71" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plasteel{ - icon_state = "dark" - }, -/area/security/podbay) "mea" = ( /obj/machinery/door/airlock/external{ frequency = 1379; @@ -79616,6 +78700,17 @@ /area/construction/hallway{ name = "\improper MiniSat Exterior" }) +"moV" = ( +/obj/machinery/atmospherics/pipe/simple/visible/cyan, +/obj/machinery/atmospherics/binary/valve/digital{ + color = ""; + dir = 4; + name = "Plasma Outlet Valve" + }, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/atmos) "msg" = ( /obj/structure/rack, /obj/effect/spawner/lootdrop/maintenance, @@ -79845,10 +78940,12 @@ name = "\improper Departure Lounge" }) "neT" = ( -/obj/effect/decal/warning_stripes/southwest, /obj/effect/decal/warning_stripes/north, +/obj/machinery/atmospherics/unary/vent_pump/on, /turf/simulated/floor/plasteel, -/area/hallway/secondary/entry) +/area/hallway/secondary/entry{ + name = "Arrivals" + }) "nhK" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -79985,6 +79082,17 @@ }, /turf/simulated/floor/engine, /area/engine/engineering) +"nFC" = ( +/obj/machinery/atmospherics/pipe/simple/visible/cyan, +/obj/machinery/atmospherics/binary/valve/digital{ + color = ""; + dir = 4; + name = "N2O Outlet Valve" + }, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/atmos) "nHB" = ( /obj/machinery/conveyor{ dir = 4; @@ -80297,6 +79405,10 @@ icon_state = "neutralcorner" }, /area/hallway/primary/central) +"oZX" = ( +/obj/effect/decal/warning_stripes/southeast, +/turf/simulated/floor/plasteel, +/area/hallway/secondary/entry) "pad" = ( /obj/structure/cable/yellow{ d1 = 1; @@ -80333,6 +79445,18 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/supply, /turf/simulated/floor/plasteel, /area/crew_quarters/locker) +"pcN" = ( +/obj/effect/spawner/window/reinforced, +/obj/machinery/door/poddoor{ + density = 0; + icon_state = "open"; + id_tag = "cmoprivacy"; + name = "privacy shutters"; + opacity = 0 + }, +/obj/structure/cable/yellow, +/turf/simulated/floor/plating, +/area/medical/cmo) "pcW" = ( /obj/structure/cable/yellow{ d1 = 4; @@ -80393,6 +79517,10 @@ opacity = 0 }, /obj/effect/spawner/window/reinforced, +/obj/structure/cable/yellow{ + d2 = 2; + icon_state = "0-2" + }, /turf/simulated/floor/plating, /area/medical/cmo) "pjn" = ( @@ -80447,15 +79575,6 @@ icon_state = "dark" }, /area/engine/engineering) -"poJ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - icon_state = "dark" - }, -/area/security/podbay) "ppw" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 10 @@ -80616,25 +79735,6 @@ /area/quartermaster/sorting{ name = "\improper Warehouse" }) -"pOV" = ( -/obj/effect/decal/warning_stripes/south, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/turf/simulated/floor/plasteel, -/area/hallway/secondary/entry{ - name = "Arrivals" - }) -"pPA" = ( -/obj/machinery/light{ - dir = 1; - in_use = 1 - }, -/turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "vault" - }, -/area/engine/mechanic_workshop) "pQx" = ( /obj/structure/cable/yellow{ d1 = 4; @@ -80655,18 +79755,6 @@ }, /turf/simulated/floor/plating, /area/maintenance/aft) -"pRy" = ( -/obj/effect/decal/warning_stripes/north, -/obj/machinery/camera, -/turf/simulated/floor/engine, -/area/engine/mechanic_workshop) -"pSk" = ( -/obj/machinery/mecha_part_fabricator/spacepod, -/turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "vault" - }, -/area/engine/mechanic_workshop) "pSL" = ( /obj/effect/decal/warning_stripes/northwestcorner, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -80968,9 +80056,7 @@ icon_state = "4-8" }, /obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "red" @@ -81041,21 +80127,17 @@ /turf/simulated/floor/plating, /area/engine/engineering) "rdz" = ( -/obj/item/twohanded/required/kirbyplants{ - level = 4.1 +/obj/docking_port/stationary{ + dir = 2; + dwidth = 9; + height = 18; + id = "admin_home"; + name = "port bay 1"; + timid = 1; + width = 19 }, -/obj/effect/decal/warning_stripes/northwest, -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; - icon_state = "space"; - layer = 4; - name = "EXTERNAL AIRLOCK"; - pixel_y = 32 - }, -/turf/simulated/floor/plasteel, -/area/hallway/secondary/entry{ - name = "Arrivals" - }) +/turf/space, +/area/space) "rfg" = ( /obj/structure/chair/stool/bar, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -81122,6 +80204,13 @@ /area/hallway/secondary/entry{ name = "Arrivals" }) +"rnY" = ( +/obj/machinery/door/airlock/external{ + id_tag = "admin_home"; + locked = 1 + }, +/turf/simulated/floor/plating, +/area/hallway/secondary/entry) "rpg" = ( /obj/structure/lattice/catwalk, /obj/structure/cable{ @@ -81184,9 +80273,6 @@ /turf/simulated/floor/engine, /area/engine/supermatter) "rxV" = ( -/obj/machinery/atmospherics/pipe/simple/visible/purple{ - dir = 5 - }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -81429,17 +80515,16 @@ /turf/simulated/floor/engine, /area/engine/engineering) "rTO" = ( -/obj/docking_port/stationary{ - dir = 2; - dwidth = 9; - height = 18; - id = "admin_home"; - name = "port bay 1"; - timid = 1; - width = 19 +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 }, -/turf/space, -/area/space) +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/plasteel, +/area/hallway/secondary/entry{ + name = "Arrivals" + }) "rUJ" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -81639,15 +80724,11 @@ /turf/simulated/floor/plating, /area/storage/secure) "sFz" = ( -/obj/effect/spawner/window/reinforced, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ +/obj/machinery/light{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/engine/mechanic_workshop) +/turf/simulated/floor/plasteel, +/area/engine/break_room) "sHl" = ( /obj/structure/chair/comfy/black{ dir = 4 @@ -82050,12 +81131,26 @@ name = "Customs" }) "uaQ" = ( -/turf/simulated/wall, -/area/engine/mechanic_workshop) +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "yellow" + }, +/area/engine/break_room) "udB" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on, /turf/simulated/floor/plasteel, /area/crew_quarters/locker) +"uep" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/plasteel, +/area/hallway/secondary/entry{ + name = "Arrivals" + }) "ueD" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 8 @@ -82177,13 +81272,6 @@ /obj/structure/disposalpipe/segment, /turf/simulated/floor/wood, /area/crew_quarters/theatre) -"uDi" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "vault" - }, -/area/engine/mechanic_workshop) "uEN" = ( /obj/effect/landmark/start{ name = "Roboticist" @@ -82361,14 +81449,6 @@ icon_state = "redfull" }, /area/security/main) -"vgQ" = ( -/obj/docking_port/stationary/whiteship{ - dir = 8; - id = "whiteship_cyberiad"; - name = "North of Cerebron" - }, -/turf/space, -/area/space) "vjp" = ( /obj/effect/decal/warning_stripes/west, /obj/machinery/atmospherics/unary/vent_pump/on{ @@ -82388,23 +81468,10 @@ /obj/structure/lattice/catwalk, /turf/space, /area/space/nearstation) -"vmY" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "vault" - }, -/area/engine/mechanic_workshop) "vrH" = ( /obj/machinery/door/firedoor, -/obj/machinery/door/airlock/centcom{ - name = "Courtroom"; - opacity = 1 +/obj/machinery/door/airlock{ + name = "Courtroom" }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -82668,6 +81735,13 @@ icon_state = "dark" }, /area/turret_protected/ai_upload) +"whC" = ( +/obj/machinery/atmospherics/pipe/simple/visible/cyan{ + dir = 4 + }, +/obj/machinery/meter, +/turf/simulated/floor/plasteel, +/area/atmos) "wma" = ( /obj/effect/spawner/window/reinforced, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -82748,11 +81822,12 @@ icon_state = "1-4"; tag = "90Curve" }, +/obj/structure/cable, /obj/machinery/power/solar_control{ + dir = 1; id = "aftstarboard"; name = "Aft Starboard Solar Control" }, -/obj/structure/cable, /turf/simulated/floor/plating, /area/maintenance/starboardsolar) "wvO" = ( @@ -82938,20 +82013,6 @@ /area/medical/medbay2{ name = "Medbay Storage" }) -"xbe" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/plasteel{ - icon_state = "dark" - }, -/area/security/podbay) "xfn" = ( /obj/structure/cable/yellow{ d1 = 4; @@ -82987,9 +82048,6 @@ }, /area/medical/reception) "xno" = ( -/obj/machinery/atmospherics/pipe/simple/visible/purple{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -83130,14 +82188,6 @@ /obj/structure/lattice/catwalk, /turf/space, /area/space/nearstation) -"xOM" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - icon_state = "stage_stairs" - }, -/area/security/podbay) "xSh" = ( /obj/structure/cable/yellow{ d1 = 4; @@ -83157,18 +82207,6 @@ icon_state = "dark" }, /area/chapel/main) -"xXW" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/plasteel{ - icon_state = "dark" - }, -/area/security/podbay) "xYR" = ( /obj/structure/closet/crate, /obj/effect/spawner/lootdrop/maintenance{ @@ -91894,7 +90932,7 @@ aaa aaa aaa aaa -ibR +aaa aaa aaa aaa @@ -92150,10 +91188,10 @@ aaa aaa aaa aaa -kmF -fwO -kmF -abq +aaa +hIZ +aaa +aaa aaa aaa aaa @@ -92408,11 +91446,11 @@ aaa aaa aaa kmF -bOx +bUO kmF abq -abq -abq +aaa +aaa aaa aaa aaa @@ -92665,18 +91703,18 @@ aaa aaa aaa kmF -fwO +bOx kmF -aUN -aUN -aUN -aUN -aUN -aUN -aUN -aUN -aUN -aUN +abq +abq +abq +abq +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -92921,19 +91959,19 @@ aaa aaa aaa aaa -aWD -rdz -uWq -uWq -uWq -uWq -uWq -uWq -iMC -bcy -gbT -neT -gbT +kmF +bUO +kmF +aUN +aUN +kmF +aUN +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -93178,20 +92216,20 @@ aaa aaa aaa aaa -aUN -baI -bcS -bUB -bUB -bUB -bUB -bUB -bUB -dgw -gbT +aWD +fwO +uWq +rnY jGE -gbT -rTO +lio +rnY +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -93435,19 +92473,19 @@ aaa aaa aaa aaa -bhR -bRR -dgx -aUN -aUN -aUN -dgr -dgr -dgr -dgr -dgr -aUN aUN +baI +bBt +rnY +lfm +oZX +rnY +rdz +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -93692,18 +92730,18 @@ aaa aaa aaa aaa +bhR +ibR +bBt +aWD aUN -baI -dgx +kmF aUN -dgh -dgn -dgr -dgr -dgr -dgr -dgr -cdR +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -93949,18 +92987,18 @@ aaa aaa aaa aaa -aWD +aUN baJ -bTJ -bNW -dgj -dgj -dgt -caq -dgJ -dgz -dgr -cDn +juN +aWD +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -94206,18 +93244,18 @@ aaa aaa aaa aaa -aUN -baJ -bTH aWD -cdG -bBt -dgx -dgz -dgz -dgz -cdV -cDn +baJ +bUS +aWD +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -94463,18 +93501,18 @@ aaa aaa aaa aaa -aUN +aWD baJ -bUO -bQN -dgo -dgo -dgv -dgz -dgz -dgz -ceM -cDn +bUS +aWD +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -94724,14 +93762,14 @@ aUN baJ bUW aWD -dgk -bBt -dgx -dgz -dgz -dgz -ceM -cDn +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -94980,15 +94018,15 @@ aaa aWD bCx bUS -fhW -lPA -lPA -pOV -dgz -dgz -dgz -ceM -cDn +aWD +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -95235,17 +94273,17 @@ bKt aaa aaa aUN -baJ -bUQ +neT +rTO aWD -dgi -bBt -dgw -dgz -dgD -dgz -dgr -cDn +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -95493,16 +94531,16 @@ kmF abq aWD bRV -bUT +uep aWD -dgm -dgq -dgy -dgA -dgr -dgr -dgr -cdR +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -104273,7 +103311,7 @@ chy bZU cZv day -cZv +lrA bZU cQx bZU @@ -104530,7 +103568,7 @@ cNZ cKV cZq dax -dbv +cZq deg cSl cRj @@ -105027,7 +104065,7 @@ cxt csJ cys cMP -cys +pcN csJ csJ cFd @@ -105270,7 +104308,7 @@ ccD cdT chU cjt -cjt +dbv cjt cjt cLT @@ -110338,7 +109376,7 @@ aiP ajM akg agA -alC +alH alX anN aof @@ -111400,7 +110438,7 @@ aNA aNq aVD aNC -aNC +bTH aMk beH bcX @@ -114194,7 +113232,7 @@ ugy akU als amQ -amF +aoe apC apC apC @@ -114954,13 +113992,13 @@ aaa aaa aaa aaa +aaa +abq +abq +abq +abq abq abq -aaa -aaa -aaa -aaa -aaa abq abq alP @@ -115211,19 +114249,19 @@ aaa aaa aaa aaa -abq -aid -aid -aid -aid -avO -aid -aid -aid -aid -alI -aid -aid +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +atK +atK +atK +atK atK atK apF @@ -115468,18 +114506,18 @@ aaa aaa aaa aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa abq -aid -adF -adH -adZ -ahl -agZ -afr -akC -akO -alK -aid alq alq alq @@ -115726,17 +114764,17 @@ aaa aaa aaa aaa -aid -aie -aui -aui -awx -azt -mcY -poJ -xXW -xbe -aid +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abq alq alq alq @@ -115983,17 +115021,17 @@ aaa aaa aaa aaa -aid -aol -asZ -ava -aww -xOM -agj -azE -bPL -alE -aid +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abq alq alq alq @@ -116239,18 +115277,18 @@ aaa aaa aaa aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa abq -aif -apK -asZ -asZ -aww -ajv -afr -aBK -bTg -deG -aid alq alq alq @@ -116496,18 +115534,18 @@ aaa aaa aaa aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa abq -aid -afR -asZ -asZ -aww -aiC -aid -ays -bTf -deC -aid alq alq alq @@ -116753,18 +115791,18 @@ aaa aaa aaa abq +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa abq -aid -ask -ask -ask -aom -aid -aid -aid -aid -aid -aid alq alq alq @@ -117011,18 +116049,18 @@ aaa aaa aaa aaa -aeV -agd -agd -agd -agd -aeV +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa aaa abq abq -abq -abq -aid anQ anQ apI @@ -117268,14 +116306,14 @@ aaa aaa aaa aaa -aeM aaa aaa aaa aaa -aeM aaa -abq +aaa +aaa +aaa aaa abq abq @@ -123756,7 +122794,7 @@ bxI bCN bEM bGw -bIe +bIf bJT bLU bOQ @@ -124527,9 +123565,9 @@ buz bCM bCM bCM -bzL +dgr bJV -bNa +gbT bCM bQz bCM @@ -124749,8 +123787,8 @@ azs aCg aEy aEz -aHg -iof +aHa +eMs aCg vRY aJZ @@ -125287,9 +124325,9 @@ bck aIu rDF bqO -bnC +bqO dfB -dgL +foM foM aZo bqT @@ -125543,10 +124581,10 @@ bfr hIG aFR uaQ -bli +bpn sFz -dfA -iZY +bpn +bpn bvt iRu bqU @@ -125798,11 +124836,11 @@ aFR aFR aFR aFR -uaQ -pSk -uDi -vmY -blj +aFR +bjN +bjN +bjN +bjN dgO bjN rPb @@ -126055,12 +125093,12 @@ bfz pUc pUc kKa -anq -deW -dfg -eNd -bsZ -anq +aaa +aaa +aaa +aaa +aaa +bnt bnt cZS bxf @@ -126312,12 +125350,12 @@ aKT bfz pUc rYj -anq -avP -dfh -eNd -dfI -anq +aaa +aaa +aaa +aaa +aaa +bnt bvu bly bxg @@ -126342,7 +125380,7 @@ cbg bGG bGG nzX -bPw +whC bIq ciE ckh @@ -126569,12 +125607,12 @@ aKT tgE pUc kKa -anq -dfa -dfg -dfq -bta -anq +aaa +aaa +aaa +aaa +aaa +bnt bsG bza fxB @@ -126826,12 +125864,12 @@ aKT bfz pUc rYj -anq -anq -pPA -dfx -dfK -anq +aaa +aaa +aaa +aaa +aaa +bnt bvv bvk bAt @@ -127084,11 +126122,11 @@ xLf qtt vmT qtt -anq -dfj -dfu -dfJ -anq +aaa +aaa +aaa +aaa +aaa bsI bwr aWC @@ -127341,11 +126379,11 @@ bfz wxE wxE gyy -anq -pRy -aoN -btc -anq +aaa +aaa +aaa +aaa +aaa bsJ bwv aaa @@ -127598,11 +126636,11 @@ tgE wxE wxE qtt -anq -dfk -aoN -aoN -anq +aaa +aaa +aaa +aaa +aaa bsJ bwv aaa @@ -127615,15 +126653,15 @@ bIs bKg bMh bNe -bPC +nFC bRi bSU bPC -bPC +moV bRi bSU bRi -bPC +hDX bRi bSU ceK @@ -127855,11 +126893,11 @@ bfz wxE wxE gyy -anq -dfk -aoN -dgK -anq +aaa +aaa +aaa +aaa +aaa bsK bwy bxj @@ -128112,11 +127150,11 @@ xLf vfv vfv qtt -anq -dfl -dfl -azD -anq +aaa +aaa +aaa +aaa +aaa wAP bwF bsN @@ -128369,11 +127407,11 @@ vmT vfv vfv gyy -anq -abq -abq -abq -anq +aaa +aaa +aaa +aaa +aaa bIu bwL abq @@ -136763,7 +135801,7 @@ aaa aaa aaa aaa -vgQ +aaa aaa aaa aaa diff --git a/_maps/map_files/RandomRuins/SpaceRuins/syndiedepot.dmm b/_maps/map_files/RandomRuins/SpaceRuins/syndiedepot.dmm index 99f4f58e877..ef6903847d5 100644 --- a/_maps/map_files/RandomRuins/SpaceRuins/syndiedepot.dmm +++ b/_maps/map_files/RandomRuins/SpaceRuins/syndiedepot.dmm @@ -362,12 +362,6 @@ "bf" = ( /turf/simulated/wall/mineral/plastitanium/nodiagonal, /area/syndicate_depot/outer) -"bg" = ( -/obj/effect/spawner/random_spawners/syndicate/layout/spacepod, -/turf/simulated/floor/plasteel{ - icon_state = "dark" - }, -/area/syndicate_depot/core) "bh" = ( /obj/machinery/light{ dir = 1; @@ -1758,7 +1752,7 @@ aD aM at aD -bg +aD bn bu bz diff --git a/_maps/map_files/RandomRuins/SpaceRuins/whiteship.dmm b/_maps/map_files/RandomRuins/SpaceRuins/whiteship.dmm index 23cab65cbb6..663cbddb25d 100644 --- a/_maps/map_files/RandomRuins/SpaceRuins/whiteship.dmm +++ b/_maps/map_files/RandomRuins/SpaceRuins/whiteship.dmm @@ -290,8 +290,13 @@ /turf/simulated/floor/plating, /area/shuttle/abandoned) "by" = ( -/obj/structure/spacepoddoor, -/turf/simulated/floor/plating, +/obj/machinery/door_control{ + id = "whiteshippoddoor"; + name = "Pod Door Control"; + pixel_x = -24; + pixel_y = 24 + }, +/turf/simulated/floor/mineral/titanium, /area/shuttle/abandoned) "bz" = ( /obj/machinery/door/airlock/public/glass{ @@ -304,11 +309,10 @@ /turf/simulated/floor/plating, /area/shuttle/abandoned) "bC" = ( -/obj/structure/spacepoddoor, /obj/machinery/door/poddoor/multi_tile/two_tile_ver{ id_tag = "whiteshippoddoor" }, -/turf/simulated/floor/plating, +/turf/simulated/floor/mineral/titanium, /area/shuttle/abandoned) "bD" = ( /obj/machinery/door_control{ diff --git a/_maps/map_files/cyberiad/cyberiad.dmm b/_maps/map_files/cyberiad/cyberiad.dmm index 833ca217ea4..470e24beb65 100644 --- a/_maps/map_files/cyberiad/cyberiad.dmm +++ b/_maps/map_files/cyberiad/cyberiad.dmm @@ -6,6 +6,19 @@ /obj/structure/lattice, /turf/space, /area/space/nearstation) +"aac" = ( +/obj/machinery/alarm{ + pixel_y = 22 + }, +/obj/structure/table, +/obj/item/radio/electropack, +/obj/item/assembly/signaler, +/obj/item/healthanalyzer, +/obj/item/hand_labeler, +/turf/simulated/floor/plasteel{ + icon_state = "white" + }, +/area/toxins/misc_lab) "aaQ" = ( /obj/docking_port/stationary/whiteship{ dir = 8; @@ -1048,17 +1061,6 @@ icon_state = "dark" }, /area/security/hos) -"aeE" = ( -/obj/machinery/firealarm{ - dir = 8; - pixel_x = -24 - }, -/obj/effect/decal/warning_stripes/east, -/obj/structure/rack, -/obj/item/tank/internals/oxygen, -/obj/item/tank/jetpack/oxygen, -/turf/simulated/floor/plasteel, -/area/security/podbay) "aeF" = ( /obj/machinery/door/airlock/external{ id_tag = "laborcamp_home"; @@ -1295,11 +1297,6 @@ }, /turf/simulated/floor/carpet, /area/security/hos) -"aeX" = ( -/obj/effect/decal/warning_stripes/east, -/obj/machinery/suit_storage_unit/security/pod_pilot, -/turf/simulated/floor/plasteel, -/area/security/podbay) "aeY" = ( /obj/effect/spawner/window/reinforced, /obj/structure/cable{ @@ -1572,14 +1569,6 @@ icon_state = "red" }, /area/security/main) -"afL" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/turf/simulated/floor/plasteel{ - icon_state = "rampbottom" - }, -/area/security/podbay) "afM" = ( /obj/structure/table/wood, /obj/item/flashlight/lamp/green{ @@ -1588,9 +1577,6 @@ pixel_y = 8 }, /obj/item/stamp/hos, -/obj/item/spacepod_key{ - id = 100000 - }, /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 4 }, @@ -1598,14 +1584,6 @@ /obj/item/pen/multi, /turf/simulated/floor/carpet, /area/security/hos) -"afN" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/turf/simulated/floor/plasteel{ - icon_state = "rampbottom" - }, -/area/security/podbay) "afO" = ( /turf/simulated/floor/plating/airless, /area/space/nearstation) @@ -1927,21 +1905,27 @@ }, /area/security/brig) "agR" = ( -/obj/structure/rack, /obj/structure/window/reinforced{ dir = 1 }, -/obj/structure/window/reinforced{ - dir = 4 - }, -/obj/item/storage/box/buck{ +/obj/structure/rack, +/obj/item/storage/box/beanbag{ pixel_x = -3; pixel_y = 3 }, -/obj/item/storage/box/buck, -/obj/item/storage/box/buck{ - pixel_x = 3; - pixel_y = -3 +/obj/item/storage/box/beanbag, +/obj/item/storage/box/beanbag{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/item/storage/box/beanbag{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/item/storage/box/beanbag, +/obj/item/storage/box/beanbag, +/obj/structure/window/reinforced{ + dir = 4 }, /turf/simulated/floor/plasteel{ dir = 8; @@ -2143,7 +2127,6 @@ /obj/structure/table, /obj/effect/decal/warning_stripes/red/hollow, /obj/item/storage/toolbox/mechanical, -/obj/item/lock_buster, /obj/machinery/light{ dir = 1; on = 1 @@ -2285,26 +2268,6 @@ }, /turf/simulated/floor/plasteel, /area/security/seceqstorage) -"aia" = ( -/obj/structure/reagent_dispensers/fueltank, -/obj/effect/decal/warning_stripes/yellow/hollow, -/obj/effect/decal/warning_stripes/northeastcorner, -/obj/machinery/light_switch{ - pixel_x = -25 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/turf/simulated/floor/plasteel, -/area/security/podbay) -"aic" = ( -/obj/effect/decal/warning_stripes/north, -/obj/machinery/space_heater, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/plasteel, -/area/security/podbay) "aid" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -2426,21 +2389,6 @@ dir = 1 }, /obj/structure/rack, -/obj/item/storage/box/beanbag{ - pixel_x = -3; - pixel_y = 3 - }, -/obj/item/storage/box/beanbag, -/obj/item/storage/box/beanbag{ - pixel_x = -3; - pixel_y = 3 - }, -/obj/item/storage/box/beanbag{ - pixel_x = -3; - pixel_y = 3 - }, -/obj/item/storage/box/beanbag, -/obj/item/storage/box/beanbag, /obj/item/storage/box/tranquilizer{ pixel_x = 3; pixel_y = -3 @@ -2816,17 +2764,16 @@ d2 = 8; icon_state = "1-8" }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, /obj/structure/disposalpipe/segment{ dir = 8; icon_state = "pipe-c" }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, /turf/simulated/floor/plasteel{ icon_state = "dark" }, @@ -2850,9 +2797,6 @@ icon_state = "barber" }, /area/security/permabrig) -"ajb" = ( -/turf/simulated/wall/r_wall, -/area/security/podbay) "ajc" = ( /obj/structure/table, /turf/simulated/floor/plasteel{ @@ -2997,63 +2941,6 @@ icon_state = "vault" }, /area/security/securearmoury) -"ajs" = ( -/obj/structure/table, -/obj/machinery/cell_charger, -/obj/item/storage/toolbox/mechanical{ - pixel_y = 10 - }, -/obj/item/stock_parts/cell/high/plus, -/obj/effect/decal/warning_stripes/east, -/obj/item/clothing/glasses/welding, -/obj/item/radio/intercom/department/security{ - pixel_x = -28 - }, -/turf/simulated/floor/plasteel, -/area/security/podbay) -"ajt" = ( -/obj/machinery/alarm{ - pixel_y = 23 - }, -/turf/simulated/floor/engine, -/area/security/podbay) -"aju" = ( -/obj/machinery/camera{ - c_tag = "Brig Podbay" - }, -/obj/machinery/door_control{ - desc = "A remote control-switch for the pod doors."; - id = "secpodbay"; - name = "Pod Door Control"; - pixel_y = 24; - req_access_txt = "71" - }, -/turf/simulated/floor/engine, -/area/security/podbay) -"ajv" = ( -/obj/machinery/light{ - dir = 1; - on = 1 - }, -/obj/machinery/status_display{ - layer = 4; - pixel_y = 32 - }, -/turf/simulated/floor/engine, -/area/security/podbay) -"ajw" = ( -/turf/simulated/floor/engine, -/area/security/podbay) -"ajx" = ( -/obj/structure/spacepoddoor{ - luminosity = 3 - }, -/turf/simulated/floor/engine, -/area/security/podbay) -"ajy" = ( -/obj/effect/decal/warning_stripes/east, -/turf/simulated/floor/engine/vacuum, -/area/security/podbay) "ajJ" = ( /obj/structure/sign/poster/official/random{ pixel_y = 32 @@ -3297,24 +3184,6 @@ icon_state = "darkredcorners" }, /area/security/brig) -"akc" = ( -/obj/structure/table/reinforced, -/obj/item/clothing/suit/jacket/pilot, -/obj/item/clothing/head/beret/sec, -/obj/machinery/light_switch{ - pixel_x = -25 - }, -/obj/item/spacepod_key{ - id = 100000 - }, -/obj/item/gps, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - icon_state = "dark" - }, -/area/security/podbay) "akd" = ( /obj/structure/cable{ d1 = 4; @@ -3477,12 +3346,6 @@ icon_state = "dark" }, /area/security/brig) -"ako" = ( -/obj/spacepod/sec{ - req_access_txt = "71" - }, -/turf/simulated/floor/engine, -/area/security/podbay) "aks" = ( /obj/structure/cable{ d1 = 1; @@ -3551,22 +3414,6 @@ icon_state = "darkred" }, /area/security/brig) -"aky" = ( -/obj/machinery/portable_atmospherics/canister/oxygen, -/obj/effect/decal/warning_stripes/blue/hollow, -/obj/effect/decal/warning_stripes/east, -/turf/simulated/floor/plasteel, -/area/security/podbay) -"akz" = ( -/obj/structure/spacepoddoor{ - luminosity = 3 - }, -/obj/machinery/door/poddoor/multi_tile/four_tile_ver{ - id_tag = "secpodbay"; - req_access_txt = "71" - }, -/turf/simulated/floor/engine, -/area/security/podbay) "akB" = ( /turf/simulated/wall/r_wall, /area/security/range) @@ -4090,10 +3937,6 @@ icon_state = "darkred" }, /area/security/brig) -"als" = ( -/obj/effect/spawner/window/reinforced, -/turf/simulated/floor/plating, -/area/security/podbay) "alt" = ( /obj/effect/spawner/window/reinforced, /obj/structure/cable, @@ -4182,18 +4025,6 @@ icon_state = "dark" }, /area/security/hos) -"alI" = ( -/obj/structure/grille, -/turf/simulated/floor/plating/airless, -/area/security/podbay) -"alJ" = ( -/obj/structure/grille, -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'KEEP CLEAR OF DOCKING AREA'."; - name = "KEEP CLEAR: DOCKING AREA" - }, -/turf/simulated/floor/plating/airless, -/area/security/podbay) "alK" = ( /obj/effect/spawner/window/reinforced, /obj/structure/cable, @@ -4480,21 +4311,6 @@ icon_state = "red" }, /area/security/main) -"amg" = ( -/obj/machinery/light, -/obj/structure/table/reinforced, -/obj/item/folder/red, -/obj/item/pen, -/obj/item/radio/intercom/department/security{ - pixel_y = -28 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/turf/simulated/floor/plasteel{ - icon_state = "dark" - }, -/area/security/podbay) "amh" = ( /obj/structure/grille/broken, /obj/structure/lattice, @@ -4611,10 +4427,6 @@ }, /turf/simulated/floor/plating, /area/maintenance/fsmaint) -"amx" = ( -/obj/effect/decal/cleanable/fungus, -/turf/simulated/wall/r_wall, -/area/security/podbay) "amy" = ( /obj/structure/cable{ d1 = 1; @@ -4827,18 +4639,6 @@ icon_state = "redfull" }, /area/security/main) -"amR" = ( -/obj/machinery/computer/security{ - network = list("SS13","Research Outpost","Mining Outpost") - }, -/obj/machinery/camera{ - c_tag = "Brig Pod Pilot's Office"; - dir = 8 - }, -/turf/simulated/floor/plasteel{ - icon_state = "dark" - }, -/area/security/podbay) "amS" = ( /obj/machinery/hologram/holopad, /turf/simulated/floor/carpet, @@ -4874,10 +4674,6 @@ /obj/structure/lattice/catwalk, /turf/space, /area/solar/auxport) -"amV" = ( -/obj/structure/sign/nosmoking_2, -/turf/simulated/wall/r_wall, -/area/security/podbay) "amW" = ( /obj/structure/lattice, /obj/structure/grille, @@ -6559,14 +6355,6 @@ /obj/effect/spawner/lootdrop/maintenance, /turf/simulated/floor/plating, /area/maintenance/fsmaint) -"aqa" = ( -/obj/effect/decal/warning_stripes/north, -/obj/machinery/hologram/holopad, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/plasteel, -/area/security/podbay) "aqb" = ( /obj/item/storage/secure/safe{ pixel_y = 25 @@ -6581,11 +6369,6 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel, /area/security/range) -"aqe" = ( -/obj/structure/grille, -/obj/structure/sign/securearea, -/turf/simulated/floor/plating/airless, -/area/security/podbay) "aqn" = ( /obj/item/flag/sec, /turf/simulated/floor/plating, @@ -6799,28 +6582,6 @@ "aqI" = ( /turf/simulated/wall/r_wall, /area/security/brig) -"aqJ" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/security/glass{ - name = "Security Pods"; - req_access_txt = "71" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/plasteel{ - icon_state = "dark" - }, -/area/security/podbay) -"aqK" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/security/glass{ - name = "Security Pods"; - req_access_txt = "71" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plasteel{ - icon_state = "dark" - }, -/area/security/podbay) "aqL" = ( /obj/effect/landmark{ name = "carpspawn" @@ -7374,21 +7135,6 @@ icon_state = "redcorner" }, /area/security/processing) -"arG" = ( -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4"; - tag = "" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4; - initialize_directions = 11 - }, -/turf/simulated/floor/plasteel{ - icon_state = "dark" - }, -/area/security/podbay) "arH" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 @@ -7398,34 +7144,6 @@ icon_state = "red" }, /area/security/permabrig) -"arI" = ( -/obj/structure/closet/secure_closet/security, -/obj/structure/cable{ - d2 = 8; - icon_state = "0-8" - }, -/obj/item/spacepod_equipment/weaponry/laser, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, -/turf/simulated/floor/plasteel{ - icon_state = "dark" - }, -/area/security/podbay) -"arJ" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - tag = "" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plasteel{ - icon_state = "dark" - }, -/area/security/podbay) "arK" = ( /obj/machinery/power/apc{ dir = 8; @@ -7581,22 +7299,6 @@ /obj/effect/spawner/random_barrier/obstruction, /turf/simulated/floor/plating, /area/maintenance/fsmaint) -"asd" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - icon_state = "dark" - }, -/area/security/brig) "ase" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -7996,75 +7698,6 @@ icon_state = "darkred" }, /area/security/permabrig) -"asF" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/security/glass{ - name = "Security Pods"; - req_access_txt = "71" - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - icon_state = "dark" - }, -/area/security/podbay) -"asG" = ( -/obj/machinery/hologram/holopad, -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - icon_state = "dark" - }, -/area/security/podbay) -"asH" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - icon_state = "dark" - }, -/area/security/podbay) -"asI" = ( -/obj/structure/chair/office/dark{ - dir = 4 - }, -/obj/effect/landmark/start{ - name = "Security Pod Pilot" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4; - initialize_directions = 11 - }, -/turf/simulated/floor/plasteel{ - icon_state = "dark" - }, -/area/security/podbay) "asL" = ( /obj/structure/cable{ d1 = 4; @@ -8683,37 +8316,6 @@ }, /turf/simulated/floor/plating, /area/maintenance/fsmaint) -"atU" = ( -/obj/structure/table/reinforced, -/obj/item/flashlight, -/obj/item/radio{ - pixel_y = 6 - }, -/obj/machinery/alarm{ - dir = 1; - pixel_y = -22 - }, -/turf/simulated/floor/plasteel{ - icon_state = "dark" - }, -/area/security/podbay) -"atV" = ( -/obj/item/twohanded/required/kirbyplants, -/obj/machinery/firealarm{ - dir = 8; - pixel_x = -24 - }, -/turf/simulated/floor/plasteel{ - icon_state = "dark" - }, -/area/security/podbay) -"atW" = ( -/obj/structure/table/reinforced, -/obj/item/book/manual/security_space_law, -/turf/simulated/floor/plasteel{ - icon_state = "dark" - }, -/area/security/podbay) "atX" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 4 @@ -23891,38 +23493,6 @@ icon_state = "bluecorner" }, /area/hallway/primary/fore) -"baG" = ( -/obj/structure/rack{ - dir = 8; - layer = 2.9 - }, -/obj/item/tank/internals/emergency_oxygen/engi, -/obj/item/tank/internals/emergency_oxygen/engi, -/obj/item/clothing/mask/gas, -/obj/item/clothing/mask/gas{ - pixel_x = -3; - pixel_y = -3 - }, -/obj/structure/extinguisher_cabinet{ - pixel_x = -5; - pixel_y = 30 - }, -/obj/effect/decal/warning_stripes/east, -/turf/simulated/floor/plasteel, -/area/escapepodbay) -"baH" = ( -/obj/machinery/camera{ - c_tag = "Departure Lounge Podbay" - }, -/obj/machinery/door_control{ - desc = "A remote control-switch for the pod doors."; - id = "escapepodbay"; - name = "Pod Door Control"; - pixel_y = 24; - req_access_txt = "13" - }, -/turf/simulated/floor/engine, -/area/escapepodbay) "baI" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock{ @@ -23981,19 +23551,6 @@ }, /turf/simulated/floor/wood, /area/crew_quarters/bar) -"baN" = ( -/obj/structure/table, -/obj/item/storage/toolbox/mechanical, -/obj/item/crowbar/red, -/turf/simulated/floor/plasteel, -/area/escapepodbay) -"baO" = ( -/obj/structure/table, -/obj/item/storage/belt/utility, -/obj/item/stock_parts/cell, -/obj/item/flashlight, -/turf/simulated/floor/plasteel, -/area/escapepodbay) "baP" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -24003,18 +23560,6 @@ }, /turf/simulated/floor/plating, /area/maintenance/fsmaint2) -"baQ" = ( -/obj/machinery/alarm{ - pixel_y = 25 - }, -/turf/simulated/floor/engine, -/area/escapepodbay) -"baR" = ( -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/engine, -/area/escapepodbay) "baS" = ( /obj/structure/disposalpipe/segment{ dir = 2; @@ -24028,19 +23573,6 @@ }, /turf/simulated/floor/plating, /area/maintenance/fsmaint2) -"baT" = ( -/turf/simulated/floor/engine, -/area/escapepodbay) -"baU" = ( -/obj/structure/spacepoddoor{ - luminosity = 3 - }, -/turf/simulated/floor/engine, -/area/escapepodbay) -"baV" = ( -/obj/effect/decal/warning_stripes/east, -/turf/simulated/floor/engine/vacuum, -/area/escapepodbay) "bba" = ( /obj/effect/landmark{ name = "Observer-Start" @@ -24718,10 +24250,6 @@ }, /turf/simulated/floor/plating, /area/maintenance/fsmaint2) -"bcl" = ( -/obj/machinery/hologram/holopad, -/turf/simulated/floor/plasteel, -/area/escapepodbay) "bcm" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -24933,13 +24461,6 @@ }, /turf/simulated/floor/plasteel, /area/hallway/secondary/entry) -"bcH" = ( -/turf/simulated/floor/plasteel, -/area/escapepodbay) -"bcI" = ( -/obj/effect/decal/warning_stripes/east, -/turf/simulated/floor/plasteel, -/area/escapepodbay) "bcM" = ( /obj/structure/extinguisher_cabinet{ pixel_x = -5; @@ -26756,23 +26277,6 @@ icon_state = "darkbluecorners" }, /area/chapel/main) -"bgc" = ( -/obj/machinery/firealarm{ - dir = 1; - pixel_y = -24 - }, -/turf/simulated/floor/engine, -/area/escapepodbay) -"bgd" = ( -/obj/structure/spacepoddoor{ - luminosity = 3 - }, -/obj/machinery/door/poddoor/multi_tile/four_tile_ver{ - id_tag = "escapepodbay"; - req_one_access_txt = "13" - }, -/turf/simulated/floor/engine, -/area/escapepodbay) "bgf" = ( /obj/structure/table/wood, /obj/item/candle, @@ -26829,10 +26333,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel, /area/hallway/secondary/entry) -"bgm" = ( -/obj/machinery/light, -/turf/simulated/floor/engine, -/area/escapepodbay) "bgn" = ( /obj/machinery/door/firedoor, /obj/machinery/light{ @@ -27717,9 +27217,6 @@ icon_state = "hydrofloor" }, /area/hydroponics) -"big" = ( -/turf/simulated/wall, -/area/escapepodbay) "bih" = ( /obj/machinery/alarm{ dir = 4; @@ -41054,13 +40551,13 @@ /turf/simulated/floor/plasteel, /area/hallway/secondary/exit) "bLp" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1; - initialize_directions = 11 - }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10; + initialize_directions = 10 + }, /turf/simulated/floor/plasteel, /area/hallway/secondary/exit) "bLq" = ( @@ -41081,12 +40578,8 @@ icon_state = "2-4"; tag = "" }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10; - initialize_directions = 10 +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 }, /turf/simulated/floor/plasteel, /area/hallway/secondary/exit) @@ -42285,8 +41778,6 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plasteel, /area/hallway/secondary/exit) "bNx" = ( @@ -43339,17 +42830,6 @@ "bPt" = ( /turf/simulated/wall/r_wall, /area/medical/research) -"bPu" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2"; - tag = "" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/plasteel, -/area/hallway/secondary/exit) "bPw" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 4 @@ -45462,16 +44942,6 @@ /obj/machinery/vending/cigarette, /turf/simulated/floor/plasteel, /area/hallway/primary/central/sw) -"bTm" = ( -/obj/structure/table, -/obj/item/pod_parts/core, -/obj/item/circuitboard/mecha/pod, -/obj/item/clothing/glasses/welding{ - pixel_y = 12 - }, -/obj/item/gps, -/turf/simulated/floor/plasteel, -/area/engine/mechanic_workshop) "bTq" = ( /turf/simulated/floor/plating, /area/quartermaster/storage) @@ -46255,19 +45725,12 @@ /turf/simulated/floor/plasteel, /area/hallway/secondary/exit) "bUT" = ( -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, /obj/structure/cable{ d1 = 1; - d2 = 2; - icon_state = "1-2"; - tag = "" + d2 = 8; + icon_state = "1-8" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/light, /turf/simulated/floor/plasteel, /area/hallway/secondary/exit) "bUU" = ( @@ -46626,21 +46089,6 @@ }, /turf/simulated/floor/plasteel, /area/quartermaster/office) -"bVI" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/public/glass{ - name = "Escape Pod Bay" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2"; - tag = "" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/plasteel, -/area/escapepodbay) "bVJ" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -47244,19 +46692,6 @@ }, /turf/space, /area/space) -"bWR" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2"; - tag = "" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/plasteel{ - icon_state = "ramptop" - }, -/area/escapepodbay) "bWS" = ( /obj/machinery/door/firedoor, /obj/machinery/door/poddoor/shutters{ @@ -48073,32 +47508,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plating, /area/maintenance/asmaint2) -"bYo" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/plasteel, -/area/escapepodbay) -"bYp" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8"; - tag = "" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/turf/simulated/floor/plasteel, -/area/escapepodbay) -"bYq" = ( -/obj/effect/decal/warning_stripes/east, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/turf/simulated/floor/plasteel, -/area/escapepodbay) "bYr" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 1 @@ -49789,12 +49198,6 @@ }, /turf/simulated/floor/plating, /area/maintenance/asmaint2) -"cbb" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/turf/simulated/floor/plasteel, -/area/escapepodbay) "cbc" = ( /obj/machinery/light_switch{ pixel_x = 27 @@ -50813,11 +50216,6 @@ }, /turf/simulated/floor/plasteel, /area/janitor) -"ccP" = ( -/obj/machinery/portable_atmospherics/canister/oxygen, -/obj/effect/decal/warning_stripes/yellow/hollow, -/turf/simulated/floor/plasteel, -/area/escapepodbay) "ccQ" = ( /turf/simulated/floor/plasteel{ dir = 8; @@ -50833,16 +50231,6 @@ /obj/item/grenade/chem_grenade/cleaner, /turf/simulated/floor/plasteel, /area/janitor) -"ccS" = ( -/obj/structure/closet/emcloset, -/obj/item/clothing/mask/breath, -/obj/item/tank/internals/emergency_oxygen, -/obj/item/tank/internals/emergency_oxygen, -/obj/item/clothing/mask/breath, -/obj/effect/decal/warning_stripes/yellow/hollow, -/obj/effect/decal/warning_stripes/east, -/turf/simulated/floor/plasteel, -/area/escapepodbay) "ccT" = ( /obj/machinery/r_n_d/server/robotics, /obj/machinery/atmospherics/pipe/simple/heat_exchanging{ @@ -51956,12 +51344,11 @@ /area/janitor) "cfq" = ( /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1; - initialize_directions = 11 +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 }, /turf/simulated/floor/plasteel, /area/hallway/primary/central/sw) @@ -53529,8 +52916,6 @@ icon_state = "2-4"; tag = "" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel, /area/hallway/primary/central/sw) "ciz" = ( @@ -54238,7 +53623,6 @@ /obj/machinery/door/airlock/maintenance{ req_access_txt = "12" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/disposalpipe/segment, /obj/structure/cable{ d1 = 1; @@ -54246,7 +53630,6 @@ icon_state = "1-2"; tag = "" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plating, /area/maintenance/apmaint) "cjE" = ( @@ -54587,9 +53970,8 @@ icon_state = "1-2"; tag = "" }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8; - initialize_directions = 11 +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 }, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 8; @@ -55149,7 +54531,6 @@ icon_state = "1-2"; tag = "" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel, /area/quartermaster/miningdock) @@ -55203,8 +54584,6 @@ icon_state = "1-2"; tag = "" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plating, /area/maintenance/apmaint) "clz" = ( @@ -56340,12 +55719,6 @@ icon_state = "4-8"; tag = "" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, /turf/simulated/floor/plasteel, /area/quartermaster/miningdock) "cnU" = ( @@ -56359,13 +55732,12 @@ icon_state = "1-4"; tag = "" }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, /obj/effect/landmark/start{ name = "Shaft Miner" }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, /turf/simulated/floor/plasteel, /area/quartermaster/miningdock) "cnV" = ( @@ -56387,18 +55759,12 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, /obj/structure/cable{ d1 = 4; d2 = 8; icon_state = "4-8"; tag = "" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, /turf/simulated/floor/plating, /area/maintenance/apmaint) "cnY" = ( @@ -56528,24 +55894,15 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, /obj/structure/cable{ d1 = 4; d2 = 8; icon_state = "4-8"; tag = "" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, /turf/simulated/floor/plating, /area/maintenance/apmaint) "coh" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, /obj/effect/landmark{ name = "xeno_spawn"; pixel_x = -1 @@ -56560,9 +55917,6 @@ dir = 2; icon_state = "pipe-c" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, /turf/simulated/floor/plating, /area/maintenance/apmaint) "coi" = ( @@ -56739,7 +56093,6 @@ }, /area/medical/research) "coE" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/cable{ d1 = 1; d2 = 4; @@ -56755,7 +56108,6 @@ d2 = 8; icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plating, /area/maintenance/apmaint) "coF" = ( @@ -56769,8 +56121,6 @@ icon_state = "1-2"; tag = "" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plating, /area/maintenance/apmaint) "coG" = ( @@ -57868,51 +57218,23 @@ name = "Toxins Launch Room" }) "cqr" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, /obj/structure/disposalpipe/segment{ dir = 1; icon_state = "pipe-c" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, /obj/structure/cable{ d1 = 1; d2 = 4; icon_state = "1-4"; tag = "" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, /turf/simulated/floor/plating, /area/maintenance/apmaint) "cqs" = ( /obj/effect/decal/cleanable/dirt, -/obj/structure/cable{ - d2 = 4; - icon_state = "0-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/machinery/power/apc{ - name = "south bump"; - pixel_y = -24 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, /turf/simulated/floor/plating, /area/maintenance/apmaint) "cqt" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, /obj/structure/cable{ d1 = 4; d2 = 8; @@ -57924,9 +57246,6 @@ name = "HoP Office"; sortType = 15 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, /turf/simulated/floor/plating, /area/maintenance/apmaint) "cqu" = ( @@ -57934,27 +57253,13 @@ dir = 2; icon_state = "pipe-c" }, -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8"; - tag = "" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2"; - tag = "" - }, /obj/machinery/light/small{ dir = 4 }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4; - initialize_directions = 11 +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" }, /turf/simulated/floor/plating, /area/maintenance/apmaint) @@ -58994,19 +58299,6 @@ /area/toxins/launch{ name = "Toxins Launch Room" }) -"cso" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/obj/structure/chair/stool, -/turf/simulated/floor/plating, -/area/maintenance/apmaint) -"csp" = ( -/obj/effect/landmark{ - name = "blobstart" - }, -/turf/simulated/floor/plating, -/area/maintenance/apmaint) "csq" = ( /obj/structure/chair{ dir = 4 @@ -59567,18 +58859,6 @@ icon_state = "white" }, /area/medical/virology) -"cti" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2"; - tag = "" - }, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/plating, -/area/maintenance/apmaint) "ctj" = ( /obj/structure/cable{ d1 = 1; @@ -59953,9 +59233,6 @@ /area/toxins/launch{ name = "Toxins Launch Room" }) -"ctR" = ( -/turf/simulated/wall/r_wall, -/area/blueshield) "ctS" = ( /obj/structure/cable{ d1 = 1; @@ -59970,14 +59247,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel, /area/hallway/primary/aft) -"ctT" = ( -/obj/machinery/door/window/southleft{ - name = "Assembly Line Delivery"; - req_access_txt = "32" - }, -/obj/effect/decal/warning_stripes/yellow, -/turf/simulated/floor/plasteel, -/area/assembly/assembly_line) "ctU" = ( /obj/structure/cable{ d1 = 4; @@ -59995,16 +59264,6 @@ /obj/structure/grille, /turf/simulated/floor/plating, /area/maintenance/apmaint) -"ctW" = ( -/obj/structure/rack{ - dir = 1 - }, -/obj/effect/spawner/lootdrop/maintenance{ - lootcount = 2; - name = "2maintenance loot spawner" - }, -/turf/simulated/floor/plating, -/area/maintenance/apmaint) "ctX" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -60753,14 +60012,13 @@ /turf/simulated/floor/plating, /area/maintenance/apmaint) "cvo" = ( -/turf/simulated/wall, -/area/maintenance/consarea) +/obj/effect/turf_decal/loading_area, +/obj/effect/spawner/random_spawners/blood_often, +/turf/simulated/floor/plating, +/area/maintenance/apmaint) "cvp" = ( /turf/simulated/wall/r_wall, /area/maintenance/apmaint) -"cvq" = ( -/turf/simulated/wall/r_wall, -/area/storage/tech) "cvr" = ( /obj/machinery/door/poddoor{ id_tag = "toxinsdriver"; @@ -61412,58 +60670,36 @@ /turf/simulated/floor/plating, /area/maintenance/apmaint) "cwA" = ( -/obj/structure/table, -/obj/machinery/light/small{ - dir = 1 - }, -/obj/item/stack/sheet/metal{ - amount = 2 - }, -/turf/simulated/floor/plating, +/turf/simulated/wall/r_wall/rust, /area/maintenance/apmaint) "cwB" = ( -/obj/structure/chair{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/maintenance/apmaint) -"cwC" = ( -/obj/structure/sign/poster/contraband/random{ - pixel_y = 32 +/obj/machinery/light/small{ + dir = 1 }, /turf/simulated/floor/plating, /area/maintenance/apmaint) "cwD" = ( -/obj/structure/chair{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/maintenance/apmaint) -"cwE" = ( -/obj/structure/table, -/obj/effect/spawner/lootdrop/maintenance, -/obj/machinery/light/small{ - dir = 1 - }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/random_spawners/cobweb_left_rare, /turf/simulated/floor/plating, /area/maintenance/apmaint) "cwF" = ( -/turf/simulated/floor/plasteel, -/area/maintenance/consarea) -"cwG" = ( -/obj/structure/table, -/obj/machinery/light{ - dir = 1 +/obj/structure/closet/wardrobe/pjs, +/obj/effect/spawner/random_spawners/blood_often, +/obj/effect/spawner/lootdrop/maintenance{ + lootcount = 8; + name = "8maintenance loot spawner" }, /turf/simulated/floor/plating, -/area/maintenance/consarea) -"cwH" = ( -/obj/item/screwdriver, -/turf/simulated/floor/plating, -/area/maintenance/consarea) +/area/maintenance/apmaint) "cwI" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/obj/machinery/vending/sovietsoda, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, -/area/maintenance/consarea) +/area/maintenance/apmaint) "cwJ" = ( /obj/structure/disposalpipe/segment, /obj/structure/extinguisher_cabinet{ @@ -62239,19 +61475,23 @@ /turf/simulated/floor/plasteel, /area/engine/equipmentstorage) "cyi" = ( -/obj/item/crowbar, +/obj/machinery/washing_machine, +/obj/structure/sign/poster/contraband/communist_state{ + pixel_y = 32 + }, +/obj/effect/spawner/random_spawners/cobweb_left_rare, /turf/simulated/floor/plating, -/area/maintenance/consarea) +/area/maintenance/apmaint) "cyj" = ( -/obj/effect/spawner/window/reinforced, +/obj/machinery/washing_machine, /turf/simulated/floor/plating, -/area/maintenance/consarea) +/area/maintenance/apmaint) "cyk" = ( /obj/item/stack/sheet/metal{ amount = 10 }, /turf/simulated/floor/plating, -/area/maintenance/consarea) +/area/maintenance/apmaint) "cyl" = ( /obj/structure/cable{ d1 = 1; @@ -63054,10 +62294,6 @@ }, /turf/simulated/floor/plating, /area/maintenance/asmaint2) -"czM" = ( -/obj/structure/girder, -/turf/simulated/floor/plating, -/area/maintenance/consarea) "czN" = ( /obj/machinery/light/small{ dir = 8 @@ -63515,16 +62751,6 @@ /obj/item/card/id, /turf/simulated/floor/plating, /area/maintenance/genetics) -"cAF" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2"; - tag = "" - }, -/obj/effect/decal/warning_stripes/south, -/turf/simulated/floor/plating, -/area/maintenance/apmaint) "cAG" = ( /obj/machinery/door/airlock/maintenance{ req_access_txt = "12" @@ -63543,24 +62769,6 @@ }, /turf/simulated/floor/plating, /area/maintenance/asmaint2) -"cAH" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8"; - tag = "" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8"; - tag = "" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/plating, -/area/maintenance/apmaint) "cAI" = ( /obj/machinery/atmospherics/pipe/simple/visible/universal, /obj/structure/disposalpipe/segment{ @@ -63738,8 +62946,20 @@ /turf/simulated/floor/plating, /area/maintenance/asmaint2) "cBf" = ( -/obj/machinery/light/small{ - dir = 8 +/obj/item/poster/random_official, +/obj/item/poster/random_official{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/poster/random_official{ + pixel_y = 4 + }, +/obj/structure/rack{ + dir = 1 + }, +/obj/effect/spawner/lootdrop/maintenance{ + lootcount = 8; + name = "8maintenance loot spawner" }, /turf/simulated/floor/plating, /area/maintenance/apmaint) @@ -63761,9 +62981,12 @@ /turf/simulated/floor/engine, /area/maintenance/incinerator) "cBh" = ( -/obj/item/wrench, -/turf/simulated/floor/plating, -/area/maintenance/consarea) +/obj/structure/table_frame/wood, +/obj/item/stack/sheet/wood{ + amount = 2 + }, +/turf/simulated/floor/transparent/glass/reinforced, +/area/maintenance/apmaint) "cBi" = ( /obj/machinery/door/poddoor{ id_tag = "disvent"; @@ -63835,9 +63058,7 @@ }, /area/maintenance/incinerator) "cBo" = ( -/obj/machinery/light/small{ - dir = 4 - }, +/obj/machinery/hydroponics/soil, /turf/simulated/floor/plating, /area/maintenance/apmaint) "cBp" = ( @@ -64162,18 +63383,6 @@ }, /turf/simulated/floor/plasteel, /area/engine/controlroom) -"cBZ" = ( -/obj/machinery/alarm{ - pixel_y = 22 - }, -/obj/structure/table, -/obj/item/radio/electropack, -/obj/item/assembly/signaler, -/obj/item/healthanalyzer, -/turf/simulated/floor/plasteel{ - icon_state = "white" - }, -/area/toxins/misc_lab) "cCa" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -64427,7 +63636,6 @@ autoclose = 0; frequency = 1449; heat_proof = 1; - icon_state = "door_locked"; id_tag = "incinerator_airlock_exterior"; locked = 1; name = "Mixing Room Exterior Airlock"; @@ -64447,7 +63655,6 @@ autoclose = 0; frequency = 1449; heat_proof = 1; - icon_state = "door_locked"; id_tag = "incinerator_airlock_interior"; locked = 1; name = "Mixing Room Interior Airlock"; @@ -64470,12 +63677,6 @@ icon_state = "floorgrime" }, /area/maintenance/incinerator) -"cCA" = ( -/obj/item/stack/sheet/glass{ - amount = 10 - }, -/turf/simulated/floor/plating, -/area/maintenance/consarea) "cCB" = ( /obj/effect/landmark{ name = "xeno_spawn"; @@ -64527,24 +63728,6 @@ }, /turf/simulated/floor/plating, /area/maintenance/apmaint) -"cCG" = ( -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4"; - tag = "" - }, -/turf/simulated/floor/plating, -/area/maintenance/consarea) -"cCH" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - tag = "" - }, -/turf/simulated/floor/plating, -/area/maintenance/apmaint) "cCI" = ( /obj/structure/cable{ d1 = 4; @@ -65201,7 +64384,11 @@ /turf/simulated/floor/engine, /area/maintenance/incinerator) "cDQ" = ( -/obj/structure/closet/toolcloset, +/obj/machinery/light/small, +/obj/structure/chair/sofa/left{ + dir = 1; + name = "tatty old sofa" + }, /turf/simulated/floor/plating, /area/maintenance/apmaint) "cDR" = ( @@ -65217,15 +64404,18 @@ }, /area/construction) "cDS" = ( -/obj/machinery/light, -/turf/simulated/floor/plating, -/area/maintenance/consarea) -"cDT" = ( -/obj/item/stack/rods{ - amount = 8 +/obj/structure/chair{ + dir = 1 }, /turf/simulated/floor/plating, -/area/maintenance/consarea) +/area/maintenance/apmaint) +"cDT" = ( +/obj/structure/sign/poster/contraband/rebels_unite{ + pixel_y = -32 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/apmaint) "cDU" = ( /obj/machinery/atmospherics/binary/pump{ dir = 4; @@ -65297,14 +64487,9 @@ }, /area/construction) "cEb" = ( -/obj/structure/cable, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 24 - }, +/obj/structure/dresser, /turf/simulated/floor/plating, -/area/maintenance/consarea) +/area/maintenance/apmaint) "cEc" = ( /obj/structure/cable{ d1 = 1; @@ -65510,17 +64695,30 @@ }, /area/toxins/misc_lab) "cEv" = ( -/obj/machinery/light{ +/obj/structure/sign/poster/contraband/random{ + pixel_y = 32 + }, +/obj/effect/spawner/random_spawners/blood_often, +/turf/simulated/floor/wood{ + icon_state = "wood-broken" + }, +/area/maintenance/aft) +"cEw" = ( +/obj/structure/rack{ dir = 1 }, -/turf/simulated/floor/engine, -/area/engine/mechanic_workshop) -"cEw" = ( -/obj/machinery/camera{ - c_tag = "Mechanic's Workshop West" +/obj/item/reagent_containers/food/drinks/bottle/whiskey{ + pixel_x = -3; + pixel_y = -3 }, -/turf/simulated/floor/engine, -/area/engine/mechanic_workshop) +/obj/item/reagent_containers/food/drinks/bottle/whiskey, +/obj/item/reagent_containers/food/drinks/bottle/whiskey{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/effect/spawner/random_spawners/cobweb_left_rare, +/turf/simulated/floor/plating, +/area/maintenance/aft) "cEx" = ( /obj/effect/spawner/random_spawners/fungus_probably, /turf/simulated/wall, @@ -65578,127 +64776,37 @@ }, /area/toxins/xenobiology) "cEI" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/engine, -/area/engine/mechanic_workshop) -"cEJ" = ( -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; - icon_state = "space"; - layer = 4; - name = "EXTERNAL AIRLOCK"; - pixel_y = 32 - }, -/obj/machinery/mecha_part_fabricator/spacepod, -/obj/effect/decal/warning_stripes/yellow/hollow, -/obj/effect/decal/warning_stripes/west, -/turf/simulated/floor/plasteel, -/area/engine/mechanic_workshop) -"cEK" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/machinery/computer/podtracker, -/obj/effect/decal/warning_stripes/east, -/turf/simulated/floor/plasteel, -/area/engine/mechanic_workshop) -"cEL" = ( -/obj/machinery/requests_console{ - department = "Mechanic"; - departmentType = 2; - name = "Mechanic's Workshop Requests Console"; - pixel_y = 30 - }, -/obj/structure/disposalpipe/trunk, -/obj/machinery/disposal, -/turf/simulated/floor/plasteel, -/area/engine/mechanic_workshop) -"cEM" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - tag = "" - }, -/obj/machinery/camera{ - c_tag = "Mechanic's Workshop East" - }, -/obj/machinery/space_heater, -/turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "vault" - }, -/area/engine/mechanic_workshop) -"cEN" = ( -/obj/structure/cable{ - d2 = 4; - icon_state = "0-4" - }, -/obj/structure/reagent_dispensers/fueltank, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_y = 24 - }, -/turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "vault" - }, -/area/engine/mechanic_workshop) -"cEO" = ( -/obj/effect/spawner/window/reinforced, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - tag = "" +/obj/structure/table/reinforced, +/obj/effect/decal/cleanable/dirt, +/obj/effect/spawner/lootdrop/maintenance{ + lootcount = 2; + name = "2maintenance loot spawner" }, /turf/simulated/floor/plating, -/area/engine/mechanic_workshop) -"cEP" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - tag = "" +/area/maintenance/aft) +"cEJ" = ( +/obj/structure/chair/stool/bar, +/mob/living/simple_animal/mouse, +/turf/simulated/floor/wood{ + icon_state = "wood-broken" }, -/obj/structure/closet/emcloset, -/turf/simulated/floor/plasteel{ - dir = 8; - icon_state = "vault" +/area/maintenance/aft) +"cEK" = ( +/turf/simulated/floor/wood, +/area/maintenance/aft) +"cEL" = ( +/obj/structure/table/wood/poker, +/obj/structure/sign/poster/contraband/random{ + pixel_y = 32 }, -/area/engine/mechanic_workshop) -"cEQ" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - tag = "" +/turf/simulated/floor/plating, +/area/maintenance/aft) +"cEM" = ( +/obj/machinery/light/small{ + dir = 1 }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "yellowcorner" - }, -/area/hallway/primary/aft) -"cER" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - tag = "" - }, -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "yellowcorner" - }, -/area/hallway/primary/aft) +/turf/simulated/floor/plating, +/area/maintenance/aft) "cES" = ( /obj/item/clothing/mask/cigarette, /turf/simulated/floor/plating/airless, @@ -65707,65 +64815,10 @@ /obj/machinery/light/small, /turf/simulated/floor/plating/airless, /area/toxins/test_area) -"cEV" = ( -/obj/machinery/light{ - dir = 1 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - tag = "" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "yellowcorner" - }, -/area/hallway/primary/aft) -"cEW" = ( -/turf/simulated/wall/r_wall, -/area/engine/mechanic_workshop) -"cEX" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - tag = "" - }, -/obj/machinery/status_display{ - layer = 4; - pixel_y = 32 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "yellowcorner" - }, -/area/hallway/primary/aft) "cEY" = ( -/turf/simulated/wall, -/area/engine/mechanic_workshop) -"cEZ" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - tag = "" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "yellowcorner" - }, -/area/hallway/primary/aft) +/obj/structure/falsewall/reinforced, +/turf/simulated/floor/plating, +/area/maintenance/apmaint) "cFa" = ( /turf/simulated/wall/r_wall, /area/hallway/primary/aft) @@ -65787,18 +64840,12 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plating, /area/maintenance/asmaint2) -"cFd" = ( -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'KEEP CLEAR OF DOCKING AREA'."; - name = "KEEP CLEAR: DOCKING AREA" - }, -/turf/simulated/wall/r_wall, -/area/engine/mechanic_workshop) "cFe" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/maintenance{ - name = "Alternate Construction Area"; - req_access_txt = "12" +/obj/effect/decal/cleanable/dirt, +/obj/item/cultivator, +/obj/structure/sink{ + dir = 4; + pixel_x = 12 }, /turf/simulated/floor/plating, /area/maintenance/apmaint) @@ -65807,29 +64854,15 @@ dir = 8; icon_state = "pipe-j2" }, -/turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "yellowcorner" - }, -/area/hallway/primary/aft) +/turf/simulated/floor/plating, +/area/maintenance/aft) "cFg" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8"; - tag = "" - }, -/obj/structure/disposalpipe/junction{ +/obj/structure/disposalpipe/segment{ dir = 1; - icon_state = "pipe-y" + icon_state = "pipe-c" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "yellowcorner" - }, -/area/hallway/primary/aft) +/turf/simulated/floor/plating, +/area/maintenance/aft) "cFh" = ( /obj/machinery/atmospherics/unary/portables_connector{ dir = 4 @@ -65847,11 +64880,9 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "yellowcorner" - }, -/area/hallway/primary/aft) +/obj/structure/girder, +/turf/simulated/floor/plating, +/area/maintenance/aft) "cFj" = ( /obj/machinery/atmospherics/pipe/simple/hidden/cyan{ dir = 9; @@ -65863,26 +64894,18 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/light{ +/obj/machinery/light/small{ dir = 1 }, -/turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "yellowcorner" - }, -/area/hallway/primary/aft) +/obj/structure/closet/firecloset, +/turf/simulated/floor/plating, +/area/maintenance/aft) "cFl" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/camera{ - c_tag = "Aft Primary Hallway 3" - }, -/turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "yellowcorner" - }, -/area/hallway/primary/aft) +/turf/simulated/floor/plating, +/area/maintenance/aft) "cFm" = ( /obj/structure/table, /obj/item/multitool, @@ -65905,12 +64928,13 @@ layer = 4; pixel_y = 32 }, -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/plasteel{ - dir = 4; - icon_state = "yellowcorner" +/obj/machinery/door/airlock/maintenance{ + locked = 1; + name = "Assembly Line Maintenance"; + req_access_txt = "32" }, -/area/hallway/primary/aft) +/turf/simulated/floor/plating, +/area/maintenance/aft) "cFp" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -66170,105 +65194,47 @@ }, /area/toxins/misc_lab) "cFK" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 +/turf/simulated/floor/wood{ + icon_state = "wood-broken" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/engine, -/area/engine/mechanic_workshop) +/area/maintenance/aft) "cFL" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 +/obj/structure/table/reinforced, +/obj/item/phone{ + attack_verb = list("bounced a check off","checked-out","tipped"); + desc = "Also known as a cash register, or, more commonly, \"robbery magnet\". It's old and rusty, clearly non-functional and decorative only."; + icon = 'icons/obj/machines/pos.dmi'; + icon_state = "pos"; + name = "point of sale" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/turf/simulated/floor/engine, -/area/engine/mechanic_workshop) +/turf/simulated/floor/wood, +/area/maintenance/aft) "cFM" = ( -/obj/effect/decal/warning_stripes/west, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plasteel, -/area/engine/mechanic_workshop) +/obj/structure/table/wood/poker, +/obj/item/deck/cards, +/turf/simulated/floor/plating, +/area/maintenance/aft) "cFN" = ( -/obj/machinery/door/poddoor{ - density = 0; - icon_state = "open"; - id_tag = "mechpod"; - name = "Mechanic's Workshop Inner Door"; - opacity = 0 +/obj/structure/table/wood/poker, +/turf/simulated/floor/wood{ + broken = 1; + icon_state = "wood-broken" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/engine, -/area/engine/mechanic_workshop) -"cFO" = ( -/obj/machinery/hologram/holopad, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/decal/warning_stripes/east, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1; - initialize_directions = 11 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/plasteel, -/area/engine/mechanic_workshop) +/area/maintenance/aft) "cFP" = ( -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" +/obj/structure/table/wood/poker, +/obj/effect/spawner/lootdrop/maintenance{ + lootcount = 2; + name = "2maintenance loot spawner" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 +/turf/simulated/floor/wood{ + icon_state = "wood-broken5" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plasteel, -/area/engine/mechanic_workshop) +/area/maintenance/aft) "cFQ" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - icon_state = "dark" - }, -/area/engine/mechanic_workshop) -"cFR" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - icon_state = "dark" - }, -/area/engine/mechanic_workshop) +/obj/effect/spawner/random_spawners/blood_maybe, +/turf/simulated/floor/wood, +/area/maintenance/aft) "cFS" = ( /obj/structure/disposalpipe/segment{ dir = 8; @@ -66285,19 +65251,12 @@ }, /area/toxins/misc_lab) "cFT" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - tag = "" - }, /obj/machinery/door/firedoor, /obj/machinery/door/airlock/maintenance{ - name = "Alternate Construction Area"; req_access_txt = "12" }, /turf/simulated/floor/plating, -/area/maintenance/consarea) +/area/maintenance/apmaint) "cFU" = ( /obj/structure/window/reinforced, /obj/structure/table/reinforced, @@ -66317,17 +65276,14 @@ icon_state = "vault" }, /area/toxins/misc_lab) -"cFV" = ( -/obj/effect/decal/warning_stripes/west, -/turf/simulated/floor/engine/vacuum, -/area/engine/mechanic_workshop) -"cFW" = ( -/obj/structure/spacepoddoor, -/turf/simulated/floor/engine, -/area/engine/mechanic_workshop) "cFX" = ( -/turf/simulated/floor/engine, -/area/engine/mechanic_workshop) +/obj/machinery/light/small{ + dir = 1 + }, +/turf/simulated/floor/wood{ + icon_state = "wood-broken3" + }, +/area/maintenance/aft) "cFY" = ( /obj/structure/window/reinforced, /obj/structure/window/reinforced{ @@ -66374,29 +65330,6 @@ icon_state = "vault" }, /area/toxins/misc_lab) -"cGb" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1; - initialize_directions = 11 - }, -/turf/simulated/floor/plasteel, -/area/hallway/primary/aft) -"cGc" = ( -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plasteel, -/area/hallway/primary/aft) "cGd" = ( /obj/structure/window/reinforced, /obj/structure/table/reinforced, @@ -66406,13 +65339,6 @@ icon_state = "vault" }, /area/toxins/misc_lab) -"cGe" = ( -/obj/machinery/light{ - dir = 1; - on = 1 - }, -/turf/simulated/floor/engine, -/area/engine/mechanic_workshop) "cGf" = ( /obj/structure/cable{ d1 = 1; @@ -66420,39 +65346,12 @@ icon_state = "1-2"; tag = "" }, -/obj/effect/decal/warning_stripes/yellow, -/turf/simulated/floor/engine, -/area/engine/mechanic_workshop) -"cGg" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1; - initialize_directions = 11 +/obj/machinery/light/small{ + dir = 4; + pixel_y = 8 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/plasteel, -/area/hallway/primary/aft) -"cGh" = ( -/obj/structure/rack{ - dir = 1 - }, -/obj/item/extinguisher, -/obj/item/storage/belt/utility, -/obj/item/storage/toolbox/electrical, -/obj/item/storage/toolbox/mechanical{ - pixel_x = -2; - pixel_y = -1 - }, -/obj/item/radio{ - pixel_y = 6 - }, -/obj/machinery/firealarm{ - dir = 1; - pixel_y = -24 - }, -/turf/simulated/floor/plasteel, -/area/engine/mechanic_workshop) +/turf/simulated/floor/plating, +/area/maintenance/aft) "cGi" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -66463,24 +65362,13 @@ /turf/simulated/floor/plasteel, /area/hallway/primary/aft) "cGj" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - icon_state = "yellowcorner" - }, -/area/hallway/primary/aft) +/obj/structure/closet/emcloset, +/turf/simulated/floor/plating, +/area/maintenance/aft) "cGk" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1; - initialize_directions = 11 - }, -/turf/simulated/floor/plasteel, -/area/hallway/primary/aft) +/obj/structure/grille, +/turf/simulated/floor/plating, +/area/maintenance/aft) "cGl" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -66491,18 +65379,14 @@ }, /turf/simulated/floor/plasteel, /area/hallway/primary/aft) -"cGm" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/turf/simulated/floor/plasteel, -/area/hallway/primary/aft) "cGn" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 +/obj/machinery/door/airlock/maintenance{ + locked = 1; + name = "Assembly Line Maintenance"; + req_access_txt = "32" }, -/turf/simulated/floor/plasteel, -/area/hallway/primary/aft) +/turf/simulated/floor/plating, +/area/maintenance/aft) "cGo" = ( /obj/structure/cable{ d1 = 1; @@ -66676,60 +65560,35 @@ }, /area/toxins/xenobiology) "cGC" = ( -/obj/machinery/alarm{ - dir = 1; - pixel_y = -22 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/turf/simulated/floor/engine, -/area/engine/mechanic_workshop) +/obj/effect/spawner/random_spawners/blood_often, +/turf/simulated/floor/plating, +/area/maintenance/aft) "cGD" = ( -/obj/effect/decal/warning_stripes/southwest, -/turf/simulated/floor/plasteel, -/area/engine/mechanic_workshop) +/turf/simulated/floor/wood{ + broken = 1; + icon_state = "wood-broken" + }, +/area/maintenance/aft) "cGE" = ( -/obj/effect/decal/warning_stripes/southeast, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/wood{ + icon_state = "wood-broken6" }, -/turf/simulated/floor/plasteel, -/area/engine/mechanic_workshop) -"cGF" = ( -/obj/effect/decal/warning_stripes/south, -/turf/simulated/floor/plasteel, -/area/engine/mechanic_workshop) +/area/maintenance/aft) "cGG" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/plasteel{ - icon_state = "dark" +/obj/item/chair/stool{ + dir = 8 }, -/area/engine/mechanic_workshop) -"cGH" = ( -/obj/machinery/door/firedoor, -/obj/structure/table/reinforced, -/obj/machinery/door/window/westright{ - name = "Mechanic's Desk"; - req_access = null; - req_access_txt = "70" +/obj/effect/spawner/lootdrop/maintenance{ + lootcount = 8; + name = "8maintenance loot spawner" }, -/obj/machinery/cell_charger, -/turf/simulated/floor/plasteel{ - icon_state = "dark" - }, -/area/engine/mechanic_workshop) +/turf/simulated/floor/plating, +/area/maintenance/aft) "cGI" = ( -/obj/structure/chair/office/light{ - dir = 4 - }, -/obj/effect/landmark/start{ - name = "Mechanic" - }, -/turf/simulated/floor/plasteel{ - icon_state = "dark" - }, -/area/engine/mechanic_workshop) +/obj/machinery/slot_machine, +/turf/simulated/floor/plating, +/area/maintenance/aft) "cGJ" = ( /obj/machinery/atmospherics/unary/portables_connector{ dir = 4 @@ -66762,19 +65621,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/wood, /area/medical/psych) -"cGM" = ( -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4"; - tag = "" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plasteel{ - icon_state = "yellowcorner" - }, -/area/hallway/primary/aft) "cGN" = ( /obj/machinery/meter, /obj/machinery/atmospherics/pipe/manifold/hidden/yellow{ @@ -66782,32 +65628,6 @@ }, /turf/simulated/wall, /area/engine/controlroom) -"cGO" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - tag = "" - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/turf/simulated/floor/plasteel{ - icon_state = "yellowcorner" - }, -/area/hallway/primary/aft) -"cGP" = ( -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8"; - tag = "" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plasteel{ - icon_state = "yellowcorner" - }, -/area/hallway/primary/aft) "cGQ" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/cable{ @@ -66858,10 +65678,10 @@ }, /area/gateway) "cGU" = ( +/obj/effect/decal/warning_stripes/yellow, /obj/structure/plasticflaps{ opacity = 1 }, -/obj/effect/decal/warning_stripes/yellow/hollow, /turf/simulated/floor/plasteel, /area/assembly/assembly_line) "cGV" = ( @@ -66876,12 +65696,6 @@ icon_state = "dark" }, /area/gateway) -"cGW" = ( -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plasteel{ - icon_state = "yellowcorner" - }, -/area/hallway/primary/aft) "cGX" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -66973,14 +65787,6 @@ icon_state = "neutralfull" }, /area/engine/chiefs_office) -"cHc" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/turf/simulated/floor/plasteel{ - icon_state = "yellowcorner" - }, -/area/hallway/primary/aft) "cHd" = ( /obj/structure/closet, /turf/simulated/floor/plating, @@ -67206,23 +66012,17 @@ }, /area/toxins/xenobiology) "cHB" = ( -/obj/machinery/door/poddoor{ - density = 0; - icon_state = "open"; - id_tag = "mechpod"; - name = "Mechanic's Workshop Inner Door"; - opacity = 0 +/obj/effect/spawner/random_spawners/blood_maybe, +/turf/simulated/floor/wood{ + icon_state = "wood-broken3" }, -/turf/simulated/floor/engine, -/area/engine/mechanic_workshop) +/area/maintenance/aft) "cHC" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 +/obj/item/chair/stool{ + dir = 8 }, -/turf/simulated/floor/plasteel{ - icon_state = "dark" - }, -/area/engine/mechanic_workshop) +/turf/simulated/floor/plating, +/area/maintenance/aft) "cHD" = ( /turf/simulated/floor/plasteel, /area/hallway/primary/aft) @@ -67233,29 +66033,11 @@ icon_state = "1-2"; tag = "" }, -/obj/machinery/door/firedoor, /obj/machinery/door/airlock/maintenance{ req_access_txt = "12" }, /turf/simulated/floor/plating, /area/maintenance/apmaint) -"cHF" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2"; - tag = "" - }, -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/maintenance{ - icon_state = "door_locked"; - locked = 1; - name = "Assembly Line Maintenance"; - req_access_txt = "32" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/assembly/assembly_line) "cHG" = ( /obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel, @@ -67266,17 +66048,14 @@ }, /turf/simulated/floor/plasteel, /area/hallway/primary/aft) -"cHI" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/plasteel, -/area/hallway/primary/aft) "cHJ" = ( /obj/structure/disposalpipe/segment{ dir = 8; icon_state = "pipe-c" }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, /turf/simulated/floor/plasteel, /area/hallway/primary/aft) "cHK" = ( @@ -67371,17 +66150,9 @@ /area/engine/break_room) "cHR" = ( /obj/structure/disposalpipe/segment, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2"; - tag = "" - }, /obj/machinery/door/airlock/maintenance{ req_access_txt = "12" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plating, /area/maintenance/apmaint) "cHS" = ( @@ -67782,10 +66553,6 @@ icon_state = "white" }, /area/toxins/misc_lab) -"cIG" = ( -/obj/machinery/light, -/turf/simulated/floor/engine, -/area/engine/mechanic_workshop) "cIH" = ( /obj/structure/table/reinforced, /obj/item/taperecorder, @@ -67797,32 +66564,14 @@ icon_state = "white" }, /area/toxins/misc_lab) -"cII" = ( -/obj/structure/spacepoddoor, -/obj/machinery/door/poddoor/multi_tile/three_tile_ver{ - id_tag = "mechpodbayouter"; - req_access_txt = "70" - }, -/turf/simulated/floor/engine, -/area/engine/mechanic_workshop) "cIJ" = ( -/obj/structure/spacepoddoor, -/obj/machinery/door/poddoor/multi_tile/three_tile_ver{ - id_tag = "mechpodbay"; - req_access_txt = "70" - }, -/turf/simulated/floor/engine, -/area/engine/mechanic_workshop) +/turf/simulated/wall/rust, +/area/maintenance/aft) "cIK" = ( -/obj/machinery/door_control{ - desc = "A remote control-switch for the pod doors."; - id = "mechpodbay"; - name = "Pod Door Control"; - pixel_y = -24; - req_access_txt = "70" +/turf/simulated/floor/wood{ + icon_state = "wood-broken7" }, -/turf/simulated/floor/engine, -/area/engine/mechanic_workshop) +/area/maintenance/aft) "cIL" = ( /obj/structure/closet/l3closet/scientist, /obj/effect/decal/warning_stripes/southeast, @@ -67830,16 +66579,6 @@ icon_state = "white" }, /area/toxins/xenobiology) -"cIM" = ( -/obj/machinery/door_control{ - desc = "A remote control-switch for the pod doors."; - id = "mechpodbayouter"; - name = "Pod Door Control"; - pixel_y = -24; - req_access_txt = "70" - }, -/turf/simulated/floor/engine, -/area/engine/mechanic_workshop) "cIN" = ( /obj/structure/cable{ d1 = 1; @@ -67881,14 +66620,13 @@ /turf/simulated/floor/plating, /area/maintenance/aft) "cIQ" = ( +/obj/effect/decal/cleanable/dirt, /obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2"; + d1 = 4; + d2 = 8; + icon_state = "4-8"; tag = "" }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel, /area/assembly/assembly_line) "cIR" = ( @@ -67898,6 +66636,9 @@ name = "Engineering Main"; sortType = 4 }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, /turf/simulated/floor/plasteel, /area/hallway/primary/aft) "cIS" = ( @@ -68060,17 +66801,6 @@ icon_state = "white" }, /area/toxins/xenobiology) -"cJf" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4"; - tag = "" - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plasteel, -/area/assembly/assembly_line) "cJg" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/unary/vent_pump/on{ @@ -68093,36 +66823,6 @@ }, /turf/simulated/floor/plasteel, /area/assembly/assembly_line) -"cJj" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/engineering/glass{ - icon_state = "door_locked"; - locked = 1; - name = "Assembly Line (KEEP OUT)"; - req_access_txt = "32" - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/plasteel, -/area/assembly/assembly_line) -"cJk" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/plasteel, -/area/hallway/primary/aft) -"cJl" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - dir = 1; - icon_state = "yellowcorner" - }, -/area/hallway/primary/aft) "cJm" = ( /obj/structure/cable{ d1 = 1; @@ -68137,16 +66837,6 @@ }, /turf/simulated/floor/plasteel, /area/hallway/primary/aft) -"cJn" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4"; - tag = "" - }, -/obj/effect/decal/warning_stripes/north, -/turf/simulated/floor/plating, -/area/maintenance/aft) "cJo" = ( /obj/structure/cable{ d2 = 2; @@ -68472,10 +67162,6 @@ /obj/machinery/atmospherics/pipe/simple/insulated, /turf/simulated/floor/engine, /area/toxins/misc_lab) -"cJS" = ( -/obj/structure/grille, -/turf/simulated/floor/plating/airless, -/area/engine/mechanic_workshop) "cJT" = ( /obj/machinery/door/poddoor{ density = 0; @@ -68494,61 +67180,13 @@ }, /turf/simulated/floor/engine, /area/toxins/misc_lab) -"cJU" = ( -/obj/structure/grille, -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'KEEP CLEAR OF DOCKING AREA'."; - name = "KEEP CLEAR: DOCKING AREA" - }, -/turf/simulated/floor/plating/airless, -/area/engine/mechanic_workshop) "cJV" = ( -/turf/simulated/floor/plasteel, -/area/engine/mechanic_workshop) -"cJW" = ( -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/item/twohanded/required/kirbyplants, -/turf/simulated/floor/plasteel{ - icon_state = "dark" - }, -/area/engine/mechanic_workshop) -"cJX" = ( -/turf/simulated/floor/plasteel{ - icon_state = "dark" - }, -/area/engine/mechanic_workshop) -"cJY" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/engineering/glass{ - name = "Mechanic Workshop"; - req_access_txt = "70" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plasteel{ - icon_state = "dark" - }, -/area/engine/mechanic_workshop) +/obj/item/chair/stool, +/turf/simulated/floor/plating, +/area/maintenance/aft) "cJZ" = ( /turf/simulated/wall, /area/hallway/primary/aft) -"cKa" = ( -/obj/machinery/door/airlock/maintenance{ - name = "Mechanic Workshop Maintenance"; - req_access = null; - req_access_txt = "70" - }, -/turf/simulated/floor/plating, -/area/maintenance/aft) "cKb" = ( /turf/simulated/wall, /area/assembly/assembly_line) @@ -68569,18 +67207,12 @@ /turf/simulated/floor/plating, /area/maintenance/asmaint) "cKd" = ( -/obj/structure/table, -/obj/item/paper_bin{ - pixel_x = 1; - pixel_y = 9 +/obj/machinery/slot_machine, +/obj/structure/sign/poster/contraband/random{ + pixel_y = -32 }, -/obj/item/folder/yellow, -/obj/item/pen, -/obj/item/book/manual/sop_engineering, -/turf/simulated/floor/plasteel{ - icon_state = "dark" - }, -/area/engine/mechanic_workshop) +/turf/simulated/floor/plating, +/area/maintenance/aft) "cKe" = ( /obj/effect/spawner/window/reinforced, /obj/structure/disposalpipe/segment, @@ -68929,9 +67561,10 @@ /turf/simulated/floor/plating, /area/maintenance/aft) "cKK" = ( +/obj/item/pen, /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 + dir = 8 }, /turf/simulated/floor/plasteel, /area/assembly/assembly_line) @@ -69185,6 +67818,10 @@ d2 = 8; icon_state = "4-8" }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/aft) "cLn" = ( @@ -69199,23 +67836,15 @@ /obj/effect/decal/warning_stripes/north, /turf/simulated/floor/plating, /area/assembly/assembly_line) -"cLo" = ( +"cLp" = ( /obj/structure/cable{ d1 = 2; d2 = 8; icon_state = "2-8"; tag = "" }, -/turf/simulated/floor/plating, -/area/maintenance/aft) -"cLp" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 }, /turf/simulated/floor/plating, /area/maintenance/aft) @@ -69229,60 +67858,6 @@ icon_state = "white" }, /area/assembly/assembly_line) -"cLr" = ( -/obj/machinery/door_control{ - id = "mechpod"; - name = "Mechanic's Inner Door Control"; - pixel_y = -24; - req_access_txt = "70" - }, -/obj/structure/table, -/obj/item/stack/sheet/metal{ - amount = 50 - }, -/obj/item/stack/sheet/glass{ - amount = 50 - }, -/obj/item/stack/rods{ - amount = 50 - }, -/obj/item/stack/sheet/mineral/plasma{ - amount = 30 - }, -/turf/simulated/floor/plasteel, -/area/engine/mechanic_workshop) -"cLs" = ( -/obj/machinery/light_switch{ - name = "light switch "; - pixel_y = -22 - }, -/turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "dark" - }, -/area/engine/mechanic_workshop) -"cLt" = ( -/obj/machinery/alarm{ - dir = 1; - pixel_y = -22 - }, -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/machinery/vending/coffee, -/turf/simulated/floor/plasteel{ - icon_state = "dark" - }, -/area/engine/mechanic_workshop) -"cLu" = ( -/obj/item/radio/intercom{ - pixel_y = -28 - }, -/obj/machinery/computer/rdconsole/mechanics, -/turf/simulated/floor/plasteel{ - icon_state = "dark" - }, -/area/engine/mechanic_workshop) "cLv" = ( /obj/effect/decal/warning_stripes/north, /turf/simulated/floor/plasteel{ @@ -69306,14 +67881,8 @@ /turf/simulated/floor/plasteel, /area/assembly/assembly_line) "cLy" = ( -/obj/structure/rack{ - dir = 8; - layer = 2.9 - }, -/obj/effect/spawner/lootdrop/maintenance{ - lootcount = 2; - name = "2maintenance loot spawner" - }, +/obj/effect/decal/cleanable/dirt, +/mob/living/simple_animal/mouse, /turf/simulated/floor/plating, /area/maintenance/aft) "cLz" = ( @@ -69378,11 +67947,6 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plasteel, /area/assembly/assembly_line) -"cLI" = ( -/obj/item/stack/cable_coil, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plasteel, -/area/assembly/assembly_line) "cLJ" = ( /obj/structure/closet/fireaxecabinet{ pixel_y = -32 @@ -69406,6 +67970,9 @@ dir = 1; icon_state = "pipe-c" }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "yellowcorner" @@ -69674,22 +68241,14 @@ /obj/item/stack/sheet/cardboard, /turf/simulated/floor/plating, /area/maintenance/asmaint2) -"cMq" = ( +"cMr" = ( /obj/structure/cable{ d1 = 1; d2 = 2; icon_state = "1-2"; tag = "" }, -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/maintenance{ - req_access_txt = "12" - }, -/turf/simulated/floor/plating, -/area/maintenance/aft) -"cMr" = ( -/obj/structure/table, -/obj/effect/spawner/lootdrop/maintenance, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plating, /area/maintenance/aft) "cMs" = ( @@ -70295,11 +68854,6 @@ "cNG" = ( /turf/simulated/floor/plating, /area/assembly/assembly_line) -"cNH" = ( -/obj/item/pen, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plasteel, -/area/assembly/assembly_line) "cNI" = ( /obj/structure/cable{ d1 = 4; @@ -70418,6 +68972,15 @@ tag = "" }, /obj/structure/disposalpipe/segment, +/obj/machinery/door/airlock/maintenance{ + req_access_txt = "12" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + tag = "" + }, /turf/simulated/floor/plasteel{ icon_state = "yellowcorner" }, @@ -70428,12 +68991,7 @@ dir = 1; icon_state = "pipe-c" }, -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8"; - tag = "" - }, +/obj/machinery/vending/coffee, /turf/simulated/floor/plasteel{ icon_state = "yellowcorner" }, @@ -70622,7 +69180,9 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/mob/living/simple_animal/mouse, +/obj/machinery/door/airlock/maintenance{ + req_access_txt = "12" + }, /turf/simulated/floor/plating, /area/maintenance/aft) "cOr" = ( @@ -70632,20 +69192,6 @@ icon_state = "white" }, /area/assembly/assembly_line) -"cOs" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2"; - tag = "" - }, -/obj/machinery/door/airlock/maintenance{ - req_access_txt = "12" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/maintenance/aft) "cOt" = ( /obj/machinery/door/poddoor{ density = 0; @@ -70694,10 +69240,6 @@ }, /turf/simulated/floor/engine, /area/toxins/test_chamber) -"cOw" = ( -/obj/effect/spawner/window/reinforced, -/turf/simulated/wall, -/area/maintenance/aft) "cOx" = ( /obj/effect/spawner/window/reinforced, /turf/simulated/floor/plating, @@ -70803,23 +69345,22 @@ /turf/simulated/floor/plasteel, /area/atmos/distribution) "cOK" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2"; - tag = "" - }, /obj/machinery/navbeacon{ codes_txt = "patrol;next_patrol=AIE"; location = "AftH" }, +/obj/structure/disposalpipe/segment, /obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4"; + d1 = 4; + d2 = 8; + icon_state = "4-8"; tag = "" }, -/obj/structure/disposalpipe/segment, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, /turf/simulated/floor/plasteel, /area/hallway/primary/aft) "cOL" = ( @@ -71012,9 +69553,7 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/light/small{ - dir = 1 - }, +/obj/structure/girder, /turf/simulated/floor/plating, /area/maintenance/aft) "cPi" = ( @@ -71056,6 +69595,7 @@ icon_state = "1-8"; tag = "" }, +/obj/structure/closet/firecloset, /turf/simulated/floor/plating, /area/maintenance/aft) "cPm" = ( @@ -72333,6 +70873,7 @@ dir = 10; initialize_directions = 10 }, +/obj/structure/girder, /turf/simulated/floor/plating, /area/maintenance/aft) "cRJ" = ( @@ -73029,6 +71570,7 @@ icon_state = "4-8"; tag = "" }, +/obj/structure/closet/emcloset, /turf/simulated/floor/plating, /area/maintenance/aft) "cTd" = ( @@ -73527,11 +72069,9 @@ }, /obj/machinery/door/airlock/external{ frequency = 1379; - icon_state = "door_locked"; id_tag = "robotics_solar_outer"; locked = 1; name = "Engineering External Access"; - req_access = null; req_access_txt = "10;13" }, /turf/simulated/floor/plating, @@ -73575,11 +72115,9 @@ }, /obj/machinery/door/airlock/external{ frequency = 1379; - icon_state = "door_locked"; id_tag = "robotics_solar_inner"; locked = 1; name = "Engineering External Access"; - req_access = null; req_access_txt = "13" }, /turf/simulated/floor/plating, @@ -73763,7 +72301,6 @@ pixel_y = 4 }, /obj/item/megaphone, -/obj/item/lock_buster, /mob/living/simple_animal/parrot/Poly, /turf/simulated/floor/plasteel{ dir = 8; @@ -76247,10 +74784,6 @@ icon_state = "dark" }, /area/ai_monitored/storage/eva) -"dat" = ( -/obj/effect/spawner/window/reinforced, -/turf/simulated/floor/plating, -/area/escapepodbay) "dau" = ( /obj/machinery/power/terminal{ dir = 1 @@ -76323,18 +74856,6 @@ }, /turf/simulated/floor/plating, /area/maintenance/asmaint) -"daC" = ( -/obj/structure/grille, -/turf/simulated/floor/plating/airless, -/area/escapepodbay) -"daD" = ( -/obj/structure/grille, -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'KEEP CLEAR OF DOCKING AREA'."; - name = "KEEP CLEAR: DOCKING AREA" - }, -/turf/simulated/floor/plating/airless, -/area/escapepodbay) "daE" = ( /obj/structure/cable{ d1 = 4; @@ -76533,18 +75054,6 @@ }, /turf/simulated/floor/plasteel, /area/atmos) -"daZ" = ( -/obj/machinery/power/apc{ - dir = 8; - name = "Escape Podbay APC"; - pixel_x = -25 - }, -/obj/structure/cable{ - d2 = 4; - icon_state = "0-4" - }, -/turf/simulated/floor/plasteel, -/area/escapepodbay) "dba" = ( /obj/structure/lattice, /obj/machinery/atmospherics/pipe/simple/visible/yellow{ @@ -76645,25 +75154,6 @@ }, /turf/simulated/floor/plating, /area/maintenance/genetics) -"dbo" = ( -/obj/machinery/light_switch{ - pixel_x = -23 - }, -/turf/simulated/floor/plasteel, -/area/escapepodbay) -"dbp" = ( -/obj/machinery/door/airlock/maintenance{ - req_access_txt = "12" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2"; - tag = "" - }, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plating, -/area/maintenance/aft) "dbq" = ( /obj/structure/cable{ d1 = 1; @@ -76803,14 +75293,6 @@ }, /turf/simulated/floor/plating, /area/maintenance/asmaint) -"dbH" = ( -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/effect/decal/warning_stripes/yellow/hollow, -/obj/structure/reagent_dispensers/watertank, -/turf/simulated/floor/plasteel, -/area/escapepodbay) "dbJ" = ( /obj/machinery/power/terminal{ dir = 1 @@ -83894,6 +82376,10 @@ }, /turf/simulated/floor/bluegrid, /area/tcommsat/chamber) +"dUD" = ( +/obj/item/chair, +/turf/simulated/floor/plating, +/area/maintenance/apmaint) "dVs" = ( /obj/effect/spawner/window/reinforced, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -83917,6 +82403,17 @@ icon_state = "dark" }, /area/engine/engineering) +"efn" = ( +/obj/structure/safe, +/obj/item/soap/homemade, +/obj/item/key/janitor{ + name = "spare key"; + pixel_y = 7 + }, +/obj/item/bikehorn/rubberducky, +/obj/item/clothing/head/crown, +/turf/simulated/floor/plating, +/area/maintenance/apmaint) "egO" = ( /obj/machinery/meter, /obj/machinery/atmospherics/pipe/simple/visible{ @@ -83977,6 +82474,18 @@ }, /turf/simulated/floor/plating, /area/engine/supermatter) +"eIi" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/aft) "eJr" = ( /obj/effect/decal/warning_stripes/west, /obj/structure/cable/yellow{ @@ -84002,6 +82511,10 @@ }, /turf/simulated/wall, /area/maintenance/fsmaint) +"eLB" = ( +/obj/item/seeds/potato, +/turf/simulated/floor/plating, +/area/maintenance/apmaint) "eMw" = ( /obj/structure/cable{ d1 = 4; @@ -84038,6 +82551,10 @@ }, /turf/simulated/floor/plating, /area/engine/supermatter) +"eSr" = ( +/obj/item/stack/cable_coil, +/turf/simulated/floor/plating, +/area/maintenance/apmaint) "eTE" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/wall, @@ -84047,6 +82564,15 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plating, /area/crew_quarters/dorms) +"fbx" = ( +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plating, +/area/maintenance/aft) +"fcH" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/hydroponics/soil, +/turf/simulated/floor/plating, +/area/maintenance/apmaint) "fdg" = ( /obj/structure/reflector/single{ anchored = 1; @@ -84056,6 +82582,18 @@ icon_state = "dark" }, /area/engine/engineering) +"fea" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4"; + tag = "" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/turf/simulated/floor/plating, +/area/maintenance/aft) "fes" = ( /obj/structure/chair{ dir = 4 @@ -84077,6 +82615,23 @@ }, /turf/simulated/floor/plasteel, /area/crew_quarters/dorms) +"fjj" = ( +/obj/machinery/atmospherics/binary/valve, +/turf/simulated/floor/plating, +/area/maintenance/aft) +"fmi" = ( +/obj/effect/spawner/lootdrop/maintenance{ + lootcount = 3; + name = "3maintenance loot spawner" + }, +/turf/simulated/floor/plating, +/area/maintenance/apmaint) +"fmN" = ( +/obj/machinery/computer/account_database{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/apmaint) "fqV" = ( /obj/effect/decal/warning_stripes/north, /obj/machinery/atmospherics/pipe/simple/visible/cyan{ @@ -84108,6 +82663,16 @@ icon_state = "dark" }, /area/engine/engineering) +"fIO" = ( +/obj/effect/spawner/window/reinforced, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + tag = "" + }, +/turf/simulated/floor/plating, +/area/assembly/assembly_line) "fKd" = ( /obj/effect/spawner/window/reinforced/plasma, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ @@ -84115,6 +82680,31 @@ }, /turf/simulated/floor/plating, /area/engine/engineering) +"fKf" = ( +/obj/machinery/door/firedoor, +/obj/machinery/door/airlock/engineering/glass{ + locked = 1; + name = "Assembly Line (KEEP OUT)"; + req_access_txt = "32" + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/plasteel, +/area/assembly/assembly_line) +"fLH" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/light/small, +/turf/simulated/floor/plating, +/area/maintenance/aft) "fPU" = ( /obj/effect/decal/warning_stripes/west, /obj/machinery/atmospherics/pipe/simple/visible{ @@ -84123,6 +82713,13 @@ /obj/machinery/meter, /turf/simulated/floor/engine, /area/engine/engineering) +"fQq" = ( +/obj/effect/turf_decal/loading_area{ + dir = 8 + }, +/obj/effect/spawner/random_spawners/cobweb_right_frequent, +/turf/simulated/floor/plating, +/area/maintenance/apmaint) "fRL" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/item/radio/intercom{ @@ -84130,12 +82727,32 @@ }, /turf/simulated/floor/plasteel, /area/crew_quarters/dorms) +"fVJ" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/light/small{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/aft) "fWP" = ( /obj/machinery/atmospherics/pipe/simple/visible/red{ dir = 4 }, /turf/simulated/floor/engine, /area/engine/engineering) +"fXL" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/obj/machinery/atmospherics/unary/tank/air{ + dir = 4 + }, +/obj/effect/decal/warning_stripes/north, +/turf/simulated/floor/plating, +/area/maintenance/aft) "fYe" = ( /obj/machinery/light, /turf/simulated/floor/plasteel{ @@ -84165,6 +82782,12 @@ }, /turf/simulated/floor/plasteel, /area/crew_quarters/dorms) +"gjo" = ( +/obj/structure/reagent_dispensers/beerkeg/nuke{ + name = "Nanotrasen-brand nuclear fizz-sion explosive" + }, +/turf/simulated/floor/plating, +/area/maintenance/apmaint) "gmW" = ( /obj/machinery/power/emitter{ anchored = 1; @@ -84177,6 +82800,48 @@ }, /turf/simulated/floor/plating, /area/engine/engineering) +"gqA" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + tag = "" + }, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8"; + tag = "" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/turf/simulated/floor/plating, +/area/maintenance/aft) +"gyA" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + tag = "" + }, +/obj/machinery/power/apc{ + dir = 1; + name = "north bump"; + pixel_y = 24 + }, +/obj/structure/cable{ + d2 = 4; + icon_state = "0-4" + }, +/turf/simulated/floor/plating, +/area/maintenance/apmaint) "gAm" = ( /obj/structure/cable/yellow{ d1 = 2; @@ -84192,6 +82857,15 @@ icon_state = "dark" }, /area/engine/engineering) +"gAJ" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4"; + tag = "" + }, +/turf/simulated/floor/plating, +/area/maintenance/aft) "gCE" = ( /obj/structure/cable{ d1 = 1; @@ -84263,6 +82937,19 @@ }, /turf/simulated/floor/plating, /area/toxins/mixing) +"gSd" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + tag = "" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/grille, +/turf/simulated/floor/plating, +/area/maintenance/aft) "gSS" = ( /obj/machinery/atmospherics/pipe/simple/visible/yellow{ dir = 9 @@ -84280,6 +82967,11 @@ /obj/machinery/atmospherics/pipe/simple/visible/cyan, /turf/simulated/floor/engine, /area/engine/engineering) +"heB" = ( +/turf/simulated/floor/wood{ + icon_state = "wood-broken5" + }, +/area/maintenance/aft) "hsy" = ( /obj/machinery/atmospherics/pipe/simple/insulated{ dir = 4 @@ -84301,6 +82993,18 @@ }, /turf/simulated/floor/plating, /area/toxins/mixing) +"hum" = ( +/obj/machinery/door/airlock/vault{ + locked = 1; + name = "abandoned vault"; + req_access_txt = "32" + }, +/turf/simulated/floor/plating, +/area/maintenance/apmaint) +"hvi" = ( +/obj/effect/decal/warning_stripes/southeastcorner, +/turf/simulated/floor/plating, +/area/maintenance/apmaint) "hxf" = ( /obj/machinery/door/airlock/engineering/glass{ name = "Laser Room"; @@ -84324,6 +83028,13 @@ }, /turf/simulated/floor/bluegrid, /area/tcommsat/chamber) +"hAA" = ( +/obj/machinery/door/airlock/maintenance{ + req_access_txt = "12" + }, +/obj/effect/decal/cleanable/blood/oil, +/turf/simulated/floor/plating, +/area/maintenance/apmaint) "hNT" = ( /obj/effect/decal/warning_stripes/southeast, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -84346,6 +83057,14 @@ }, /turf/simulated/floor/engine, /area/engine/engineering) +"hSm" = ( +/obj/structure/table/wood, +/obj/effect/spawner/lootdrop/maintenance{ + lootcount = 2; + name = "2maintenance loot spawner" + }, +/turf/simulated/floor/transparent/glass/reinforced, +/area/maintenance/apmaint) "idF" = ( /obj/effect/decal/warning_stripes/south, /obj/machinery/atmospherics/trinary/filter/flipped{ @@ -84354,6 +83073,9 @@ }, /turf/simulated/floor/engine, /area/engine/engineering) +"iez" = ( +/turf/simulated/wall/rust, +/area/maintenance/apmaint) "ieI" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/binary/pump{ @@ -84406,6 +83128,10 @@ }, /turf/simulated/floor/plating, /area/engine/engineering) +"iui" = ( +/obj/effect/decal/warning_stripes/northeastcorner, +/turf/simulated/floor/plating, +/area/maintenance/apmaint) "ivi" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 5 @@ -84483,6 +83209,11 @@ /obj/machinery/atmospherics/pipe/simple/visible/green, /turf/simulated/floor/engine, /area/engine/engineering) +"iYO" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/light/small, +/turf/simulated/floor/plating, +/area/maintenance/aft) "iZs" = ( /obj/effect/spawner/window/reinforced, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -84506,6 +83237,15 @@ }, /turf/simulated/floor/plating, /area/engine/engineering) +"jfb" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/effect/spawner/random_barrier/possibly_welded_airlock, +/turf/simulated/floor/plating, +/area/maintenance/apmaint) "jnm" = ( /obj/structure/cable{ d1 = 1; @@ -84550,6 +83290,21 @@ }, /turf/simulated/floor/plating, /area/engine/engineering) +"jDJ" = ( +/obj/structure/rack{ + dir = 1 + }, +/obj/item/reagent_containers/food/drinks/bottle/whiskey{ + pixel_x = -3; + pixel_y = -3 + }, +/obj/item/reagent_containers/food/drinks/bottle/whiskey, +/obj/item/reagent_containers/food/drinks/bottle/whiskey{ + pixel_x = 3; + pixel_y = 3 + }, +/turf/simulated/floor/wood, +/area/maintenance/aft) "jMw" = ( /obj/machinery/door/airlock/titanium, /turf/simulated/floor/mineral/titanium, @@ -84561,6 +83316,12 @@ }, /turf/simulated/floor/plasteel, /area/crew_quarters/dorms) +"jQG" = ( +/obj/item/stack/sheet/wood{ + amount = 4 + }, +/turf/simulated/floor/transparent/glass/reinforced, +/area/maintenance/apmaint) "jRV" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 9 @@ -84598,6 +83359,16 @@ }, /turf/simulated/floor/engine, /area/engine/supermatter) +"jZu" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + tag = "" + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/aft) "kbU" = ( /obj/machinery/door/airlock/external{ frequency = 1379; @@ -84633,6 +83404,31 @@ }, /turf/simulated/floor/plasteel, /area/crew_quarters/dorms) +"klK" = ( +/obj/structure/table_frame/wood, +/obj/item/stack/sheet/wood{ + amount = 2 + }, +/obj/item/reagent_containers/food/drinks/drinkingglass/shotglass{ + pixel_x = -5; + pixel_y = 7 + }, +/turf/simulated/floor/plating, +/area/maintenance/apmaint) +"kmw" = ( +/obj/effect/decal/warning_stripes/west, +/obj/effect/spawner/random_spawners/blood_often, +/turf/simulated/floor/plating, +/area/maintenance/apmaint) +"krB" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/obj/structure/chair/sofa/right{ + name = "tatty old sofa" + }, +/turf/simulated/floor/plating, +/area/maintenance/apmaint) "kwt" = ( /obj/machinery/door/poddoor{ density = 0; @@ -84654,6 +83450,13 @@ }, /turf/simulated/floor/plating, /area/bridge) +"kIa" = ( +/obj/structure/rack{ + dir = 4 + }, +/obj/effect/spawner/lootdrop/maintenance, +/turf/simulated/floor/plating, +/area/maintenance/aft) "kIR" = ( /obj/structure/lattice/catwalk, /obj/machinery/atmospherics/pipe/simple/hidden/yellow, @@ -84720,6 +83523,18 @@ }, /turf/simulated/wall/r_wall, /area/engine/supermatter) +"kXY" = ( +/obj/structure/closet/crate{ + icon_state = "crateopen"; + name = "Silver Crate"; + opened = 1 + }, +/obj/item/paper{ + info = "I.O.U. some shinies - Mr V. Ox" + }, +/mob/living/simple_animal/hostile/scarybat, +/turf/simulated/floor/plating, +/area/maintenance/apmaint) "kYw" = ( /obj/structure/cable{ d1 = 4; @@ -84772,6 +83587,15 @@ }, /turf/simulated/floor/engine, /area/engine/supermatter) +"lxs" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/girder, +/turf/simulated/floor/plating, +/area/maintenance/apmaint) "lzm" = ( /obj/machinery/light/small{ dir = 8 @@ -84811,12 +83635,34 @@ }, /turf/simulated/floor/plasteel, /area/atmos) +"lMw" = ( +/obj/effect/decal/warning_stripes/east, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/apmaint) +"lPK" = ( +/obj/structure/table, +/obj/structure/bedsheetbin{ + pixel_x = -1; + pixel_y = 2 + }, +/turf/simulated/floor/plating, +/area/maintenance/apmaint) "lQS" = ( /obj/structure/shuttle/engine/propulsion/burst{ dir = 8 }, /turf/simulated/wall/mineral/titanium, /area/shuttle/pod_3) +"lUC" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + tag = "" + }, +/turf/simulated/wall, +/area/hallway/primary/aft) "lVr" = ( /obj/machinery/atmospherics/pipe/simple/visible/supply{ dir = 10 @@ -84838,6 +83684,24 @@ /obj/machinery/atmospherics/pipe/simple/visible/cyan, /turf/simulated/floor/engine, /area/engine/engineering) +"mar" = ( +/obj/structure/chair/sofa/left{ + name = "tatty old sofa" + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/apmaint) +"meF" = ( +/obj/machinery/light/small{ + dir = 4; + pixel_y = 8 + }, +/obj/effect/spawner/lootdrop/maintenance{ + lootcount = 3; + name = "3maintenance loot spawner" + }, +/turf/simulated/floor/plating, +/area/maintenance/apmaint) "mkE" = ( /obj/machinery/atmospherics/pipe/simple/hidden/yellow, /obj/machinery/atmospherics/unary/vent_scrubber/on{ @@ -84923,10 +83787,20 @@ }, /turf/simulated/wall/r_wall, /area/maintenance/fsmaint) +"nhn" = ( +/obj/structure/sign/poster/contraband/random{ + pixel_x = 32 + }, +/turf/simulated/floor/plating, +/area/maintenance/apmaint) "nic" = ( /obj/effect/spawner/window/reinforced/plasma, /turf/simulated/floor/plating, /area/engine/supermatter) +"nps" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/universal, +/turf/simulated/floor/plating, +/area/maintenance/aft) "nqX" = ( /obj/structure/table, /obj/item/paper{ @@ -84996,6 +83870,13 @@ }, /turf/simulated/floor/plating, /area/engine/engineering) +"nQG" = ( +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 9 + }, +/obj/effect/decal/warning_stripes/southeast, +/turf/simulated/floor/plating, +/area/maintenance/aft) "nSi" = ( /obj/effect/decal/warning_stripes/southwest, /obj/structure/closet/crate/can, @@ -85029,9 +83910,32 @@ }, /turf/simulated/floor/plasteel, /area/crew_quarters/dorms) +"ocN" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/maintenance/apmaint) "omz" = ( /turf/simulated/wall/r_wall, /area/engine/supermatter) +"orF" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/grille, +/turf/simulated/floor/plating, +/area/maintenance/aft) "oyv" = ( /obj/machinery/hologram/holopad, /turf/simulated/floor/plasteel{ @@ -85045,6 +83949,11 @@ }, /turf/simulated/floor/engine, /area/engine/engineering) +"oBH" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/bed, +/turf/simulated/floor/plating, +/area/maintenance/apmaint) "oBR" = ( /obj/structure/reflector/double{ anchored = 1 @@ -85104,6 +84013,20 @@ /obj/effect/decal/warning_stripes/southwest, /turf/simulated/floor/engine, /area/engine/engineering) +"pgF" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/maintenance/aft) "phw" = ( /obj/machinery/power/supermatter_crystal/engine, /turf/simulated/floor/engine, @@ -85124,6 +84047,16 @@ }, /turf/simulated/floor/plating, /area/engine/supermatter) +"pow" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4"; + tag = "" + }, +/obj/effect/spawner/random_barrier/obstruction, +/turf/simulated/floor/plating, +/area/maintenance/apmaint) "pwU" = ( /obj/effect/landmark/battle_mob_point, /turf/simulated/floor/engine, @@ -85165,6 +84098,11 @@ }, /turf/simulated/floor/plasteel, /area/engine/equipmentstorage) +"pNz" = ( +/obj/effect/decal/warning_stripes/northwestcorner, +/obj/effect/spawner/random_spawners/blood_often, +/turf/simulated/floor/plating, +/area/maintenance/apmaint) "pOj" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 6 @@ -85201,6 +84139,20 @@ }, /turf/space, /area/space/nearstation) +"pZQ" = ( +/obj/structure/closet/crate{ + icon_state = "crateopen"; + name = "Gold Crate"; + opened = 1 + }, +/obj/effect/decal/cleanable/cobweb, +/obj/item/storage/belt/fannypack/yellow, +/obj/effect/spawner/lootdrop/maintenance{ + lootcount = 8; + name = "8maintenance loot spawner" + }, +/turf/simulated/floor/plating, +/area/maintenance/apmaint) "qcg" = ( /obj/structure/cable{ d1 = 4; @@ -85212,6 +84164,28 @@ }, /turf/simulated/floor/engine, /area/engine/engineering) +"qdn" = ( +/obj/effect/spawner/window/reinforced, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/assembly/assembly_line) +"qhK" = ( +/obj/structure/chair/sofa/right{ + dir = 1; + name = "tatty old sofa" + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/apmaint) +"qjC" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/grille, +/turf/simulated/floor/plating, +/area/maintenance/aft) "qmX" = ( /obj/effect/decal/warning_stripes/east, /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ @@ -85248,6 +84222,22 @@ icon_state = "dark" }, /area/engine/engineering) +"qrr" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + tag = "" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/girder, +/turf/simulated/floor/plating, +/area/maintenance/aft) "qsT" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 9 @@ -85260,6 +84250,10 @@ }, /turf/simulated/wall/r_wall, /area/engine/engineering) +"qxh" = ( +/obj/structure/girder, +/turf/simulated/floor/plating, +/area/maintenance/aft) "qCB" = ( /obj/effect/decal/warning_stripes/west, /obj/structure/cable/yellow{ @@ -85280,6 +84274,22 @@ }, /turf/simulated/floor/plasteel, /area/crew_quarters/dorms) +"qGn" = ( +/obj/machinery/atmospherics/unary/tank/air{ + dir = 4 + }, +/obj/effect/decal/warning_stripes/south, +/turf/simulated/floor/plating, +/area/maintenance/aft) +"qHe" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/obj/machinery/mineral/mint{ + input_dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/apmaint) "qIn" = ( /obj/structure/table, /obj/item/stack/sheet/metal/fifty, @@ -85287,6 +84297,17 @@ icon_state = "dark" }, /area/engine/engineering) +"qJc" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/maintenance/aft) "qOo" = ( /obj/structure/chair{ dir = 4 @@ -85343,6 +84364,13 @@ }, /turf/simulated/floor/plasteel, /area/atmos) +"rEx" = ( +/obj/item/chair{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/apmaint) "rFd" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plasteel, @@ -85351,6 +84379,15 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/wall, /area/crew_quarters/dorms) +"rNJ" = ( +/obj/effect/decal/warning_stripes/southwestcorner, +/obj/effect/spawner/random_spawners/blood_often, +/turf/simulated/floor/plating, +/area/maintenance/apmaint) +"rNN" = ( +/obj/effect/spawner/random_spawners/grille_maybe, +/turf/simulated/floor/plating, +/area/maintenance/aft) "rTy" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 10 @@ -85392,6 +84429,14 @@ }, /turf/simulated/floor/engine, /area/engine/engineering) +"rZE" = ( +/mob/living/simple_animal/mouse, +/turf/simulated/floor/plating, +/area/maintenance/aft) +"saD" = ( +/obj/effect/spawner/random_barrier/wall_probably, +/turf/simulated/floor/plating, +/area/maintenance/apmaint) "scM" = ( /obj/effect/decal/warning_stripes/southwestcorner, /obj/structure/cable/yellow{ @@ -85426,6 +84471,24 @@ icon_state = "dark" }, /area/engine/engineering) +"swy" = ( +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plating, +/area/maintenance/apmaint) +"sAz" = ( +/obj/machinery/light/small, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/apmaint) +"sFz" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/effect/spawner/random_spawners/oil_maybe, +/turf/simulated/floor/plating, +/area/maintenance/apmaint) "sHt" = ( /turf/simulated/floor/engine, /area/holodeck/alphadeck) @@ -85463,6 +84526,11 @@ }, /turf/simulated/floor/plasteel, /area/crew_quarters/dorms) +"sZe" = ( +/obj/effect/decal/cleanable/cobweb2, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/maintenance/apmaint) "sZP" = ( /obj/machinery/power/emitter{ anchored = 1; @@ -85515,12 +84583,29 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/wall/r_wall, /area/engine/engineering) +"tAm" = ( +/obj/machinery/meter, +/obj/machinery/atmospherics/pipe/manifold/visible{ + dir = 4; + initialize_directions = 11 + }, +/obj/effect/decal/warning_stripes/northeast, +/turf/simulated/floor/plating, +/area/maintenance/aft) "tDn" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plasteel{ icon_state = "dark" }, /area/engine/engineering) +"tDB" = ( +/obj/effect/spawner/random_spawners/blood_maybe, +/turf/simulated/floor/plating, +/area/maintenance/apmaint) +"tGO" = ( +/obj/structure/girder, +/turf/simulated/floor/plating, +/area/maintenance/apmaint) "tPd" = ( /obj/machinery/embedded_controller/radio/airlock/airlock_controller{ id_tag = "engineering_east_airlock"; @@ -85553,6 +84638,11 @@ /obj/item/geiger_counter, /turf/simulated/floor/engine, /area/engine/engineering) +"ubb" = ( +/obj/structure/chair, +/obj/effect/mob_spawn/human/skeleton, +/turf/simulated/floor/plating, +/area/maintenance/apmaint) "ubz" = ( /obj/structure/table, /obj/item/rpd, @@ -85560,6 +84650,13 @@ icon_state = "dark" }, /area/engine/engineering) +"ubQ" = ( +/obj/machinery/light/small, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/wood{ + icon_state = "wood-broken5" + }, +/area/maintenance/aft) "ufc" = ( /obj/structure/cable{ d2 = 4; @@ -85593,6 +84690,16 @@ }, /turf/space, /area/space/nearstation) +"uPT" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/assembly/assembly_line) +"uTp" = ( +/obj/effect/spawner/random_barrier/obstruction, +/turf/simulated/floor/plating, +/area/maintenance/apmaint) "uTu" = ( /obj/structure/window/plasmareinforced{ dir = 8 @@ -85758,6 +84865,15 @@ icon_state = "dark" }, /area/engine/engineering) +"war" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/plasteel, +/area/hallway/primary/aft) "wbr" = ( /obj/structure/cable{ d1 = 2; @@ -85782,6 +84898,10 @@ }, /turf/simulated/floor/engine, /area/engine/supermatter) +"wlv" = ( +/obj/effect/spawner/random_barrier/possibly_welded_airlock, +/turf/simulated/floor/plating, +/area/maintenance/apmaint) "wnU" = ( /obj/machinery/alarm{ dir = 4; @@ -85791,6 +84911,17 @@ icon_state = "dark" }, /area/engine/engineering) +"wyI" = ( +/obj/item/stack/cable_coil, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + tag = "" + }, +/turf/simulated/floor/plasteel, +/area/assembly/assembly_line) "wEY" = ( /obj/structure/cable{ d1 = 4; @@ -85876,6 +85007,10 @@ icon_state = "dark" }, /area/engine/engineering) +"xvQ" = ( +/obj/effect/spawner/random_spawners/cobweb_left_frequent, +/turf/simulated/floor/plating, +/area/maintenance/apmaint) "xwz" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -85908,6 +85043,10 @@ }, /turf/simulated/floor/engine, /area/engine/engineering) +"xKx" = ( +/obj/structure/closet/emcloset, +/turf/simulated/floor/plating, +/area/maintenance/apmaint) "xOn" = ( /obj/effect/decal/warning_stripes/northeastcorner, /obj/machinery/atmospherics/pipe/simple/visible/yellow, @@ -85935,6 +85074,19 @@ }, /turf/simulated/floor/engine, /area/engine/engineering) +"xWX" = ( +/mob/living/simple_animal/hostile/scarybat, +/turf/simulated/floor/plating, +/area/maintenance/apmaint) +"ycV" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + tag = "" + }, +/turf/simulated/floor/plasteel, +/area/hallway/primary/aft) "ykt" = ( /obj/machinery/door/airlock/maintenance{ name = "Atmospherics Maintenance"; @@ -103347,10 +102499,10 @@ cAX cCy cAX cwx -aaa -aaa -aaa -aaa +aab +amh +aab +amh aab aaa cNM @@ -103860,11 +103012,11 @@ czQ cBa cCt cDL -cFd +cwx +aaa aaa aaa aaa -cJU aab aab cNF @@ -104117,11 +103269,11 @@ czJ cBb cCz cDX -cEW -cFV -cFV -cFV -cJS +cwx +aaa +aaa +aaa +aaa ayi aab cpz @@ -104374,11 +103526,11 @@ czK cBc cCB cDZ -cEW -cFW -cFW -cII -cEW +cwx +aaa +aaa +aaa +aaa aaa aab cNM @@ -104631,11 +103783,11 @@ czK cBd czJ cBb -cEW -cFX -cFX -cFX -cEW +cwx +aaa +aaa +aaa +aaa ayi aab aaa @@ -104888,11 +104040,11 @@ czR cBn cCD cDO -cEW -cGe -cFX -cIG -cEW +cwx +aaa +aaa +aaa +aaa ayi aab aaa @@ -105138,18 +104290,18 @@ aaa aab cng coL -coL +cqs cwx cwy cwx cwx cCC cwx -cEW -cFX -cFX -cFX -cEW +cwx +cOx +cOx +cOx +cOx cLi cLi cLi @@ -105401,17 +104553,17 @@ csu csu csu cCE -cAF +csu cHE +cMv cGf -cGf -cGf -cMq -cJn -cLi -cNA -cNB -cMr +cMv +cMv +cNN +cNC +kIa +fXL +qGn cLi aaa aaa @@ -105652,23 +104804,23 @@ aaa aab cng ctU -cgQ -cwz -cyg +coL +tGO +meF +coL +cqs +coL coL cgQ -csk -cqB -cEY -cFW -cFW +cLi +cLi cIJ -cEY +cLi cLm -dbh -cNB -cNB -cPu +nps +fjj +tAm +nQG cOx aaa aaa @@ -105909,22 +105061,22 @@ aaa aab cgQ ctU -cgQ -cgQ -cgQ -cqF -cgQ -cgQ -cgQ -cEY +coL +cvp +cwA +cvp +cvp +cwA +cwA +cvp cEw -cFX -cIM -cEY -cLm -cLi -cNC +jDJ cNB +cLi +qJc +cNB +cNB +cPu cND cLi aaa @@ -106166,21 +105318,21 @@ aaa aab cgQ ctV -cgQ -coL -coL coL +cvp +pZQ +cwz cBf -coL -cqz +oBH +fmN cEY cEv -cFX +cEK cIK -cEY -cLm cLi +qJc cLi +cIJ cLi cLi cLi @@ -106423,21 +105575,21 @@ aaa aab cgQ ctU -cgQ +ctN cwA +cqs +cqs +xWX coL -coL -cng -cng +fmi cvp -cEW cEI cFL cGC -cEY +cLi cLp cMr -cND +fea cLi aaa aaa @@ -106679,23 +105831,23 @@ bYP aab aab cgQ -ctU -cgQ -cwB -cwB +ocN coL -cng -aaa -aaa -cEW +cvp +cwB +ubb +gjo +cqs +sAz +cwA cFX cFK -cFX -cKa -cLo -cMv -cNN -cOw +heB +cLi +cLi +cLi +pgF +cOx aab aab aaa @@ -106937,21 +106089,21 @@ aaa aab cgQ ctU -cgQ -cwC coL +cvp +efn coL -cng -aaa -aaa -cEW -cHB +klK +eSr +coL +cvp +cNB cFN cHB -cEY -cEY -cEY -cLm +cGI +cLi +cGk +qJc cOx aaa aab @@ -107194,21 +106346,21 @@ cam aab cgQ ctU -cqF -coL -coL -coL -cng -aaa -aaa -cEW +cqs +cwA +sZe +hvi +lMw +iui +kXY +cvp cEJ cFM cGD cJV -bTm -cEY -cLm +cLi +cNB +qJc cLi aaa aaa @@ -107450,22 +106602,22 @@ cnm cam cgQ cgQ -ctU +jfb cgQ -cwC -coL -coL -cng -aaa -aaa -cEW +cvp +cwA +cvp +hum +cwA +cvp +cvp cEL cFP -cGF -cJV -cLr -cEY -cLm +cNB +ubQ +cLi +cNB +orF cLi aaa aab @@ -107705,24 +106857,24 @@ cfb cnG cnl cam -coL +xvQ coL ctU -cgQ -cwD -cwD coL -cng -aaa -aaa -cEW +cqF +cwD +rNJ +kmw +pNz +coL +cqF cEK -cFO +cNB cGE -cJV -cGh -cEY -cLm +cNB +dbh +cNB +qJc cOx aaa aaa @@ -107965,21 +107117,21 @@ cam cqA csk ctU -cgQ -cwE -cqB coL -cng -cng -cvp -cEW -cEN -cFR -cJX -cJW -cLt -cEY -cLm +cqF +coL +fcH +cqs +cBo +coL +cqF +cNB +cNB +cZw +cNB +dbh +cNB +qJc cOx aaa aab @@ -108222,21 +107374,21 @@ cam cqB csl ctU +ctN cgQ -cwB -cwB -coL +krB +eLB cBo coL cDQ -cEY +cgQ cEM cFQ cGG cHC -cLs -cEY -cLm +cLi +cNB +eIi cLi aab aab @@ -108479,21 +107631,21 @@ cam cgQ cgQ ctU -cvo -cvo -cvo -cvo -cvo +coL +cgQ +mar +coL +coL cFe -cvo -cEY -cEP -cFR +qhK +cgQ +cZw +cNB cGI cKd -cLu -cEY -cLm +cLi +cNA +fLH cLi aaa aaa @@ -108736,21 +107888,21 @@ cam cqE csm ctU -cvo -cwF -cwF -cvo -cwI -cwF -cwF -cEY -cEO -cJY -cGH -cEY -cEY -cEY -cLm +coL +iez +cgQ +saD +wlv +iez +cgQ +cgQ +dbh +dbh +cLi +cLi +cIJ +qxh +qJc cOx aaa aaa @@ -108992,22 +108144,22 @@ cam coP cqG cgQ -ctU -cvo -cwF +lxs +coL +cgQ cyi -cwI -cwI -cCA +coL +coL +coL cwF -cvo -cER -cGc -cnA -cJZ +iez +cZw +cNB +cNB +cNB cLy -cLi -cLm +cNB +qJc cOx cOx cQy @@ -109250,21 +108402,21 @@ cgQ cgQ cgQ ctU -cvo -cvo +coL +cgQ cwI -czM -cwI -cwI -cwF -cvo -cEQ -cGb -cGM -cOs -cIP -cIP -cKJ +coL +rEx +coL +cvm +cgQ +cNB +cZw +cNB +cNB +gAJ +jZu +gqA cIP cIP cOq @@ -109503,31 +108655,31 @@ ciw bYM cnX cnn -coS +pow cqH csu -coR -cvo -cwG -cwI -cwI -cwI -cwI +sFz +coL +cgQ +lPK +coL +hSm +cBh cDS -cvo -cEQ -cGi -cMV +cgQ +cEM +cZw cKb -cKf -cKf -cKf -cKf +cKb +fIO +cKb +qdn cKb cKb cRC cRC cUc +rZE cRG cNB cLi @@ -109761,30 +108913,30 @@ bYM cnX cnp coR +uTp +cgQ cgQ cgQ cgQ -cvo -cvo cyj -cvo +coL cBh -cwI +jQG cDT -cvo -cEV -cGg -cGO +iez +cNB +cNB cKb cJx -cLI -cNG +wyI cNG +uPT cOz cLq cRK cRC cRC +cNB cRG cWn cOx @@ -110018,32 +109170,32 @@ bYM coh coE cqs +coL cgQ -cso -csk +qHe cvo -cwH -cwI -cwI -cwI -cwI -cwI -cvo -cEZ +ctN +tDB +cqs +coL +dUD +cvm +cgQ +cNB cGk -cGP -cHF +cNK +cJx cIQ -cJf +cJx cKK -cNH cJx cLv cRE cSS cKb +cEM cRG -cNB +rNN cOx aaa aab @@ -110275,20 +109427,19 @@ bYM cgQ cnq cqr -cqF -csp -cqz -cvo -cwI +coL +cgQ +fQq +fmi +tGO cyk -czM -cwI -cCG +tGO +nhn +tDB cEb -cvo -cEX +cgQ +cZw cGj -cJZ cKb cLx cMt @@ -110299,7 +109450,8 @@ cLv cRE cTd cKb -cRG +rNN +qrr cNB cLi aab @@ -110531,22 +109683,21 @@ cgQ ckp cgQ cgQ -cnX -cgQ +gyA coL -ctW -cvo -cvo -cvo -cvo -cvo +iez +cgQ +cgQ +cgQ +cgQ +iez +cgQ cFT -cvo -cvo -cEQ -cGj +cgQ +cgQ +cZw +cNB cGU -ctT cLz cMt cMC @@ -110556,8 +109707,9 @@ cOr cOV cKb cKb -cRG cNB +qrr +rNN cLi cLi cLi @@ -110789,20 +109941,19 @@ cgQ cgQ cns cqt -cgQ -cgQ -cgQ -cgQ coL +coL +cyg +coL +xKx cyp czN -cyg -cCH coL -cqF -cEQ -cGj -cJZ +coL +coL +hAA +cZw +cNB cKb cLB cMt @@ -110813,11 +109964,12 @@ cKb cKb cKb cUh +rNN cRI dsU jSI cUX -cZw +iYO dar dbt ddG @@ -111046,20 +110198,19 @@ cly cly coF cqu -cly -cti -cti -cti -cly -cly -cti -cly -cAH -cly +swy +swy +swy +swy +swy +swy +swy +swy +swy +swy cHR cFg -cGm -cnA +cZw cKb cLA cMt @@ -111067,6 +110218,7 @@ cJx cNZ cLf cKb +cNB cPb dsG dsG @@ -111305,18 +110457,17 @@ cgS cgS cgS cgS -ctR -cvp +cgS +cgQ cng cng cng cng cng -cvp -cFa +cgQ +cgQ cFf -cGl -cGW +fbx cKe cLC cMt @@ -111324,6 +110475,7 @@ cJx cNZ cLd cKb +cNB cPj cSU cSU @@ -111562,7 +110714,7 @@ clR coY cqR csy -ctR +cgS aaa aaa aaa @@ -111570,10 +110722,9 @@ aaa aaa aaa aaa -cFa +cLi cFk -cGi -cnA +cNB cKf cLD cMw @@ -111581,6 +110732,7 @@ cME cMx cLf cKb +cNB cPj cSU cUk @@ -111819,7 +110971,7 @@ ckt coX cqI csx -ctR +cgS aaa cwP cyr @@ -111827,10 +110979,9 @@ cyr cyr cCM aaa -cFa +cLi cFi -cGi -cnA +cNB cKb cLE cMz @@ -111838,6 +110989,7 @@ cJx cJx cLn cKb +cNB cPj cSU cUj @@ -112076,7 +111228,7 @@ coM cpf cqJ csz -ctR +cgS aaa cwU cyt @@ -112084,10 +111236,9 @@ czT cBr cwU aaa -cFa +cLi cFl -cGi -cnA +cZw cKb cKb cMD @@ -112095,7 +111246,8 @@ cNG cNG cLf cKb -cPj +cNB +gSd cSU dsI pxP @@ -112333,7 +111485,7 @@ coH ckt cqK clR -ctR +cgS aaa cwQ cys @@ -112341,10 +111493,9 @@ czS cBq cCN aaa -cFa -cFi -cGi -cnA +cLi +qjC +cZw cKf cLD cJx @@ -112352,6 +111503,7 @@ cNG cOG cOE cKb +cNB cPj cSU dsH @@ -112590,18 +111742,17 @@ coT cjc cqL cmg -ctR -cvq +cgS +cvx cwV cyv czV cBk cwV -cvq -cvq -cFi -cGi -cnA +cvx +cvx +cFl +cNB cKf cLG cMx @@ -112609,6 +111760,7 @@ cJx cJx cOQ cKb +cEM cPh cSU dsK @@ -112856,9 +112008,8 @@ cBl cCO cEd cvx -cFi -cGg -cHc +cFl +cNB cKf cLF cJg @@ -112866,6 +112017,7 @@ cJx cJx cLD cKb +cNB cPj cSU dsK @@ -113113,9 +112265,8 @@ cAj cAJ cDW cvx -cFk -cGi -cnA +fVJ +cNB cKb cJx cJi @@ -113123,6 +112274,7 @@ cJx cJx cPv cKb +cNB cPj cSU dsL @@ -113370,9 +112522,8 @@ cBs cwO cEe cvx -cFi -cGi -cnA +cFl +cGk cKb cJx cJh @@ -113380,6 +112531,7 @@ cJx cJx cNG cKb +cGk cPj cSU dsK @@ -113627,9 +112779,8 @@ cBu cwO cEe cvx -cFi -cGi -cnA +cFl +cZw cKb cLH cJi @@ -113637,6 +112788,7 @@ cNw cNG cNG cKb +cNB cPj cSU dsK @@ -113886,14 +113038,14 @@ cvx cvx cFo cGn -cnA cKb cKb -cJj +fKf cNK cMU cNK cKb +cNB cPj cRR cFC @@ -114146,11 +113298,11 @@ cGl cHG cKk cLL -cJl cMG cMG cPL cJZ +cNB cPj cRR cUu @@ -114403,11 +113555,11 @@ cGi cHD cHH cIR -cJk cHG cHG +war cNS -dbp +dsG cPl cRR cQE @@ -114660,10 +113812,10 @@ cGp cHg cHL cHJ -cHI cHD cHD -cMV +ycV +lUC cJZ cRR cRR @@ -114916,8 +114068,8 @@ ctj cGo ctS cHK -cIS cJm +cIS cKL cOK cNT @@ -122022,7 +121174,7 @@ aoS apW aih aqX -asd +aqW atg ame avq @@ -122279,7 +121431,7 @@ aih aih aih aqX -asd +aqW akE amw avq @@ -122527,18 +121679,18 @@ aaa aaa aaa aaa +aaa +aaa +aaa +aaa +aaa aab -ajb -ajs -aeE -aeX -aky -aia -ajb -ajb -asF -ajb -ajb +aab +aqI +aqI +aqI +aqI +atG awl arR awl @@ -122785,17 +121937,17 @@ aaa aaa aaa aaa -ajb -ajt -ajw -ajw -ajw -aqa -als -akc -asH -atV -ajb +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +aab +atG apZ avq atr @@ -123042,17 +122194,17 @@ aaa aaa aaa aaa -ajb -ajv -ajw -ako -ajw -afL -aqJ -arG -asG -atU -ajb +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aab +atG apY arS aqc @@ -123299,17 +122451,17 @@ aaa aaa aaa aaa -ajb -aju -ajw -ajw -ajw -afN -aqK -arJ -asI -amg -ajb +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +atG aqc aqc aqc @@ -123556,17 +122708,17 @@ aaa aaa aaa aaa -ajb -ajw -ajw -ajw -ajw -aic -als -arI -amR -atW -ajb +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +atG aqb aCh ats @@ -123813,17 +122965,17 @@ aaa aaa aaa aaa -ajb -ajx -ajx -ajx -akz -ajb -ajb -ajb -amV -ajb -amx +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +atG apY arT aqc @@ -124070,16 +123222,16 @@ aaa aaa aaa aaa -alI -ajy -ajy -ajy -ajy -alI -aab -aab -aab -aab +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa atG aqc aqc @@ -124327,12 +123479,12 @@ aaa aaa aaa aaa -alJ aaa aaa aaa aaa -aqe +aaa +aaa aaa aaa aaa @@ -133926,7 +133078,7 @@ cuQ bGG cyR cAP -cBZ +aac cDw cDb cEt @@ -135703,12 +134855,12 @@ cZk cZk cZk daa -big -big -big -big -cjA aYS +bGH +bGH +bGH +bGH +bGH aaa dbP cgs @@ -135960,13 +135112,13 @@ bxX bSa bmm cYk -dat -baN -daZ -dbo -bcH aYS aaa +aaa +aaa +aaa +aaa +aaa dbP cgy cia @@ -136213,17 +135365,17 @@ bjR cYd bLr bNw -bPu -bPu -bPu +cWA +cWA +cWA bUT -bVI -bWR -bYp -cbb -dbH aYS aaa +aaa +aaa +aaa +aaa +aaa dbZ cgy cia @@ -136474,13 +135626,13 @@ boD bSc bmm dak -dat -baO -bYo -bcl -ccP aYS aaa +aaa +aaa +aaa +aaa +aaa dbX cgy cib @@ -136731,13 +135883,13 @@ cZm cZm cZm bmm -big -baG -bYq -bcI -ccS aYS aaa +aaa +aaa +aaa +aaa +aaa dbX cgs cgs @@ -136989,11 +136141,11 @@ bAK bjR dam aYS -baT -baT -baT -baT -aYS +aaa +aaa +aaa +aaa +aaa aaa dca dcc @@ -137246,11 +136398,11 @@ cZI cZn bmm aYS -baQ -baT -baT -bgc -aYS +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -137503,11 +136655,11 @@ cZH bmm dan aYS -baR -baT -baT -bgm -aYS +aaa +aaa +aaa +aaa +aaa aaa xWg qUv @@ -137760,11 +136912,11 @@ cZJ cZK daq aYS -baH -baT -baT -baT -aYS +aaa +aaa +aaa +aaa +aaa aaa pZO uDK @@ -138017,11 +137169,11 @@ bEG bEG bEG aYS -baT -baT -baT -baT -aYS +aaa +aaa +aaa +aaa +aaa aaa xWg nMi @@ -138273,12 +137425,12 @@ bjR aaa aaa aaa -aYS -baU -baU -baU -bgd -aYS +aaa +aaa +aaa +aaa +aaa +aaa aaa pZO uDK @@ -138530,12 +137682,12 @@ bjR aaa aaa aaa -daC -baV -baV -baV -baV -daC +aaa +aaa +aaa +aaa +aaa +aaa aaa xWg nMi @@ -138787,12 +137939,12 @@ bjR aaa aaa aaa -daD aaa aaa aaa aaa -daD +aaa +aaa aaa uxy xWg diff --git a/_maps/map_files/generic/Lavaland.dmm b/_maps/map_files/generic/Lavaland.dmm index 02e8c553456..09a796983da 100644 --- a/_maps/map_files/generic/Lavaland.dmm +++ b/_maps/map_files/generic/Lavaland.dmm @@ -886,7 +886,7 @@ }, /obj/effect/decal/cleanable/cobweb, /obj/machinery/computer/prisoner{ - dir = 1 + dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 6 @@ -4371,6 +4371,7 @@ "sO" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/computer/security{ + dir = 4; network = list("Labor Camp") }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -5275,7 +5276,7 @@ /area/mine/production) "VJ" = ( /obj/machinery/computer/secure_data{ - dir = 1 + dir = 8 }, /turf/simulated/floor/plasteel{ dir = 1; diff --git a/_maps/map_files/generic/centcomm.dmm b/_maps/map_files/generic/centcomm.dmm index 1acf135edc8..d7bf2abfaa2 100644 --- a/_maps/map_files/generic/centcomm.dmm +++ b/_maps/map_files/generic/centcomm.dmm @@ -651,7 +651,9 @@ /turf/simulated/floor/mineral/plastitanium/red, /area/shuttle/administration) "cH" = ( -/obj/machinery/computer/shuttle/ferry, +/obj/machinery/computer/shuttle/ferry{ + dir = 8 + }, /turf/simulated/floor/plating, /area/centcom/evac) "cI" = ( @@ -661,7 +663,9 @@ /turf/simulated/floor/plating/airless, /area/shuttle/specops) "cK" = ( -/obj/machinery/computer/shuttle/admin, +/obj/machinery/computer/shuttle/admin{ + dir = 8 + }, /turf/simulated/floor/plating, /area/centcom/evac) "cL" = ( @@ -1387,7 +1391,9 @@ /turf/simulated/floor/wood, /area/syndicate_mothership) "fi" = ( -/obj/machinery/computer/shuttle/syndicate/recall, +/obj/machinery/computer/shuttle/syndicate/recall{ + dir = 1 + }, /turf/simulated/floor/wood, /area/syndicate_mothership) "fj" = ( @@ -1411,8 +1417,8 @@ /turf/simulated/wall/indestructible/riveted, /area/centcom/gamma) "fn" = ( -/obj/machinery/computer/library/checkout, /obj/structure/table/wood, +/obj/machinery/computer/library/checkout, /turf/simulated/floor/engine/cult, /area/wizard_station) "fo" = ( @@ -2028,7 +2034,9 @@ /turf/simulated/floor/plasteel/dark, /area/syndicate_mothership) "hP" = ( -/obj/machinery/computer/communications, +/obj/machinery/computer/communications{ + dir = 8 + }, /turf/simulated/floor/mineral/plastitanium/red, /area/shuttle/administration) "hQ" = ( @@ -3500,7 +3508,9 @@ /turf/simulated/floor/carpet, /area/centcom/control) "mP" = ( -/obj/machinery/computer/pod/deathsquad, +/obj/machinery/computer/pod/deathsquad{ + dir = 8 + }, /turf/simulated/floor/plasteel/dark{ dir = 1; icon_state = "vault" @@ -3523,7 +3533,9 @@ /turf/simulated/floor/wood, /area/centcom/control) "mV" = ( -/obj/machinery/computer/card/centcom, +/obj/machinery/computer/card/centcom{ + dir = 8 + }, /turf/simulated/floor/wood, /area/centcom/control) "mW" = ( @@ -3588,7 +3600,9 @@ /turf/simulated/floor/carpet, /area/centcom/control) "nh" = ( -/obj/machinery/computer/communications, +/obj/machinery/computer/communications{ + dir = 8 + }, /turf/simulated/floor/carpet, /area/centcom/control) "nj" = ( @@ -4013,9 +4027,9 @@ /area/syndicate_mothership) "oB" = ( /obj/structure/closet/secure_closet/guncabinet, -/obj/item/ammo_box/shotgun/buck, -/obj/item/ammo_box/shotgun/buck, -/obj/item/ammo_box/shotgun/buck, +/obj/item/ammo_box/shotgun/beanbag, +/obj/item/ammo_box/shotgun/beanbag, +/obj/item/ammo_box/shotgun/beanbag, /obj/item/gun/projectile/shotgun/automatic/combat, /obj/item/gun/projectile/shotgun/automatic/combat, /obj/item/gun/projectile/shotgun/automatic/combat, @@ -4306,7 +4320,9 @@ d2 = 8; icon_state = "0-8" }, -/obj/machinery/computer/mech_bay_power_console, +/obj/machinery/computer/mech_bay_power_console{ + dir = 1 + }, /turf/simulated/floor/mineral/plastitanium/red, /area/shuttle/gamma/space) "pu" = ( @@ -4417,12 +4433,12 @@ /turf/simulated/floor/carpet, /area/centcom/specops) "pP" = ( +/obj/structure/table/wood, /obj/machinery/computer/security/telescreen{ desc = "Used for watching the Special Ops."; name = "Special Ops. Monitor"; network = list("ERT") }, -/obj/structure/table/wood, /turf/simulated/floor/carpet, /area/centcom/specops) "pQ" = ( @@ -4430,10 +4446,12 @@ /turf/simulated/floor/plasteel/dark, /area/centcom/specops) "pR" = ( -/obj/machinery/computer/station_alert, /obj/structure/sign/poster/official/nanotrasen_logo{ pixel_x = 32 }, +/obj/machinery/computer/station_alert{ + dir = 8 + }, /turf/simulated/floor/plasteel{ dir = 5; icon_state = "darkyellow" @@ -4940,7 +4958,9 @@ }, /area/centcom/evac) "rz" = ( -/obj/machinery/computer/communications, +/obj/machinery/computer/communications{ + dir = 8 + }, /turf/simulated/floor/plasteel/dark, /area/centcom/specops) "rA" = ( @@ -5185,10 +5205,12 @@ /turf/simulated/floor/wood, /area/centcom/evac) "sy" = ( -/obj/machinery/computer/secure_data, /obj/machinery/light/spot{ dir = 8 }, +/obj/machinery/computer/secure_data{ + dir = 4 + }, /turf/simulated/floor/mineral/plastitanium/red, /area/centcom/evac) "sz" = ( @@ -6168,7 +6190,9 @@ /turf/simulated/floor/plasteel/grimy, /area/centcom/specops) "vf" = ( -/obj/machinery/computer/secure_data, +/obj/machinery/computer/secure_data{ + dir = 4 + }, /turf/simulated/floor/plasteel, /area/centcom/control) "vg" = ( @@ -6185,7 +6209,9 @@ /turf/simulated/floor/plasteel, /area/admin) "vi" = ( -/obj/machinery/computer/med_data, +/obj/machinery/computer/med_data{ + dir = 8 + }, /turf/simulated/floor/plasteel, /area/centcom/control) "vj" = ( @@ -6235,11 +6261,11 @@ /turf/simulated/floor/plasteel, /area/admin) "vp" = ( -/obj/machinery/computer/mech_bay_power_console, /obj/structure/cable{ d2 = 2; icon_state = "0-2" }, +/obj/machinery/computer/mech_bay_power_console, /turf/simulated/floor/plasteel, /area/admin) "vr" = ( @@ -6257,24 +6283,33 @@ /area/admin) "vs" = ( /obj/machinery/computer/security{ + dir = 1; network = list("SS13","Telecomms","Research Outpost","Mining Outpost","ERT","CentComm","Thunderdome") }, /turf/simulated/floor/plasteel, /area/centcom/control) "vt" = ( -/obj/machinery/computer/station_alert, +/obj/machinery/computer/station_alert{ + dir = 1 + }, /turf/simulated/floor/plasteel, /area/centcom/control) "vu" = ( -/obj/machinery/computer/communications, +/obj/machinery/computer/communications{ + dir = 1 + }, /turf/simulated/floor/plasteel, /area/centcom/control) "vv" = ( -/obj/machinery/computer/robotics, +/obj/machinery/computer/robotics{ + dir = 1 + }, /turf/simulated/floor/plasteel, /area/centcom/control) "vw" = ( -/obj/machinery/computer/crew, +/obj/machinery/computer/crew{ + dir = 1 + }, /turf/simulated/floor/plasteel, /area/centcom/control) "vx" = ( @@ -6852,8 +6887,10 @@ /turf/simulated/floor/carpet, /area/admin) "wS" = ( -/obj/machinery/computer/secure_data, /obj/item/paper/sop, +/obj/machinery/computer/secure_data{ + dir = 8 + }, /turf/simulated/floor/carpet, /area/admin) "wT" = ( @@ -6881,11 +6918,15 @@ /turf/simulated/floor/carpet, /area/admin) "wY" = ( -/obj/machinery/computer/communications, +/obj/machinery/computer/communications{ + dir = 4 + }, /turf/simulated/floor/carpet, /area/admin) "wZ" = ( -/obj/machinery/computer/med_data, +/obj/machinery/computer/med_data{ + dir = 8 + }, /turf/simulated/floor/carpet, /area/admin) "xa" = ( @@ -7363,7 +7404,9 @@ }, /area/trader_station/sol) "yJ" = ( -/obj/machinery/computer/communications, +/obj/machinery/computer/communications{ + dir = 1 + }, /turf/simulated/floor/plasteel, /area/admin) "yK" = ( @@ -7380,7 +7423,9 @@ }, /area/trader_station/sol) "yP" = ( -/obj/machinery/computer/atmos_alert, +/obj/machinery/computer/atmos_alert{ + dir = 1 + }, /turf/simulated/floor/plasteel, /area/admin) "yQ" = ( @@ -7390,12 +7435,15 @@ }, /area/centcom/evac) "yR" = ( -/obj/machinery/computer/message_monitor, /obj/item/paper/monitorkey, +/obj/machinery/computer/message_monitor{ + dir = 1 + }, /turf/simulated/floor/plasteel, /area/admin) "yS" = ( /obj/machinery/computer/account_database{ + dir = 1; name = "Admin Accounts Database" }, /turf/simulated/floor/plasteel, @@ -7407,7 +7455,9 @@ /turf/simulated/floor/plating, /area/centcom/evac) "yU" = ( -/obj/machinery/computer/secure_data, +/obj/machinery/computer/secure_data{ + dir = 1 + }, /turf/simulated/floor/plasteel, /area/admin) "yV" = ( @@ -7452,7 +7502,9 @@ /turf/simulated/floor/plasteel, /area/admin) "zc" = ( -/obj/machinery/computer/arcade, +/obj/machinery/computer/arcade{ + dir = 8 + }, /turf/simulated/floor/mineral/titanium/blue, /area/centcom/evac) "zd" = ( @@ -7473,7 +7525,9 @@ /turf/simulated/floor/plasteel/dark, /area/admin) "zh" = ( -/obj/machinery/computer/card, +/obj/machinery/computer/card{ + dir = 4 + }, /turf/simulated/floor/mineral/plastitanium/red, /area/centcom/evac) "zi" = ( @@ -7944,7 +7998,9 @@ /turf/simulated/floor/plasteel, /area/admin) "AS" = ( -/obj/machinery/computer/teleporter, +/obj/machinery/computer/teleporter{ + dir = 1 + }, /turf/simulated/floor/plasteel, /area/admin) "AT" = ( @@ -8000,11 +8056,15 @@ /turf/simulated/floor/plasteel/dark, /area/syndicate_mothership) "Bb" = ( -/obj/machinery/computer/crew, +/obj/machinery/computer/crew{ + dir = 4 + }, /turf/simulated/floor/mineral/titanium/blue, /area/centcom/evac) "Bc" = ( -/obj/machinery/computer/communications, +/obj/machinery/computer/communications{ + dir = 8 + }, /turf/simulated/floor/mineral/titanium/blue, /area/centcom/evac) "Bd" = ( @@ -8040,6 +8100,7 @@ /area/centcom/evac) "Bj" = ( /obj/machinery/computer{ + dir = 1; name = "EMERGENCY SHUTTLE COMPUTER" }, /turf/simulated/floor/mineral/titanium/blue, @@ -8100,7 +8161,9 @@ /turf/simulated/floor/plasteel/dark, /area/syndicate_mothership) "Bv" = ( -/obj/machinery/computer/camera_advanced, +/obj/machinery/computer/camera_advanced{ + dir = 8 + }, /turf/simulated/floor/plasteel/dark, /area/syndicate_mothership) "Bw" = ( @@ -8117,6 +8180,7 @@ /area/syndicate_mothership) "By" = ( /obj/machinery/computer/shuttle/syndicate{ + dir = 1; name = "Nuclear Operatives Shuttle Console" }, /turf/simulated/floor/plasteel/dark, @@ -9000,7 +9064,9 @@ /turf/simulated/floor/mineral/titanium/blue, /area/shuttle/supply) "FJ" = ( -/obj/machinery/computer/secure_data, +/obj/machinery/computer/secure_data{ + dir = 4 + }, /turf/simulated/floor/plasteel{ dir = 10; icon_state = "darkred" @@ -9043,7 +9109,9 @@ }, /area/shuttle/escape) "Ga" = ( -/obj/machinery/computer/shuttle/ert, +/obj/machinery/computer/shuttle/ert{ + dir = 1 + }, /turf/simulated/floor/plasteel/dark, /area/centcom/specops) "Gd" = ( @@ -9119,7 +9187,9 @@ /turf/simulated/wall/mineral/plastitanium, /area/shuttle/syndicate_sit) "GD" = ( -/obj/machinery/computer/camera_advanced/shuttle_docker/syndicate/sst, +/obj/machinery/computer/camera_advanced/shuttle_docker/syndicate/sst{ + dir = 1 + }, /turf/simulated/floor/mineral/plastitanium/red, /area/shuttle/syndicate_elite) "GJ" = ( @@ -9376,10 +9446,12 @@ /turf/simulated/floor/plating, /area/tdome/tdome2) "Il" = ( -/obj/machinery/computer/communications, /obj/item/radio/intercom/specops{ pixel_y = -28 }, +/obj/machinery/computer/communications{ + dir = 1 + }, /turf/simulated/floor/mineral/plastitanium/red, /area/shuttle/specops) "Io" = ( @@ -9622,7 +9694,9 @@ /turf/simulated/floor/mineral/plastitanium/red/nitrogen, /area/shuttle/vox) "JH" = ( -/obj/machinery/computer/camera_advanced/shuttle_docker/syndicate/sit, +/obj/machinery/computer/camera_advanced/shuttle_docker/syndicate/sit{ + dir = 1 + }, /turf/simulated/floor/mineral/plastitanium/red, /area/shuttle/syndicate_sit) "JM" = ( @@ -9636,6 +9710,7 @@ /area/shuttle/administration) "JO" = ( /obj/machinery/computer/security{ + dir = 1; network = list("SS13","Research Outpost","Mining Outpost") }, /turf/simulated/floor/mineral/plastitanium/red, @@ -10628,7 +10703,9 @@ }, /area/shuttle/escape) "PU" = ( -/obj/machinery/computer/shuttle/sit, +/obj/machinery/computer/shuttle/sit{ + dir = 1 + }, /turf/simulated/floor/mineral/plastitanium/red, /area/shuttle/syndicate_sit) "PX" = ( @@ -11190,12 +11267,13 @@ }, /area/holodeck/source_thunderdomecourt) "TA" = ( -/obj/machinery/computer/security{ - network = list("SS13","Research Outpost","Mining Outpost","Telecomms") - }, /obj/structure/sign/poster/official/nanotrasen_logo{ pixel_x = -32 }, +/obj/machinery/computer/security{ + dir = 4; + network = list("SS13","Research Outpost","Mining Outpost","Telecomms") + }, /turf/simulated/floor/plasteel{ dir = 9; icon_state = "darkred" @@ -11379,7 +11457,9 @@ }, /area/holodeck/source_knightarena) "UJ" = ( -/obj/machinery/computer/shuttle/sst, +/obj/machinery/computer/shuttle/sst{ + dir = 1 + }, /turf/simulated/floor/mineral/plastitanium/red, /area/shuttle/syndicate_elite) "UK" = ( @@ -11495,6 +11575,7 @@ /area/shuttle/escape) "Vr" = ( /obj/machinery/computer/camera_advanced/shuttle_docker/admin{ + dir = 8; name = "NTV Argos shuttle navigation computer" }, /turf/simulated/floor/mineral/plastitanium/red, @@ -11568,7 +11649,9 @@ }, /area/shuttle/escape) "VS" = ( -/obj/machinery/computer/atmos_alert, +/obj/machinery/computer/atmos_alert{ + dir = 8 + }, /turf/simulated/floor/plasteel{ dir = 6; icon_state = "darkyellow" @@ -11600,6 +11683,7 @@ /area/shuttle/vox) "Wc" = ( /obj/machinery/computer/shuttle/admin{ + dir = 8; name = "NTV Argos shuttle console" }, /turf/simulated/floor/mineral/plastitanium/red, @@ -12043,7 +12127,6 @@ }, /area/shuttle/escape) "YV" = ( -/obj/machinery/computer/shuttle/trade/sol, /obj/machinery/door_control{ id = "soltrader_south"; name = "Trade Deposits Door"; @@ -12057,6 +12140,9 @@ pixel_x = 24; pixel_y = -8 }, +/obj/machinery/computer/shuttle/trade/sol{ + dir = 8 + }, /turf/simulated/floor/mineral/titanium/blue, /area/shuttle/trade/sol) "YW" = ( diff --git a/_maps/map_files/shuttles/admin_armory.dmm b/_maps/map_files/shuttles/admin_armory.dmm index d2873d05de7..766ce3e588c 100644 --- a/_maps/map_files/shuttles/admin_armory.dmm +++ b/_maps/map_files/shuttles/admin_armory.dmm @@ -565,11 +565,11 @@ layer = 2.9 }, /obj/structure/rack, -/obj/item/gun/projectile/shotgun/riot/buckshot{ +/obj/item/gun/projectile/shotgun/riot{ pixel_x = -3; pixel_y = 3 }, -/obj/item/gun/projectile/shotgun/riot/buckshot, +/obj/item/gun/projectile/shotgun/riot, /turf/simulated/floor/mineral/plastitanium/red, /area/shuttle/administration) "Gx" = ( @@ -705,11 +705,11 @@ layer = 2.9 }, /obj/structure/rack, -/obj/item/gun/projectile/shotgun/riot/buckshot{ +/obj/item/gun/projectile/shotgun/riot{ pixel_x = -3; pixel_y = 3 }, -/obj/item/gun/projectile/shotgun/riot/buckshot, +/obj/item/gun/projectile/shotgun/riot, /turf/simulated/floor/mineral/plastitanium/red, /area/shuttle/administration) "Ns" = ( @@ -914,11 +914,11 @@ /obj/structure/window/reinforced{ dir = 4 }, -/obj/item/gun/projectile/shotgun/riot/buckshot{ +/obj/item/gun/projectile/shotgun/riot{ pixel_x = -3; pixel_y = 3 }, -/obj/item/gun/projectile/shotgun/riot/buckshot, +/obj/item/gun/projectile/shotgun/riot, /turf/simulated/floor/mineral/plastitanium/red, /area/shuttle/administration) diff --git a/code/__DEFINES/_versions.dm b/code/__DEFINES/_versions.dm new file mode 100644 index 00000000000..83a18de6f73 --- /dev/null +++ b/code/__DEFINES/_versions.dm @@ -0,0 +1,2 @@ +/// Version of RUST-G that this codebase wants +#define RUST_G_VERSION "0.5.0-P" diff --git a/code/__DEFINES/access.dm b/code/__DEFINES/access.dm index ea319971a1b..d009770e399 100644 --- a/code/__DEFINES/access.dm +++ b/code/__DEFINES/access.dm @@ -66,8 +66,8 @@ #define ACCESS_PARAMEDIC 66 #define ACCESS_BLUESHIELD 67 #define ACCESS_SALVAGE_CAPTAIN 69 // Salvage ship captain's quarters -#define ACCESS_MECHANIC 70 -#define ACCESS_PILOT 71 +// #define ACCESS_MECHANIC 70 // AA07 2021-10-02 - Removed: Kept for history sake +// #define ACCESS_PILOT 71 // AA07 2021-10-02 - Removed: Kept for history sake #define ACCESS_NTREP 73 #define ACCESS_MAGISTRATE 74 #define ACCESS_MINISAT 75 diff --git a/code/__DEFINES/colors.dm b/code/__DEFINES/colors.dm index fc67f448526..f399915e3e7 100644 --- a/code/__DEFINES/colors.dm +++ b/code/__DEFINES/colors.dm @@ -114,3 +114,12 @@ #define PIPE_COLOR_GREEN "#00ff00" #define PIPE_COLOR_YELLOW "#ffcc00" #define PIPE_COLOR_PURPLE "#5c1ec0" + +///Main colors for UI themes +#define COLOR_THEME_MIDNIGHT "#6086A0" +#define COLOR_THEME_PLASMAFIRE "#FFB200" +#define COLOR_THEME_RETRO "#24CA00" +#define COLOR_THEME_SLIMECORE "#4FB259" +#define COLOR_THEME_OPERATIVE "#B8221F" +#define COLOR_THEME_GLASS "#75A4C4" +#define COLOR_THEME_CLOCKWORK "#CFBA47" diff --git a/code/__DEFINES/combat.dm b/code/__DEFINES/combat.dm index 5bda7374fba..d3655b164f5 100644 --- a/code/__DEFINES/combat.dm +++ b/code/__DEFINES/combat.dm @@ -10,6 +10,18 @@ #define STAMINA "stamina" #define BRAIN "brain" +//damage flags +#define MELEE "melee" +#define BULLET "bullet" +#define LASER "laser" +#define ENERGY "energy" +#define BOMB "bomb" +#define BIO "bio" +#define RAD "rad" +#define FIRE "fire" +#define ACID "acid" +#define MAGIC "magic" + #define STUN "stun" #define WEAKEN "weaken" #define PARALYZE "paralize" @@ -112,6 +124,17 @@ #define WEAPON_MEDIUM 2 #define WEAPON_HEAVY 3 +//His Grace. +#define HIS_GRACE_SATIATED 0 //He hungers not. If bloodthirst is set to this, His Grace is asleep. +#define HIS_GRACE_PECKISH 20 //Slightly hungry. +#define HIS_GRACE_HUNGRY 60 //Getting closer. Increases damage up to a minimum of 20. +#define HIS_GRACE_FAMISHED 100 //Dangerous. Increases damage up to a minimum of 25 and cannot be dropped. +#define HIS_GRACE_STARVING 120 //Incredibly close to breaking loose. Increases damage up to a minimum of 30. +#define HIS_GRACE_CONSUME_OWNER 140 //His Grace consumes His owner at this point and becomes aggressive. +#define HIS_GRACE_FALL_ASLEEP 160 //If it reaches this point, He falls asleep and resets. + +#define HIS_GRACE_FORCE_BONUS 4 //How much force is gained per kill. + #define EXPLODE_NONE 0 //Don't even ask me why we need this. #define EXPLODE_DEVASTATE 1 #define EXPLODE_HEAVY 2 diff --git a/code/__DEFINES/flags.dm b/code/__DEFINES/flags.dm index a68646224cf..7e0941d3e65 100644 --- a/code/__DEFINES/flags.dm +++ b/code/__DEFINES/flags.dm @@ -103,6 +103,7 @@ #define PASSBLOB 8 #define PASSMOB 16 #define LETPASSTHROW 32 +#define PASSFENCE 64 //turf-only flags #define NOJAUNT 1 diff --git a/code/__DEFINES/footstep.dm b/code/__DEFINES/footstep.dm index 469549b8827..65b96577386 100644 --- a/code/__DEFINES/footstep.dm +++ b/code/__DEFINES/footstep.dm @@ -7,12 +7,14 @@ #define FOOTSTEP_WATER "water" #define FOOTSTEP_LAVA "lava" #define FOOTSTEP_MEAT "meat" +#define FOOTSTEP_GLASS "glass" //barefoot sounds #define FOOTSTEP_WOOD_BAREFOOT "woodbarefoot" #define FOOTSTEP_WOOD_CLAW "woodclaw" #define FOOTSTEP_HARD_BAREFOOT "hardbarefoot" #define FOOTSTEP_HARD_CLAW "hardclaw" #define FOOTSTEP_CARPET_BAREFOOT "carpetbarefoot" +#define FOOTSTEP_GLASS_BAREFOOT "glassbarefoot" //misc footstep sounds #define FOOTSTEP_GENERIC_HEAVY "heavy" @@ -83,7 +85,11 @@ GLOBAL_LIST_INIT(footstep, list( 'sound/effects/footstep/lava2.ogg', 'sound/effects/footstep/lava3.ogg'), 100, 0), FOOTSTEP_MEAT = list(list( - 'sound/effects/meatslap.ogg'), 100, 0) + 'sound/effects/meatslap.ogg'), 100, 0), + FOOTSTEP_GLASS = list(list( + 'sound/effects/footstep/glass1.ogg', + 'sound/effects/footstep/glass2.ogg', + 'sound/effects/footstep/glass3.ogg'), 100, 1), )) //bare footsteps lists GLOBAL_LIST_INIT(barefootstep, list( @@ -127,6 +133,10 @@ GLOBAL_LIST_INIT(barefootstep, list( 'sound/effects/footstep/lava3.ogg'), 100, 0), FOOTSTEP_MEAT = list(list( 'sound/effects/meatslap.ogg'), 100, 0), + FOOTSTEP_GLASS_BAREFOOT = list(list( + 'sound/effects/footstep/glassbarefoot1.ogg', + 'sound/effects/footstep/glassbarefoot2.ogg', + 'sound/effects/footstep/glassbarefoot3.ogg'), 100, 1), )) //claw footsteps lists @@ -171,6 +181,10 @@ GLOBAL_LIST_INIT(clawfootstep, list( 'sound/effects/footstep/lava3.ogg'), 100, 0), FOOTSTEP_MEAT = list(list( 'sound/effects/meatslap.ogg'), 100, 0), + FOOTSTEP_GLASS_BAREFOOT = list(list( + 'sound/effects/footstep/glassbarefoot1.ogg', + 'sound/effects/footstep/glassbarefoot2.ogg', + 'sound/effects/footstep/glassbarefoot3.ogg'), 100, 1), )) //heavy footsteps list diff --git a/code/__DEFINES/genetics.dm b/code/__DEFINES/genetics.dm index f64022136ef..55701ed9166 100644 --- a/code/__DEFINES/genetics.dm +++ b/code/__DEFINES/genetics.dm @@ -74,7 +74,6 @@ //Species traits. #define NO_BLOOD "no_blood" -#define NOTRANSSTING "no_trans_sting" #define IS_WHITELISTED "whitelisted" #define LIPS "lips" #define EXOTIC_COLOR "exotic_blood_color" diff --git a/code/__DEFINES/hud.dm b/code/__DEFINES/hud.dm index 14e5fc674ce..ec3609c0554 100644 --- a/code/__DEFINES/hud.dm +++ b/code/__DEFINES/hud.dm @@ -25,8 +25,9 @@ #define PLANT_PEST_HUD "20"// Pest level #define PLANT_WEED_HUD "21"// Weed level #define DIAG_TRACK_HUD "22"// Mech tracking beacon -#define DIAG_PATH_HUD "23"//Bot path indicators -#define GLAND_HUD "24"//Gland indicators for abductors +#define DIAG_AIRLOCK_HUD "23" // Airlock shock overlay +#define DIAG_PATH_HUD "24"//Bot path indicators +#define GLAND_HUD "25"//Gland indicators for abductors //by default everything in the hud_list of an atom is an image //a value in hud_list with one of these will change that behavior @@ -38,7 +39,7 @@ #define DATA_HUD_SECURITY_ADVANCED 2 #define DATA_HUD_MEDICAL_BASIC 3 #define DATA_HUD_MEDICAL_ADVANCED 4 -#define DATA_HUD_DIAGNOSTIC 5 +#define DATA_HUD_DIAGNOSTIC_BASIC 5 #define DATA_HUD_DIAGNOSTIC_ADVANCED 6 #define DATA_HUD_HYDROPONIC 7 //antag HUD defines diff --git a/code/__DEFINES/is_helpers.dm b/code/__DEFINES/is_helpers.dm index 22ecbc1208e..33de7eb470a 100644 --- a/code/__DEFINES/is_helpers.dm +++ b/code/__DEFINES/is_helpers.dm @@ -18,8 +18,6 @@ #define ismecha(A) (istype(A, /obj/mecha)) -#define isspacepod(A) (istype(A, /obj/spacepod)) - #define iseffect(A) (istype(A, /obj/effect)) #define isclothing(A) (istype(A, /obj/item/clothing)) diff --git a/code/__DEFINES/job.dm b/code/__DEFINES/job.dm index 349d1b246be..62920ed2a40 100644 --- a/code/__DEFINES/job.dm +++ b/code/__DEFINES/job.dm @@ -7,58 +7,59 @@ #define JOBCAT_ENGSEC (1<<0) -#define JOB_CAPTAIN (1<<0) -#define JOB_HOS (1<<1) -#define JOB_WARDEN (1<<2) +#define JOB_CAPTAIN (1<<0) +#define JOB_HOS (1<<1) +#define JOB_WARDEN (1<<2) #define JOB_DETECTIVE (1<<3) -#define JOB_OFFICER (1<<4) +#define JOB_OFFICER (1<<4) #define JOB_CHIEF (1<<5) #define JOB_ENGINEER (1<<6) #define JOB_ATMOSTECH (1<<7) -#define JOB_AI (1<<8) -#define JOB_CYBORG (1<<9) -#define JOB_CENTCOM (1<<10) +#define JOB_AI (1<<8) +#define JOB_CYBORG (1<<9) +#define JOB_CENTCOM (1<<10) #define JOB_SYNDICATE (1<<11) +#define JOB_JUDGE (1<<12) #define JOBCAT_MEDSCI (1<<1) -#define JOB_RD (1<<0) +#define JOB_RD (1<<0) #define JOB_SCIENTIST (1<<1) -#define JOB_CHEMIST (1<<2) -#define JOB_CMO (1<<3) -#define JOB_DOCTOR (1<<4) -#define JOB_GENETICIST (1<<5) -#define JOB_VIROLOGIST (1<<6) +#define JOB_CHEMIST (1<<2) +#define JOB_CMO (1<<3) +#define JOB_DOCTOR (1<<4) +#define JOB_GENETICIST (1<<5) +#define JOB_VIROLOGIST (1<<6) #define JOB_PSYCHIATRIST (1<<7) -#define JOB_ROBOTICIST (1<<8) +#define JOB_ROBOTICIST (1<<8) #define JOB_PARAMEDIC (1<<9) -#define JOB_CORONER (1<<10) +#define JOB_CORONER (1<<10) #define JOBCAT_SUPPORT (1<<2) -#define JOB_HOP (1<<0) +#define JOB_HOP (1<<0) #define JOB_BARTENDER (1<<1) #define JOB_BOTANIST (1<<2) #define JOB_CHEF (1<<3) -#define JOB_JANITOR (1<<4) +#define JOB_JANITOR (1<<4) #define JOB_LIBRARIAN (1<<5) #define JOB_QUARTERMASTER (1<<6) #define JOB_CARGOTECH (1<<7) #define JOB_MINER (1<<8) -#define JOB_LAWYER (1<<9) +#define JOB_LAWYER (1<<9) #define JOB_CHAPLAIN (1<<10) #define JOB_CLOWN (1<<11) #define JOB_MIME (1<<12) #define JOB_CIVILIAN (1<<13) #define JOB_EXPLORER (1<<14) -#define JOBCAT_KARMA (1<<3) +#define JOBCAT_KARMA (1<<3) #define JOB_NANO (1<<0) -#define JOB_BLUESHIELD (1<<1) -#define JOB_BARBER (1<<3) -#define JOB_MECHANIC (1<<4) -#define JOB_BRIGDOC (1<<5) -#define JOB_JUDGE (1<<6) -#define JOB_PILOT (1<<7) +#define JOB_BLUESHIELD (1<<1) +#define JOB_BARBER (1<<3) +// #define JOB_MECHANIC (1<<4) // AA07 2021-10-02 - Removed: Kept for history sake +#define JOB_BRIGDOC (1<<5) +// #define JOB_JUDGE (1<<6) // AA07 2021-10-09 - Moved to ENGSEC (Non karma): Define kept for history sake +// #define JOB_PILOT (1<<7) // AA07 2021-10-02 - Removed: Kept for history sake diff --git a/code/__DEFINES/layers.dm b/code/__DEFINES/layers.dm index 4950beb7e74..bff5100982a 100644 --- a/code/__DEFINES/layers.dm +++ b/code/__DEFINES/layers.dm @@ -26,11 +26,13 @@ #define DISPOSAL_PIPE_LAYER 2.3 #define GAS_PIPE_HIDDEN_LAYER 2.35 #define WIRE_LAYER 2.4 +#define TRANSPARENT_TURF_LAYER 2.41 #define WIRE_TERMINAL_LAYER 2.45 #define GAS_SCRUBBER_LAYER 2.46 #define GAS_PIPE_VISIBLE_LAYER 2.47 #define GAS_FILTER_LAYER 2.48 #define GAS_PUMP_LAYER 2.49 +#define HOLOPAD_LAYER 2.491 #define CONVEYOR_LAYER 2.495 #define LOW_OBJ_LAYER 2.5 #define LOW_SIGIL_LAYER 2.52 diff --git a/code/__DEFINES/machines.dm b/code/__DEFINES/machines.dm index 521cf632388..f7647d731b3 100644 --- a/code/__DEFINES/machines.dm +++ b/code/__DEFINES/machines.dm @@ -25,7 +25,7 @@ #define AUTOLATHE 4 //Uses glass/metal only. #define CRAFTLATHE 8 //Uses fuck if I know. For use eventually. #define MECHFAB 16 //Remember, objects utilising this flag should have construction_time and construction_cost vars. -#define PODFAB 32 //Used by the spacepod part fabricator. Same idea as the mechfab +// #define PODFAB 32 //Used by the spacepod part fabricator. Same idea as the mechfab // AA 2021-10-02 - Removed. Kept for flag consistency. #define BIOGENERATOR 64 //Uses biomass #define SMELTER 128 //uses various minerals //Note: More then one of these can be added to a design but imprinter and lathe designs are incompatable. diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm index 2b95577ef3c..c6b7e9ac430 100644 --- a/code/__DEFINES/misc.dm +++ b/code/__DEFINES/misc.dm @@ -365,7 +365,7 @@ #define INVESTIGATE_BOMB "bombs" // The SQL version required by this version of the code -#define SQL_VERSION 25 +#define SQL_VERSION 27 // Vending machine stuff #define CAT_NORMAL 1 diff --git a/code/__DEFINES/preferences.dm b/code/__DEFINES/preferences.dm index ba292ab65f6..6e85ef5ba14 100644 --- a/code/__DEFINES/preferences.dm +++ b/code/__DEFINES/preferences.dm @@ -56,10 +56,11 @@ #define PREFTOGGLE_2_REVERB_DISABLE 512 #define PREFTOGGLE_2_FORCE_WHITE_RUNECHAT 1024 #define PREFTOGGLE_2_SIMPLE_STAT_PANEL 2048 +#define PREFTOGGLE_2_SEE_ITEM_OUTLINES 4096 -#define TOGGLES_2_TOTAL 4095 // If you add or remove a preference toggle above, make sure you update this define with the total value of the toggles combined. +#define TOGGLES_2_TOTAL 8191 // If you add or remove a preference toggle above, make sure you update this define with the total value of the toggles combined. -#define TOGGLES_2_DEFAULT (PREFTOGGLE_2_FANCYUI|PREFTOGGLE_2_ITEMATTACK|PREFTOGGLE_2_WINDOWFLASHING|PREFTOGGLE_2_RUNECHAT|PREFTOGGLE_2_DEATHMESSAGE|PREFTOGGLE_2_EMOTE_BUBBLE) +#define TOGGLES_2_DEFAULT (PREFTOGGLE_2_FANCYUI|PREFTOGGLE_2_ITEMATTACK|PREFTOGGLE_2_WINDOWFLASHING|PREFTOGGLE_2_RUNECHAT|PREFTOGGLE_2_DEATHMESSAGE|PREFTOGGLE_2_EMOTE_BUBBLE|PREFTOGGLE_2_SEE_ITEM_OUTLINES) // Sanity checks #if TOGGLES_TOTAL > 16777215 @@ -114,3 +115,11 @@ #define _2FA_ENABLED_IP "ENABLED_IP" /// Client will be prompted for 2FA always #define _2FA_ENABLED_ALWAYS "ENABLED_ALWAYS" + + +#define MAX_SAVE_SLOTS 30 // Save slots for regular players +#define MAX_SAVE_SLOTS_MEMBER 30 // Save slots for BYOND members + +#define TAB_CHAR 0 +#define TAB_GAME 1 +#define TAB_GEAR 2 diff --git a/code/__DEFINES/rust_g.dm b/code/__DEFINES/rust_g.dm index 6a331a6131f..4ee84eda941 100644 --- a/code/__DEFINES/rust_g.dm +++ b/code/__DEFINES/rust_g.dm @@ -1,80 +1,130 @@ +// rust_g.dm - DM API for rust_g extension library +// +// To configure, create a `rust_g.config.dm` and set what you care about from +// the following options: +// +// #define RUST_G "path/to/rust_g" +// Override the .dll/.so detection logic with a fixed path or with detection +// logic of your own. +// +// #define RUSTG_OVERRIDE_BUILTINS +// Enable replacement rust-g functions for certain builtins. Off by default. + #ifndef RUST_G -/// Locator for the RUSTG DLL or SO depending on system type. Override if needed. -#define RUST_G (world.system_type == UNIX ? "./librust_g.so" : "./rust_g.dll") +// Default automatic RUST_G detection. +// On Windows, looks in the standard places for `rust_g.dll`. +// On Linux, looks in `.`, `$LD_LIBRARY_PATH`, and `~/.byond/bin` for either of +// `librust_g.so` (preferred) or `rust_g` (old). + +/* This comment bypasses grep checks */ /var/__rust_g + +/proc/__detect_rust_g() + if (world.system_type == UNIX) + if (fexists("./librust_g.so")) + // No need for LD_LIBRARY_PATH badness. + return __rust_g = "./librust_g.so" + else if (fexists("./rust_g")) + // Old dumb filename. + return __rust_g = "./rust_g" + else if (fexists("[world.GetConfig("env", "HOME")]/.byond/bin/rust_g")) + // Old dumb filename in `~/.byond/bin`. + return __rust_g = "rust_g" + else + // It's not in the current directory, so try others + return __rust_g = "librust_g.so" + else + return __rust_g = "rust_g.dll" + +#define RUST_G (__rust_g || __detect_rust_g()) #endif -// Gets the version of RUSTG +/// Gets the version of rust_g /proc/rustg_get_version() return call(RUST_G, "get_version")() -// Defines for internal job subsystem // -#define RUSTG_JOB_NO_RESULTS_YET "NO RESULTS YET" -#define RUSTG_JOB_NO_SUCH_JOB "NO SUCH JOB" -#define RUSTG_JOB_ERROR "JOB PANICKED" +// Cellular Noise Operations // -// DMI related operations // +/** + * This proc generates a cellular automata noise grid which can be used in procedural generation methods. + * + * Returns a single string that goes row by row, with values of 1 representing an alive cell, and a value of 0 representing a dead cell. + * + * Arguments: + * * percentage: The chance of a turf starting closed + * * smoothing_iterations: The amount of iterations the cellular automata simulates before returning the results + * * birth_limit: If the number of neighboring cells is higher than this amount, a cell is born + * * death_limit: If the number of neighboring cells is lower than this amount, a cell dies + * * width: The width of the grid. + * * height: The height of the grid. + */ +#define rustg_cnoise_generate(percentage, smoothing_iterations, birth_limit, death_limit, width, height) \ + call(RUST_G, "cnoise_generate")(percentage, smoothing_iterations, birth_limit, death_limit, width, height) + +// DMI Operations // #define rustg_dmi_strip_metadata(fname) call(RUST_G, "dmi_strip_metadata")(fname) #define rustg_dmi_create_png(path, width, height, data) call(RUST_G, "dmi_create_png")(path, width, height, data) +#define rustg_dmi_resize_png(path, width, height, resizetype) call(RUST_G, "dmi_resize_png")(path, width, height, resizetype) -// Noise related operations // -#define rustg_noise_get_at_coordinates(seed, x, y) call(RUST_G, "noise_get_at_coordinates")(seed, x, y) - -// File related operations // +// File Operations // #define rustg_file_read(fname) call(RUST_G, "file_read")(fname) +#define rustg_file_exists(fname) call(RUST_G, "file_exists")(fname) #define rustg_file_write(text, fname) call(RUST_G, "file_write")(text, fname) #define rustg_file_append(text, fname) call(RUST_G, "file_append")(text, fname) #ifdef RUSTG_OVERRIDE_BUILTINS -#define file2text(fname) rustg_file_read(fname) -#define text2file(text, fname) rustg_file_append(text, fname) + #define file2text(fname) rustg_file_read("[fname]") + #define text2file(text, fname) rustg_file_append(text, "[fname]") #endif -// Git related operations // +// Git Operations // #define rustg_git_revparse(rev) call(RUST_G, "rg_git_revparse")(rev) #define rustg_git_commit_date(rev) call(RUST_G, "rg_git_commit_date")(rev) -// Hash related operations // +// Hashing Operations // #define rustg_hash_string(algorithm, text) call(RUST_G, "hash_string")(algorithm, text) #define rustg_hash_file(algorithm, fname) call(RUST_G, "hash_file")(algorithm, fname) +#define rustg_hash_generate_totp(seed) call(RUST_G, "generate_totp")(seed) +#define rustg_hash_generate_totp_tolerance(seed, tolerance) call(RUST_G, "generate_totp_tolerance")(seed, tolerance) #define RUSTG_HASH_MD5 "md5" #define RUSTG_HASH_SHA1 "sha1" #define RUSTG_HASH_SHA256 "sha256" #define RUSTG_HASH_SHA512 "sha512" +#define RUSTG_HASH_XXH64 "xxh64" +#define RUSTG_HASH_BASE64 "base64" #ifdef RUSTG_OVERRIDE_BUILTINS -#define md5(thing) (isfile(thing) ? rustg_hash_file(RUSTG_HASH_MD5, "[thing]") : rustg_hash_string(RUSTG_HASH_MD5, thing)) + #define md5(thing) (isfile(thing) ? rustg_hash_file(RUSTG_HASH_MD5, "[thing]") : rustg_hash_string(RUSTG_HASH_MD5, thing)) #endif -// Logging stuff // -#define rustg_log_write(fname, text) call(RUST_G, "log_write")(fname, text) -/proc/rustg_log_close_all() return call(RUST_G, "log_close_all")() - -// URL encoding stuff -#define rustg_url_encode(text) call(RUST_G, "url_encode")(text) -#define rustg_url_decode(text) call(RUST_G, "url_decode")(text) - -#ifdef RUSTG_OVERRIDE_BUILTINS -#define url_encode(text) rustg_url_encode(text) -#define url_decode(text) rustg_url_decode(text) -#endif - -// HTTP library stuff // +// HTTP Operations // #define RUSTG_HTTP_METHOD_GET "get" #define RUSTG_HTTP_METHOD_PUT "put" #define RUSTG_HTTP_METHOD_DELETE "delete" #define RUSTG_HTTP_METHOD_PATCH "patch" #define RUSTG_HTTP_METHOD_HEAD "head" #define RUSTG_HTTP_METHOD_POST "post" - -// Commented out because this thing locks up the entire DD process when you use it -// DO NOT USE FOR THE LOVE OF GOD -// #define rustg_http_request_blocking(method, url, body, headers) call(RUST_G, "http_request_blocking")(method, url, body, headers) -#define rustg_http_request_async(method, url, body, headers) call(RUST_G, "http_request_async")(method, url, body, headers) +#define rustg_http_request_blocking(method, url, body, headers, options) call(RUST_G, "http_request_blocking")(method, url, body, headers, options) +#define rustg_http_request_async(method, url, body, headers, options) call(RUST_G, "http_request_async")(method, url, body, headers, options) #define rustg_http_check_request(req_id) call(RUST_G, "http_check_request")(req_id) /proc/rustg_create_async_http_client() return call(RUST_G, "start_http_client")() /proc/rustg_close_async_http_client() return call(RUST_G, "shutdown_http_client")() -// SQL stuff // +// Jobs Subsystem Operations // +#define RUSTG_JOB_NO_RESULTS_YET "NO RESULTS YET" +#define RUSTG_JOB_NO_SUCH_JOB "NO SUCH JOB" +#define RUSTG_JOB_ERROR "JOB PANICKED" + +// JSON Operations // +#define rustg_json_is_valid(text) (call(RUST_G, "json_is_valid")(text) == "true") + +// Logging Operations // +#define rustg_log_write(fname, text) call(RUST_G, "log_write")(fname, text) +/proc/rustg_log_close_all() return call(RUST_G, "log_close_all")() + +// Noise Operations // +#define rustg_noise_get_at_coordinates(seed, x, y) call(RUST_G, "noise_get_at_coordinates")(seed, x, y) + +// SQL Opeartions // #define rustg_sql_connect_pool(options) call(RUST_G, "sql_connect_pool")(options) #define rustg_sql_query_async(handle, query, params) call(RUST_G, "sql_query_async")(handle, query, params) #define rustg_sql_query_blocking(handle, query, params) call(RUST_G, "sql_query_blocking")(handle, query, params) @@ -82,8 +132,19 @@ #define rustg_sql_disconnect_pool(handle) call(RUST_G, "sql_disconnect_pool")(handle) #define rustg_sql_check_query(job_id) call(RUST_G, "sql_check_query")("[job_id]") -// toml2json stuff // -#define rustg_toml2json(tomlfile) call(RUST_G, "toml2json")(tomlfile) +// TOML Operations // +#define rustg_read_toml_file(path) json_decode(call(RUST_G, "toml_file_to_json")(path) || "null") + +// Unzip Operations // +#define rustg_unzip_download_async(url, unzip_directory) call(RUST_G, "unzip_download_async")(url, unzip_directory) +#define rustg_unzip_check(job_id) call(RUST_G, "unzip_check")("[job_id]") + +// URL Encoder/Decoder Operations // +#define rustg_url_encode(text) call(RUST_G, "url_encode")("[text]") +#define rustg_url_decode(text) call(RUST_G, "url_decode")(text) + +#ifdef RUSTG_OVERRIDE_BUILTINS + #define url_encode(text) rustg_url_encode(text) + #define url_decode(text) rustg_url_decode(text) +#endif -// RUSTG Version // -#define RUST_G_VERSION "0.4.5-P3" diff --git a/code/__DEFINES/status_effects.dm b/code/__DEFINES/status_effects.dm index ce91d2ccf31..aa4b044ed0f 100644 --- a/code/__DEFINES/status_effects.dm +++ b/code/__DEFINES/status_effects.dm @@ -13,6 +13,8 @@ // BUFFS // /////////// +#define STATUS_EFFECT_HISGRACE /datum/status_effect/his_grace //His Grace. + #define STATUS_EFFECT_SHADOW_MEND /datum/status_effect/shadow_mend //Quick, powerful heal that deals damage afterwards. Heals 15 brute/burn every second for 3 seconds. #define STATUS_EFFECT_VOID_PRICE /datum/status_effect/void_price //The price of healing yourself with void energy. Deals 3 brute damage every 3 seconds for 30 seconds. #define STATUS_EFFECT_EXERCISED /datum/status_effect/exercised //Prevents heart disease @@ -27,7 +29,6 @@ //#define STATUS_EFFECT_POWERREGEN /datum/status_effect/cyborg_power_regen //Regenerates power on a given cyborg over time -//#define STATUS_EFFECT_HISGRACE /datum/status_effect/his_grace //His Grace. //#define STATUS_EFFECT_WISH_GRANTERS_GIFT /datum/status_effect/wish_granters_gift //If you're currently resurrecting with the Wish Granter @@ -53,7 +54,7 @@ //#define MAX_MANIA_SEVERITY 100 //how high the mania severity can go //#define MANIA_DAMAGE_TO_CONVERT 90 //how much damage is required before it'll convert affected targets -//#define STATUS_EFFECT_HISWRATH /datum/status_effect/his_wrath //His Wrath. +#define STATUS_EFFECT_HISWRATH /datum/status_effect/his_wrath //His Wrath. #define STATUS_EFFECT_SUMMONEDGHOST /datum/status_effect/cultghost //is a cult ghost: can see dead people, can't manifest more ghosts diff --git a/code/__HELPERS/AnimationLibrary.dm b/code/__HELPERS/AnimationLibrary.dm index 1f0c3dd9ab1..738783ed826 100644 --- a/code/__HELPERS/AnimationLibrary.dm +++ b/code/__HELPERS/AnimationLibrary.dm @@ -188,3 +188,21 @@ animate(A, transform = matrix(punchstr, MATRIX_ROTATE), pixel_y = 16, time = 2, color = "#eeeeee", easing = BOUNCE_EASING) animate(transform = matrix(-punchstr, MATRIX_ROTATE), pixel_y = original_y, time = 2, color = "#ffffff", easing = BOUNCE_EASING) animate(transform = null, time = 3, easing = BOUNCE_EASING) + +/proc/animate_rumble(atom/A) + var/static/list/transforms + if(!transforms) + var/matrix/M1 = matrix() + var/matrix/M2 = matrix() + var/matrix/M3 = matrix() + var/matrix/M4 = matrix() + M1.Translate(-1, 0) + M2.Translate(0, 1) + M3.Translate(1, 0) + M4.Translate(0, -1) + transforms = list(M1, M2, M3, M4) + + animate(A, transform = transforms[1], time = 0.2, loop = -1) + animate(transform = transforms[2], time = 0.1) + animate(transform = transforms[3], time = 0.2) + animate(transform = transforms[4], time = 0.3) diff --git a/code/__HELPERS/cmp.dm b/code/__HELPERS/cmp.dm index 612f7b5abef..402ba2c7e3b 100644 --- a/code/__HELPERS/cmp.dm +++ b/code/__HELPERS/cmp.dm @@ -51,3 +51,6 @@ return A.plane - B.plane else return A.layer - B.layer + +/proc/cmp_login_processor_priority(datum/client_login_processor/A, datum/client_login_processor/B) + return A.priority - B.priority diff --git a/code/__HELPERS/global_lists.dm b/code/__HELPERS/global_lists.dm index 282ad53cd06..118f6c28188 100644 --- a/code/__HELPERS/global_lists.dm +++ b/code/__HELPERS/global_lists.dm @@ -77,13 +77,12 @@ for(var/geartype in subtypesof(/datum/gear)) var/datum/gear/G = geartype - var/use_name = initial(G.display_name) var/use_category = initial(G.sort_category) - if(G == initial(G.subtype_path)) + if(G == initial(G.main_typepath)) continue - if(!use_name) + if(!initial(G.display_name)) stack_trace("Loadout - Missing display name: [G]") continue if(!initial(G.cost)) @@ -96,8 +95,8 @@ if(!GLOB.loadout_categories[use_category]) GLOB.loadout_categories[use_category] = new /datum/loadout_category(use_category) var/datum/loadout_category/LC = GLOB.loadout_categories[use_category] - GLOB.gear_datums[use_name] = new geartype - LC.gear[use_name] = GLOB.gear_datums[use_name] + GLOB.gear_datums[geartype] = new geartype + LC.gear[geartype] = GLOB.gear_datums[geartype] GLOB.loadout_categories = sortAssoc(GLOB.loadout_categories) for(var/loadout_category in GLOB.loadout_categories) @@ -128,6 +127,13 @@ continue GLOB.world_topic_handlers[wth.topic_key] = topic_handler_type + // Setup client login processors. + for(var/processor_type in subtypesof(/datum/client_login_processor)) + var/datum/client_login_processor/CLP = new processor_type + GLOB.client_login_processors += CLP + // Sort them by priority, lowest first + sortTim(GLOB.client_login_processors, /proc/cmp_login_processor_priority) + /* // Uncomment to debug chemical reaction list. /client/verb/debug_chemical_list() diff --git a/code/__HELPERS/matrices.dm b/code/__HELPERS/matrices.dm index 0520ab6b077..414a16636ec 100644 --- a/code/__HELPERS/matrices.dm +++ b/code/__HELPERS/matrices.dm @@ -3,7 +3,7 @@ Turn(.) //BYOND handles cases such as -270, 360, 540 etc. DOES NOT HANDLE 180 TURNS WELL, THEY TWEEN AND LOOK LIKE SHIT -/atom/proc/SpinAnimation(speed = 10, loops = -1, clockwise = 1, segments = 3) +/atom/proc/SpinAnimation(speed = 10, loops = -1, clockwise = 1, segments = 3, parallel = TRUE) if(!segments) return var/segment = 360/segments @@ -19,7 +19,10 @@ speed /= segments - animate(src, transform = matrices[1], time = speed, loops) + if(parallel) + animate(src, transform = matrices[1], time = speed, loops , flags = ANIMATION_PARALLEL) + else + animate(src, transform = matrices[1], time = speed, loops) for(var/i in 2 to segments) //2 because 1 is covered above animate(transform = matrices[i], time = speed) //doesn't have an object argument because this is "Stacking" with the animate call above diff --git a/code/__HELPERS/mobs.dm b/code/__HELPERS/mobs.dm index e836824ad3a..0aa01605808 100644 --- a/code/__HELPERS/mobs.dm +++ b/code/__HELPERS/mobs.dm @@ -272,15 +272,19 @@ update_all_mob_security_hud() return 1 -/* -Proc for attack log creation, because really why not -1 argument is the actor -2 argument is the target of action -3 is the full description of the action -4 is whether or not to message admins -This is always put in the attack log. -*/ - +/** + * Creates attack (old and new) logs for the user and defense logs for the target. + * Will message admins depending on the custom_level, user and target. + * + * custom_level will determine the log level set. Unless the target is SSD and there is a user doing it + * If custom_level is not set then the log level will be determined using the user and the target. + * + * * Arguments: + * * user - The thing doing it. Can be null + * * target - The target of the attack + * * what_done - What has happened + * * custom_level - The log level override + */ /proc/add_attack_logs(atom/user, target, what_done, custom_level) if(islist(target)) // Multi-victim adding var/list/targets = target @@ -323,7 +327,7 @@ This is always put in the attack log. loglevel = ATKLOG_ALMOSTALL else loglevel = ATKLOG_ALL // Hitting an object. Not a mob - if(isLivingSSD(target)) // Attacks on SSDs are shown to admins with any log level except ATKLOG_NONE. Overrides custom level + if(user && isLivingSSD(target)) // Attacks on SSDs are shown to admins with any log level except ATKLOG_NONE. Overrides custom level loglevel = ATKLOG_FEW diff --git a/code/__HELPERS/sanitize_values.dm b/code/__HELPERS/sanitize_values.dm index 34e4c96da6a..e50cd9afe96 100644 --- a/code/__HELPERS/sanitize_values.dm +++ b/code/__HELPERS/sanitize_values.dm @@ -16,6 +16,10 @@ if(default) return default if(List && List.len)return pick(List) +/proc/sanitize_json(json_input) + if(length(json_input) && istext(json_input)) + return json_decode(json_input) + return list() //more specialised stuff diff --git a/code/__HELPERS/traits.dm b/code/__HELPERS/traits.dm index 5534c19cdd1..b92fb82f9af 100644 --- a/code/__HELPERS/traits.dm +++ b/code/__HELPERS/traits.dm @@ -164,6 +164,9 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai #define TRAIT_BLOODCRAWL_EAT "bloodcrawl_eat" #define TRAIT_DWARF "dwarf" #define TRAIT_SILENT_FOOTSTEPS "silent_footsteps" //makes your footsteps completely silent +#define TRAIT_MESON_VISION "meson_vision" +#define TRAIT_FLASH_PROTECTION "flash_protection" +#define TRAIT_NIGHT_VISION "night_vision" #define TRAIT_COMIC_SANS "comic_sans" #define TRAIT_NOFINGERPRINTS "no_fingerprints" diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm index 4bbc7d03d07..399f669761e 100644 --- a/code/__HELPERS/unsorted.dm +++ b/code/__HELPERS/unsorted.dm @@ -464,12 +464,15 @@ Turf and target are seperate in case you want to teleport some distance from a t if(GLOB.stealthminID[P] == txt) return P -// Returns the atom sitting on the turf. -// For example, using this on a disk, which is in a bag, on a mob, will return the mob because it's on the turf. -/proc/get_atom_on_turf(atom/movable/M) +//Returns the atom sitting on the turf. +//For example, using this on a disk, which is in a bag, on a mob, will return the mob because it's on the turf. +//Optional arg 'type' to stop once it reaches a specific type instead of a turf. +/proc/get_atom_on_turf(atom/movable/M, stop_type) var/atom/loc = M - while(loc && loc.loc && !istype(loc.loc, /turf/)) + while(loc?.loc && !isturf(loc.loc)) loc = loc.loc + if(stop_type && istype(loc, stop_type)) + break return loc /* @@ -1536,7 +1539,7 @@ GLOBAL_DATUM_INIT(dview_mob, /mob/dview, new) shift.Translate(0,radius) transform = shift - SpinAnimation(rotation_speed, -1, clockwise, rotation_segments) + SpinAnimation(rotation_speed, -1, clockwise, rotation_segments, parallel = FALSE) while(orbiting && orbiting == A && A.loc) var/targetloc = get_turf(A) @@ -1551,7 +1554,7 @@ GLOBAL_DATUM_INIT(dview_mob, /mob/dview, new) if(orbiting == A) //make sure we haven't started orbiting something else. orbiting = null - SpinAnimation(0, 0) + SpinAnimation(0, 0, parallel = FALSE) transform = cached_transform @@ -1774,8 +1777,6 @@ GLOBAL_DATUM_INIT(dview_mob, /mob/dview, new) /obj/item/robot_parts = "ROBOT_PARTS", /obj/item/seeds = "SEED", /obj/item/slime_extract = "SLIME_CORE", - /obj/item/spacepod_equipment/weaponry = "POD_WEAPON", - /obj/item/spacepod_equipment = "POD_EQUIP", /obj/item/stack/sheet/mineral = "MINERAL", /obj/item/stack/sheet = "SHEET", /obj/item/stack/tile = "TILE", @@ -1926,24 +1927,6 @@ GLOBAL_DATUM_INIT(dview_mob, /mob/dview, new) return pois -/proc/flash_color(mob_or_client, flash_color="#960000", flash_time=20) - var/client/C - if(istype(mob_or_client, /mob)) - var/mob/M = mob_or_client - if(M.client) - C = M.client - else - return - else if(istype(mob_or_client, /client)) - C = mob_or_client - - if(!istype(C)) - return - - C.color = flash_color - spawn(0) - animate(C, color = initial(C.color), time = flash_time) - #define RANDOM_COLOUR (rgb(rand(0,255),rand(0,255),rand(0,255))) /proc/make_bit_triplet() @@ -2078,11 +2061,12 @@ GLOBAL_DATUM_INIT(dview_mob, /mob/dview, new) /proc/log_connection(ckey, ip, cid, connection_type) ASSERT(connection_type in list(CONNECTION_TYPE_ESTABLISHED, CONNECTION_TYPE_DROPPED_IPINTEL, CONNECTION_TYPE_DROPPED_BANNED, CONNECTION_TYPE_DROPPED_INVALID)) - var/datum/db_query/query_accesslog = SSdbcore.NewQuery("INSERT INTO connection_log (`datetime`, `ckey`, `ip`, `computerid`, `result`) VALUES(Now(), :ckey, :ip, :cid, :result)", list( + var/datum/db_query/query_accesslog = SSdbcore.NewQuery("INSERT INTO connection_log (`datetime`, `ckey`, `ip`, `computerid`, `result`, `server_id`) VALUES(Now(), :ckey, :ip, :cid, :result, :server_id)", list( "ckey" = ckey, "ip" = "[ip ? ip : ""]", // This is important. NULL is not the same as "", and if you directly open the `.dmb` file, you get a NULL IP. "cid" = cid, - "result" = connection_type + "result" = connection_type, + "server_id" = GLOB.configuration.system.instance_id )) query_accesslog.warn_execute() qdel(query_accesslog) diff --git a/code/_compile_options.dm b/code/_compile_options.dm index 0e73437dd93..d418f30c78d 100644 --- a/code/_compile_options.dm +++ b/code/_compile_options.dm @@ -22,12 +22,12 @@ #define IS_MODE_COMPILED(MODE) (ispath(text2path("/datum/game_mode/"+(MODE)))) //Update this whenever you need to take advantage of more recent byond features -#define MIN_COMPILER_VERSION 513 -#define MIN_COMPILER_BUILD 1514 +#define MIN_COMPILER_VERSION 514 +#define MIN_COMPILER_BUILD 1554 #if DM_VERSION < MIN_COMPILER_VERSION || DM_BUILD < MIN_COMPILER_BUILD //Don't forget to update this part #error Your version of BYOND is too out-of-date to compile this project. Go to https://secure.byond.com/download and update. -#error You need version 513.1514 or higher +#error You need version 514.1554 or higher #endif // Macros that must exist before world.dm diff --git a/code/_globalvars/genetics.dm b/code/_globalvars/genetics.dm index 1119ac364cc..2c49057e636 100644 --- a/code/_globalvars/genetics.dm +++ b/code/_globalvars/genetics.dm @@ -5,7 +5,6 @@ GLOBAL_VAR_INIT(deafblock, 0) GLOBAL_VAR_INIT(hulkblock, 0) GLOBAL_VAR_INIT(teleblock, 0) GLOBAL_VAR_INIT(fireblock, 0) -GLOBAL_VAR_INIT(xrayblock, 0) GLOBAL_VAR_INIT(clumsyblock, 0) GLOBAL_VAR_INIT(fakeblock, 0) GLOBAL_VAR_INIT(coughblock, 0) @@ -30,6 +29,9 @@ GLOBAL_VAR_INIT(hallucinationblock, 0) GLOBAL_VAR_INIT(noprintsblock, 0) GLOBAL_VAR_INIT(shockimmunityblock, 0) GLOBAL_VAR_INIT(smallsizeblock, 0) +GLOBAL_VAR_INIT(mesonblock, 0) +GLOBAL_VAR_INIT(noflashblock, 0) +GLOBAL_VAR_INIT(nightvisionblock, 0) /////////////////////////////// // Goon Stuff diff --git a/code/_globalvars/lists/misc.dm b/code/_globalvars/lists/misc.dm index 5464ed64bb4..c5afa64cfba 100644 --- a/code/_globalvars/lists/misc.dm +++ b/code/_globalvars/lists/misc.dm @@ -56,3 +56,5 @@ GLOBAL_LIST_INIT(cooking_ingredients, list(RECIPE_MICROWAVE = list(), RECIPE_OVE GLOBAL_LIST_INIT(cooking_reagents, list(RECIPE_MICROWAVE = list(), RECIPE_OVEN = list(), RECIPE_GRILL = list(), RECIPE_CANDY = list())) #define EGG_LAYING_MESSAGES list("lays an egg.", "squats down and croons.", "begins making a huge racket.", "begins clucking raucously.") + +GLOBAL_LIST_EMPTY(client_login_processors) diff --git a/code/_globalvars/lists/objects.dm b/code/_globalvars/lists/objects.dm index 4c22d37dc32..ee2fb9b16a1 100644 --- a/code/_globalvars/lists/objects.dm +++ b/code/_globalvars/lists/objects.dm @@ -6,7 +6,6 @@ GLOBAL_LIST_INIT(landmarks_list, list()) //list of all landmarks created GLOBAL_LIST_INIT(surgery_steps, list()) //list of all surgery steps |BS12 GLOBAL_LIST_INIT(side_effects, list()) //list of all medical sideeffects types by thier names |BS12 GLOBAL_LIST_INIT(mechas_list, list()) //list of all mechs. Used by hostile mobs target tracking. -GLOBAL_LIST_INIT(spacepods_list, list()) //list of all space pods. Used by hostile mobs target tracking. GLOBAL_LIST_INIT(joblist, list()) //list of all jobstypes, minus borg and AI GLOBAL_LIST_INIT(airlocks, list()) //list of all airlocks GLOBAL_LIST_INIT(singularities, list()) //list of all singularities diff --git a/code/_globalvars/traits.dm b/code/_globalvars/traits.dm index 39551da14b6..90840095938 100644 --- a/code/_globalvars/traits.dm +++ b/code/_globalvars/traits.dm @@ -46,6 +46,9 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_DWARF" = TRAIT_DWARF, "TRAIT_SILENT_FOOTSTEPS" = TRAIT_SILENT_FOOTSTEPS, "TRAIT_ALCOHOL_TOLERANCE" = TRAIT_ALCOHOL_TOLERANCE, + "TRAIT_MESON_VISION" = TRAIT_MESON_VISION, + "TRAIT_FLASH_PROTECTION" = TRAIT_FLASH_PROTECTION, + "TRAIT_NIGHT_VISION" = TRAIT_NIGHT_VISION, "TRAIT_COMIC_SANS" = TRAIT_COMIC_SANS, "TRAIT_NOFINGERPRINTS" = TRAIT_NOFINGERPRINTS, diff --git a/code/_onclick/hud/alert.dm b/code/_onclick/hud/alert.dm index c88dd0671b1..daf7bfe6b52 100644 --- a/code/_onclick/hud/alert.dm +++ b/code/_onclick/hud/alert.dm @@ -622,6 +622,13 @@ so as to remain in compliance with the most up-to-date laws." stone = null return ..() +/obj/screen/alert/notify_mapvote + name = "Map Vote" + desc = "Vote on which map you would like to play on next!" + icon_state = "map_vote" + +/obj/screen/alert/notify_mapvote/Click() + SSvote.browse_to(usr.client) //OBJECT-BASED diff --git a/code/_onclick/item_attack.dm b/code/_onclick/item_attack.dm index 9d4edca6ebb..a2a4aec80c4 100644 --- a/code/_onclick/item_attack.dm +++ b/code/_onclick/item_attack.dm @@ -102,7 +102,7 @@ /obj/attacked_by(obj/item/I, mob/living/user) if(I.force) user.visible_message("[user] has hit [src] with [I]!", "You hit [src] with [I]!") - take_damage(I.force, I.damtype, "melee", 1) + take_damage(I.force, I.damtype, MELEE, 1) /mob/living/attacked_by(obj/item/I, mob/living/user, def_zone) send_item_attack_message(I, user) diff --git a/code/controllers/configuration/configuration_core.dm b/code/controllers/configuration/configuration_core.dm index d9494c31652..c96e96016e8 100644 --- a/code/controllers/configuration/configuration_core.dm +++ b/code/controllers/configuration/configuration_core.dm @@ -46,6 +46,8 @@ GLOBAL_DATUM_INIT(configuration, /datum/server_configuration, new()) var/datum/configuration_section/url_configuration/url /// Holder for the voting configuration datum var/datum/configuration_section/vote_configuration/vote + /// Raw data. Stored here to avoid passing data between procs constantly + var/list/raw_data = list() /datum/server_configuration/Destroy(force) @@ -53,6 +55,16 @@ GLOBAL_DATUM_INIT(configuration, /datum/server_configuration, new()) // This is going to stay existing. I dont care. return QDEL_HINT_LETMELIVE +/datum/server_configuration/vv_get_var(var_name) + if(var_name == "raw_data") // NO! + return FALSE + . = ..() + +/datum/server_configuration/vv_edit_var(var_name, var_value) + if(var_name == "raw_data") // NO! + return FALSE + . = ..() + /datum/server_configuration/CanProcCall(procname) return FALSE // No thanks @@ -85,34 +97,66 @@ GLOBAL_DATUM_INIT(configuration, /datum/server_configuration, new()) var/config_file = "config/config.toml" if(!fexists(config_file)) config_file = "config/example/config.toml" // Fallback to example if user hasnt setup config properly - var/raw_json = rustg_toml2json(config_file) - var/list/raw_config_data = json_decode(raw_json) + raw_data = rustg_read_toml_file(config_file) // Now pass through all our stuff - admin.load_data(raw_config_data["admin_configuration"]) - afk.load_data(raw_config_data["afk_configuration"]) - custom_sprites.load_data(raw_config_data["custom_sprites_configuration"]) - database.load_data(raw_config_data["database_configuration"]) - discord.load_data(raw_config_data["discord_configuration"]) - event.load_data(raw_config_data["event_configuration"]) - gamemode.load_data(raw_config_data["gamemode_configuration"]) - gateway.load_data(raw_config_data["gateway_configuration"]) - general.load_data(raw_config_data["general_configuration"]) - ipintel.load_data(raw_config_data["ipintel_configuration"]) - jobs.load_data(raw_config_data["job_configuration"]) - logging.load_data(raw_config_data["logging_configuration"]) - mc.load_data(raw_config_data["mc_configuration"]) - metrics.load_data(raw_config_data["metrics_configuration"]) - movement.load_data(raw_config_data["movement_configuration"]) - overflow.load_data(raw_config_data["overflow_configuration"]) - ruins.load_data(raw_config_data["ruin_configuration"]) - system.load_data(raw_config_data["system_configuration"]) - url.load_data(raw_config_data["url_configuration"]) - vote.load_data(raw_config_data["voting_configuration"]) + load_all_sections() + + // Clear our list to save RAM + raw_data = list() // And report the load DIRECT_OUTPUT(world.log, "Config loaded in [stop_watch(start)]s") +/datum/server_configuration/proc/load_all_sections() + safe_load(admin, "admin_configuration") + safe_load(afk, "afk_configuration") + safe_load(custom_sprites, "custom_sprites_configuration") + safe_load(database, "database_configuration") + safe_load(discord, "discord_configuration") + safe_load(event, "event_configuration") + safe_load(gamemode, "gamemode_configuration") + safe_load(gateway, "gateway_configuration") + safe_load(general, "general_configuration") + safe_load(ipintel, "ipintel_configuration") + safe_load(jobs, "job_configuration") + safe_load(logging, "logging_configuration") + safe_load(mc, "mc_configuration") + safe_load(metrics, "metrics_configuration") + safe_load(movement, "movement_configuration") + safe_load(overflow, "overflow_configuration") + safe_load(ruins, "ruin_configuration") + safe_load(system, "system_configuration") + safe_load(url, "url_configuration") + safe_load(vote, "voting_configuration") + +// Proc to load up instance-specific overrides +/datum/server_configuration/proc/load_overrides() + var/override_file = "config/overrides_[world.port].toml" + if(!fexists(override_file)) + DIRECT_OUTPUT(world.log, "Overrides not found for this instance.") + return + + DIRECT_OUTPUT(world.log, "Overrides found for this instance. Loading them.") + var/start = start_watch() // Time tracking + + raw_data = rustg_read_toml_file(override_file) + + // Now safely load our overrides. + // Due to the nature of config wrappers, only vars that exist in the config file are applied to the config datums. + // This means that an override missing a key doesnt null it out from the main server + load_all_sections() + + // Clear our list to save RAM + raw_data = list() + + // And report the load + DIRECT_OUTPUT(world.log, "Config overrides loaded in [stop_watch(start)]s") + +// Only loads the data for a config section if that key exists in the JSON +/datum/server_configuration/proc/safe_load(datum/configuration_section/CS, section) + if(!isnull(raw_data[section])) + CS.load_data(raw_data[section]) /datum/configuration_section /// See __config_defines.dm diff --git a/code/controllers/configuration/sections/discord_configuration.dm b/code/controllers/configuration/sections/discord_configuration.dm index 3d51c92aa42..4f34a753707 100644 --- a/code/controllers/configuration/sections/discord_configuration.dm +++ b/code/controllers/configuration/sections/discord_configuration.dm @@ -7,6 +7,8 @@ var/forward_all_ahelps = TRUE /// Admin role to ping if no admins are online. Disables if empty string var/admin_role_id = "" + /// Mentor role to ping if no mentors are online. Disables if empty string + var/mentor_role_id = "" /// List of all URLs for the main webhooks var/list/main_webhook_urls = list() /// List of all URLs for the admin webhooks @@ -21,6 +23,7 @@ CONFIG_LOAD_BOOL(webhooks_enabled, data["enable_discord_webhooks"]) CONFIG_LOAD_BOOL(forward_all_ahelps, data["forward_all_ahelps"]) CONFIG_LOAD_STR(admin_role_id, data["admin_role_id"]) + CONFIG_LOAD_STR(mentor_role_id, data["mentor_role_id"]) CONFIG_LOAD_LIST(main_webhook_urls, data["main_webhook_urls"]) CONFIG_LOAD_LIST(mentor_webhook_urls, data["mentor_webhook_urls"]) CONFIG_LOAD_LIST(admin_webhook_urls, data["admin_webhook_urls"]) diff --git a/code/controllers/configuration/sections/system_configuration.dm b/code/controllers/configuration/sections/system_configuration.dm index 42e563d7057..a7623dfacc4 100644 --- a/code/controllers/configuration/sections/system_configuration.dm +++ b/code/controllers/configuration/sections/system_configuration.dm @@ -10,16 +10,23 @@ var/medal_hub_password = null /// Do we want the server to kill on reboot instead of keeping the same DD session var/shutdown_on_reboot = FALSE + /// Is this server a production server (Has higher security and requires 2FA) + var/is_production = FALSE /// If above is true, you can run a shell command var/shutdown_shell_command = null /// 2FA backend server host var/_2fa_auth_host = null /// List of IP addresses which bypass world topic rate limiting var/list/topic_ip_ratelimit_bypass = list() + /// Server instance ID + var/instance_id = "paradise_main" + /// Server internal IP + var/internal_ip = "127.0.0.1" /datum/configuration_section/system_configuration/load_data(list/data) // Use the load wrappers here. That way the default isnt made 'null' if you comment out the config line CONFIG_LOAD_BOOL(shutdown_on_reboot, data["shutdown_on_reboot"]) + CONFIG_LOAD_BOOL(is_production, data["is_production"]) CONFIG_LOAD_STR(topic_key, data["communications_password"]) CONFIG_LOAD_STR(medal_hub_address, data["medal_hub_address"]) @@ -28,3 +35,6 @@ CONFIG_LOAD_STR(_2fa_auth_host, data["_2fa_auth_host"]) CONFIG_LOAD_LIST(topic_ip_ratelimit_bypass, data["topic_ip_ratelimit_bypass"]) + + CONFIG_LOAD_STR(instance_id, data["instance_id"]) + CONFIG_LOAD_STR(internal_ip, data["internal_ip"]) diff --git a/code/controllers/master.dm b/code/controllers/master.dm index d445cf6f3b6..13a2a065a02 100644 --- a/code/controllers/master.dm +++ b/code/controllers/master.dm @@ -62,7 +62,7 @@ GLOBAL_REAL(Master, /datum/controller/master) = new /// For scheduling different subsystems for different stages of the round var/current_runlevel /// Do we want to sleep until players log in? - var/sleep_offline_after_initializations = TRUE + var/sleep_offline_after_initializations = FALSE // No we dont var/static/restart_clear = 0 var/static/restart_timeout = 0 diff --git a/code/controllers/subsystem/blackbox.dm b/code/controllers/subsystem/blackbox.dm index 37e4299b06d..273fd71dbc1 100644 --- a/code/controllers/subsystem/blackbox.dm +++ b/code/controllers/subsystem/blackbox.dm @@ -287,8 +287,8 @@ SUBSYSTEM_DEF(blackbox) lakey = L.lastattackerckey var/datum/db_query/deathquery = SSdbcore.NewQuery({" - INSERT INTO death (name, byondkey, job, special, pod, tod, laname, lakey, gender, bruteloss, fireloss, brainloss, oxyloss, coord) - VALUES (:name, :key, :job, :special, :pod, NOW(), :laname, :lakey, :gender, :bruteloss, :fireloss, :brainloss, :oxyloss, :coord)"}, + INSERT INTO death (name, byondkey, job, special, pod, tod, laname, lakey, gender, bruteloss, fireloss, brainloss, oxyloss, coord, server_id) + VALUES (:name, :key, :job, :special, :pod, NOW(), :laname, :lakey, :gender, :bruteloss, :fireloss, :brainloss, :oxyloss, :coord, :server_id)"}, list( "name" = L.real_name, "key" = L.key, @@ -302,7 +302,8 @@ SUBSYSTEM_DEF(blackbox) "fireloss" = L.getFireLoss(), "brainloss" = L.getBrainLoss(), "oxyloss" = L.getOxyLoss(), - "coord" = "[L.x], [L.y], [L.z]" + "coord" = "[L.x], [L.y], [L.z]", + "server_id" = GLOB.configuration.system.instance_id ) ) deathquery.warn_execute() diff --git a/code/controllers/subsystem/changelog.dm b/code/controllers/subsystem/changelog.dm index 55221263033..488be1d32c0 100644 --- a/code/controllers/subsystem/changelog.dm +++ b/code/controllers/subsystem/changelog.dm @@ -54,9 +54,8 @@ SUBSYSTEM_DEF(changelog) /datum/controller/subsystem/changelog/proc/UpdatePlayerChangelogDate(client/C) if(!ss_ready) return // Only return here, we dont have to worry about a queue list because this will be called from ShowChangelog() - // Technically this is only for the date but we can also do the UI button at the same time - var/datum/preferences/P = GLOB.preferences_datums[C.ckey] - if(P.toggles & PREFTOGGLE_UI_DARKMODE) + + if(C.prefs.toggles & PREFTOGGLE_UI_DARKMODE) winset(C, "rpane.changelog", "background-color=#40628a;font-color=#ffffff;font-style=none") else winset(C, "rpane.changelog", "background-color=none;font-style=none") diff --git a/code/controllers/subsystem/dbcore.dm b/code/controllers/subsystem/dbcore.dm index f6974a2fb17..ed7e8c25596 100644 --- a/code/controllers/subsystem/dbcore.dm +++ b/code/controllers/subsystem/dbcore.dm @@ -160,8 +160,8 @@ SUBSYSTEM_DEF(dbcore) if(!IsConnected()) return var/datum/db_query/query_round_initialize = SSdbcore.NewQuery( - "INSERT INTO round (initialize_datetime, server_ip, server_port) VALUES (Now(), INET_ATON(:internet_address), :port)", - list("internet_address" = world.internet_address || "0", "port" = "[world.port]") + "INSERT INTO round (initialize_datetime, server_ip, server_port, server_id) VALUES (Now(), INET_ATON(:internet_address), :port, :server_id)", + list("internet_address" = world.internet_address || "0", "port" = "[world.port]", "server_id" = GLOB.configuration.system.instance_id) ) query_round_initialize.Execute(async = FALSE) GLOB.round_id = "[query_round_initialize.last_insert_id]" diff --git a/code/controllers/subsystem/discord.dm b/code/controllers/subsystem/discord.dm index 11a2a481073..e6dd4438ffe 100644 --- a/code/controllers/subsystem/discord.dm +++ b/code/controllers/subsystem/discord.dm @@ -5,6 +5,8 @@ SUBSYSTEM_DEF(discord) var/enabled = FALSE /// Last time the administrator ping was dropped. This ensures administrators cannot be mass pinged if a large chunk of ahelps go off at once (IE: tesloose) var/last_administration_ping = 0 + /// Last time the mentor ping was dropped. This ensures mentors cannot be mass pinged if a large chunk of mhelps go off at once. + var/last_mentor_ping = 0 /datum/controller/subsystem/discord/Initialize(start_timeofday) if(GLOB.configuration.discord.webhooks_enabled) @@ -25,7 +27,7 @@ SUBSYSTEM_DEF(discord) webhook_urls = GLOB.configuration.discord.mentor_webhook_urls var/datum/discord_webhook_payload/dwp = new() - dwp.webhook_content = content + dwp.webhook_content = "**\[[GLOB.configuration.system.instance_id]]** [content]" for(var/url in webhook_urls) SShttp.create_async_request(RUSTG_HTTP_METHOD_POST, url, dwp.serialize2json(), list("content-type" = "application/json")) @@ -71,10 +73,31 @@ SUBSYSTEM_DEF(discord) var/message = "[content] [alerttext] [add_ping ? handle_administrator_ping() : ""]" var/datum/discord_webhook_payload/dwp = new() - dwp.webhook_content = message + dwp.webhook_content = "**\[[GLOB.configuration.system.instance_id]]** [message]" for(var/url in GLOB.configuration.discord.admin_webhook_urls) SShttp.create_async_request(RUSTG_HTTP_METHOD_POST, url, dwp.serialize2json(), list("content-type" = "application/json")) +/datum/controller/subsystem/discord/proc/send2discord_simple_mentor(content) + var/alerttext + var/list/mentorcounter = staff_countup(R_MENTOR) + var/active_mentors = mentorcounter[1] + var/inactive_mentors = mentorcounter[3] + var/add_ping = FALSE + + if(active_mentors <= 0) + add_ping = TRUE + if(inactive_mentors) + alerttext = "| **ALL MENTORS AFK**" + else + alerttext = "| **NO MENTORS ONLINE**" + + var/message = "[content] [alerttext][add_ping ? handle_mentor_ping() : ""]" + + var/datum/discord_webhook_payload/dwp = new() + dwp.webhook_content = "**\[[GLOB.configuration.system.instance_id]]** [message]" + for(var/url in GLOB.configuration.discord.mentor_webhook_urls) + SShttp.create_async_request(RUSTG_HTTP_METHOD_POST, url, dwp.serialize2json(), list("content-type" = "application/json")) + // Helper to make administrator ping easier /datum/controller/subsystem/discord/proc/handle_administrator_ping() // Check if a role is even set @@ -86,3 +109,13 @@ SUBSYSTEM_DEF(discord) return "<@&[GLOB.configuration.discord.admin_role_id]>" return "" + +/datum/controller/subsystem/discord/proc/handle_mentor_ping() + if(GLOB.configuration.discord.mentor_role_id) + if(last_mentor_ping > world.time) + return " *(Role pinged recently)*" + + last_mentor_ping = world.time + 60 SECONDS + return " <@&[GLOB.configuration.discord.mentor_role_id]>" + + return "" diff --git a/code/controllers/subsystem/fires.dm b/code/controllers/subsystem/fires.dm index 2481891000c..4ae71f72841 100644 --- a/code/controllers/subsystem/fires.dm +++ b/code/controllers/subsystem/fires.dm @@ -36,7 +36,7 @@ SUBSYSTEM_DEF(fires) if(O.resistance_flags & ON_FIRE) //in case an object is extinguished while still in currentrun if(!(O.resistance_flags & FIRE_PROOF)) - O.take_damage(20, BURN, "fire", 0) + O.take_damage(20, BURN, FIRE, 0) else O.extinguish() diff --git a/code/controllers/subsystem/instancing.dm b/code/controllers/subsystem/instancing.dm new file mode 100644 index 00000000000..8fd80a9bad7 --- /dev/null +++ b/code/controllers/subsystem/instancing.dm @@ -0,0 +1,184 @@ +SUBSYSTEM_DEF(instancing) + name = "Instancing" + runlevels = RUNLEVEL_INIT | RUNLEVEL_LOBBY | RUNLEVEL_SETUP | RUNLEVEL_GAME | RUNLEVEL_POSTGAME + wait = 30 SECONDS + flags = SS_KEEP_TIMING + +/datum/controller/subsystem/instancing/Initialize(start_timeofday) + // Dont even bother if we arent connected + if(!SSdbcore.IsConnected()) + flags |= SS_NO_FIRE + return ..() + update_heartbeat() // Make sure you do this before announcing to peers, or no one will hear your announcement + var/startup_msg = "The server [GLOB.configuration.general.server_name] is now starting up. The map is [SSmapping.map_datum.fluff_name] ([SSmapping.map_datum.technical_name]). You can connect with the Switch Server verb." + message_all_peers(startup_msg) + return ..() + +/datum/controller/subsystem/instancing/fire(resumed) + update_heartbeat() + update_playercache() + +/** + * Playercache updater + * + * Updates the player cache in the DB. Different from heartbeat so we can force invoke it on player operations + */ +/datum/controller/subsystem/instancing/proc/update_playercache(optional_ckey) + // You may be wondering, why the fuck is an "optional ckey" variable here + // Well, this is invoked in client/New(), and needs to read from GLOB.clients + // However, this proc sleeps, and if you sleep during client/New() once the client is in GLOB.clients, stuff breaks bad + // (See my comment rambling in client/New()) + // By passing the ckey through, we can sleep in this proc and still get the data + if(!SSdbcore.IsConnected()) + return + // First iterate clients to get ckeys + var/list/ckeys = list() + for(var/client/C in GLOB.clients) // No code review. I am not doing the `as anything` bullshit, because we *do* need the type checks here to avoid null clients which do happen sometimes + ckeys += C.ckey + // Add our optional + if(optional_ckey) + ckeys += optional_ckey + // Note: We dont have to sort the list here. The only time this is read for is a search, + // and order doesnt matter for that. + var/ckey_json = json_encode(ckeys) + + // Yes I care about performance savings this much here to mass execute this shit + var/list/datum/db_query/queries = list() + queries += SSdbcore.NewQuery("UPDATE instance_data_cache SET key_value=:json WHERE key_name='playerlist' AND server_id=:sid", list( + "json" = ckey_json, + "sid" = GLOB.configuration.system.instance_id + )) + queries += SSdbcore.NewQuery("UPDATE instance_data_cache SET key_value=:count WHERE key_name='playercount' AND server_id=:sid", list( + "count" = length(ckeys), + "sid" = GLOB.configuration.system.instance_id + )) + + SSdbcore.MassExecute(queries, TRUE, TRUE, FALSE, FALSE) + +/** + * Heartbeat updater + * + * Updates the heartbeat in the DB. Used so other servers can see when this one was alive + */ +/datum/controller/subsystem/instancing/proc/update_heartbeat() + // this could probably just go in fire() but clean code and profiler ease who cares + var/datum/db_query/dbq = SSdbcore.NewQuery("UPDATE instance_data_cache SET key_value=NOW() WHERE key_name='heartbeat' AND server_id=:sid", list( + "sid" = GLOB.configuration.system.instance_id + )) + dbq.warn_execute() + qdel(dbq) + +/** + * Seed data + * + * Seeds all our data into the DB for other servers to discover from. + * This is called during world/New() instead of on initialize so it can be done *instantly* + */ +/datum/controller/subsystem/instancing/proc/seed_data() + // We need to seed a lot of keys, so lets just use a key-value-pair-map to do this easily + var/list/kvp_map = list() + kvp_map["server_name"] = GLOB.configuration.general.server_name // Name of the server + kvp_map["server_port"] = world.port // Server port (used for redirection and topics) + kvp_map["topic_key"] = GLOB.configuration.system.topic_key // Server topic key (used for topics) + kvp_map["internal_ip"] = GLOB.configuration.system.internal_ip // Server internal IP (used for topics) + kvp_map["playercount"] = length(GLOB.clients) // Server client count (used for status info) + kvp_map["playerlist"] = json_encode(list()) // Server client list. Used for dupe login checks. This gets filled in later + kvp_map["heartbeat"] = SQLtime() // SQL timestamp for heartbeat purposes. Any server without a heartbeat in the last 60 seconds can be considered dead + // Also note for above. You may say "But AA you dont need to JSON encode it, just use "\[]"." + // Well to that I say, no. This is meant to be JSON regardless, and it should represent that. This proc is ran once during world/New() + // An extra nanosecond of load will make zero difference. + + for(var/key in kvp_map) + var/datum/db_query/dbq = SSdbcore.NewQuery("INSERT INTO instance_data_cache (server_id, key_name, key_value) VALUES (:sid, :kn, :kv) ON DUPLICATE KEY UPDATE key_value=:kv2", // Is this necessary? Who knows! + list( + "sid" = GLOB.configuration.system.instance_id, + "kn" = key, + "kv" = "[kvp_map[key]]", // String encoding IS necessary since these tables use strings, not ints + "kv2" = "[kvp_map[key]]", // Dont know if I need the second but better to be safe + ) + ) + dbq.warn_execute(FALSE) // Do NOT async execute here because world/New() shouldnt sleep. EVER. You get issues if you do. + qdel(dbq) + + +/** + * Message all peers + * + * Wrapper for [topic_all_peers] to format the input into a message topic. Will send a server-wide announcement to the other servers + * + * Arguments: + * * message - Message to send to the other servers + */ +/datum/controller/subsystem/instancing/proc/message_all_peers(message) + if(!SSdbcore.IsConnected()) + return + var/topic_string = "instance_announce&msg=[url_encode(message)]" + topic_all_peers(topic_string) + +/** + * Sends a topic to all peers + * + * Sends a raw topic to the other servers. WILL APPEND &key=[commskey] ON THE END. PLEASE ACCOUNT FOR THIS. + * + * Arguments: + * * raw_topic - The raw topic to send to the other servers + */ +/datum/controller/subsystem/instancing/proc/topic_all_peers(raw_topic) + // Someone here is going to say "AA you shouldnt put load on the DB server you can do sorting in BYOND" + // Well let me put it this way. The DB server is an entirely different machine to BYOND, with this entire dataset being stored in its RAM, not even on disk + // By making the DB server do the work, we can offload from BYOND, which is already strained + var/datum/db_query/dbq1 = SSdbcore.NewQuery({" + SELECT server_id, key_name, key_value FROM instance_data_cache WHERE server_id IN + (SELECT server_id FROM instance_data_cache WHERE server_id !=:sid AND + key_name='heartbeat' AND last_updated BETWEEN NOW() - INTERVAL 60 SECOND AND NOW()) + AND key_name IN ("topic_key", "internal_ip", "server_port")"}, list( + "sid" = GLOB.configuration.system.instance_id + )) + if(!dbq1.warn_execute()) + qdel(dbq1) + return + + var/servers_outer = list() + while(dbq1.NextRow()) + if(!servers_outer[dbq1.item[1]]) + servers_outer[dbq1.item[1]] = list() + + servers_outer[dbq1.item[1]][dbq1.item[2]] = dbq1.item[3] // This should assoc load our data + + qdel(dbq1) + + for(var/server in servers_outer) + var/server_data = servers_outer[server] + world.Export("byond://[server_data["internal_ip"]]:[server_data["server_port"]]?[raw_topic]&key=[server_data["topic_key"]]") + + +/** + * Player checker + * + * Check all connected peers to see if a player exists in the player cache + * This is used to make sure players dont log into 2 servers at once + * Arguments: + * ckey - The ckey to check if they are logged into another server + */ +/datum/controller/subsystem/instancing/proc/check_player(ckey) + // Please see above rant on L127 + var/datum/db_query/dbq1 = SSdbcore.NewQuery({" + SELECT server_id, key_value FROM instance_data_cache WHERE server_id IN + (SELECT server_id FROM instance_data_cache WHERE server_id != :sid AND + key_name='heartbeat' AND last_updated BETWEEN NOW() - INTERVAL 60 SECOND AND NOW()) + AND key_name IN ("playerlist")"}, list( + "sid" = GLOB.configuration.system.instance_id + )) + if(!dbq1.warn_execute()) + qdel(dbq1) + return + + while(dbq1.NextRow()) + var/list/other_server_cache = json_decode(dbq1.item[2]) + if(ckey in other_server_cache) + var/target_server = dbq1.item[1] // Yes. This var is necessary. + qdel(dbq1) + return target_server + + qdel(dbq1) + return null // If we are here, it means we didnt find our player on another server diff --git a/code/controllers/subsystem/jobs.dm b/code/controllers/subsystem/jobs.dm index f7660f4d75a..04e1c5fb5df 100644 --- a/code/controllers/subsystem/jobs.dm +++ b/code/controllers/subsystem/jobs.dm @@ -65,7 +65,7 @@ SUBSYSTEM_DEF(jobs) return type_occupations[jobtype] /datum/controller/subsystem/jobs/proc/GetPlayerAltTitle(mob/new_player/player, rank) - return player.client.prefs.GetPlayerAltTitle(GetJob(rank)) + return player.client.prefs.active_character.GetPlayerAltTitle(GetJob(rank)) /datum/controller/subsystem/jobs/proc/AssignRole(mob/new_player/player, rank, latejoin = 0) Debug("Running AR, Player: [player], Rank: [rank], LJ: [latejoin]") @@ -121,7 +121,7 @@ SUBSYSTEM_DEF(jobs) Debug("Running FOC, Job: [job], Level: [level], Flag: [flag]") var/list/candidates = list() for(var/mob/new_player/player in unassigned) - Debug(" - Player: [player] Banned: [jobban_isbanned(player, job.title)] Old Enough: [!job.player_old_enough(player.client)] AvInPlaytime: [job.available_in_playtime(player.client)] Flag && Be Special: [flag] && [player.client.prefs.be_special] Job Department: [player.client.prefs.GetJobDepartment(job, level)] Job Flag: [job.flag] Job Department Flag = [job.department_flag]") + Debug(" - Player: [player] Banned: [jobban_isbanned(player, job.title)] Old Enough: [!job.player_old_enough(player.client)] AvInPlaytime: [job.available_in_playtime(player.client)] Flag && Be Special: [flag] && [player.client.prefs.be_special] Job Department: [player.client.prefs.active_character.GetJobDepartment(job, level)] Job Flag: [job.flag] Job Department Flag = [job.department_flag]") if(jobban_isbanned(player, job.title)) Debug("FOC isbanned failed, Player: [player]") continue @@ -140,7 +140,7 @@ SUBSYSTEM_DEF(jobs) if(player.mind && (job.title in player.mind.restricted_roles)) Debug("FOC incompatbile with antagonist role, Player: [player]") continue - if(player.client.prefs.GetJobDepartment(job, level) & job.flag) + if(player.client.prefs.active_character.GetJobDepartment(job, level) & job.flag) Debug("FOC pass, Player: [player], Level:[level]") candidates += player return candidates @@ -367,12 +367,12 @@ SUBSYSTEM_DEF(jobs) continue // If the player wants that job on this level, then try give it to him. - if(player.client.prefs.GetJobDepartment(job, level) & job.flag) + if(player.client.prefs.active_character.GetJobDepartment(job, level) & job.flag) // If the job isn't filled if((job.current_positions < job.spawn_positions) || job.spawn_positions == -1) Debug("DO pass, Player: [player], Level:[level], Job:[job.title]") - Debug(" - Job Flag: [job.flag] Job Department: [player.client.prefs.GetJobDepartment(job, level)] Job Current Pos: [job.current_positions] Job Spawn Positions = [job.spawn_positions]") + Debug(" - Job Flag: [job.flag] Job Department: [player.client.prefs.active_character.GetJobDepartment(job, level)] Job Current Pos: [job.current_positions] Job Spawn Positions = [job.spawn_positions]") AssignRole(player, job.title) unassigned -= player break @@ -380,7 +380,7 @@ SUBSYSTEM_DEF(jobs) // Hand out random jobs to the people who didn't get any in the last check // Also makes sure that they got their preference correct for(var/mob/new_player/player in unassigned) - if(player.client.prefs.alternate_option == GET_RANDOM_JOB) + if(player.client.prefs.active_character.alternate_option == GET_RANDOM_JOB) GiveRandomJob(player) Debug("DO, Standard Check end") @@ -390,7 +390,7 @@ SUBSYSTEM_DEF(jobs) // Antags, who have to get in, come first for(var/mob/new_player/player in unassigned) if(player.mind.special_role) - if(player.client.prefs.alternate_option != BE_ASSISTANT) + if(player.client.prefs.active_character.alternate_option != BE_ASSISTANT) GiveRandomJob(player) if(player in unassigned) AssignRole(player, "Civilian") @@ -399,10 +399,10 @@ SUBSYSTEM_DEF(jobs) // Then we assign what we can to everyone else. for(var/mob/new_player/player in unassigned) - if(player.client.prefs.alternate_option == BE_ASSISTANT) + if(player.client.prefs.active_character.alternate_option == BE_ASSISTANT) Debug("AC2 Assistant located, Player: [player]") AssignRole(player, "Civilian") - else if(player.client.prefs.alternate_option == RETURN_TO_LOBBY) + else if(player.client.prefs.active_character.alternate_option == RETURN_TO_LOBBY) player.ready = 0 unassigned -= player @@ -564,11 +564,11 @@ SUBSYSTEM_DEF(jobs) if(job.barred_by_disability(player.client)) disabled++ continue - if(player.client.prefs.GetJobDepartment(job, 1) & job.flag) + if(player.client.prefs.active_character.GetJobDepartment(job, 1) & job.flag) high++ - else if(player.client.prefs.GetJobDepartment(job, 2) & job.flag) + else if(player.client.prefs.active_character.GetJobDepartment(job, 2) & job.flag) medium++ - else if(player.client.prefs.GetJobDepartment(job, 3) & job.flag) + else if(player.client.prefs.active_character.GetJobDepartment(job, 3) & job.flag) low++ else never++ //not selected diff --git a/code/controllers/subsystem/mapping.dm b/code/controllers/subsystem/mapping.dm index c6e3562bd97..51821f14641 100644 --- a/code/controllers/subsystem/mapping.dm +++ b/code/controllers/subsystem/mapping.dm @@ -10,6 +10,8 @@ SUBSYSTEM_DEF(mapping) var/list/teleportlocs /// List of all areas that can be accessed via IC and OOC means var/list/ghostteleportlocs + ///List of areas that exist on the station this shift + var/list/existing_station_areas // This has to be here because world/New() uses [station_name()], which looks this datum up /datum/controller/subsystem/mapping/PreInit() @@ -89,6 +91,13 @@ SUBSYSTEM_DEF(mapping) ghostteleportlocs = sortAssoc(ghostteleportlocs) + // Now we make a list of areas that exist on the station. Good for if you don't want to select areas that exist for one station but not others. Directly references + existing_station_areas = list() + for(var/area/AR in world) + var/turf/picked = safepick(get_area_turfs(AR.type)) + if(picked && is_station_level(picked.z)) + existing_station_areas += AR + // World name if(GLOB.configuration.general.server_name) world.name = "[GLOB.configuration.general.server_name]: [station_name()]" diff --git a/code/controllers/subsystem/metrics.dm b/code/controllers/subsystem/metrics.dm index 7ebaadfae77..181f24cfb08 100644 --- a/code/controllers/subsystem/metrics.dm +++ b/code/controllers/subsystem/metrics.dm @@ -23,11 +23,12 @@ SUBSYSTEM_DEF(metrics) var/list/out = list() out["@timestamp"] = time_stamp() // This is required by ElasticSearch, complete with this name. DO NOT REMOVE THIS. out["cpu"] = world.cpu - // out["maptick"] = world.map_cpu // TODO: 514 + out["maptick"] = world.map_cpu out["elapsed_processed"] = world.time out["elapsed_real"] = (REALTIMEOFDAY - world_init_time) out["client_count"] = length(GLOB.clients) out["round_id"] = text2num(GLOB.round_id) // This is so we can filter the metrics by a single round ID + out["server_id"] = GLOB.configuration.system.instance_id // And this is so we can filter by instance ID // Funnel in all SS metrics var/list/ss_data = list() diff --git a/code/controllers/subsystem/statistics.dm b/code/controllers/subsystem/statistics.dm index 63c20742904..01ebaf215f7 100644 --- a/code/controllers/subsystem/statistics.dm +++ b/code/controllers/subsystem/statistics.dm @@ -18,10 +18,11 @@ SUBSYSTEM_DEF(statistics) return else var/datum/db_query/statquery = SSdbcore.NewQuery( - "INSERT INTO legacy_population (playercount, admincount, time) VALUES (:playercount, :admincount, NOW())", + "INSERT INTO legacy_population (playercount, admincount, time, server_id) VALUES (:playercount, :admincount, NOW(), :server_id)", list( "playercount" = length(GLOB.clients), - "admincount" = length(GLOB.admins) + "admincount" = length(GLOB.admins), + "server_id" = GLOB.configuration.system.instance_id ) ) statquery.warn_execute() diff --git a/code/controllers/subsystem/ticker.dm b/code/controllers/subsystem/ticker.dm index 14a952cb36f..5bb1d0eb69f 100644 --- a/code/controllers/subsystem/ticker.dm +++ b/code/controllers/subsystem/ticker.dm @@ -287,7 +287,7 @@ SUBSYSTEM_DEF(ticker) else log_debug("Playercount: [playercount] versus trigger: [highpop_trigger] - keeping standard job config") - SSnightshift.check_nightshift() + SSnightshift.check_nightshift(TRUE) #ifdef UNIT_TESTS RunUnitTests() @@ -408,12 +408,65 @@ SUBSYSTEM_DEF(ticker) if(player.mind.assigned_role != player.mind.special_role) SSjobs.AssignRank(player, player.mind.assigned_role, FALSE) SSjobs.EquipRank(player, player.mind.assigned_role, FALSE) - EquipCustomItems(player) + equip_cuis(player) + if(captainless) for(var/mob/M in GLOB.player_list) if(!isnewplayer(M)) to_chat(M, "Captainship not forced on anyone.") +/datum/controller/subsystem/ticker/proc/equip_cuis(mob/living/carbon/human/H) + if(!H.client) + return // If they are spawning without a client (somehow), they *cant* have a CUI list + for(var/datum/custom_user_item/cui in H.client.cui_entries) + // Skip items with invalid character names + if((cui.characer_name != H.real_name) && !cui.all_characters_allowed) + continue + + var/ok = FALSE + + if(!cui.all_jobs_allowed) + var/alt_blocked = FALSE + if(H.mind.role_alt_title) + if(!(H.mind.role_alt_title in cui.allowed_jobs)) + alt_blocked = TRUE + if(!(H.mind.assigned_role in cui.allowed_jobs) || alt_blocked) + continue + + var/obj/item/I = new cui.object_typepath() + var/name_override = cui.item_name_override + var/desc_override = cui.item_desc_override + + if(name_override) + I.name = name_override + if(desc_override) + I.desc = desc_override + + if(istype(H.back, /obj/item/storage)) // Try to place it in something on the mob's back + var/obj/item/storage/S = H.back + if(length(S.contents) < S.storage_slots) + I.forceMove(H.back) + ok = TRUE + to_chat(H, "Your [I.name] has been added to your [H.back.name].") + + if(!ok) + for(var/obj/item/storage/S in H.contents) // Try to place it in any item that can store stuff, on the mob. + if(length(S.contents) < S.storage_slots) + I.forceMove(S) + ok = TRUE + to_chat(H, "Your [I.name] has been added to your [S.name].") + break + + if(!ok) // Finally, since everything else failed, place it on the ground + var/turf/T = get_turf(H) + if(T) + I.forceMove(T) + to_chat(H, "Your [I.name] is on the [T.name] below you.") + else + to_chat(H, "Your [I.name] couldnt spawn anywhere on you or even on the floor below you. Please file a bug report.") + qdel(I) + + /datum/controller/subsystem/ticker/proc/send_tip_of_the_round() var/m if(selected_tip) diff --git a/code/controllers/subsystem/vote.dm b/code/controllers/subsystem/vote.dm index 579a6b7c07c..a93d7e443c8 100644 --- a/code/controllers/subsystem/vote.dm +++ b/code/controllers/subsystem/vote.dm @@ -209,7 +209,7 @@ SUBSYSTEM_DEF(vote) /datum/controller/subsystem/vote/proc/initiate_vote(vote_type, initiator_key, code_invoked = FALSE) if(!mode) - if(started_time != null && !check_rights(R_ADMIN)) + if(usr && started_time != null && !check_rights(R_ADMIN)) // Allow the game to call votes whenever. But check other callers var/next_allowed_time = (started_time + GLOB.configuration.vote.vote_delay) if(next_allowed_time > world.time) return 0 @@ -266,8 +266,12 @@ SUBSYSTEM_DEF(vote) Click here or type vote to place your vote. You have [GLOB.configuration.vote.vote_time / 10] seconds to vote."}) switch(vote_type) - if("crew transfer", "gamemode", "custom", "map") + if("crew transfer", "gamemode", "custom") SEND_SOUND(world, sound('sound/ambience/alarm4.ogg')) + if("map") + SEND_SOUND(world, sound('sound/ambience/alarm4.ogg')) + for(var/mob/M in GLOB.player_list) + M.throw_alert("Map Vote", /obj/screen/alert/notify_mapvote, timeout_override = GLOB.configuration.vote.vote_time) if(mode == "gamemode" && SSticker.ticker_going) SSticker.ticker_going = FALSE to_chat(world, "Round start has been delayed.") diff --git a/code/datums/action.dm b/code/datums/action.dm index be7f82494f9..4ba27fb037d 100644 --- a/code/datums/action.dm +++ b/code/datums/action.dm @@ -423,6 +423,13 @@ /datum/action/item_action/remove_badge name = "Remove Holobadge" + +// Clown Acrobat Shoes +/datum/action/item_action/slipping + name = "Tactical Slip" + desc = "Activates the clown shoes' ankle-stimulating module, allowing the user to do a short slip forward going under anyone." + button_icon_state = "clown" + // Jump boots /datum/action/item_action/bhop name = "Activate Jump Boots" diff --git a/code/datums/armor.dm b/code/datums/armor.dm index 0de7dde1ee7..e764d3384de 100644 --- a/code/datums/armor.dm +++ b/code/datums/armor.dm @@ -52,7 +52,7 @@ return vars[rating] /datum/armor/proc/getList() - return list("melee" = melee, "bullet" = bullet, "laser" = laser, "energy" = energy, "bomb" = bomb, "bio" = bio, "rad" = rad, "fire" = fire, "acid" = acid, "magic" = magic) + return list(MELEE = melee, BULLET = bullet, LASER = laser, ENERGY = energy, BOMB = bomb, BIO = bio, RAD = rad, FIRE = fire, ACID = acid, MAGIC = magic) /datum/armor/proc/attachArmor(datum/armor/AA) return getArmor(melee + AA.melee, bullet + AA.bullet, laser + AA.laser, energy + AA.energy, bomb + AA.bomb, bio + AA.bio, rad + AA.rad, fire + AA.fire, acid + AA.acid, magic + AA.magic) diff --git a/code/datums/cache/crew.dm b/code/datums/cache/crew.dm index 8eba4030d4a..f2f5bf7a770 100644 --- a/code/datums/cache/crew.dm +++ b/code/datums/cache/crew.dm @@ -57,7 +57,7 @@ GLOBAL_DATUM_INIT(crew_repository, /datum/repository/crew, new()) if(C.sensor_mode >= SUIT_SENSOR_TRACKING) var/area/A = get_area(H) - crewmemberData["area"] = sanitize(A.name) + crewmemberData["area"] = sanitize_simple(A.name) crewmemberData["x"] = pos.x crewmemberData["y"] = pos.y diff --git a/code/datums/components/material_container.dm b/code/datums/components/material_container.dm index f4b8e84204f..2ea582aab62 100644 --- a/code/datums/components/material_container.dm +++ b/code/datums/components/material_container.dm @@ -49,6 +49,10 @@ var/mat_path = possible_mats[id] materials[id] = new mat_path() +/datum/component/material_container/Destroy(force, silent) + QDEL_LIST_ASSOC_VAL(materials) + return ..() + /datum/component/material_container/proc/OnExamine(datum/source, mob/user, list/examine_list) if(show_on_examine) for(var/I in materials) diff --git a/code/datums/custom_user_item.dm b/code/datums/custom_user_item.dm new file mode 100644 index 00000000000..9680a990488 --- /dev/null +++ b/code/datums/custom_user_item.dm @@ -0,0 +1,66 @@ +/** + * # Custom User Item + * + * Holder for CUIs + * + * This datum is a holder that is essentially a "model" of the `customuseritems` + * database table, and is used for giving people their CUIs on spawn. + * It is instanced as part of the client data loading framework on the client. + * + */ +/datum/custom_user_item + /// Can this be used on all characters? + var/all_characters_allowed = FALSE + /// Name of the character that can have this item. + var/characer_name + /// Are all jobs allowed? + var/all_jobs_allowed = FALSE + /// List of allowed jobs + var/list/allowed_jobs = list() + /// Custom item typepath + var/object_typepath + /// Custom item name override + var/item_name_override + /// Custom item description override + var/item_desc_override + /// Raw job mask + var/raw_job_mask + + +/** + * CUI Info Parser + * + * Parses all the raw info into usable stuff, and also does validity checks + * Returns TRUE if its a valid item, and FALSE if not + * + * Arguments: + * * owning_ckey - Player who owns this item. Used for logging purposes. + */ +/datum/custom_user_item/proc/parse_info(owning_ckey) + . = FALSE // Setting this here means it will return false even if it runtimes + + // Sort path + if(!object_typepath || !ispath(object_typepath)) + stack_trace("Incorrect database entry found in table 'customuseritems' path value is [object_typepath ? object_typepath : "(NULL)"], which doesnt exist. Ask the host to look at CUI entries for [owning_ckey]") + return + + // Sort job mask + if(raw_job_mask == "*") + all_jobs_allowed = TRUE + else + var/list/local_allowed_jobs = splittext(raw_job_mask, ",") + for(var/i in 1 to length(local_allowed_jobs)) + if(istext(local_allowed_jobs[i])) + local_allowed_jobs[i] = trim(local_allowed_jobs[i]) + + allowed_jobs = local_allowed_jobs + + // Sort character name + if(characer_name == "*") + all_characters_allowed = TRUE + + return TRUE + + +/datum/custom_user_item/vv_edit_var(var_name, var_value) + return FALSE // fuck off diff --git a/code/datums/datacore.dm b/code/datums/datacore.dm index 87aabb95445..7104deef923 100644 --- a/code/datums/datacore.dm +++ b/code/datums/datacore.dm @@ -461,10 +461,6 @@ GLOBAL_VAR_INIT(record_id_num, 1001) clothes_s = new /icon('icons/mob/clothing/uniform.dmi', "detective_s") clothes_s.Blend(new /icon('icons/mob/clothing/feet.dmi', "brown"), ICON_UNDERLAY) clothes_s.Blend(new /icon('icons/mob/clothing/suit.dmi', "detective"), ICON_OVERLAY) - if("Security Pod Pilot") - clothes_s = new /icon('icons/mob/clothing/uniform.dmi', "secred_s") - clothes_s.Blend(new /icon('icons/mob/clothing/feet.dmi', "jackboots"), ICON_UNDERLAY) - clothes_s.Blend(new /icon('icons/mob/clothing/suit.dmi', "bomber"), ICON_OVERLAY) if("Brig Physician") clothes_s = new /icon('icons/mob/clothing/uniform.dmi', "medical_s") clothes_s.Blend(new /icon('icons/mob/clothing/feet.dmi', "white"), ICON_UNDERLAY) @@ -484,10 +480,6 @@ GLOBAL_VAR_INIT(record_id_num, 1001) clothes_s = new /icon('icons/mob/clothing/uniform.dmi', "atmos_s") clothes_s.Blend(new /icon('icons/mob/clothing/feet.dmi', "black"), ICON_UNDERLAY) clothes_s.Blend(new /icon('icons/mob/clothing/belt.dmi', "utility"), ICON_OVERLAY) - if("Mechanic") - clothes_s = new /icon('icons/mob/clothing/uniform.dmi', "mechanic_s") - clothes_s.Blend(new /icon('icons/mob/clothing/feet.dmi', "orange"), ICON_UNDERLAY) - clothes_s.Blend(new /icon('icons/mob/clothing/belt.dmi', "utility"), ICON_OVERLAY) if("Roboticist") clothes_s = new /icon('icons/mob/clothing/uniform.dmi', "robotics_s") clothes_s.Blend(new /icon('icons/mob/clothing/feet.dmi', "black"), ICON_UNDERLAY) diff --git a/code/datums/datumvars.dm b/code/datums/datumvars.dm index 75f03f3c3d8..2cd1efbc009 100644 --- a/code/datums/datumvars.dm +++ b/code/datums/datumvars.dm @@ -893,10 +893,10 @@ if(!result || !A) return TRUE - A.armor = A.armor.setRating(armorlist["melee"], armorlist["bullet"], armorlist["laser"], armorlist["energy"], armorlist["bomb"], armorlist["bio"], armorlist["rad"], armorlist["fire"], armorlist["acid"], armorlist["magic"]) + A.armor = A.armor.setRating(armorlist[MELEE], armorlist[BULLET], armorlist[LASER], armorlist[ENERGY], armorlist[BOMB], armorlist[BIO], armorlist[RAD], armorlist[FIRE], armorlist[ACID], armorlist[MAGIC]) - log_admin("[key_name(usr)] modified the armor on [A] to: melee = [armorlist["melee"]], bullet = [armorlist["bullet"]], laser = [armorlist["laser"]], energy = [armorlist["energy"]], bomb = [armorlist["bomb"]], bio = [armorlist["bio"]], rad = [armorlist["rad"]], fire = [armorlist["fire"]], acid = [armorlist["acid"]], magic = [armorlist["magic"]]") - message_admins("[key_name(usr)] modified the armor on [A] to: melee = [armorlist["melee"]], bullet = [armorlist["bullet"]], laser = [armorlist["laser"]], energy = [armorlist["energy"]], bomb = [armorlist["bomb"]], bio = [armorlist["bio"]], rad = [armorlist["rad"]], fire = [armorlist["fire"]], acid = [armorlist["acid"]], magic = [armorlist["magic"]]") + log_admin("[key_name(usr)] modified the armor on [A] to: melee = [armorlist[MELEE]], bullet = [armorlist[BULLET]], laser = [armorlist[LASER]], energy = [armorlist[ENERGY]], bomb = [armorlist[BOMB]], bio = [armorlist[BIO]], rad = [armorlist[RAD]], fire = [armorlist[FIRE]], acid = [armorlist[ACID]], magic = [armorlist[MAGIC]]") + message_admins("[key_name(usr)] modified the armor on [A] to: melee = [armorlist[MELEE]], bullet = [armorlist[BULLET]], laser = [armorlist[LASER]], energy = [armorlist[ENERGY]], bomb = [armorlist[BOMB]], bio = [armorlist[BIO]], rad = [armorlist[RAD]], fire = [armorlist[FIRE]], acid = [armorlist[ACID]], magic = [armorlist[MAGIC]]") return TRUE else if(href_list["addreagent"]) /* Made on /TG/, credit to them. */ diff --git a/code/datums/diseases/transformation.dm b/code/datums/diseases/transformation.dm index 4098e15e2af..29efffd6bdf 100644 --- a/code/datums/diseases/transformation.dm +++ b/code/datums/diseases/transformation.dm @@ -17,6 +17,7 @@ var/list/stage5 = list("Oh the humanity!") var/transformation_text = null var/new_form = /mob/living/carbon/human + var/job_role = null /datum/disease/transformation/stage_act() ..() @@ -40,8 +41,8 @@ if(istype(affected_mob, /mob/living/carbon) && affected_mob.stat != DEAD) if(stage5) to_chat(affected_mob, pick(stage5)) - if(jobban_isbanned(affected_mob, new_form)) - affected_mob.death(1) + if(jobban_isbanned(affected_mob, job_role)) + affected_mob.death() return if(affected_mob.notransform) return @@ -133,6 +134,7 @@ stage4 = list("Your skin feels very loose.", "You can feel... something...inside you.") stage5 = list("Your skin feels as if it's about to burst off!") new_form = /mob/living/silicon/robot + job_role = "Cyborg" /datum/disease/transformation/robot/stage_act() @@ -165,6 +167,7 @@ stage4 = list("Your skin feels very tight.", "Your blood boils!", "You can feel... something...inside you.") stage5 = list("Your skin feels as if it's about to burst off!") new_form = /mob/living/carbon/alien/humanoid/hunter + job_role = ROLE_ALIEN /datum/disease/transformation/xeno/stage_act() ..() @@ -248,3 +251,4 @@ stage5 = list("You have become a morph.") transformation_text = "This transformation does NOT make you an antagonist if you were not one already. If you were not an antagonist, you should not eat any steal objectives or the contents of the armory." new_form = /mob/living/simple_animal/hostile/morph + job_role = ROLE_MORPH diff --git a/code/datums/helper_datums/construction_datum.dm b/code/datums/helper_datums/construction_datum.dm index 7c05f7806f9..6695297337d 100644 --- a/code/datums/helper_datums/construction_datum.dm +++ b/code/datums/helper_datums/construction_datum.dm @@ -6,6 +6,7 @@ var/list/steps var/atom/holder var/result + var/index var/list/steps_desc var/taskpath = null // Path of job objective completed. @@ -128,7 +129,6 @@ return TRUE /datum/construction/reversible - var/index /datum/construction/reversible/New(atom) ..() @@ -168,7 +168,6 @@ #define state_prev "prev" /datum/construction/reversible2 - var/index var/base_icon = "durand" /datum/construction/reversible2/New(atom) diff --git a/code/datums/http.dm b/code/datums/http.dm index e7ba1620854..6679b859c65 100644 --- a/code/datums/http.dm +++ b/code/datums/http.dm @@ -19,6 +19,8 @@ var/headers /// URL that the request is being sent to var/url + /// If present, response body will be saved to this file. + var/output_file /// The raw response, which will be decoeded into a [/datum/http_response] var/_raw_response /// Callback for executing after async requests. Will be called with an argument of [/datum/http_response] as first argument @@ -42,7 +44,7 @@ THE METHODS IN THIS FILE ARE TO BE USED BY THE SUBSYSTEM AS A MANGEMENT HUB * * _body - The body of the request, if applicable * * _headers - Associative list of HTTP headers to send, if applicab;e */ -/datum/http_request/proc/prepare(_method, _url, _body = "", list/_headers) +/datum/http_request/proc/prepare(_method, _url, _body = "", list/_headers, _output_file) if(!length(_headers)) headers = "" else @@ -51,6 +53,7 @@ THE METHODS IN THIS FILE ARE TO BE USED BY THE SUBSYSTEM AS A MANGEMENT HUB method = _method url = _url body = _body + output_file = _output_file /** * Blocking executor @@ -60,7 +63,7 @@ THE METHODS IN THIS FILE ARE TO BE USED BY THE SUBSYSTEM AS A MANGEMENT HUB */ /datum/http_request/proc/execute_blocking() CRASH("Attempted to execute a blocking HTTP request") - // _raw_response = rustg_http_request_blocking(method, url, body, headers) + // _raw_response = rustg_http_request_blocking(method, url, body, headers, build_options()) /** * Async execution starter @@ -73,7 +76,7 @@ THE METHODS IN THIS FILE ARE TO BE USED BY THE SUBSYSTEM AS A MANGEMENT HUB if(in_progress) CRASH("Attempted to re-use a request object.") - id = rustg_http_request_async(method, url, body, headers) + id = rustg_http_request_async(method, url, body, headers, build_options()) if(isnull(text2num(id))) _raw_response = "Proc error: [id]" @@ -81,6 +84,16 @@ THE METHODS IN THIS FILE ARE TO BE USED BY THE SUBSYSTEM AS A MANGEMENT HUB else in_progress = TRUE +/** + * Options builder + * + * Builds options for if we want to download files with SShttp + */ +/datum/http_request/proc/build_options() + if(output_file) + return json_encode(list("output_filename" = output_file, "body_filename" = null)) + return null + /** * Async completion checker * diff --git a/code/datums/hud.dm b/code/datums/hud.dm index 60fbb9c8194..9eeda5fd9f2 100644 --- a/code/datums/hud.dm +++ b/code/datums/hud.dm @@ -2,28 +2,28 @@ GLOBAL_LIST_EMPTY(all_huds) ///GLOBAL HUD LIST -GLOBAL_LIST_INIT(huds, list( \ - DATA_HUD_SECURITY_BASIC = new/datum/atom_hud/data/human/security/basic(), \ - DATA_HUD_SECURITY_ADVANCED = new/datum/atom_hud/data/human/security/advanced(), \ - DATA_HUD_MEDICAL_BASIC = new/datum/atom_hud/data/human/medical/basic(), \ - DATA_HUD_MEDICAL_ADVANCED = new/datum/atom_hud/data/human/medical/advanced(), \ - DATA_HUD_DIAGNOSTIC = new/datum/atom_hud/data/diagnostic(), \ - DATA_HUD_DIAGNOSTIC_ADVANCED = new/datum/atom_hud/data/diagnostic/advanced(), \ - DATA_HUD_HYDROPONIC = new/datum/atom_hud/data/hydroponic(), \ - ANTAG_HUD_CULT = new/datum/atom_hud/antag(), \ - ANTAG_HUD_REV = new/datum/atom_hud/antag(), \ - ANTAG_HUD_OPS = new/datum/atom_hud/antag(), \ - ANTAG_HUD_WIZ = new/datum/atom_hud/antag(), \ - ANTAG_HUD_SHADOW = new/datum/atom_hud/antag(), \ - ANTAG_HUD_TRAITOR = new/datum/atom_hud/antag/hidden(),\ - ANTAG_HUD_NINJA = new/datum/atom_hud/antag/hidden(),\ - ANTAG_HUD_CHANGELING = new/datum/atom_hud/antag/hidden(),\ - ANTAG_HUD_VAMPIRE = new/datum/atom_hud/antag/hidden(),\ - ANTAG_HUD_ABDUCTOR = new/datum/atom_hud/antag/hidden(),\ - DATA_HUD_ABDUCTOR = new/datum/atom_hud/abductor(),\ - ANTAG_HUD_EVENTMISC = new/datum/atom_hud/antag/hidden(),\ - ANTAG_HUD_BLOB = new/datum/atom_hud/antag/hidden()\ -)) +GLOBAL_LIST_INIT(huds, list( + DATA_HUD_SECURITY_BASIC = new/datum/atom_hud/data/human/security/basic(), + DATA_HUD_SECURITY_ADVANCED = new/datum/atom_hud/data/human/security/advanced(), + DATA_HUD_MEDICAL_BASIC = new/datum/atom_hud/data/human/medical/basic(), + DATA_HUD_MEDICAL_ADVANCED = new/datum/atom_hud/data/human/medical/advanced(), + DATA_HUD_DIAGNOSTIC_BASIC = new/datum/atom_hud/data/diagnostic/basic(), + DATA_HUD_DIAGNOSTIC_ADVANCED = new/datum/atom_hud/data/diagnostic/advanced(), + DATA_HUD_HYDROPONIC = new/datum/atom_hud/data/hydroponic(), + ANTAG_HUD_CULT = new/datum/atom_hud/antag(), + ANTAG_HUD_REV = new/datum/atom_hud/antag(), + ANTAG_HUD_OPS = new/datum/atom_hud/antag(), + ANTAG_HUD_WIZ = new/datum/atom_hud/antag(), + ANTAG_HUD_SHADOW = new/datum/atom_hud/antag(), + ANTAG_HUD_TRAITOR = new/datum/atom_hud/antag/hidden(), + ANTAG_HUD_NINJA = new/datum/atom_hud/antag/hidden(), + ANTAG_HUD_CHANGELING = new/datum/atom_hud/antag/hidden(), + ANTAG_HUD_VAMPIRE = new/datum/atom_hud/antag/hidden(), + ANTAG_HUD_ABDUCTOR = new/datum/atom_hud/antag/hidden(), + DATA_HUD_ABDUCTOR = new/datum/atom_hud/abductor(), + ANTAG_HUD_EVENTMISC = new/datum/atom_hud/antag/hidden(), + ANTAG_HUD_BLOB = new/datum/atom_hud/antag/hidden() + )) /datum/atom_hud var/list/atom/hudatoms = list() //list of all atoms which display this hud diff --git a/code/datums/mind.dm b/code/datums/mind.dm index 29a1b29de97..62dabccc88b 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -85,6 +85,10 @@ original = null return ..() +/datum/mind/proc/get_display_key() + var/clientKey = current?.client?.get_display_key() + return clientKey ? clientKey : key + /datum/mind/proc/transfer_to(mob/living/new_character) var/datum/atom_hud/antag/hud_to_transfer = antag_hud //we need this because leave_hud() will clear this list var/mob/living/old_current = current diff --git a/code/datums/progressbar.dm b/code/datums/progressbar.dm index 4a812b40e4e..3efc5b1e094 100644 --- a/code/datums/progressbar.dm +++ b/code/datums/progressbar.dm @@ -14,9 +14,9 @@ EXCEPTION("Invalid target given") if(goal_number) goal = goal_number - bar = image('icons/effects/progessbar.dmi', target, "prog_bar_0", HUD_LAYER) + bar = image('icons/effects/progessbar.dmi', target, "prog_bar_0", ABOVE_HUD_LAYER) bar.alpha = 0 - bar.plane = HUD_PLANE + bar.plane = ABOVE_HUD_PLANE bar.appearance_flags = APPEARANCE_UI_IGNORE_ALPHA user = User if(user) diff --git a/code/datums/spells/ethereal_jaunt.dm b/code/datums/spells/ethereal_jaunt.dm index 4c7c6b76b36..972b050007c 100644 --- a/code/datums/spells/ethereal_jaunt.dm +++ b/code/datums/spells/ethereal_jaunt.dm @@ -55,12 +55,17 @@ sleep(jaunt_in_time) qdel(holder) if(!QDELETED(target)) - if(mobloc.density) + if(!(target.Move(mobloc))) for(var/turf/T in orange(7)) - if(T) - if(target.Move(T)) - break - target.canmove = 1 + if(isspaceturf(T)) + continue + if(T && target.Move(T)) + target.canmove = TRUE + return + for(var/turf/space/S in orange(7)) //loop for space turfs in case there were no normal ones last loop + if(S && target.Move(S)) + break + target.canmove = TRUE //if there are no valid tiles in a range of 7, just let them spawn wherever they are currently /obj/effect/proc_holder/spell/targeted/ethereal_jaunt/proc/jaunt_steam(mobloc) var/datum/effect_system/steam_spread/steam = new /datum/effect_system/steam_spread() diff --git a/code/datums/spells/horsemask.dm b/code/datums/spells/horsemask.dm index d5f686fb763..f22689067d8 100644 --- a/code/datums/spells/horsemask.dm +++ b/code/datums/spells/horsemask.dm @@ -30,7 +30,7 @@ var/obj/item/clothing/mask/horsehead/magichead = new /obj/item/clothing/mask/horsehead magichead.flags |= NODROP | DROPDEL //curses! magichead.flags_inv = null //so you can still see their face - magichead.voicechange = 1 //NEEEEIIGHH + magichead.voicechange = TRUE //NEEEEIIGHH target.visible_message( "[target]'s face lights up in fire, and after the event a horse's head takes its place!", \ "Your face burns up, and shortly after the fire you realise you have the face of a horse!") if(!target.unEquip(target.wear_mask)) diff --git a/code/datums/spells/shapeshift.dm b/code/datums/spells/shapeshift.dm index 1095457278f..41bf7f299d6 100644 --- a/code/datums/spells/shapeshift.dm +++ b/code/datums/spells/shapeshift.dm @@ -96,10 +96,10 @@ invocation_type = "none" action_icon_state = "vampire_bats" - shapeshift_type = /mob/living/simple_animal/hostile/scarybat/batswarm - current_shapes = list(/mob/living/simple_animal/hostile/scarybat/batswarm) + shapeshift_type = /mob/living/simple_animal/hostile/scarybat/adminvampire + current_shapes = list(/mob/living/simple_animal/hostile/scarybat/adminvampire) current_casters = list() - possible_shapes = list(/mob/living/simple_animal/hostile/scarybat/batswarm) + possible_shapes = list(/mob/living/simple_animal/hostile/scarybat/adminvampire) /obj/effect/proc_holder/spell/targeted/shapeshift/hellhound name = "Lesser Hellhound Form" diff --git a/code/datums/status_effects/buffs.dm b/code/datums/status_effects/buffs.dm index 0494e14d647..54735988b9c 100644 --- a/code/datums/status_effects/buffs.dm +++ b/code/datums/status_effects/buffs.dm @@ -1,5 +1,58 @@ //Largely beneficial effects go here, even if they have drawbacks. An example is provided in Shadow Mend. +/datum/status_effect/his_grace + id = "his_grace" + duration = -1 + tick_interval = 4 + alert_type = /obj/screen/alert/status_effect/his_grace + var/bloodlust = 0 + +/obj/screen/alert/status_effect/his_grace + name = "His Grace" + desc = "His Grace hungers, and you must feed Him." + icon_state = "his_grace" + alerttooltipstyle = "hisgrace" + +/obj/screen/alert/status_effect/his_grace/MouseEntered(location, control, params) + desc = initial(desc) + var/datum/status_effect/his_grace/HG = attached_effect + desc += "
Current Bloodthirst: [HG.bloodlust]\ +
Becomes undroppable at [HIS_GRACE_FAMISHED]\ +
Will consume you at [HIS_GRACE_CONSUME_OWNER]" + ..() + +/datum/status_effect/his_grace/on_apply() + add_attack_logs(owner, owner, "gained His Grace's stun immunity", ATKLOG_ALL) + owner.add_stun_absorption("hisgrace", INFINITY, 3, null, "His Grace protects you from the stun!") + return ..() + +/datum/status_effect/his_grace/tick() + bloodlust = 0 + var/graces = 0 + var/list/held_items = list() + held_items += owner.l_hand + held_items += owner.r_hand + for(var/obj/item/his_grace/HG in held_items) + if(HG.bloodthirst > bloodlust) + bloodlust = HG.bloodthirst + if(HG.awakened) + graces++ + if(!graces) + owner.apply_status_effect(STATUS_EFFECT_HISWRATH) + qdel(src) + return + var/grace_heal = bloodlust * 0.05 + owner.adjustBruteLoss(-grace_heal) + owner.adjustFireLoss(-grace_heal) + owner.adjustToxLoss(-grace_heal) + owner.adjustOxyLoss(-(grace_heal * 2)) + owner.adjustCloneLoss(-grace_heal) + +/datum/status_effect/his_grace/on_remove() + add_attack_logs(owner, owner, "lost His Grace's stun immunity", ATKLOG_ALL) + if(islist(owner.stun_absorption) && owner.stun_absorption["hisgrace"]) + owner.stun_absorption -= "hisgrace" + /datum/status_effect/shadow_mend id = "shadow_mend" duration = 30 diff --git a/code/datums/status_effects/debuffs.dm b/code/datums/status_effects/debuffs.dm index d8b5e4d9cbe..498bb042497 100644 --- a/code/datums/status_effects/debuffs.dm +++ b/code/datums/status_effects/debuffs.dm @@ -1,5 +1,28 @@ //OTHER DEBUFFS +/datum/status_effect/his_wrath //does minor damage over time unless holding His Grace + id = "his_wrath" + duration = -1 + tick_interval = 4 + alert_type = /obj/screen/alert/status_effect/his_wrath + +/obj/screen/alert/status_effect/his_wrath + name = "His Wrath" + desc = "You fled from His Grace instead of feeding Him, and now you suffer." + icon_state = "his_grace" + alerttooltipstyle = "hisgrace" + +/datum/status_effect/his_wrath/tick() + var/list/held_items = list() + held_items += owner.l_hand + held_items += owner.r_hand + for(var/obj/item/his_grace/HG in held_items) + qdel(src) + return + owner.adjustBruteLoss(0.1) + owner.adjustFireLoss(0.1) + owner.adjustToxLoss(0.2) + /datum/status_effect/cultghost //is a cult ghost and can't use manifest runes id = "cult_ghost" duration = -1 diff --git a/code/datums/supplypacks.dm b/code/datums/supplypacks.dm index 163dd8ca170..2070e6558cd 100644 --- a/code/datums/supplypacks.dm +++ b/code/datums/supplypacks.dm @@ -193,14 +193,6 @@ GLOBAL_LIST_INIT(all_supply_groups, list(SUPPLY_EMERGENCY,SUPPLY_SECURITY,SUPPLY containername = "special ops crate" hidden = 1 -/datum/supply_packs/emergency/syndicate - name = "ERROR_NULL_ENTRY" - contains = list(/obj/item/storage/box/syndicate) - cost = 140 - containertype = /obj/structure/closet/crate - containername = "crate" - hidden = 1 - ////////////////////////////////////////////////////////////////////////////// //////////////////////////// Security //////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// @@ -228,6 +220,13 @@ GLOBAL_LIST_INIT(all_supply_groups, list(SUPPLY_EMERGENCY,SUPPLY_SECURITY,SUPPLY contains = list(/obj/item/vending_refill/security) containername = "SecTech supply crate" +/datum/supply_packs/security/vending/clothingvendor + name = "Security Clothing Vendors Crate" + cost = 40 + contains = list(/obj/item/vending_refill/secdrobe, + /obj/item/vending_refill/detdrobe) + containername = "security clothing vendor crate" + ////// Armor: Basic /datum/supply_packs/security/helmets @@ -405,28 +404,6 @@ GLOBAL_LIST_INIT(all_supply_groups, list(SUPPLY_EMERGENCY,SUPPLY_SECURITY,SUPPLY cost = 80 containername = "combat shotgun crate" -/datum/supply_packs/security/armory/buckshotammo - name = "Buckshot Ammo Crate" - contains = list(/obj/item/ammo_box/shotgun/buck, - /obj/item/storage/box/buck, - /obj/item/storage/box/buck, - /obj/item/storage/box/buck, - /obj/item/storage/box/buck, - /obj/item/storage/box/buck) - cost = 45 - containername = "buckshot ammo crate" - -/datum/supply_packs/security/armory/slugammo - name = "Slug Ammo Crate" - contains = list(/obj/item/ammo_box/shotgun, - /obj/item/storage/box/slug, - /obj/item/storage/box/slug, - /obj/item/storage/box/slug, - /obj/item/storage/box/slug, - /obj/item/storage/box/slug) - cost = 45 - containername = "slug ammo crate" - /datum/supply_packs/security/armory/expenergy name = "Energy Guns Crate" contains = list(/obj/item/gun/energy/gun, @@ -578,6 +555,13 @@ GLOBAL_LIST_INIT(all_supply_groups, list(SUPPLY_EMERGENCY,SUPPLY_SECURITY,SUPPLY /obj/item/vending_refill/youtool) containername = "engineering supply crate" +/datum/supply_packs/engineering/vending/clothingvendor + name = "Engineering Clothing Vendors Crate" + cost = 20 + contains = list(/obj/item/vending_refill/engidrobe, + /obj/item/vending_refill/atmosdrobe) + containername = "engineering clothing vendor crate" + /datum/supply_packs/engineering/powergamermitts name = "Insulated Gloves Crate" contains = list(/obj/item/clothing/gloves/color/yellow, @@ -896,6 +880,14 @@ GLOBAL_LIST_INIT(all_supply_groups, list(SUPPLY_EMERGENCY,SUPPLY_SECURITY,SUPPLY /obj/item/vending_refill/wallmed) containername = "medical vending crate" +/datum/supply_packs/medical/vending/clothingvendor + name = "Medical Clothing Vendors Crate" + cost = 20 + contains = list(/obj/item/vending_refill/medidrobe, + /obj/item/vending_refill/chemdrobe, + /obj/item/vending_refill/virodrobe) + containername = "medical clothing vendors crate" + /datum/supply_packs/medical/bloodpacks name = "Blood Pack Variety Crate" contains = list(/obj/item/reagent_containers/iv_bag, @@ -1043,6 +1035,14 @@ GLOBAL_LIST_INIT(all_supply_groups, list(SUPPLY_EMERGENCY,SUPPLY_SECURITY,SUPPLY containertype = /obj/structure/largecrate containername = "oil tank crate" +/datum/supply_packs/science/vending/clothingvendor + name = "Science Clothing Vendors Crate" + cost = 20 + contains = list(/obj/item/vending_refill/scidrobe, + /obj/item/vending_refill/robodrobe, + /obj/item/vending_refill/genedrobe,) + containername = "science clothing vendor crate" + ////////////////////////////////////////////////////////////////////////////// //////////////////////////// Organic ///////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// @@ -1462,6 +1462,12 @@ GLOBAL_LIST_INIT(all_supply_groups, list(SUPPLY_EMERGENCY,SUPPLY_SECURITY,SUPPLY containertype = /obj/structure/closet/crate/secure containername = "shaft miner starter kit" +/datum/supply_packs/misc/carpet + name = "Carpet Crate" + cost = 20 + contains = list(/obj/item/stack/tile/carpet/twenty) + containername = "carpet crate" + ///////////// Paper Work @@ -1820,6 +1826,20 @@ GLOBAL_LIST_INIT(all_supply_groups, list(SUPPLY_EMERGENCY,SUPPLY_SECURITY,SUPPLY cost = 15 containername = "boxing supply crate" +/datum/supply_packs/misc/vending/clothingvendor + name = "Service Clothing Vendors Crate" + cost = 20 + contains = list(/obj/item/vending_refill/bardrobe, + /obj/item/vending_refill/chefdrobe, + /obj/item/vending_refill/hydrodrobe) + containername = "service clothing vendor crate" + +/datum/supply_packs/misc/vending/clothingvendor/cargo + name = "Cargo Clothing Vendors Crate" + cost = 20 + contains = list(/obj/item/vending_refill/cargodrobe) + containername = "cargo clothing vendor crate" + ///////////// Station Goals /datum/supply_packs/misc/station_goal diff --git a/code/datums/uplink_item.dm b/code/datums/uplink_item.dm index aa1e74a911e..12e2f1f71e1 100644 --- a/code/datums/uplink_item.dm +++ b/code/datums/uplink_item.dm @@ -167,18 +167,19 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item)) //Clown /datum/uplink_item/jobspecific/clowngrenade name = "Banana Grenade" - desc = "A grenade that explodes into HONK! brand banana peels that are genetically modified to be extra slippery and extrude caustic acid when stepped on" + desc = "A grenade that explodes into HONK! brand banana peels that are genetically modified to be extra slippery and extrude caustic acid when stepped on." reference = "BG" item = /obj/item/grenade/clown_grenade cost = 5 job = list("Clown") -/datum/uplink_item/jobspecific/clownmagboots - name = "Clown Magboots" - desc = "A pair of modified clown shoes fitted with an advanced magnetic traction system. Look and sound exactly like regular clown shoes unless closely inspected." - reference = "CM" - item = /obj/item/clothing/shoes/magboots/clown +/datum/uplink_item/jobspecific/clownslippers + name = "Clown Acrobatic Shoes" + desc = "A pair of modified clown shoes fitted with a built-in propulsion system that allows the user to perform a short slip below anyone. Turning on the waddle dampeners removes the slowdown on the shoes." + reference = "CAS" + item = /obj/item/clothing/shoes/clown_shoes/slippers cost = 3 + surplus = 75 job = list("Clown") /datum/uplink_item/jobspecific/trick_revolver @@ -257,10 +258,13 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item)) job = list("Chaplain") /datum/uplink_item/jobspecific/artistic_toolbox - name = "Artistic Toolbox" - desc = "An accursed toolbox that grants its followers extreme power at the cost of requiring repeated sacrifices to it. If sacrifices are not provided, it will turn on its follower." - reference = "HGAT" - item = /obj/item/storage/toolbox/green/memetic + name = "His Grace" + desc = "An incredibly dangerous weapon recovered from a station overcome by the grey tide. Once activated, He will thirst for blood and must be used to kill to sate that thirst. \ + His Grace grants gradual regeneration and complete stun immunity to His wielder, but be wary: if He gets too hungry, He will become impossible to drop and eventually kill you if not fed. \ + However, if left alone for long enough, He will fall back to slumber. \ + To activate His Grace, simply unlatch Him." + reference = "HG" + item = /obj/item/his_grace cost = 20 job = list("Chaplain") surplus = 0 //No lucky chances from the crate; if you get this, this is ALL you're getting @@ -1171,6 +1175,15 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item)) cost = 4 excludefrom = list(/datum/game_mode/nuclear) +/datum/uplink_item/stealthy_tools/voice_modulator + name = "Chameleon Voice Modulator Mask" + desc = "A syndicate tactical mask equipped with chameleon technology and a sound modulator for disguising your voice. \ + While the mask is active, your voice will sound unrecognizable to others" + reference = "CVMM" + item = /obj/item/clothing/mask/gas/voice_modulator/chameleon + cost = 1 + excludefrom = list(/datum/game_mode/nuclear) + /datum/uplink_item/stealthy_tools/chameleon/nuke reference = "NCHAM" cost = 6 @@ -1524,7 +1537,7 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item)) /datum/uplink_item/implants/freedom name = "Freedom Implant" - desc = "An implant injected into the body and later activated manually to break out of any restraints. Can be activated up to 4 times." + desc = "An implant injected into the body and later activated manually to break out of any restraints or grabs. Can be activated up to 4 times." reference = "FI" item = /obj/item/implanter/freedom cost = 5 diff --git a/code/datums/weather/weather_types/radiation_storm.dm b/code/datums/weather/weather_types/radiation_storm.dm index 8eff5e412c7..eb46fe56bb2 100644 --- a/code/datums/weather/weather_types/radiation_storm.dm +++ b/code/datums/weather/weather_types/radiation_storm.dm @@ -32,7 +32,7 @@ /datum/weather/rad_storm/weather_act(mob/living/L) - var/resist = L.getarmor(null, "rad") + var/resist = L.getarmor(null, RAD) if(prob(40)) if(ishuman(L)) var/mob/living/carbon/human/H = L diff --git a/code/defines/procs/announce.dm b/code/defines/procs/announce.dm index e8d3abb7335..301ed685d46 100644 --- a/code/defines/procs/announce.dm +++ b/code/defines/procs/announce.dm @@ -44,12 +44,13 @@ GLOBAL_DATUM_INIT(event_announcement, /datum/announcement/priority/command/event title = "Security Announcement" announcement_type = "Security Announcement" -/datum/announcement/proc/Announce(message as text, new_title = "", new_sound = null, do_newscast = newscast, msg_sanitized = 0, from, msg_language) +/datum/announcement/proc/Announce(message as text, new_title = "", new_sound = null, do_newscast = newscast, msg_sanitized = 0, from, msg_language, new_sound2 = null) if(!message) return var/message_title = new_title ? new_title : title var/message_sound = new_sound ? sound(new_sound) : sound + var/message_sound2 = new_sound2 ? sound(new_sound2) : sound if(!msg_sanitized) message = trim_strip_html_properly(message, allow_lines = 1) @@ -74,6 +75,7 @@ GLOBAL_DATUM_INIT(event_announcement, /datum/announcement/priority/command/event NewsCast(message, message_title) Sound(message_sound, combined_receivers[1] + combined_receivers[2]) + Sound(message_sound2, combined_receivers[1] + combined_receivers[2]) Log(message, message_title) /datum/announcement/proc/Get_Receivers(datum/language/message_language) diff --git a/code/game/area/areas/depot-areas.dm b/code/game/area/areas/depot-areas.dm index ec1ba64deec..eb5c0aaaeb9 100644 --- a/code/game/area/areas/depot-areas.dm +++ b/code/game/area/areas/depot-areas.dm @@ -147,13 +147,6 @@ detected_mech = TRUE increase_alert("Hostile mecha detected: [E]") -/area/syndicate_depot/core/proc/saw_pod(obj/spacepod/P) - if(detected_pod) - return - detected_pod = TRUE - if(!called_backup) - increase_alert("Hostile spacepod detected: [P]") - /area/syndicate_depot/core/proc/saw_double_agent(mob/living/M) if(detected_double_agent) return diff --git a/code/game/area/ss13_areas.dm b/code/game/area/ss13_areas.dm index 3666ba2fdfc..5d887935865 100644 --- a/code/game/area/ss13_areas.dm +++ b/code/game/area/ss13_areas.dm @@ -1112,14 +1112,6 @@ NOTE: there are two lists of areas in the end of this file: centcom and station name = "\improper Chief Engineer's office" icon_state = "engine_control" -/area/engine/mechanic_workshop - name = "\improper Mechanic Workshop" - icon_state = "engine" - -/area/engine/mechanic_workshop/hanger - name = "\improper Hanger Bay" - icon_state = "engine" - /area/engine/supermatter name = "\improper Supermatter Engine" icon_state = "engine" @@ -1488,10 +1480,6 @@ NOTE: there are two lists of areas in the end of this file: centcom and station name = "\improper Head of Security's Office" icon_state = "sec_hos" -/area/security/podbay - name = "\improper Security Podbay" - icon_state = "securitypodbay" - /area/security/detectives_office name = "\improper Detective's Office" icon_state = "detective" @@ -1544,7 +1532,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station /area/security/vacantoffice2 name = "\improper Vacant Office" icon_state = "security" - + /area/security/permasolitary name = "Solitary Confinement" icon_state = "solitary" diff --git a/code/game/atoms.dm b/code/game/atoms.dm index d8dd3bb44c8..e815dd545ac 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -657,9 +657,6 @@ GLOBAL_LIST_EMPTY(blood_splatter_icons) -/atom/proc/blood_splatter_index() - return "\ref[initial(icon)]-[initial(icon_state)]" - //returns the mob's dna info as a list, to be inserted in an object's blood_DNA list /mob/living/proc/get_blood_dna_list() if(get_blood_id() != "blood") @@ -726,56 +723,52 @@ GLOBAL_LIST_EMPTY(blood_splatter_icons) return add_blood(blood_dna, bloodcolor) //to add blood onto something, with blood dna info to include. -/atom/proc/add_blood(list/blood_dna, color) +/atom/proc/add_blood(list/blood_dna, b_color) return FALSE -/obj/add_blood(list/blood_dna, color) +/obj/add_blood(list/blood_dna, b_color) return transfer_blood_dna(blood_dna) -/obj/item/add_blood(list/blood_dna, color) - var/blood_count = !blood_DNA ? 0 : blood_DNA.len +/obj/item/add_blood(list/blood_dna, b_color) + var/blood_count = !blood_DNA ? 0 : length(blood_DNA) if(!..()) return FALSE - if(!blood_count)//apply the blood-splatter overlay if it isn't already in there - add_blood_overlay(color) + blood_color = b_color // update the blood color + if(!blood_count) //apply the blood-splatter overlay if it isn't already in there + add_blood_overlay() return TRUE //we applied blood to the item -/obj/item/clothing/gloves/add_blood(list/blood_dna, color) +/obj/item/clothing/gloves/add_blood(list/blood_dna, b_color) . = ..() transfer_blood = rand(2, 4) -/turf/add_blood(list/blood_dna, color) +/turf/add_blood(list/blood_dna, b_color) var/obj/effect/decal/cleanable/blood/splatter/B = locate() in src if(!B) B = new /obj/effect/decal/cleanable/blood/splatter(src) B.transfer_blood_dna(blood_dna) //give blood info to the blood decal. - B.basecolor = color + B.basecolor = b_color return TRUE //we bloodied the floor -/mob/living/carbon/human/add_blood(list/blood_dna, color) +/mob/living/carbon/human/add_blood(list/blood_dna, b_color) if(wear_suit) - wear_suit.add_blood(blood_dna, color) - wear_suit.blood_color = color + wear_suit.add_blood(blood_dna, b_color) update_inv_wear_suit() else if(w_uniform) - w_uniform.add_blood(blood_dna, color) - w_uniform.blood_color = color + w_uniform.add_blood(blood_dna, b_color) update_inv_w_uniform() if(head) - head.add_blood(blood_dna, color) - head.blood_color = color + head.add_blood(blood_dna, b_color) update_inv_head() if(glasses) - glasses.add_blood(blood_dna, color) - glasses.blood_color = color + glasses.add_blood(blood_dna, b_color) update_inv_glasses() if(gloves) var/obj/item/clothing/gloves/G = gloves - G.add_blood(blood_dna, color) - G.blood_color = color + G.add_blood(blood_dna, b_color) verbs += /mob/living/carbon/human/proc/bloody_doodle else - hand_blood_color = color + hand_blood_color = b_color bloody_hands = rand(2, 4) transfer_blood_dna(blood_dna) verbs += /mob/living/carbon/human/proc/bloody_doodle @@ -783,21 +776,13 @@ GLOBAL_LIST_EMPTY(blood_splatter_icons) update_inv_gloves() //handles bloody hands overlays and updating return TRUE -/obj/item/proc/add_blood_overlay(color) +/obj/item/proc/add_blood_overlay() if(initial(icon) && initial(icon_state)) - //try to find a pre-processed blood-splatter. otherwise, make a new one - var/index = blood_splatter_index() - var/icon/blood_splatter_icon = GLOB.blood_splatter_icons[index] - if(!blood_splatter_icon) - blood_splatter_icon = icon(initial(icon), initial(icon_state), , 1) //we only want to apply blood-splatters to the initial icon_state for each object - blood_splatter_icon.Blend("#fff", ICON_ADD) //fills the icon_state with white (except where it's transparent) - blood_splatter_icon.Blend(icon('icons/effects/blood.dmi', "itemblood"), ICON_MULTIPLY) //adds blood and the remaining white areas become transparant - blood_splatter_icon = fcopy_rsc(blood_splatter_icon) - GLOB.blood_splatter_icons[index] = blood_splatter_icon - - blood_overlay = image(blood_splatter_icon) - blood_overlay.color = color - overlays += blood_overlay + var/list/params = GLOB.blood_splatter_icons["[blood_color]"] + if(!params) + params = layering_filter(icon = icon('icons/effects/blood.dmi', "itemblood"), color = blood_color, blend_mode = BLEND_INSET_OVERLAY) + GLOB.blood_splatter_icons["[blood_color]"] = params + add_filter("blood_splatter", 1, params) /atom/proc/clean_blood(radiation_clean = FALSE) germ_level = 0 @@ -828,8 +813,8 @@ GLOBAL_LIST_EMPTY(blood_splatter_icons) /obj/item/clean_blood(radiation_clean = FALSE) . = ..() if(.) - if(blood_overlay) - overlays -= blood_overlay + if(initial(icon) && initial(icon_state)) + remove_filter("blood_splatter") /obj/item/clothing/gloves/clean_blood(radiation_clean = FALSE) . = ..() @@ -1153,3 +1138,15 @@ GLOBAL_LIST_EMPTY(blood_splatter_icons) if(degrees) appearance_flags |= PIXEL_SCALE transform = M + +/* + Setter for the `density` variable. + Arguments: + * new_value - the new density you would want it to set. + Returns: Either null if identical to existing density, or the new density if different. +*/ +/atom/proc/set_density(new_value) + if(density == new_value) + return + . = density + density = new_value diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm index 7232239d6f5..2eb8cf115a3 100644 --- a/code/game/atoms_movable.dm +++ b/code/game/atoms_movable.dm @@ -90,13 +90,11 @@ /atom/movable/proc/stop_pulling() if(pulling) - pulling.pulledby = null var/mob/living/ex_pulled = pulling + pulling.pulledby = null pulling = null - pulledby = null - if(isliving(ex_pulled)) - var/mob/living/L = ex_pulled - L.update_canmove()// mob gets up if it was lyng down in a chokehold + if(!QDELETED(ex_pulled) && istype(ex_pulled)) + ex_pulled.update_canmove()// mob gets up if it was lyng down in a chokehold /atom/movable/proc/check_pulling() if(pulling) @@ -420,6 +418,7 @@ if(spin && !no_spin && !no_spin_thrown) SpinAnimation(5, 1) + SEND_SIGNAL(src, COMSIG_MOVABLE_POST_THROW, TT, spin) SSthrowing.processing[src] = TT TT.tick() diff --git a/code/game/data_huds.dm b/code/game/data_huds.dm index 10e704fb314..0b9aeec9fb2 100644 --- a/code/game/data_huds.dm +++ b/code/game/data_huds.dm @@ -44,10 +44,12 @@ hud_icons = list(ID_HUD, IMPTRACK_HUD, IMPMINDSHIELD_HUD, IMPCHEM_HUD, WANTED_HUD) /datum/atom_hud/data/diagnostic - hud_icons = list (DIAG_HUD, DIAG_STAT_HUD, DIAG_BATT_HUD, DIAG_MECH_HUD, DIAG_BOT_HUD, DIAG_TRACK_HUD) + +/datum/atom_hud/data/diagnostic/basic + hud_icons = list(DIAG_HUD, DIAG_STAT_HUD, DIAG_BATT_HUD, DIAG_MECH_HUD, DIAG_BOT_HUD, DIAG_TRACK_HUD, DIAG_AIRLOCK_HUD) /datum/atom_hud/data/diagnostic/advanced - hud_icons = list (DIAG_HUD, DIAG_STAT_HUD, DIAG_BATT_HUD, DIAG_MECH_HUD, DIAG_BOT_HUD, DIAG_TRACK_HUD, DIAG_PATH_HUD) + hud_icons = list(DIAG_HUD, DIAG_STAT_HUD, DIAG_BATT_HUD, DIAG_MECH_HUD, DIAG_BOT_HUD, DIAG_TRACK_HUD, DIAG_AIRLOCK_HUD, DIAG_PATH_HUD) /datum/atom_hud/data/bot_path hud_icons = list(DIAG_PATH_HUD) @@ -473,6 +475,16 @@ return holder.icon_state = "hudweed[RoundPlantBar(weedlevel/10)]" +/*~~~~~~~~~~~~ + Airlocks! +~~~~~~~~~~~~~*/ +/obj/machinery/door/airlock/proc/diag_hud_set_electrified() + var/image/holder = hud_list[DIAG_AIRLOCK_HUD] + if(isElectrified()) + holder.icon_state = "electrified" + else + holder.icon_state = "" + /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ I'll just put this somewhere near the end... ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ diff --git a/code/game/dna/dna_modifier.dm b/code/game/dna/dna_modifier.dm index 7e9b6c34634..050a105307e 100644 --- a/code/game/dna/dna_modifier.dm +++ b/code/game/dna/dna_modifier.dm @@ -156,7 +156,7 @@ to_chat(usr, "[src] is already occupied!") return if(usr.abiotic()) - to_chat(usr, "Subject cannot have abiotic items on.") + to_chat(usr, "Subject may not hold anything in their hands.") return if(usr.has_buckled_mobs()) //mob attached to us to_chat(usr, "[usr] will not fit into [src] because [usr.p_they()] [usr.p_have()] a slime latched onto [usr.p_their()] head.") @@ -194,7 +194,7 @@ if(!istype(L) || L.buckled) return if(L.abiotic()) - to_chat(user, "Subject cannot have abiotic items on.") + to_chat(user, "Subject may not hold anything in their hands.") return if(L.has_buckled_mobs()) //mob attached to us to_chat(user, "[L] will not fit into [src] because [L.p_they()] [L.p_have()] a slime latched onto [L.p_their()] head.") @@ -232,7 +232,7 @@ to_chat(user, "The scanner is already occupied!") return if(G.affecting.abiotic()) - to_chat(user, "Subject cannot have abiotic items on.") + to_chat(user, "Subject may not hold anything in their hands.") return if(G.affecting.has_buckled_mobs()) //mob attached to us to_chat(user, "[G] will not fit into [src] because [G.affecting.p_they()] [G.affecting.p_have()] a slime latched onto [G.affecting.p_their()] head.") @@ -315,7 +315,7 @@ if(HAS_TRAIT(occupant, TRAIT_GENELESS)) return TRUE - var/radiation_protection = occupant.run_armor_check(null, "rad") + var/radiation_protection = occupant.run_armor_check(null, RAD) if(radiation_protection > NEGATE_MUTATION_THRESHOLD) return TRUE return FALSE diff --git a/code/game/dna/mutations/disabilities.dm b/code/game/dna/mutations/disabilities.dm index bcb11eb1631..a03c686140a 100644 --- a/code/game/dna/mutations/disabilities.dm +++ b/code/game/dna/mutations/disabilities.dm @@ -140,12 +140,16 @@ /datum/mutation/disability/colourblindness/activate(mob/M) ..() M.update_client_colour() //Handle the activation of the colourblindness on the mob. - M.update_icons() //Apply eyeshine as needed. + if(ishuman(M)) + var/mob/living/carbon/human/H = M + H.update_misc_effects() /datum/mutation/disability/colourblindness/deactivate(mob/M) ..() M.update_client_colour() //Handle the deactivation of the colourblindness on the mob. - M.update_icons() //Remove eyeshine as needed. + if(ishuman(M)) + var/mob/living/carbon/human/H = M + H.update_misc_effects() /datum/mutation/disability/deaf name = "Deafness" diff --git a/code/game/dna/mutations/powers.dm b/code/game/dna/mutations/powers.dm index 3d2f991acb6..20c37357c50 100644 --- a/code/game/dna/mutations/powers.dm +++ b/code/game/dna/mutations/powers.dm @@ -158,28 +158,6 @@ M.status_flags |= CANSTUN | CANWEAKEN | CANPARALYSE | CANPUSH //temporary fix until the problem can be solved. to_chat(M, "You suddenly feel very weak.") -/datum/mutation/xray - name = "X-Ray Vision" - activation_messages = list("The walls suddenly disappear.") - deactivation_messages = list("The walls around you re-appear.") - instability = GENE_INSTABILITY_MAJOR - traits_to_add = list(TRAIT_XRAY_VISION) - activation_prob = 15 - -/datum/mutation/xray/New() - ..() - block = GLOB.xrayblock - -/datum/mutation/xray/activate(mob/living/M) - ..() - M.update_sight() - M.update_icons() //Apply eyeshine as needed. - -/datum/mutation/xray/deactivate(mob/living/M) - ..() - M.update_sight() - M.update_icons() //Remove eyeshine as needed. - /datum/mutation/tk name = "Telekenesis" activation_messages = list("You feel smarter.") @@ -1181,3 +1159,58 @@ else H.remoteview_target = null H.reset_perspective() + +/datum/mutation/meson_vision + name = "Meson Vision" + activation_messages = list("More information seems to reach your eyes...") + deactivation_messages = list("The amount of information reaching your eyes fades...") + instability = GENE_INSTABILITY_MINOR + traits_to_add = list(TRAIT_MESON_VISION) + +/datum/mutation/meson_vision/New() + ..() + block = GLOB.mesonblock + +/datum/mutation/meson_vision/activate(mob/living/M) + ..() + M.update_sight() + +/datum/mutation/meson_vision/deactivate(mob/living/M) + ..() + M.update_sight() + +/datum/mutation/night_vision + name = "Night Vision" + activation_messages = list("Were the lights always that bright?") + deactivation_messages = list("The ambient light level returns to normal...") + instability = GENE_INSTABILITY_MODERATE + traits_to_add = list(TRAIT_NIGHT_VISION) + +/datum/mutation/night_vision/New() + ..() + block = GLOB.nightvisionblock + +/datum/mutation/night_vision/activate(mob/living/M) + ..() + M.update_sight() + if(ishuman(M)) + var/mob/living/carbon/human/H = M + H.update_misc_effects() + +/datum/mutation/night_vision/deactivate(mob/living/M) + ..() + M.update_sight() + if(ishuman(M)) + var/mob/living/carbon/human/H = M + H.update_misc_effects() + +/datum/mutation/flash_protection + name = "Flash Protection" + activation_messages = list("You stop noticing the glare from lights...") + deactivation_messages = list("Lights begin glaring again...") + instability = GENE_INSTABILITY_MINOR + traits_to_add = list(TRAIT_FLASH_PROTECTION) + +/datum/mutation/flash_protection/New() + ..() + block = GLOB.noflashblock diff --git a/code/game/gamemodes/blob/blobs/blob_mobs.dm b/code/game/gamemodes/blob/blobs/blob_mobs.dm index 14603c1681a..95bdf0b20e5 100644 --- a/code/game/gamemodes/blob/blobs/blob_mobs.dm +++ b/code/game/gamemodes/blob/blobs/blob_mobs.dm @@ -91,8 +91,8 @@ is_zombie = TRUE if(H.wear_suit) var/obj/item/clothing/suit/armor/A = H.wear_suit - if(A.armor && A.armor.getRating("melee")) - maxHealth += A.armor.getRating("melee") //That zombie's got armor, I want armor! + if(A.armor && A.armor.getRating(MELEE)) + maxHealth += A.armor.getRating(MELEE) //That zombie's got armor, I want armor! maxHealth += 40 health = maxHealth name = "blob zombie" diff --git a/code/game/gamemodes/blob/blobs/core.dm b/code/game/gamemodes/blob/blobs/core.dm index b4a9bf3c3e8..659d0d1bec5 100644 --- a/code/game/gamemodes/blob/blobs/core.dm +++ b/code/game/gamemodes/blob/blobs/core.dm @@ -3,7 +3,7 @@ icon = 'icons/mob/blob.dmi' icon_state = "blank_blob" max_integrity = 400 - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 75, "acid" = 90) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 75, ACID = 90) fire_resist = 2 point_return = -1 var/overmind_get_delay = 0 // we don't want to constantly try to find an overmind, do it every 5 minutes @@ -48,7 +48,7 @@ /obj/structure/blob/core/ex_act(severity) var/damage = 50 - 10 * severity //remember, the core takes half brute damage, so this is 20/15/10 damage based on severity - take_damage(damage, BRUTE, "bomb", 0) + take_damage(damage, BRUTE, BOMB, 0) /obj/structure/blob/core/take_damage(damage_amount, damage_type = BRUTE, damage_flag = 0, sound_effect = 1, attack_dir, overmind_reagent_trigger = 1) . = ..() diff --git a/code/game/gamemodes/blob/blobs/node.dm b/code/game/gamemodes/blob/blobs/node.dm index 0023328b463..c5575827f5d 100644 --- a/code/game/gamemodes/blob/blobs/node.dm +++ b/code/game/gamemodes/blob/blobs/node.dm @@ -3,7 +3,7 @@ icon = 'icons/mob/blob.dmi' icon_state = "blank_blob" max_integrity = 200 - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 65, "acid" = 90) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 65, ACID = 90) point_return = 18 /obj/structure/blob/node/Initialize(mapload) diff --git a/code/game/gamemodes/blob/blobs/shield.dm b/code/game/gamemodes/blob/blobs/shield.dm index 04e9f6d677f..9def25e832c 100644 --- a/code/game/gamemodes/blob/blobs/shield.dm +++ b/code/game/gamemodes/blob/blobs/shield.dm @@ -7,7 +7,7 @@ brute_resist = 0.25 explosion_block = 3 atmosblock = TRUE - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 90, "acid" = 90) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 90, ACID = 90) /obj/structure/blob/shield/core point_return = 0 diff --git a/code/game/gamemodes/blob/overmind.dm b/code/game/gamemodes/blob/overmind.dm index e5da77c8196..02022121209 100644 --- a/code/game/gamemodes/blob/overmind.dm +++ b/code/game/gamemodes/blob/overmind.dm @@ -66,10 +66,10 @@ return if(src.client) - if(client.prefs.muted & MUTE_IC) + if(check_mute(client.ckey, MUTE_IC)) to_chat(src, "You cannot send IC messages (muted).") return - if(src.client.handle_spam_prevention(message,MUTE_IC)) + if(src.client.handle_spam_prevention(message, MUTE_IC)) return if(stat) diff --git a/code/game/gamemodes/blob/powers.dm b/code/game/gamemodes/blob/powers.dm index f7320a40c72..f02e7169124 100644 --- a/code/game/gamemodes/blob/powers.dm +++ b/code/game/gamemodes/blob/powers.dm @@ -237,7 +237,7 @@ blobber.AIStatus = AI_OFF blobber.LoseTarget() spawn() - var/list/candidates = SSghost_spawns.poll_candidates("Do you want to play as a blobbernaut?", ROLE_BLOB, TRUE, 10 SECONDS, source = blobber) + var/list/candidates = SSghost_spawns.poll_candidates("Do you want to play as a blobbernaut?", ROLE_BLOB, TRUE, 10 SECONDS, source = blobber, role_cleanname = "blobbernaut") if(length(candidates) && !QDELETED(blobber)) var/mob/C = pick(candidates) if(C) diff --git a/code/game/gamemodes/blob/theblob.dm b/code/game/gamemodes/blob/theblob.dm index b1c5ffde619..103427d2089 100644 --- a/code/game/gamemodes/blob/theblob.dm +++ b/code/game/gamemodes/blob/theblob.dm @@ -8,7 +8,7 @@ opacity = 0 anchored = 1 max_integrity = 30 - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 70) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 80, ACID = 70) var/point_return = 0 //How many points the blob gets back when it removes a blob of that type. If less than 0, blob cannot be removed. var/health_timestamp = 0 var/brute_resist = 0.5 //multiplies brute damage by this @@ -144,7 +144,7 @@ L.blob_act(src) /obj/structure/blob/zap_act(power, zap_flags) - take_damage(power * 0.0025, BURN, "energy") + take_damage(power * 0.0025, BURN, ENERGY) power -= power * 0.0025 //You don't get to do it for free return ..() //You don't get to do it for free diff --git a/code/game/gamemodes/changeling/changeling.dm b/code/game/gamemodes/changeling/changeling.dm index e24b7876e2b..330a5e94257 100644 --- a/code/game/gamemodes/changeling/changeling.dm +++ b/code/game/gamemodes/changeling/changeling.dm @@ -11,7 +11,7 @@ GLOBAL_LIST_INIT(possible_changeling_IDs, list("Alpha","Beta","Gamma","Delta","E name = "changeling" config_tag = "changeling" restricted_jobs = list("AI", "Cyborg") - protected_jobs = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Blueshield", "Nanotrasen Representative", "Security Pod Pilot", "Magistrate", "Brig Physician", "Internal Affairs Agent", "Nanotrasen Navy Officer", "Special Operations Officer", "Syndicate Officer", "Solar Federation General") + protected_jobs = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Blueshield", "Nanotrasen Representative", "Magistrate", "Brig Physician", "Internal Affairs Agent", "Nanotrasen Navy Officer", "Special Operations Officer", "Syndicate Officer", "Solar Federation General") protected_species = list("Machine") required_players = 15 required_enemies = 1 diff --git a/code/game/gamemodes/changeling/powers/biodegrade.dm b/code/game/gamemodes/changeling/powers/biodegrade.dm index 45ce670dfcc..20b83cb9a02 100644 --- a/code/game/gamemodes/changeling/powers/biodegrade.dm +++ b/code/game/gamemodes/changeling/powers/biodegrade.dm @@ -1,7 +1,7 @@ /datum/action/changeling/biodegrade name = "Biodegrade" desc = "Dissolves restraints or other objects preventing free movement. Costs 30 chemicals." - helptext = "This is obvious to nearby people, and can destroy standard restraints and closets." + helptext = "This is obvious to nearby people, and can destroy standard restraints and closets, and break you out of grabs." button_icon_state = "biodegrade" chemical_cost = 30 //High cost to prevent spam dna_cost = 2 @@ -9,7 +9,7 @@ /datum/action/changeling/biodegrade/sting_action(mob/living/carbon/human/user) var/used = FALSE // only one form of shackles removed per use - if(!user.restrained() && !user.legcuffed && !istype(user.loc, /obj/structure/closet) && !istype(user.loc, /obj/structure/spider/cocoon)) + if(!user.restrained() && !user.legcuffed && !istype(user.loc, /obj/structure/closet) && !istype(user.loc, /obj/structure/spider/cocoon) && !user.grabbed_by) to_chat(user, "We are already free!") return FALSE @@ -57,7 +57,15 @@ to_chat(user, "We secrete acidic enzymes from our skin and begin melting our cocoon...") addtimer(CALLBACK(src, .proc/dissolve_cocoon, user, C), 2.5 SECONDS) //Very short because it's just webs used = TRUE - + for(var/obj/item/grab/G in user.grabbed_by) + var/mob/living/carbon/M = G.assailant + user.visible_message("[user] spits acid at [M]'s face and slips out of their grab!") + M.Stun(1) //Drops the grab + M.apply_damage(5, BURN, "head", M.run_armor_check("head", "melee")) + user.SetStunned(0) //This only triggers if they are grabbed, to have them break out of the grab, without the large stun time. If you use biodegrade as an antistun without being grabbed, it will not work + user.SetWeakened(0) + playsound(user.loc, 'sound/weapons/sear.ogg', 50, TRUE) + used = TRUE if(used) SSblackbox.record_feedback("nested tally", "changeling_powers", 1, list("[name]")) return TRUE diff --git a/code/game/gamemodes/changeling/powers/epinephrine.dm b/code/game/gamemodes/changeling/powers/epinephrine.dm index ef22de10ce4..5d442caf60c 100644 --- a/code/game/gamemodes/changeling/powers/epinephrine.dm +++ b/code/game/gamemodes/changeling/powers/epinephrine.dm @@ -10,20 +10,19 @@ //Recover from stuns. /datum/action/changeling/epinephrine/sting_action(mob/living/user) - if(user.lying) to_chat(user, "We arise.") else to_chat(user, "Adrenaline rushes through us.") user.SetSleeping(0) - user.stat = 0 + user.WakeUp() user.SetParalysis(0) user.SetStunned(0) user.SetWeakened(0) - user.lying = 0 + user.lying = FALSE user.update_canmove() user.reagents.add_reagent("synaptizine", 20) user.adjustStaminaLoss(-75) SSblackbox.record_feedback("nested tally", "changeling_powers", 1, list("[name]")) - return 1 + return TRUE diff --git a/code/game/gamemodes/changeling/powers/mutations.dm b/code/game/gamemodes/changeling/powers/mutations.dm index 28437dd9022..f940b224cb8 100644 --- a/code/game/gamemodes/changeling/powers/mutations.dm +++ b/code/game/gamemodes/changeling/powers/mutations.dm @@ -426,7 +426,7 @@ desc = "A huge, bulky mass of pressure and temperature-resistant organic tissue, evolved to facilitate space travel." flags = STOPSPRESSUREDMAGE | NODROP | DROPDEL allowed = list(/obj/item/flashlight, /obj/item/tank/internals) - armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 90, "acid" = 90) //No armor at all + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 90, ACID = 90) //No armor at all /obj/item/clothing/suit/space/changeling/New() ..() @@ -444,7 +444,7 @@ icon_state = "lingspacehelmet" desc = "A covering of pressure and temperature-resistant organic tissue with a glass-like chitin front." flags = BLOCKHAIR | STOPSPRESSUREDMAGE | NODROP | DROPDEL - armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 90, "acid" = 90) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 90, ACID = 90) /***************************************\ @@ -473,7 +473,7 @@ icon_state = "lingarmor" flags = NODROP | DROPDEL body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS - armor = list("melee" = 40, "bullet" = 40, "laser" = 40, "energy" = 20, "bomb" = 10, "bio" = 4, "rad" = 0, "fire" = 90, "acid" = 90) + armor = list(MELEE = 40, BULLET = 40, LASER = 40, ENERGY = 20, BOMB = 10, BIO = 4, RAD = 0, FIRE = 90, ACID = 90) flags_inv = HIDEJUMPSUIT cold_protection = 0 heat_protection = 0 @@ -489,5 +489,5 @@ desc = "A tough, hard covering of black chitin with transparent chitin in front." icon_state = "lingarmorhelmet" flags = BLOCKHAIR | NODROP | DROPDEL - armor = list("melee" = 40, "bullet" = 40, "laser" = 40, "energy" = 20, "bomb" = 10, "bio" = 4, "rad" = 0, "fire" = 90, "acid" = 90) + armor = list(MELEE = 40, BULLET = 40, LASER = 40, ENERGY = 20, BOMB = 10, BIO = 4, RAD = 0, FIRE = 90, ACID = 90) flags_inv = HIDEEARS diff --git a/code/game/gamemodes/changeling/powers/revive.dm b/code/game/gamemodes/changeling/powers/revive.dm index c193dcedf90..526512f5a4a 100644 --- a/code/game/gamemodes/changeling/powers/revive.dm +++ b/code/game/gamemodes/changeling/powers/revive.dm @@ -8,6 +8,12 @@ //Revive from regenerative stasis /datum/action/changeling/revive/sting_action(mob/living/carbon/user) REMOVE_TRAIT(user, TRAIT_FAKEDEATH, "changeling") + for(var/obj/item/grab/G in user.grabbed_by) + var/mob/living/carbon/M = G.assailant + user.visible_message("[user] suddenly hits [M] in the face and slips out of their grab!") + M.Stun(1) //Drops the grab + M.apply_damage(5, BRUTE, "head", M.run_armor_check("head", "melee")) + playsound(user.loc, 'sound/weapons/punch1.ogg', 25, 1, -1) user.revive() user.updatehealth("revive sting") user.update_blind_effects() diff --git a/code/game/gamemodes/changeling/powers/tiny_prick.dm b/code/game/gamemodes/changeling/powers/tiny_prick.dm index 14d93439510..09702c97d3c 100644 --- a/code/game/gamemodes/changeling/powers/tiny_prick.dm +++ b/code/game/gamemodes/changeling/powers/tiny_prick.dm @@ -66,60 +66,6 @@ add_attack_logs(user, target, "Unsuccessful sting (changeling)") return 1 -/datum/action/changeling/sting/transformation - name = "Transformation Sting" - desc = "We silently sting a human, injecting a retrovirus that forces them to transform. Costs 50 chemicals." - helptext = "The victim will transform much like a changeling would. The effects will be obvious to the victim, and the process will damage our genomes." - button_icon_state = "sting_transform" - sting_icon = "sting_transform" - chemical_cost = 50 - dna_cost = 3 - genetic_damage = 100 - var/datum/dna/selected_dna = null - -/datum/action/changeling/sting/transformation/Trigger() - var/mob/user = usr - var/datum/changeling/changeling = user.mind.changeling - if(changeling.chosen_sting) - unset_sting(user) - return - selected_dna = changeling.select_dna("Select the target DNA: ", "Target DNA") - if(!selected_dna) - return - if((NOTRANSSTING in selected_dna.species.species_traits) || selected_dna.species.is_small) - to_chat(user, "The selected DNA is incompatible with our sting.") - return - ..() - -/datum/action/changeling/sting/transformation/can_sting(mob/user, mob/target) - if(!..()) - return - if(HAS_TRAIT(target, TRAIT_HUSK) || !ishuman(target) || (NOTRANSSTING in target.dna.species.species_traits)) - to_chat(user, "Our sting appears ineffective against its DNA.") - return FALSE - if(ishuman(target)) - var/mob/living/carbon/human/H = target - if(HAS_TRAIT(H, TRAIT_GENELESS)) - to_chat(user, "This won't work on a creature without DNA.") - return FALSE - return TRUE - -/datum/action/changeling/sting/transformation/sting_action(mob/user, mob/target) - add_attack_logs(user, target, "Transformation sting (changeling) (new identity is [selected_dna.real_name])") - if(issmall(target)) - to_chat(user, "Our genes cry out as we sting [target.name]!") - - if(iscarbon(target) && (target.status_flags & CANWEAKEN)) - var/mob/living/carbon/C = target - C.do_jitter_animation(500) - - target.visible_message("[target] begins to violenty convulse!","You feel a tiny prick and a begin to uncontrollably convulse!") - - spawn(10) - transform_dna(target,selected_dna)//target is always human so no problem here - SSblackbox.record_feedback("nested tally", "changeling_powers", 1, list("[name]")) - return TRUE - /datum/action/changeling/sting/extract_dna name = "Extract DNA Sting" desc = "We stealthily sting a target and extract their DNA. Costs 25 chemicals." diff --git a/code/game/gamemodes/changeling/traitor_chan.dm b/code/game/gamemodes/changeling/traitor_chan.dm index f315d79eb99..38dfbfab5d4 100644 --- a/code/game/gamemodes/changeling/traitor_chan.dm +++ b/code/game/gamemodes/changeling/traitor_chan.dm @@ -23,7 +23,7 @@ secondary_enemies = CEILING((secondary_enemies_scaling * num_players()), 1) for(var/mob/new_player/player in GLOB.player_list) - if((player.mind in possible_changelings) && (player.client.prefs.species in secondary_protected_species)) + if((player.mind in possible_changelings) && (player.client.prefs.active_character.species in secondary_protected_species)) possible_changelings -= player.mind if(possible_changelings.len > 0) diff --git a/code/game/gamemodes/cult/cult.dm b/code/game/gamemodes/cult/cult.dm index 62ad86cb72f..96d8c7fff30 100644 --- a/code/game/gamemodes/cult/cult.dm +++ b/code/game/gamemodes/cult/cult.dm @@ -48,7 +48,7 @@ GLOBAL_LIST_EMPTY(all_cults) /datum/game_mode/cult name = "cult" config_tag = "cult" - restricted_jobs = list("Chaplain", "AI", "Cyborg", "Internal Affairs Agent", "Security Officer", "Warden", "Detective", "Security Pod Pilot", "Head of Security", "Captain", "Head of Personnel", "Blueshield", "Nanotrasen Representative", "Magistrate", "Brig Physician", "Nanotrasen Navy Officer", "Special Operations Officer", "Syndicate Officer", "Solar Federation General") + restricted_jobs = list("Chaplain", "AI", "Cyborg", "Internal Affairs Agent", "Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Head of Personnel", "Blueshield", "Nanotrasen Representative", "Magistrate", "Brig Physician", "Nanotrasen Navy Officer", "Special Operations Officer", "Syndicate Officer", "Solar Federation General") protected_jobs = list() required_players = 30 required_enemies = 3 diff --git a/code/game/gamemodes/cult/cult_datums.dm b/code/game/gamemodes/cult/cult_datums.dm index 67e9a78d879..fbbee18a94b 100644 --- a/code/game/gamemodes/cult/cult_datums.dm +++ b/code/game/gamemodes/cult/cult_datums.dm @@ -73,6 +73,9 @@ var/airlock_unruned_icon_file = 'icons/obj/doors/airlocks/cult/unruned/cult.dmi' var/airlock_unruned_overlays_file = 'icons/obj/doors/airlocks/cult/unruned/cult-overlays.dmi' + /// Are cultist mirror shields active yet? + var/mirror_shields_active = FALSE + /datum/cult_info/fire name = "Cult of Kha'Rin" diff --git a/code/game/gamemodes/cult/cult_items.dm b/code/game/gamemodes/cult/cult_items.dm index 9b890787d7f..4480d04effa 100644 --- a/code/game/gamemodes/cult/cult_items.dm +++ b/code/game/gamemodes/cult/cult_items.dm @@ -99,7 +99,7 @@ body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS hoodtype = /obj/item/clothing/head/hooded/culthood allowed = list(/obj/item/tome, /obj/item/melee/cultblade) - armor = list("melee" = 40, "bullet" = 30, "laser" = 40, "energy" = 20, "bomb" = 25, "bio" = 10, "rad" = 0, "fire" = 10, "acid" = 10) + armor = list(MELEE = 40, BULLET = 30, LASER = 40, ENERGY = 20, BOMB = 25, BIO = 10, RAD = 0, FIRE = 10, ACID = 10) flags_inv = HIDEJUMPSUIT magical = TRUE @@ -113,7 +113,7 @@ desc = "A space worthy helmet used by the followers of a cult." icon_state = "cult_helmet" item_state = "cult_helmet" - armor = list("melee" = 70, "bullet" = 50, "laser" = 30,"energy" = 15, "bomb" = 30, "bio" = 30, "rad" = 30, "fire" = 40, "acid" = 75) + armor = list(MELEE = 70, BULLET = 50, LASER = 30, ENERGY = 15, BOMB = 30, BIO = 30, RAD = 30, FIRE = 40, ACID = 75) magical = TRUE /obj/item/clothing/suit/space/cult @@ -124,7 +124,7 @@ w_class = WEIGHT_CLASS_NORMAL allowed = list(/obj/item/tome, /obj/item/melee/cultblade, /obj/item/tank/internals) slowdown = 1 - armor = list("melee" = 70, "bullet" = 50, "laser" = 30,"energy" = 15, "bomb" = 30, "bio" = 30, "rad" = 30, "fire" = 40, "acid" = 75) + armor = list(MELEE = 70, BULLET = 50, LASER = 30, ENERGY = 15, BOMB = 30, BIO = 30, RAD = 30, FIRE = 40, ACID = 75) magical = TRUE /obj/item/clothing/suit/hooded/cultrobes/cult_shield @@ -133,7 +133,7 @@ icon_state = "cult_armour" item_state = "cult_armour" w_class = WEIGHT_CLASS_BULKY - armor = list("melee" = 50, "bullet" = 40, "laser" = 50, "energy" = 30, "bomb" = 50, "bio" = 30, "rad" = 30, "fire" = 50, "acid" = 60) + armor = list(MELEE = 50, BULLET = 40, LASER = 50, ENERGY = 30, BOMB = 50, BIO = 30, RAD = 30, FIRE = 50, ACID = 60) body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS allowed = list(/obj/item/tome, /obj/item/melee/cultblade) hoodtype = /obj/item/clothing/head/hooded/cult_hoodie @@ -145,7 +145,7 @@ name = "empowered cultist hood" desc = "An empowered garb which creates a powerful shield around the user." icon_state = "cult_hoodalt" - armor = list("melee" = 40, "bullet" = 30, "laser" = 40,"energy" = 20, "bomb" = 25, "bio" = 10, "rad" = 0, "fire" = 10, "acid" = 10) + armor = list(MELEE = 40, BULLET = 30, LASER = 40, ENERGY = 20, BOMB = 25, BIO = 10, RAD = 0, FIRE = 10, ACID = 10) body_parts_covered = HEAD flags = BLOCKHAIR flags_inv = HIDEFACE @@ -185,7 +185,7 @@ flags_inv = HIDEJUMPSUIT allowed = list(/obj/item/tome, /obj/item/melee/cultblade) body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS - armor = list("melee" = -50, "bullet" = -50, "laser" = -50,"energy" = -50, "bomb" = -50, "bio" = -50, "rad" = -50, "fire" = 0, "acid" = 0) + armor = list(MELEE = -50, BULLET = -50, LASER = -50, ENERGY = -50, BOMB = -50, BIO = -50, RAD = -50, FIRE = 0, ACID = 0) sprite_sheets = list( "Vox" = 'icons/mob/clothing/species/vox/suit.dmi', "Drask" = 'icons/mob/clothing/species/drask/suit.dmi', @@ -218,7 +218,7 @@ flags = BLOCKHAIR flags_inv = HIDEFACE flags_cover = HEADCOVERSEYES - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 0, ACID = 0) sprite_sheets = list( "Vox" = 'icons/mob/clothing/species/vox/head.dmi', "Drask" = 'icons/mob/clothing/species/drask/head.dmi', @@ -444,6 +444,11 @@ * The illusion has a 60% chance to be hostile and attack non-cultists, and a 40% chance to just run away from the user. */ /obj/item/shield/mirror/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK) + // Incase they get one by some magic + if(!SSticker.cultdat.mirror_shields_active) + to_chat(owner, "This shield is powerless! You must perform the required sacrifice to empower it!") + return + if(iscultist(owner) && !owner.holy_check()) // Cultist holding the shield // Hit by a projectile @@ -677,3 +682,109 @@ desc = "It's an orb of crystalized blood. Can be used to transfer blood between cultists." var/blood = 50 +/obj/item/portal_amulet + name = "reality sunderer" + icon = 'icons/obj/cult.dmi' + icon_state = "amulet" + desc = "Some amulet made out of metal, bluespace crystals, and blood. Allows cultists to open portals over teleport runes, destroying the rune in the process." + w_class = WEIGHT_CLASS_SMALL + + +/obj/item/portal_amulet/afterattack(atom/O, mob/user, proximity) + . = ..() + if(!iscultist(user)) + if(!iscarbon(user)) + return + var/mob/living/carbon/M = user + to_chat(M, "\"So, you want to explore space?\"") + to_chat(M, "Space flashes around you as you are moved somewhere else!") + M.Confused(10) + M.flash_eyes(override_blindness_check = TRUE) + M.EyeBlind(10) + do_teleport(M, get_turf(M), 5, asoundin = 'sound/magic/cult_spell.ogg') + qdel(src) + return + + if(istype(O, /obj/effect/rune)) + if(!istype(O, /obj/effect/rune/teleport)) + to_chat(user, "[src] only works on teleport runes.") + return + if(!proximity) + to_chat(user, "You are too far away from the teleport rune.") + return + var/obj/effect/rune/teleport/R = O + attempt_portal(R, user) + +/obj/item/portal_amulet/proc/attempt_portal(obj/effect/rune/teleport/R, mob/user) + var/list/potential_runes = list() + var/list/teleport_names = list() + var/list/duplicate_rune_count = list() + var/turf/T = get_turf(src) //used to tell the other rune where we came from + + for(var/I in GLOB.teleport_runes) + var/obj/effect/rune/teleport/target = I + var/result_key = target.listkey + if(target == R || !is_level_reachable(target.z)) + continue + if(result_key in teleport_names) + duplicate_rune_count[result_key]++ + result_key = "[result_key] ([duplicate_rune_count[result_key]])" + else + teleport_names += result_key + duplicate_rune_count[result_key] = 1 + potential_runes[result_key] = target + + if(!length(potential_runes)) + to_chat(user, "There are no valid runes to teleport to!") + return + + if(!is_level_reachable(user.z)) + to_chat(user, "You are not in the right dimension!") + return + + var/input_rune_key = input(user, "Choose a rune to make a portal to.", "Rune to make a portal to") as null|anything in potential_runes //we know what key they picked + var/obj/effect/rune/teleport/actual_selected_rune = potential_runes[input_rune_key] //what rune does that key correspond to? + if(QDELETED(R) || QDELETED(actual_selected_rune) || !Adjacent(user) || user.incapacitated()) + return + + if(is_mining_level(R.z) && !is_mining_level(actual_selected_rune.z)) + actual_selected_rune.handle_portal("lava") + else if(!is_station_level(R.z) || istype(get_area(src), /area/space)) + actual_selected_rune.handle_portal("space", T) + new /obj/effect/portal/cult(get_turf(R), get_turf(actual_selected_rune), src, 4 MINUTES) + to_chat(user, "You use the magic of the amulet to turn [R] into a portal.") + playsound(src, 'sound/magic/cult_spell.ogg', 100, TRUE) + qdel(R) + qdel(src) + +/obj/effect/portal/cult + name = "eldritch portal" + desc = "An evil portal made by dark magics. Suprisingly stable." + icon_state = "portal1" + failchance = 0 + precision = FALSE + var/obj/effect/cult_portal_exit/exit = null + +/obj/effect/portal/cult/Initialize(mapload, target, creator, lifespan) + . = ..() + if(target) + exit = new /obj/effect/cult_portal_exit(target) + +/obj/effect/portal/cult/attackby(obj/I, mob/user, params) + if(istype(I, /obj/item/melee/cultblade/dagger) && iscultist(user) || istype(I, /obj/item/nullrod) && user.mind.isholy) + to_chat(user, "You close the portal with your [I].") + playsound(src, 'sound/magic/magic_missile.ogg', 100, TRUE) + qdel(src) + return + return ..() + +/obj/effect/portal/cult/Destroy() + QDEL_NULL(exit) + return ..() + +/obj/effect/cult_portal_exit + name = "eldritch rift" + desc = "An exit point for some cult portal. Be on guard, more things may come out of it" + icon = 'icons/obj/biomass.dmi' + icon_state = "rift" + color = "red" diff --git a/code/game/gamemodes/cult/cult_structures.dm b/code/game/gamemodes/cult/cult_structures.dm index 8eae3876082..a0f8cf0e1ae 100644 --- a/code/game/gamemodes/cult/cult_structures.dm +++ b/code/game/gamemodes/cult/cult_structures.dm @@ -86,8 +86,10 @@ to_chat(user, "The magic in [src] is weak, it will be ready to use again in [get_ETA()].") return - var/choice = show_radial_menu(user, src, choosable_items, require_near = TRUE) - var/picked_type = choosable_items[choice] + + var/list/pickable_items = get_choosable_items() + var/choice = show_radial_menu(user, src, pickable_items, require_near = TRUE) + var/picked_type = pickable_items[choice] if(!QDELETED(src) && picked_type && Adjacent(user) && !user.incapacitated() && cooldowntime <= world.time) cooldowntime = world.time + creation_delay var/obj/O = new picked_type @@ -95,6 +97,14 @@ O.forceMove(get_turf(src)) to_chat(user, replacetext("[creation_message]", "%ITEM%", "[O.name]")) +/** + * Returns the items the cult can craft from this forge. + * + * Override on children for logic regarding game state. + */ +/obj/structure/cult/functional/proc/get_choosable_items() + return choosable_items.Copy() // Copied incase its modified on children + /** * Returns the cooldown time in minutes and seconds */ @@ -159,8 +169,15 @@ selection_prompt = "You study the schematics etched on the forge..." selection_title = "Forge" creation_message = "You work the forge as dark knowledge guides your hands, creating a %ITEM%!" - choosable_items = list("Shielded Robe" = /obj/item/clothing/suit/hooded/cultrobes/cult_shield, "Flagellant's Robe" = /obj/item/clothing/suit/hooded/cultrobes/flagellant_robe, - "Mirror Shield" = /obj/item/shield/mirror) + choosable_items = list("Shielded Robe" = /obj/item/clothing/suit/hooded/cultrobes/cult_shield, "Flagellant's Robe" = /obj/item/clothing/suit/hooded/cultrobes/flagellant_robe) + +/obj/structure/cult/functional/forge/get_choosable_items() + . = ..() + if(SSticker.cultdat.mirror_shields_active) + // Both lines here are needed. If you do it without, youll get issues. + . += "Mirror Shield" + .["Mirror Shield"] = /obj/item/shield/mirror + /obj/structure/cult/functional/forge/Initialize(mapload) . = ..() @@ -304,7 +321,7 @@ GLOBAL_LIST_INIT(blacklisted_pylon_turfs, typecacheof(list( selection_title = "Archives" creation_message = "You invoke the dark magic of the tomes creating a %ITEM%!" choosable_items = list("Shuttle Curse" = /obj/item/shuttle_curse, "Zealot's Blindfold" = /obj/item/clothing/glasses/hud/health/night/cultblind, - "Veil Shifter" = /obj/item/cult_shift) //Add void torch to veil shifter spawn + "Veil Shifter" = /obj/item/cult_shift, "Reality sunderer" = /obj/item/portal_amulet) //Add void torch to veil shifter spawn /obj/structure/cult/functional/archives/Initialize(mapload) . = ..() diff --git a/code/game/gamemodes/cult/runes.dm b/code/game/gamemodes/cult/runes.dm index 1f03e634a8c..4a9234ac49f 100644 --- a/code/game/gamemodes/cult/runes.dm +++ b/code/game/gamemodes/cult/runes.dm @@ -384,6 +384,9 @@ structure_check() searches for nearby cultist structures required for the invoca for(var/M in invokers) if(sacrifice_fulfilled) to_chat(M, "\"Yes! This is the one I desire! You have done well.\"") + if(!SSticker.cultdat.mirror_shields_active) // Only show once + to_chat(M, "You are now able to construct mirror shields inside the daemon forge.") + SSticker.cultdat.mirror_shields_active = TRUE else if(ishuman(offering) && offering.mind.offstation_role && offering.mind.special_role != SPECIAL_ROLE_ERT) //If you try it on a ghost role, you get nothing to_chat(M, "\"This soul is of no use to either of us.\"") diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm index 4e5372ffc2d..16f80d11d48 100644 --- a/code/game/gamemodes/game_mode.dm +++ b/code/game/gamemodes/game_mode.dm @@ -1,3 +1,6 @@ +#define NUKE_INTACT 0 +#define NUKE_CORE_MISSING 1 +#define NUKE_MISSING 2 /* * GAMEMODES (by Rastaf0) * @@ -248,7 +251,7 @@ // Get a list of all the people who want to be the antagonist for this round, except those with incompatible species for(var/mob/new_player/player in players) if(!player.client.skip_antag) - if((role in player.client.prefs.be_special) && !(player.client.prefs.species in protected_species)) + if((role in player.client.prefs.be_special) && !(player.client.prefs.active_character.species in protected_species)) player_draft_log += "[player.key] had [roletext] enabled, so we are drafting them." candidates += player.mind players -= player @@ -434,6 +437,15 @@ nukecode = bomb.r_code return nukecode +/proc/get_nuke_status() + var/nuke_status = NUKE_MISSING + for(var/obj/machinery/nuclearbomb/bomb in GLOB.machines) + if(is_station_level(bomb.z)) + nuke_status = NUKE_CORE_MISSING + if(bomb.core) + nuke_status = NUKE_INTACT + return nuke_status + /datum/game_mode/proc/replace_jobbanned_player(mob/living/M, role_type) var/list/mob/dead/observer/candidates = SSghost_spawns.poll_candidates("Do you want to play as a [role_type]?", role_type, FALSE, 10 SECONDS) var/mob/dead/observer/theghost = null @@ -451,7 +463,7 @@ var/jobtext = "" if(ply.assigned_role) jobtext = " the [ply.assigned_role]" - var/text = "[ply.key] was [ply.name][jobtext] and" + var/text = "[ply.get_display_key()] was [ply.name][jobtext] and" if(ply.current) if(ply.current.stat == DEAD) text += " died" @@ -468,7 +480,7 @@ return text /proc/printeventplayer(datum/mind/ply) - var/text = "[ply.key] was [ply.name]" + var/text = "[ply.get_display_key()] was [ply.name]" if(ply.special_role != SPECIAL_ROLE_EVENTMISC) text += " the [ply.special_role]" text += " and" @@ -534,3 +546,7 @@ var/datum/atom_hud/antag/antaghud = GLOB.huds[ANTAG_HUD_EVENTMISC] antaghud.leave_hud(mob_mind.current) set_antag_hud(mob_mind.current, null) + +#undef NUKE_INTACT +#undef NUKE_CORE_MISSING +#undef NUKE_MISSING diff --git a/code/game/gamemodes/intercept_report.dm b/code/game/gamemodes/intercept_report.dm index aaf5dd1eea7..7b3fd4d52fc 100644 --- a/code/game/gamemodes/intercept_report.dm +++ b/code/game/gamemodes/intercept_report.dm @@ -110,7 +110,7 @@ /datum/intercept_text/proc/get_suspect() var/list/dudes = list() for(var/mob/living/carbon/human/man in GLOB.player_list) - if(man.client && man.client.prefs.nanotrasen_relation == "Opposed") + if(man.client && man.client.prefs.active_character.nanotrasen_relation == "Opposed") //don't include suspects who can't possibly be the antag based on their job (no suspecting the captain of being a damned dirty tator) if(man.mind && man.mind.assigned_role) if((man.mind.assigned_role in SSticker.mode.protected_jobs) || (man.mind.assigned_role in SSticker.mode.restricted_jobs)) diff --git a/code/game/gamemodes/malfunction/Malf_Modules.dm b/code/game/gamemodes/malfunction/Malf_Modules.dm index e299f0c97c2..3b07125cb5a 100644 --- a/code/game/gamemodes/malfunction/Malf_Modules.dm +++ b/code/game/gamemodes/malfunction/Malf_Modules.dm @@ -248,7 +248,7 @@ /datum/action/innate/ai/nuke_station/proc/set_us_up_the_bomb() to_chat(owner_AI, "Nuclear device armed.") - GLOB.event_announcement.Announce("Hostile runtimes detected in all station systems, please deactivate your AI to prevent possible damage to its morality core.", "Anomaly Alert", new_sound = 'sound/AI/aimalf.ogg') + GLOB.event_announcement.Announce("Hostile runtimes detected in all station systems, please deactivate your AI to prevent possible damage to its morality core.", "Anomaly Alert", 'sound/AI/aimalf.ogg') set_security_level("delta") owner_AI.nuking = TRUE var/obj/machinery/doomsday_device/DOOM = new /obj/machinery/doomsday_device(owner_AI) @@ -280,7 +280,7 @@ if(SSshuttle.emergency.mode == SHUTTLE_STRANDED) SSshuttle.emergency.mode = SHUTTLE_DOCKED SSshuttle.emergency.timer = world.time - GLOB.priority_announcement.Announce("Hostile environment resolved. You have 3 minutes to board the Emergency Shuttle.", "Priority Announcement", 'sound/AI/shuttledock.ogg') + GLOB.priority_announcement.Announce("Hostile environment resolved. You have 3 minutes to board the Emergency Shuttle.", "Priority Announcement", 'sound/AI/eshuttle_dock.ogg') return ..() /obj/machinery/doomsday_device/proc/start() @@ -300,7 +300,7 @@ if(SSshuttle.emergency.mode == SHUTTLE_STRANDED) SSshuttle.emergency.mode = SHUTTLE_DOCKED SSshuttle.emergency.timer = world.time - GLOB.priority_announcement.Announce("Hostile environment resolved. You have 3 minutes to board the Emergency Shuttle.", "Priority Announcement", 'sound/AI/shuttledock.ogg') + GLOB.priority_announcement.Announce("Hostile environment resolved. You have 3 minutes to board the Emergency Shuttle.", "Priority Announcement", 'sound/AI/eshuttle_dock.ogg') qdel(src) if(!timing) STOP_PROCESSING(SSfastprocess, src) @@ -786,3 +786,24 @@ /datum/AI_Module/large/cameracrack/upgrade(mob/living/silicon/ai/AI) if(AI.builtInCamera) QDEL_NULL(AI.builtInCamera) + +/datum/AI_Module/large/engi_upgrade + module_name = "Engineering Cyborg Emitter Upgrade" + mod_pick_name = "emitter" + description = "Downloads firmware that activates the built in emitter in all engineering cyborgs linked to you. Cyborgs built after this upgrade will have it pre-installed." + cost = 50 // IDK look into this + one_purchase = TRUE + upgrade = TRUE + unlock_text = "Firmware downloaded. Bugs removed. Built in emitters operating at 73% efficiency." + unlock_sound = 'sound/items/rped.ogg' + +/datum/AI_Module/large/engi_upgrade/upgrade(mob/living/silicon/ai/AI) + AI.purchased_modules += /obj/item/robot_module/engineering + log_game("[key_name(usr)] purchased emitters for all engineering cyborgs.") + message_admins("[key_name_admin(usr)] purchased emitters for all engineering cyborgs!") + for(var/mob/living/silicon/robot/R in AI.connected_robots) + if(!istype(R.module, /obj/item/robot_module/engineering)) + continue + R.module.malfhacked = TRUE + R.module.rebuild_modules() + to_chat(R, "New firmware downloaded. Emitter is now online.") diff --git a/code/game/gamemodes/miniantags/abduction/abduction_gear.dm b/code/game/gamemodes/miniantags/abduction/abduction_gear.dm index 08dbec69279..1c5db6ccfab 100644 --- a/code/game/gamemodes/miniantags/abduction/abduction_gear.dm +++ b/code/game/gamemodes/miniantags/abduction/abduction_gear.dm @@ -14,15 +14,15 @@ item_state = "armor" blood_overlay_type = "armor" origin_tech = "magnets=7;biotech=4;powerstorage=4;abductor=4" - armor = list("melee" = 15, "bullet" = 15, "laser" = 15, "energy" = 15, "bomb" = 15, "bio" = 15, "rad" = 15, "fire" = 70, "acid" = 70) + armor = list(MELEE = 15, BULLET = 15, LASER = 15, ENERGY = 15, BOMB = 15, BIO = 15, RAD = 15, FIRE = 70, ACID = 70) actions_types = list(/datum/action/item_action/hands_free/activate) allowed = list(/obj/item/abductor, /obj/item/abductor_baton, /obj/item/melee/baton, /obj/item/gun/energy, /obj/item/restraints/handcuffs) var/mode = VEST_STEALTH var/stealth_active = 0 var/combat_cooldown = 10 var/datum/icon_snapshot/disguise - var/stealth_armor = list("melee" = 15, "bullet" = 15, "laser" = 15, "energy" = 15, "bomb" = 15, "bio" = 15, "rad" = 15, "fire" = 70, "acid" = 70) - var/combat_armor = list("melee" = 50, "bullet" = 50, "laser" = 50, "energy" = 50, "bomb" = 50, "bio" = 50, "rad" = 50, "fire" = 90, "acid" = 90) + var/stealth_armor = list(MELEE = 15, BULLET = 15, LASER = 15, ENERGY = 15, BOMB = 15, BIO = 15, RAD = 15, FIRE = 70, ACID = 70) + var/combat_armor = list(MELEE = 50, BULLET = 50, LASER = 50, ENERGY = 50, BOMB = 50, BIO = 50, RAD = 50, FIRE = 90, ACID = 90) sprite_sheets = null /obj/item/clothing/suit/armor/abductor/vest/Initialize(mapload) diff --git a/code/game/gamemodes/miniantags/borer/borer.dm b/code/game/gamemodes/miniantags/borer/borer.dm index b2f07c7e4e6..c39babad9f6 100644 --- a/code/game/gamemodes/miniantags/borer/borer.dm +++ b/code/game/gamemodes/miniantags/borer/borer.dm @@ -4,10 +4,10 @@ /mob/living/captive_brain/say(message) if(client) - if(client.prefs.muted & MUTE_IC) + if(check_mute(client.ckey, MUTE_IC)) to_chat(src, "You cannot speak in IC (muted).") return - if(client.handle_spam_prevention(message,MUTE_IC)) + if(client.handle_spam_prevention(message, MUTE_IC)) return if(istype(loc,/mob/living/simple_animal/borer)) diff --git a/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm b/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm index bc82815d7f5..5f1efc143f9 100644 --- a/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm +++ b/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm @@ -372,10 +372,6 @@ to_chat(S, "This cryopod control computer should be preserved, it contains useful items and information about the inhabitants. Aborting.") return FALSE -/obj/structure/spacepoddoor/swarmer_act(mob/living/simple_animal/hostile/swarmer/S) - to_chat(S, "Disrupting this energy field would overload us. Aborting.") - return FALSE - /turf/simulated/wall/swarmer_act(mob/living/simple_animal/hostile/swarmer/S) var/isonshuttle = istype(loc, /area/shuttle) for(var/turf/T in range(1, src)) @@ -412,10 +408,6 @@ to_chat(S, "Attempting to dismantle this machine would result in an immediate counterattack. Aborting.") return FALSE -/obj/spacepod/swarmer_act(mob/living/simple_animal/hostile/swarmer/S) - to_chat(S, "Destroying this vehicle would destroy us. Aborting.") - return FALSE - /obj/machinery/clonepod/swarmer_act(mob/living/simple_animal/hostile/swarmer/S) if(occupant) to_chat(S, "Destroying this machine while it is occupied would result in biological and sentient resources to be harmed. Aborting.") diff --git a/code/game/gamemodes/nuclear/nuclear.dm b/code/game/gamemodes/nuclear/nuclear.dm index 1ace6f6a836..6aef09163d3 100644 --- a/code/game/gamemodes/nuclear/nuclear.dm +++ b/code/game/gamemodes/nuclear/nuclear.dm @@ -279,14 +279,6 @@ synd_mob.equip_to_slot_or_del(U, slot_in_backpack) if(synd_mob.dna.species) - - /* - Incase anyone ever gets the burning desire to have nukeops with randomized apperances. -- Dave - synd_mob.gender = pick(MALE, FEMALE) // Randomized appearances for the nukeops. - var/datum/preferences/pref = new() - A.randomize_appearance_for(synd_mob) - */ - var/race = synd_mob.dna.species.name switch(race) diff --git a/code/game/gamemodes/nuclear/nuclearbomb.dm b/code/game/gamemodes/nuclear/nuclearbomb.dm index b03a5d10fdf..1c9f0a40e8e 100644 --- a/code/game/gamemodes/nuclear/nuclearbomb.dm +++ b/code/game/gamemodes/nuclear/nuclearbomb.dm @@ -495,7 +495,7 @@ GLOBAL_VAR(bomb_set) desc = "Better keep this safe." icon_state = "nucleardisk" max_integrity = 250 - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 30, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 30, BIO = 0, RAD = 0, FIRE = 100, ACID = 100) resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF /obj/item/disk/nuclear/unrestricted diff --git a/code/game/gamemodes/objective.dm b/code/game/gamemodes/objective.dm index e4d3aecd279..9dff5725b81 100644 --- a/code/game/gamemodes/objective.dm +++ b/code/game/gamemodes/objective.dm @@ -205,6 +205,15 @@ GLOBAL_LIST_INIT(potential_theft_objectives, (subtypesof(/datum/theft_objective) /datum/objective/protect/mindslave //subytpe for mindslave implants +/datum/objective/protect/mindslave/on_target_cryo() + if(owner?.current) + to_chat(owner.current, "
You notice that your master has entered cryogenic storage, and revert to your normal self, until they return again. You are no longer a mindslave!") + SEND_SOUND(owner.current, sound('sound/ambience/alarm4.ogg')) + owner.remove_antag_datum(/datum/antagonist/mindslave) + SSticker.mode.implanted.Remove(owner) + log_admin("[key_name(owner.current)]'s mindslave master has cryo'd, and is no longer a mindslave.") + message_admins("[key_name_admin(owner.current)]'s mindslave master has cryo'd, and is no longer a mindslave.") //Since they were on antag hud earlier, this feels important to log + qdel(src) /datum/objective/hijack martyr_compatible = 0 //Technically you won't get both anyway. @@ -507,7 +516,7 @@ GLOBAL_LIST_INIT(potential_theft_objectives, (subtypesof(/datum/theft_objective) if(SSticker.current_state == GAME_STATE_SETTING_UP) for(var/mob/new_player/P in GLOB.player_list) if(P.client && P.ready && P.mind != owner) - if(P.client.prefs && (P.client.prefs.species == "Machine")) // Special check for species that can't be absorbed. No better solution. + if(P.client.prefs && (P.client.prefs.active_character.species == "Machine")) // Special check for species that can't be absorbed. No better solution. continue n_p++ else if(SSticker.current_state == GAME_STATE_PLAYING) diff --git a/code/game/gamemodes/revolution/revolution.dm b/code/game/gamemodes/revolution/revolution.dm index 93e385df6a9..eec522f577e 100644 --- a/code/game/gamemodes/revolution/revolution.dm +++ b/code/game/gamemodes/revolution/revolution.dm @@ -13,7 +13,7 @@ /datum/game_mode/revolution name = "revolution" config_tag = "revolution" - restricted_jobs = list("Security Officer", "Warden", "Detective", "Internal Affairs Agent", "AI", "Cyborg","Captain", "Head of Personnel", "Head of Security", "Chief Engineer", "Research Director", "Chief Medical Officer", "Blueshield", "Nanotrasen Representative", "Security Pod Pilot", "Magistrate", "Brig Physician") + restricted_jobs = list("Security Officer", "Warden", "Detective", "Internal Affairs Agent", "AI", "Cyborg","Captain", "Head of Personnel", "Head of Security", "Chief Engineer", "Research Director", "Chief Medical Officer", "Blueshield", "Nanotrasen Representative", "Magistrate", "Brig Physician") required_players = 20 required_enemies = 1 recommended_enemies = 3 @@ -220,7 +220,7 @@ if(SSshuttle.emergency.mode == SHUTTLE_STRANDED) SSshuttle.emergency.mode = SHUTTLE_DOCKED SSshuttle.emergency.timer = world.time - GLOB.command_announcement.Announce("Hostile enviroment resolved. You have 3 minutes to board the Emergency Shuttle.", null, 'sound/AI/shuttledock.ogg') + GLOB.command_announcement.Announce("Hostile enviroment resolved. You have 3 minutes to board the Emergency Shuttle.", null, 'sound/AI/eshuttle_dock.ogg') return ..() if(finished != 0) return TRUE diff --git a/code/game/gamemodes/setupgame.dm b/code/game/gamemodes/setupgame.dm index d749f8ef553..7315b52b062 100644 --- a/code/game/gamemodes/setupgame.dm +++ b/code/game/gamemodes/setupgame.dm @@ -40,7 +40,6 @@ GLOB.hulkblock = getAssignedBlock("HULK", numsToAssign, DNA_HARD_BOUNDS, good=1) GLOB.teleblock = getAssignedBlock("TELE", numsToAssign, DNA_HARD_BOUNDS, good=1) GLOB.fireblock = getAssignedBlock("FIRE", numsToAssign, DNA_HARDER_BOUNDS, good=1) - GLOB.xrayblock = getAssignedBlock("XRAY", numsToAssign, DNA_HARDER_BOUNDS, good=1) GLOB.clumsyblock = getAssignedBlock("CLUMSY", numsToAssign) GLOB.fakeblock = getAssignedBlock("FAKE", numsToAssign) GLOB.coughblock = getAssignedBlock("COUGH", numsToAssign) @@ -49,6 +48,10 @@ GLOB.twitchblock = getAssignedBlock("TWITCH", numsToAssign) GLOB.nervousblock = getAssignedBlock("NERVOUS", numsToAssign) GLOB.wingdingsblock = getAssignedBlock("WINGDINGS", numsToAssign) + GLOB.mesonblock = getAssignedBlock("MESONS", numsToAssign, good=1) + GLOB.noflashblock = getAssignedBlock("NOFLASH", numsToAssign, DNA_HARDER_BOUNDS, good=1) + GLOB.nightvisionblock = getAssignedBlock("NIGHTVISION", numsToAssign, DNA_HARDER_BOUNDS, good=1) + // Bay muts GLOB.breathlessblock = getAssignedBlock("BREATHLESS", numsToAssign, DNA_HARD_BOUNDS, good=1) @@ -62,7 +65,6 @@ GLOB.noprintsblock = getAssignedBlock("NOPRINTS", numsToAssign, DNA_HARD_BOUNDS, good=1) GLOB.shockimmunityblock = getAssignedBlock("SHOCKIMMUNITY", numsToAssign, good=1) GLOB.smallsizeblock = getAssignedBlock("SMALLSIZE", numsToAssign, DNA_HARD_BOUNDS, good=1) - // // Goon muts ///////////////////////////////////////////// diff --git a/code/game/gamemodes/shadowling/shadowling.dm b/code/game/gamemodes/shadowling/shadowling.dm index 2e2230fc419..b9a4eaf38a7 100644 --- a/code/game/gamemodes/shadowling/shadowling.dm +++ b/code/game/gamemodes/shadowling/shadowling.dm @@ -74,7 +74,7 @@ Made by Xhuis required_enemies = 2 recommended_enemies = 2 restricted_jobs = list("AI", "Cyborg") - protected_jobs = list("Security Officer", "Warden", "Detective", "Head of Security", "Head of Personnel", "Captain", "Blueshield", "Nanotrasen Representative", "Security Pod Pilot", "Magistrate", "Brig Physician", "Internal Affairs Agent", "Nanotrasen Navy Officer", "Special Operations Officer", "Syndicate Officer", "Solar Federation General") + protected_jobs = list("Security Officer", "Warden", "Detective", "Head of Security", "Head of Personnel", "Captain", "Blueshield", "Nanotrasen Representative", "Magistrate", "Brig Physician", "Internal Affairs Agent", "Nanotrasen Navy Officer", "Special Operations Officer", "Syndicate Officer", "Solar Federation General") /datum/game_mode/shadowling/announce() to_chat(world, "The current game mode is - Shadowling!") diff --git a/code/game/gamemodes/shadowling/shadowling_abilities.dm b/code/game/gamemodes/shadowling/shadowling_abilities.dm index 3b491765919..c764028ac41 100644 --- a/code/game/gamemodes/shadowling/shadowling_abilities.dm +++ b/code/game/gamemodes/shadowling/shadowling_abilities.dm @@ -418,7 +418,7 @@ qdel(B) /datum/reagent/shadowling_blindness_smoke //Blinds non-shadowlings, heals shadowlings/thralls - name = "odd black liquid" + name = "Odd black liquid" id = "blindness_smoke" description = "<::ERROR::> CANNOT ANALYZE REAGENT <::ERROR::>" color = "#000000" //Complete black (RGB: 0, 0, 0) diff --git a/code/game/gamemodes/steal_items.dm b/code/game/gamemodes/steal_items.dm index 77e775939fc..9814eb3ff2e 100644 --- a/code/game/gamemodes/steal_items.dm +++ b/code/game/gamemodes/steal_items.dm @@ -74,8 +74,8 @@ return 0 /datum/theft_objective/defib - name = "a compact defibrillator" - typepath = /obj/item/defibrillator/compact + name = "the chief medical officer's advanced compact defibrillator" + typepath = /obj/item/defibrillator/compact/advanced protected_jobs = list("Chief Medical Officer", "Paramedic") location_override = "the Chief Medical Officer's Office" diff --git a/code/game/gamemodes/traitor/traitor.dm b/code/game/gamemodes/traitor/traitor.dm index bb062035028..e3f853f2f0b 100644 --- a/code/game/gamemodes/traitor/traitor.dm +++ b/code/game/gamemodes/traitor/traitor.dm @@ -11,7 +11,7 @@ name = "traitor" config_tag = "traitor" restricted_jobs = list("Cyborg")//They are part of the AI if he is traitor so are they, they use to get double chances - protected_jobs = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Blueshield", "Nanotrasen Representative", "Security Pod Pilot", "Magistrate", "Internal Affairs Agent", "Brig Physician", "Nanotrasen Navy Officer", "Special Operations Officer", "Syndicate Officer", "Solar Federation General") + protected_jobs = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Blueshield", "Nanotrasen Representative", "Magistrate", "Internal Affairs Agent", "Brig Physician", "Nanotrasen Navy Officer", "Special Operations Officer", "Syndicate Officer", "Solar Federation General") required_players = 0 required_enemies = 1 recommended_enemies = 4 diff --git a/code/game/gamemodes/vampire/traitor_vamp.dm b/code/game/gamemodes/vampire/traitor_vamp.dm index 9eac23187ca..363829214a6 100644 --- a/code/game/gamemodes/vampire/traitor_vamp.dm +++ b/code/game/gamemodes/vampire/traitor_vamp.dm @@ -2,7 +2,7 @@ name = "traitor+vampire" config_tag = "traitorvamp" traitors_possible = 3 //hard limit on traitors if scaling is turned off - protected_jobs = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Blueshield", "Nanotrasen Representative", "Security Pod Pilot", "Magistrate", "Chaplain", "Brig Physician", "Internal Affairs Agent", "Nanotrasen Navy Officer", "Special Operations Officer", "Solar Federation General") + protected_jobs = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Blueshield", "Nanotrasen Representative", "Magistrate", "Chaplain", "Brig Physician", "Internal Affairs Agent", "Nanotrasen Navy Officer", "Special Operations Officer", "Solar Federation General") restricted_jobs = list("Cyborg") secondary_restricted_jobs = list("AI") required_players = 10 @@ -24,7 +24,7 @@ secondary_enemies = CEILING((secondary_enemies_scaling * num_players()), 1) for(var/mob/new_player/player in GLOB.player_list) - if((player.mind in possible_vampires) && (player.client.prefs.species in secondary_protected_species)) + if((player.mind in possible_vampires) && (player.client.prefs.active_character.species in secondary_protected_species)) possible_vampires -= player.mind if(possible_vampires.len > 0) diff --git a/code/game/gamemodes/vampire/vampire.dm b/code/game/gamemodes/vampire/vampire.dm index 9085042fe6a..bce5a9753c8 100644 --- a/code/game/gamemodes/vampire/vampire.dm +++ b/code/game/gamemodes/vampire/vampire.dm @@ -9,7 +9,7 @@ name = "vampire" config_tag = "vampire" restricted_jobs = list("AI", "Cyborg") - protected_jobs = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Blueshield", "Nanotrasen Representative", "Security Pod Pilot", "Magistrate", "Chaplain", "Brig Physician", "Internal Affairs Agent", "Nanotrasen Navy Officer", "Special Operations Officer", "Syndicate Officer", "Solar Federation General") + protected_jobs = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Blueshield", "Nanotrasen Representative", "Magistrate", "Chaplain", "Brig Physician", "Internal Affairs Agent", "Nanotrasen Navy Officer", "Special Operations Officer", "Syndicate Officer", "Solar Federation General") protected_species = list("Machine") required_players = 15 required_enemies = 1 diff --git a/code/game/gamemodes/wizard/artefact.dm b/code/game/gamemodes/wizard/artefact.dm index 259de282382..ddace2bf4ed 100644 --- a/code/game/gamemodes/wizard/artefact.dm +++ b/code/game/gamemodes/wizard/artefact.dm @@ -347,9 +347,9 @@ GLOBAL_LIST_EMPTY(multiverse) /obj/item/multisword/proc/spawn_copy(client/C, turf/T, mob/user) var/mob/living/carbon/human/M = new/mob/living/carbon/human(T) if(duplicate_self) - user.client.prefs.copy_to(M) + user.client.prefs.active_character.copy_to(M) else - C.prefs.copy_to(M) + C.prefs.active_character.copy_to(M) M.key = C.key M.mind.name = user.real_name to_chat(M, "You are an alternate version of [user.real_name] from another universe! Help [user.p_them()] accomplish [user.p_their()] goals at all costs.") diff --git a/code/game/gamemodes/wizard/raginmages.dm b/code/game/gamemodes/wizard/raginmages.dm index d50a6200764..88cd471b372 100644 --- a/code/game/gamemodes/wizard/raginmages.dm +++ b/code/game/gamemodes/wizard/raginmages.dm @@ -147,7 +147,7 @@ if(!G || !G.key) return // Let's not steal someone's soul here var/mob/living/carbon/human/new_character = new(pick(GLOB.latejoin)) - G.client.prefs.copy_to(new_character) + G.client.prefs.active_character.copy_to(new_character) new_character.key = G.key return new_character diff --git a/code/game/gamemodes/wizard/soulstone.dm b/code/game/gamemodes/wizard/soulstone.dm index 110bfec4a4e..6aa1e1ce742 100644 --- a/code/game/gamemodes/wizard/soulstone.dm +++ b/code/game/gamemodes/wizard/soulstone.dm @@ -83,6 +83,10 @@ if(!ishuman(M)) //If target is not a human return ..() + if(!M.mind) + to_chat(user, "This being has no soul!") + return ..() + if(M.has_brain_worms()) //Borer stuff - RR to_chat(user, "This being is corrupted by an alien intelligence and cannot be soul trapped.") return ..() @@ -430,9 +434,9 @@ if(!chosen_ghost) // Failing that, we grab a ghost var/list/consenting_candidates if(purified) - consenting_candidates = SSghost_spawns.poll_candidates("Would you like to play as a Holy Shade?", ROLE_SENTIENT, FALSE, poll_time = 10 SECONDS, source = /mob/living/simple_animal/shade/holy) + consenting_candidates = SSghost_spawns.poll_candidates("Would you like to play as a Holy Shade?", ROLE_SENTIENT, FALSE, poll_time = 10 SECONDS, source = /mob/living/simple_animal/shade/holy, role_cleanname = "holy shade") else - consenting_candidates = SSghost_spawns.poll_candidates("Would you like to play as a Shade?", ROLE_SENTIENT, FALSE, poll_time = 10 SECONDS, source = /mob/living/simple_animal/shade) + consenting_candidates = SSghost_spawns.poll_candidates("Would you like to play as a Shade?", ROLE_SENTIENT, FALSE, poll_time = 10 SECONDS, source = /mob/living/simple_animal/shade, role_cleanname = "shade") if(length(consenting_candidates)) chosen_ghost = pick(consenting_candidates) if(!M) diff --git a/code/game/gamemodes/wizard/spellbook.dm b/code/game/gamemodes/wizard/spellbook.dm index 67ad3a2ebae..927b9472ad4 100644 --- a/code/game/gamemodes/wizard/spellbook.dm +++ b/code/game/gamemodes/wizard/spellbook.dm @@ -343,6 +343,21 @@ playsound(get_turf(user), 'sound/effects/ghost2.ogg', 50, 1) return TRUE +/datum/spellbook_entry/summon/slience_ghosts + name = "Silence Ghosts" + desc = "Tired of people talking behind your back, and spooking you? Why not silence them, and make the dead deader." + cost = 2 + log_name = "SLG" + is_ragin_restricted = TRUE //Salt needs to flow here, to be honest + +/datum/spellbook_entry/summon/slience_ghosts/Buy(mob/living/carbon/human/user, obj/item/spellbook/book) + new /datum/event/wizard/ghost_mute() + active = TRUE + to_chat(user, "You have silenced all ghosts!") + playsound(get_turf(user), 'sound/effects/ghost.ogg', 50, 1) + message_admins("[key_name_admin(usr)] silenced all ghosts as a wizard! (Deadchat is now DISABLED)") + return TRUE + /datum/spellbook_entry/summon/guns name = "Summon Guns" desc = "Nothing could possibly go wrong with arming a crew of lunatics just itching for an excuse to kill you. There is a good chance that they will shoot each other first." @@ -1029,7 +1044,7 @@ var/obj/item/clothing/mask/horsehead/magichead = new /obj/item/clothing/mask/horsehead magichead.flags |= NODROP | DROPDEL //curses! magichead.flags_inv = null //so you can still see their face - magichead.voicechange = 1 //NEEEEIIGHH + magichead.voicechange = TRUE //NEEEEIIGHH if(!user.unEquip(user.wear_mask)) qdel(user.wear_mask) user.equip_to_slot_if_possible(magichead, slot_wear_mask, TRUE, TRUE) diff --git a/code/game/jobs/access.dm b/code/game/jobs/access.dm index d6d28c698e6..324e0929f19 100644 --- a/code/game/jobs/access.dm +++ b/code/game/jobs/access.dm @@ -133,9 +133,9 @@ ACCESS_HEADS, ACCESS_CAPTAIN, ACCESS_CARGO, ACCESS_MAILSORTING, ACCESS_CHAPEL_OFFICE, ACCESS_CE, ACCESS_CHEMISTRY, ACCESS_CLOWN, ACCESS_CMO, ACCESS_COURT, ACCESS_CONSTRUCTION, ACCESS_CREMATORIUM, ACCESS_JANITOR, ACCESS_ENGINE, ACCESS_EVA, ACCESS_EXTERNAL_AIRLOCKS, ACCESS_FORENSICS_LOCKERS, ACCESS_GENETICS, ACCESS_GATEWAY, ACCESS_BRIG, ACCESS_HOP, ACCESS_HOS, ACCESS_HYDROPONICS, ACCESS_CHANGE_IDS, ACCESS_KEYCARD_AUTH, ACCESS_KITCHEN, - ACCESS_LAWYER, ACCESS_LIBRARY, ACCESS_MAGISTRATE, ACCESS_MAINT_TUNNELS, ACCESS_HEADS_VAULT, ACCESS_MEDICAL, ACCESS_MECHANIC, ACCESS_MIME, + ACCESS_LAWYER, ACCESS_LIBRARY, ACCESS_MAGISTRATE, ACCESS_MAINT_TUNNELS, ACCESS_HEADS_VAULT, ACCESS_MEDICAL, ACCESS_MIME, ACCESS_MINING, ACCESS_MINING_STATION, ACCESS_MINERAL_STOREROOM, ACCESS_MORGUE, ACCESS_NETWORK, ACCESS_NTREP, ACCESS_PARAMEDIC, ACCESS_ALL_PERSONAL_LOCKERS, - ACCESS_ENGINE_EQUIP, ACCESS_PSYCHIATRIST, ACCESS_QM, ACCESS_RD, ACCESS_RC_ANNOUNCE, ACCESS_ROBOTICS, ACCESS_TOX, ACCESS_RESEARCH, ACCESS_SECURITY, ACCESS_PILOT, + ACCESS_ENGINE_EQUIP, ACCESS_PSYCHIATRIST, ACCESS_QM, ACCESS_RD, ACCESS_RC_ANNOUNCE, ACCESS_ROBOTICS, ACCESS_TOX, ACCESS_RESEARCH, ACCESS_SECURITY, ACCESS_SURGERY, ACCESS_TECH_STORAGE, ACCESS_TELEPORTER, ACCESS_THEATRE, ACCESS_TCOMSAT, ACCESS_TOX_STORAGE, ACCESS_VIROLOGY, ACCESS_WEAPONS, ACCESS_XENOBIOLOGY, ACCESS_XENOARCH) @@ -158,13 +158,13 @@ if(REGION_GENERAL) //station general return list(ACCESS_KITCHEN, ACCESS_BAR, ACCESS_HYDROPONICS, ACCESS_JANITOR, ACCESS_CHAPEL_OFFICE, ACCESS_CREMATORIUM, ACCESS_LIBRARY, ACCESS_THEATRE, ACCESS_LAWYER, ACCESS_MAGISTRATE, ACCESS_CLOWN, ACCESS_MIME) if(REGION_SECURITY) //security - return list(ACCESS_SEC_DOORS, ACCESS_WEAPONS, ACCESS_SECURITY, ACCESS_BRIG, ACCESS_ARMORY, ACCESS_FORENSICS_LOCKERS, ACCESS_COURT, ACCESS_PILOT, ACCESS_HOS) + return list(ACCESS_SEC_DOORS, ACCESS_WEAPONS, ACCESS_SECURITY, ACCESS_BRIG, ACCESS_ARMORY, ACCESS_FORENSICS_LOCKERS, ACCESS_COURT, ACCESS_HOS) if(REGION_MEDBAY) //medbay return list(ACCESS_MEDICAL, ACCESS_GENETICS, ACCESS_MORGUE, ACCESS_CHEMISTRY, ACCESS_PSYCHIATRIST, ACCESS_VIROLOGY, ACCESS_SURGERY, ACCESS_CMO, ACCESS_PARAMEDIC) if(REGION_RESEARCH) //research return list(ACCESS_RESEARCH, ACCESS_TOX, ACCESS_TOX_STORAGE, ACCESS_GENETICS, ACCESS_ROBOTICS, ACCESS_XENOBIOLOGY, ACCESS_XENOARCH, ACCESS_MINISAT, ACCESS_RD, ACCESS_NETWORK) if(REGION_ENGINEERING) //engineering and maintenance - return list(ACCESS_CONSTRUCTION, ACCESS_MAINT_TUNNELS, ACCESS_ENGINE, ACCESS_ENGINE_EQUIP, ACCESS_EXTERNAL_AIRLOCKS, ACCESS_TECH_STORAGE, ACCESS_ATMOSPHERICS, ACCESS_MINISAT, ACCESS_CE, ACCESS_MECHANIC) + return list(ACCESS_CONSTRUCTION, ACCESS_MAINT_TUNNELS, ACCESS_ENGINE, ACCESS_ENGINE_EQUIP, ACCESS_EXTERNAL_AIRLOCKS, ACCESS_TECH_STORAGE, ACCESS_ATMOSPHERICS, ACCESS_MINISAT, ACCESS_CE) if(REGION_SUPPLY) //supply return list(ACCESS_MAILSORTING, ACCESS_MINING, ACCESS_MINING_STATION, ACCESS_MINERAL_STOREROOM, ACCESS_CARGO, ACCESS_QM) if(REGION_COMMAND) //command @@ -334,10 +334,6 @@ return "Nanotrasen Rep." if(ACCESS_PARAMEDIC) return "Paramedic" - if(ACCESS_MECHANIC) - return "Mechanic Workshop" - if(ACCESS_PILOT) - return "Security Pod Pilot" if(ACCESS_MAGISTRATE) return "Magistrate" if(ACCESS_MINERAL_STOREROOM) diff --git a/code/game/jobs/job/engineering.dm b/code/game/jobs/job/engineering.dm index a3333e1dc82..b73a15314d8 100644 --- a/code/game/jobs/job/engineering.dm +++ b/code/game/jobs/job/engineering.dm @@ -12,11 +12,11 @@ access = list(ACCESS_ENGINE, ACCESS_ENGINE_EQUIP, ACCESS_TECH_STORAGE, ACCESS_MAINT_TUNNELS, ACCESS_TELEPORTER, ACCESS_EXTERNAL_AIRLOCKS, ACCESS_ATMOSPHERICS, ACCESS_EMERGENCY_STORAGE, ACCESS_EVA, ACCESS_HEADS, ACCESS_CONSTRUCTION, ACCESS_SEC_DOORS, - ACCESS_CE, ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_TCOMSAT, ACCESS_MINISAT, ACCESS_MECHANIC, ACCESS_MINERAL_STOREROOM) + ACCESS_CE, ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_TCOMSAT, ACCESS_MINISAT, ACCESS_MINERAL_STOREROOM) minimal_access = list(ACCESS_ENGINE, ACCESS_ENGINE_EQUIP, ACCESS_TECH_STORAGE, ACCESS_MAINT_TUNNELS, ACCESS_TELEPORTER, ACCESS_EXTERNAL_AIRLOCKS, ACCESS_ATMOSPHERICS, ACCESS_EMERGENCY_STORAGE, ACCESS_EVA, ACCESS_HEADS, ACCESS_CONSTRUCTION, ACCESS_SEC_DOORS, - ACCESS_CE, ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_TCOMSAT, ACCESS_MINISAT, ACCESS_MECHANIC, ACCESS_MINERAL_STOREROOM) + ACCESS_CE, ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_TCOMSAT, ACCESS_MINISAT, ACCESS_MINERAL_STOREROOM) minimal_player_age = 21 exp_requirements = 1200 exp_type = EXP_TYPE_ENGINEERING @@ -117,37 +117,3 @@ dufflebag = /obj/item/storage/backpack/duffel/atmos box = /obj/item/storage/box/engineer -/datum/job/mechanic - title = "Mechanic" - flag = JOB_MECHANIC - department_flag = JOBCAT_KARMA - total_positions = 1 - spawn_positions = 1 - is_engineering = 1 - supervisors = "the chief engineer" - department_head = list("Chief Engineer") - selection_color = "#fff5cc" - access = list(ACCESS_ENGINE, ACCESS_ENGINE_EQUIP, ACCESS_TECH_STORAGE, ACCESS_MAINT_TUNNELS, ACCESS_MECHANIC, ACCESS_EXTERNAL_AIRLOCKS, ACCESS_MINERAL_STOREROOM) - minimal_access = list(ACCESS_MAINT_TUNNELS, ACCESS_EMERGENCY_STORAGE, ACCESS_MECHANIC, ACCESS_EXTERNAL_AIRLOCKS, ACCESS_MINERAL_STOREROOM) - outfit = /datum/outfit/job/mechanic - -/datum/outfit/job/mechanic - name = "Mechanic" - jobtype = /datum/job/mechanic - - uniform = /obj/item/clothing/under/rank/mechanic - belt = /obj/item/storage/belt/utility/full - shoes = /obj/item/clothing/shoes/workboots - head = /obj/item/clothing/head/hardhat - l_ear = /obj/item/radio/headset/headset_eng - id = /obj/item/card/id/engineering - r_pocket = /obj/item/t_scanner - pda = /obj/item/pda/engineering - backpack_contents = list( - /obj/item/pod_paint_bucket = 1 - ) - - backpack = /obj/item/storage/backpack/industrial - satchel = /obj/item/storage/backpack/satchel_eng - dufflebag = /obj/item/storage/backpack/duffel/engineering - box = /obj/item/storage/box/engineer diff --git a/code/game/jobs/job/job.dm b/code/game/jobs/job/job.dm index c39e1ff555f..49e375d2123 100644 --- a/code/game/jobs/job/job.dm +++ b/code/game/jobs/job/job.dm @@ -123,7 +123,7 @@ var/list/prohibited_disabilities = list(DISABILITY_FLAG_BLIND, DISABILITY_FLAG_DEAF, DISABILITY_FLAG_MUTE, DISABILITY_FLAG_DIZZY) for(var/i = 1, i < prohibited_disabilities.len, i++) var/this_disability = prohibited_disabilities[i] - if(C.prefs.disabilities & this_disability) + if(C.prefs.active_character.disabilities & this_disability) return 1 return 0 @@ -173,9 +173,9 @@ if(box && H.dna.species.speciesbox) box = H.dna.species.speciesbox - if(allow_loadout && H.client && (H.client.prefs.loadout_gear && H.client.prefs.loadout_gear.len)) - for(var/gear in H.client.prefs.loadout_gear) - var/datum/gear/G = GLOB.gear_datums[gear] + if(allow_loadout && H.client && length(H.client.prefs.active_character.loadout_gear)) + for(var/gear in H.client.prefs.active_character.loadout_gear) + var/datum/gear/G = GLOB.gear_datums[text2path(gear) || gear] if(G) var/permitted = FALSE @@ -185,16 +185,13 @@ else permitted = TRUE - if(G.whitelisted && (G.whitelisted != H.dna.species.name || !is_alien_whitelisted(H, G.whitelisted))) - permitted = FALSE - if(!permitted) - to_chat(H, "Your current job or whitelist status does not permit you to spawn with [gear]!") + to_chat(H, "Your current job or whitelist status does not permit you to spawn with [G.display_name]!") continue if(G.slot) if(H.equip_to_slot_or_del(G.spawn_item(H), G.slot, TRUE)) - to_chat(H, "Equipping you with [gear]!") + to_chat(H, "Equipping you with [G.display_name]!") else gear_leftovers += G else @@ -212,12 +209,12 @@ if(gear_leftovers.len) for(var/datum/gear/G in gear_leftovers) - var/atom/placed_in = H.equip_or_collect(G.spawn_item(null, H.client.prefs.loadout_gear[G.display_name])) + var/atom/placed_in = H.equip_or_collect(G.spawn_item(null, H.client.prefs.active_character.loadout_gear[G.display_name])) if(istype(placed_in)) if(isturf(placed_in)) to_chat(H, "Placing [G.display_name] on [placed_in]!") else - to_chat(H, "Placing [G.display_name] in [placed_in.name].") + to_chat(H, "Placing [G.display_name] in your [placed_in.name].") continue if(H.equip_to_appropriate_slot(G)) to_chat(H, "Placing [G.display_name] in your inventory!") diff --git a/code/game/jobs/job/security.dm b/code/game/jobs/job/security.dm index a7a8b69edba..407a932c3b8 100644 --- a/code/game/jobs/job/security.dm +++ b/code/game/jobs/job/security.dm @@ -10,13 +10,13 @@ selection_color = "#ffdddd" req_admin_notify = 1 access = list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_BRIG, ACCESS_ARMORY, ACCESS_COURT, - ACCESS_FORENSICS_LOCKERS, ACCESS_PILOT, ACCESS_MORGUE, ACCESS_MAINT_TUNNELS, ACCESS_ALL_PERSONAL_LOCKERS, + ACCESS_FORENSICS_LOCKERS, ACCESS_MORGUE, ACCESS_MAINT_TUNNELS, ACCESS_ALL_PERSONAL_LOCKERS, ACCESS_RESEARCH, ACCESS_ENGINE, ACCESS_MINING, ACCESS_MEDICAL, ACCESS_CONSTRUCTION, ACCESS_MAILSORTING, ACCESS_HEADS, ACCESS_HOS, ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_GATEWAY, ACCESS_WEAPONS) minimal_access = list(ACCESS_EVA, ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_BRIG, ACCESS_ARMORY, ACCESS_COURT, ACCESS_FORENSICS_LOCKERS, ACCESS_MORGUE, ACCESS_MAINT_TUNNELS, ACCESS_ALL_PERSONAL_LOCKERS, ACCESS_RESEARCH, ACCESS_ENGINE, ACCESS_MINING, ACCESS_MEDICAL, ACCESS_CONSTRUCTION, ACCESS_MAILSORTING, - ACCESS_HEADS, ACCESS_HOS, ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_GATEWAY, ACCESS_PILOT, ACCESS_WEAPONS) + ACCESS_HEADS, ACCESS_HOS, ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_GATEWAY, ACCESS_WEAPONS) minimal_player_age = 21 exp_requirements = 1200 exp_type = EXP_TYPE_SECURITY @@ -222,40 +222,3 @@ backpack = /obj/item/storage/backpack/medic satchel = /obj/item/storage/backpack/satchel_med dufflebag = /obj/item/storage/backpack/duffel/medical - - -/datum/job/pilot - title = "Security Pod Pilot" - flag = JOB_PILOT - department_flag = JOBCAT_KARMA - total_positions = 1 - spawn_positions = 1 - is_security = 1 - supervisors = "the head of security" - department_head = list("Head of Security") - selection_color = "#ffeeee" - access = list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_BRIG, ACCESS_COURT, ACCESS_MAINT_TUNNELS, ACCESS_MORGUE, ACCESS_WEAPONS, ACCESS_PILOT, ACCESS_EXTERNAL_AIRLOCKS) - minimal_access = list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_BRIG, ACCESS_COURT, ACCESS_MAINT_TUNNELS, ACCESS_WEAPONS, ACCESS_PILOT, ACCESS_EXTERNAL_AIRLOCKS) - minimal_player_age = 7 - outfit = /datum/outfit/job/pilot - -/datum/outfit/job/pilot - name = "Security Pod Pilot" - jobtype = /datum/job/pilot - uniform = /obj/item/clothing/under/rank/security/pod_pilot - suit = /obj/item/clothing/suit/jacket/pilot - gloves = /obj/item/clothing/gloves/color/black - shoes = /obj/item/clothing/shoes/jackboots - l_ear = /obj/item/radio/headset/headset_sec/alt - id = /obj/item/card/id/security - l_pocket = /obj/item/flash - suit_store = /obj/item/gun/energy/gun/advtaser - pda = /obj/item/pda/security - backpack_contents = list( - /obj/item/restraints/handcuffs = 1 - ) - implants = list(/obj/item/implant/mindshield) - backpack = /obj/item/storage/backpack/security - satchel = /obj/item/storage/backpack/satchel_sec - dufflebag = /obj/item/storage/backpack/duffel/security - box = /obj/item/storage/box/engineer diff --git a/code/game/jobs/job/supervisor.dm b/code/game/jobs/job/supervisor.dm index fa0fb892cae..46ed46f5ae2 100644 --- a/code/game/jobs/job/supervisor.dm +++ b/code/game/jobs/job/supervisor.dm @@ -194,16 +194,18 @@ GLOBAL_DATUM_INIT(captain_announcement, /datum/announcement/minor, new(do_newsca /datum/job/judge title = "Magistrate" flag = JOB_JUDGE - department_flag = JOBCAT_KARMA + department_flag = JOBCAT_ENGSEC total_positions = 1 spawn_positions = 1 supervisors = "the Nanotrasen Supreme Court" department_head = list("Captain") selection_color = "#ddddff" - req_admin_notify = 1 - is_legal = 1 + req_admin_notify = TRUE + is_legal = TRUE transfer_allowed = FALSE minimal_player_age = 30 + exp_requirements = 6000 // 100 hours baby + exp_type = EXP_TYPE_SECURITY access = list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_BRIG, ACCESS_COURT, ACCESS_FORENSICS_LOCKERS, ACCESS_MEDICAL, ACCESS_ENGINE, ACCESS_CHANGE_IDS, ACCESS_EVA, ACCESS_HEADS, ACCESS_ALL_PERSONAL_LOCKERS, ACCESS_MAINT_TUNNELS, ACCESS_BAR, ACCESS_JANITOR, ACCESS_CONSTRUCTION, ACCESS_MORGUE, diff --git a/code/game/jobs/jobs.dm b/code/game/jobs/jobs.dm index e0e817f76ef..c15c59303b7 100644 --- a/code/game/jobs/jobs.dm +++ b/code/game/jobs/jobs.dm @@ -17,7 +17,6 @@ GLOBAL_LIST_INIT(engineering_positions, list( "Chief Engineer", "Station Engineer", "Life Support Specialist", - "Mechanic" )) @@ -78,7 +77,6 @@ GLOBAL_LIST_INIT(security_positions, list( "Detective", "Security Officer", "Brig Physician", - "Security Pod Pilot", "Magistrate" )) @@ -98,10 +96,7 @@ GLOBAL_LIST_INIT(whitelisted_positions, list( "Blueshield", "Nanotrasen Representative", "Barber", - "Mechanic", - "Brig Physician", - "Magistrate", - "Security Pod Pilot", + "Brig Physician" )) diff --git a/code/game/machinery/Beacon.dm b/code/game/machinery/Beacon.dm index 41612fb870b..4705c041775 100644 --- a/code/game/machinery/Beacon.dm +++ b/code/game/machinery/Beacon.dm @@ -4,7 +4,8 @@ name = "Bluespace Gigabeacon" desc = "A device that draws power from bluespace and creates a permanent tracking beacon." level = 1 // underfloor - layer = 2.5 + layer = WIRE_LAYER + plane = FLOOR_PLANE anchored = 1 use_power = IDLE_POWER_USE idle_power_usage = 0 @@ -26,7 +27,8 @@ Beacon.syndicate = syndicate Beacon.area_bypass = area_bypass Beacon.cc_beacon = cc_beacon - hide(T.intact) + if(!T.transparent_floor) + hide(T.intact) /obj/machinery/bluespace_beacon/proc/destroy_beacon() QDEL_NULL(Beacon) diff --git a/code/game/machinery/Sleeper.dm b/code/game/machinery/Sleeper.dm index 57062a6e806..1272a667baa 100644 --- a/code/game/machinery/Sleeper.dm +++ b/code/game/machinery/Sleeper.dm @@ -512,7 +512,7 @@ if(!istype(L) || L.buckled) return if(L.abiotic()) - to_chat(user, "Subject cannot have abiotic items on.") + to_chat(user, "Subject may not hold anything in their hands.") return if(L.has_buckled_mobs()) //mob attached to us to_chat(user, "[L] will not fit into [src] because [L.p_they()] [L.p_have()] a slime latched onto [L.p_their()] head.") diff --git a/code/game/machinery/adv_med.dm b/code/game/machinery/adv_med.dm index 9b16d52383c..52857a071dc 100644 --- a/code/game/machinery/adv_med.dm +++ b/code/game/machinery/adv_med.dm @@ -67,7 +67,7 @@ return var/mob/living/carbon/human/M = TYPECAST_YOUR_SHIT.affecting if(M.abiotic()) - to_chat(user, "Subject cannot have abiotic items on.") + to_chat(user, "Subject may not hold anything in their hands.") return M.forceMove(src) occupant = M @@ -122,7 +122,7 @@ if(H.buckled) return FALSE if(H.abiotic()) - to_chat(user, "Subject cannot have abiotic items on.") + to_chat(user, "Subject may not hold anything in their hands.") return FALSE if(H.has_buckled_mobs()) //mob attached to us to_chat(user, "[H] will not fit into [src] because [H.p_they()] [H.p_have()] a slime latched onto [H.p_their()] head.") diff --git a/code/game/machinery/camera/camera.dm b/code/game/machinery/camera/camera.dm index 8a04c310e17..e390634bb34 100644 --- a/code/game/machinery/camera/camera.dm +++ b/code/game/machinery/camera/camera.dm @@ -9,7 +9,7 @@ layer = WALL_OBJ_LAYER resistance_flags = FIRE_PROOF damage_deflection = 12 - armor = list("melee" = 50, "bullet" = 20, "laser" = 20, "energy" = 20, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 90, "acid" = 50) + armor = list(MELEE = 50, BULLET = 20, LASER = 20, ENERGY = 20, BOMB = 0, BIO = 0, RAD = 0, FIRE = 90, ACID = 50) var/datum/wires/camera/wires = null // Wires datum max_integrity = 100 integrity_failure = 50 diff --git a/code/game/machinery/camera/camera_assembly.dm b/code/game/machinery/camera/camera_assembly.dm index c7d95370613..a375e2d929b 100644 --- a/code/game/machinery/camera/camera_assembly.dm +++ b/code/game/machinery/camera/camera_assembly.dm @@ -13,8 +13,8 @@ w_class = WEIGHT_CLASS_SMALL anchored = FALSE materials = list(MAT_METAL=400, MAT_GLASS=250) - // Motion, EMP-Proof, X-Ray - var/list/obj/item/possible_upgrades = list(/obj/item/assembly/prox_sensor, /obj/item/stack/sheet/mineral/plasma, /obj/item/analyzer) + // Motion, EMP-Proof + var/list/obj/item/possible_upgrades = list(/obj/item/assembly/prox_sensor, /obj/item/stack/sheet/mineral/plasma) var/list/upgrades = list() var/state = ASSEMBLY_UNBUILT diff --git a/code/game/machinery/camera/presets.dm b/code/game/machinery/camera/presets.dm index 33c970639e5..4d21a0d91a1 100644 --- a/code/game/machinery/camera/presets.dm +++ b/code/game/machinery/camera/presets.dm @@ -25,7 +25,7 @@ // ALL UPGRADES /obj/machinery/camera/all - icon_state = "xraycamera" //mapping icon. + icon_state = "xraycam" //mapping icon. /obj/machinery/camera/all/Initialize(mapload) . = ..() diff --git a/code/game/machinery/cloning.dm b/code/game/machinery/cloning.dm index e8d5cfcf437..e67e51813c4 100644 --- a/code/game/machinery/cloning.dm +++ b/code/game/machinery/cloning.dm @@ -48,7 +48,7 @@ GLOBAL_LIST_INIT(cloner_biomass_items, list(\ var/obj/effect/countdown/clonepod/countdown var/list/brine_types = list("corazone", "perfluorodecalin", "epinephrine", "salglu_solution") //stops heart attacks, heart failure, shock, and keeps their O2 levels normal - var/list/missing_organs + var/list/missing_organs = list() var/organs_number = 0 light_color = LIGHT_COLOR_PURE_GREEN @@ -100,6 +100,7 @@ GLOBAL_LIST_INIT(cloner_biomass_items, list(\ /obj/machinery/clonepod/Destroy() if(connected) connected.pods -= src + connected = null if(clonemind) UnregisterSignal(clonemind.current, COMSIG_LIVING_REVIVE) UnregisterSignal(clonemind, COMSIG_MIND_TRANSER_TO) @@ -337,9 +338,9 @@ GLOBAL_LIST_INIT(cloner_biomass_items, list(\ progress += (100 - MINIMUM_HEAL_LEVEL) var/milestone = CLONE_INITIAL_DAMAGE / organs_number // Doing this as a #define so that the value can change when evaluated multiple times -#define INSTALLED (organs_number - LAZYLEN(missing_organs)) +#define INSTALLED (organs_number - length(missing_organs)) - while((progress / milestone) > INSTALLED && LAZYLEN(missing_organs)) + while((progress / milestone) > INSTALLED && length(missing_organs)) var/obj/item/organ/I = pick_n_take(missing_organs) I.safe_replace(occupant) @@ -493,9 +494,7 @@ GLOBAL_LIST_INIT(cloner_biomass_items, list(\ clonemind = null - for(var/i in missing_organs) - qdel(i) - missing_organs.Cut() + QDEL_LIST(missing_organs) occupant.SetLoseBreath(0) // Stop friggin' dying, gosh damn occupant.setOxyLoss(0) for(var/datum/disease/critical/crit in occupant.viruses) @@ -522,9 +521,7 @@ GLOBAL_LIST_INIT(cloner_biomass_items, list(\ message += "Is this what dying is like? Yes it is." to_chat(occupant, "[message]") SEND_SOUND(occupant, sound('sound/hallucinations/veryfar_noise.ogg', 0, 1, 50)) - for(var/i in missing_organs) - qdel(i) - missing_organs.Cut() + QDEL_LIST(missing_organs) clonemind = null spawn(40) qdel(occupant) @@ -576,10 +573,7 @@ GLOBAL_LIST_INIT(cloner_biomass_items, list(\ malfunction(go_easy = TRUE) /obj/machinery/clonepod/proc/maim_clone(mob/living/carbon/human/H) - LAZYINITLIST(missing_organs) - for(var/i in missing_organs) - qdel(i) - missing_organs.Cut() + QDEL_LIST(missing_organs) H.setCloneLoss(CLONE_INITIAL_DAMAGE, FALSE) H.setBrainLoss(BRAIN_INITIAL_DAMAGE) @@ -603,7 +597,7 @@ GLOBAL_LIST_INIT(cloner_biomass_items, list(\ I.forceMove(src) missing_organs += I - organs_number = LAZYLEN(missing_organs) + organs_number = length(missing_organs) H.updatehealth() /obj/machinery/clonepod/proc/check_brine() diff --git a/code/game/machinery/computer/Operating.dm b/code/game/machinery/computer/Operating.dm index bc004c28b1f..739b9bd5508 100644 --- a/code/game/machinery/computer/Operating.dm +++ b/code/game/machinery/computer/Operating.dm @@ -25,11 +25,9 @@ /obj/machinery/computer/operating/New() ..() - for(dir in list(NORTH,EAST,SOUTH,WEST)) - table = locate(/obj/machinery/optable, get_step(src, dir)) - if(table) - table.computer = src - break + table = locate(/obj/machinery/optable, orange(1, src)) + if(table) + table.computer = src /obj/machinery/computer/operating/Destroy() if(table) diff --git a/code/game/machinery/computer/arcade.dm b/code/game/machinery/computer/arcade.dm index 391a137749a..a15712394f5 100644 --- a/code/game/machinery/computer/arcade.dm +++ b/code/game/machinery/computer/arcade.dm @@ -257,6 +257,7 @@ enemy_name = "Cuban Pete" name = "Outbomb Cuban Pete" + add_hiddenprint(user) updateUsrDialog() // *** THE ORION TRAIL ** // @@ -962,6 +963,7 @@ to_chat(user, "You override the cheat code menu and skip to Cheat #[rand(1, 50)]: Realism Mode.") name = "The Orion Trail: Realism Edition" desc = "Learn how our ancestors got to Orion, and try not to die in the process!" + add_hiddenprint(user) newgame() emagged = 1 diff --git a/code/game/machinery/computer/buildandrepair.dm b/code/game/machinery/computer/buildandrepair.dm index 78895d0d099..8cac7136b29 100644 --- a/code/game/machinery/computer/buildandrepair.dm +++ b/code/game/machinery/computer/buildandrepair.dm @@ -257,8 +257,8 @@ board_name = "RD Console" desc = "Swipe a Scientist level ID or higher to reconfigure." build_path = /obj/machinery/computer/rdconsole/core - req_access = list(ACCESS_TOX) // This is for adjusting the type of computer we're building - in case something messes up the pre-existing robotics or mechanics consoles - var/list/access_types = list("R&D Core", "Robotics", "E.X.P.E.R.I-MENTOR", "Mechanics", "Public") + req_access = list(ACCESS_TOX) // This is for adjusting the type of computer we're building - in case something messes up the pre-existing robotics console + var/list/access_types = list("R&D Core", "Robotics", "E.X.P.E.R.I-MENTOR", "Public") /obj/item/circuitboard/rdconsole/robotics board_name = "RD Console - Robotics" @@ -268,10 +268,6 @@ board_name = "RD Console - E.X.P.E.R.I-MENTOR" build_path = /obj/machinery/computer/rdconsole/experiment -/obj/item/circuitboard/rdconsole/mechanics - board_name = "RD Console - Mechanics" - build_path = /obj/machinery/computer/rdconsole/mechanics - /obj/item/circuitboard/rdconsole/public board_name = "RD Console - Public" build_path = /obj/machinery/computer/rdconsole/public @@ -281,10 +277,6 @@ board_name = "Exosuit Control Console" build_path = /obj/machinery/computer/mecha -/obj/item/circuitboard/pod_locater - board_name = "Pod Location Console" - build_path = /obj/machinery/computer/podtracker - /obj/item/circuitboard/rdservercontrol board_name = "RD Server Control" build_path = /obj/machinery/computer/rdservercontrol @@ -426,9 +418,6 @@ if("E.X.P.E.R.I-MENTOR") board_name = "RD Console - E.X.P.E.R.I-MENTOR" build_path = /obj/machinery/computer/rdconsole/experiment - if("Mechanics") - board_name = "RD Console - Mechanics" - build_path = /obj/machinery/computer/rdconsole/mechanics if("Public") board_name = "RD Console - Public" build_path = /obj/machinery/computer/rdconsole/public @@ -462,6 +451,17 @@ drop_computer_parts() return ..() // will qdel the frame +/obj/structure/computerframe/AltClick(mob/user) + if(user.incapacitated()) + to_chat(user, "You can't do that right now!") + return + if(!Adjacent(user)) + return + if(anchored) + to_chat(user, "The frame is anchored to the floor!") + return + setDir(turn(dir, 90)) + /obj/structure/computerframe/obj_break(damage_flag) deconstruct() @@ -544,7 +544,8 @@ if(STATE_GLASS) to_chat(user, "You connect the monitor.") I.play_tool_sound(src) - var/B = new circuit.build_path(loc) + var/obj/machinery/computer/B = new circuit.build_path(loc) + B.setDir(dir) if(istype(circuit, /obj/item/circuitboard/supplycomp)) var/obj/machinery/computer/supplycomp/SC = B var/obj/item/circuitboard/supplycomp/C = circuit diff --git a/code/game/machinery/computer/card.dm b/code/game/machinery/computer/card.dm index 563fded5f1d..9d5b17e2d81 100644 --- a/code/game/machinery/computer/card.dm +++ b/code/game/machinery/computer/card.dm @@ -48,9 +48,7 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0) /datum/job/judge, /datum/job/blueshield, /datum/job/nanotrasenrep, - /datum/job/pilot, /datum/job/brigdoc, - /datum/job/mechanic, /datum/job/barber, /datum/job/chaplain ) diff --git a/code/game/machinery/computer/communications.dm b/code/game/machinery/computer/communications.dm index 46da580a0d1..71e6155056f 100644 --- a/code/game/machinery/computer/communications.dm +++ b/code/game/machinery/computer/communications.dm @@ -456,11 +456,11 @@ return if(seclevel2num(get_security_level()) >= SEC_LEVEL_RED) // There is a serious threat we gotta move no time to give them five minutes. + SSshuttle.emergency.canRecall = FALSE SSshuttle.emergency.request(null, 0.5, null, " Automatic Crew Transfer", 1) - SSshuttle.emergency.canRecall = FALSE else - SSshuttle.emergency.request(null, 1, null, " Automatic Crew Transfer", 0) SSshuttle.emergency.canRecall = FALSE + SSshuttle.emergency.request(null, 1, null, " Automatic Crew Transfer", 0) if(user) log_game("[key_name(user)] has called the shuttle.") message_admins("[key_name_admin(user)] has called the shuttle - [formatJumpTo(user)].", 1) diff --git a/code/game/machinery/computer/computer.dm b/code/game/machinery/computer/computer.dm index 1c394d261f6..95a9caae804 100644 --- a/code/game/machinery/computer/computer.dm +++ b/code/game/machinery/computer/computer.dm @@ -9,7 +9,7 @@ active_power_usage = 300 max_integrity = 200 integrity_failure = 100 - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 40, "acid" = 20) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 40, ACID = 20) var/obj/item/circuitboard/circuit = null //if circuit==null, computer can't disassembly var/processing = 0 var/icon_keyboard = "generic_key" @@ -119,10 +119,10 @@ switch(severity) if(1) if(prob(50)) - obj_break("energy") + obj_break(ENERGY) if(2) if(prob(10)) - obj_break("energy") + obj_break(ENERGY) /obj/machinery/computer/deconstruct(disassembled = TRUE, mob/user) on_deconstruction() diff --git a/code/game/machinery/computer/message.dm b/code/game/machinery/computer/message.dm index a7345522b25..d5d469ccdd1 100644 --- a/code/game/machinery/computer/message.dm +++ b/code/game/machinery/computer/message.dm @@ -34,6 +34,24 @@ light_color = LIGHT_COLOR_DARKGREEN +/obj/machinery/computer/message_monitor/Initialize() + ..() + return INITIALIZE_HINT_LATELOAD // Give the message server time to initialize + +/obj/machinery/computer/message_monitor/LateInitialize() + //If the monitor isn't linked to a server, and there's a server available, default it to the first one in the list. + if(!linkedServer && length(GLOB.message_servers)) + linkedServer = GLOB.message_servers[1] + RegisterSignal(linkedServer, COMSIG_PARENT_QDELETING, .proc/unlink_server) + +/obj/machinery/computer/message_monitor/proc/unlink_server() + SIGNAL_HANDLER + linkedServer = null + +/obj/machinery/computer/message_monitor/Destroy() + customrecepient = null + linkedServer = null + return ..() /obj/machinery/computer/message_monitor/screwdriver_act(mob/user, obj/item/I) if(emag) //Stops people from just unscrewing the monitor and putting it back to get the console working again. @@ -71,14 +89,6 @@ ..() -/obj/machinery/computer/message_monitor/Initialize() - ..() - //Is the server isn't linked to a server, and there's a server available, default it to the first one in the list. - if(!linkedServer) - if(GLOB.message_servers && GLOB.message_servers.len > 0) - linkedServer = GLOB.message_servers[1] - return - /obj/machinery/computer/message_monitor/attack_hand(mob/user as mob) if(..()) return @@ -490,18 +500,18 @@ /obj/item/paper/monitorkey - //..() name = "Monitor Decryption Key" var/obj/machinery/message_server/server = null -/obj/item/paper/monitorkey/New() +/obj/item/paper/monitorkey/Initialize(mapload) ..() - spawn(10) - if(GLOB.message_servers) - for(var/obj/machinery/message_server/server in GLOB.message_servers) - if(!isnull(server)) - if(!isnull(server.decryptkey)) - info = "

Daily Key Reset

\n\t
The new message monitor key is '[server.decryptkey]'.
Please keep this a secret and away from the clown.
If necessary, change the password to a more secure one." - info_links = info - overlays += "paper_words" - break + return INITIALIZE_HINT_LATELOAD + +/obj/item/paper/monitorkey/LateInitialize() + for(var/obj/machinery/message_server/server in GLOB.message_servers) + if(!isnull(server)) + if(!isnull(server.decryptkey)) + info = "

Daily Key Reset

\n\t
The new message monitor key is '[server.decryptkey]'.
Please keep this a secret and away from the clown.
If necessary, change the password to a more secure one." + info_links = info + overlays += "paper_words" + break diff --git a/code/game/machinery/computer/pod.dm b/code/game/machinery/computer/pod.dm index 322031d9997..c8748b052d8 100644 --- a/code/game/machinery/computer/pod.dm +++ b/code/game/machinery/computer/pod.dm @@ -261,7 +261,7 @@ icon_state = "oldcomp" icon_screen = "library" icon_keyboard = null - name = "DoorMex Control Computer" + name = "\improper DoorMex control computer" circuit = /obj/item/circuitboard/olddoor @@ -343,7 +343,7 @@ return /obj/structure/deathsquad_tele - name = "Mech Teleporter" + name = "mech teleporter" density = 0 anchored = 1 icon = 'icons/obj/stationobjs.dmi' diff --git a/code/game/machinery/computer/pod_tracking_console.dm b/code/game/machinery/computer/pod_tracking_console.dm deleted file mode 100644 index e8072d9e1d7..00000000000 --- a/code/game/machinery/computer/pod_tracking_console.dm +++ /dev/null @@ -1,41 +0,0 @@ -/obj/machinery/computer/podtracker - name = "pod tracking console" - icon = 'icons/obj/computer.dmi' - icon_keyboard = "tech_key" - icon_screen = "rdcomp" - light_color = LIGHT_COLOR_PURPLE - req_access = list(ACCESS_ROBOTICS) - circuit = /obj/item/circuitboard/pod_locater - -/obj/machinery/computer/podtracker/attack_ai(mob/user) - return attack_hand(user) - -/obj/machinery/computer/podtracker/attack_hand(mob/user) - ui_interact(user) - -/obj/machinery/computer/podtracker/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, "PodTracking", name, 400, 500, master_ui, state) - ui.open() - -/obj/machinery/computer/podtracker/ui_data(mob/user) - var/list/data = list() - var/list/pods = list() - for(var/obj/item/spacepod_equipment/misc/tracker/TR in GLOB.pod_trackers) - if(TR.my_atom) - var/obj/spacepod/my_pod = TR.my_atom - var/podname = capitalize(sanitize(my_pod.name)) - var/pilot = "None" - var/passengers = list() - if(my_pod.pilot) - pilot = my_pod.pilot - if(my_pod.passengers) - for(var/mob/M in my_pod.passengers) - passengers += M.name - var/passengers_text = english_list(passengers, "None") - - pods.Add(list(list("name" = podname, "podx" = my_pod.x, "pody" = my_pod.y, "podz" = my_pod.z, "pilot" = pilot, "passengers" = passengers_text))) - - data["pods"] = pods - return data diff --git a/code/game/machinery/constructable_frame.dm b/code/game/machinery/constructable_frame.dm index fbb6a0ad3c3..8de3cd73131 100644 --- a/code/game/machinery/constructable_frame.dm +++ b/code/game/machinery/constructable_frame.dm @@ -257,7 +257,21 @@ to destroy them and players will be able to make replacements. "Robco Tool Maker" = /obj/machinery/vending/engineering, "BODA" = /obj/machinery/vending/sovietsoda, "SecTech" = /obj/machinery/vending/security, - "CritterCare" = /obj/machinery/vending/crittercare) + "CritterCare" = /obj/machinery/vending/crittercare, + "SecDrobe" = /obj/machinery/vending/secdrobe, + "DetDrobe" = /obj/machinery/vending/detdrobe, + "MediDrobe" = /obj/machinery/vending/medidrobe, + "ViroDrobe" = /obj/machinery/vending/virodrobe, + "ChemDrobe" = /obj/machinery/vending/chemdrobe, + "GeneDrobe" = /obj/machinery/vending/genedrobe, + "SciDrobe" = /obj/machinery/vending/scidrobe, + "RoboDrobe" = /obj/machinery/vending/robodrobe, + "EngiDrobe" = /obj/machinery/vending/engidrobe, + "AtmosDrobe" = /obj/machinery/vending/atmosdrobe, + "CargoDrobe" = /obj/machinery/vending/cargodrobe, + "ChefDrobe" = /obj/machinery/vending/chefdrobe, + "BarDrobe" = /obj/machinery/vending/bardrobe, + "HydroDrobe" = /obj/machinery/vending/hydrodrobe) /obj/item/circuitboard/vendor/screwdriver_act(mob/user, obj/item/I) . = TRUE @@ -696,18 +710,6 @@ to destroy them and players will be able to make replacements. /obj/item/stock_parts/micro_laser = 1, /obj/item/stack/sheet/glass = 1) -/obj/item/circuitboard/podfab - board_name = "Spacepod Fabricator" - build_path = /obj/machinery/mecha_part_fabricator/spacepod - board_type = "machine" - origin_tech = "programming=2;engineering=2" - req_components = list( - /obj/item/stock_parts/matter_bin = 2, - /obj/item/stock_parts/manipulator = 1, - /obj/item/stock_parts/micro_laser = 1, - /obj/item/stack/sheet/glass = 1) - - /obj/item/circuitboard/clonepod board_name = "Clone Pod" build_path = /obj/machinery/clonepod diff --git a/code/game/machinery/cryopod.dm b/code/game/machinery/cryopod.dm index 0ac01cb4f58..76f0de8b269 100644 --- a/code/game/machinery/cryopod.dm +++ b/code/game/machinery/cryopod.dm @@ -248,7 +248,6 @@ /obj/item/reagent_containers/hypospray/CMO, /obj/item/clothing/accessory/medal/gold/captain, /obj/item/clothing/gloves/color/black/krav_maga/sec, - /obj/item/spacepod_key, /obj/item/nullrod, /obj/item/key, /obj/item/door_remote, diff --git a/code/game/machinery/defib_mount.dm b/code/game/machinery/defib_mount.dm index 5aac39d12dd..fe333ebf4ef 100644 --- a/code/game/machinery/defib_mount.dm +++ b/code/game/machinery/defib_mount.dm @@ -34,8 +34,8 @@ if(building) set_pixel_offsets_from_dir(30, -30, 30, -30) -/obj/machinery/defibrillator_mount/loaded/New() //loaded subtype for mapping use - ..() +/obj/machinery/defibrillator_mount/loaded/Initialize(mapload) //loaded subtype for mapping use + . = ..() defib = new/obj/item/defibrillator/loaded(src) update_icon() diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index 7b2890d97da..3b907a9046c 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -55,6 +55,7 @@ GLOBAL_LIST_EMPTY(airlock_overlays) damage_deflection = AIRLOCK_DAMAGE_DEFLECTION_N autoclose = TRUE explosion_block = 1 + hud_possible = list(DIAG_AIRLOCK_HUD) assemblytype = /obj/structure/door_assembly siemens_strength = 1 flags_2 = RAD_PROTECT_CONTENTS_2 | RAD_NO_CONTAMINATE_2 @@ -149,6 +150,10 @@ About the new airlock wires panel: if(damage_deflection == AIRLOCK_DAMAGE_DEFLECTION_N && security_level > AIRLOCK_SECURITY_METAL) damage_deflection = AIRLOCK_DAMAGE_DEFLECTION_R update_icon() + prepare_huds() + for(var/datum/atom_hud/data/diagnostic/diag_hud in GLOB.huds) + diag_hud.add_to_hud(src) + diag_hud_set_electrified() /obj/machinery/door/airlock/proc/update_other_id() for(var/obj/machinery/door/airlock/A in GLOB.airlocks) @@ -173,6 +178,8 @@ About the new airlock wires panel: if(SSradio) SSradio.remove_object(src, frequency) radio_connection = null + for(var/datum/atom_hud/data/diagnostic/diag_hud in GLOB.huds) + diag_hud.remove_from_hud(src) return ..() /obj/machinery/door/airlock/handle_atom_del(atom/A) @@ -292,6 +299,7 @@ About the new airlock wires panel: electrified_timer = addtimer(CALLBACK(src, .proc/electrify, 0), duration SECONDS, TIMER_UNIQUE | TIMER_STOPPABLE) if(feedback && message) to_chat(user, message) + diag_hud_set_electrified() // shock user with probability prb (if all connections & power are working) // returns 1 if shocked, 0 otherwise diff --git a/code/game/machinery/doors/airlock_types.dm b/code/game/machinery/doors/airlock_types.dm index e23aa154d6d..870b8355fe8 100644 --- a/code/game/machinery/doors/airlock_types.dm +++ b/code/game/machinery/doors/airlock_types.dm @@ -605,7 +605,7 @@ desc = "An airlock hastily corrupted by blood magic, it is unusually brittle in this state." normal_integrity = 150 damage_deflection = 5 - armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 0, ACID = 0) ////////////////////////////////// /* diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm index a2479c149a1..467b82b04a9 100644 --- a/code/game/machinery/doors/door.dm +++ b/code/game/machinery/doors/door.dm @@ -9,7 +9,7 @@ layer = OPEN_DOOR_LAYER power_channel = ENVIRON max_integrity = 350 - armor = list("melee" = 30, "bullet" = 30, "laser" = 20, "energy" = 20, "bomb" = 10, "bio" = 100, "rad" = 100, "fire" = 80, "acid" = 70) + armor = list(MELEE = 30, BULLET = 30, LASER = 20, ENERGY = 20, BOMB = 10, BIO = 100, RAD = 100, FIRE = 80, ACID = 70) flags = PREVENT_CLICK_UNDER damage_deflection = 10 var/closingLayer = CLOSED_DOOR_LAYER diff --git a/code/game/machinery/doors/firedoor.dm b/code/game/machinery/doors/firedoor.dm index b19888ba907..4729f925a4f 100644 --- a/code/game/machinery/doors/firedoor.dm +++ b/code/game/machinery/doors/firedoor.dm @@ -21,7 +21,7 @@ closingLayer = CLOSED_FIREDOOR_LAYER auto_close_time = 5 SECONDS assemblytype = /obj/structure/firelock_frame - armor = list("melee" = 30, "bullet" = 30, "laser" = 20, "energy" = 20, "bomb" = 10, "bio" = 100, "rad" = 100, "fire" = 95, "acid" = 70) + armor = list(MELEE = 30, BULLET = 30, LASER = 20, ENERGY = 20, BOMB = 10, BIO = 100, RAD = 100, FIRE = 95, ACID = 70) /// How long does opening by hand take, in deciseconds. var/manual_open_time = 5 SECONDS var/can_crush = TRUE diff --git a/code/game/machinery/doors/poddoor.dm b/code/game/machinery/doors/poddoor.dm index cebd507a9ca..6364993f488 100644 --- a/code/game/machinery/doors/poddoor.dm +++ b/code/game/machinery/doors/poddoor.dm @@ -9,7 +9,7 @@ heat_proof = TRUE safe = FALSE max_integrity = 600 - armor = list("melee" = 50, "bullet" = 100, "laser" = 100, "energy" = 100, "bomb" = 50, "bio" = 100, "rad" = 100, "fire" = 100, "acid" = 70) + armor = list(MELEE = 50, BULLET = 100, LASER = 100, ENERGY = 100, BOMB = 50, BIO = 100, RAD = 100, FIRE = 100, ACID = 70) resistance_flags = FIRE_PROOF damage_deflection = 70 var/id_tag = 1.0 diff --git a/code/game/machinery/doors/spacepod.dm b/code/game/machinery/doors/spacepod.dm deleted file mode 100644 index ae966070f22..00000000000 --- a/code/game/machinery/doors/spacepod.dm +++ /dev/null @@ -1,25 +0,0 @@ -/obj/structure/spacepoddoor - name = "podlock" - desc = "Why it no open!!!" - icon = 'icons/effects/beam.dmi' - icon_state = "n_beam" - density = 0 - anchored = 1 - var/id = 1.0 - -/obj/structure/spacepoddoor/Initialize() - ..() - air_update_turf(1) - -/obj/structure/spacepoddoor/CanAtmosPass(turf/T) - return 0 - -/obj/structure/spacepoddoor/Destroy() - var/turf/T = get_turf(src) - . = ..() - T.air_update_turf(TRUE) - -/obj/structure/spacepoddoor/CanPass(atom/movable/A, turf/T) - if(istype(A, /obj/spacepod)) - return ..() - else return 0 diff --git a/code/game/machinery/doors/windowdoor.dm b/code/game/machinery/doors/windowdoor.dm index 13cf62ecf3f..3289767d82c 100644 --- a/code/game/machinery/doors/windowdoor.dm +++ b/code/game/machinery/doors/windowdoor.dm @@ -12,7 +12,7 @@ dir = EAST max_integrity = 150 //If you change this, consider changing ../door/window/brigdoor/ max_integrity at the bottom of this .dm file integrity_failure = 0 - armor = list("melee" = 20, "bullet" = 50, "laser" = 50, "energy" = 50, "bomb" = 10, "bio" = 100, "rad" = 100, "fire" = 70, "acid" = 100) + armor = list(MELEE = 20, BULLET = 50, LASER = 50, ENERGY = 50, BOMB = 10, BIO = 100, RAD = 100, FIRE = 70, ACID = 100) var/obj/item/airlock_electronics/electronics var/base_state = "left" var/reinf = 0 diff --git a/code/game/machinery/hologram.dm b/code/game/machinery/hologram.dm index c4d5c4984b9..da287020804 100644 --- a/code/game/machinery/hologram.dm +++ b/code/game/machinery/hologram.dm @@ -43,7 +43,7 @@ GLOBAL_LIST_EMPTY(holopads) use_power = IDLE_POWER_USE idle_power_usage = 5 active_power_usage = 100 - layer = TURF_LAYER+0.1 //Preventing mice and drones from sneaking under them. + layer = HOLOPAD_LAYER //Preventing mice and drones from sneaking under them. plane = FLOOR_PLANE max_integrity = 300 armor = list(melee = 50, bullet = 20, laser = 20, energy = 20, bomb = 0, bio = 0, rad = 0, fire = 50, acid = 0) diff --git a/code/game/machinery/machinery.dm b/code/game/machinery/machinery.dm index 154f094d941..5ec606a0fd8 100644 --- a/code/game/machinery/machinery.dm +++ b/code/game/machinery/machinery.dm @@ -502,6 +502,7 @@ Class Procs: "You apply some [O] at [src]'s damaged areas.") else return ..() + /obj/machinery/proc/exchange_parts(mob/user, obj/item/storage/part_replacer/W) var/shouldplaysound = 0 if((flags & NODECONSTRUCT)) @@ -519,15 +520,23 @@ Class Procs: break for(var/obj/item/stock_parts/B in W.contents) if(istype(B, P) && istype(A, P)) - if(B.rating > A.rating) - W.remove_from_storage(B, src) - W.handle_item_insertion(A, 1) - component_parts -= A - component_parts += B - B.loc = null - to_chat(user, "[A.name] replaced with [B.name].") - shouldplaysound = 1 - break + //If it's cell - check: 1) Max charge is better? 2) Max charge same but current charge better? - If both NO -> next content + if(ispath(B.type, /obj/item/stock_parts/cell)) + var/obj/item/stock_parts/cell/tA = A + var/obj/item/stock_parts/cell/tB = B + if(!(tB.maxcharge > tA.maxcharge) && !((tB.maxcharge == tA.maxcharge) && (tB.charge > tA.charge))) + continue + //If it's not cell and not better -> next content + else if(B.rating <= A.rating) + continue + W.remove_from_storage(B, src) + W.handle_item_insertion(A, 1) + component_parts -= A + component_parts += B + B.loc = null + to_chat(user, "[A.name] replaced with [B.name].") + shouldplaysound = 1 + break RefreshParts() else to_chat(user, display_parts(user)) @@ -637,7 +646,7 @@ Class Procs: if(prob(85) && (zap_flags & ZAP_MACHINE_EXPLOSIVE) && !(resistance_flags & INDESTRUCTIBLE)) explosion(src, 1, 2, 4, flame_range = 2, adminlog = FALSE, smoke = FALSE) else if(zap_flags & ZAP_OBJ_DAMAGE) - take_damage(power * 0.0005, BURN, "energy") + take_damage(power * 0.0005, BURN, ENERGY) if(prob(40)) emp_act(EMP_LIGHT) power -= power * 0.0005 diff --git a/code/game/machinery/magnet.dm b/code/game/machinery/magnet.dm index 7bd89ac6dae..1a5a5ced2ec 100644 --- a/code/game/machinery/magnet.dm +++ b/code/game/machinery/magnet.dm @@ -11,7 +11,7 @@ name = "Electromagnetic Generator" desc = "A device that uses station power to create points of magnetic energy." level = 1 // underfloor - layer = 2.5 + layer = WIRE_LAYER+0.001 anchored = 1 use_power = IDLE_POWER_USE idle_power_usage = 50 @@ -32,7 +32,8 @@ /obj/machinery/magnetic_module/New() ..() var/turf/T = loc - hide(T.intact) + if(!T.transparent_floor) + hide(T.intact) center = T spawn(10) // must wait for map loading to finish diff --git a/code/game/machinery/navbeacon.dm b/code/game/machinery/navbeacon.dm index 48d87d0f330..f43e0033e23 100644 --- a/code/game/machinery/navbeacon.dm +++ b/code/game/machinery/navbeacon.dm @@ -8,7 +8,8 @@ name = "navigation beacon" desc = "A radio beacon used for bot navigation." level = 1 // underfloor - layer = 2.5 + layer = WIRE_LAYER + plane = FLOOR_PLANE anchored = 1 max_integrity = 500 armor = list(melee = 70, bullet = 70, laser = 70, energy = 70, bomb = 0, bio = 0, rad = 0, fire = 80, acid = 80) @@ -26,7 +27,8 @@ set_codes() var/turf/T = loc - hide(T.intact) + if(!T.transparent_floor) + hide(T.intact) if(!codes || !codes.len) log_runtime(EXCEPTION("Empty codes datum at ([x],[y],[z])"), src, list("codes_txt: '[codes_txt]'")) if("patrol" in codes) diff --git a/code/game/machinery/pipe/construction.dm b/code/game/machinery/pipe/construction.dm index ac61c2cccc9..98eaf1ceb2e 100644 --- a/code/game/machinery/pipe/construction.dm +++ b/code/game/machinery/pipe/construction.dm @@ -337,12 +337,18 @@ fixdir() var/pipe_dir = get_pipe_dir() + var/turf/T = get_turf(loc) for(var/obj/machinery/atmospherics/M in src.loc) if((M.initialize_directions & pipe_dir) && M.check_connect_types_construction(M,src)) // matches at least one direction on either type of pipe to_chat(user, "There is already a pipe of the same type at this location.") return 1 + if(pipe_type in list(PIPE_SUPPLY_STRAIGHT, PIPE_SUPPLY_BENT, PIPE_SCRUBBERS_STRAIGHT, PIPE_SCRUBBERS_BENT, PIPE_HE_STRAIGHT, PIPE_HE_BENT, PIPE_SUPPLY_MANIFOLD, PIPE_SCRUBBERS_MANIFOLD, PIPE_SUPPLY_MANIFOLD4W, PIPE_SCRUBBERS_MANIFOLD4W, PIPE_UVENT, PIPE_SUPPLY_CAP, PIPE_SCRUBBERS_CAP, PIPE_PASV_VENT, PIPE_DP_VENT, PIPE_PASSIVE_GATE)) + if(T.transparent_floor) //stops jank with transparent floors and pipes + to_chat(user, "You can only fix simple pipes and devices over glass floors!") + return 1 + switch(pipe_type) //What kind of heartless person thought of doing this? if(PIPE_SIMPLE_STRAIGHT, PIPE_SIMPLE_BENT) var/obj/machinery/atmospherics/pipe/simple/P = new( src.loc ) diff --git a/code/game/machinery/portable_turret.dm b/code/game/machinery/portable_turret.dm index 1ca2c21fd90..d7b31167944 100644 --- a/code/game/machinery/portable_turret.dm +++ b/code/game/machinery/portable_turret.dm @@ -516,7 +516,7 @@ GLOBAL_LIST_EMPTY(turret_icons) var/list/targets = list() //list of primary targets var/list/secondarytargets = list() //targets that are least important - var/static/things_to_scan = typecacheof(list(/obj/mecha, /obj/spacepod, /obj/vehicle, /mob/living)) + var/static/things_to_scan = typecacheof(list(/obj/mecha, /obj/vehicle, /mob/living)) for(var/A in typecache_filter_list(view(scan_range, src), things_to_scan)) var/atom/AA = A @@ -528,10 +528,6 @@ GLOBAL_LIST_EMPTY(turret_icons) var/obj/mecha/ME = A assess_and_assign(ME.occupant, targets, secondarytargets) - if(istype(A, /obj/spacepod)) - var/obj/spacepod/SP = A - assess_and_assign(SP.pilot, targets, secondarytargets) - if(istype(A, /obj/vehicle)) var/obj/vehicle/T = A if(T.has_buckled_mobs()) diff --git a/code/game/machinery/rechargestation.dm b/code/game/machinery/rechargestation.dm index 6fa1e79e764..e5670281f82 100644 --- a/code/game/machinery/rechargestation.dm +++ b/code/game/machinery/rechargestation.dm @@ -168,6 +168,9 @@ use_power = IDLE_POWER_USE return +/obj/machinery/recharge_station/force_eject_occupant(mob/target) + go_out() + /obj/machinery/recharge_station/verb/move_eject() set category = "Object" set src in oview(1) diff --git a/code/game/machinery/requests_console.dm b/code/game/machinery/requests_console.dm index 487ec245466..a0790a08cb1 100644 --- a/code/game/machinery/requests_console.dm +++ b/code/game/machinery/requests_console.dm @@ -20,7 +20,7 @@ #define RCS_SHIP_LOG 10 // View Shipping Label Log //Radio list -#define ENGI_ROLES list("Atmospherics","Mechanic","Engineering","Chief Engineer's Desk","Telecoms Admin") +#define ENGI_ROLES list("Atmospherics","Engineering","Chief Engineer's Desk","Telecoms Admin") #define SEC_ROLES list("Warden","Security","Brig Medbay","Head of Security's Desk") #define MISC_ROLES list("Bar","Chapel","Kitchen","Hydroponics","Janitorial") #define MED_ROLES list("Virology","Chief Medical Officer's Desk","Medbay") @@ -43,7 +43,7 @@ GLOBAL_LIST_EMPTY(allRequestConsoles) icon = 'icons/obj/terminals.dmi' icon_state = "req_comp0" max_integrity = 300 - armor = list("melee" = 70, "bullet" = 30, "laser" = 30, "energy" = 30, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 90, "acid" = 90) + armor = list(MELEE = 70, BULLET = 30, LASER = 30, ENERGY = 30, BOMB = 0, BIO = 0, RAD = 0, FIRE = 90, ACID = 90) var/department = "Unknown" //The list of all departments on the station (Determined from this variable on each unit) Set this to the same thing if you want several consoles in one department var/list/message_log = list() //List of all messages var/departmentType = 0 //Bitflag. Zero is reply-only. Map currently uses raw numbers instead of defines. diff --git a/code/game/machinery/spaceheater.dm b/code/game/machinery/spaceheater.dm index bf79f2f4fb3..a1cbe639451 100644 --- a/code/game/machinery/spaceheater.dm +++ b/code/game/machinery/spaceheater.dm @@ -6,7 +6,7 @@ name = "space heater" desc = "Made by Space Amish using traditional space techniques, this heater is guaranteed not to set the station on fire." max_integrity = 250 - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 100, "rad" = 100, "fire" = 80, "acid" = 10) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 100, RAD = 100, FIRE = 80, ACID = 10) var/obj/item/stock_parts/cell/cell var/on = 0 var/open = 0 diff --git a/code/game/machinery/suit_storage_unit.dm b/code/game/machinery/suit_storage_unit.dm index b732986dd51..0c6342592b3 100644 --- a/code/game/machinery/suit_storage_unit.dm +++ b/code/game/machinery/suit_storage_unit.dm @@ -89,6 +89,15 @@ /obj/machinery/suit_storage_unit/ce/secure secure = TRUE +/obj/machinery/suit_storage_unit/rd + name = "research director's suit storage unit" + suit_type = /obj/item/clothing/suit/space/hardsuit/rd + mask_type = /obj/item/clothing/mask/gas + req_access = list(ACCESS_RD) + +/obj/machinery/suit_storage_unit/rd/secure + secure = TRUE + /obj/machinery/suit_storage_unit/security name = "security suit storage unit" suit_type = /obj/item/clothing/suit/space/hardsuit/security @@ -98,15 +107,12 @@ /obj/machinery/suit_storage_unit/security/secure secure = TRUE -/obj/machinery/suit_storage_unit/security/pod_pilot - req_access = list(ACCESS_PILOT) - /obj/machinery/suit_storage_unit/security/hos name = "Head of Security's suit storage unit" suit_type = /obj/item/clothing/suit/space/hardsuit/security/hos mask_type = /obj/item/clothing/mask/gas/sechailer/hos req_access = list(ACCESS_HOS) - + /obj/machinery/suit_storage_unit/security/hos/secure secure = TRUE @@ -284,11 +290,6 @@ /obj/machinery/suit_storage_unit/Destroy() SStgui.close_uis(wires) - QDEL_NULL(suit) - QDEL_NULL(helmet) - QDEL_NULL(mask) - QDEL_NULL(boots) - QDEL_NULL(storage) QDEL_NULL(wires) return ..() @@ -321,6 +322,8 @@ if(shock(user, 100)) return if(!is_operational()) + if(user.a_intent != INTENT_HELP) + return ..() if(panel_open) to_chat(usr, "Close the maintenance panel first.") else diff --git a/code/game/machinery/tcomms/nttc.dm b/code/game/machinery/tcomms/nttc.dm index 6d4e8824b33..1af0c00eacb 100644 --- a/code/game/machinery/tcomms/nttc.dm +++ b/code/game/machinery/tcomms/nttc.dm @@ -41,7 +41,6 @@ "Engine Technician" = "engradio", "Life Support Specialist" = "engradio", "Maintenance Technician" = "engradio", - "Mechanic" = "engradio", "Station Engineer" = "engradio", // Central Command "Emergency Response Team Engineer" = "dsquadradio", // I know this says deathsquad but the class for responseteam is neon green. No. @@ -92,7 +91,6 @@ "Internal Affairs Agent" = "secradio", "Magistrate" = "secradio", "Security Officer" = "secradio", - "Security Pod Pilot" = "secradio", "Warden" = "secradio", // Supply "Quartermaster" = "supradio", diff --git a/code/game/machinery/teleporter.dm b/code/game/machinery/teleporter.dm index 7ba07c026dd..d3a8fef1432 100644 --- a/code/game/machinery/teleporter.dm +++ b/code/game/machinery/teleporter.dm @@ -41,10 +41,7 @@ /obj/machinery/computer/teleporter/proc/link_power_station() if(power_station) return - for(dir in list(NORTH,EAST,SOUTH,WEST)) - power_station = locate(/obj/machinery/teleport/station, get_step(src, dir)) - if(power_station) - break + power_station = locate(/obj/machinery/teleport/station, orange(1, src)) return power_station /obj/machinery/computer/teleporter/attackby(obj/item/I, mob/living/user, params) @@ -371,7 +368,7 @@ if(!is_teleport_allowed(z) && !admin_usage) to_chat(M, "You can't use this here.") return - if(power_station && power_station.engaged && !panel_open && !blockAI(M) && !istype(M, /obj/spacepod)) + if(power_station && power_station.engaged && !panel_open && !blockAI(M)) if(!teleport(M) && isliving(M)) // the isliving(M) is needed to avoid triggering errors if a spark bumps the telehub visible_message("[src] emits a loud buzz, as its teleport portal flickers and fails!") playsound(loc, 'sound/machines/buzz-sigh.ogg', 50, FALSE) diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm index 5d979ff2044..80058ef6510 100644 --- a/code/game/machinery/vending.dm +++ b/code/game/machinery/vending.dm @@ -122,7 +122,7 @@ for(var/datum/data/vending_product/R in (product_records + coin_records + hidden_records)) var/obj/item/I = R.product_path var/pp = replacetext(replacetext("[R.product_path]", "/obj/item/", ""), "/", "-") - imagelist[pp] = "[icon2base64(icon(initial(I.icon), initial(I.icon_state)))]" + imagelist[pp] = "[icon2base64(icon(initial(I.icon), initial(I.icon_state), SOUTH, 1))]" if(LAZYLEN(slogan_list)) // So not all machines speak at the exact same time. // The first time this machine says something will be at slogantime + this random value, @@ -1120,10 +1120,26 @@ ads_list = list("Probably not bad for you!","Don't believe the scientists!","It's good for you!","Don't quit, buy more!","Smoke!","Nicotine heaven.","Best cigarettes since 2150.","Award-winning cigs.") vend_delay = 34 icon_state = "cigs" - products = list(/obj/item/storage/fancy/cigarettes/cigpack_robust = 12, /obj/item/storage/fancy/cigarettes/cigpack_uplift = 6, /obj/item/storage/fancy/cigarettes/cigpack_random = 6, /obj/item/reagent_containers/food/pill/patch/nicotine = 10, /obj/item/storage/box/matches = 10,/obj/item/lighter/random = 4,/obj/item/storage/fancy/rollingpapers = 5) + products = list( + /obj/item/storage/fancy/cigarettes/cigpack_robust = 12, + /obj/item/storage/fancy/cigarettes/cigpack_uplift = 6, + /obj/item/storage/fancy/cigarettes/cigpack_midori = 6, + /obj/item/storage/fancy/cigarettes/cigpack_random = 6, + /obj/item/reagent_containers/food/pill/patch/nicotine = 10, + /obj/item/storage/box/matches = 10, + /obj/item/lighter/random = 4, + /obj/item/storage/fancy/rollingpapers = 5) contraband = list(/obj/item/lighter/zippo = 4) - premium = list(/obj/item/clothing/mask/cigarette/cigar/havana = 2, /obj/item/storage/fancy/cigarettes/cigpack_robustgold = 1) - prices = list(/obj/item/storage/fancy/cigarettes/cigpack_robust = 60, /obj/item/storage/fancy/cigarettes/cigpack_uplift = 80, /obj/item/storage/fancy/cigarettes/cigpack_random = 120, /obj/item/reagent_containers/food/pill/patch/nicotine = 70, /obj/item/storage/box/matches = 10,/obj/item/lighter/random = 60, /obj/item/storage/fancy/rollingpapers = 20) + premium = list(/obj/item/clothing/mask/cigarette/cigar/havana = 2, + /obj/item/storage/fancy/cigarettes/cigpack_robustgold = 1) + prices = list(/obj/item/storage/fancy/cigarettes/cigpack_robust = 60, + /obj/item/storage/fancy/cigarettes/cigpack_uplift = 80, + /obj/item/storage/fancy/cigarettes/cigpack_midori = 100, + /obj/item/storage/fancy/cigarettes/cigpack_random = 120, + /obj/item/reagent_containers/food/pill/patch/nicotine = 70, + /obj/item/storage/box/matches = 10, + /obj/item/lighter/random = 60, + /obj/item/storage/fancy/rollingpapers = 20) refill_canister = /obj/item/vending_refill/cigarette /obj/machinery/vending/cigarette/free @@ -1780,3 +1796,327 @@ /obj/machinery/vending/crittercare/free prices = list() +//Departmental clothing vendors + +/obj/machinery/vending/secdrobe + name = "\improper SecDrobe" + desc = "A vending machine for security and security-related clothing!" + icon_state = "secdrobe" + ads_list = list("Beat perps in style!", "It's red so you can't see the blood!", "You have the right to be fashionable!", "Now you can be the fashion police you always wanted to be!") + vend_reply = "Thank you for using the SecDrobe!" + products = list(/obj/item/clothing/under/rank/security = 4, + /obj/item/clothing/under/rank/security2 = 4, + /obj/item/clothing/under/rank/security/formal = 4, + /obj/item/clothing/under/rank/security/skirt = 4, + /obj/item/clothing/under/rank/security/corp = 4, + /obj/item/clothing/under/rank/dispatch = 4, + /obj/item/clothing/head/beret/sec = 4, + /obj/item/clothing/head/soft/sec = 4, + /obj/item/clothing/head/soft/sec/corp = 4, + /obj/item/clothing/suit/armor/secjacket = 4, + /obj/item/clothing/suit/jacket/secbomber = 2, + /obj/item/clothing/suit/hooded/wintercoat/security = 4, + /obj/item/clothing/gloves/color/black = 4, + /obj/item/clothing/accessory/armband/sec = 6, + /obj/item/clothing/shoes/laceup = 4, + /obj/item/clothing/shoes/jackboots = 4, + /obj/item/clothing/shoes/jackboots/jacksandals = 4, + /obj/item/storage/backpack/security = 2, + /obj/item/storage/backpack/satchel_sec = 2, + /obj/item/storage/backpack/duffel/security = 2) + premium = list(/obj/item/clothing/mask/gas/sechailer/swat = 2, + /obj/item/clothing/mask/balaclava = 1) + contraband = list(/obj/item/toy/figure/crew/secofficer = 1, + /obj/item/toy/figure/crew/hos = 1) + refill_canister = /obj/item/vending_refill/secdrobe + +/obj/machinery/vending/detdrobe + name = "\improper DetDrobe" + desc = "A machine for all your detective needs, as long as you only need clothes." + icon_state = "detdrobe" + ads_list = list("Apply your brilliant deductive methods in style!", "They already smell of cigarettes!") + vend_reply = "Thank you for using the DetDrobe!" + products = list(/obj/item/clothing/under/det = 2, + /obj/item/clothing/suit/storage/det_suit = 2, + /obj/item/clothing/suit/storage/det_suit/forensics/red = 1, + /obj/item/clothing/suit/storage/det_suit/forensics/blue = 1, + /obj/item/clothing/suit/armor/vest/det_suit = 1, + /obj/item/clothing/head/det_hat = 2, + /obj/item/clothing/accessory/waistcoat = 2, + /obj/item/clothing/shoes/laceup = 2, + /obj/item/clothing/shoes/brown = 2, + /obj/item/clothing/shoes/jackboots = 2, + /obj/item/clothing/head/fedora = 1, + /obj/item/clothing/head/fedora/brownfedora = 1, + /obj/item/clothing/head/fedora/whitefedora = 1, + /obj/item/clothing/gloves/color/black = 2, + /obj/item/clothing/gloves/color/latex = 2, + /obj/item/reagent_containers/food/drinks/flask/detflask = 2, + /obj/item/storage/fancy/cigarettes/dromedaryco = 5) + contraband = list(/obj/item/toy/figure/crew/detective = 1) + refill_canister = /obj/item/vending_refill/detdrobe + +/obj/machinery/vending/medidrobe + name = "\improper MediDrobe" + desc = "A vending machine rumoured to be capable of dispensing clothing for medical personnel." + icon_state = "medidrobe" + ads_list = list("Make those blood stains look fashionable!") + vend_reply = "Thank you for using the MediDrobe!" + products = list(/obj/item/clothing/under/rank/medical = 3, + /obj/item/clothing/under/rank/medical/skirt = 3, + /obj/item/clothing/under/rank/medical/blue = 3, + /obj/item/clothing/under/rank/medical/green = 3, + /obj/item/clothing/under/rank/medical/purple = 3, + /obj/item/clothing/under/rank/nurse = 3, + /obj/item/clothing/under/medigown = 3, + /obj/item/clothing/head/beret/med = 3, + /obj/item/clothing/head/surgery/blue = 3, + /obj/item/clothing/head/surgery/green = 3, + /obj/item/clothing/head/surgery/purple = 3, + /obj/item/clothing/head/nursehat = 3, + /obj/item/clothing/suit/hooded/wintercoat/medical = 3, + /obj/item/clothing/suit/storage/fr_jacket = 3, + /obj/item/clothing/suit/storage/labcoat = 3, + /obj/item/clothing/accessory/armband/med = 3, + /obj/item/clothing/accessory/armband/medgreen = 3, + /obj/item/clothing/shoes/laceup = 3, + /obj/item/clothing/shoes/white = 3, + /obj/item/clothing/shoes/sandal/white = 3, + /obj/item/storage/backpack/medic = 2, + /obj/item/storage/backpack/satchel_med = 2, + /obj/item/storage/backpack/duffel/medical = 2) + premium = list(/obj/item/clothing/gloves/color/latex/nitrile = 3) + contraband = list(/obj/item/toy/figure/crew/md = 1) + refill_canister = /obj/item/vending_refill/medidrobe + +/obj/machinery/vending/virodrobe + name = "\improper ViroDrobe" + desc = "An unsterilized machine for dispending virology related clothing." + icon_state = "virodrobe" + ads_list = list("Viruses getting you down? Nothing a change of clothes can't fix!", "Upgrade to sterilized clothing today!") + vend_reply = "Thank you for using the ViroDrobe!" + products = list(/obj/item/clothing/under/rank/virologist = 2, + /obj/item/clothing/under/rank/virologist/skirt = 2, + /obj/item/clothing/head/beret/med = 2, + /obj/item/clothing/suit/storage/labcoat/virologist = 2, + /obj/item/clothing/accessory/armband/med = 2, + /obj/item/clothing/mask/surgical = 2, + /obj/item/clothing/shoes/laceup = 2, + /obj/item/clothing/shoes/white = 2, + /obj/item/clothing/shoes/sandal/white = 2, + /obj/item/storage/backpack/virology = 2, + /obj/item/storage/backpack/satchel_vir = 2, + /obj/item/storage/backpack/duffel/virology = 2) + contraband = list(/obj/item/toy/figure/crew/virologist = 1) + refill_canister = /obj/item/vending_refill/virodrobe + +/obj/machinery/vending/chemdrobe + name = "\improper ChemDrobe" + desc = "A vending machine for dispensing chemistry related clothing." + icon_state = "chemdrobe" + ads_list = list("Our clothes are 0.5% more resistant to acid spills! Get yours now!") + vend_reply = "Thank you for using the ChemDrobe!" + products = list(/obj/item/clothing/under/rank/chemist = 2, + /obj/item/clothing/under/rank/chemist/skirt = 2, + /obj/item/clothing/head/beret/med = 2, + /obj/item/clothing/suit/storage/labcoat/chemist = 2, + /obj/item/clothing/accessory/armband/med = 2, + /obj/item/clothing/mask/gas = 2, + /obj/item/clothing/shoes/laceup = 2, + /obj/item/clothing/shoes/white = 2, + /obj/item/clothing/shoes/sandal/white = 2, + /obj/item/storage/bag/chemistry = 2, + /obj/item/storage/backpack/chemistry = 2, + /obj/item/storage/backpack/satchel_chem = 2, + /obj/item/storage/backpack/duffel/chemistry = 2) + contraband = list(/obj/item/toy/figure/crew/chemist = 1) + refill_canister = /obj/item/vending_refill/chemdrobe + + +/obj/machinery/vending/genedrobe + name = "GeneDrobe" + desc = "A machine for dispensing clothing related to genetics." + icon_state = "genedrobe" + ads_list = "Perfect for the mad scientist in you!" + vend_reply = "Thank you for using the GeneDrobe!" + + products = list(/obj/item/clothing/under/rank/geneticist = 3, + /obj/item/clothing/suit/storage/labcoat/genetics = 3, + /obj/item/clothing/shoes/laceup = 3, + /obj/item/clothing/shoes/white = 3, + /obj/item/clothing/shoes/sandal/white = 3, + /obj/item/storage/backpack/genetics = 2, + /obj/item/storage/backpack/satchel_gen = 2, + /obj/item/storage/backpack/duffel/genetics = 2,) + contraband = list(/obj/item/toy/figure/crew/geneticist = 1) + refill_canister = /obj/item/vending_refill/genedrobe + +/obj/machinery/vending/scidrobe + name = "SciDrobe" + desc = "A simple vending machine suitable to dispense well tailored science clothing. Endorsed by Space Cubans." + icon_state = "scidrobe" + ads_list = list("Longing for the smell of plasma burnt flesh?", "Buy your science clothing now!", "Made with 10% Auxetics, so you don't have to worry about losing your arm!") + vend_reply = "Thank you for using the SciDrobe!" + products = list(/obj/item/clothing/under/rank/scientist = 6, + /obj/item/clothing/under/rank/scientist/skirt = 3, + /obj/item/clothing/suit/hooded/wintercoat/science = 3, + /obj/item/clothing/suit/storage/labcoat/science = 3, + /obj/item/clothing/head/beret/sci = 3, + /obj/item/clothing/accessory/armband/science = 6, + /obj/item/clothing/shoes/laceup = 3, + /obj/item/clothing/shoes/white = 3, + /obj/item/clothing/shoes/sandal/white = 3, + /obj/item/storage/backpack/science = 2, + /obj/item/storage/backpack/satchel_tox = 2, + /obj/item/storage/backpack/duffel/science = 2,) + contraband = list(/obj/item/toy/figure/crew/rd = 1, + /obj/item/toy/figure/crew/scientist = 1) + refill_canister = /obj/item/vending_refill/scidrobe + +/obj/machinery/vending/robodrobe + name = "RoboDrobe" + desc = "A vending machine designed to dispense clothing known only to roboticists." + icon_state = "robodrobe" + ads_list = list("You turn me TRUE, use defines!","0110001101101100011011110111010001101000011001010111001101101000011001010111001001100101") + vend_reply = "Thank you for using the RoboDrobe!" + products = list(/obj/item/clothing/under/rank/roboticist = 3, + /obj/item/clothing/under/rank/roboticist/skirt = 3, + /obj/item/clothing/suit/storage/labcoat = 3, + /obj/item/clothing/head/soft/black = 3, + /obj/item/clothing/gloves/fingerless = 3, + /obj/item/clothing/shoes/laceup = 3, + /obj/item/clothing/shoes/white = 3, + /obj/item/clothing/shoes/black = 3) + contraband = list(/obj/item/toy/figure/crew/roboticist = 1) + refill_canister = /obj/item/vending_refill/robodrobe + +/obj/machinery/vending/engidrobe + name = "EngiDrobe" + desc = "A vending machine renowned for vending industrial grade clothing." + icon_state = "engidrobe" + ads_list = list("Guaranteed to protect your feet from industrial accidents!", "Afraid of radiation? Then wear yellow!") + vend_reply = "Thank you for using the SciDrobe!" + products = list(/obj/item/clothing/under/rank/engineer = 6, + /obj/item/clothing/under/rank/engineer/skirt = 3, + /obj/item/clothing/suit/hooded/wintercoat/engineering = 3, + /obj/item/clothing/suit/storage/hazardvest = 3, + /obj/item/clothing/head/beret/eng = 3, + /obj/item/clothing/head/hardhat = 2, + /obj/item/clothing/head/hardhat/white = 2, + /obj/item/clothing/head/hardhat/orange = 2, + /obj/item/clothing/head/hardhat/dblue = 2, + /obj/item/clothing/accessory/armband/engine = 6, + /obj/item/clothing/shoes/laceup = 3, + /obj/item/clothing/shoes/workboots = 3, + /obj/item/storage/backpack/industrial = 2, + /obj/item/storage/backpack/satchel_eng = 2, + /obj/item/storage/backpack/duffel/engineering = 2, + /obj/item/storage/belt/utility = 2) + premium = list(/obj/item/storage/belt/utility/chief = 2, + /obj/item/clothing/gloves/color/yellow = 2) + contraband = list(/obj/item/toy/figure/crew/ce = 1, + /obj/item/toy/figure/crew/engineer = 1) + refill_canister = /obj/item/vending_refill/engidrobe + +/obj/machinery/vending/atmosdrobe + name = "AtmosDrobe" + desc = "This relatively unknown vending machine delivers clothing for Atmospherics Technicians, an equally unknown job." + icon_state = "atmosdrobe" + ads_list = list("Guaranteed to protect your feet from atmospheric accidents!", "Get your inflammable clothing right here!") + vend_reply = "Thank you for using the AtmosDrobe!" + products = list(/obj/item/clothing/under/rank/atmospheric_technician = 6, + /obj/item/clothing/under/rank/atmospheric_technician/skirt = 3, + /obj/item/clothing/suit/hooded/wintercoat/engineering/atmos = 3, + /obj/item/clothing/suit/storage/hazardvest = 3, + /obj/item/clothing/head/beret/atmos = 3, + /obj/item/clothing/head/hardhat = 2, + /obj/item/clothing/head/hardhat/red = 2, + /obj/item/clothing/head/hardhat/white = 2, + /obj/item/clothing/head/hardhat/orange = 2, + /obj/item/clothing/head/hardhat/dblue = 2, + /obj/item/clothing/gloves/color/black = 3, + /obj/item/clothing/accessory/armband/engine = 3, + /obj/item/clothing/shoes/laceup = 3, + /obj/item/clothing/shoes/workboots = 3, + /obj/item/storage/backpack/industrial = 2, + /obj/item/storage/backpack/satchel_eng = 2, + /obj/item/storage/backpack/duffel/atmos = 2, + /obj/item/storage/belt/utility = 2) + premium = list(/obj/item/storage/belt/utility/chief = 2) + contraband = list(/obj/item/toy/figure/crew/atmos = 1) + refill_canister = /obj/item/vending_refill/atmosdrobe + +/obj/machinery/vending/cargodrobe + name = "CargoDrobe" + desc = "A highly advanced vending machine for buying cargo related clothing for free... most of the time." + icon_state = "cargodrobe" + ads_list = list("Upgraded Assistant Style! Pick yours today!", "These shorts are comfy and easy to wear, get yours now!") + vend_reply = "Thank you for using the CargoDrobe!" + products = list(/obj/item/clothing/under/rank/cargotech = 6, + /obj/item/clothing/under/rank/cargotech/skirt = 3, + /obj/item/clothing/suit/hooded/wintercoat/cargo = 3, + /obj/item/clothing/suit/storage/hazardvest = 3, + /obj/item/clothing/head/soft = 3, + /obj/item/clothing/head/hardhat/orange = 2, + /obj/item/clothing/gloves/fingerless = 6, + /obj/item/clothing/accessory/armband/cargo = 6, + /obj/item/clothing/shoes/black = 3, + /obj/item/clothing/shoes/workboots = 3) + contraband = list(/obj/item/toy/figure/crew/qm = 1, + /obj/item/toy/figure/crew/cargotech = 1) + refill_canister = /obj/item/vending_refill/cargodrobe + +/obj/machinery/vending/chefdrobe + name = "ChefDrobe" + desc = "This vending machine might not dispense meat, but it certainly dispenses chef related clothing." + icon_state = "chefdrobe" + ads_list = list("Our clothes are guaranteed to protect you from food splatters!", "Comfortable enough for a CQC practice!") + vend_reply = "Thank you for using the ChefDrobe!" + products = list(/obj/item/clothing/under/rank/chef = 2, + /obj/item/clothing/under/waiter = 2, + /obj/item/clothing/suit/chef = 2, + /obj/item/clothing/suit/chef/classic = 2, + /obj/item/clothing/head/chefhat = 2, + /obj/item/clothing/head/soft/mime = 2, + /obj/item/clothing/shoes/laceup = 2, + /obj/item/clothing/shoes/white = 2, + /obj/item/clothing/shoes/black = 2, + /obj/item/clothing/accessory/waistcoat = 2) + contraband = list(/obj/item/toy/figure/crew/chef = 1) + refill_canister = /obj/item/vending_refill/chefdrobe + +/obj/machinery/vending/bardrobe + name = "BarDrobe" + desc = "A stylish vendor to dispense the most stylish bar clothing!" + icon_state = "bardrobe" + ads_list = list("Guaranteed to prevent stains from spilled drinks!") + vend_reply = "Thank you for using the BarDrobe!" + products = list(/obj/item/clothing/under/rank/bartender = 2, + /obj/item/clothing/under/sl_suit = 2, + /obj/item/clothing/head/that = 2, + /obj/item/clothing/head/soft/black = 2, + /obj/item/clothing/suit/blacktrenchcoat = 2, + /obj/item/clothing/shoes/laceup = 2, + /obj/item/clothing/shoes/black = 2, + /obj/item/clothing/accessory/waistcoat = 2, + /obj/item/reagent_containers/glass/rag = 3) + contraband = list(/obj/item/toy/figure/crew/bartender = 1) + refill_canister = /obj/item/vending_refill/bardrobe + +/obj/machinery/vending/hydrodrobe + name = "HydroDrobe" + desc = "A machine with a catchy name. It dispenses botany related clothing and gear." + icon_state = "hydrobe" + ads_list = list("Do you love soil? Then buy our clothes!", "Get outfits to match your green thumb here!") + vend_reply = "Thank you for using the HydroDrobe!" + products = list(/obj/item/clothing/under/rank/hydroponics = 3, + /obj/item/reagent_containers/glass/bucket = 3, + /obj/item/clothing/suit/apron = 3, + /obj/item/clothing/suit/apron/overalls = 3, + /obj/item/clothing/mask/bandana/botany = 3, + /obj/item/clothing/accessory/armband/hydro = 3, + /obj/item/storage/backpack/botany = 2, + /obj/item/storage/backpack/satchel_hyd = 2, + /obj/item/storage/backpack/duffel/hydro = 2,) + contraband = list(/obj/item/toy/figure/crew/botanist = 1) + refill_canister = /obj/item/vending_refill/hydrodrobe diff --git a/code/game/machinery/wishgranter.dm b/code/game/machinery/wishgranter.dm index d762543f807..23f251efaff 100644 --- a/code/game/machinery/wishgranter.dm +++ b/code/game/machinery/wishgranter.dm @@ -42,11 +42,11 @@ user.mind.add_antag_datum(/datum/antagonist/wishgranter) to_chat(user, "You have a very bad feeling about this.") - + /obj/machinery/wish_granter/super name = "super wish granter" var/list/types = list() - + /obj/machinery/wish_granter/super/attack_hand(mob/living/carbon/user) . = ..() @@ -60,9 +60,9 @@ if(is_special_character(user) || jobban_isbanned(user, ROLE_TRAITOR) || jobban_isbanned(user, ROLE_SYNDICATE)) to_chat(user, "Something instinctual makes you pull away.") return TRUE - + to_chat(user, "Your touch makes the Wish Granter stir. Are you really sure you want to do this?") - + for(var/supname in GLOB.all_superheroes) types += supname @@ -85,6 +85,6 @@ playsound(src.loc, 'sound/effects/bamf.ogg', 50, 1) visible_message("The wishgranter fades into mist..") - add_attack_logs(null, user, "Became [GLOB.all_superheroes[wish]]") + add_attack_logs(user, user, "Became [GLOB.all_superheroes[wish]]") notify_ghosts("[GLOB.all_superheroes[wish]] has appeared in [get_area(user)].", source = user) qdel(src) diff --git a/code/game/mecha/combat/honker.dm b/code/game/mecha/combat/honker.dm index eb7bfad8942..4b04010cb08 100644 --- a/code/game/mecha/combat/honker.dm +++ b/code/game/mecha/combat/honker.dm @@ -7,7 +7,7 @@ max_integrity = 140 deflect_chance = 60 internal_damage_threshold = 60 - armor = list("melee" = -20, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100) + armor = list(MELEE = -20, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 100) max_temperature = 25000 infra_luminosity = 5 operation_req_access = list(ACCESS_CLOWN) diff --git a/code/game/mecha/combat/marauder.dm b/code/game/mecha/combat/marauder.dm index 4e719a32b9b..8575acaa9d2 100644 --- a/code/game/mecha/combat/marauder.dm +++ b/code/game/mecha/combat/marauder.dm @@ -6,7 +6,7 @@ step_in = 5 max_integrity = 500 deflect_chance = 25 - armor = list("melee" = 50, "bullet" = 55, "laser" = 40, "energy" = 30, "bomb" = 30, "bio" = 0, "rad" = 60, "fire" = 100, "acid" = 100) + armor = list(MELEE = 50, BULLET = 55, LASER = 40, ENERGY = 30, BOMB = 30, BIO = 0, RAD = 60, FIRE = 100, ACID = 100) max_temperature = 60000 resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF infra_luminosity = 3 diff --git a/code/game/mecha/combat/phazon.dm b/code/game/mecha/combat/phazon.dm index 2767af5416a..53fa849b83c 100644 --- a/code/game/mecha/combat/phazon.dm +++ b/code/game/mecha/combat/phazon.dm @@ -9,7 +9,7 @@ normal_step_energy_drain = 3 max_integrity = 200 deflect_chance = 30 - armor = list("melee" = 30, "bullet" = 30, "laser" = 30, "energy" = 30, "bomb" = 30, "bio" = 0, "rad" = 50, "fire" = 100, "acid" = 100) + armor = list(MELEE = 30, BULLET = 30, LASER = 30, ENERGY = 30, BOMB = 30, BIO = 0, RAD = 50, FIRE = 100, ACID = 100) max_temperature = 25000 infra_luminosity = 3 wreckage = /obj/structure/mecha_wreckage/phazon diff --git a/code/game/mecha/combat/reticence.dm b/code/game/mecha/combat/reticence.dm index 78b3329697b..a6f9cb9d0be 100644 --- a/code/game/mecha/combat/reticence.dm +++ b/code/game/mecha/combat/reticence.dm @@ -7,7 +7,7 @@ dir_in = 1 //Facing North. max_integrity = 150 deflect_chance = 30 - armor = list("melee" = 25, "bullet" = 20, "laser" = 30, "energy" = 15, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100) + armor = list(MELEE = 25, BULLET = 20, LASER = 30, ENERGY = 15, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 100) max_temperature = 15000 wreckage = /obj/structure/mecha_wreckage/reticence operation_req_access = list(ACCESS_MIME) diff --git a/code/game/mecha/equipment/tools/mining_tools.dm b/code/game/mecha/equipment/tools/mining_tools.dm index 2248c37f518..08cf60fb967 100644 --- a/code/game/mecha/equipment/tools/mining_tools.dm +++ b/code/game/mecha/equipment/tools/mining_tools.dm @@ -106,12 +106,10 @@ if(ishuman(target)) var/mob/living/carbon/human/H = target var/obj/item/organ/external/target_part = H.get_organ(ran_zone("chest")) - H.apply_damage(10, BRUTE, "chest", H.run_armor_check(target_part, "melee")) + H.apply_damage(10, BRUTE, "chest", H.run_armor_check(target_part, MELEE)) //blood splatters - blood_color = H.dna.species.blood_color - - new /obj/effect/temp_visual/dir_setting/bloodsplatter(H.drop_location(), splatter_dir, blood_color) + new /obj/effect/temp_visual/dir_setting/bloodsplatter(H.drop_location(), splatter_dir, H.dna.species.blood_color) //organs go everywhere if(target_part && prob(10 * drill_level)) diff --git a/code/game/mecha/equipment/tools/other_tools.dm b/code/game/mecha/equipment/tools/other_tools.dm index f1b9b291245..517698b14ca 100644 --- a/code/game/mecha/equipment/tools/other_tools.dm +++ b/code/game/mecha/equipment/tools/other_tools.dm @@ -1,4 +1,4 @@ -// Teleporter, Wormhole generator, Gravitational catapult, Armor booster modules, +// Teleporter, Gravitational catapult, Armor booster modules, // Repair droid, Tesla Energy relay, Generators ////////////////////////////////////////////// TELEPORTER /////////////////////////////////////////////// @@ -29,53 +29,6 @@ energy_drain = 1000 tele_precision = 1 - -////////////////////////////////////////////// WORMHOLE GENERATOR ////////////////////////////////////////// - -/obj/item/mecha_parts/mecha_equipment/wormhole_generator - name = "mounted wormhole generator" - desc = "An exosuit module that allows generating of small quasi-stable wormholes." - icon_state = "mecha_wholegen" - origin_tech = "bluespace=4;magnets=4;plasmatech=2" - equip_cooldown = 50 - energy_drain = 300 - range = MECHA_RANGED - -/obj/item/mecha_parts/mecha_equipment/wormhole_generator/action(atom/target) - if(!action_checks(target) || !is_teleport_allowed(loc.z)) - return - var/list/theareas = get_areas_in_range(100, chassis) - if(!theareas.len) - return - var/area/thearea = pick(theareas) - var/list/L = list() - var/turf/pos = get_turf(src) - for(var/turf/T in get_area_turfs(thearea.type)) - if(!T.density && pos.z == T.z) - var/clear = 1 - for(var/obj/O in T) - if(O.density) - clear = 0 - break - if(clear) - L+=T - if(!L.len) - return - var/turf/target_turf = pick(L) - if(!target_turf) - return - var/obj/effect/portal/P = new /obj/effect/portal(get_turf(target), target_turf) - P.icon = 'icons/obj/objects.dmi' - P.failchance = 0 - P.icon_state = "anom" - P.name = "wormhole" - message_admins("[key_name_admin(chassis.occupant, chassis.occupant.client)]([ADMIN_QUE(chassis.occupant,"?")]) ([ADMIN_FLW(chassis.occupant,"FLW")]) used a Wormhole Generator in ([loc.x],[loc.y],[loc.z] - JMP)",0,1) - log_game("[key_name(chassis.occupant)] used a Wormhole Generator in ([loc.x],[loc.y],[loc.z])") - src = null - spawn(rand(150,300)) - qdel(P) - return 1 - /////////////////////////////////////// GRAVITATIONAL CATAPULT /////////////////////////////////////////// /obj/item/mecha_parts/mecha_equipment/gravcatapult @@ -148,7 +101,7 @@ //////////////////////////// ARMOR BOOSTER MODULES ////////////////////////////////////////////////////////// /obj/item/mecha_parts/mecha_equipment/anticcw_armor_booster //what is that noise? A BAWWW from TK mutants. - name = "Armor Booster Module (Close Combat Weaponry)" + name = "armor booster module (Close combat weaponry)" desc = "Boosts exosuit armor against armed melee attacks. Requires energy to operate." icon_state = "mecha_abooster_ccw" origin_tech = "materials=4;combat=4" @@ -166,7 +119,7 @@ /obj/item/mecha_parts/mecha_equipment/antiproj_armor_booster - name = "Armor Booster Module (Ranged Weaponry)" + name = "armor booster module (Ranged weaponry)" desc = "Boosts exosuit armor against ranged attacks. Completely blocks taser shots. Requires energy to operate." icon_state = "mecha_abooster_proj" origin_tech = "materials=4;combat=3;engineering=3" @@ -186,7 +139,7 @@ ////////////////////////////////// REPAIR DROID ////////////////////////////////////////////////// /obj/item/mecha_parts/mecha_equipment/repair_droid - name = "Repair Droid" + name = "repair droid" desc = "Automated repair droid. Scans exosuit for damage and repairs it. Can fix almost all types of external or internal damage." icon_state = "repair_droid" origin_tech ="magnets=3;programming=3;engineering=4" @@ -243,18 +196,20 @@ set_ready_state(1) return var/h_boost = health_boost - var/repaired = 0 + var/repaired = FALSE if(chassis.internal_damage & MECHA_INT_SHORT_CIRCUIT) - h_boost *= -2 + h_boost = 0 + chassis.take_damage(2, BURN) //short circuiting droids do damage + repaired = TRUE else if(chassis.internal_damage && prob(15)) for(var/int_dam_flag in repairable_damage) if(chassis.internal_damage & int_dam_flag) chassis.clearInternalDamage(int_dam_flag) - repaired = 1 + repaired = TRUE break - if(h_boost<0 || chassis.obj_integrity < chassis.max_integrity) + if(chassis.obj_integrity < chassis.max_integrity && h_boost > 0) chassis.obj_integrity += min(h_boost, chassis.max_integrity-chassis.obj_integrity) - repaired = 1 + repaired = TRUE if(repaired) if(!chassis.use_power(energy_drain)) STOP_PROCESSING(SSobj, src) diff --git a/code/game/mecha/equipment/tools/work_tools.dm b/code/game/mecha/equipment/tools/work_tools.dm index 96ee16ac81e..5f1e452c45d 100644 --- a/code/game/mecha/equipment/tools/work_tools.dm +++ b/code/game/mecha/equipment/tools/work_tools.dm @@ -193,7 +193,7 @@ /obj/item/mecha_parts/mecha_equipment/rcd - name = "Mounted RCD" + name = "mounted RCD" desc = "An exosuit-mounted Rapid Construction Device. (Can be attached to: Any exosuit)" icon_state = "mecha_rcd" origin_tech = "materials=4;bluespace=3;magnets=4;powerstorage=4;engineering=4" diff --git a/code/game/mecha/equipment/weapons/weapons.dm b/code/game/mecha/equipment/weapons/weapons.dm index 351aba3905b..f5a2c003929 100644 --- a/code/game/mecha/equipment/weapons/weapons.dm +++ b/code/game/mecha/equipment/weapons/weapons.dm @@ -64,12 +64,12 @@ return /obj/item/mecha_parts/mecha_equipment/weapon/energy - name = "General Energy Weapon" + name = "general energy weapon" size = 2 /obj/item/mecha_parts/mecha_equipment/weapon/energy/laser equip_cooldown = 8 - name = "CH-PS \"Firedart\" Laser" + name = "\improper CH-PS \"Firedart\" Laser" icon_state = "mecha_laser" origin_tech = "magnets=3;combat=3;engineering=3" energy_drain = 30 @@ -78,7 +78,7 @@ harmful = TRUE /obj/item/mecha_parts/mecha_equipment/weapon/energy/laser/disabler - name = "CH-PD Disabler" + name = "\improper CH-PD Disabler" origin_tech = "combat=3" projectile = /obj/item/projectile/beam/disabler projectiles_per_shot = 2 @@ -87,7 +87,7 @@ /obj/item/mecha_parts/mecha_equipment/weapon/energy/laser/heavy equip_cooldown = 10 - name = "CH-LC \"Solaris\" Laser Cannon" + name = "\improper CH-LC \"Solaris\" Laser Cannon" icon_state = "mecha_laser" origin_tech = "magnets=4;combat=4;engineering=3" energy_drain = 60 @@ -105,7 +105,7 @@ /obj/item/mecha_parts/mecha_equipment/weapon/energy/tesla equip_cooldown = 35 - name = "P-X Tesla Cannon" + name = "\improper P-X Tesla Cannon" desc = "A weapon for combat exosuits. Fires bolts of electricity similar to the experimental tesla engine" icon_state = "mecha_laser" origin_tech = "materials=4;engineering=4;combat=6;magnets=6" @@ -116,7 +116,7 @@ /obj/item/mecha_parts/mecha_equipment/weapon/energy/xray equip_cooldown = 35 - name = "S-1 X-Ray Projector" + name = "\improper S-1 X-Ray Projector" desc = "A weapon for combat exosuits. Fires beams of X-Rays that pass through solid matter." icon_state = "mecha_laser" origin_tech = "materials=3;combat=5;magnets=2;syndicate=2" @@ -126,13 +126,13 @@ harmful = TRUE /obj/item/mecha_parts/mecha_equipment/weapon/energy/xray/triple - name = "X-XR Triple-barrel X-Ray Stream Projector" + name = "\improper X-XR Triple-barrel X-Ray Stream Projector" projectiles_per_shot = 3 projectile_delay = 1 /obj/item/mecha_parts/mecha_equipment/weapon/energy/immolator equip_cooldown = 35 - name = "ZFI Immolation Beam Gun" + name = "\improper ZFI Immolation Beam Gun" desc = "A weapon for combat exosuits. Fires beams of extreme heat that set targets on fire." icon_state = "mecha_laser" origin_tech = "materials=4;engineering=4;combat=6;magnets=6" @@ -143,7 +143,7 @@ /obj/item/mecha_parts/mecha_equipment/weapon/energy/pulse equip_cooldown = 30 - name = "eZ-13 mk2 Heavy pulse rifle" + name = "eZ-13 mk2 Heavy Pulse Rifle" icon_state = "mecha_pulse" energy_drain = 120 origin_tech = "materials=3;combat=6;powerstorage=4" @@ -165,14 +165,14 @@ if(istype(firer, /mob)) add_attack_logs(firer, M, "Mecha-shot with [src]") else - add_attack_logs(null, M, "Mecha-shot with [src]") + add_attack_logs(src, M, "Mecha-shot with [src] (no firer)") if(life <= 0) qdel(src) return /obj/item/mecha_parts/mecha_equipment/weapon/energy/taser - name = "PBT \"Pacifier\" Mounted Taser" + name = "\improper PBT \"Pacifier\" Mounted Taser" icon_state = "mecha_taser" origin_tech = "combat=3" energy_drain = 20 @@ -182,7 +182,7 @@ size = 1 /obj/item/mecha_parts/mecha_equipment/weapon/honker - name = "HoNkER BlAsT 5000" + name = "\improper HoNkER BlAsT 5000" icon_state = "mecha_honker" energy_drain = 200 equip_cooldown = 150 @@ -242,7 +242,7 @@ return /obj/item/mecha_parts/mecha_equipment/weapon/ballistic - name = "General Ballisic Weapon" + name = "general ballisic weapon" size = 2 /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/action_checks(atom/target) if(..()) @@ -272,7 +272,7 @@ return /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/carbine - name = "FNX-66 Carbine" + name = "\improper FNX-66 Carbine" icon_state = "mecha_carbine" origin_tech = "materials=4;combat=4" equip_cooldown = 5 @@ -298,7 +298,7 @@ return 0 /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/scattershot - name = "LBX AC 10 \"Scattershot\"" + name = "\improper LBX AC 10 \"Scattershot\"" icon_state = "mecha_scatter" origin_tech = "combat=4" equip_cooldown = 20 @@ -311,7 +311,7 @@ harmful = TRUE /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/lmg - name = "Ultra AC 2" + name = "\improper Ultra AC 2" icon_state = "mecha_uac2" origin_tech = "combat=4" equip_cooldown = 10 @@ -325,11 +325,11 @@ harmful = TRUE /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/lmg/dual - name = "XMG-9 Autocannon" + name = "\improper XMG-9 Autocannon" projectiles_per_shot = 6 /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack - name = "SRM-8 Light Missile Rack" + name = "\improper SRM-8 Light Missile Rack" icon_state = "mecha_missilerack" origin_tech = "combat=5;materials=4;engineering=4" projectile = /obj/item/missile @@ -361,7 +361,7 @@ return /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/heavy - name = "SRX-13 Heavy Missile Launcher" + name = "\improper SRX-13 Heavy Missile Launcher" heavy_missile = 1 /obj/item/missile @@ -383,7 +383,7 @@ return /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/flashbang - name = "SGL-6 Flashbang Launcher" + name = "\improper SGL-6 Flashbang Launcher" icon_state = "mecha_grenadelnchr" origin_tech = "combat=4;engineering=4" projectile = /obj/item/grenade/flashbang @@ -409,7 +409,7 @@ return /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/flashbang/clusterbang//Because I am a heartless bastard -Sieve - name = "SOB-3 Clusterbang Launcher" + name = "\improper SOB-3 Clusterbang Launcher" desc = "A weapon for combat exosuits. Launches primed clusterbangs. You monster." origin_tech = "combat=4;materials=4" projectiles = 3 @@ -425,7 +425,7 @@ return//Extra bit of security /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/banana_mortar - name = "Banana Mortar" + name = "banana mortar" icon_state = "mecha_bananamrtr" projectile = /obj/item/grown/bananapeel fire_sound = 'sound/items/bikehorn.ogg' @@ -455,7 +455,7 @@ /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/mousetrap_mortar - name = "Mousetrap Mortar" + name = "mousetrap mortar" icon_state = "mecha_mousetrapmrtr" projectile = /obj/item/assembly/mousetrap fire_sound = 'sound/items/bikehorn.ogg' @@ -485,7 +485,7 @@ return /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/bola - name = "PCMK-6 Bola Launcher" + name = "\improper PCMK-6 Bola Launcher" icon_state = "mecha_bola" origin_tech = "combat=4;engineering=4" projectile = /obj/item/restraints/legcuffs/bola diff --git a/code/game/mecha/mech_bay.dm b/code/game/mecha/mech_bay.dm index 01d3fe3e4a1..aff160b8af5 100644 --- a/code/game/mecha/mech_bay.dm +++ b/code/game/mecha/mech_bay.dm @@ -1,5 +1,5 @@ /turf/simulated/floor/mech_bay_recharge_floor - name = "Mech Bay Recharge Station" + name = "mech bay recharge station" icon = 'icons/mecha/mech_bay.dmi' icon_state = "recharge_floor" @@ -10,7 +10,7 @@ temperature = TCMB /obj/machinery/mech_bay_recharge_port - name = "Mech Bay Power Port" + name = "mech bay power port" density = 1 anchored = 1 dir = EAST diff --git a/code/game/mecha/mech_fabricator.dm b/code/game/mecha/mech_fabricator.dm index ac44916931e..b3375e2b0da 100644 --- a/code/game/mecha/mech_fabricator.dm +++ b/code/game/mecha/mech_fabricator.dm @@ -460,39 +460,6 @@ component_parts += new /obj/item/stack/sheet/glass(null) RefreshParts() -/** - * # Spacepod Fabricator - * - * Spacepod variant of [/obj/machinery/mecha_part_fabricator]. - */ -/obj/machinery/mecha_part_fabricator/spacepod - name = "spacepod fabricator" - allowed_design_types = PODFAB - req_access = list(ACCESS_MECHANIC) - -/obj/machinery/mecha_part_fabricator/spacepod/New() - ..() - QDEL_LIST(component_parts) - component_parts = list() - component_parts += new /obj/item/circuitboard/podfab(null) - component_parts += new /obj/item/stock_parts/matter_bin(null) - component_parts += new /obj/item/stock_parts/matter_bin(null) - component_parts += new /obj/item/stock_parts/manipulator(null) - component_parts += new /obj/item/stock_parts/micro_laser(null) - component_parts += new /obj/item/stack/sheet/glass(null) - RefreshParts() - -/obj/machinery/mecha_part_fabricator/spacepod/Initialize(mapload) - . = ..() - categories = list( - "Pod_Weaponry", - "Pod_Armor", - "Pod_Cargo", - "Pod_Parts", - "Pod_Frame", - "Misc" - ) - /** * # Robotic Fabricator * diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm index 00ddb73f497..a682c2f71de 100644 --- a/code/game/mecha/mecha.dm +++ b/code/game/mecha/mecha.dm @@ -481,9 +481,9 @@ if(. && obj_integrity > 0) spark_system.start() switch(damage_flag) - if("fire") + if(FIRE) check_for_internal_damage(list(MECHA_INT_FIRE,MECHA_INT_TEMP_CONTROL)) - if("melee") + if(MELEE) check_for_internal_damage(list(MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH,MECHA_INT_CONTROL_LOST)) else check_for_internal_damage(list(MECHA_INT_FIRE,MECHA_INT_TEMP_CONTROL,MECHA_INT_TANK_BREACH,MECHA_INT_CONTROL_LOST,MECHA_INT_SHORT_CIRCUIT)) @@ -497,13 +497,13 @@ return 0 var/booster_deflection_modifier = 1 var/booster_damage_modifier = 1 - if(damage_flag == "bullet" || damage_flag == "laser" || damage_flag == "energy") + if(damage_flag == BULLET || damage_flag == LASER || damage_flag == ENERGY) for(var/obj/item/mecha_parts/mecha_equipment/antiproj_armor_booster/B in equipment) if(B.projectile_react()) booster_deflection_modifier = B.deflect_coeff booster_damage_modifier = B.damage_coeff break - else if(damage_flag == "melee") + else if(damage_flag == MELEE) for(var/obj/item/mecha_parts/mecha_equipment/anticcw_armor_booster/B in equipment) if(B.attack_react()) booster_deflection_modifier *= B.deflect_coeff @@ -533,7 +533,7 @@ log_message("Attack by alien. Attacker - [user].", TRUE) add_attack_logs(user, OCCUPANT_LOGGING, "Alien attacked mech [src]") playsound(src.loc, 'sound/weapons/slash.ogg', 100, TRUE) - attack_generic(user, 15, BRUTE, "melee", 0) + attack_generic(user, 15, BRUTE, MELEE, 0) /obj/mecha/attack_animal(mob/living/simple_animal/user) log_message("Attack by simple animal. Attacker - [user].") @@ -551,7 +551,7 @@ animal_damage = min(animal_damage, 20*user.environment_smash) if(animal_damage) add_attack_logs(user, OCCUPANT_LOGGING, "Animal attacked mech [src]") - attack_generic(user, animal_damage, user.melee_damage_type, "melee", play_soundeffect) + attack_generic(user, animal_damage, user.melee_damage_type, MELEE, play_soundeffect) return TRUE /obj/mecha/hulk_damage() @@ -565,7 +565,7 @@ /obj/mecha/blob_act(obj/structure/blob/B) log_message("Attack by blob. Attacker - [B].") - take_damage(30, BRUTE, "melee", 0, get_dir(src, B)) + take_damage(30, BRUTE, MELEE, 0, get_dir(src, B)) /obj/mecha/attack_tk() return @@ -643,7 +643,7 @@ /obj/mecha/emp_act(severity) if(get_charge()) use_power((cell.charge/3)/(severity*2)) - take_damage(30 / severity, BURN, "energy", 1) + take_damage(30 / severity, BURN, ENERGY, 1) log_message("EMP detected", 1) check_for_internal_damage(list(MECHA_INT_FIRE, MECHA_INT_TEMP_CONTROL, MECHA_INT_CONTROL_LOST, MECHA_INT_SHORT_CIRCUIT), 1) diff --git a/code/game/mecha/mecha_construction_paths.dm b/code/game/mecha/mecha_construction_paths.dm index 13b5d6f1be2..dda33b8495d 100644 --- a/code/game/mecha/mecha_construction_paths.dm +++ b/code/game/mecha/mecha_construction_paths.dm @@ -767,13 +767,13 @@ /datum/construction/mecha/honker_chassis/spawn_result() ..("Honker") var/obj/item/mecha_parts/chassis/const_holder = holder - const_holder.construct = new /datum/construction/mecha/honker(const_holder) + const_holder.construct = new /datum/construction/reversible/mecha/honker(const_holder) const_holder.density = 1 qdel(src) return -/datum/construction/mecha/honker +/datum/construction/reversible/mecha/honker result = "/obj/mecha/combat/honker" steps = list(list("key"=/obj/item/bikehorn),//1 list("key"=/obj/item/clothing/shoes/clown_shoes),//2 @@ -788,10 +788,10 @@ list("key"=/obj/item/bikehorn),//11 ) -/datum/construction/mecha/honker/action(atom/used_atom,mob/user as mob) +/datum/construction/reversible/mecha/honker/action(atom/used_atom,mob/user as mob) return check_step(used_atom,user) -/datum/construction/mecha/honker/custom_action(step, atom/used_atom, mob/user) +/datum/construction/reversible/mecha/honker/custom_action(index, diff, atom/used_atom, mob/user) if(!..()) return 0 @@ -800,7 +800,7 @@ user.visible_message("HONK!") //TODO: better messages. - switch(step) + switch(index) if(10) user.visible_message("[user] installs the central control module into the [holder].", "You install the central control module into the [holder].") qdel(used_atom) @@ -839,12 +839,12 @@ /datum/construction/mecha/reticence_chassis/spawn_result() ..("Reticence") var/obj/item/mecha_parts/chassis/const_holder = holder - const_holder.construct = new /datum/construction/mecha/reticence(const_holder) + const_holder.construct = new /datum/construction/reversible/mecha/reticence(const_holder) const_holder.density = 1 qdel(src) return -/datum/construction/mecha/reticence +/datum/construction/reversible/mecha/reticence result = "/obj/mecha/combat/reticence" steps = list(list("key"=/obj/effect/dummy/mecha_emote_step),//1 list("key"=/obj/item/clothing/suit/suspenders),//2 @@ -857,10 +857,10 @@ list("key"=/obj/item/circuitboard/mecha/reticence/main),//9 ) -/datum/construction/mecha/reticence/action(atom/used_atom,mob/user) +/datum/construction/reversible/mecha/reticence/action(atom/used_atom,mob/user) return check_step(used_atom,user) -/datum/construction/mecha/reticence/custom_action(step, atom/used_atom, mob/user) +/datum/construction/reversible/mecha/reticence/custom_action(index, diff, atom/used_atom, mob/user) if(!..()) return 0 @@ -870,7 +870,7 @@ qdel(used_atom) //TODO: better messages. - switch(step) + switch(index) if(9) user.visible_message("[user] installs the central control module into the [holder].", "You install the central control module into the [holder].") qdel(used_atom) diff --git a/code/game/mecha/mecha_control_console.dm b/code/game/mecha/mecha_control_console.dm index 5b7ebd1c478..27006ae33cb 100644 --- a/code/game/mecha/mecha_control_console.dm +++ b/code/game/mecha/mecha_control_console.dm @@ -69,7 +69,7 @@ return TRUE /obj/item/mecha_parts/mecha_tracking - name = "Exosuit tracking beacon" + name = "exosuit tracking beacon" desc = "Device used to transmit exosuit data." icon = 'icons/obj/device.dmi' icon_state = "motion2" @@ -174,7 +174,7 @@ ai_beacon = TRUE /obj/item/storage/box/mechabeacons - name = "Exosuit Tracking Beacons" + name = "exosuit tracking beacons" /obj/item/storage/box/mechabeacons/New() ..() diff --git a/code/game/mecha/mecha_parts.dm b/code/game/mecha/mecha_parts.dm index 52b3a2263fa..d56ecae4290 100644 --- a/code/game/mecha/mecha_parts.dm +++ b/code/game/mecha/mecha_parts.dm @@ -12,7 +12,7 @@ /obj/item/mecha_parts/chassis - name="Mecha Chassis" + name = "mecha chassis" icon_state = "backbone" var/datum/construction/construct flags = CONDUCT @@ -31,83 +31,83 @@ /////////// Ripley /obj/item/mecha_parts/chassis/ripley - name = "Ripley Chassis" + name = "\improper Ripley chassis" /obj/item/mecha_parts/chassis/ripley/New() ..() construct = new /datum/construction/mecha/ripley_chassis(src) /obj/item/mecha_parts/part/ripley_torso - name="Ripley Torso" - desc="A torso part of Ripley APLU. Contains power unit, processing core and life support systems." + name = "\improper Ripley torso" + desc = "A torso part of Ripley APLU. Contains power unit, processing core and life support systems." icon_state = "ripley_harness" origin_tech = "programming=2;materials=2;biotech=2;engineering=2" /obj/item/mecha_parts/part/ripley_left_arm - name="Ripley Left Arm" - desc="A Ripley APLU left arm. Data and power sockets are compatible with most exosuit tools." + name = "\improper Ripley left arm" + desc = "A Ripley APLU left arm. Data and power sockets are compatible with most exosuit tools." icon_state = "ripley_l_arm" /obj/item/mecha_parts/part/ripley_right_arm - name="Ripley Right Arm" - desc="A Ripley APLU right arm. Data and power sockets are compatible with most exosuit tools." + name = "\improper Ripley right arm" + desc = "A Ripley APLU right arm. Data and power sockets are compatible with most exosuit tools." icon_state = "ripley_r_arm" /obj/item/mecha_parts/part/ripley_left_leg - name="Ripley Left Leg" - desc="A Ripley APLU left leg. Contains somewhat complex servodrives and balance maintaining systems." + name = "\improper Ripley left leg" + desc = "A Ripley APLU left leg. Contains somewhat complex servodrives and balance maintaining systems." icon_state = "ripley_l_leg" /obj/item/mecha_parts/part/ripley_right_leg - name="Ripley Right Leg" - desc="A Ripley APLU right leg. Contains somewhat complex servodrives and balance maintaining systems." + name = "\improper Ripley right leg" + desc = "A Ripley APLU right leg. Contains somewhat complex servodrives and balance maintaining systems." icon_state = "ripley_r_leg" ///////// Gygax /obj/item/mecha_parts/chassis/gygax - name = "Gygax Chassis" + name = "\improper Gygax chassis" /obj/item/mecha_parts/chassis/gygax/New() ..() construct = new /datum/construction/mecha/gygax_chassis(src) /obj/item/mecha_parts/part/gygax_torso - name="Gygax Torso" - desc="A torso part of Gygax. Contains power unit, processing core and life support systems. Has an additional equipment slot." + name = "\improper Gygax torso" + desc = "A torso part of Gygax. Contains power unit, processing core and life support systems. Has an additional equipment slot." icon_state = "gygax_harness" origin_tech = "programming=2;materials=4;biotech=3;engineering=3" /obj/item/mecha_parts/part/gygax_head - name="Gygax Head" - desc="A Gygax head. Houses advanced surveilance and targeting sensors." + name = "\improper Gygax head" + desc = "A Gygax head. Houses advanced surveilance and targeting sensors." icon_state = "gygax_head" origin_tech = "programming=2;materials=4;magnets=3;engineering=3" /obj/item/mecha_parts/part/gygax_left_arm - name="Gygax Left Arm" - desc="A Gygax left arm. Data and power sockets are compatible with most exosuit tools and weapons." + name = "\improper Gygax left arm" + desc = "A Gygax left arm. Data and power sockets are compatible with most exosuit tools and weapons." icon_state = "gygax_l_arm" origin_tech = "programming=2;materials=4;engineering=3" /obj/item/mecha_parts/part/gygax_right_arm - name="Gygax Right Arm" - desc="A Gygax right arm. Data and power sockets are compatible with most exosuit tools and weapons." + name = "\improper Gygax right arm" + desc = "A Gygax right arm. Data and power sockets are compatible with most exosuit tools and weapons." icon_state = "gygax_r_arm" origin_tech = "programming=2;materials=4;engineering=3" /obj/item/mecha_parts/part/gygax_left_leg - name="Gygax Left Leg" + name = "\improper Gygax left leg" icon_state = "gygax_l_leg" origin_tech = "programming=2;materials=4;engineering=3" /obj/item/mecha_parts/part/gygax_right_leg - name="Gygax Right Leg" + name = "\improper Gygax right leg" icon_state = "gygax_r_leg" origin_tech = "programming=2;materials=4;engineering=3" /obj/item/mecha_parts/part/gygax_armour - name="Gygax Armour Plates" + name = "\improper Gygax armour plates" icon_state = "gygax_armour" origin_tech = "materials=6;combat=4;engineering=4" @@ -115,44 +115,44 @@ //////////// Durand /obj/item/mecha_parts/chassis/durand - name = "Durand Chassis" + name = "\improper Durand chassis" /obj/item/mecha_parts/chassis/durand/New() ..() construct = new /datum/construction/mecha/durand_chassis(src) /obj/item/mecha_parts/part/durand_torso - name="Durand Torso" + name = "\improper Durand torso" icon_state = "durand_harness" origin_tech = "programming=2;materials=3;biotech=3;engineering=3" /obj/item/mecha_parts/part/durand_head - name="Durand Head" + name = "\improper Durand head" icon_state = "durand_head" origin_tech = "programming=2;materials=3;magnets=3;engineering=3" /obj/item/mecha_parts/part/durand_left_arm - name="Durand Left Arm" + name = "\improper Durand left arm" icon_state = "durand_l_arm" origin_tech = "programming=2;materials=3;engineering=3" /obj/item/mecha_parts/part/durand_right_arm - name="Durand Right Arm" + name = "\improper Durand right arm" icon_state = "durand_r_arm" origin_tech = "programming=2;materials=3;engineering=3" /obj/item/mecha_parts/part/durand_left_leg - name="Durand Left Leg" + name = "\improper Durand left leg" icon_state = "durand_l_leg" origin_tech = "programming=2;materials=3;engineering=3" /obj/item/mecha_parts/part/durand_right_leg - name="Durand Right Leg" + name = "\improper Durand right leg" icon_state = "durand_r_leg" origin_tech = "programming=2;materials=3;engineering=3" /obj/item/mecha_parts/part/durand_armor - name="Durand Armour Plates" + name = "\improper Durand armour plates" icon_state = "durand_armor" origin_tech = "materials=5;combat=4;engineering=4" @@ -161,7 +161,7 @@ ////////// Firefighter /obj/item/mecha_parts/chassis/firefighter - name = "Firefighter Chassis" + name = "\improper Firefighter chassis" /obj/item/mecha_parts/chassis/firefighter/New() ..() @@ -170,41 +170,41 @@ ////////// HONK /obj/item/mecha_parts/chassis/honker - name = "H.O.N.K Chassis" + name = "\improper H.O.N.K chassis" /obj/item/mecha_parts/chassis/honker/New() ..() construct = new /datum/construction/mecha/honker_chassis(src) /obj/item/mecha_parts/part/honker_torso - name="H.O.N.K Torso" + name = "\improper H.O.N.K torso" icon_state = "honker_harness" /obj/item/mecha_parts/part/honker_head - name="H.O.N.K Head" + name = "\improper H.O.N.K head" icon_state = "honker_head" /obj/item/mecha_parts/part/honker_left_arm - name="H.O.N.K Left Arm" + name = "\improper H.O.N.K left arm" icon_state = "honker_l_arm" /obj/item/mecha_parts/part/honker_right_arm - name="H.O.N.K Right Arm" + name = "\improper H.O.N.K right arm" icon_state = "honker_r_arm" /obj/item/mecha_parts/part/honker_left_leg - name="H.O.N.K Left Leg" + name = "\improper H.O.N.K left leg" icon_state = "honker_l_leg" /obj/item/mecha_parts/part/honker_right_leg - name="H.O.N.K Right Leg" + name = "\improper H.O.N.K right leg" icon_state = "honker_r_leg" ////////// Reticence /obj/item/mecha_parts/chassis/reticence - name = "Reticence Chassis" + name = "\improper Reticence chassis" /obj/item/mecha_parts/chassis/reticence/New() ..() @@ -218,42 +218,42 @@ emote = e /obj/item/mecha_parts/chassis/reticence/hear_message(mob/living/M, msg) - if(!istype(M) || !istype(construct, /datum/construction/mecha/reticence)) + if(!istype(M) || !istype(construct, /datum/construction/reversible/mecha/reticence)) return // is the current step the dummy emote object? var/list/steps = construct.steps - if(steps[steps.len]["key"] == /obj/effect/dummy/mecha_emote_step) + if(steps[construct.index]["key"] == /obj/effect/dummy/mecha_emote_step) construct.action(new /obj/effect/dummy/mecha_emote_step(msg), M) /obj/item/mecha_parts/part/reticence_torso - name = "Reticence Torso" + name = "\improper Reticence torso" icon_state = "reticence_harness" /obj/item/mecha_parts/part/reticence_head - name = "Reticence Head" + name = "\improper Reticence head" icon_state = "reticence_head" /obj/item/mecha_parts/part/reticence_left_arm - name = "Reticence Left Arm" + name = "\improper Reticence left arm" icon_state = "reticence_l_arm" /obj/item/mecha_parts/part/reticence_right_arm - name = "Reticence Right Arm" + name = "\improper Reticence right arm" icon_state = "reticence_r_arm" /obj/item/mecha_parts/part/reticence_left_leg - name = "Reticence Left Leg" + name = "\improper Reticence left leg" icon_state = "reticence_l_leg" /obj/item/mecha_parts/part/reticence_right_leg - name = "Reticence Right Leg" + name = "\improper Reticence right leg" icon_state = "reticence_r_leg" ////////// Phazon /obj/item/mecha_parts/chassis/phazon - name = "Phazon Chassis" + name = "\improper Phazon chassis" /obj/item/mecha_parts/chassis/phazon/New() ..() @@ -265,81 +265,81 @@ to_chat(user, "The anomaly core socket only accepts bluespace anomaly cores!") /obj/item/mecha_parts/part/phazon_torso - name="Phazon Torso" + name = "\improper Phazon torso" icon_state = "phazon_harness" origin_tech = "programming=4;materials=4;bluespace=4;plasmatech=5" /obj/item/mecha_parts/part/phazon_head - name="Phazon Head" + name = "\improper Phazon head" icon_state = "phazon_head" origin_tech = "programming=3;materials=3;magnets=3" /obj/item/mecha_parts/part/phazon_left_arm - name="Phazon Left Arm" + name = "\improper Phazon left arm" icon_state = "phazon_l_arm" origin_tech = "materials=3;bluespace=3;magnets=3" /obj/item/mecha_parts/part/phazon_right_arm - name="Phazon Right Arm" + name = "\improper Phazon right arm" icon_state = "phazon_r_arm" origin_tech = "materials=3;bluespace=3;magnets=3" /obj/item/mecha_parts/part/phazon_left_leg - name="Phazon Left Leg" + name = "\improper Phazon left leg" icon_state = "phazon_l_leg" origin_tech = "materials=3;bluespace=3;magnets=3" /obj/item/mecha_parts/part/phazon_right_leg - name="Phazon Right Leg" + name = "\improper Phazon right leg" icon_state = "phazon_r_leg" origin_tech = "materials=3;bluespace=3;magnets=3" /obj/item/mecha_parts/part/phazon_armor - name="Phazon armor" - desc="Phazon armor plates. They are layered with plasma to protect the pilot from the stress of phasing and have unusual properties." + name = "\improper Phazon armor" + desc = "Phazon armor plates. They are layered with plasma to protect the pilot from the stress of phasing and have unusual properties." icon_state = "phazon_armor" origin_tech = "materials=4;bluespace=4;plasmatech=5" ///////// Odysseus /obj/item/mecha_parts/chassis/odysseus - name = "Odysseus Chassis" + name = "\improper Odysseus Chassis" /obj/item/mecha_parts/chassis/odysseus/New() ..() construct = new /datum/construction/mecha/odysseus_chassis(src) /obj/item/mecha_parts/part/odysseus_head - name="Odysseus Head" + name = "\improper Odysseus head" icon_state = "odysseus_head" /obj/item/mecha_parts/part/odysseus_torso - name="Odysseus Torso" - desc="A torso part of Odysseus. Contains power unit, processing core and life support systems." + name = "\improper Odysseus torso" + desc = "A torso part of Odysseus. Contains power unit, processing core and life support systems." icon_state = "odysseus_torso" origin_tech = "programming=2;materials=2;biotech=2;engineering=2" /obj/item/mecha_parts/part/odysseus_left_arm - name="Odysseus Left Arm" - desc="An Odysseus left arm. Data and power sockets are compatible with most exosuit tools." + name = "\improper Odysseus left arm" + desc = "An Odysseus left arm. Data and power sockets are compatible with most exosuit tools." icon_state = "odysseus_l_arm" /obj/item/mecha_parts/part/odysseus_right_arm - name="Odysseus Right Arm" - desc="An Odysseus right arm. Data and power sockets are compatible with most exosuit tools." + name = "\improper Odysseus right arm" + desc = "An Odysseus right arm. Data and power sockets are compatible with most exosuit tools." icon_state = "odysseus_r_arm" /obj/item/mecha_parts/part/odysseus_left_leg - name="Odysseus Left Leg" - desc="An Odysseus left leg. Contains somewhat complex servodrives and balance maintaining systems." + name = "\improper Odysseus left leg" + desc = "An Odysseus left leg. Contains somewhat complex servodrives and balance maintaining systems." icon_state = "odysseus_l_leg" /obj/item/mecha_parts/part/odysseus_right_leg - name="Odysseus Right Leg" - desc="A Odysseus right leg. Contains somewhat complex servodrives and balance maintaining systems." + name = "\improper Odysseus right leg" + desc = "A Odysseus right leg. Contains somewhat complex servodrives and balance maintaining systems." icon_state = "odysseus_r_leg" /*/obj/item/mecha_parts/part/odysseus_armour - name="Odysseus Carapace" + name = "\improper Odysseus carapace" icon_state = "odysseus_armour" origin_tech = "materials=3;engineering=3")*/ diff --git a/code/game/mecha/paintkits.dm b/code/game/mecha/paintkits.dm index aba926c6814..1aef8ebf061 100644 --- a/code/game/mecha/paintkits.dm +++ b/code/game/mecha/paintkits.dm @@ -11,7 +11,7 @@ var/list/allowed_types = list() //Types of mech that the kit will work on. /obj/item/paintkit/titansfist - name = "APLU \"Ripley\" customisation kit" + name = "\improper APLU \"Ripley\" customisation kit" desc = "A kit containing all the needed tools and parts to turn an APLU \"Ripley\" into a Titan's Fist worker mech." icon_state = "paintkit_2" @@ -21,10 +21,8 @@ allowed_types = list("ripley","firefighter") /obj/item/paintkit/mercenary - name = "Mercenary APLU \"Ripley\" kit" + name = "\improper mercenary APLU \"Ripley\" kit" desc = "A kit containing all the needed tools and parts to turn an APLU \"Ripley\" into an old Mercenaries APLU." - - new_name = "APLU \"Strike the Earth!\"" new_desc = "Looks like an over worked, under maintained Ripley with some horrific damage." new_icon = "earth" diff --git a/code/game/mecha/working/ripley.dm b/code/game/mecha/working/ripley.dm index 96f045ea9d3..34934baea86 100644 --- a/code/game/mecha/working/ripley.dm +++ b/code/game/mecha/working/ripley.dm @@ -10,7 +10,7 @@ max_integrity = 200 lights_power = 7 deflect_chance = 15 - armor = list("melee" = 40, "bullet" = 20, "laser" = 10, "energy" = 20, "bomb" = 40, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100) + armor = list(MELEE = 40, BULLET = 20, LASER = 10, ENERGY = 20, BOMB = 40, BIO = 0, RAD = 0, FIRE = 100, ACID = 100) max_equip = 6 wreckage = /obj/structure/mecha_wreckage/ripley var/list/cargo = new @@ -70,7 +70,7 @@ max_integrity = 250 resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF lights_power = 7 - armor = list("melee" = 40, "bullet" = 30, "laser" = 30, "energy" = 30, "bomb" = 60, "bio" = 0, "rad" = 70, "fire" = 100, "acid" = 100) + armor = list(MELEE = 40, BULLET = 30, LASER = 30, ENERGY = 30, BOMB = 60, BIO = 0, RAD = 70, FIRE = 100, ACID = 100) max_equip = 5 // More armor, less tools wreckage = /obj/structure/mecha_wreckage/ripley/firefighter @@ -85,7 +85,7 @@ max_temperature = 65000 max_integrity = 300 lights_power = 7 - armor = list("melee" = 40, "bullet" = 40, "laser" = 40, "energy" = 0, "bomb" = 70, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100) + armor = list(MELEE = 40, BULLET = 40, LASER = 40, ENERGY = 0, BOMB = 70, BIO = 0, RAD = 0, FIRE = 100, ACID = 100) wreckage = /obj/structure/mecha_wreckage/ripley/deathripley step_energy_drain = 0 normal_step_energy_drain = 0 diff --git a/code/game/objects/effects/decals/Cleanable/humans.dm b/code/game/objects/effects/decals/Cleanable/humans.dm index f88a3cb630d..29ef7eb3ad5 100644 --- a/code/game/objects/effects/decals/Cleanable/humans.dm +++ b/code/game/objects/effects/decals/Cleanable/humans.dm @@ -84,7 +84,7 @@ GLOBAL_LIST_EMPTY(splatter_cache) /obj/effect/decal/cleanable/blood/drip name = "drips of blood" - desc = "It's red." + desc = "A drop of blood in an ocean of mess." gender = PLURAL icon = 'icons/effects/drip.dmi' icon_state = "1" diff --git a/code/game/objects/effects/effect_system/effects_other.dm b/code/game/objects/effects/effect_system/effects_other.dm index bb33bfe15fa..241234456a9 100644 --- a/code/game/objects/effects/effect_system/effects_other.dm +++ b/code/game/objects/effects/effect_system/effects_other.dm @@ -1,4 +1,4 @@ -/// Ion trails for spacepods and other space-flying things +/// Ion trails for jetpacks, ion thrusters and other space-flying things /obj/effect/particle_effect/ion_trails name = "ion trails" icon_state = "ion_trails" diff --git a/code/game/objects/effects/spawners/lootdrop.dm b/code/game/objects/effects/spawners/lootdrop.dm index c4af2849947..a5c01d63ae4 100644 --- a/code/game/objects/effects/spawners/lootdrop.dm +++ b/code/game/objects/effects/spawners/lootdrop.dm @@ -144,6 +144,8 @@ /obj/item/stamp/chameleon = 2, /obj/item/clothing/shoes/chameleon/noslip = 5, /obj/item/clothing/mask/chameleon = 2, + /obj/item/clothing/mask/gas/voice_modulator = 2, + /obj/item/clothing/mask/gas/voice_modulator/chameleon = 2, /obj/item/dnascrambler = 1, /obj/item/storage/backpack/satchel_flat = 2, /obj/item/storage/toolbox/syndicate = 2, @@ -156,7 +158,7 @@ /obj/item/storage/secure/briefcase/syndie = 2, /obj/item/storage/fancy/cigarettes/cigpack_syndicate = 2, /obj/item/storage/pill_bottle/fakedeath = 2, - "" = 68 + "" = 64 // Reduce this number if you add things above. Make sure all the numbers in the list add to 100 EXACTLY ) /obj/effect/spawner/lootdrop/crate_spawner // for ruins diff --git a/code/game/objects/effects/spawners/random_spawners.dm b/code/game/objects/effects/spawners/random_spawners.dm index acd1e54eef7..64708c0ff25 100644 --- a/code/game/objects/effects/spawners/random_spawners.dm +++ b/code/game/objects/effects/spawners/random_spawners.dm @@ -3,8 +3,7 @@ icon = 'icons/mob/screen_gen.dmi' icon_state = "x2" var/list/result = list( - /turf/simulated/floor/plasteel = 1, - /turf/simulated/floor/plating = 1, + /datum/nothing = 1, /obj/effect/decal/cleanable/blood/splatter = 1, /obj/effect/decal/cleanable/blood/oil = 1, /obj/effect/decal/cleanable/fungus = 1) @@ -37,25 +36,25 @@ /obj/effect/spawner/random_spawners/blood_maybe name = "blood maybe" result = list( - /turf/simulated/floor/plating = 20, + /datum/nothing = 20, /obj/effect/decal/cleanable/blood/splatter = 1) /obj/effect/spawner/random_spawners/blood_often name = "blood often" result = list( - /turf/simulated/floor/plating = 5, + /datum/nothing = 5, /obj/effect/decal/cleanable/blood/splatter = 1) /obj/effect/spawner/random_spawners/oil_maybe name = "oil maybe" result = list( - /turf/simulated/floor/plating = 20, + /datum/nothing = 20, /obj/effect/decal/cleanable/blood/oil = 1) /obj/effect/spawner/random_spawners/oil_maybe name = "oil often" result = list( - /turf/simulated/floor/plating = 5, + /datum/nothing = 5, /obj/effect/decal/cleanable/blood/oil = 1) /obj/effect/spawner/random_spawners/wall_rusted_probably @@ -73,37 +72,37 @@ /obj/effect/spawner/random_spawners/cobweb_left_frequent name = "cobweb left frequent" result = list( - /turf/simulated/floor/plating = 1, + /datum/nothing = 1, /obj/effect/decal/cleanable/cobweb = 1) /obj/effect/spawner/random_spawners/cobweb_right_frequent name = "cobweb right frequent" result = list( - /turf/simulated/floor/plating = 1, + /datum/nothing = 1, /obj/effect/decal/cleanable/cobweb2 = 1) /obj/effect/spawner/random_spawners/cobweb_left_rare name = "cobweb left rare" result = list( - /turf/simulated/floor/plating = 10, + /datum/nothing = 10, /obj/effect/decal/cleanable/cobweb = 1) /obj/effect/spawner/random_spawners/cobweb_right_rare name = "cobweb right rare" result = list( - /turf/simulated/floor/plating = 10, + /datum/nothing = 10, /obj/effect/decal/cleanable/cobweb2 = 1) /obj/effect/spawner/random_spawners/dirt_frequent name = "dirt frequent" result = list( - /turf/simulated/floor/plating = 1, + /datum/nothing = 1, /obj/effect/decal/cleanable/dirt = 1) /obj/effect/spawner/random_spawners/dirt_rare name = "dirt rare" result = list( - /turf/simulated/floor/plating = 10, + /datum/nothing = 10, /obj/effect/decal/cleanable/dirt = 1) /obj/effect/spawner/random_spawners/fungus_maybe @@ -307,9 +306,3 @@ name = "80pc vaultdoor 20pc wall" result = list(/obj/machinery/door/airlock/hatch/syndicate/vault = 4, /turf/simulated/wall/mineral/plastitanium/nodiagonal = 1) - - -/obj/effect/spawner/random_spawners/syndicate/layout/spacepod - name = "50pc loot spacepod" - result = list(/obj/spacepod/syndi = 1, - /obj/spacepod/syndi/unlocked = 1) diff --git a/code/game/objects/effects/spawners/windowspawner.dm b/code/game/objects/effects/spawners/windowspawner.dm index 1d498888588..3a91c4d4cc1 100644 --- a/code/game/objects/effects/spawners/windowspawner.dm +++ b/code/game/objects/effects/spawners/windowspawner.dm @@ -59,6 +59,12 @@ window_to_spawn_regular = /obj/structure/window/reinforced/tinted window_to_spawn_full = /obj/structure/window/full/reinforced/tinted +/obj/effect/spawner/window/reinforced/polarized + name = "electrochromic reinforced window spawner" + icon_state = "ewindow_spawner" + window_to_spawn_regular = /obj/structure/window/reinforced/polarized + window_to_spawn_full = /obj/structure/window/full/reinforced/polarized + /obj/effect/spawner/window/shuttle name = "shuttle window spawner" icon_state = "swindow_spawner" diff --git a/code/game/objects/effects/spiders.dm b/code/game/objects/effects/spiders.dm index 56140e7d2ea..7a2880d897e 100644 --- a/code/game/objects/effects/spiders.dm +++ b/code/game/objects/effects/spiders.dm @@ -16,7 +16,7 @@ /obj/structure/spider/run_obj_armor(damage_amount, damage_type, damage_flag = 0, attack_dir) - if(damage_flag == "melee") + if(damage_flag == MELEE) switch(damage_type) if(BURN) damage_amount *= 2 diff --git a/code/game/objects/effects/temporary_visuals/miscellaneous.dm b/code/game/objects/effects/temporary_visuals/miscellaneous.dm index c6de27524c2..527578727a2 100644 --- a/code/game/objects/effects/temporary_visuals/miscellaneous.dm +++ b/code/game/objects/effects/temporary_visuals/miscellaneous.dm @@ -204,6 +204,11 @@ duration = 8 randomdir = FALSE +/obj/effect/temp_visual/mummy_animation + icon = 'icons/mob/mob.dmi' + icon_state = "mummy_revive" + duration = 20 + /obj/effect/temp_visual/heal //color is white by default, set to whatever is needed name = "healing glow" icon_state = "heal" diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 2d014e9e6c2..03b5a57da18 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -5,8 +5,6 @@ GLOBAL_DATUM_INIT(fire_overlay, /image, image("icon" = 'icons/goonstation/effect move_resist = null // Set in the Initialise depending on the item size. Unless it's overriden by a specific item var/discrete = 0 // used in item_attack.dm to make an item not show an attack message to viewers - var/image/blood_overlay = null //this saves our blood splatter overlay, which will be processed not to go over the edges of the sprite - var/blood_overlay_color = null var/item_state = null var/lefthand_file = 'icons/mob/inhands/items_lefthand.dmi' var/righthand_file = 'icons/mob/inhands/items_righthand.dmi' @@ -117,6 +115,12 @@ GLOBAL_DATUM_INIT(fire_overlay, /image, image("icon" = 'icons/goonstation/effect var/in_inventory = FALSE //is this item equipped into an inventory slot or hand of a mob? var/tip_timer = 0 + // item hover FX + /// Is this item inside a storage object? + var/in_storage = FALSE + /// Holder var for the item outline filter, null when no outline filter on the item. + var/outline_filter + /obj/item/New() ..() for(var/path in actions_types) @@ -131,6 +135,11 @@ GLOBAL_DATUM_INIT(fire_overlay, /image, image("icon" = 'icons/goonstation/effect if(!move_resist) determine_move_resist() +/obj/item/Initialize(mapload) + . = ..() + if(istype(loc, /obj/item/storage)) //marks all items in storage as being such + in_storage = TRUE + /obj/item/proc/determine_move_resist() switch(w_class) if(WEIGHT_CLASS_TINY) @@ -406,6 +415,7 @@ GLOBAL_DATUM_INIT(fire_overlay, /image, image("icon" = 'icons/goonstation/effect if((flags & NODROP) && !(initial(flags) & NODROP)) //Remove NODROP is dropped flags &= ~NODROP in_inventory = FALSE + remove_outline() SEND_SIGNAL(src, COMSIG_ITEM_DROPPED,user) if(!silent) playsound(src, drop_sound, DROP_SOUND_VOLUME, ignore_walls = FALSE) @@ -418,10 +428,12 @@ GLOBAL_DATUM_INIT(fire_overlay, /image, image("icon" = 'icons/goonstation/effect // called when this item is removed from a storage item, which is passed on as S. The loc variable is already set to the new destination before this is called. /obj/item/proc/on_exit_storage(obj/item/storage/S as obj) + in_storage = FALSE return // called when this item is added into a storage item, which is passed on as S. The loc variable is already set to the storage item. /obj/item/proc/on_enter_storage(obj/item/storage/S as obj) + in_storage = TRUE return /** @@ -691,14 +703,24 @@ GLOBAL_DATUM_INIT(fire_overlay, /image, image("icon" = 'icons/goonstation/effect openToolTip(user, src, params, title = name, content = "[desc]", theme = "") /obj/item/MouseEntered(location, control, params) - if(in_inventory) + if(in_inventory || in_storage) var/timedelay = 8 - var/user = usr + var/mob/user = usr tip_timer = addtimer(CALLBACK(src, .proc/openTip, location, control, params, user), timedelay, TIMER_STOPPABLE) + if(QDELETED(src)) + return + var/mob/living/L = user + if(!(user.client.prefs.toggles2 & PREFTOGGLE_2_SEE_ITEM_OUTLINES)) + return + if(istype(L) && L.incapacitated(ignore_lying = TRUE)) + apply_outline(L, COLOR_RED_GRAY) //if they're dead or handcuffed, let's show the outline as red to indicate that they can't interact with that right now + else + apply_outline(L) //if the player's alive and well we send the command with no color set, so it uses the theme's color /obj/item/MouseExited() deltimer(tip_timer) //delete any in-progress timer if the mouse is moved off the item before it finishes closeToolTip(usr) + remove_outline() /obj/item/MouseDrop_T(obj/item/I, mob/user) if(!user || user.incapacitated(ignore_lying = TRUE) || src == I) @@ -707,6 +729,41 @@ GLOBAL_DATUM_INIT(fire_overlay, /image, image("icon" = 'icons/goonstation/effect if(loc && I.loc == loc && istype(loc, /obj/item/storage) && loc.Adjacent(user)) // Are we trying to swap two items in the storage? var/obj/item/storage/S = loc S.swap_items(src, I, user) + remove_outline() //get rid of the hover effect in case the mouse exit isn't called if someone drags and drops an item and somthing goes wrong + +/obj/item/proc/apply_outline(mob/user, outline_color = null) + if(!(in_inventory || in_storage) || QDELETED(src) || isobserver(user)) //cancel if the item isn't in an inventory, is being deleted, or if the person hovering is a ghost (so that people spectating you don't randomly make your items glow) + return + var/theme = lowertext(user.client.prefs.UI_style) + if(!outline_color) //if we weren't provided with a color, take the theme's color + switch(theme) //yeah it kinda has to be this way + if("midnight") + outline_color = COLOR_THEME_MIDNIGHT + if("plasmafire") + outline_color = COLOR_THEME_PLASMAFIRE + if("retro") + outline_color = COLOR_THEME_RETRO //just as garish as the rest of this theme + if("slimecore") + outline_color = COLOR_THEME_SLIMECORE + if("operative") + outline_color = COLOR_THEME_OPERATIVE + if("clockwork") + outline_color = COLOR_THEME_CLOCKWORK //if you want free gbp go fix the fact that clockwork's tooltip css is glass' + if("glass") + outline_color = COLOR_THEME_GLASS + else //this should never happen, hopefully + outline_color = COLOR_WHITE + if(color) + outline_color = COLOR_WHITE //if the item is recolored then the outline will be too, let's make the outline white so it becomes the same color instead of some ugly mix of the theme and the tint + if(outline_filter) + filters -= outline_filter + outline_filter = filter(type = "outline", size = 1, color = outline_color) + filters += outline_filter + +/obj/item/proc/remove_outline() + if(outline_filter) + filters -= outline_filter + outline_filter = null // Returns a numeric value for sorting items used as parts in machines, so they can be replaced by the rped /obj/item/proc/get_part_rating() diff --git a/code/game/objects/items/crayons.dm b/code/game/objects/items/crayons.dm index 50ce47c4d58..7a1d9748b6d 100644 --- a/code/game/objects/items/crayons.dm +++ b/code/game/objects/items/crayons.dm @@ -28,7 +28,6 @@ /obj/item/toy/crayon/New() ..() - name = "[colourName] crayon" //Makes crayons identifiable in things like grinders drawtype = pick(pick(graffiti), pick(letters), "rune[rand(1, 8)]") /obj/item/toy/crayon/attack_self(mob/living/user as mob) @@ -122,31 +121,37 @@ /obj/item/toy/crayon/red + name = "red crayon" icon_state = "crayonred" colour = COLOR_RED colourName = "red" /obj/item/toy/crayon/orange + name = "orange crayon" icon_state = "crayonorange" colour = COLOR_ORANGE colourName = "orange" /obj/item/toy/crayon/yellow + name = "yellow crayon" icon_state = "crayonyellow" colour = COLOR_YELLOW colourName = "yellow" /obj/item/toy/crayon/green + name = "green crayon" icon_state = "crayongreen" colour = COLOR_GREEN colourName = "green" /obj/item/toy/crayon/blue + name = "blue crayon" icon_state = "crayonblue" colour = COLOR_BLUE colourName = "blue" /obj/item/toy/crayon/purple + name = "purple crayon" icon_state = "crayonpurple" colour = COLOR_PURPLE colourName = "purple" @@ -155,38 +160,47 @@ icon_state = pick(list("crayonred", "crayonorange", "crayonyellow", "crayongreen", "crayonblue", "crayonpurple")) switch(icon_state) if("crayonred") + name = "red crayon" colour = COLOR_RED colourName = "red" if("crayonorange") + name = "orange crayon" colour = COLOR_ORANGE colourName = "orange" if("crayonyellow") + name = "yellow crayon" colour = COLOR_YELLOW colourName = "yellow" if("crayongreen") + name = "green crayon" colour =COLOR_GREEN colourName = "green" if("crayonblue") + name = "blue crayon" colour = COLOR_BLUE colourName = "blue" if("crayonpurple") + name = "purple crayon" colour = COLOR_PURPLE colourName = "purple" ..() /obj/item/toy/crayon/black + name = "black crayon" icon_state = "crayonblack" colour = "#000000" colourName = "black" /obj/item/toy/crayon/white + name = "white crayon" icon_state = "crayonwhite" colour = "#FFFFFF" colourName = "white" /obj/item/toy/crayon/mime - icon_state = "crayonmime" + name = "mime crayon" desc = "A very sad-looking crayon." + icon_state = "crayonmime" colour = "#FFFFFF" colourName = "mime" uses = 0 @@ -211,6 +225,7 @@ ..() /obj/item/toy/crayon/rainbow + name = "rainbow crayon" icon_state = "crayonrainbow" colour = "#FFF000" colourName = "rainbow" diff --git a/code/game/objects/items/devices/flash.dm b/code/game/objects/items/devices/flash.dm index aa637dc0332..b04457ac866 100644 --- a/code/game/objects/items/devices/flash.dm +++ b/code/game/objects/items/devices/flash.dm @@ -118,7 +118,7 @@ else if(issilicon(M)) add_attack_logs(user, M, "Flashed with [src]") if(M.flash_eyes(affect_silicon = 1)) - M.Weaken(rand(5,10)) + M.Weaken(rand(4, 6)) user.visible_message("[user] overloads [M]'s sensors with [src]!", "You overload [M]'s sensors with [src]!") return 1 user.visible_message("[user] fails to blind [M] with [src]!", "You fail to blind [M] with [src]!") diff --git a/code/game/objects/items/devices/laserpointer.dm b/code/game/objects/items/devices/laserpointer.dm index d8ea4209cb1..3ca4fe30764 100644 --- a/code/game/objects/items/devices/laserpointer.dm +++ b/code/game/objects/items/devices/laserpointer.dm @@ -71,8 +71,6 @@ laser_act(target, user, params) /obj/item/laser_pointer/proc/laser_act(atom/target, mob/living/user, params) - if( !(user in (viewers(7,target))) ) - return if(!diode) to_chat(user, "You point [src] at [target], but nothing happens!") return @@ -82,6 +80,9 @@ if(HAS_TRAIT(user, TRAIT_CHUNKYFINGERS)) to_chat(user, "Your fingers can't press the button!") return + if(!(target in view(7, get_turf(src)))) // Use the turf as center so it won't use the potential xray of the user + to_chat(user, "There is something in the way!") + return add_fingerprint(user) diff --git a/code/game/objects/items/devices/megaphone.dm b/code/game/objects/items/devices/megaphone.dm index ce8c6ca7191..ced5a810bf4 100644 --- a/code/game/objects/items/devices/megaphone.dm +++ b/code/game/objects/items/devices/megaphone.dm @@ -13,7 +13,7 @@ var/list/insultmsg = list("FUCK EVERYONE!", "I'M A TATER!", "ALL SECURITY TO SHOOT ME ON SIGHT!", "I HAVE A BOMB!", "CAPTAIN IS A COMDOM!", "FOR THE SYNDICATE!") /obj/item/megaphone/attack_self(mob/living/user as mob) - if(user.client && (user.client.prefs.muted & MUTE_IC)) + if(check_mute(user.ckey, MUTE_IC)) to_chat(src, "You cannot speak in IC (muted).") return if(!ishuman(user)) diff --git a/code/game/objects/items/devices/painter/pipe_painter.dm b/code/game/objects/items/devices/painter/pipe_painter.dm index 4ad7b16b293..17c383809aa 100644 --- a/code/game/objects/items/devices/painter/pipe_painter.dm +++ b/code/game/objects/items/devices/painter/pipe_painter.dm @@ -27,8 +27,8 @@ return var/turf/T = get_turf(P) - if(P.level < 2 && T.level == 1 && T.intact) - to_chat(user, "You must remove the plating first.") + if(P.level < 2 && T.level == 1 && T.intact && !T.transparent_floor) + to_chat(user, "You must remove the flooring first.") return P.change_color(GLOB.pipe_colors[paint_setting]) diff --git a/code/game/objects/items/devices/traitordevices.dm b/code/game/objects/items/devices/traitordevices.dm index ca9de14fe7c..0fcd8d524a7 100644 --- a/code/game/objects/items/devices/traitordevices.dm +++ b/code/game/objects/items/devices/traitordevices.dm @@ -170,7 +170,7 @@ effective or pretty fucking useless. GLOB.active_jammers -= src /obj/item/teleporter - name = "\improper Syndicate teleporter" + name = "syndicate teleporter" desc = "A strange syndicate version of a cult veil shifter. Warrenty voided if exposed to EMP." icon = 'icons/obj/device.dmi' icon_state = "syndi-tele" @@ -208,24 +208,32 @@ effective or pretty fucking useless. charges++ /obj/item/teleporter/emp_act(severity) + var/teleported_something = FALSE if(prob(50 / severity)) if(istype(loc, /mob/living/carbon/human)) var/mob/living/carbon/human/user = loc to_chat(user, "[src] buzzes and activates!") attempt_teleport(user, TRUE) - else - visible_message("[src] activates and blinks out of existence!") - do_sparks(2, 1, src) - qdel(src) + else //Well, it either is on a floor / locker, and won't teleport someone, OR it's in someones bag. As such, we need to check the turf to see if people are there. + var/turf/teleport_turf = get_turf(src) + for(var/mob/living/user in teleport_turf) + if(!teleported_something) + teleport_turf.visible_message("[src] activates sporadically, teleporting everyone around it!") + teleported_something = TRUE + attempt_teleport(user, TRUE) + if(!teleported_something) + visible_message("[src] activates and blinks out of existence!") + do_sparks(2, 1, src) + qdel(src) /obj/item/teleporter/proc/attempt_teleport(mob/user, EMP_D = FALSE) dir_correction(user) - if(!charges) + if(!charges && !EMP_D) //If it's empd, you are moving no matter what. to_chat(user, "[src] is still recharging.") return - var/mob/living/carbon/C = user - var/turf/mobloc = get_turf(C) + var/mob/living/M = user + var/turf/mobloc = get_turf(M) var/list/turfs = new/list() var/found_turf = FALSE var/list/bagholding = user.search_contents_for(/obj/item/storage/backpack/holding) @@ -233,7 +241,7 @@ effective or pretty fucking useless. if(!is_teleport_allowed(T.z)) break if(!(length(bagholding) && !flawless)) //Chaos if you have a bag of holding - if(get_dir(C, T) != C.dir) + if(get_dir(M, T) != M.dir) continue if(T in range(user, inner_tp_range)) continue @@ -247,13 +255,14 @@ effective or pretty fucking useless. if(found_turf) if(user.loc != mobloc) // No locker / mech / sleeper teleporting, that breaks stuff - to_chat(C, "[src] will not work here!") - charges-- + to_chat(M, "[src] will not work here!") + if(charges > 0) //While we want EMP triggered teleports to drain charge, we also do not want it to go negative charge, as such we need this check here + charges-- var/turf/destination = pick(turfs) if(tile_check(destination) || flawless) // Why is there so many bloody floor types var/turf/fragging_location = destination telefrag(fragging_location, user) - C.forceMove(destination) + M.forceMove(destination) playsound(mobloc, "sparks", 50, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) new/obj/effect/temp_visual/teleport_abductor/syndi_teleporter(mobloc) playsound(destination, "sparks", 50, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) @@ -264,7 +273,7 @@ effective or pretty fucking useless. else // Emp activated? Bag of holding? No saving throw for you get_fragged(user, destination) else - to_chat(C, "[src] will not work here!") + to_chat(M, "[src] will not work here!") /obj/item/teleporter/proc/tile_check(turf/T) if(istype(T, /turf/simulated/floor) || istype(T, /turf/space)) @@ -294,8 +303,8 @@ effective or pretty fucking useless. else saving_throw = NORTH // just in case - var/mob/living/carbon/C = user - var/turf/mobloc = get_turf(C) + var/mob/living/M = user + var/turf/mobloc = get_turf(M) var/list/turfs = list() var/found_turf = FALSE for(var/turf/T in range(destination, saving_throw_distance)) @@ -314,7 +323,7 @@ effective or pretty fucking useless. var/turf/new_destination = pick(turfs) var/turf/fragging_location = new_destination telefrag(fragging_location, user) - C.forceMove(new_destination) + M.forceMove(new_destination) playsound(mobloc, "sparks", 50, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) new /obj/effect/temp_visual/teleport_abductor/syndi_teleporter(mobloc) new /obj/effect/temp_visual/teleport_abductor/syndi_teleporter(new_destination) @@ -332,11 +341,12 @@ effective or pretty fucking useless. playsound(destination, "sparks", 50, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) playsound(destination, "sound/magic/disintegrate.ogg", 50, TRUE) destination.ex_act(rand(1,2)) - for(var/obj/item/W in user) - if(istype(W, /obj/item/implant)) - continue - if(!user.unEquip(W)) - qdel(W) + if(iscarbon(user)) //don't want cyborgs dropping their stuff + for(var/obj/item/W in user) + if(istype(W, /obj/item/implant)) + continue + if(!user.unEquip(W)) + qdel(W) to_chat(user, "You teleport into the wall, the teleporter tries to save you, but--") user.gib() diff --git a/code/game/objects/items/devices/voice.dm b/code/game/objects/items/devices/voice.dm index 43a95ae86d7..c18af96333d 100644 --- a/code/game/objects/items/devices/voice.dm +++ b/code/game/objects/items/devices/voice.dm @@ -1,6 +1,6 @@ /obj/item/voice_changer name = "voice changer" - desc = "A voice scrambling module." + desc = "A voice mimicking module." icon = 'icons/obj/device.dmi' icon_state = "voice_changer_off" @@ -42,3 +42,9 @@ voice = sanitize(copytext(chosen_voice, 1, MAX_MESSAGE_LEN)) to_chat(user, "You are now mimicking [voice].") + +/obj/item/voice_changer/voice_modulator + name = "voice modulator" + desc = "A voice scrambling module." + voice = "Unknown" + actions_types = list(/datum/action/item_action/voice_changer/toggle) diff --git a/code/game/objects/items/his_grace.dm b/code/game/objects/items/his_grace.dm new file mode 100644 index 00000000000..e86d82fef36 --- /dev/null +++ b/code/game/objects/items/his_grace.dm @@ -0,0 +1,263 @@ +//His Grace is a very special weapon granted only to traitor chaplains. +//When awakened, He thirsts for blood and begins ticking a "bloodthirst" counter. +//The wielder of His Grace is immune to stuns and gradually heals. +//If the wielder fails to feed His Grace in time, He will devour them and become incredibly aggressive. +//Leaving His Grace alone for some time will reset His thirst and put Him to sleep. +//Using His Grace effectively requires extreme speed and care. + +/obj/item/his_grace + name = "artistic toolbox" + desc = "A toolbox painted bright green. Looking at it makes you feel uneasy." + icon = 'icons/obj/storage.dmi' + icon_state = "green" + item_state = "artistic_toolbox" + lefthand_file = 'icons/mob/inhands/equipment/toolbox_lefthand.dmi' + righthand_file = 'icons/mob/inhands/equipment/toolbox_righthand.dmi' + w_class = WEIGHT_CLASS_GIGANTIC + force = 12 + attack_verb = list("robusted") + hitsound = 'sound/weapons/smash.ogg' + drop_sound = 'sound/items/handling/toolbox_drop.ogg' + pickup_sound = 'sound/items/handling/toolbox_pickup.ogg' + var/awakened = FALSE + var/bloodthirst = HIS_GRACE_SATIATED + var/prev_bloodthirst = HIS_GRACE_SATIATED + var/force_bonus = 0 + var/ascended = FALSE + var/victims_needed = 25 + var/ascend_bonus = 15 + +/obj/item/his_grace/Initialize(mapload) + . = ..() + START_PROCESSING(SSprocessing, src) + GLOB.poi_list |= src + RegisterSignal(src, COMSIG_MOVABLE_POST_THROW, .proc/move_gracefully) + update_icon() + +/obj/item/his_grace/Destroy() + STOP_PROCESSING(SSprocessing, src) + for(var/mob/living/L in src) + L.forceMove(get_turf(src)) + GLOB.poi_list -= src + return ..() + +/obj/item/his_grace/update_icon() + icon_state = ascended ? "gold" : "green" + item_state = ascended ? "toolbox_gold" : "artistic_toolbox" + cut_overlays() + if(ascended) + add_overlay("triple_latch") + else if(awakened) + add_overlay("single_latch_open") + else + add_overlay("single_latch") + +/obj/item/his_grace/attack_self(mob/living/user) + if(!awakened) + INVOKE_ASYNC(src, .proc/awaken, user) + +/obj/item/his_grace/attack(mob/living/M, mob/user) + if(awakened && M.stat) + consume(M) + else + ..() + +/obj/item/his_grace/can_be_pulled(user, grab_state, force, show_message = FALSE) //you can't pull his grace + return FALSE + +/obj/item/his_grace/examine(mob/user) + . = ..() + if(awakened) + switch(bloodthirst) + if(HIS_GRACE_SATIATED to HIS_GRACE_PECKISH) + . += "[src] isn't very hungry. Not yet." + if(HIS_GRACE_PECKISH to HIS_GRACE_HUNGRY) + . += "[src] would like a snack." + if(HIS_GRACE_HUNGRY to HIS_GRACE_FAMISHED) + . += "[src] is quite hungry now." + if(HIS_GRACE_FAMISHED to HIS_GRACE_STARVING) + . += "[src] is openly salivating at the sight of you. Be careful." + if(HIS_GRACE_STARVING to HIS_GRACE_CONSUME_OWNER) + . += "You walk a fine line. [src] is very close to devouring you." + if(HIS_GRACE_CONSUME_OWNER to HIS_GRACE_FALL_ASLEEP) + . += "[src] is shaking violently and staring directly at you." + else + . += "[src] is latched closed." + +/obj/item/his_grace/relaymove(mob/living/user, direction) //Allows changelings, etc. to climb out of Him after they revive, provided He isn't active + if(!awakened) + user.forceMove(get_turf(src)) + user.visible_message("[user] scrambles out of [src]!", "You climb out of [src]!") + +/obj/item/his_grace/process() + if(!bloodthirst) + drowse() + return + if(bloodthirst < HIS_GRACE_CONSUME_OWNER && !ascended) + adjust_bloodthirst(1 + FLOOR(length(contents) * 0.5, 1)) //Maybe adjust this? + else + adjust_bloodthirst(1) //don't cool off rapidly once we're at the point where His Grace consumes all. + var/mob/living/master = get_atom_on_turf(src, /mob/living) + var/list/held_items = list() + if(istype(master)) + held_items += master.l_hand + held_items += master.r_hand + if(istype(master) && (src in held_items)) + switch(bloodthirst) + if(HIS_GRACE_CONSUME_OWNER to HIS_GRACE_FALL_ASLEEP) + master.visible_message("[src] turns on [master]!", "[src] turns on you!") + do_attack_animation(master, null, src) + master.emote("scream") + master.remove_status_effect(STATUS_EFFECT_HISGRACE) + flags &= ~NODROP + master.Weaken(3) + master.adjustBruteLoss(1000) + playsound(master, 'sound/effects/splat.ogg', 100, FALSE) + else + master.apply_status_effect(STATUS_EFFECT_HISGRACE) + return + forceMove(get_turf(src)) //no you can't put His Grace in a locker you just have to deal with Him + if(bloodthirst < HIS_GRACE_CONSUME_OWNER) + return + if(bloodthirst >= HIS_GRACE_FALL_ASLEEP) + drowse() + return + var/list/targets = list() + for(var/mob/living/L in oview(2, src)) + targets += L + if(!length(targets)) + return + var/mob/living/L = pick(targets) + step_to(src, L) + if(Adjacent(L)) + if(!L.stat) + L.visible_message("[src] lunges at [L]!", "[src] lunges at you!") + do_attack_animation(L, null, src) + playsound(L, 'sound/weapons/smash.ogg', 50, TRUE) + playsound(L, 'sound/misc/desceration-01.ogg', 50, TRUE) + L.adjustBruteLoss(force) + adjust_bloodthirst(-5) //Don't stop attacking they're right there! + else + consume(L) + +/obj/item/his_grace/proc/awaken(mob/user) //Good morning, Mr. Grace. + if(awakened) + return + awakened = TRUE + user.visible_message("[src] begins to rattle. He thirsts.", "You flick [src]'s latch up. You hope this is a good idea.") + name = "His Grace" + desc = "A bloodthirsty artifact created by a profane rite." + gender = MALE + adjust_bloodthirst(1) + force_bonus = HIS_GRACE_FORCE_BONUS * length(contents) + playsound(user, 'sound/effects/pope_entry.ogg', 100) + update_icon() + move_gracefully() + +/obj/item/his_grace/proc/move_gracefully() + SIGNAL_HANDLER + + if(!awakened) + return + animate_rumble(src) + +/obj/item/his_grace/proc/drowse() //Good night, Mr. Grace. + if(!awakened || ascended) + return + var/turf/T = get_turf(src) + T.visible_message("[src] slowly stops rattling and falls still, His latch snapping shut.") + playsound(loc, 'sound/weapons/batonextend.ogg', 100, TRUE) + name = initial(name) + desc = initial(desc) + animate(src, transform = matrix()) + gender = initial(gender) + force = initial(force) + force_bonus = initial(force_bonus) + awakened = FALSE + bloodthirst = 0 + update_icon() + +/obj/item/his_grace/proc/consume(mob/living/meal) //Here's your dinner, Mr. Grace. + if(!meal) + return + var/victims = 0 + meal.visible_message("[src] swings open and devours [meal]!", "[src] consumes you!") + meal.adjustBruteLoss(300) + playsound(meal, 'sound/misc/desceration-02.ogg', 75, TRUE) + playsound(src, 'sound/items/eatfood.ogg', 100, TRUE) + meal.forceMove(src) + force_bonus += HIS_GRACE_FORCE_BONUS + prev_bloodthirst = bloodthirst + if(prev_bloodthirst < HIS_GRACE_CONSUME_OWNER) + bloodthirst = max(length(contents), 1) //Never fully sated, and His hunger will only grow. + else + bloodthirst = HIS_GRACE_CONSUME_OWNER + for(var/mob/living/C in contents) + if(C.mind) + victims++ + if(victims >= victims_needed) + ascend() + update_stats() + +/obj/item/his_grace/proc/adjust_bloodthirst(amt) + prev_bloodthirst = bloodthirst + if(prev_bloodthirst < HIS_GRACE_CONSUME_OWNER && !ascended) + bloodthirst = clamp(bloodthirst + amt, HIS_GRACE_SATIATED, HIS_GRACE_CONSUME_OWNER) + else if(!ascended) + bloodthirst = clamp(bloodthirst + amt, HIS_GRACE_CONSUME_OWNER, HIS_GRACE_FALL_ASLEEP) + update_stats() + +/obj/item/his_grace/proc/update_stats() + flags &= ~NODROP + var/mob/living/master = get_atom_on_turf(src, /mob/living) + switch(bloodthirst) + if(HIS_GRACE_CONSUME_OWNER to HIS_GRACE_FALL_ASLEEP) + if(HIS_GRACE_CONSUME_OWNER > prev_bloodthirst) + master.visible_message("[src] enters a frenzy!") + if(HIS_GRACE_STARVING to HIS_GRACE_CONSUME_OWNER) + flags |= NODROP + if(HIS_GRACE_STARVING > prev_bloodthirst) + master.visible_message("[src] is starving!", "[src]'s bloodlust overcomes you. [src] must be fed, or you will become His meal.\ + [force_bonus < 15 ? " And still, His power grows.":""]") + force_bonus = max(force_bonus, 15) + if(HIS_GRACE_FAMISHED to HIS_GRACE_STARVING) + flags |= NODROP + if(HIS_GRACE_FAMISHED > prev_bloodthirst) + master.visible_message("[src] is very hungry!", "Spines sink into your hand. [src] must feed immediately.\ + [force_bonus < 10 ? " His power grows.":""]") + force_bonus = max(force_bonus, 10) + if(prev_bloodthirst >= HIS_GRACE_STARVING) + master.visible_message("[src] is now only very hungry!", "Your bloodlust recedes.") + if(HIS_GRACE_HUNGRY to HIS_GRACE_FAMISHED) + if(HIS_GRACE_HUNGRY > prev_bloodthirst) + master.visible_message("[src] is getting hungry.", "You feel [src]'s hunger within you.\ + [force_bonus < 5 ? " His power grows.":""]") + force_bonus = max(force_bonus, 5) + if(prev_bloodthirst >= HIS_GRACE_FAMISHED) + master.visible_message("[src] is now only somewhat hungry.", "[src]'s hunger recedes a little...") + if(HIS_GRACE_PECKISH to HIS_GRACE_HUNGRY) + if(HIS_GRACE_PECKISH > prev_bloodthirst) + master.visible_message("[src] is feeling snackish.", "[src] begins to hunger.") + if(prev_bloodthirst >= HIS_GRACE_HUNGRY) + master.visible_message("[src] is now only a little peckish.", "[src]'s hunger recedes somewhat...") + if(HIS_GRACE_SATIATED to HIS_GRACE_PECKISH) + if(prev_bloodthirst >= HIS_GRACE_PECKISH) + master.visible_message("[src] is satiated.", "[src]'s hunger recedes...") + force = initial(force) + force_bonus + +/obj/item/his_grace/proc/ascend() + if(ascended) + return + force_bonus += ascend_bonus + desc = "A legendary toolbox and a distant artifact from The Age of Three Powers. On its three latches engraved are the words \"The Sun\", \"The Moon\", and \"The Stars\". The entire toolbox has the words \"The World\" engraved into its sides." + icon_state = "his_grace_ascended" + item_state = "toolbox_gold" + ascended = TRUE + update_icon() + playsound(src, 'sound/effects/his_grace_ascend.ogg', 100) + var/mob/living/carbon/human/master = loc + if(istype(master)) + master.visible_message("Gods will be watching.") + name = "[master]'s mythical toolbox of three powers" + master.update_inv_l_hand() + master.update_inv_r_hand() diff --git a/code/game/objects/items/mountable_frames/buttons_switches.dm b/code/game/objects/items/mountable_frames/buttons_switches.dm index 76e4f0ecfd4..30b77ea2f33 100644 --- a/code/game/objects/items/mountable_frames/buttons_switches.dm +++ b/code/game/objects/items/mountable_frames/buttons_switches.dm @@ -21,3 +21,11 @@ /obj/item/mounted/frame/light_switch/do_build(turf/on_wall, mob/user) new /obj/machinery/light_switch(get_turf(user), get_dir(user, on_wall)) qdel(src) + +/obj/item/mounted/frame/light_switch/windowtint + name = "window tint control button frame" + desc = "Used for repairing or building window tint control buttons" + +/obj/item/mounted/frame/light_switch/windowtint/do_build(turf/on_wall, mob/user) + new /obj/machinery/button/windowtint(get_turf(user), get_dir(user, on_wall)) + qdel(src) diff --git a/code/game/objects/items/robot/robot_items.dm b/code/game/objects/items/robot/robot_items.dm index f1487a09986..52877118b88 100644 --- a/code/game/objects/items/robot/robot_items.dm +++ b/code/game/objects/items/robot/robot_items.dm @@ -31,6 +31,115 @@ playsound(loc, 'sound/weapons/egloves.ogg', 50, 1, -1) add_attack_logs(user, M, "Stunned with [src] ([uppertext(user.a_intent)])") +#define CYBORG_HUGS 0 +#define CYBORG_HUG 1 +#define CYBORG_SHOCK 2 +#define CYBORG_CRUSH 3 + +/obj/item/borg/cyborghug + name = "hugging module" + icon_state = "hugmodule" + desc = "For when a someone really needs a hug." + var/mode = CYBORG_HUGS //0 = Hugs 1 = "Hug" 2 = Shock 3 = CRUSH + var/ccooldown = 0 + var/scooldown = 0 + var/shockallowed = FALSE //Can it be a stunarm when emagged. Only PK borgs get this by default. + +/obj/item/borg/cyborghug/attack_self(mob/living/user) + if(isrobot(user)) + var/mob/living/silicon/robot/P = user + if(P.emagged && shockallowed) + if(mode < CYBORG_CRUSH) + mode++ + else + mode = CYBORG_HUGS + else if(mode < CYBORG_HUG) + mode++ + else + mode = CYBORG_HUGS + switch(mode) + if(CYBORG_HUGS) + to_chat(user, "Power reset. Hugs!") + if(CYBORG_HUG) + to_chat(user, "Power increased!") + if(CYBORG_SHOCK) + to_chat(user, "BZZT. Electrifying arms...") + if(CYBORG_CRUSH) + to_chat(user, "ERROR: ARM ACTUATORS OVERLOADED.") + +/obj/item/borg/cyborghug/attack(mob/living/M, mob/living/silicon/robot/user, params) + if(M == user) + return + switch(mode) + if(CYBORG_HUGS) + if(M.health >= 0) + if(isanimal(M)) + var/list/modifiers = params2list(params) + M.attack_hand(user, modifiers) //This enables borgs to get the floating heart icon and mob emote from simple_animal's that have petbonus == true. + return + if(user.zone_selected == BODY_ZONE_HEAD) + user.visible_message("[user] playfully boops [M] on the head!", "You playfully boop [M] on the head!") + user.do_attack_animation(M, ATTACK_EFFECT_BOOP) + playsound(loc, 'sound/weapons/tap.ogg', 50, TRUE, -1) + else if(ishuman(M)) + if(user.lying) + user.visible_message("[user] shakes [M] trying to get [M.p_them()] up!", "You shake [M] trying to get [M.p_them()] up!") + else + user.visible_message("[user] hugs [M] to make [M.p_them()] feel better!", "You hug [M] to make [M.p_them()] feel better!") + if(M.resting) + M.resting = FALSE + M.update_canmove() + else + user.visible_message("[user] pets [M]!", "You pet [M]!") + playsound(loc, 'sound/weapons/thudswoosh.ogg', 50, TRUE, -1) + if(CYBORG_HUG) + if(M.health >= 0) + if(ishuman(M)) + if(M.lying) + user.visible_message("[user] shakes [M] trying to get [M.p_them()] up!", "You shake [M] trying to get [M.p_them()] up!") + else if(user.zone_selected == BODY_ZONE_HEAD) + user.visible_message("[user] bops [M] on the head!", "You bop [M] on the head!") + user.do_attack_animation(M, ATTACK_EFFECT_PUNCH) + else + user.visible_message("[user] hugs [M] in a firm bear-hug! [M] looks uncomfortable...", "You hug [M] firmly to make [M.p_them()] feel better! [M] looks uncomfortable...") + if(M.resting) + M.resting = FALSE + M.update_canmove() + else + user.visible_message("[user] bops [M] on the head!", "You bop [M] on the head!") + playsound(loc, 'sound/weapons/tap.ogg', 50, TRUE, -1) + if(CYBORG_SHOCK) + if(scooldown < world.time) + if(M.health >= 0) + if(ishuman(M)) + M.electrocute_act(5, "[user]", flags = SHOCK_NOGLOVES) + user.visible_message("[user] electrocutes [M] with [user.p_their()] touch!", "You electrocute [M] with your touch!") + else + if(!isrobot(M)) + M.adjustFireLoss(10) + user.visible_message("[user] shocks [M]!", "You shock [M]!") + else + user.visible_message("[user] shocks [M]. It does not seem to have an effect", "You shock [M] to no effect.") + playsound(loc, 'sound/effects/sparks2.ogg', 50, TRUE, -1) + user.cell.use(500) + scooldown = world.time + 20 + if(CYBORG_CRUSH) + if(ccooldown < world.time) + if(M.health >= 0) + if(ishuman(M)) + user.visible_message("[user] crushes [M] in [user.p_their()] grip!", "You crush [M] in your grip!") + else + user.visible_message("[user] crushes [M]!", "You crush [M]!") + playsound(loc, 'sound/weapons/smash.ogg', 50, TRUE, -1) + M.adjustBruteLoss(15) + user.cell.use(300) + ccooldown = world.time + 10 + +#undef CYBORG_HUGS +#undef CYBORG_HUG +#undef CYBORG_SHOCK +#undef CYBORG_CRUSH + /obj/item/borg/overdrive name = "Overdrive" icon = 'icons/obj/decals.dmi' diff --git a/code/game/objects/items/stacks/medical.dm b/code/game/objects/items/stacks/medical.dm index a0bd2a3f708..3eafc1a4182 100644 --- a/code/game/objects/items/stacks/medical.dm +++ b/code/game/objects/items/stacks/medical.dm @@ -120,6 +120,7 @@ desc = "Some sterile gauze to wrap around bloody stumps." icon_state = "gauze" origin_tech = "biotech=2" + max_amount = 12 heal_brute = 10 stop_bleeding = 1800 @@ -169,6 +170,7 @@ singular_name = "advanced trauma kit" desc = "An advanced trauma kit for severe injuries." icon_state = "traumakit" + max_amount = 6 heal_brute = 25 stop_bleeding = 0 @@ -233,6 +235,7 @@ icon = 'icons/obj/hydroponics/harvest.dmi' icon_state = "tea_aspera_leaves" color = "#378C61" + max_amount = 6 stop_bleeding = 0 heal_brute = 12 drop_sound = 'sound/misc/moist_impact.ogg' diff --git a/code/game/objects/items/stacks/rods.dm b/code/game/objects/items/stacks/rods.dm index c736026bca8..adf6fa59869 100644 --- a/code/game/objects/items/stacks/rods.dm +++ b/code/game/objects/items/stacks/rods.dm @@ -1,6 +1,17 @@ GLOBAL_LIST_INIT(rod_recipes, list ( \ - new/datum/stack_recipe("grille", /obj/structure/grille, 2, time = 10, one_per_turf = 1, on_floor = 1), \ - new/datum/stack_recipe("table frame", /obj/structure/table_frame, 2, time = 10, one_per_turf = 1, on_floor = 1), \ + new /datum/stack_recipe("grille", /obj/structure/grille, 2, time = 10, one_per_turf = 1, on_floor = 1), \ + new /datum/stack_recipe("table frame", /obj/structure/table_frame, 2, time = 10, one_per_turf = 1, on_floor = 1), \ + null, + new /datum/stack_recipe("railing", /obj/structure/railing, 3, time = 10, one_per_turf = 1, on_floor = 1), \ + new /datum/stack_recipe("railing corner", /obj/structure/railing/corner, 3, time = 10, one_per_turf = 1, on_floor = 1), \ + null, + new /datum/stack_recipe_list("chainlink fence", list( \ + new /datum/stack_recipe("chainlink fence", /obj/structure/fence, 5, time = 10, one_per_turf = 1, on_floor = 1), \ + new /datum/stack_recipe("chainlink fence post", /obj/structure/fence/post, 5, time = 10, one_per_turf = 1, on_floor = 1), \ + new /datum/stack_recipe("chainlink fence corner", /obj/structure/fence/corner, 5, time = 10, one_per_turf = 1, on_floor = 1), \ + new /datum/stack_recipe("chainlink fence door", /obj/structure/fence/door, 10, time = 10, one_per_turf = 1, on_floor = 1), \ + new /datum/stack_recipe("chainlink fence end", /obj/structure/fence/end, 3, time = 10, one_per_turf = 1, on_floor = 1), \ + )), \ )) /obj/item/stack/rods diff --git a/code/game/objects/items/stacks/sheets/glass.dm b/code/game/objects/items/stacks/sheets/glass.dm index c9901c8b0fe..0a77949f26b 100644 --- a/code/game/objects/items/stacks/sheets/glass.dm +++ b/code/game/objects/items/stacks/sheets/glass.dm @@ -28,7 +28,7 @@ GLOBAL_LIST_INIT(glass_recipes, list ( \ singular_name = "glass sheet" icon_state = "sheet-glass" materials = list(MAT_GLASS=MINERAL_MATERIAL_AMOUNT) - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 100) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 100) resistance_flags = ACID_PROOF origin_tech = "materials=1" created_window = /obj/structure/window/basic @@ -89,7 +89,10 @@ GLOBAL_LIST_INIT(reinforced_glass_recipes, list ( \ new/datum/stack_recipe/window("windoor frame", /obj/structure/windoor_assembly, 5, time = 0, on_floor = TRUE, window_checks = TRUE), \ null, \ new/datum/stack_recipe/window("directional reinforced window", /obj/structure/window/reinforced, time = 0, on_floor = TRUE, window_checks = TRUE), \ - new/datum/stack_recipe/window("fulltile reinforced window", /obj/structure/window/full/reinforced, 2, time = 0, on_floor = TRUE, window_checks = TRUE) \ + new/datum/stack_recipe/window("fulltile reinforced window", /obj/structure/window/full/reinforced, 2, time = 0, on_floor = TRUE, window_checks = TRUE), \ + null, \ + new/datum/stack_recipe/window("directional electrochromic window", /obj/structure/window/reinforced/polarized, 2, time = 0, on_floor = TRUE, window_checks = TRUE), \ + new/datum/stack_recipe/window("fulltile electrochromic window", /obj/structure/window/full/reinforced/polarized, 4, time = 0, on_floor = TRUE, window_checks = TRUE) \ )) /obj/item/stack/sheet/rglass @@ -98,7 +101,7 @@ GLOBAL_LIST_INIT(reinforced_glass_recipes, list ( \ singular_name = "reinforced glass sheet" icon_state = "sheet-rglass" materials = list(MAT_METAL=MINERAL_MATERIAL_AMOUNT/2, MAT_GLASS=MINERAL_MATERIAL_AMOUNT) - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 70, "acid" = 100) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 70, ACID = 100) resistance_flags = ACID_PROOF origin_tech = "materials=2" created_window = /obj/structure/window/reinforced @@ -134,7 +137,7 @@ GLOBAL_LIST_INIT(pglass_recipes, list ( \ icon_state = "sheet-plasmaglass" item_state = "sheet-rglass" materials = list(MAT_GLASS=MINERAL_MATERIAL_AMOUNT*2) - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 75, "acid" = 100) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 75, ACID = 100) resistance_flags = ACID_PROOF origin_tech = "plasmatech=2;materials=2" created_window = /obj/structure/window/plasmabasic @@ -177,7 +180,7 @@ GLOBAL_LIST_INIT(prglass_recipes, list ( \ icon_state = "sheet-plasmarglass" item_state = "sheet-rglass" materials = list(MAT_METAL=MINERAL_MATERIAL_AMOUNT/2, MAT_GLASS=MINERAL_MATERIAL_AMOUNT*2) - armor = list("melee" = 20, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 100) + armor = list(MELEE = 20, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 80, ACID = 100) resistance_flags = ACID_PROOF origin_tech = "plasmatech=2;materials=2" created_window = /obj/structure/window/plasmareinforced @@ -199,7 +202,7 @@ GLOBAL_LIST_INIT(titaniumglass_recipes, list( icon_state = "sheet-titaniumglass" item_state = "sheet-rglass" materials = list(MAT_TITANIUM=MINERAL_MATERIAL_AMOUNT, MAT_GLASS=MINERAL_MATERIAL_AMOUNT) - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 100) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 80, ACID = 100) resistance_flags = ACID_PROOF merge_type = /obj/item/stack/sheet/titaniumglass full_window = /obj/structure/window/full/shuttle @@ -219,7 +222,7 @@ GLOBAL_LIST_INIT(plastitaniumglass_recipes, list( icon_state = "sheet-plastitaniumglass" item_state = "sheet-rglass" materials = list(MAT_TITANIUM=MINERAL_MATERIAL_AMOUNT, MAT_PLASMA=MINERAL_MATERIAL_AMOUNT, MAT_GLASS=MINERAL_MATERIAL_AMOUNT) - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 100) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 80, ACID = 100) resistance_flags = ACID_PROOF merge_type = /obj/item/stack/sheet/plastitaniumglass full_window = /obj/structure/window/full/plastitanium diff --git a/code/game/objects/items/stacks/sheets/leather.dm b/code/game/objects/items/stacks/sheets/leather.dm index 1be2e6b289d..9dbef33cd02 100644 --- a/code/game/objects/items/stacks/sheets/leather.dm +++ b/code/game/objects/items/stacks/sheets/leather.dm @@ -170,8 +170,8 @@ GLOBAL_LIST_INIT(sinew_recipes, list ( \ if(is_type_in_typecache(target, goliath_platable_armor_typecache)) var/obj/item/clothing/C = target var/datum/armor/current_armor = C.armor - if(current_armor.getRating("melee") < 60) - C.armor = current_armor.setRating(melee_value = min(current_armor.getRating("melee") + 10, 60)) + if(current_armor.getRating(MELEE) < 60) + C.armor = current_armor.setRating(melee_value = min(current_armor.getRating(MELEE) + 10, 60)) to_chat(user, "You strengthen [target], improving its resistance against melee attacks.") use(1) else @@ -180,9 +180,9 @@ GLOBAL_LIST_INIT(sinew_recipes, list ( \ var/obj/mecha/working/ripley/D = target if(D.hides < 3) D.hides++ - D.armor = D.armor.setRating(melee_value = min(D.armor.getRating("melee") + 10, 70)) - D.armor = D.armor.setRating(bullet_value = min(D.armor.getRating("bullet") + 5, 50)) - D.armor = D.armor.setRating(laser_value = min(D.armor.getRating("laser") + 5, 50)) + D.armor = D.armor.setRating(melee_value = min(D.armor.getRating(MELEE) + 10, 70)) + D.armor = D.armor.setRating(bullet_value = min(D.armor.getRating(BULLET) + 5, 50)) + D.armor = D.armor.setRating(laser_value = min(D.armor.getRating(LASER) + 5, 50)) to_chat(user, "You strengthen [target], improving its resistance against melee attacks.") D.update_icon() if(D.hides == 3) diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm index c617860643e..592c41a7bbc 100644 --- a/code/game/objects/items/stacks/sheets/sheet_types.dm +++ b/code/game/objects/items/stacks/sheets/sheet_types.dm @@ -92,6 +92,7 @@ GLOBAL_LIST_INIT(metal_recipes, list( null, new /datum/stack_recipe("mass driver button frame", /obj/item/mounted/frame/driver_button, 1, time = 50, one_per_turf = 0, on_floor = 1), new /datum/stack_recipe("light switch frame", /obj/item/mounted/frame/light_switch, 1, time = 50, one_per_turf = 0, on_floor = 1), + new /datum/stack_recipe("window tint control button frame", /obj/item/mounted/frame/light_switch/windowtint, 1, time = 50, one_per_turf = 0, on_floor = 1), null, new /datum/stack_recipe("grenade casing", /obj/item/grenade/chem_grenade), new /datum/stack_recipe("light fixture frame", /obj/item/mounted/frame/light_fixture, 2), @@ -161,7 +162,7 @@ GLOBAL_LIST_INIT(plasteel_recipes, list( icon_state = "sheet-plasteel" item_state = "sheet-metal" materials = list(MAT_METAL=2000, MAT_PLASMA=2000) - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 80) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 80) resistance_flags = FIRE_PROOF throwforce = 10.0 flags = CONDUCT @@ -219,7 +220,7 @@ GLOBAL_LIST_INIT(wood_recipes, list( icon_state = "sheet-wood" origin_tech = "materials=1;biotech=1" resistance_flags = FLAMMABLE - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 0) merge_type = /obj/item/stack/sheet/wood /obj/item/stack/sheet/wood/New(loc, amount=null) @@ -375,7 +376,7 @@ GLOBAL_LIST_INIT(cult_recipes, list ( \ new /datum/stack_recipe/cult("runed girder (used to make cult walls)", /obj/structure/girder/cult, 1, time = 10, one_per_turf = TRUE, on_floor = TRUE, no_cult_structure = TRUE), \ new /datum/stack_recipe/cult("pylon (heals nearby cultists)", /obj/structure/cult/functional/pylon, 4, time = 40, one_per_turf = TRUE, on_floor = TRUE, no_cult_structure = TRUE), \ new /datum/stack_recipe/cult("forge (crafts shielded robes, flagellant's robes, and mirror shields)", /obj/structure/cult/functional/forge, 3, time = 40, one_per_turf = TRUE, on_floor = TRUE, no_cult_structure = TRUE), \ - new /datum/stack_recipe/cult("archives (crafts zealot's blindfolds, shuttle curse orbs, and veil shifters)", /obj/structure/cult/functional/archives, 3, time = 40, one_per_turf = TRUE, on_floor = TRUE, no_cult_structure = TRUE), \ + new /datum/stack_recipe/cult("archives (crafts zealot's blindfolds, shuttle curse orbs, veil shifters, and reality sunderers)", /obj/structure/cult/functional/archives, 3, time = 40, one_per_turf = TRUE, on_floor = TRUE, no_cult_structure = TRUE), \ new /datum/stack_recipe/cult("altar (crafts eldritch whetstones, construct shells, and flasks of unholy water)", /obj/structure/cult/functional/altar, 3, time = 40, one_per_turf = TRUE, on_floor = TRUE, no_cult_structure = TRUE), )) diff --git a/code/game/objects/items/stacks/tiles/tile_types.dm b/code/game/objects/items/stacks/tiles/tile_types.dm index d148123be94..e0c9f4ee18c 100644 --- a/code/game/objects/items/stacks/tiles/tile_types.dm +++ b/code/game/objects/items/stacks/tiles/tile_types.dm @@ -88,6 +88,70 @@ /obj/item/stack/tile/carpet/black/twenty amount = 20 +/obj/item/stack/tile/carpet/blue + name = "blue carpet" + icon_state = "tile-carpet-blue" + turf_type = /turf/simulated/floor/carpet/blue + +/obj/item/stack/tile/carpet/blue/twenty + amount = 20 + +/obj/item/stack/tile/carpet/cyan + name = "cyan carpet" + icon_state = "tile-carpet-cyan" + turf_type = /turf/simulated/floor/carpet/cyan + +/obj/item/stack/tile/carpet/cyan/twenty + amount = 20 + +/obj/item/stack/tile/carpet/green + name = "green carpet" + icon_state = "tile-carpet-green" + turf_type = /turf/simulated/floor/carpet/green + +/obj/item/stack/tile/carpet/green/twenty + amount = 20 + +/obj/item/stack/tile/carpet/orange + name = "orange carpet" + icon_state = "tile-carpet-orange" + turf_type = /turf/simulated/floor/carpet/orange + +/obj/item/stack/tile/carpet/orange/twenty + amount = 20 + +/obj/item/stack/tile/carpet/purple + name = "purple carpet" + icon_state = "tile-carpet-purple" + turf_type = /turf/simulated/floor/carpet/purple + +/obj/item/stack/tile/carpet/purple/twenty + amount = 20 + +/obj/item/stack/tile/carpet/red + name = "red carpet" + icon_state = "tile-carpet-red" + turf_type = /turf/simulated/floor/carpet/red + +/obj/item/stack/tile/carpet/red/twenty + amount = 20 + +/obj/item/stack/tile/carpet/royalblack + name = "royal black carpet" + icon_state = "tile-carpet-royalblack" + turf_type = /turf/simulated/floor/carpet/royalblack + +/obj/item/stack/tile/carpet/royalblack/twenty + amount = 20 + +/obj/item/stack/tile/carpet/royalblue + name = "royal blue carpet" + icon_state = "tile-carpet-royalblue" + turf_type = /turf/simulated/floor/carpet/royalblue + +/obj/item/stack/tile/carpet/royalblue/twenty + amount = 20 + //Plasteel /obj/item/stack/tile/plasteel name = "floor tiles" @@ -103,7 +167,7 @@ flags = CONDUCT turf_type = /turf/simulated/floor/plasteel mineralType = "metal" - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 70) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 70) resistance_flags = FIRE_PROOF /obj/item/stack/tile/plasteel/cyborg diff --git a/code/game/objects/items/tools/crowbar.dm b/code/game/objects/items/tools/crowbar.dm index 9374c68fdd5..899d54a1084 100644 --- a/code/game/objects/items/tools/crowbar.dm +++ b/code/game/objects/items/tools/crowbar.dm @@ -17,7 +17,7 @@ attack_verb = list("attacked", "bashed", "battered", "bludgeoned", "whacked") toolspeed = 1 - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 30) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 30) tool_behaviour = TOOL_CROWBAR /obj/item/crowbar/red diff --git a/code/game/objects/items/tools/screwdriver.dm b/code/game/objects/items/tools/screwdriver.dm index c6b4aecd4f2..e67436e2ce3 100644 --- a/code/game/objects/items/tools/screwdriver.dm +++ b/code/game/objects/items/tools/screwdriver.dm @@ -16,7 +16,7 @@ hitsound = 'sound/weapons/bladeslice.ogg' usesound = 'sound/items/screwdriver.ogg' toolspeed = 1 - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 30) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 30) drop_sound = 'sound/items/handling/screwdriver_drop.ogg' pickup_sound = 'sound/items/handling/screwdriver_pickup.ogg' tool_behaviour = TOOL_SCREWDRIVER diff --git a/code/game/objects/items/tools/welder.dm b/code/game/objects/items/tools/welder.dm index 6519703713a..475ccba1c34 100644 --- a/code/game/objects/items/tools/welder.dm +++ b/code/game/objects/items/tools/welder.dm @@ -14,7 +14,7 @@ throw_range = 5 hitsound = "swing_hit" w_class = WEIGHT_CLASS_SMALL - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 30) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 30) resistance_flags = FIRE_PROOF materials = list(MAT_METAL = 70, MAT_GLASS = 20) origin_tech = "engineering=1;plasmatech=1" diff --git a/code/game/objects/items/tools/wirecutters.dm b/code/game/objects/items/tools/wirecutters.dm index 17f4167868a..bf8ccce706a 100644 --- a/code/game/objects/items/tools/wirecutters.dm +++ b/code/game/objects/items/tools/wirecutters.dm @@ -18,7 +18,7 @@ pickup_sound = 'sound/items/handling/wirecutter_pickup.ogg' sharp = 1 toolspeed = 1 - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 30) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 30) tool_behaviour = TOOL_WIRECUTTER var/random_color = TRUE diff --git a/code/game/objects/items/tools/wrench.dm b/code/game/objects/items/tools/wrench.dm index d204ca683e6..dde5e8d7afc 100644 --- a/code/game/objects/items/tools/wrench.dm +++ b/code/game/objects/items/tools/wrench.dm @@ -16,7 +16,7 @@ origin_tech = "materials=1;engineering=1" attack_verb = list("bashed", "battered", "bludgeoned", "whacked") toolspeed = 1 - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 30) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 30) tool_behaviour = TOOL_WRENCH /obj/item/wrench/suicide_act(mob/user) diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm index 4b7ec1b350b..f2e006e24c8 100644 --- a/code/game/objects/items/toys.dm +++ b/code/game/objects/items/toys.dm @@ -1066,6 +1066,50 @@ w_class = WEIGHT_CLASS_SMALL resistance_flags = FLAMMABLE +/obj/item/toy/windup_toolbox + name = "windup toolbox" + desc = "A replica toolbox that rumbles when you turn the key." + icon = 'icons/obj/storage.dmi' + icon_state = "green" + item_state = "artistic_toolbox" + lefthand_file = 'icons/mob/inhands/equipment/toolbox_lefthand.dmi' + righthand_file = 'icons/mob/inhands/equipment/toolbox_righthand.dmi' + hitsound = 'sound/weapons/smash.ogg' + drop_sound = 'sound/items/handling/toolbox_drop.ogg' + pickup_sound = 'sound/items/handling/toolbox_pickup.ogg' + attack_verb = list("robusted") + var/active = FALSE + +/obj/item/toy/windup_toolbox/Initialize(mapload) + . = ..() + update_icon() + +/obj/item/toy/windup_toolbox/update_icon() + ..() + cut_overlays() + if(active) + add_overlay("single_latch_open") + else + add_overlay("single_latch") + +/obj/item/toy/windup_toolbox/attack_self(mob/user) + if(!active) + to_chat(user, "You wind up [src], it begins to rumble.") + active = TRUE + update_icon() + playsound(src, 'sound/effects/pope_entry.ogg', 100) + animate_rumble(src) + addtimer(CALLBACK(src, .proc/stopRumble), 60 SECONDS) + else + to_chat(user, "[src] is already active!") + +/obj/item/toy/windup_toolbox/proc/stopRumble() + active = FALSE + update_icon() + visible_message("[src] slowly stops rattling and falls still, its latch snapping shut.") //subtle difference + playsound(loc, 'sound/weapons/batonextend.ogg', 100, TRUE) + animate(src, transform = matrix()) + /* * Toy/fake flash */ diff --git a/code/game/objects/items/weapons/RCD.dm b/code/game/objects/items/weapons/RCD.dm index c12809ca160..c86046c238e 100644 --- a/code/game/objects/items/weapons/RCD.dm +++ b/code/game/objects/items/weapons/RCD.dm @@ -27,7 +27,7 @@ usesound = 'sound/items/deconstruct.ogg' flags_2 = NO_MAT_REDEMPTION_2 req_access = list(ACCESS_ENGINE) - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 50) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 50) resistance_flags = FIRE_PROOF /// The spark system used to create sparks when the user interacts with the RCD. var/datum/effect_system/spark_spread/spark_system diff --git a/code/game/objects/items/weapons/RSF.dm b/code/game/objects/items/weapons/RSF.dm index ef0fd7b01c8..22b18892d7a 100644 --- a/code/game/objects/items/weapons/RSF.dm +++ b/code/game/objects/items/weapons/RSF.dm @@ -13,7 +13,7 @@ RSF anchored = 0.0 var/matter = 0 var/mode = 1 - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 0, ACID = 0) w_class = WEIGHT_CLASS_NORMAL var/list/configured_items = list() @@ -21,7 +21,6 @@ RSF ..() desc = "A RSF. It currently holds [matter]/30 fabrication-units." // configured_items[ID_NUMBER] = list("Human-readable name", price in energy, /type/path) - configured_items[++configured_items.len] = list("Dosh", 50, /obj/item/stack/spacecash/c10) configured_items[++configured_items.len] = list("Drinking Glass", 50, /obj/item/reagent_containers/food/drinks/drinkingglass) configured_items[++configured_items.len] = list("Paper", 50, /obj/item/paper) configured_items[++configured_items.len] = list("Pen", 50, /obj/item/pen) diff --git a/code/game/objects/items/weapons/batons.dm b/code/game/objects/items/weapons/batons.dm index 47ec7da88e9..e1f042c29f0 100644 --- a/code/game/objects/items/weapons/batons.dm +++ b/code/game/objects/items/weapons/batons.dm @@ -187,28 +187,5 @@ var/mob/living/carbon/human/H = user H.update_inv_l_hand() H.update_inv_r_hand() - // Update blood splatter - if(blood_overlay) - cut_overlay(blood_overlay) - qdel(blood_overlay) - add_blood_overlay(blood_overlay_color) playsound(loc, extend_sound, 50, TRUE) add_fingerprint(user) - -/obj/item/melee/classic_baton/telescopic/blood_splatter_index() - return "\ref[icon]-[icon_state]" - -/obj/item/melee/classic_baton/telescopic/add_blood_overlay(color) - var/index = blood_splatter_index() - var/icon/blood_splatter_icon = GLOB.blood_splatter_icons[index] - if(!blood_splatter_icon) - blood_splatter_icon = icon(icon, icon_state) - blood_splatter_icon.Blend("#ffffff", ICON_ADD) - blood_splatter_icon.Blend(icon('icons/effects/blood.dmi', "itemblood"), ICON_MULTIPLY) - blood_splatter_icon = fcopy_rsc(blood_splatter_icon) - GLOB.blood_splatter_icons[index] = blood_splatter_icon - - blood_overlay = image(blood_splatter_icon) - blood_overlay.color = color - blood_overlay_color = color - add_overlay(blood_overlay) diff --git a/code/game/objects/items/weapons/cards_ids.dm b/code/game/objects/items/weapons/cards_ids.dm index 69b64efef0d..59d9c7c9138 100644 --- a/code/game/objects/items/weapons/cards_ids.dm +++ b/code/game/objects/items/weapons/cards_ids.dm @@ -89,7 +89,7 @@ var/list/access = list() var/registered_name = "Unknown" // The name registered_name on the card slot_flags = SLOT_ID - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 100) resistance_flags = FIRE_PROOF | ACID_PROOF var/untrackable // Can not be tracked by AI's @@ -734,7 +734,7 @@ registered_name = "HoS" icon_state = "HoS" access = list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_BRIG, ACCESS_ARMORY, ACCESS_COURT, - ACCESS_FORENSICS_LOCKERS, ACCESS_PILOT, ACCESS_MORGUE, ACCESS_MAINT_TUNNELS, ACCESS_ALL_PERSONAL_LOCKERS, + ACCESS_FORENSICS_LOCKERS, ACCESS_MORGUE, ACCESS_MAINT_TUNNELS, ACCESS_ALL_PERSONAL_LOCKERS, ACCESS_RESEARCH, ACCESS_ENGINE, ACCESS_MINING, ACCESS_MEDICAL, ACCESS_CONSTRUCTION, ACCESS_MAILSORTING, ACCESS_HEADS, ACCESS_HOS, ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_GATEWAY, ACCESS_WEAPONS) @@ -762,7 +762,7 @@ access = list(ACCESS_ENGINE, ACCESS_ENGINE_EQUIP, ACCESS_TECH_STORAGE, ACCESS_MAINT_TUNNELS, ACCESS_TELEPORTER, ACCESS_EXTERNAL_AIRLOCKS, ACCESS_ATMOSPHERICS, ACCESS_EMERGENCY_STORAGE, ACCESS_EVA, ACCESS_HEADS, ACCESS_CONSTRUCTION, ACCESS_SEC_DOORS, - ACCESS_CE, ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_TCOMSAT, ACCESS_MINISAT, ACCESS_MECHANIC, ACCESS_MINERAL_STOREROOM) + ACCESS_CE, ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_TCOMSAT, ACCESS_MINISAT, ACCESS_MINERAL_STOREROOM) /obj/item/card/id/clown name = "Pink ID" diff --git a/code/game/objects/items/weapons/cigs.dm b/code/game/objects/items/weapons/cigs.dm index cf19a910647..340ce0b64f8 100644 --- a/code/game/objects/items/weapons/cigs.dm +++ b/code/game/objects/items/weapons/cigs.dm @@ -170,6 +170,10 @@ LIGHTERS ARE IN LIGHTERS.DM if(flavor_text) var/turf/T = get_turf(src) T.visible_message(flavor_text) + if(iscarbon(loc)) + var/mob/living/carbon/C = loc + if(C.wear_mask == src) // Don't update if it's just in their hand + C.wear_mask_update(src) set_light(2, 0.25, "#E38F46") START_PROCESSING(SSobj, src) @@ -262,6 +266,9 @@ LIGHTERS ARE IN LIGHTERS.DM pixel_x = rand(-5, 5) pixel_y = rand(-5, 5) +/obj/item/clothing/mask/cigarette/rollie/nicotine + list_reagents = list("nicotine" = 40) + /obj/item/cigbutt/roach name = "roach" diff --git a/code/game/objects/items/weapons/defib.dm b/code/game/objects/items/weapons/defib.dm index e76207ae85c..c24432f9644 100644 --- a/code/game/objects/items/weapons/defib.dm +++ b/code/game/objects/items/weapons/defib.dm @@ -3,6 +3,7 @@ /obj/item/defibrillator name = "defibrillator" desc = "A device that delivers powerful shocks to detachable paddles that resuscitate incapacitated patients." + icon = 'icons/obj/defib.dmi' icon_state = "defibunit" item_state = "defibunit" slot_flags = SLOT_BACK @@ -11,33 +12,33 @@ w_class = WEIGHT_CLASS_BULKY origin_tech = "biotech=4" actions_types = list(/datum/action/item_action/toggle_paddles) - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 50) sprite_sheets = list( "Vox" = 'icons/mob/clothing/species/vox/back.dmi' ) var/paddles_on_defib = TRUE //if the paddles are on the defib (TRUE) - var/safety = TRUE //if you can zap people with the defibs on harm mode var/powered = FALSE //if there's a cell in the defib with enough power for a revive, blocks paddles from reviving otherwise var/obj/item/twohanded/shockpaddles/paddles var/obj/item/stock_parts/cell/high/cell = null + var/safety = TRUE //if you can zap people with the defibs on harm mode var/combat = FALSE //can we revive through space suits? + var/heart_attack = FALSE //can it give instant heart attacks when zapped on harm intent with combat? + var/base_icon_state = "defibpaddles" + var/obj/item/twohanded/shockpaddles/paddle_type = /obj/item/twohanded/shockpaddles /obj/item/defibrillator/get_cell() return cell -/obj/item/defibrillator/New() //starts without a cell for rnd - ..() - paddles = make_paddles() +/obj/item/defibrillator/Initialize(mapload) //starts without a cell for rnd + . = ..() + paddles = new paddle_type(src) update_icon() - return -/obj/item/defibrillator/loaded/New() //starts with hicap - ..() - paddles = make_paddles() +/obj/item/defibrillator/loaded/Initialize(mapload) //starts with hicap + . = ..() cell = new(src) update_icon() - return /obj/item/defibrillator/update_icon() update_power() @@ -158,9 +159,6 @@ var/datum/action/A = X A.UpdateButtonIcon() -/obj/item/defibrillator/proc/make_paddles() - return new /obj/item/twohanded/shockpaddles(src) - /obj/item/defibrillator/equipped(mob/user, slot) ..() if(slot != slot_back) @@ -214,38 +212,68 @@ /obj/item/defibrillator/compact name = "compact defibrillator" - desc = "A belt-equipped defibrillator that can be rapidly deployed." + desc = "A belt-mounted defibrillator that can be rapidly deployed." icon_state = "defibcompact" item_state = "defibcompact" + sprite_sheets = null //Because Vox had the belt defibrillator sprites in back.dm w_class = WEIGHT_CLASS_NORMAL slot_flags = SLOT_BELT origin_tech = "biotech=5" +/obj/item/defibrillator/compact/loaded/Initialize(mapload) + . = ..() + cell = new(src) + update_icon() + /obj/item/defibrillator/compact/item_action_slot_check(slot, mob/user) if(slot == slot_belt) return TRUE -/obj/item/defibrillator/compact/loaded/New() - ..() - paddles = make_paddles() - cell = new(src) - update_icon() - return - /obj/item/defibrillator/compact/combat name = "combat defibrillator" - desc = "A belt-equipped blood-red defibrillator that can be rapidly deployed. Does not have the restrictions or safeties of conventional defibrillators and can revive through space suits." + desc = "A belt-mounted blood-red defibrillator that can be rapidly deployed. Does not have the restrictions or safeties of conventional defibrillators and can revive through space suits." + icon_state = "defibcombat" + item_state = "defibcombat" + paddle_type = /obj/item/twohanded/shockpaddles/syndicate combat = TRUE safety = FALSE -/obj/item/defibrillator/compact/combat/loaded/New() - ..() - paddles = make_paddles() +/obj/item/defibrillator/compact/combat/loaded/Initialize(mapload) + . = ..() cell = new(src) update_icon() - return -/obj/item/defibrillator/compact/combat/attackby(obj/item/W, mob/user, params) +/obj/item/defibrillator/compact/advanced + name = "advanced compact defibrillator" + desc = "A belt-mounted state-of-the-art defibrillator that can be rapidly deployed in all environments. Uses an experimental self-charging cell, meaning that it will (probably) never stop working. Can be used to defibrillate through space suits. It is impossible to damage." + icon_state = "defibnt" + item_state = "defibnt" + paddle_type = /obj/item/twohanded/shockpaddles/advanced + combat = TRUE + safety = TRUE + heart_attack = TRUE + resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF //Objective item, better not have it destroyed. + + var/next_emp_message //to prevent spam from the emagging message on the advanced defibrillator + +/obj/item/defibrillator/compact/advanced/attackby(obj/item/W, mob/user, params) + if(W == paddles) + paddles.unwield() + toggle_paddles() + update_icon() + +/obj/item/defibrillator/compact/advanced/loaded/Initialize(mapload) + . = ..() + cell = new /obj/item/stock_parts/cell/bluespace/charging(src) + update_icon() + +/obj/item/defibrillator/compact/advanced/emp_act(severity) + if(world.time > next_emp_message) + atom_say("Warning: Electromagnetic pulse detected. Integrated shielding prevented all potential hardware damage.") + playsound(src, 'sound/machines/defib_saftyon.ogg', 50) + next_emp_message = world.time + 5 SECONDS + +/obj/item/defibrillator/compact/advanced/attackby(obj/item/W, mob/user, params) if(W == paddles) paddles.unwield() toggle_paddles() @@ -257,6 +285,7 @@ /obj/item/twohanded/shockpaddles name = "defibrillator paddles" desc = "A pair of plastic-gripped paddles with flat metal surfaces that are used to deliver powerful electric shocks." + icon = 'icons/obj/defib.dmi' icon_state = "defibpaddles" item_state = "defibpaddles" force = 0 @@ -268,6 +297,7 @@ var/revivecost = 1000 var/cooldown = FALSE var/busy = FALSE + var/base_icon_state = "defibpaddles" var/obj/item/defibrillator/defib /obj/item/twohanded/shockpaddles/New(mainunit) @@ -280,10 +310,10 @@ return /obj/item/twohanded/shockpaddles/update_icon() - icon_state = "defibpaddles[wielded]" - item_state = "defibpaddles[wielded]" + icon_state = "[base_icon_state][wielded]" + item_state = "[base_icon_state][wielded]" if(cooldown) - icon_state = "defibpaddles[wielded]_cooldown" + icon_state = "[base_icon_state][wielded]_cooldown" /obj/item/twohanded/shockpaddles/suicide_act(mob/user) user.visible_message("[user] is putting the live paddles on [user.p_their()] chest! It looks like [user.p_theyre()] trying to commit suicide.") @@ -336,7 +366,7 @@ to_chat(user, "[defib] is recharging.") return if(!ishuman(M)) - to_chat(user, "The instructions on [defib] don't mention how to revive that...") + to_chat(user, "The instructions on [defib] don't mention how to defibrillate that...") return else if(user.a_intent == INTENT_HARM && !defib.safety) @@ -347,7 +377,7 @@ H.Weaken(5) playsound(get_turf(src), 'sound/machines/defib_zap.ogg', 50, 1, -1) H.emote("gasp") - if(!H.undergoing_cardiac_arrest() && (prob(10) || defib.combat)) // Your heart explodes. + if(!H.undergoing_cardiac_arrest() && (prob(10) || (defib.combat && !defib.heart_attack) || prob(10) && (defib.combat && defib.heart_attack))) // Your heart explodes. H.set_heartattack(TRUE) SEND_SIGNAL(H, COMSIG_LIVING_MINOR_SHOCK, 100) add_attack_logs(user, M, "Stunned with [src]") @@ -470,7 +500,8 @@ /obj/item/borg_defib name = "defibrillator paddles" - desc = "A pair of mounted paddles with flat metal surfaces that are used to deliver powerful electric shocks." + desc = "A pair of paddles with flat metal surfaces that are used to deliver powerful electric shocks." + icon = 'icons/obj/defib.dmi' icon_state = "defibpaddles0" item_state = "defibpaddles0" force = 0 @@ -590,3 +621,17 @@ playsound(get_turf(src), 'sound/machines/defib_failed.ogg', 50, 0) busy = FALSE update_icon() + +/obj/item/twohanded/shockpaddles/syndicate + name = "combat defibrillator paddles" + desc = "A pair of high-tech paddles with flat plasteel surfaces to revive deceased operatives (unless they exploded). They possess both the ability to penetrate armor and to deliver powerful or disabling shocks offensively." + icon_state = "syndiepaddles0" + item_state = "syndiepaddles0" + base_icon_state = "syndiepaddles" + +/obj/item/twohanded/shockpaddles/advanced + name = "advanced defibrillator paddles" + desc = "A pair of high-tech paddles with flat plasteel surfaces that are used to deliver powerful electric shocks. They possess the ability to penetrate armor to deliver shock." + icon_state = "ntpaddles0" + item_state = "ntpaddles0" + base_icon_state = "ntpaddles" diff --git a/code/game/objects/items/weapons/dna_injector.dm b/code/game/objects/items/weapons/dna_injector.dm index 46d347e0db7..02b53d2ff56 100644 --- a/code/game/objects/items/weapons/dna_injector.dm +++ b/code/game/objects/items/weapons/dna_injector.dm @@ -170,28 +170,6 @@ block = GLOB.hulkblock ..() -/obj/item/dnainjector/xraymut - name = "DNA-Injector (Xray)" - desc = "Finally you can see what the Captain does." - datatype = DNA2_BUF_SE - value = 0xFFF - forcedmutation = TRUE - -/obj/item/dnainjector/xraymut/Initialize() - block = GLOB.xrayblock - ..() - -/obj/item/dnainjector/antixray - name = "DNA-Injector (Anti-Xray)" - desc = "It will make you see harder." - datatype = DNA2_BUF_SE - value = 0x001 - forcedmutation = TRUE - -/obj/item/dnainjector/antixray/Initialize() - block = GLOB.xrayblock - ..() - /obj/item/dnainjector/firemut name = "DNA-Injector (Fire)" desc = "Gives you fire." diff --git a/code/game/objects/items/weapons/grenades/flashbang.dm b/code/game/objects/items/weapons/grenades/flashbang.dm index 8122814353b..b139fc7db01 100644 --- a/code/game/objects/items/weapons/grenades/flashbang.dm +++ b/code/game/objects/items/weapons/grenades/flashbang.dm @@ -20,7 +20,7 @@ // Blob damage for(var/obj/structure/blob/B in hear(range + 1, T)) var/damage = round(30 / (get_dist(B, T) + 1)) - B.take_damage(damage, BURN, "melee", FALSE) + B.take_damage(damage, BURN, MELEE, FALSE) // Stunning & damaging mechanic bang(T, src, range) diff --git a/code/game/objects/items/weapons/grenades/frag.dm b/code/game/objects/items/weapons/grenades/frag.dm index 5b2e836bf81..f08186986f9 100644 --- a/code/game/objects/items/weapons/grenades/frag.dm +++ b/code/game/objects/items/weapons/grenades/frag.dm @@ -26,7 +26,7 @@ /obj/item/grenade/frag/proc/embed_shrapnel(mob/living/carbon/human/H, amount) for(var/i = 0, i < amount, i++) - if(prob(embed_prob - H.getarmor(null, "bomb"))) + if(prob(embed_prob - H.getarmor(null, BOMB))) var/obj/item/embedded/S = new embedded_type(src) H.hitby(S, skipcatch = 1) S.throwforce = 1 diff --git a/code/game/objects/items/weapons/grenades/smokebomb.dm b/code/game/objects/items/weapons/grenades/smokebomb.dm index 53061e5fa61..3cafa295680 100644 --- a/code/game/objects/items/weapons/grenades/smokebomb.dm +++ b/code/game/objects/items/weapons/grenades/smokebomb.dm @@ -31,7 +31,7 @@ for(var/obj/structure/blob/B in view(8,src)) var/damage = round(30/(get_dist(B,src)+1)) - B.take_damage(damage, BURN, "melee", 0) + B.take_damage(damage, BURN, MELEE, 0) sleep(80) qdel(src) return diff --git a/code/game/objects/items/weapons/handcuffs.dm b/code/game/objects/items/weapons/handcuffs.dm index d8abb853e9f..207533ce6d8 100644 --- a/code/game/objects/items/weapons/handcuffs.dm +++ b/code/game/objects/items/weapons/handcuffs.dm @@ -13,7 +13,7 @@ materials = list(MAT_METAL=500) origin_tech = "engineering=3;combat=3" breakouttime = 600 //Deciseconds = 60s = 1 minutes - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 50) var/cuffsound = 'sound/weapons/handcuffs.ogg' var/trashtype = null //For disposable cuffs var/ignoresClumsy = FALSE diff --git a/code/game/objects/items/weapons/holy_weapons.dm b/code/game/objects/items/weapons/holy_weapons.dm index 0f30d33d7b4..2b73367cd69 100644 --- a/code/game/objects/items/weapons/holy_weapons.dm +++ b/code/game/objects/items/weapons/holy_weapons.dm @@ -266,9 +266,11 @@ possessed = TRUE - var/list/mob/dead/observer/candidates = SSghost_spawns.poll_candidates("Do you want to play as the spirit of [user.real_name]'s blade?", ROLE_PAI, FALSE, 10 SECONDS, source = src) + var/list/mob/dead/observer/candidates = SSghost_spawns.poll_candidates("Do you want to play as the spirit of [user.real_name]'s blade?", ROLE_PAI, FALSE, 10 SECONDS, source = src, role_cleanname = "possessed blade") var/mob/dead/observer/theghost = null + if(QDELETED(src)) + return if(length(candidates)) theghost = pick(candidates) var/mob/living/simple_animal/shade/sword/S = new(src) diff --git a/code/game/objects/items/weapons/implants/implant_freedom.dm b/code/game/objects/items/weapons/implants/implant_freedom.dm index 62e71479884..6706be167b5 100644 --- a/code/game/objects/items/weapons/implants/implant_freedom.dm +++ b/code/game/objects/items/weapons/implants/implant_freedom.dm @@ -13,6 +13,15 @@ if(iscarbon(imp_in)) var/mob/living/carbon/C_imp_in = imp_in C_imp_in.uncuff() + for(var/obj/item/grab/G in C_imp_in.grabbed_by) + var/mob/living/carbon/M = G.assailant + C_imp_in.visible_message("[C_imp_in] suddenly shocks [M] from their wrists and slips out of their grab!") + M.Stun(1) //Drops the grab + M.apply_damage(2, BURN, "r_hand", M.run_armor_check("r_hand", "energy")) + M.apply_damage(2, BURN, "l_hand", M.run_armor_check("l_hand", "energy")) + C_imp_in.SetStunned(0) //This only triggers if they are grabbed, to have them break out of the grab, without the large stun time. + C_imp_in.SetWeakened(0) + playsound(C_imp_in.loc, "sound/weapons/Egloves.ogg", 75, 1) if(!uses) qdel(src) diff --git a/code/game/objects/items/weapons/kitchen.dm b/code/game/objects/items/weapons/kitchen.dm index 0cf57c7b7a4..82334c986a0 100644 --- a/code/game/objects/items/weapons/kitchen.dm +++ b/code/game/objects/items/weapons/kitchen.dm @@ -31,7 +31,7 @@ flags = CONDUCT attack_verb = list("attacked", "stabbed", "poked") hitsound = 'sound/weapons/bladeslice.ogg' - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 30) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 30) sharp = 0 var/max_contents = 1 @@ -114,7 +114,7 @@ materials = list(MAT_METAL=12000) attack_verb = list("slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") sharp = TRUE - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 50) var/bayonet = FALSE //Can this be attached to a gun? /obj/item/kitchen/knife/suicide_act(mob/user) @@ -198,7 +198,7 @@ materials = list() origin_tech = "biotech=3;combat=2" attack_verb = list("shanked", "shivved") - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 0, ACID = 0) /* diff --git a/code/game/objects/items/weapons/melee/energy.dm b/code/game/objects/items/weapons/melee/energy.dm index 1034ae3ffb4..88195072d3e 100644 --- a/code/game/objects/items/weapons/melee/energy.dm +++ b/code/game/objects/items/weapons/melee/energy.dm @@ -12,7 +12,7 @@ hitsound = 'sound/weapons/blade1.ogg' // Probably more appropriate than the previous hitsound. -- Dave usesound = 'sound/weapons/blade1.ogg' max_integrity = 200 - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 30) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 30) resistance_flags = FIRE_PROOF toolspeed = 1 light_power = 2 diff --git a/code/game/objects/items/weapons/pneumaticCannon.dm b/code/game/objects/items/weapons/pneumaticCannon.dm index 379c7403894..66a71ee99a4 100644 --- a/code/game/objects/items/weapons/pneumaticCannon.dm +++ b/code/game/objects/items/weapons/pneumaticCannon.dm @@ -9,7 +9,7 @@ item_state = "bulldog" lefthand_file = 'icons/mob/inhands/guns_lefthand.dmi' righthand_file = 'icons/mob/inhands/guns_righthand.dmi' - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 60, "acid" = 50) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 60, ACID = 50) var/maxWeightClass = 20 //The max weight of items that can fit into the cannon var/loadedWeightClass = 0 //The weight of items currently in the cannon var/obj/item/tank/internals/tank = null //The gas tank that is drawn from to fire things diff --git a/code/game/objects/items/weapons/powerfist.dm b/code/game/objects/items/weapons/powerfist.dm index fe1f549e8ef..9ff9da516cc 100644 --- a/code/game/objects/items/weapons/powerfist.dm +++ b/code/game/objects/items/weapons/powerfist.dm @@ -9,7 +9,7 @@ throwforce = 10 throw_range = 7 w_class = WEIGHT_CLASS_NORMAL - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 40) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 40) resistance_flags = FIRE_PROOF origin_tech = "combat=5;powerstorage=3;syndicate=3" var/click_delay = 1.5 diff --git a/code/game/objects/items/weapons/rpd.dm b/code/game/objects/items/weapons/rpd.dm index 258caf8b424..da12eb8d534 100644 --- a/code/game/objects/items/weapons/rpd.dm +++ b/code/game/objects/items/weapons/rpd.dm @@ -23,7 +23,7 @@ throw_range = 5 w_class = WEIGHT_CLASS_NORMAL materials = list(MAT_METAL = 75000, MAT_GLASS = 37500) - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 50) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 50) resistance_flags = FIRE_PROOF origin_tech = "engineering=4;materials=2" var/datum/effect_system/spark_spread/spark_system diff --git a/code/game/objects/items/weapons/shards.dm b/code/game/objects/items/weapons/shards.dm index 234685f3fe9..9e949b8b2ce 100644 --- a/code/game/objects/items/weapons/shards.dm +++ b/code/game/objects/items/weapons/shards.dm @@ -12,7 +12,7 @@ materials = list(MAT_GLASS = MINERAL_MATERIAL_AMOUNT) attack_verb = list("stabbed", "slashed", "sliced", "cut") hitsound = 'sound/weapons/bladeslice.ogg' - armor = list("melee" = 100, "bullet" = 0, "laser" = 0, "energy" = 100, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 100) + armor = list(MELEE = 100, BULLET = 0, LASER = 0, ENERGY = 100, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 100) max_integrity = 40 resistance_flags = ACID_PROOF sharp = TRUE diff --git a/code/game/objects/items/weapons/shields.dm b/code/game/objects/items/weapons/shields.dm index 86789ca3791..0053054ac85 100644 --- a/code/game/objects/items/weapons/shields.dm +++ b/code/game/objects/items/weapons/shields.dm @@ -1,7 +1,7 @@ /obj/item/shield name = "shield" block_chance = 50 - armor = list("melee" = 50, "bullet" = 50, "laser" = 50, "energy" = 0, "bomb" = 30, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 70) + armor = list(MELEE = 50, BULLET = 50, LASER = 50, ENERGY = 0, BOMB = 30, BIO = 0, RAD = 0, FIRE = 80, ACID = 70) /obj/item/shield/hit_reaction(mob/living/carbon/human/owner, atom/movable/hitby, attack_text = "the attack", final_block_chance = 0, damage = 0, attack_type = MELEE_ATTACK) if(attack_type == THROWN_PROJECTILE_ATTACK) diff --git a/code/game/objects/items/weapons/storage/artistic_toolbox.dm b/code/game/objects/items/weapons/storage/artistic_toolbox.dm deleted file mode 100644 index 3fbaa1d468d..00000000000 --- a/code/game/objects/items/weapons/storage/artistic_toolbox.dm +++ /dev/null @@ -1,223 +0,0 @@ -/obj/item/storage/toolbox/green - name = "artistic toolbox" - desc = "A metal container designed to hold various tools. This variety holds art supplies." - icon_state = "green" - item_state = "artistic_toolbox" - -/obj/item/storage/toolbox/green/memetic - name = "artistic toolbox" - desc = "His Grace." - force = 5 - throwforce = 10 - origin_tech = "combat=4;engineering=4;syndicate=2" - actions_types = list(/datum/action/item_action/toggle) - var/list/servantlinks = list() - var/hunger = 0 - var/hunger_message_level = 0 - var/mob/living/carbon/human/original_owner = null - var/activated = FALSE - -/obj/item/storage/toolbox/green/memetic/ui_action_click(mob/user) - if(user.HasDisease(new /datum/disease/memetic_madness(0))) - var/obj/item/storage/toolbox/green/memetic/M = user.get_active_hand() - if(istype(M)) - to_chat(user, "His Grace [flags & NODROP ? "releases from" : "binds to"] your hand!") - flags ^= NODROP - else if(!activated && loc == user) - if(link_user(user)) - to_chat(user, "Call to His Grace again if you wish it bound to your hand!") - else - to_chat(user, "You can't seem to understand what this does.") - - -/obj/item/storage/toolbox/green/memetic/attack_hand(mob/living/carbon/user) - if(!activated && loc == user) - link_user(user) - return - ..() - -/obj/item/storage/toolbox/green/memetic/proc/link_user(mob/living/carbon/user) - if(ishuman(user) && !user.HasDisease(new /datum/disease/memetic_madness(0))) - activated = TRUE - user.ForceContractDisease(new /datum/disease/memetic_madness(0)) - for(var/datum/disease/memetic_madness/DD in user.viruses) - DD.progenitor = src - servantlinks.Add(DD) - break - force += 4 - throwforce += 4 - SEND_SOUND(user, sound('sound/goonstation/effects/screech.ogg')) - shake_camera(user, 20, 1) - var/acount = 0 - var/amax = rand(10, 15) - var/up_and_down - var/asize = 1 - while(acount <= amax) - up_and_down += "a" - if(acount > (amax * 0.5)) - asize-- - else - asize++ - acount++ - to_chat(user, "[up_and_down]") - to_chat(user, "His Grace accepts thee, spread His will! All who look close to the Enlightened may share His gifts.") - original_owner = user - return TRUE - return FALSE - -/obj/item/storage/toolbox/green/memetic/attackby(obj/item/I, mob/user) - if(activated) - if(istype(I, /obj/item/grab)) - var/obj/item/grab/G = I - var/mob/living/victim = G.affecting - if(!user.HasDisease(new /datum/disease/memetic_madness(0))) - to_chat(user, "You can't seem to find the latch to open this.") - return - if(!victim) - return - if(!victim.stat && !victim.restrained() && !victim.IsWeakened()) - to_chat(user, "They're moving too much to feed to His Grace!") - return - user.visible_message("[user] is trying to feed [victim] to [src]!") - if(!do_mob(user, victim, 30)) - return - - user.visible_message("[user] has fed [victim] to [src]!") - - consume(victim) - qdel(G) - - to_chat(user, "You have done well...") - force += 5 - throwforce += 5 - return - - return ..() - -/obj/item/storage/toolbox/green/memetic/proc/consume(mob/living/L) - if(!L) - return - hunger = 0 - hunger_message_level = 0 - playsound(loc, 'sound/goonstation/misc/burp_alien.ogg', 50, 0) - - if(L != original_owner) - var/list/equipped_items = L.get_equipped_items(TRUE) - if(L.l_hand) - equipped_items += L.l_hand - if(L.r_hand) - equipped_items += L.r_hand - if(equipped_items.len) - var/obj/item/storage/box/B = new(src) - B.name = "Box-'[L.real_name]'" - for(var/obj/item/SI in equipped_items) - L.unEquip(SI, TRUE) - SI.forceMove(B) - equipped_items.Cut() - - L.forceMove(src) - - L.emote("scream") - L.death() - L.ghostize() - if(L == original_owner) - L.unEquip(src, TRUE) - qdel(L) - var/obj/item/storage/toolbox/green/fake_toolbox = new(get_turf(src)) - fake_toolbox.desc = "It looks a lot duller than it used to." - qdel(src) - else - qdel(L) - -/obj/item/storage/toolbox/green/memetic/Destroy() - for(var/datum/disease/memetic_madness/D in servantlinks) - D.cure() - - servantlinks.Cut() - servantlinks = null - original_owner = null - visible_message("[src] screams!") - playsound(loc, 'sound/goonstation/effects/screech.ogg', 100, 1) - return ..() - -/datum/disease/memetic_madness - name = "Memetic Kill Agent" - max_stages = 4 - stage_prob = 8 - spread_text = "Non-Contagious" - spread_flags = SPECIAL - cure_text = "Unknown" - viable_mobtypes = list(/mob/living/carbon/human) - severity = BIOHAZARD - disease_flags = CAN_CARRY - spread_flags = NON_CONTAGIOUS - virus_heal_resistant = TRUE - var/obj/item/storage/toolbox/green/memetic/progenitor = null - -/datum/disease/memetic_madness/Destroy() - if(progenitor) - progenitor.servantlinks.Remove(src) - progenitor = null - if(affected_mob) - affected_mob.status_flags |= CANSTUN | CANWEAKEN | CANPARALYSE - return ..() - -/datum/disease/memetic_madness/stage_act() - ..() - if(!progenitor) //if someone admin spawns this, cure it right away; this should only ever be given directly from the toolbox itself. - cure() - return - if(progenitor in affected_mob.contents) - affected_mob.adjustOxyLoss(-5) - affected_mob.adjustBruteLoss(-12) - affected_mob.adjustFireLoss(-12) - affected_mob.adjustToxLoss(-5) - affected_mob.setStaminaLoss(0) - var/status = CANSTUN | CANWEAKEN | CANPARALYSE - affected_mob.status_flags &= ~status - affected_mob.AdjustDizzy(-10) - affected_mob.AdjustDrowsy(-10) - affected_mob.SetSleeping(0) - affected_mob.SetSlowed(0) - affected_mob.SetConfused(0) - stage = 1 - switch(progenitor.hunger) - if(10 to 60) - if(progenitor.hunger_message_level < 1) - progenitor.hunger_message_level = 1 - to_chat(affected_mob, "Feed Me the unclean ones...They will be purified...") - if(61 to 120) - if(progenitor.hunger_message_level < 2) - progenitor.hunger_message_level = 2 - to_chat(affected_mob, "I hunger for the flesh of the impure...") - if(121 to 210) - if(prob(10) && progenitor.hunger_message_level < 3) - progenitor.hunger_message_level = 3 - to_chat(affected_mob, "The hunger of your Master grows with every passing moment. Feed Me at once.") - if(211 to 399) - if(progenitor.hunger_message_level < 4) - progenitor.hunger_message_level = 4 - to_chat(affected_mob, "His Grace starves in your hands. Feed Me the unclean or suffer.") - if(400 to INFINITY) - affected_mob.visible_message("[progenitor] consumes [affected_mob] whole!") - progenitor.consume(affected_mob) - return - - progenitor.hunger += min(max((progenitor.force / 10), 1), 10) - - else - affected_mob.status_flags |= CANSTUN | CANWEAKEN | CANPARALYSE - - if(stage == 4) - if(get_dist(get_turf(progenitor), get_turf(affected_mob)) <= 7) - stage = 1 - return - if(prob(4)) - to_chat(affected_mob, "You are too far from His Grace...") - affected_mob.adjustToxLoss(5) - else if(prob(6)) - to_chat(affected_mob, "You feel weak.") - affected_mob.adjustBruteLoss(5) - - if(ismob(progenitor.loc)) - progenitor.hunger++ diff --git a/code/game/objects/items/weapons/storage/backpack.dm b/code/game/objects/items/weapons/storage/backpack.dm index cd0997481b6..1976d443ecd 100644 --- a/code/game/objects/items/weapons/storage/backpack.dm +++ b/code/game/objects/items/weapons/storage/backpack.dm @@ -60,7 +60,7 @@ resistance_flags = FIRE_PROOF flags_2 = NO_MAT_REDEMPTION_2 cant_hold = list(/obj/item/storage/backpack/holding) - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 60, "acid" = 50) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 60, ACID = 50) /obj/item/storage/backpack/holding/attackby(obj/item/W, mob/user, params) if(istype(W, /obj/item/storage/backpack/holding)) diff --git a/code/game/objects/items/weapons/storage/bags.dm b/code/game/objects/items/weapons/storage/bags.dm index c89fd8aeb0d..0894c00cf2e 100644 --- a/code/game/objects/items/weapons/storage/bags.dm +++ b/code/game/objects/items/weapons/storage/bags.dm @@ -371,6 +371,7 @@ icon = 'icons/obj/food/containers.dmi' icon_state = "tray" desc = "A metal tray to lay food on." + storage_slots = 8 force = 5 throwforce = 10 throw_speed = 3 diff --git a/code/game/objects/items/weapons/storage/belt.dm b/code/game/objects/items/weapons/storage/belt.dm index 9fb4684f3ff..27ce01bca9e 100644 --- a/code/game/objects/items/weapons/storage/belt.dm +++ b/code/game/objects/items/weapons/storage/belt.dm @@ -231,8 +231,7 @@ /obj/item/holosign_creator/security, /obj/item/melee/classic_baton/telescopic, /obj/item/restraints/legcuffs/bola, - /obj/item/clothing/mask/gas/sechailer, - /obj/item/spacepod_key) + /obj/item/clothing/mask/gas/sechailer) /obj/item/storage/belt/security/sec/populate_contents() new /obj/item/flashlight/seclite(src) @@ -716,7 +715,6 @@ new /obj/item/stack/cable_coil(src) new /obj/item/restraints/handcuffs(src) - new /obj/item/dnainjector/xraymut(src) new /obj/item/dnainjector/firemut(src) new /obj/item/dnainjector/telemut(src) new /obj/item/dnainjector/hulkmut(src) diff --git a/code/game/objects/items/weapons/storage/fancy.dm b/code/game/objects/items/weapons/storage/fancy.dm index 8cc8f5729f2..416a29c7e74 100644 --- a/code/game/objects/items/weapons/storage/fancy.dm +++ b/code/game/objects/items/weapons/storage/fancy.dm @@ -293,6 +293,7 @@ desc = "You can't understand the runes, but the packet smells funny." icon_state = "midoripacket" item_state = "midoripacket" + cigarette_type = /obj/item/clothing/mask/cigarette/rollie/nicotine /obj/item/storage/fancy/cigarettes/cigpack_shadyjims name ="\improper Shady Jim's Super Slims" diff --git a/code/game/objects/items/weapons/storage/toolbox.dm b/code/game/objects/items/weapons/storage/toolbox.dm index db3e97b4154..6e52acb93df 100644 --- a/code/game/objects/items/weapons/storage/toolbox.dm +++ b/code/game/objects/items/weapons/storage/toolbox.dm @@ -132,3 +132,24 @@ new /obj/item/stack/cable_coil(src, 30, paramcolor = pickedcolor) new /obj/item/wirecutters(src) new /obj/item/multitool(src) + +/obj/item/storage/toolbox/artistic + name = "artistic toolbox" + desc = "A toolbox painted bright green. Why anyone would store art supplies in a toolbox is beyond you, but it has plenty of extra space." + icon_state = "green" + item_state = "artistic_toolbox" + w_class = WEIGHT_CLASS_GIGANTIC //Holds more than a regular toolbox! + max_combined_w_class = 20 + storage_slots = 10 + +/obj/item/storage/toolbox/artistic/populate_contents() + new /obj/item/storage/fancy/crayons(src) + new /obj/item/crowbar(src) + new /obj/item/stack/cable_coil(src) + new /obj/item/stack/cable_coil/yellow(src) + new /obj/item/stack/cable_coil/blue(src) + new /obj/item/stack/cable_coil/green(src) + new /obj/item/stack/cable_coil/pink(src) + new /obj/item/stack/cable_coil/orange(src) + new /obj/item/stack/cable_coil/cyan(src) + new /obj/item/stack/cable_coil/white(src) diff --git a/code/game/objects/items/weapons/stunbaton.dm b/code/game/objects/items/weapons/stunbaton.dm index b76b78de12d..8d4b92b6154 100644 --- a/code/game/objects/items/weapons/stunbaton.dm +++ b/code/game/objects/items/weapons/stunbaton.dm @@ -9,7 +9,7 @@ throwforce = 7 origin_tech = "combat=2" attack_verb = list("beaten") - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 50, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 80) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 50, BIO = 0, RAD = 0, FIRE = 80, ACID = 80) /// How many life ticks does the stun last for var/stunforce = 7 /// Is the baton currently turned on @@ -158,7 +158,7 @@ deductcharge(hitcost) return - if(isrobot(M)) // Can't stunbaton borgs + if(issilicon(M)) // Can't stunbaton borgs and AIs return ..() if(!isliving(M)) diff --git a/code/game/objects/items/weapons/tanks/tanks.dm b/code/game/objects/items/weapons/tanks/tanks.dm index df6c3a4c988..62bd83dd263 100644 --- a/code/game/objects/items/weapons/tanks/tanks.dm +++ b/code/game/objects/items/weapons/tanks/tanks.dm @@ -10,7 +10,7 @@ throwforce = 10 throw_speed = 1 throw_range = 4 - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 10, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 30) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 10, BIO = 0, RAD = 0, FIRE = 80, ACID = 30) actions_types = list(/datum/action/item_action/set_internals) var/datum/gas_mixture/air_contents = null var/distribute_pressure = ONE_ATMOSPHERE diff --git a/code/game/objects/items/weapons/tanks/watertank.dm b/code/game/objects/items/weapons/tanks/watertank.dm index f2145970843..5c7b397d2b7 100644 --- a/code/game/objects/items/weapons/tanks/watertank.dm +++ b/code/game/objects/items/weapons/tanks/watertank.dm @@ -10,7 +10,7 @@ slowdown = 1 actions_types = list(/datum/action/item_action/toggle_mister) max_integrity = 200 - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 30) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 30) resistance_flags = FIRE_PROOF var/obj/item/noz diff --git a/code/game/objects/items/weapons/teleportation.dm b/code/game/objects/items/weapons/teleportation.dm index 33aeddeaab0..491dd65ec97 100644 --- a/code/game/objects/items/weapons/teleportation.dm +++ b/code/game/objects/items/weapons/teleportation.dm @@ -22,7 +22,7 @@ throw_speed = 4 throw_range = 20 materials = list(MAT_METAL=400) - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 30, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 30, BIO = 0, RAD = 0, FIRE = 100, ACID = 100) origin_tech = "magnets=3;bluespace=2" /obj/item/locator/attack_self(mob/user as mob) @@ -105,7 +105,7 @@ Frequency: throw_range = 5 materials = list(MAT_METAL=10000) origin_tech = "magnets=3;bluespace=4" - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 30, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 30, BIO = 0, RAD = 0, FIRE = 100, ACID = 100) resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF var/active_portals = 0 diff --git a/code/game/objects/items/weapons/twohanded.dm b/code/game/objects/items/weapons/twohanded.dm index 4d76f796c7e..7fc97eda5cd 100644 --- a/code/game/objects/items/weapons/twohanded.dm +++ b/code/game/objects/items/weapons/twohanded.dm @@ -92,6 +92,11 @@ user.put_in_inactive_hand(O) return TRUE +/obj/item/twohanded/mob_can_equip(mob/M, slot) //Unwields twohanded items when they're attempted to be equipped to another slot + if(wielded) + unwield(M) + return ..() + /obj/item/twohanded/dropped(mob/user) ..() //handles unwielding a twohanded weapon when dropped as well as clearing up the offhand @@ -192,7 +197,7 @@ hitsound = 'sound/weapons/bladeslice.ogg' usesound = 'sound/items/crowbar.ogg' max_integrity = 200 - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 30) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 30) resistance_flags = FIRE_PROOF /obj/item/twohanded/fireaxe/update_icon() //Currently only here to fuck with the on-mob icons. @@ -278,7 +283,7 @@ block_chance = 75 sharp_when_wielded = TRUE // only sharp when wielded max_integrity = 200 - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 70) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 70) resistance_flags = FIRE_PROOF light_power = 2 needs_permit = TRUE @@ -394,7 +399,7 @@ no_spin_thrown = TRUE var/obj/item/grenade/explosive = null max_integrity = 200 - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 30) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 30) needs_permit = TRUE var/icon_prefix = "spearglass" @@ -647,7 +652,7 @@ throwforce = 15 throw_range = 1 w_class = WEIGHT_CLASS_HUGE - armor = list("melee" = 50, "bullet" = 50, "laser" = 50, "energy" = 0, "bomb" = 50, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100) + armor = list(MELEE = 50, BULLET = 50, LASER = 50, ENERGY = 0, BOMB = 50, BIO = 0, RAD = 0, FIRE = 100, ACID = 100) resistance_flags = FIRE_PROOF | ACID_PROOF var/charged = 2 origin_tech = "combat=4;bluespace=4;plasmatech=7" diff --git a/code/game/objects/items/weapons/vending_items.dm b/code/game/objects/items/weapons/vending_items.dm index c4d4d5090e5..b971d9c1926 100644 --- a/code/game/objects/items/weapons/vending_items.dm +++ b/code/game/objects/items/weapons/vending_items.dm @@ -13,7 +13,7 @@ throw_speed = 1 throw_range = 7 w_class = WEIGHT_CLASS_BULKY - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 70, "acid" = 30) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 70, ACID = 30) // Built automatically from the corresponding vending machine. // If null, considered to be full. Otherwise, is list(/typepath = amount). @@ -152,3 +152,61 @@ /obj/item/vending_refill/robotics machine_name = "Robotech Deluxe" icon_state = "refill_engi" + +//Departmental clothing vendors + +/obj/item/vending_refill/secdrobe + machine_name = "SecDrobe" + icon_state = "refill_clothes" + +/obj/item/vending_refill/detdrobe + machine_name = "DetDrobe" + icon_state = "refill_clothes" + +/obj/item/vending_refill/medidrobe + machine_name = "MediDrobe" + icon_state = "refill_clothes" + +/obj/item/vending_refill/virodrobe + machine_name = "ViroDrobe" + icon_state = "refill_clothes" + +/obj/item/vending_refill/chemdrobe + machine_name = "ChemDrobe" + icon_state = "refill_clothes" + +/obj/item/vending_refill/genedrobe + machine_name = "GeneDrobe" + icon_state = "refill_clothes" + +/obj/item/vending_refill/scidrobe + machine_name = "SciDrobe" + icon_state = "refill_clothes" + +/obj/item/vending_refill/robodrobe + machine_name = "RoboDrobe" + icon_state = "refill_clothes" + +/obj/item/vending_refill/engidrobe + machine_name = "EngiDrobe" + icon_state = "refill_clothes" + +/obj/item/vending_refill/atmosdrobe + machine_name = "AtmosDrobe" + icon_state = "refill_clothes" + +/obj/item/vending_refill/cargodrobe + machine_name = "CargoDrobe" + icon_state = "refill_clothes" + +/obj/item/vending_refill/chefdrobe + machine_name = "ChefDrobe" + icon_state = "refill_clothes" + +/obj/item/vending_refill/bardrobe + machine_name = "BarDrobe" + icon_state = "refill_clothes" + +/obj/item/vending_refill/hydrodrobe + machine_name = "HydroDrobe" + icon_state = "refill_clothes" diff --git a/code/game/objects/items/weapons/weaponry.dm b/code/game/objects/items/weapons/weaponry.dm index e79851a8d0c..1e6a2bf4618 100644 --- a/code/game/objects/items/weapons/weaponry.dm +++ b/code/game/objects/items/weapons/weaponry.dm @@ -13,7 +13,7 @@ throw_range = 15 attack_verb = list("banned") max_integrity = 200 - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 70) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 70) resistance_flags = FIRE_PROOF /obj/item/banhammer/suicide_act(mob/user) @@ -57,7 +57,7 @@ attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") block_chance = 50 max_integrity = 200 - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 50) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 50) resistance_flags = FIRE_PROOF /obj/item/claymore/suicide_act(mob/user) @@ -84,7 +84,7 @@ attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut") block_chance = 50 max_integrity = 200 - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 50) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 50) resistance_flags = FIRE_PROOF needs_permit = TRUE diff --git a/code/game/objects/obj_defense.dm b/code/game/objects/obj_defense.dm index b796740a60b..c6a66c2d40e 100644 --- a/code/game/objects/obj_defense.dm +++ b/code/game/objects/obj_defense.dm @@ -21,7 +21,7 @@ ///returns the damage value of the attack after processing the obj's various armor protections /obj/proc/run_obj_armor(damage_amount, damage_type, damage_flag = 0, attack_dir, armour_penetration = 0) - if(damage_flag == "melee" && damage_amount < damage_deflection) + if(damage_flag == MELEE && damage_amount < damage_deflection) return 0 switch(damage_type) if(BRUTE) @@ -48,7 +48,7 @@ /obj/hitby(atom/movable/AM, skipcatch, hitpush, blocked, datum/thrownthing/throwingdatum) ..() - take_damage(AM.throwforce, BRUTE, "melee", 1, get_dir(src, AM)) + take_damage(AM.throwforce, BRUTE, MELEE, 1, get_dir(src, AM)) /obj/ex_act(severity) if(QDELETED(src)) @@ -57,11 +57,11 @@ return switch(severity) if(1) - take_damage(INFINITY, BRUTE, "bomb", 0) + take_damage(INFINITY, BRUTE, BOMB, 0) if(2) - take_damage(rand(100, 250), BRUTE, "bomb", 0) + take_damage(rand(100, 250), BRUTE, BOMB, 0) if(3) - take_damage(rand(10, 90), BRUTE, "bomb", 0) + take_damage(rand(10, 90), BRUTE, BOMB, 0) /obj/bullet_act(obj/item/projectile/P) . = ..() @@ -83,16 +83,16 @@ user.say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!" )) else playsound(src, 'sound/effects/bang.ogg', 50, 1) - take_damage(hulk_damage(), BRUTE, "melee", 0, get_dir(src, user)) + take_damage(hulk_damage(), BRUTE, MELEE, 0, get_dir(src, user)) return TRUE return FALSE /obj/blob_act(obj/structure/blob/B) if(isturf(loc)) var/turf/T = loc - if(T.intact && level == 1) //the blob doesn't destroy thing below the floor + if((T.intact && level == 1) || T.transparent_floor) //the blob doesn't destroy thing below the floor return - take_damage(400, BRUTE, "melee", 0, get_dir(src, B)) + take_damage(400, BRUTE, MELEE, 0, get_dir(src, B)) /obj/proc/attack_generic(mob/user, damage_amount = 0, damage_type = BRUTE, damage_flag = 0, sound_effect = 1, armor_penetration = 0) //used by attack_alien, attack_animal, and attack_slime user.do_attack_animation(src) @@ -100,7 +100,7 @@ return take_damage(damage_amount, damage_type, damage_flag, sound_effect, get_dir(src, user), armor_penetration) /obj/attack_alien(mob/living/carbon/alien/humanoid/user) - if(attack_generic(user, 60, BRUTE, "melee", 0)) + if(attack_generic(user, 60, BRUTE, MELEE, 0)) playsound(loc, 'sound/weapons/slash.ogg', 100, TRUE) /obj/attack_animal(mob/living/simple_animal/M) @@ -112,9 +112,9 @@ if(M.environment_smash) play_soundeffect = 0 if(M.obj_damage) - . = attack_generic(M, M.obj_damage, M.melee_damage_type, "melee", play_soundeffect, M.armour_penetration) + . = attack_generic(M, M.obj_damage, M.melee_damage_type, MELEE, play_soundeffect, M.armour_penetration) else - . = attack_generic(M, rand(M.melee_damage_lower,M.melee_damage_upper), M.melee_damage_type, "melee", play_soundeffect, M.armour_penetration) + . = attack_generic(M, rand(M.melee_damage_lower,M.melee_damage_upper), M.melee_damage_type, MELEE, play_soundeffect, M.armour_penetration) if(. && !play_soundeffect) playsound(src, 'sound/effects/meteorimpact.ogg', 100, TRUE) @@ -132,7 +132,7 @@ /obj/attack_slime(mob/living/simple_animal/slime/user) if(!user.is_adult) return - attack_generic(user, rand(10, 15), BRUTE, "melee", 1) + attack_generic(user, rand(10, 15), BRUTE, MELEE, 1) /obj/mech_melee_attack(obj/mecha/M) M.do_attack_animation(src) @@ -153,7 +153,7 @@ else return 0 M.visible_message("[M.name] hits [src]!", "You hit [src]!") - return take_damage(M.force*3, mech_damtype, "melee", play_soundeffect, get_dir(src, M)) // multiplied by 3 so we can hit objs hard but not be overpowered against mobs. + return take_damage(M.force*3, mech_damtype, MELEE, play_soundeffect, get_dir(src, M)) // multiplied by 3 so we can hit objs hard but not be overpowered against mobs. /obj/singularity_act() ex_act(EXPLODE_DEVASTATE) @@ -183,7 +183,7 @@ GLOBAL_DATUM_INIT(acid_overlay, /mutable_appearance, mutable_appearance('icons/e if(!(resistance_flags & ACID_PROOF)) if(prob(33)) playsound(loc, 'sound/items/welder.ogg', 150, TRUE) - take_damage(min(1 + round(sqrt(acid_level) * 0.3), 300), BURN, "acid", 0) + take_damage(min(1 + round(sqrt(acid_level) * 0.3), 300), BURN, ACID, 0) acid_level = max(acid_level - (5 + 3 * round(sqrt(acid_level))), 0) if(!acid_level) @@ -199,11 +199,11 @@ GLOBAL_DATUM_INIT(acid_overlay, /mutable_appearance, mutable_appearance('icons/e /obj/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume, global_overlay = TRUE) if(isturf(loc)) var/turf/T = loc - if(T.intact && level == 1) //fire can't damage things hidden below the floor. + if((T.intact && level == 1) || T.transparent_floor) //fire can't damage things hidden below the floor. return ..() if(exposed_temperature && !(resistance_flags & FIRE_PROOF)) - take_damage(clamp(0.02 * exposed_temperature, 0, 20), BURN, "fire", 0) + take_damage(clamp(0.02 * exposed_temperature, 0, 20), BURN, FIRE, 0) if(!(resistance_flags & ON_FIRE) && (resistance_flags & FLAMMABLE) && !(resistance_flags & FIRE_PROOF)) resistance_flags |= ON_FIRE SSfires.processing[src] = src @@ -253,9 +253,9 @@ GLOBAL_DATUM_INIT(acid_overlay, /mutable_appearance, mutable_appearance('icons/e ///what happens when the obj's integrity reaches zero. /obj/proc/obj_destruction(damage_flag) - if(damage_flag == "acid") + if(damage_flag == ACID) acid_melt() - else if(damage_flag == "fire") + else if(damage_flag == FIRE) burn() else deconstruct(FALSE) diff --git a/code/game/objects/structures.dm b/code/game/objects/structures.dm index 4d58c90a095..96caf288d2d 100644 --- a/code/game/objects/structures.dm +++ b/code/game/objects/structures.dm @@ -21,7 +21,7 @@ /obj/structure/Initialize(mapload) if(!armor) - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 50) return ..() /obj/structure/Destroy() @@ -59,30 +59,31 @@ /obj/structure/proc/do_climb(mob/living/user) if(!can_touch(user) || !climbable) - return + return FALSE var/blocking_object = density_check() if(blocking_object) to_chat(user, "You cannot climb [src], as it is blocked by \a [blocking_object]!") - return + return FALSE var/turf/T = src.loc - if(!T || !istype(T)) return + if(!T || !istype(T)) return FALSE usr.visible_message("[user] starts climbing onto \the [src]!") climber = user if(!do_after(user, 50, target = src)) climber = null - return + return FALSE if(!can_touch(user) || !climbable) climber = null - return + return FALSE usr.loc = get_turf(src) if(get_turf(user) == get_turf(src)) usr.visible_message("[user] climbs onto \the [src]!") climber = null + return TRUE /obj/structure/proc/structure_shaken() @@ -170,6 +171,6 @@ /obj/structure/zap_act(power, zap_flags) if(zap_flags & ZAP_OBJ_DAMAGE) - take_damage(power / 8000, BURN, "energy") + take_damage(power / 8000, BURN, ENERGY) power -= power / 2000 //walls take a lot out of ya . = ..() diff --git a/code/game/objects/structures/aliens.dm b/code/game/objects/structures/aliens.dm index 4661ff125cc..34eda470895 100644 --- a/code/game/objects/structures/aliens.dm +++ b/code/game/objects/structures/aliens.dm @@ -16,7 +16,7 @@ max_integrity = 100 /obj/structure/alien/run_obj_armor(damage_amount, damage_type, damage_flag = 0, attack_dir) - if(damage_flag == "melee") + if(damage_flag == MELEE) switch(damage_type) if(BRUTE) damage_amount *= 0.25 diff --git a/code/game/objects/structures/barsign.dm b/code/game/objects/structures/barsign.dm index 357a5c0db51..f2253daaa2f 100644 --- a/code/game/objects/structures/barsign.dm +++ b/code/game/objects/structures/barsign.dm @@ -6,7 +6,7 @@ req_access = list(ACCESS_BAR) max_integrity = 500 integrity_failure = 250 - armor = list("melee" = 20, "bullet" = 20, "laser" = 20, "energy" = 100, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50) + armor = list(MELEE = 20, BULLET = 20, LASER = 20, ENERGY = 100, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 50) var/list/barsigns=list() var/list/hiddensigns var/state = 0 diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm index 8a979bd18a7..49e9b4e2f48 100644 --- a/code/game/objects/structures/crates_lockers/closets.dm +++ b/code/game/objects/structures/crates_lockers/closets.dm @@ -6,7 +6,7 @@ density = 1 max_integrity = 200 integrity_failure = 50 - armor = list("melee" = 20, "bullet" = 10, "laser" = 10, "energy" = 0, "bomb" = 10, "bio" = 0, "rad" = 0, "fire" = 70, "acid" = 60) + armor = list(MELEE = 20, BULLET = 10, LASER = 10, ENERGY = 0, BOMB = 10, BIO = 0, RAD = 0, FIRE = 70, ACID = 60) var/icon_closed = "closed" var/icon_opened = "open" var/opened = FALSE diff --git a/code/game/objects/structures/crates_lockers/closets/cardboardbox.dm b/code/game/objects/structures/crates_lockers/closets/cardboardbox.dm index 0345dca3b7f..fdeeab78878 100644 --- a/code/game/objects/structures/crates_lockers/closets/cardboardbox.dm +++ b/code/game/objects/structures/crates_lockers/closets/cardboardbox.dm @@ -75,7 +75,7 @@ if(istype(W, /obj/item/pen)) var/decalselection = input("Please select a decal") as null|anything in list("Atmospherics", "Bartender", "Barber", "Blueshield", "Brig Physician", "Captain", "Cargo", "Chief Engineer", "Chaplain", "Chef", "Chemist", "Civilian", "Clown", "CMO", "Coroner", "Detective", "Engineering", "Genetics", "HOP", - "HOS", "Hydroponics", "Internal Affairs Agent", "Janitor", "Magistrate", "Mechanic", "Medical", "Mime", "Mining", "NT Representative", "Paramedic", "Pod Pilot", + "HOS", "Hydroponics", "Internal Affairs Agent", "Janitor", "Magistrate", "Medical", "Mime", "Mining", "NT Representative", "Paramedic", "Prisoner", "Research Director", "Security", "Syndicate", "Therapist", "Virology", "Warden", "Xenobiology") if(!decalselection) return diff --git a/code/game/objects/structures/crates_lockers/closets/fireaxe.dm b/code/game/objects/structures/crates_lockers/closets/fireaxe.dm index 91a335ed918..d8a2cb5b04b 100644 --- a/code/game/objects/structures/crates_lockers/closets/fireaxe.dm +++ b/code/game/objects/structures/crates_lockers/closets/fireaxe.dm @@ -2,19 +2,23 @@ /obj/structure/closet/fireaxecabinet name = "fire axe cabinet" desc = "There is small label that reads \"For Emergency use only\" along with details for safe use of the axe. As if." - var/obj/item/twohanded/fireaxe/fireaxe = new/obj/item/twohanded/fireaxe + var/obj/item/twohanded/fireaxe/fireaxe icon_state = "fireaxe1000" icon_closed = "fireaxe1000" icon_opened = "fireaxe1100" anchored = TRUE density = FALSE - armor = list("melee" = 50, "bullet" = 20, "laser" = 0, "energy" = 100, "bomb" = 10, "bio" = 100, "rad" = 100, "fire" = 90, "acid" = 50) + armor = list(MELEE = 50, BULLET = 20, LASER = 0, ENERGY = 100, BOMB = 10, BIO = 100, RAD = 100, FIRE = 90, ACID = 50) var/localopened = FALSE //Setting this to keep it from behaviouring like a normal closet and obstructing movement in the map. -Agouri opened = TRUE var/hitstaken = FALSE locked = TRUE var/smashed = FALSE +/obj/structure/closet/fireaxecabinet/populate_contents() + fireaxe = new/obj/item/twohanded/fireaxe(src) + update_icon() // So its initial icon doesn't show it without the fireaxe + /obj/structure/closet/fireaxecabinet/examine(mob/user) . = ..() . += "Use a multitool to lock/unlock it." diff --git a/code/game/objects/structures/crates_lockers/closets/secure/medical.dm b/code/game/objects/structures/crates_lockers/closets/secure/medical.dm index a56c63937e3..555124cbb47 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/medical.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/medical.dm @@ -182,7 +182,7 @@ new /obj/item/clothing/shoes/brown (src) new /obj/item/radio/headset/heads/cmo(src) new /obj/item/clothing/gloves/color/latex/nitrile(src) - new /obj/item/defibrillator/compact/loaded(src) + new /obj/item/defibrillator/compact/advanced/loaded(src) new /obj/item/handheld_defibrillator(src) new /obj/item/storage/belt/medical(src) new /obj/item/flash(src) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm b/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm index 2bf2b03b4a2..0e740548289 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm @@ -9,7 +9,7 @@ broken = 0 can_be_emaged = TRUE max_integrity = 250 - armor = list("melee" = 30, "bullet" = 50, "laser" = 50, "energy" = 100, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 80) + armor = list(MELEE = 30, BULLET = 50, LASER = 50, ENERGY = 100, BOMB = 0, BIO = 0, RAD = 0, FIRE = 80, ACID = 80) damage_deflection = 20 icon_closed = "secure" var/icon_locked = "secure1" diff --git a/code/game/objects/structures/crates_lockers/closets/utility_closets.dm b/code/game/objects/structures/crates_lockers/closets/utility_closets.dm index d39836154b3..d8d3111fbe8 100644 --- a/code/game/objects/structures/crates_lockers/closets/utility_closets.dm +++ b/code/game/objects/structures/crates_lockers/closets/utility_closets.dm @@ -51,10 +51,6 @@ if("delete") qdel(src) - //If you want to re-add fire, just add "fire" = 15 to the pick list. - /*if("fire") - new /obj/structure/closet/firecloset(src.loc) - qdel(src)*/ /obj/structure/closet/emcloset/legacy/populate_contents() new /obj/item/tank/internals/oxygen(src) diff --git a/code/game/objects/structures/crates_lockers/crates.dm b/code/game/objects/structures/crates_lockers/crates.dm index f86c37229c6..b5149bdecbb 100644 --- a/code/game/objects/structures/crates_lockers/crates.dm +++ b/code/game/objects/structures/crates_lockers/crates.dm @@ -169,7 +169,7 @@ var/sparks = "securecratesparks" var/emag = "securecrateemag" max_integrity = 500 - armor = list("melee" = 30, "bullet" = 50, "laser" = 50, "energy" = 100, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 80) + armor = list(MELEE = 30, BULLET = 50, LASER = 50, ENERGY = 100, BOMB = 0, BIO = 0, RAD = 0, FIRE = 80, ACID = 80) damage_deflection = 25 var/tamperproof = FALSE broken = FALSE diff --git a/code/game/objects/structures/displaycase.dm b/code/game/objects/structures/displaycase.dm index 31929110264..04819b9203e 100644 --- a/code/game/objects/structures/displaycase.dm +++ b/code/game/objects/structures/displaycase.dm @@ -6,7 +6,7 @@ density = TRUE anchored = TRUE resistance_flags = ACID_PROOF - armor = list("melee" = 30, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 10, "bio" = 0, "rad" = 0, "fire" = 70, "acid" = 100) + armor = list(MELEE = 30, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 10, BIO = 0, RAD = 0, FIRE = 70, ACID = 100) max_integrity = 200 integrity_failure = 50 var/obj/item/showpiece = null diff --git a/code/game/objects/structures/extinguisher.dm b/code/game/objects/structures/extinguisher.dm index 712378c612e..5b129d485ee 100644 --- a/code/game/objects/structures/extinguisher.dm +++ b/code/game/objects/structures/extinguisher.dm @@ -26,9 +26,9 @@ if(NO_EXTINGUISHER) return if(MINI_EXTINGUISHER) - has_extinguisher = new/obj/item/extinguisher/mini + has_extinguisher = new /obj/item/extinguisher/mini(src) else - has_extinguisher = new/obj/item/extinguisher + has_extinguisher = new /obj/item/extinguisher(src) /obj/structure/extinguisher_cabinet/examine(mob/user) . = ..() diff --git a/code/game/objects/structures/false_walls.dm b/code/game/objects/structures/false_walls.dm index c52338b9e7d..5ee5518af11 100644 --- a/code/game/objects/structures/false_walls.dm +++ b/code/game/objects/structures/false_walls.dm @@ -94,9 +94,9 @@ if(density) smooth = SMOOTH_FALSE clear_smooth_overlays() - icon_state = "fwall_opening" + flick("fwall_opening", src) else - icon_state = "fwall_closing" + flick("fwall_closing", src) /obj/structure/falsewall/update_icon() if(density) @@ -297,6 +297,7 @@ /obj/structure/falsewall/sandstone name = "sandstone wall" desc = "A wall with sandstone plating." + icon = 'icons/turf/walls/sandstone_wall.dmi' icon_state = "sandstone" mineral = /obj/item/stack/sheet/mineral/sandstone walltype = /turf/simulated/wall/mineral/sandstone diff --git a/code/game/objects/structures/fence.dm b/code/game/objects/structures/fence.dm new file mode 100644 index 00000000000..103ae32b58c --- /dev/null +++ b/code/game/objects/structures/fence.dm @@ -0,0 +1,223 @@ +//Chain link fences +//Sprites ported from /VG/ + +#define CUT_TIME 100 +#define CLIMB_TIME 150 +#define FULL_CUT_TIME 300 + +#define NO_HOLE 0 //section is intact +#define MEDIUM_HOLE 1 //medium hole in the section - can climb through +#define LARGE_HOLE 2 //large hole in the section - can walk through +#define MAX_HOLE_SIZE LARGE_HOLE +#define HOLE_REPAIR (hole_size * 2) //How many rods to fix these sections + +/obj/structure/fence + name = "fence" + desc = "A chain link fence. Not as effective as a wall, but generally it keeps people out." + density = TRUE + anchored = TRUE + + icon = 'icons/obj/fence.dmi' + icon_state = "straight" + + var/cuttable = TRUE + var/hole_size = NO_HOLE + var/invulnerable = FALSE + var/shock_cooldown = FALSE + +/obj/structure/fence/Initialize() + . = ..() + update_cut_status() + +/obj/structure/fence/examine(mob/user) + . = ..() + switch(hole_size) + if(MEDIUM_HOLE) + . += "There is a large hole in \the [src]." + if(LARGE_HOLE) + . += "\The [src] has been completely cut through." + +/obj/structure/fence/end + icon_state = "end" + cuttable = FALSE + +/obj/structure/fence/corner + icon_state = "corner" + cuttable = FALSE + +/obj/structure/fence/post + icon_state = "post" + cuttable = FALSE + +/obj/structure/fence/cut/medium + icon_state = "straight_cut2" + hole_size = MEDIUM_HOLE + climbable = TRUE + +/obj/structure/fence/cut/large + icon_state = "straight_cut3" + hole_size = LARGE_HOLE + +/obj/structure/fence/CanPass(atom/movable/mover, turf/target) + if(istype(mover) && mover.checkpass(PASSFENCE)) + return TRUE + if(istype(mover, /obj/item/projectile)) + return TRUE + if(!density) + return TRUE + return FALSE + +/* + Shock user with probability prb (if all connections & power are working) + Returns TRUE if shocked, FALSE otherwise + Totally not stolen from code\game\objects\structures\grille.dm +*/ +/obj/structure/fence/proc/shock(mob/user, prb) + if(!prob(prb)) + return FALSE + if(!in_range(src, user)) //To prevent TK and mech users from getting shocked + return FALSE + var/turf/T = get_turf(src) + var/obj/structure/cable/C = T.get_cable_node() + if(C) + if(electrocute_mob(user, C, src, 1, TRUE)) + do_sparks(3, 1, src) + return TRUE + return FALSE + +/obj/structure/fence/wirecutter_act(mob/living/user, obj/item/W) + . = TRUE + if(shock(user, 100)) + return + if(invulnerable) + to_chat(user, "This fence is too strong to cut through!") + return + if(!cuttable) + user.visible_message("[user] starts dismantling [src] with [W].",\ + "You start dismantling [src] with [W].") + if(W.use_tool(src, user, FULL_CUT_TIME, volume = W.tool_volume)) + user.visible_message("[user] completely dismantles [src].",\ + "You completely dismantle [src].") + qdel(src) + return + var/current_stage = hole_size + user.visible_message("[user] starts cutting through [src] with [W].",\ + "You start cutting through [src] with [W].") + if(W.use_tool(src, user, CUT_TIME * W.toolspeed, volume = W.tool_volume)) + if(current_stage == hole_size) + switch(hole_size) + if(NO_HOLE) + user.visible_message("[user] cuts into [src] some more.",\ + "You could probably fit yourself through that hole now. Although climbing through would be much faster if you made it even bigger.") + hole_size = MEDIUM_HOLE + if(MEDIUM_HOLE) + user.visible_message("[user] completely cuts through [src].",\ + "The hole in [src] is now big enough to walk through.") + hole_size = LARGE_HOLE + if(LARGE_HOLE) + user.visible_message("[user] completely dismantles [src].",\ + "You completely take apart [src].") + qdel(src) + return + update_cut_status() + +/obj/structure/fence/attackby(obj/item/C, mob/user) + if(shock(user, 90)) + return + if(istype(C, /obj/item/stack/rods)) + if(hole_size == NO_HOLE) + return + var/obj/item/stack/rods/R = C + if(R.get_amount() < HOLE_REPAIR) + to_chat(user, "You need [HOLE_REPAIR] rods to fix this fence!") + return + to_chat(user, "You begin repairing the fence...") + if(do_after(user, 3 SECONDS * C.toolspeed, target = src) && hole_size != NO_HOLE && R.use(HOLE_REPAIR)) + playsound(src, C.usesound, 80, 1) + hole_size = NO_HOLE + obj_integrity = max_integrity + to_chat(user, "You repair the fence.") + update_cut_status() + return + . = ..() + +/obj/structure/fence/Bumped(atom/user) + if(!ismob(user)) + return + if(shock_cooldown) + return + shock(user, 70) + shock_cooldown = TRUE // We do not want bump shock spam! + addtimer(CALLBACK(src, .proc/shock_cooldown), 1 SECONDS, TIMER_UNIQUE | TIMER_OVERRIDE) + +/obj/structure/fence/proc/shock_cooldown() + shock_cooldown = FALSE + +/obj/structure/fence/attack_animal(mob/user) + . = ..() + if(. && !QDELETED(src) && !shock(user, 70)) + take_damage(rand(5,10), BRUTE, "melee", 1) + +/obj/structure/fence/proc/update_cut_status() + if(!cuttable) + return + var/new_density = TRUE + switch(hole_size) + if(NO_HOLE) + icon_state = initial(icon_state) + climbable = FALSE + if(MEDIUM_HOLE) + icon_state = "straight_cut2" + climbable = TRUE + if(LARGE_HOLE) + icon_state = "straight_cut3" + new_density = FALSE + climbable = FALSE + set_density(new_density) + +//FENCE DOORS + +/obj/structure/fence/door + name = "fence door" + desc = "Not very useful without a real lock." + icon_state = "door_closed" + cuttable = FALSE + var/open = FALSE + +/obj/structure/fence/door/Initialize() + . = ..() + update_door_status() + +/obj/structure/fence/door/opened + icon_state = "door_opened" + open = TRUE + density = TRUE + +/obj/structure/fence/door/attack_hand(mob/user, list/modifiers) + shock(user, 70) + if(can_open(user)) + toggle(user) + return TRUE + +/obj/structure/fence/door/proc/toggle(mob/user) + open = !open + visible_message("\The [user] [open ? "opens" : "closes"] \the [src].") + update_door_status() + playsound(src, 'sound/machines/door_open.ogg', 100, TRUE) + +/obj/structure/fence/door/proc/update_door_status() + set_density(!open) + icon_state = open ? "door_opened" : "door_closed" + +/obj/structure/fence/door/proc/can_open(mob/user) + return TRUE + +#undef CUT_TIME +#undef CLIMB_TIME +#undef FULL_CUT_TIME + +#undef NO_HOLE +#undef MEDIUM_HOLE +#undef LARGE_HOLE +#undef MAX_HOLE_SIZE +#undef HOLE_REPAIR diff --git a/code/game/objects/structures/grille.dm b/code/game/objects/structures/grille.dm index 635529d5bd7..d8b572b3d3d 100644 --- a/code/game/objects/structures/grille.dm +++ b/code/game/objects/structures/grille.dm @@ -10,7 +10,7 @@ pressure_resistance = 5*ONE_ATMOSPHERE layer = BELOW_OBJ_LAYER level = 3 - armor = list("melee" = 50, "bullet" = 70, "laser" = 70, "energy" = 100, "bomb" = 10, "bio" = 100, "rad" = 100, "fire" = 0, "acid" = 0) + armor = list(MELEE = 50, BULLET = 70, LASER = 70, ENERGY = 100, BOMB = 10, BIO = 100, RAD = 100, FIRE = 0, ACID = 0) max_integrity = 50 integrity_failure = 20 var/rods_type = /obj/item/stack/rods @@ -69,7 +69,7 @@ /obj/structure/grille/attack_animal(mob/user) . = ..() if(. && !QDELETED(src) && !shock(user, 70)) - take_damage(rand(5,10), BRUTE, "melee", 1) + take_damage(rand(5,10), BRUTE, MELEE, 1) /obj/structure/grille/hulk_damage() return 60 @@ -88,14 +88,14 @@ user.do_attack_animation(src, ATTACK_EFFECT_KICK) user.visible_message("[user] hits [src].") if(!shock(user, 70)) - take_damage(rand(5,10), BRUTE, "melee", 1) + take_damage(rand(5,10), BRUTE, MELEE, 1) /obj/structure/grille/attack_alien(mob/living/user) user.do_attack_animation(src) user.changeNext_move(CLICK_CD_MELEE) user.visible_message("[user] mangles [src].") if(!shock(user, 70)) - take_damage(20, BRUTE, "melee", 1) + take_damage(20, BRUTE, MELEE, 1) /obj/structure/grille/CanPass(atom/movable/mover, turf/target, height=0) if(height==0) diff --git a/code/game/objects/structures/holosign.dm b/code/game/objects/structures/holosign.dm index 211dec106b3..13b5ba64140 100644 --- a/code/game/objects/structures/holosign.dm +++ b/code/game/objects/structures/holosign.dm @@ -6,7 +6,7 @@ icon = 'icons/effects/effects.dmi' anchored = TRUE max_integrity = 1 - armor = list("melee" = 0, "bullet" = 50, "laser" = 50, "energy" = 50, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 20, "acid" = 20) + armor = list(MELEE = 0, BULLET = 50, LASER = 50, ENERGY = 50, BOMB = 0, BIO = 0, RAD = 0, FIRE = 20, ACID = 20) var/obj/item/holosign_creator/projector /obj/structure/holosign/Initialize(mapload, source_projector) @@ -27,7 +27,7 @@ return user.do_attack_animation(src) user.changeNext_move(CLICK_CD_MELEE) - take_damage(5 , BRUTE, "melee", 1) + take_damage(5 , BRUTE, MELEE, 1) /obj/structure/holosign/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0) switch(damage_type) @@ -97,11 +97,11 @@ allow_walk = FALSE /obj/structure/holosign/barrier/cyborg/bullet_act(obj/item/projectile/P) - take_damage((P.damage / 5) , BRUTE, "melee", 1) //Doesn't really matter what damage flag it is. + take_damage((P.damage / 5) , BRUTE, MELEE, 1) //Doesn't really matter what damage flag it is. if(istype(P, /obj/item/projectile/energy/electrode)) - take_damage(10, BRUTE, "melee", 1) //Tasers aren't harmful. + take_damage(10, BRUTE, MELEE, 1) //Tasers aren't harmful. if(istype(P, /obj/item/projectile/beam/disabler)) - take_damage(5, BRUTE, "melee", 1) //Disablers aren't harmful. + take_damage(5, BRUTE, MELEE, 1) //Disablers aren't harmful. /obj/structure/holosign/barrier/cyborg/hacked name = "Charged Energy Field" @@ -110,7 +110,7 @@ var/shockcd = 0 /obj/structure/holosign/barrier/cyborg/hacked/bullet_act(obj/item/projectile/P) - take_damage(P.damage, BRUTE, "melee", 1) //Yeah no this doesn't get projectile resistance. + take_damage(P.damage, BRUTE, MELEE, 1) //Yeah no this doesn't get projectile resistance. /obj/structure/holosign/barrier/cyborg/hacked/proc/cooldown() shockcd = FALSE diff --git a/code/game/objects/structures/lattice.dm b/code/game/objects/structures/lattice.dm index 6dde2bcc132..f43c3c2c1c9 100644 --- a/code/game/objects/structures/lattice.dm +++ b/code/game/objects/structures/lattice.dm @@ -5,7 +5,7 @@ icon_state = "lattice" density = FALSE anchored = TRUE - armor = list("melee" = 50, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 50) + armor = list(MELEE = 50, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 80, ACID = 50) max_integrity = 50 layer = LATTICE_LAYER //under pipes plane = FLOOR_PLANE diff --git a/code/game/objects/structures/mineral_doors.dm b/code/game/objects/structures/mineral_doors.dm index bde75bb489d..c04f10b6f04 100644 --- a/code/game/objects/structures/mineral_doors.dm +++ b/code/game/objects/structures/mineral_doors.dm @@ -8,7 +8,7 @@ icon = 'icons/obj/doors/mineral_doors.dmi' icon_state = "metal" max_integrity = 200 - armor = list("melee" = 10, "bullet" = 0, "laser" = 0, "energy" = 100, "bomb" = 10, "bio" = 100, "rad" = 100, "fire" = 50, "acid" = 50) + armor = list(MELEE = 10, BULLET = 0, LASER = 0, ENERGY = 100, BOMB = 10, BIO = 100, RAD = 100, FIRE = 50, ACID = 50) flags_2 = RAD_PROTECT_CONTENTS_2 | RAD_NO_CONTAMINATE_2 rad_insulation = RAD_MEDIUM_INSULATION var/initial_state diff --git a/code/game/objects/structures/railings.dm b/code/game/objects/structures/railings.dm new file mode 100644 index 00000000000..82eb1335d10 --- /dev/null +++ b/code/game/objects/structures/railings.dm @@ -0,0 +1,161 @@ +/obj/structure/railing + name = "railing" + desc = "Basic railing meant to protect idiots like you from falling." + icon = 'icons/obj/fence.dmi' + icon_state = "railing" + density = TRUE + anchored = TRUE + pass_flags = LETPASSTHROW + climbable = TRUE + layer = ABOVE_MOB_LAYER + var/currently_climbed = FALSE + var/mover_dir = null + +/obj/structure/railing/corner //aesthetic corner sharp edges hurt oof ouch + icon_state = "railing_corner" + density = FALSE + climbable = FALSE + +/obj/structure/railing/attackby(obj/item/I, mob/living/user, params) + ..() + add_fingerprint(user) + +/obj/structure/railing/welder_act(mob/living/user, obj/item/I) + if(user.intent != INTENT_HELP) + return + if(obj_integrity >= max_integrity) + to_chat(user, "[src] is already in good condition!") + return + if(!I.tool_start_check(user, amount = 0)) + return + to_chat(user, "You begin repairing [src]...") + if(I.use_tool(src, user, 40, volume = 50)) + obj_integrity = max_integrity + to_chat(user, "You repair [src].") + +/obj/structure/railing/wirecutter_act(mob/living/user, obj/item/I) + if(anchored) + return + to_chat(user, "You cut apart the railing.") + I.play_tool_sound(src, 100) + deconstruct() + return TRUE + +/obj/structure/railing/deconstruct(disassembled) + if(!(flags & NODECONSTRUCT)) + var/obj/item/stack/rods/rod = new /obj/item/stack/rods(drop_location(), 3) + transfer_fingerprints_to(rod) + return ..() + +///Implements behaviour that makes it possible to unanchor the railing. +/obj/structure/railing/wrench_act(mob/living/user, obj/item/I) + if(flags & NODECONSTRUCT) + return + to_chat(user, "You begin to [anchored ? "unfasten the railing from":"fasten the railing to"] the floor...") + if(I.use_tool(src, user, volume = 75, extra_checks = CALLBACK(src, .proc/check_anchored, anchored))) + anchored = !anchored + to_chat(user, "You [anchored ? "fasten the railing to":"unfasten the railing from"] the floor.") + return TRUE + +/obj/structure/railing/corner/CanPass() + return TRUE + +/obj/structure/railing/corner/CheckExit() + return TRUE + +/obj/structure/railing/CanPass(atom/movable/mover, turf/target) + if(istype(mover) && mover.checkpass(PASSFENCE)) + return TRUE + if(istype(mover, /obj/item/projectile)) + return TRUE + if(ismob(mover)) + var/mob/M = mover + if(M.flying) + return TRUE + if(mover.throwing) + return TRUE + mover_dir = get_dir(loc, target) + //Due to how the other check is done, it would always return density for ordinal directions no matter what + if(ordinal_direction_check()) + return FALSE + if(mover_dir != dir) + return density + return FALSE + +/obj/structure/railing/CheckExit(atom/movable/O, target) + var/mob/living/M = O + if(istype(O) && O.checkpass(PASSFENCE)) + return TRUE + if(istype(O, /obj/item/projectile)) + return TRUE + if(ismob(O)) + if(M.flying || M.floating) + return TRUE + if(O.throwing) + return TRUE + if(O.move_force >= MOVE_FORCE_EXTREMELY_STRONG) + return TRUE + if(currently_climbed) + return TRUE + mover_dir = get_dir(O.loc, target) + if(mover_dir == dir) + return FALSE + if(ordinal_direction_check()) + return FALSE + return TRUE + +// Checks if the direction the mob is trying to move towards would be blocked by a corner railing +/obj/structure/railing/proc/ordinal_direction_check() + switch(dir) + if(5) + if(mover_dir == 1 || mover_dir == 4) + return TRUE + if(6) + if(mover_dir == 2 || mover_dir == 4) + return TRUE + if(9) + if(mover_dir == 1 || mover_dir == 8) + return TRUE + if(10) + if(mover_dir == 2 || mover_dir == 8) + return TRUE + return FALSE + +/obj/structure/railing/do_climb(mob/living/user) + var/initial_mob_loc = get_turf(user) + . = ..() + if(.) + currently_climbed = TRUE + if(initial_mob_loc != get_turf(src)) // If we are on the railing, we want to move in the same dir as the railing. Otherwise we get put on the railing + currently_climbed = FALSE + return + user.Move(get_step(user, dir), TRUE) + currently_climbed = FALSE + +/obj/structure/railing/proc/can_be_rotated(mob/user) + if(anchored) + to_chat(user, "[src] cannot be rotated while it is fastened to the floor!") + return FALSE + + var/target_dir = turn(dir, -45) + + if(!valid_window_location(loc, target_dir)) //Expanded to include rails, as well! + to_chat(user, "[src] cannot be rotated in that direction!") + return FALSE + return TRUE + +/obj/structure/railing/proc/check_anchored(checked_anchored) + if(anchored == checked_anchored) + return TRUE + +/obj/structure/railing/proc/after_rotation(mob/user) + add_fingerprint(user) + +/obj/structure/railing/AltClick(mob/user) + if(user.incapacitated()) + to_chat(user, "You can't do that right now!") + return + if(!Adjacent(user)) + return + if(can_be_rotated(user)) + setDir(turn(dir, 45)) diff --git a/code/game/objects/structures/safe.dm b/code/game/objects/structures/safe.dm index 4266d6ef254..36f33388f50 100644 --- a/code/game/objects/structures/safe.dm +++ b/code/game/objects/structures/safe.dm @@ -175,6 +175,8 @@ GLOBAL_LIST_EMPTY(safes) /obj/structure/safe/attackby(obj/item/I, mob/user, params) if(open) + if(I.flags && ABSTRACT) + return if(broken && istype(I, /obj/item/safe_internals) && do_after(user, 2 SECONDS, target = src)) to_chat(user, "You replace the broken mechanism.") qdel(I) @@ -368,7 +370,8 @@ GLOBAL_LIST_EMPTY(safes) /obj/structure/safe/floor/Initialize() . = ..() var/turf/T = loc - hide(T.intact) + if(!T.transparent_floor) + hide(T.intact) /obj/structure/safe/floor/hide(intact) invisibility = intact ? INVISIBILITY_MAXIMUM : 0 diff --git a/code/game/objects/structures/signs.dm b/code/game/objects/structures/signs.dm index 896ed8e5134..e54e58bd893 100644 --- a/code/game/objects/structures/signs.dm +++ b/code/game/objects/structures/signs.dm @@ -5,7 +5,7 @@ density = 0 layer = 3.5 max_integrity = 100 - armor = list("melee" = 50, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50) + armor = list(MELEE = 50, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 50) flags_2 = RAD_PROTECT_CONTENTS_2 | RAD_NO_CONTAMINATE_2 /obj/structure/sign/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0) diff --git a/code/game/objects/structures/stool_bed_chair_nest/wheelchair.dm b/code/game/objects/structures/stool_bed_chair_nest/wheelchair.dm index 1a162c250fa..8c0dd7ef830 100644 --- a/code/game/objects/structures/stool_bed_chair_nest/wheelchair.dm +++ b/code/game/objects/structures/stool_bed_chair_nest/wheelchair.dm @@ -4,6 +4,7 @@ item_chair = null anchored = FALSE movable = TRUE + buildstackamount = 15 var/move_delay = null @@ -75,7 +76,7 @@ if(!has_buckled_mobs()) return var/mob/living/buckled_mob = buckled_mobs[1] - if(istype(A, /obj/machinery/door)) + if(istype(A, /obj/machinery/door) || istype(A, /obj/machinery/gateway)) A.Bumped(buckled_mob) if(propelled) diff --git a/code/game/objects/structures/tables_racks.dm b/code/game/objects/structures/tables_racks.dm index f6562d44c1f..2810e9d21e3 100644 --- a/code/game/objects/structures/tables_racks.dm +++ b/code/game/objects/structures/tables_racks.dm @@ -389,7 +389,7 @@ canSmoothWith = null max_integrity = 70 resistance_flags = ACID_PROOF - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 100) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 80, ACID = 100) var/list/debris = list() /obj/structure/table/glass/Initialize(mapload) @@ -530,7 +530,7 @@ canSmoothWith = list(/obj/structure/table/reinforced, /obj/structure/table) max_integrity = 200 integrity_failure = 50 - armor = list("melee" = 10, "bullet" = 30, "laser" = 30, "energy" = 100, "bomb" = 20, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 70) + armor = list(MELEE = 10, BULLET = 30, LASER = 30, ENERGY = 100, BOMB = 20, BIO = 0, RAD = 0, FIRE = 80, ACID = 70) /obj/structure/table/reinforced/deconstruction_hints(mob/user) if(deconstruction_ready) @@ -708,7 +708,7 @@ user.do_attack_animation(src, ATTACK_EFFECT_KICK) user.visible_message("[user] kicks [src].", \ "You kick [src].") - take_damage(rand(4,8), BRUTE, "melee", 1) + take_damage(rand(4,8), BRUTE, MELEE, 1) /obj/structure/rack/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0) switch(damage_type) diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm index a2d13ad8afb..3da55a8f17e 100644 --- a/code/game/objects/structures/window.dm +++ b/code/game/objects/structures/window.dm @@ -11,7 +11,7 @@ can_be_unanchored = TRUE max_integrity = 25 resistance_flags = ACID_PROOF - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 100) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 80, ACID = 100) rad_insulation = RAD_VERY_LIGHT_INSULATION var/ini_dir = null var/state = WINDOW_OUT_OF_FRAME @@ -27,6 +27,8 @@ var/real_explosion_block //ignore this, just use explosion_block var/breaksound = "shatter" var/hitsound = 'sound/effects/Glasshit.ogg' + /// Used to restore colours from polarised glass + var/old_color /obj/structure/window/examine(mob/user) . = ..() @@ -69,6 +71,17 @@ air_update_turf(TRUE) +/obj/structure/window/proc/toggle_polarization() + if(opacity) + if(!old_color) + old_color = "#FFFFFF" + animate(src, color = old_color, time = 0.5 SECONDS) + set_opacity(FALSE) + else + old_color = color + animate(src, color = "#222222", time = 0.5 SECONDS) + set_opacity(TRUE) + /obj/structure/window/narsie_act() color = NARSIE_WINDOW_COLOUR @@ -474,7 +487,7 @@ icon_state = "rwindow" reinf = TRUE heat_resistance = 1600 - armor = list("melee" = 50, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 25, "bio" = 100, "rad" = 100, "fire" = 80, "acid" = 100) + armor = list(MELEE = 50, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 25, BIO = 100, RAD = 100, FIRE = 80, ACID = 100) rad_insulation = RAD_HEAVY_INSULATION max_integrity = 50 explosion_block = 1 @@ -495,16 +508,9 @@ /obj/structure/window/reinforced/polarized name = "electrochromic window" desc = "Adjusts its tint with voltage. Might take a few good hits to shatter it." + glass_amount = 2 var/id -/obj/structure/window/reinforced/polarized/proc/toggle() - if(opacity) - animate(src, color="#FFFFFF", time=5) - set_opacity(0) - else - animate(src, color="#222222", time=5) - set_opacity(1) - /obj/machinery/button/windowtint name = "window tint control" icon = 'icons/obj/power.dmi' @@ -514,12 +520,35 @@ var/id = 0 var/active = 0 +/obj/machinery/button/windowtint/Initialize(mapload, w_dir = null) + . = ..() + switch(w_dir) + if(NORTH) + pixel_y = 25 + if(SOUTH) + pixel_y = -25 + if(EAST) + pixel_x = 25 + if(WEST) + pixel_x = -25 + /obj/machinery/button/windowtint/attack_hand(mob/user) if(..()) - return 1 + return TRUE toggle_tint() +/obj/machinery/button/windowtint/wrench_act(mob/user, obj/item/I) + . = TRUE + if(!I.tool_use_check(user, 0)) + return + user.visible_message("[user] starts unwrenching [src] from the wall...", "You are unwrenching [src] from the wall...", "You hear ratcheting.") + if(!I.use_tool(src, user, 50, volume = I.tool_volume)) + return + WRENCH_UNANCHOR_WALL_MESSAGE + new /obj/item/mounted/frame/light_switch/windowtint(get_turf(src)) + qdel(src) + /obj/machinery/button/windowtint/proc/toggle_tint() use_power(5) @@ -528,9 +557,11 @@ for(var/obj/structure/window/reinforced/polarized/W in range(src,range)) if(W.id == src.id || !W.id) - spawn(0) - W.toggle() - return + W.toggle_polarization() + + for(var/obj/structure/window/full/reinforced/polarized/W in range(src, range)) + if(W.id == id || !W.id) + W.toggle_polarization() /obj/machinery/button/windowtint/power_change() ..() @@ -550,7 +581,7 @@ heat_resistance = 32000 max_integrity = 150 explosion_block = 1 - armor = list("melee" = 75, "bullet" = 5, "laser" = 0, "energy" = 0, "bomb" = 45, "bio" = 100, "rad" = 100, "fire" = 99, "acid" = 100) + armor = list(MELEE = 75, BULLET = 5, LASER = 0, ENERGY = 0, BOMB = 45, BIO = 100, RAD = 100, FIRE = 99, ACID = 100) rad_insulation = RAD_NO_INSULATION /obj/structure/window/plasmabasic/BlockSuperconductivity() @@ -566,7 +597,7 @@ reinf = TRUE max_integrity = 500 explosion_block = 2 - armor = list("melee" = 85, "bullet" = 20, "laser" = 0, "energy" = 0, "bomb" = 60, "bio" = 100, "rad" = 100, "fire" = 99, "acid" = 100) + armor = list(MELEE = 85, BULLET = 20, LASER = 0, ENERGY = 0, BOMB = 60, BIO = 100, RAD = 100, FIRE = 99, ACID = 100) rad_insulation = RAD_NO_INSULATION damage_deflection = 21 @@ -589,7 +620,7 @@ icon_state = "window" max_integrity = 50 smooth = SMOOTH_TRUE - canSmoothWith = list(/obj/structure/window/full/basic, /obj/structure/window/full/reinforced, /obj/structure/window/full/reinforced/tinted, /obj/structure/window/full/plasmabasic, /obj/structure/window/full/plasmareinforced, /turf/simulated/wall/indestructible/fakeglass) + canSmoothWith = list(/obj/structure/window/full/basic, /obj/structure/window/full/reinforced, /obj/structure/window/full/reinforced/polarized, /obj/structure/window/full/reinforced/tinted, /obj/structure/window/full/plasmabasic, /obj/structure/window/full/plasmareinforced, /turf/simulated/wall/indestructible/fakeglass) /obj/structure/window/full/plasmabasic name = "plasma window" @@ -602,9 +633,9 @@ heat_resistance = 32000 max_integrity = 300 smooth = SMOOTH_TRUE - canSmoothWith = list(/obj/structure/window/full/basic, /obj/structure/window/full/reinforced, /obj/structure/window/full/reinforced/tinted, /obj/structure/window/full/plasmabasic, /obj/structure/window/full/plasmareinforced, /turf/simulated/wall/indestructible/fakeglass) + canSmoothWith = list(/obj/structure/window/full/basic, /obj/structure/window/full/reinforced, /obj/structure/window/full/reinforced/polarized, /obj/structure/window/full/reinforced/tinted, /obj/structure/window/full/plasmabasic, /obj/structure/window/full/plasmareinforced, /turf/simulated/wall/indestructible/fakeglass) explosion_block = 1 - armor = list("melee" = 75, "bullet" = 5, "laser" = 0, "energy" = 0, "bomb" = 45, "bio" = 100, "rad" = 100, "fire" = 99, "acid" = 100) + armor = list(MELEE = 75, BULLET = 5, LASER = 0, ENERGY = 0, BOMB = 45, BIO = 100, RAD = 100, FIRE = 99, ACID = 100) rad_insulation = RAD_NO_INSULATION /obj/structure/window/full/plasmareinforced @@ -616,11 +647,11 @@ shardtype = /obj/item/shard/plasma glass_type = /obj/item/stack/sheet/plasmarglass smooth = SMOOTH_TRUE - canSmoothWith = list(/obj/structure/window/full/basic, /obj/structure/window/full/reinforced, /obj/structure/window/full/reinforced/tinted, /obj/structure/window/full/plasmabasic, /obj/structure/window/full/plasmareinforced, /turf/simulated/wall/indestructible/fakeglass) + canSmoothWith = list(/obj/structure/window/full/basic, /obj/structure/window/full/reinforced, /obj/structure/window/full/reinforced/polarized, /obj/structure/window/full/reinforced/tinted, /obj/structure/window/full/plasmabasic, /obj/structure/window/full/plasmareinforced, /turf/simulated/wall/indestructible/fakeglass) reinf = TRUE max_integrity = 1000 explosion_block = 2 - armor = list("melee" = 85, "bullet" = 20, "laser" = 0, "energy" = 0, "bomb" = 60, "bio" = 100, "rad" = 100, "fire" = 99, "acid" = 100) + armor = list(MELEE = 85, BULLET = 20, LASER = 0, ENERGY = 0, BOMB = 60, BIO = 100, RAD = 100, FIRE = 99, ACID = 100) rad_insulation = RAD_NO_INSULATION /obj/structure/window/full/plasmareinforced/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume) @@ -632,15 +663,21 @@ icon = 'icons/obj/smooth_structures/reinforced_window.dmi' icon_state = "r_window" smooth = SMOOTH_TRUE - canSmoothWith = list(/obj/structure/window/full/basic, /obj/structure/window/full/reinforced, /obj/structure/window/full/reinforced/tinted, /obj/structure/window/full/plasmabasic, /obj/structure/window/full/plasmareinforced, /turf/simulated/wall/indestructible/fakeglass) + canSmoothWith = list(/obj/structure/window/full/basic, /obj/structure/window/full/reinforced, /obj/structure/window/full/reinforced/polarized, /obj/structure/window/full/reinforced/tinted, /obj/structure/window/full/plasmabasic, /obj/structure/window/full/plasmareinforced, /turf/simulated/wall/indestructible/fakeglass) max_integrity = 100 reinf = TRUE heat_resistance = 1600 - armor = list("melee" = 50, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 25, "bio" = 100, "rad" = 100, "fire" = 80, "acid" = 100) + armor = list(MELEE = 50, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 25, BIO = 100, RAD = 100, FIRE = 80, ACID = 100) rad_insulation = RAD_HEAVY_INSULATION explosion_block = 1 glass_type = /obj/item/stack/sheet/rglass +/obj/structure/window/full/reinforced/polarized + name = "electrochromic window" + desc = "Adjusts its tint with voltage. Might take a few good hits to shatter it." + glass_amount = 4 + var/id + /obj/structure/window/full/reinforced/tinted name = "tinted window" desc = "It looks rather strong and opaque. Might take a few good hits to shatter it." @@ -662,7 +699,7 @@ reinf = TRUE heat_resistance = 1600 explosion_block = 3 - armor = list("melee" = 50, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 50, "bio" = 100, "rad" = 100, "fire" = 80, "acid" = 100) + armor = list(MELEE = 50, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 50, BIO = 100, RAD = 100, FIRE = 80, ACID = 100) smooth = SMOOTH_TRUE canSmoothWith = null glass_type = /obj/item/stack/sheet/titaniumglass @@ -681,7 +718,7 @@ max_integrity = 100 reinf = TRUE heat_resistance = 1600 - armor = list("melee" = 50, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 50, "bio" = 100, "rad" = 100, "fire" = 80, "acid" = 100) + armor = list(MELEE = 50, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 50, BIO = 100, RAD = 100, FIRE = 80, ACID = 100) rad_insulation = RAD_HEAVY_INSULATION smooth = SMOOTH_TRUE canSmoothWith = null @@ -696,7 +733,7 @@ icon_state = "clockwork_window_single" resistance_flags = FIRE_PROOF | ACID_PROOF max_integrity = 80 - armor = list("melee" = 60, "bullet" = 25, "laser" = 0, "energy" = 0, "bomb" = 25, "bio" = 100, "rad" = 100, "fire" = 80, "acid" = 100) + armor = list(MELEE = 60, BULLET = 25, LASER = 0, ENERGY = 0, BOMB = 25, BIO = 100, RAD = 100, FIRE = 80, ACID = 100) explosion_block = 2 //fancy AND hard to destroy. the most useful combination. glass_type = /obj/item/stack/tile/brass reinf = FALSE diff --git a/code/game/turfs/simulated/floor.dm b/code/game/turfs/simulated/floor.dm index 24fcba648f2..8f8e94362b7 100644 --- a/code/game/turfs/simulated/floor.dm +++ b/code/game/turfs/simulated/floor.dm @@ -27,6 +27,7 @@ GLOBAL_LIST_INIT(icons_to_ignore_at_floor_init, list("damaged1","damaged2","dama var/list/broken_states = list("damaged1", "damaged2", "damaged3", "damaged4", "damaged5") var/list/burnt_states = list("floorscorched1", "floorscorched2") var/list/prying_tool_list = list(TOOL_CROWBAR) //What tool/s can we use to pry up the tile? + var/keep_dir = TRUE //When false, resets dir to default on changeturf() var/footstep = FOOTSTEP_FLOOR var/barefootstep = FOOTSTEP_HARD_BAREFOOT @@ -124,11 +125,18 @@ GLOBAL_LIST_INIT(icons_to_ignore_at_floor_init, list("damaged1","damaged2","dama var/turf/simulated/floor/W = ..() + var/obj/machinery/atmospherics/R + if(keep_icon) W.icon_regular_floor = old_icon W.icon_plating = old_plating + if(W.keep_dir) W.dir = old_dir - + if(W.transparent_floor) + for(R in W) + R.update_icon() + for(R in W) + R.update_underlays() W.update_icon() return W diff --git a/code/game/turfs/simulated/floor/fancy_floor.dm b/code/game/turfs/simulated/floor/fancy_floor.dm index 0b8938fc204..86a1e119dad 100644 --- a/code/game/turfs/simulated/floor/fancy_floor.dm +++ b/code/game/turfs/simulated/floor/fancy_floor.dm @@ -68,6 +68,9 @@ playsound(src, 'sound/effects/shovel_dig.ogg', 50, 1) make_plating() + +//Carpets + /turf/simulated/floor/carpet name = "carpet" icon = 'icons/turf/floors/carpet.dmi' @@ -112,6 +115,48 @@ floor_tile = /obj/item/stack/tile/carpet/black canSmoothWith = list(/turf/simulated/floor/carpet/black) +/turf/simulated/floor/carpet/blue + icon = 'icons/turf/floors/carpet_blue.dmi' + floor_tile = /obj/item/stack/tile/carpet/blue + canSmoothWith = list(/turf/simulated/floor/carpet/blue) + +/turf/simulated/floor/carpet/cyan + icon = 'icons/turf/floors/carpet_cyan.dmi' + floor_tile = /obj/item/stack/tile/carpet/cyan + canSmoothWith = list(/turf/simulated/floor/carpet/cyan) + +/turf/simulated/floor/carpet/green + icon = 'icons/turf/floors/carpet_green.dmi' + floor_tile = /obj/item/stack/tile/carpet/green + canSmoothWith = list(/turf/simulated/floor/carpet/green) + +/turf/simulated/floor/carpet/orange + icon = 'icons/turf/floors/carpet_orange.dmi' + floor_tile = /obj/item/stack/tile/carpet/orange + canSmoothWith = list(/turf/simulated/floor/carpet/orange) + +/turf/simulated/floor/carpet/purple + icon = 'icons/turf/floors/carpet_purple.dmi' + floor_tile = /obj/item/stack/tile/carpet/purple + canSmoothWith = list(/turf/simulated/floor/carpet/purple) + +/turf/simulated/floor/carpet/red + icon = 'icons/turf/floors/carpet_red.dmi' + floor_tile = /obj/item/stack/tile/carpet/red + canSmoothWith = list(/turf/simulated/floor/carpet/red) + +/turf/simulated/floor/carpet/royalblack + icon = 'icons/turf/floors/carpet_royalblack.dmi' + floor_tile = /obj/item/stack/tile/carpet/royalblack + canSmoothWith = list(/turf/simulated/floor/carpet/royalblack) + +/turf/simulated/floor/carpet/royalblue + icon = 'icons/turf/floors/carpet_royalblue.dmi' + floor_tile = /obj/item/stack/tile/carpet/royalblue + canSmoothWith = list(/turf/simulated/floor/carpet/royalblue) + +//End of carpets + /turf/simulated/floor/fakespace icon = 'icons/turf/space.dmi' icon_state = "0" diff --git a/code/game/turfs/simulated/floor/lava.dm b/code/game/turfs/simulated/floor/lava.dm index 29485f4a808..4d5a64e95b7 100644 --- a/code/game/turfs/simulated/floor/lava.dm +++ b/code/game/turfs/simulated/floor/lava.dm @@ -81,7 +81,7 @@ O.resistance_flags |= FLAMMABLE //Even fireproof things burn up in lava if(O.resistance_flags & FIRE_PROOF) O.resistance_flags &= ~FIRE_PROOF - if(O.armor.getRating("fire") > 50) //obj with 100% fire armor still get slowly burned away. + if(O.armor.getRating(FIRE) > 50) //obj with 100% fire armor still get slowly burned away. O.armor = O.armor.setRating(fire_value = 50) O.fire_act(10000, 1000) diff --git a/code/game/turfs/simulated/floor/plating.dm b/code/game/turfs/simulated/floor/plating.dm index d0805cf5099..ad26fa8919e 100644 --- a/code/game/turfs/simulated/floor/plating.dm +++ b/code/game/turfs/simulated/floor/plating.dm @@ -70,6 +70,35 @@ to_chat(user, "This section is too damaged to support a tile! Use a welder to fix the damage.") return TRUE + else if(is_glass_sheet(C)) + if(broken || burnt) + to_chat(user, "Repair the plating first!") + return TRUE + var/obj/item/stack/sheet/R = C + if(R.get_amount() < 2) + to_chat(user, "You need two sheets to build a [C.name] floor!") + return TRUE + to_chat(user, "You begin swapping the plating for [C]...") + if(do_after(user, 3 SECONDS * C.toolspeed, target = src)) + if(R.get_amount() >= 2 && !transparent_floor) + if(istype(C, /obj/item/stack/sheet/plasmaglass)) //So, what type of glass floor do we want today? + ChangeTurf(/turf/simulated/floor/transparent/glass/plasma) + else if(istype(C, /obj/item/stack/sheet/plasmarglass)) + ChangeTurf(/turf/simulated/floor/transparent/glass/reinforced/plasma) + else if(istype(C, /obj/item/stack/sheet/glass)) + ChangeTurf(/turf/simulated/floor/transparent/glass) + else if(istype(C, /obj/item/stack/sheet/rglass)) + ChangeTurf(/turf/simulated/floor/transparent/glass/reinforced) + else if(istype(C, /obj/item/stack/sheet/titaniumglass)) + ChangeTurf(/turf/simulated/floor/transparent/glass/titanium) + else if(istype(C, /obj/item/stack/sheet/plastitaniumglass)) + ChangeTurf(/turf/simulated/floor/transparent/glass/titanium/plasma) + playsound(src, C.usesound, 80, TRUE) + R.use(2) + to_chat(user, "You swap the plating for [C].") + new /obj/item/stack/sheet/metal(src, 2) + return TRUE + /turf/simulated/floor/plating/screwdriver_act(mob/user, obj/item/I) . = TRUE if(!I.tool_use_check(user, 0)) diff --git a/code/game/turfs/simulated/floor/transparent.dm b/code/game/turfs/simulated/floor/transparent.dm new file mode 100644 index 00000000000..81030c4d294 --- /dev/null +++ b/code/game/turfs/simulated/floor/transparent.dm @@ -0,0 +1,112 @@ +/turf/simulated/floor/transparent/glass + name = "glass floor" + desc = "Don't jump on it... Or do, I'm not your mom." + icon = 'icons/turf/floors/glass.dmi' + icon_state = "unsmooth" + baseturf = /turf/space + smooth = SMOOTH_TRUE + canSmoothWith = list(/turf/simulated/floor/transparent/glass, /turf/simulated/floor/transparent/glass/reinforced, /turf/simulated/floor/transparent/glass/plasma, /turf/simulated/floor/transparent/glass/reinforced/plasma) + footstep = FOOTSTEP_GLASS + barefootstep = FOOTSTEP_GLASS_BAREFOOT + clawfootstep = FOOTSTEP_GLASS_BAREFOOT + heavyfootstep = FOOTSTEP_GLASS_BAREFOOT + light_power = 0.25 + light_range = 2 + layer = TRANSPARENT_TURF_LAYER + keep_dir = FALSE + intact = FALSE + transparent_floor = TRUE + heat_capacity = 800 + +/turf/simulated/floor/transparent/glass/Initialize(mapload) + . = ..() + var/image/I = image('icons/turf/space.dmi', src, SPACE_ICON_STATE) + I.plane = PLANE_SPACE + underlays += I + dir = SOUTH //dirs that are not 2/south cause smoothing jank + icon_state = "" //Prevents default icon appearing behind the glass + +/turf/simulated/floor/transparent/glass/welder_act(mob/user, obj/item/I) + if(!broken && !burnt) + return + if(!I.tool_use_check(user, 0)) + return + if(I.use_tool(src, user, volume = I.tool_volume)) + to_chat(user, "You fix some cracks in the glass.") + overlays -= current_overlay + current_overlay = null + burnt = FALSE + broken = FALSE + update_icon() + +/turf/simulated/floor/transparent/glass/crowbar_act(mob/user, obj/item/I) + if(!I || !user) + return + var/obj/item/stack/R = user.get_inactive_hand() + if(istype(R, /obj/item/stack/sheet/metal)) + if(R.get_amount() < 2) //not enough metal in the stack + to_chat(user, "You also need to hold two sheets of metal to dismantle [src]!") + return + else + to_chat(user, "You begin replacing [src]...") + playsound(src, I.usesound, 80, TRUE) + if(do_after(user, 3 SECONDS * I.toolspeed, target = src)) + if(R.get_amount() < 2 || !transparent_floor) + return + else //not holding metal at all + to_chat(user, "You also need to hold two sheets of metal to dismantle \the [src]!") + return + switch(type) //What material is returned? Depends on the turf + if(/turf/simulated/floor/transparent/glass/reinforced) + new /obj/item/stack/sheet/rglass(src, 2) + if(/turf/simulated/floor/transparent/glass) + new /obj/item/stack/sheet/glass(src, 2) + if(/turf/simulated/floor/transparent/glass/plasma) + new /obj/item/stack/sheet/plasmaglass(src, 2) + if(/turf/simulated/floor/transparent/glass/reinforced/plasma) + new /obj/item/stack/sheet/plasmarglass(src, 2) + if(/turf/simulated/floor/transparent/glass/titanium) + new /obj/item/stack/sheet/titaniumglass(src, 2) + if(/turf/simulated/floor/transparent/glass/titanium/plasma) + new /obj/item/stack/sheet/plastitaniumglass(src, 2) + R.use(2) + playsound(src, 'sound/items/deconstruct.ogg', 80, TRUE) + ChangeTurf(/turf/simulated/floor/plating) + + +/turf/simulated/floor/transparent/glass/reinforced + name = "reinforced glass floor" + desc = "Jump on it, it can cope. Promise..." + icon = 'icons/turf/floors/reinf_glass.dmi' + thermal_conductivity = 0.035 + heat_capacity = 1600 + +/turf/simulated/floor/transparent/glass/reinforced/acid_act(acidpwr, acid_volume) + acidpwr = min(acidpwr, 50) + . = ..() + +/turf/simulated/floor/transparent/glass/plasma + name = "plasma glass floor" + desc = "Wait, was space always that color?" + icon = 'icons/turf/floors/plasmaglass.dmi' + thermal_conductivity = 0.030 + heat_capacity = 32000 + +/turf/simulated/floor/transparent/glass/reinforced/plasma + name = "reinforced plasma glass floor" + desc = "For when you REALLY don't want your floor choice to suffocate everyone." + icon = 'icons/turf/floors/reinf_plasmaglass.dmi' + thermal_conductivity = 0.025 + heat_capacity = 325000 + +/turf/simulated/floor/transparent/glass/titanium + name = "titanium glass floor" + desc = "Stylish AND strong!" + icon = 'icons/turf/floors/titaniumglass.dmi' + canSmoothWith = list(/turf/simulated/floor/transparent/glass/titanium, /turf/simulated/floor/transparent/glass/titanium/plasma) + thermal_conductivity = 0.025 + heat_capacity = 1600 + +/turf/simulated/floor/transparent/glass/titanium/plasma + name = "plastitanium glass floor" + icon = 'icons/turf/floors/plastitaniumglass.dmi' diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm index 938e2f8a851..a602a49d6e2 100644 --- a/code/game/turfs/turf.dm +++ b/code/game/turfs/turf.dm @@ -6,6 +6,7 @@ var/intact = TRUE var/turf/baseturf = /turf/space var/slowdown = 0 //negative for faster, positive for slower + var/transparent_floor = FALSE //used to check if pipes should be visible under the turf or not ///Properties for open tiles (/floor) /// All the gas vars, on the turf, are meant to be utilized for initializing a gas datum and setting its first gas values; the turf vars are never further modified at runtime; it is never directly used for calculations by the atmospherics system. @@ -283,10 +284,10 @@ var/asleep = 0 var/ab = 0 var/atemp = 0 + var/turf_count = 0 - for(var/direction in GLOB.cardinal)//Only use cardinals to cut down on lag - var/turf/T = get_step(src, direction) + for(var/turf/T in atmos_adjacent_turfs) if(istype(T, /turf/space))//Counted as no air turf_count++//Considered a valid turf for air calcs continue diff --git a/code/game/verbs/ooc.dm b/code/game/verbs/ooc.dm index 458f06e9c19..162e1ebd26e 100644 --- a/code/game/verbs/ooc.dm +++ b/code/game/verbs/ooc.dm @@ -25,7 +25,7 @@ GLOBAL_VAR_INIT(admin_ooc_colour, "#b82e00") if(!GLOB.dooc_enabled && (mob.stat == DEAD)) to_chat(usr, "OOC for dead mobs has been turned off.") return - if(prefs.muted & MUTE_OOC) + if(check_mute(ckey, MUTE_OOC)) to_chat(src, "You cannot use OOC (muted).") return @@ -181,7 +181,7 @@ GLOBAL_VAR_INIT(admin_ooc_colour, "#b82e00") if(!GLOB.dooc_enabled && (mob.stat == DEAD)) to_chat(usr, "LOOC for dead mobs has been turned off.") return - if(prefs.muted & MUTE_OOC) + if(check_mute(ckey, MUTE_OOC)) to_chat(src, "You cannot use LOOC (muted).") return diff --git a/code/game/verbs/switch_server.dm b/code/game/verbs/switch_server.dm new file mode 100644 index 00000000000..6fc07b8f684 --- /dev/null +++ b/code/game/verbs/switch_server.dm @@ -0,0 +1,49 @@ +/client/verb/switch_server() + set name = "Switch Server" + set desc = "Switch to a different Paradise server" + set category = "OOC" + + // First get our peers + var/datum/db_query/dbq1 = SSdbcore.NewQuery({" + SELECT server_id, key_name, key_value FROM instance_data_cache WHERE server_id IN + (SELECT server_id FROM instance_data_cache WHERE + key_name='heartbeat' AND last_updated BETWEEN NOW() - INTERVAL 60 SECOND AND NOW()) + AND key_name IN ("playercount", "server_port", "server_name")"}) + if(!dbq1.warn_execute()) + qdel(dbq1) + return + + var/servers_outer = list() + while(dbq1.NextRow()) + if(!servers_outer[dbq1.item[1]]) + servers_outer[dbq1.item[1]] = list() + + servers_outer[dbq1.item[1]][dbq1.item[2]] = dbq1.item[3] // This should assoc load our data + + // Format the server names into an assoc list of K: name V: port + var/list/formatted_servers = list() + for(var/server in servers_outer) + var/server_data = servers_outer[server] + formatted_servers["[server_data["server_name"]] - ([server_data["playercount"]] playing)"] = text2num(server_data["server_port"]) + + if(length(formatted_servers) == 1) + to_chat(usr, "You are already connected to the one online instance!") + return + + var/selected_server = input(usr, "Select a server", "Server hop") as anything in formatted_servers + if(!selected_server) + return // Should never happen + + if(formatted_servers[selected_server] == world.port) + to_chat(usr, "You are already connected to this instance!") + return + + // Now we reconnect them + to_chat(usr, "Now connecting you to: [selected_server]") + + if(watchlisted) // I mean why not + message_admins("[key_name_admin(usr)] is on the watchlist and just jumped to [selected_server]") + + // Formulate a connection URL + var/target = "byond://[world.internet_address]:[formatted_servers[selected_server]]" + src << link(target) diff --git a/code/game/verbs/webmap.dm b/code/game/verbs/webmap.dm new file mode 100644 index 00000000000..714b501e808 --- /dev/null +++ b/code/game/verbs/webmap.dm @@ -0,0 +1,12 @@ +/client/verb/webmap() + set name = "webmap" + set hidden = TRUE + + if(!SSmapping.map_datum.webmap_url) + to_chat(usr, "The current map has no defined webmap. Please file an issue report.") + return + + if(alert(usr, "Do you want to open this map's Webmap in your browser?", "Webmap", "Yes", "No") != "Yes") + return + + usr << link(SSmapping.map_datum.webmap_url) diff --git a/code/game/world.dm b/code/game/world.dm index a2c5dfa746a..e8d048c2d4e 100644 --- a/code/game/world.dm +++ b/code/game/world.dm @@ -22,11 +22,15 @@ GLOBAL_LIST_INIT(map_transition_config, list(CC_TRANSITION_CONFIG)) //temporary file used to record errors with loading config and the database, moved to log directory once logging is set up GLOB.config_error_log = GLOB.world_game_log = GLOB.world_runtime_log = GLOB.sql_log = "data/logs/config_error.log" - GLOB.configuration.load_configuration() + GLOB.configuration.load_configuration() // Load up the base config.toml + // Load up overrides for this specific instance, based on port + // If this instance is listening on port 6666, the server will look for config/overrides_6666.toml + GLOB.configuration.load_overrides() // Right off the bat, load up the DB SSdbcore.CheckSchemaVersion() // This doesnt just check the schema version, it also connects to the db! This needs to happen super early! I cannot stress this enough! SSdbcore.SetRoundID() // Set the round ID here + SSinstancing.seed_data() // Set us up in the DB // Setup all log paths and stamp them with startups, including round IDs SetupLogs() diff --git a/code/modules/admin/IsBanned.dm b/code/modules/admin/IsBanned.dm index aadb658470f..9e04eb3c8ba 100644 --- a/code/modules/admin/IsBanned.dm +++ b/code/modules/admin/IsBanned.dm @@ -27,6 +27,12 @@ if(A && (A.rights & R_ADMIN)) admin = 1 + // Lets see if they are logged in on another paradise server + if(SSdbcore.IsConnected()) + var/other_server_login = SSinstancing.check_player(ckey) + if(other_server_login) + return list("reason"="duplicate login", "desc"="\nReason: You are already logged in on server '[other_server_login]'. Please contact the server host if you believe this is an error.") + //Guest Checking if(GLOB.configuration.general.guest_ban && IsGuestKey(key)) log_adminwarn("Failed Login: [key] [computer_id] [address] - Guests not allowed") diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index 85d4be92516..794ca47df46 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -13,12 +13,8 @@ GLOBAL_VAR_INIT(nologevent, 0) if(!GLOB.nologevent) var/rendered = "ATTACK: [text]" for(var/client/C in GLOB.admins) - if(R_ADMIN & C.holder.rights) - if(C.prefs.atklog == ATKLOG_NONE) - continue - var/msg = rendered - if(C.prefs.atklog <= loglevel) - to_chat(C, msg) + if((C.holder.rights & R_ADMIN) && (C.prefs?.atklog <= loglevel)) + to_chat(C, rendered) /** * Sends a message to the staff able to see admin tickets @@ -122,7 +118,6 @@ GLOBAL_VAR_INIT(nologevent, 0) if(M.ckey) body += "Kick | " - body += "Warn | " body += "Ban | " body += "Jobban | " body += "Appearance Ban | " @@ -131,7 +126,7 @@ GLOBAL_VAR_INIT(nologevent, 0) if(GLOB.configuration.url.forum_playerinfo_url) body += "WebInfo | " if(M.client) - if(check_watchlist(M.client.ckey)) + if(M.client.watchlisted) body += "Remove from Watchlist | " body += "Edit Watchlist Reason " else @@ -141,14 +136,13 @@ GLOBAL_VAR_INIT(nologevent, 0) body += "\ Send back to Lobby | " body += "\ Erase Flavor Text | " body += "\ Use Random Name | " - var/muted = M.client.prefs.muted body += {"
Mute: - \[IC | - OOC | - PRAY | - ADMINHELP | - DEADCHAT\] - (toggle all) + \[IC | + OOC | + PRAY | + ADMINHELP | + DEADCHAT] + (toggle all) "} var/jumptoeye = "" @@ -626,43 +620,88 @@ GLOBAL_VAR_INIT(nologevent, 0) ////////////////////////////////////////////////////////////////////////////////////////////////ADMIN HELPER PROCS -/proc/is_special_character(mob/M as mob) // returns 1 for specail characters and 2 for heroes of gamemode - if(!SSticker || !SSticker.mode) - return 0 +/** + * A proc that return whether the mob is a "Special Character" aka Antagonist + * + * Arguments: + * * M - the mob you're checking + */ +/proc/is_special_character(mob/M) + if(!SSticker.mode) + return FALSE if(!istype(M)) - return 0 - if((M.mind in SSticker.mode.head_revolutionaries) || (M.mind in SSticker.mode.revolutionaries)) - if(SSticker.mode.config_tag == "revolution") - return 2 - return 1 - if(M.mind in SSticker.mode.cult) - if(SSticker.mode.config_tag == "cult") - return 2 - return 1 - if(M.mind in SSticker.mode.syndicates) - if(SSticker.mode.config_tag == "nuclear") - return 2 - return 1 - if(M.mind in SSticker.mode.wizards) - if(SSticker.mode.config_tag == "wizard") - return 2 - return 1 - if(M.mind in SSticker.mode.changelings) - if(SSticker.mode.config_tag == "changeling") - return 2 - return 1 - if(M.mind in SSticker.mode.abductors) - if(SSticker.mode.config_tag == "abduction") - return 2 - return 1 + return FALSE if(isrobot(M)) var/mob/living/silicon/robot/R = M if(R.emagged) - return 1 - if(M.mind&&M.mind.special_role)//If they have a mind and special role, they are some type of traitor or antagonist. - return 1 + return TRUE + if(M.mind?.special_role)//If they have a mind and special role, they are some type of traitor or antagonist. + return TRUE + return FALSE - return 0 +/** + * A proc that return an array of capitalized strings containing name of the antag types they are + * + * Arguments: + * * M - the mob you're checking + */ +/proc/get_antag_type_strings_list(mob/M) // return an array of all the antag types they are with name + var/list/antag_list = list() + + if(!SSticker.mode || !istype(M) || !M.mind) + return FALSE + + if(M.mind in SSticker.mode.head_revolutionaries) + antag_list += "Head Rev" + if(M.mind in SSticker.mode.revolutionaries) + antag_list += "Revolutionary" + if(M.mind in SSticker.mode.cult) + antag_list += "Cultist" + if(M.mind in SSticker.mode.syndicates) + antag_list += "Nuclear Operative" + if(M.mind in SSticker.mode.wizards) + antag_list += "Wizard" + if(M.mind in SSticker.mode.changelings) + antag_list += "Changeling" + if(M.mind in SSticker.mode.abductors) + antag_list += "Abductor" + if(M.mind in SSticker.mode.vampires) + antag_list += "Vampire" + if(M.mind in SSticker.mode.vampire_enthralled) + antag_list += "Vampire Thrall" + if(M.mind in SSticker.mode.shadows) + antag_list += "Shadowling" + if(M.mind in SSticker.mode.shadowling_thralls) + antag_list += "Shadowling Thrall" + if(M.mind.has_antag_datum(/datum/antagonist/traitor)) + antag_list += "Traitor" + if(M.mind.has_antag_datum(/datum/antagonist/mindslave)) + antag_list += "Mindslave" + if(isrobot(M)) + var/mob/living/silicon/robot/R = M + if(R.emagged) + antag_list += "Emagged Borg" + if(!length(antag_list) && M.mind.special_role) // Snowflake check. If none of the above but still special, then other antag. Technically not accurate. + antag_list += "Other Antag(s)" + return antag_list + +/** + * A proc that return a string containing all the singled out antags . Empty string if not antag + * + * Usually, you'd return a FALSE, but since this is consumed by javascript you're in + * for a world of hurt if you pass a byond FALSE which get converted into a fucking string anyway and pass for TRUE in check. Fuck. + * It always append "(May be other antag)" + * Arguments: + * * M - the mob you're checking + * * + */ +/proc/get_antag_type_truncated_plaintext_string(mob/M as mob) + var/list/antag_list = get_antag_type_strings_list(M) + + if(length(antag_list)) + return antag_list.Join(" & ") + " " + "(May be other antag)" + + return "" /datum/admins/proc/spawn_atom(object as text) set category = "Debug" diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index de44ccd4788..c4b14311986 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -45,6 +45,7 @@ GLOBAL_LIST_INIT(admin_verbs_admin, list( /datum/admins/proc/toggleemoji, /*toggles using emoji in ooc for everyone*/ /client/proc/game_panel, /*game panel, allows to change game-mode etc*/ /client/proc/cmd_admin_say, /*admin-only ooc chat*/ + /client/proc/gsay, /*cross-server asay*/ /datum/admins/proc/PlayerNotes, /client/proc/cmd_mentor_say, /datum/admins/proc/show_player_notes, @@ -67,7 +68,8 @@ GLOBAL_LIST_INIT(admin_verbs_admin, list( /client/proc/toggle_mentor_chat, /client/proc/toggle_advanced_interaction, /*toggle admin ability to interact with not only machines, but also atoms such as buttons and doors*/ /client/proc/list_ssds_afks, - /client/proc/ccbdb_lookup_ckey + /client/proc/ccbdb_lookup_ckey, + /client/proc/view_instances )) GLOBAL_LIST_INIT(admin_verbs_ban, list( /client/proc/ban_panel, @@ -362,17 +364,20 @@ GLOBAL_LIST_INIT(admin_verbs_ticket, list( if(!check_rights(R_ADMIN)) return + if(!isliving(mob)) + return - if(mob) - if(mob.invisibility == INVISIBILITY_OBSERVER) - mob.invisibility = initial(mob.invisibility) - to_chat(mob, "Invisimin off. Invisibility reset.") - mob.add_to_all_human_data_huds() - //TODO: Make some kind of indication for the badmin that they are currently invisible - else - mob.invisibility = INVISIBILITY_OBSERVER - to_chat(mob, "Invisimin on. You are now as invisible as a ghost.") - mob.remove_from_all_data_huds() + if(mob.invisibility == INVISIBILITY_OBSERVER) + mob.invisibility = initial(mob.invisibility) + mob.add_to_all_human_data_huds() + to_chat(mob, "Invisimin off. Invisibility reset.") + log_admin("[key_name(mob)] has turned Invisimin OFF") + else + mob.invisibility = INVISIBILITY_OBSERVER + mob.remove_from_all_data_huds() + to_chat(mob, "Invisimin on. You are now as invisible as a ghost.") + log_admin("[key_name(mob)] has turned Invisimin ON") + SSblackbox.record_feedback("tally", "admin_verb", 1, "Invisimin") /client/proc/player_panel_new() set name = "Player Panel" @@ -492,51 +497,6 @@ GLOBAL_LIST_INIT(admin_verbs_ticket, list( log_admin("[key_name(usr)] has turned BB mode [holder.fakekey ? "ON" : "OFF"]") SSblackbox.record_feedback("tally", "admin_verb", 1, "Big Brother Mode") -#define MAX_WARNS 3 -#define AUTOBANTIME 10 - -/client/proc/warn(warned_ckey) - if(!check_rights(R_ADMIN)) - return - - if(!warned_ckey || !istext(warned_ckey)) return - if(warned_ckey in GLOB.admin_datums) - to_chat(usr, "Error: warn(): You can't warn admins.") - return - - var/datum/preferences/D - var/client/C = GLOB.directory[warned_ckey] - if(C) D = C.prefs - else D = GLOB.preferences_datums[warned_ckey] - - if(!D) - to_chat(src, "Error: warn(): No such ckey found.") - return - - if(++D.warns >= MAX_WARNS) //uh ohhhh...you'reee iiiiin trouuuubble O:) - if(C) - message_admins("[key_name_admin(src)] has warned [key_name_admin(C)] resulting in a [AUTOBANTIME] minute ban") - log_admin("[key_name(src)] has warned [key_name(C)] resulting in a [AUTOBANTIME] minute ban") - to_chat(C, "You have been autobanned due to a warning by [ckey].
This is a temporary ban, it will be removed in [AUTOBANTIME] minutes.") - qdel(C) - else - message_admins("[key_name_admin(src)] has warned [warned_ckey] resulting in a [AUTOBANTIME] minute ban") - log_admin("[key_name(src)] has warned [warned_ckey] resulting in a [AUTOBANTIME] minute ban") - AddBan(warned_ckey, D.last_id, "Autobanning due to too many formal warnings", ckey, 1, AUTOBANTIME) - else - if(C) - to_chat(C, "You have been formally warned by an administrator.
Further warnings will result in an autoban.
") - message_admins("[key_name_admin(src)] has warned [key_name_admin(C)]. They have [MAX_WARNS-D.warns] strikes remaining.") - log_admin("[key_name(src)] has warned [key_name(C)]. They have [MAX_WARNS-D.warns] strikes remaining.") - else - message_admins("[key_name_admin(src)] has warned [warned_ckey] (DC). They have [MAX_WARNS-D.warns] strikes remaining.") - log_admin("[key_name(src)] has warned [warned_ckey] (DC). They have [MAX_WARNS-D.warns] strikes remaining.") - - SSblackbox.record_feedback("tally", "admin_verb", 1, "Warning") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - -#undef MAX_WARNS -#undef AUTOBANTIME - /client/proc/drop_bomb() // Some admin dickery that can probably be done better -- TLE set category = "Event" set name = "Drop Bomb" @@ -712,6 +672,10 @@ GLOBAL_LIST_INIT(admin_verbs_ticket, list( to_chat(src, "Error while re-adminning, admin rank ([rank]) does not exist.") return + // Do a little check here + if(GLOB.configuration.system.is_production && (GLOB.admin_ranks[rank] & R_ADMIN) && prefs._2fa_status == _2FA_DISABLED) // If they are an admin and their 2FA is disabled + to_chat(src,"You do not have 2FA enabled. Admin verbs will be unavailable until you have enabled 2FA.") // Very fucking obvious + return D = new(rank, GLOB.admin_ranks[rank], ckey) else if(!SSdbcore.IsConnected()) @@ -742,8 +706,13 @@ GLOBAL_LIST_INIT(admin_verbs_ticket, list( if(istext(flags)) flags = text2num(flags) + var/client/check_client = GLOB.directory[ckey] + // Do a little check here + if(GLOB.configuration.system.is_production && (flags & R_ADMIN) && check_client.prefs._2fa_status == _2FA_DISABLED) // If they are an admin and their 2FA is disabled + to_chat(src,"You do not have 2FA enabled. Admin verbs will be unavailable until you have enabled 2FA.") // Very fucking obvious + qdel(admin_read) + return D = new(admin_rank, flags, ckey) - qdel(admin_read) var/client/C = GLOB.directory[ckey] diff --git a/code/modules/admin/create_mob.dm b/code/modules/admin/create_mob.dm index 6740a3d59b7..5ffa2ec7eba 100644 --- a/code/modules/admin/create_mob.dm +++ b/code/modules/admin/create_mob.dm @@ -1,9 +1,11 @@ GLOBAL_VAR(create_mob_html) + /datum/admins/proc/create_mob(mob/user) if(!GLOB.create_mob_html) var/mobjs = null mobjs = jointext(typesof(/mob), ";") GLOB.create_mob_html = file2text('html/create_object.html') + GLOB.create_mob_html = replacetext(GLOB.create_mob_html, "$ATOM$", "Mob") GLOB.create_mob_html = replacetext(GLOB.create_mob_html, "null /* object types */", "\"[mobjs]\"") user << browse(replacetext(GLOB.create_mob_html, "/* ref src */", UID()), "window=create_mob;size=425x475") diff --git a/code/modules/admin/create_object.dm b/code/modules/admin/create_object.dm index 99706d19950..2d20265ff8f 100644 --- a/code/modules/admin/create_object.dm +++ b/code/modules/admin/create_object.dm @@ -6,6 +6,7 @@ GLOBAL_LIST_INIT(create_object_forms, list(/obj, /obj/structure, /obj/machinery, var/objectjs = null objectjs = jointext(typesof(/obj), ";") GLOB.create_object_html = file2text('html/create_object.html') + GLOB.create_object_html = replacetext(GLOB.create_object_html, "$ATOM$", "Object") GLOB.create_object_html = replacetext(GLOB.create_object_html, "null /* object types */", "\"[objectjs]\"") user << browse(replacetext(GLOB.create_object_html, "/* ref src */", UID()), "window=create_object;size=425x475") @@ -17,6 +18,7 @@ GLOBAL_LIST_INIT(create_object_forms, list(/obj, /obj/structure, /obj/machinery, if(!html_form) var/objectjs = jointext(typesof(path), ";") html_form = file2text('html/create_object.html') + html_form = replacetext(html_form, "$ATOM$", "Object") html_form = replacetext(html_form, "null /* object types */", "\"[objectjs]\"") GLOB.create_object_forms[path] = html_form diff --git a/code/modules/admin/create_turf.dm b/code/modules/admin/create_turf.dm index 9ef3b465194..593f40fc005 100644 --- a/code/modules/admin/create_turf.dm +++ b/code/modules/admin/create_turf.dm @@ -1,9 +1,11 @@ GLOBAL_VAR(create_turf_html) + /datum/admins/proc/create_turf(mob/user) if(!GLOB.create_turf_html) var/turfjs = null turfjs = jointext(typesof(/turf), ";") GLOB.create_turf_html = file2text('html/create_object.html') + GLOB.create_turf_html = replacetext(GLOB.create_turf_html, "$ATOM$", "Turf") GLOB.create_turf_html = replacetext(GLOB.create_turf_html, "null /* object types */", "\"[turfjs]\"") user << browse(replacetext(GLOB.create_turf_html, "/* ref src */", UID()), "window=create_turf;size=425x475") diff --git a/code/modules/admin/db_ban/functions.dm b/code/modules/admin/db_ban/functions.dm index d16b61ae690..999ba84b5e6 100644 --- a/code/modules/admin/db_ban/functions.dm +++ b/code/modules/admin/db_ban/functions.dm @@ -146,8 +146,8 @@ qdel(adm_query) var/datum/db_query/query_insert = SSdbcore.NewQuery({" - INSERT INTO ban (`id`,`bantime`,`serverip`,`bantype`,`reason`,`job`,`duration`,`rounds`,`expiration_time`,`ckey`,`computerid`,`ip`,`a_ckey`,`a_computerid`,`a_ip`,`who`,`adminwho`,`edits`,`unbanned`,`unbanned_datetime`,`unbanned_ckey`,`unbanned_computerid`,`unbanned_ip`,`ban_round_id`,`unbanned_round_id`) - VALUES (null, Now(), :serverip, :bantype_str, :reason, :job, :duration, :rounds, Now() + INTERVAL :duration MINUTE, :ckey, :computerid, :ip, :a_ckey, :a_computerid, :a_ip, :who, :adminwho, '', null, null, null, null, null, :roundid, null) + INSERT INTO ban (`id`,`bantime`,`serverip`,`bantype`,`reason`,`job`,`duration`,`rounds`,`expiration_time`,`ckey`,`computerid`,`ip`,`a_ckey`,`a_computerid`,`a_ip`,`who`,`adminwho`,`edits`,`unbanned`,`unbanned_datetime`,`unbanned_ckey`,`unbanned_computerid`,`unbanned_ip`,`ban_round_id`,`unbanned_round_id`, `server_id`) + VALUES (null, Now(), :serverip, :bantype_str, :reason, :job, :duration, :rounds, Now() + INTERVAL :duration MINUTE, :ckey, :computerid, :ip, :a_ckey, :a_computerid, :a_ip, :who, :adminwho, '', null, null, null, null, null, :roundid, null, :server_id) "}, list( // Get ready for parameters "serverip" = serverip, @@ -164,7 +164,8 @@ "a_ip" = a_ip, "who" = who, "adminwho" = adminwho, - "roundid" = GLOB.round_id + "roundid" = GLOB.round_id, + "server_id" = GLOB.configuration.system.instance_id )) if(!query_insert.warn_execute()) qdel(query_insert) diff --git a/code/modules/admin/holder2.dm b/code/modules/admin/holder2.dm index 5d8196a8d88..8cbd56311dc 100644 --- a/code/modules/admin/holder2.dm +++ b/code/modules/admin/holder2.dm @@ -95,6 +95,24 @@ you will have to do something like if(client.holder.rights & R_ADMIN) yourself. to_chat(user, "Error: You are not an admin.") return 0 +// Basically the above proc but checks at a /client level +/proc/check_rights_client(rights_required, show_msg = TRUE, client/C) + if(C) + if(rights_required) + if(C.holder) + if(rights_required & C.holder.rights) + return TRUE + else + if(show_msg) + to_chat(C, "Error: You do not have sufficient rights to do that. You require one of the following flags:[rights2text(rights_required," ")].") + else + if(C.holder) + return TRUE + else + if(show_msg) + to_chat(C, "Error: You are not an admin.") + return FALSE + //probably a bit iffy - will hopefully figure out a better solution /proc/check_if_greater_rights_than(client/other) if(usr && usr.client) diff --git a/code/modules/admin/mute.dm b/code/modules/admin/mute.dm new file mode 100644 index 00000000000..cab33a4edda --- /dev/null +++ b/code/modules/admin/mute.dm @@ -0,0 +1,32 @@ +/// Associative list of people who are muted via admin mutes +GLOBAL_LIST_EMPTY(admin_mutes_assoc) + +/proc/check_mute(ckey, muteflag) + if(isnull(GLOB.admin_mutes_assoc[ckey])) + return FALSE + + if(GLOB.admin_mutes_assoc[ckey] & muteflag) + return TRUE + return FALSE + +/proc/toggle_mute(ckey, muteflag) + if(isnull(GLOB.admin_mutes_assoc[ckey])) + GLOB.admin_mutes_assoc[ckey] = 0 + + if(GLOB.admin_mutes_assoc[ckey] & muteflag) + GLOB.admin_mutes_assoc[ckey] &= ~muteflag + else + GLOB.admin_mutes_assoc[ckey] |= muteflag + +/proc/force_add_mute(ckey, muteflag) + if(isnull(GLOB.admin_mutes_assoc[ckey])) + GLOB.admin_mutes_assoc[ckey] = 0 + + GLOB.admin_mutes_assoc[ckey] |= muteflag + +/proc/force_remove_mute(ckey, muteflag) + if(isnull(GLOB.admin_mutes_assoc[ckey])) + GLOB.admin_mutes_assoc[ckey] = 0 + + GLOB.admin_mutes_assoc[ckey] &= ~muteflag + diff --git a/code/modules/admin/player_panel.dm b/code/modules/admin/player_panel.dm index 20aa1307328..7fe431e737d 100644 --- a/code/modules/admin/player_panel.dm +++ b/code/modules/admin/player_panel.dm @@ -65,7 +65,7 @@ } - function expand(id,job,name,real_name,image,key,ip,antagonist,mobUID,client_ckey,eyeUID){ + function expand(id,job,name,real_name,image,key,ip,antagonists,mobUID,client_ckey,eyeUID){ clearAll(); @@ -89,8 +89,8 @@ if(eyeUID) body += "|EYE" body += "
" - if(antagonist > 0) - body += "Antagonist"; + if(antagonists) + body += ""+antagonists+""; body += ""; @@ -227,7 +227,7 @@ var/color = "#e6e6e6" if(i%2 == 0) color = "#f2f2f2" - var/is_antagonist = is_special_character(M) + var/antagonist_string = get_antag_type_truncated_plaintext_string(M) var/M_job = "" @@ -305,7 +305,7 @@ [M_name] - [M_rname] - [M_key] ([M_job]) diff --git a/code/modules/admin/sql_notes.dm b/code/modules/admin/sql_notes.dm index af7a7150d92..2fc02253315 100644 --- a/code/modules/admin/sql_notes.dm +++ b/code/modules/admin/sql_notes.dm @@ -1,5 +1,4 @@ -// Do not attemtp to remove the blank string from the server arg. It will break DB saving. -/proc/add_note(target_ckey, notetext, timestamp, adminckey, logged = 1, server = "", checkrights = 1, show_after = TRUE, automated = FALSE) +/proc/add_note(target_ckey, notetext, timestamp, adminckey, logged = 1, checkrights = 1, show_after = TRUE, automated = FALSE) if(checkrights && !check_rights(R_ADMIN|R_MOD)) return if(!SSdbcore.IsConnected()) @@ -53,10 +52,6 @@ else if(usr && (usr.ckey == ckey(adminckey))) // Don't ckeyize special note sources adminckey = ckey(adminckey) - if(!server) - if(GLOB.configuration.general.server_name) - server = GLOB.configuration.general.server_name - // Force cast this to 1/0 incase someone tries to feed bad data automated = !!automated @@ -67,7 +62,7 @@ "targetckey" = target_ckey, "notetext" = notetext, "adminkey" = adminckey, - "server" = server, + "server" = GLOB.configuration.system.instance_id, "crewnum" = crew_number, "roundid" = GLOB.round_id, "automated" = automated diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index e1e31544d3e..94b10cf04a7 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -446,9 +446,6 @@ alert(usr, "This ban has already been lifted / does not exist.", "Error", "Ok") unbanpanel() - else if(href_list["warn"]) - usr.client.warn(href_list["warn"]) - else if(href_list["unbane"]) if(!check_rights(R_BAN)) return @@ -985,7 +982,8 @@ else if(href_list["removenote"]) var/note_id = href_list["removenote"] - remove_note(note_id) + if(alert("Do you really want to delete this note?", "Note deletion confirmation", "Yes", "No") == "Yes") + remove_note(note_id) else if(href_list["editnote"]) var/note_id = href_list["editnote"] @@ -1363,7 +1361,7 @@ to_chat(usr, "[M] doesn't seem to have an active client.") return - if(M.flavor_text == "" && M.client.prefs.flavor_text == "") + if(M.flavor_text == "" && M.client.prefs.active_character.flavor_text == "") to_chat(usr, "[M] has no flavor text set.") return @@ -1377,8 +1375,8 @@ M.flavor_text = "" // Clear and save the DB character's flavor text - M.client.prefs.flavor_text = "" - M.client.prefs.save_character(M.client) + M.client.prefs.active_character.flavor_text = "" + M.client.prefs.active_character.save(M.client) else if(href_list["userandomname"]) if(!check_rights(R_ADMIN)) @@ -1401,12 +1399,12 @@ message_admins("[key_name_admin(usr)] has forced [key_name_admin(M)] to use a random name.") // Update the mob's name with a random one straight away - var/random_name = random_name(M.client.prefs.gender, M.client.prefs.species) + var/random_name = random_name(M.client.prefs.active_character.gender, M.client.prefs.active_character.species) M.rename_character(M.real_name, random_name) // Save that random name for next rounds - M.client.prefs.real_name = random_name - M.client.prefs.save_character(M.client) + M.client.prefs.active_character.real_name = random_name + M.client.prefs.active_character.save(M.client) else if(href_list["asays"]) if(!check_rights(R_ADMIN)) diff --git a/code/modules/admin/verbs/adminhelp.dm b/code/modules/admin/verbs/adminhelp.dm index e206f345c0c..939bfd10f54 100644 --- a/code/modules/admin/verbs/adminhelp.dm +++ b/code/modules/admin/verbs/adminhelp.dm @@ -6,7 +6,7 @@ GLOBAL_LIST_INIT(adminhelp_ignored_words, list("unknown", "the", "a", "an", "of" set name = "Adminhelp" //handle muting and automuting - if(prefs.muted & MUTE_ADMINHELP) + if(check_mute(ckey, MUTE_ADMINHELP)) to_chat(src, "Error: Admin-PM: You cannot send adminhelps (Muted).") return @@ -47,16 +47,8 @@ GLOBAL_LIST_INIT(adminhelp_ignored_words, list("unknown", "the", "a", "an", "of" SSdiscord.send2discord_simple_noadmins("**\[Adminhelp]** [key_name(src)]: [msg]", check_send_always = TRUE) if("Mentorhelp") - var/alerttext var/list/mentorcount = staff_countup(R_MENTOR) var/active_mentors = mentorcount[1] - var/inactive_mentors = mentorcount[3] - - if(active_mentors <= 0) - if(inactive_mentors) - alerttext = " | **ALL MENTORS AFK**" - else - alerttext = " | **NO MENTORS ONLINE**" log_admin("[selected_type]: [key_name(src)]: [msg] - heard by [active_mentors] non-AFK mentors.") - SSdiscord.send2discord_simple(DISCORD_WEBHOOK_MENTOR, "[key_name(src)]: [msg][alerttext]") + SSdiscord.send2discord_simple_mentor("[key_name(src)]: [msg]") diff --git a/code/modules/admin/verbs/adminpm.dm b/code/modules/admin/verbs/adminpm.dm index 7186406e7fa..348d5690ecd 100644 --- a/code/modules/admin/verbs/adminpm.dm +++ b/code/modules/admin/verbs/adminpm.dm @@ -58,7 +58,7 @@ //takes input from cmd_admin_pm_context, cmd_admin_pm_panel or /client/Topic and sends them a PM. //Fetching a message if needed. src is the sender and C is the target client /client/proc/cmd_admin_pm(whom, msg, type = "PM") - if(prefs.muted & MUTE_ADMINHELP) + if(check_mute(ckey, MUTE_ADMINHELP)) to_chat(src, "Error: Private-Message: You are unable to use PM-s (muted).") return @@ -212,7 +212,7 @@ return /client/proc/cmd_admin_discord_pm() - if(prefs.muted & MUTE_ADMINHELP) + if(check_mute(ckey, MUTE_ADMINHELP)) to_chat(src, "Error: Private-Message: You are unable to use PMs (muted).") return diff --git a/code/modules/admin/verbs/adminsay.dm b/code/modules/admin/verbs/adminsay.dm index be4a4763bff..4005d9b7435 100644 --- a/code/modules/admin/verbs/adminsay.dm +++ b/code/modules/admin/verbs/adminsay.dm @@ -43,6 +43,7 @@ msg = sanitize(copytext(msg, 1, MAX_MESSAGE_LEN)) log_mentorsay(msg, src) + mob.create_log(OOC_LOG, "MSAY: [msg]") if(!msg) return diff --git a/code/modules/admin/verbs/deadsay.dm b/code/modules/admin/verbs/deadsay.dm index c3ab3bfe47f..410956c9d2a 100644 --- a/code/modules/admin/verbs/deadsay.dm +++ b/code/modules/admin/verbs/deadsay.dm @@ -9,7 +9,7 @@ if(!src.mob) return - if(prefs.muted & MUTE_DEADCHAT) + if(check_mute(ckey, MUTE_DEADCHAT)) to_chat(src, "You cannot send DSAY messages (muted).") return diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm index fd8a7eaa00e..81ba982b556 100644 --- a/code/modules/admin/verbs/debug.dm +++ b/code/modules/admin/verbs/debug.dm @@ -357,8 +357,8 @@ GLOBAL_PROTECT(AdminProcCallSpamPrevention) pai.real_name = pai.name pai.key = choice.key card.setPersonality(pai) - for(var/datum/paiCandidate/candidate in GLOB.paiController.pai_candidates) - if(candidate.key == choice.key) + for(var/datum/pai_save/candidate in GLOB.paiController.pai_candidates) + if(candidate.owner.ckey == choice.ckey) GLOB.paiController.pai_candidates.Remove(candidate) SSblackbox.record_feedback("tally", "admin_verb", 1, "Make pAI") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! diff --git a/code/modules/admin/verbs/gimmick_team.dm b/code/modules/admin/verbs/gimmick_team.dm index 884569c96fa..c9d0c3a4363 100644 --- a/code/modules/admin/verbs/gimmick_team.dm +++ b/code/modules/admin/verbs/gimmick_team.dm @@ -63,9 +63,10 @@ for(var/mob/thisplayer in players_to_spawn) var/mob/living/carbon/human/H = new /mob/living/carbon/human(T) H.name = random_name(pick(MALE,FEMALE)) - var/datum/preferences/A = new() //Randomize appearance - A.real_name = H.name - A.copy_to(H) + var/datum/character_save/S = new //Randomize appearance + S.randomise() + S.real_name = H.name + S.copy_to(H) H.dna.ready_dna(H) H.mind_initialize() diff --git a/code/modules/admin/verbs/gsay.dm b/code/modules/admin/verbs/gsay.dm new file mode 100644 index 00000000000..d777fa422b2 --- /dev/null +++ b/code/modules/admin/verbs/gsay.dm @@ -0,0 +1,27 @@ +// GSAY +// Like asay but global between instances! +// *Insert changeling hivemind :g joke here* + +/client/proc/gsay(msg as text) + set name = "gsay" + set hidden = TRUE + if(!check_rights(R_ADMIN)) + return + + if(!msg) + return + msg = sanitize(copytext(msg, 1, MAX_MESSAGE_LEN)) + + // To whoever says "Why dont you just topic the full message with formatting" + // This lets us use this in other apps, like a discord bot, without HTML parsing + // It also removes a way to put whatever HTML we want in the chat window + var/built_topic = "gsay&msg=[url_encode(msg)]&usr=[url_encode(usr.ckey)]&src=[url_encode(GLOB.configuration.system.instance_id)]" + + // Send to peers + SSinstancing.topic_all_peers(built_topic) + // Send to online admins + for(var/client/C in GLOB.admins) + if(R_ADMIN & C.holder.rights) + to_chat(C, "GSAY: [usr.ckey]@[GLOB.configuration.system.instance_id]: [msg]") + + SSblackbox.record_feedback("tally", "admin_verb", 1, "gsay") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! diff --git a/code/modules/admin/verbs/infiltratorteam_syndicate.dm b/code/modules/admin/verbs/infiltratorteam_syndicate.dm index 1199a8e5ea5..6917c95d3b9 100644 --- a/code/modules/admin/verbs/infiltratorteam_syndicate.dm +++ b/code/modules/admin/verbs/infiltratorteam_syndicate.dm @@ -124,9 +124,10 @@ GLOBAL_VAR_INIT(sent_syndicate_infiltration_team, 0) var/syndicate_infiltrator_name = random_name(pick(MALE,FEMALE)) - var/datum/preferences/A = new() //Randomize appearance - A.real_name = syndicate_infiltrator_name - A.copy_to(new_syndicate_infiltrator) + var/datum/character_save/S = new //Randomize appearance + S.randomise() + S.real_name = syndicate_infiltrator_name + S.copy_to(new_syndicate_infiltrator) new_syndicate_infiltrator.dna.ready_dna(new_syndicate_infiltrator) //Creates mind stuff. diff --git a/code/modules/admin/verbs/massmodvar.dm b/code/modules/admin/verbs/massmodvar.dm index 542d5a5b5fe..80101f3edcf 100644 --- a/code/modules/admin/verbs/massmodvar.dm +++ b/code/modules/admin/verbs/massmodvar.dm @@ -203,7 +203,7 @@ log_world("### MassVarEdit by [src]: [O.type] (A/R [accepted]/[rejected]) [variable]=[html_encode("[O.vars[variable]]")]([list2params(value)])") log_admin("[key_name(src)] mass modified [original_name]'s [variable] to [O.vars[variable]] ([accepted] objects modified)") - message_admins("[key_name_admin(src)] mass modified [original_name]'s [variable] to [O.vars[variable]] ([accepted] objects modified)") + message_admins("[key_name_admin(src)] mass modified [original_name]'s [variable] to [html_encode("[O.vars[variable]]")] ([accepted] objects modified)") /proc/get_all_of_type(T, subtypes = TRUE) var/list/typecache = list() diff --git a/code/modules/admin/verbs/modifyvariables.dm b/code/modules/admin/verbs/modifyvariables.dm index 975071350fb..799aed71436 100644 --- a/code/modules/admin/verbs/modifyvariables.dm +++ b/code/modules/admin/verbs/modifyvariables.dm @@ -355,7 +355,7 @@ GLOBAL_LIST_INIT(VVpixelmovement, list("step_x", "step_y", "step_size", "bound_h return log_world("### ListVarEdit by [src]: [(O ? O.type : "/list")] [objectvar]: ADDED=[var_value]") log_admin("[key_name(src)] modified [original_name]'s [objectvar]: ADDED=[var_value]") - message_admins("[key_name_admin(src)] modified [original_name]'s [objectvar]: ADDED=[var_value]") + message_admins("[key_name_admin(src)] modified [original_name]'s [objectvar]: ADDED=[html_encode("[var_value]")]") /client/proc/mod_list(list/L, atom/O, original_name, objectvar, index, autodetect_class = FALSE) if(!check_rights(R_VAREDIT)) @@ -495,7 +495,7 @@ GLOBAL_LIST_INIT(VVpixelmovement, list("step_x", "step_y", "step_size", "bound_h return log_world("### ListVarEdit by [src]: [O.type] [objectvar]: REMOVED=[html_encode("[original_var]")]") log_admin("[key_name(src)] modified [original_name]'s [objectvar]: REMOVED=[original_var]") - message_admins("[key_name_admin(src)] modified [original_name]'s [objectvar]: REMOVED=[original_var]") + message_admins("[key_name_admin(src)] modified [original_name]'s [objectvar]: REMOVED=[html_encode("[original_var]")]") return if(VV_TEXT) @@ -514,7 +514,7 @@ GLOBAL_LIST_INIT(VVpixelmovement, list("step_x", "step_y", "step_size", "bound_h return log_world("### ListVarEdit by [src]: [(O ? O.type : "/list")] [objectvar]: [original_var]=[new_var]") log_admin("[key_name(src)] modified [original_name]'s [objectvar]: [original_var]=[new_var]") - message_admins("[key_name_admin(src)] modified [original_name]'s varlist [objectvar]: [original_var]=[new_var]") + message_admins("[key_name_admin(src)] modified [original_name]'s varlist [objectvar]: [original_var]=[html_encode("[new_var]")]") /proc/vv_varname_lockcheck(param_var_name) if(param_var_name in GLOB.VVlocked) @@ -630,5 +630,5 @@ GLOBAL_LIST_INIT(VVpixelmovement, list("step_x", "step_y", "step_size", "bound_h SEND_GLOBAL_SIGNAL(COMSIG_GLOB_VAR_EDIT, args) log_world("### VarEdit by [src]: [O.type] [variable]=[html_encode("[var_new]")]") log_admin("[key_name(src)] modified [original_name]'s [variable] to [var_new]") - var/msg = "[key_name_admin(src)] modified [original_name]'s [variable] to [var_new]" + var/msg = "[key_name_admin(src)] modified [original_name]'s [variable] to [html_encode("[var_new]")]" message_admins(msg) diff --git a/code/modules/admin/verbs/one_click_antag.dm b/code/modules/admin/verbs/one_click_antag.dm index 87a373b5127..884baa9a11d 100644 --- a/code/modules/admin/verbs/one_click_antag.dm +++ b/code/modules/admin/verbs/one_click_antag.dm @@ -32,7 +32,7 @@ if(M.stat || !M.mind || M.mind.special_role || M.mind.offstation_role) return FALSE if(temp) - if((M.mind.assigned_role in temp.restricted_jobs) || (M.client.prefs.species in temp.protected_species)) + if((M.mind.assigned_role in temp.restricted_jobs) || (M.client.prefs.active_character.species in temp.protected_species)) return FALSE if(role) // Don't even bother evaluating if there's no role if(player_old_enough_antag(M.client,role) && (role in M.client.prefs.be_special) && !M.client.skip_antag && (!jobban_isbanned(M, role))) @@ -138,7 +138,7 @@ if(confirm != "Yes") return 0 var/image/I = new('icons/mob/simple_human.dmi', "wizard") - var/list/candidates = SSghost_spawns.poll_candidates("Do you wish to be considered for the position of a Wizard Foundation 'diplomat'?", "wizard", source = I) + var/list/candidates = SSghost_spawns.poll_candidates("Do you wish to be considered for the position of a Wizard Federation 'diplomat'?", "wizard", source = I) log_admin("[key_name(owner)] tried making a Wizard with One-Click-Antag") message_admins("[key_name_admin(owner)] tried making a Wizard with One-Click-Antag") @@ -374,8 +374,8 @@ //First we spawn a dude. var/mob/living/carbon/human/new_character = new(pick(GLOB.latejoin))//The mob being spawned. - var/datum/preferences/A = new(G_found.client) - A.copy_to(new_character) + // Then clone stuff over + G_found.client.prefs.active_character.copy_to(new_character) new_character.dna.ready_dna(new_character) new_character.key = G_found.key @@ -388,13 +388,14 @@ var/syndicate_commando_rank = pick("Corporal", "Sergeant", "Staff Sergeant", "Sergeant 1st Class", "Master Sergeant", "Sergeant Major") var/syndicate_commando_name = pick(GLOB.last_names) - var/datum/preferences/A = new()//Randomize appearance for the commando. + var/datum/character_save/S = new //Randomize appearance for the commando. + S.randomise() if(syndicate_leader_selected) - A.real_name = "[syndicate_commando_leader_rank] [syndicate_commando_name]" - A.age = rand(35,45) + S.real_name = "[syndicate_commando_leader_rank] [syndicate_commando_name]" + S.age = rand(35, 45) else - A.real_name = "[syndicate_commando_rank] [syndicate_commando_name]" - A.copy_to(new_syndicate_commando) + S.real_name = "[syndicate_commando_rank] [syndicate_commando_name]" + S.copy_to(new_syndicate_commando) new_syndicate_commando.dna.ready_dna(new_syndicate_commando)//Creates DNA. @@ -576,7 +577,8 @@ if(candidates.len) var/teamOneMembers = 5 var/teamTwoMembers = 5 - var/datum/preferences/A = new() + var/datum/character_save/S = new + S.randomise() for(var/thing in GLOB.landmarks_list) var/obj/effect/landmark/L = thing if(L.name == "tdome1") @@ -585,7 +587,7 @@ var/mob/living/carbon/human/newMember = new(L.loc) - A.copy_to(newMember) + S.copy_to(newMember) newMember.dna.ready_dna(newMember) @@ -607,7 +609,7 @@ var/mob/living/carbon/human/newMember = new(L.loc) - A.copy_to(newMember) + S.copy_to(newMember) newMember.dna.ready_dna(newMember) diff --git a/code/modules/admin/verbs/onlyone.dm b/code/modules/admin/verbs/onlyone.dm index 32ec86541ab..ac21f06c4e4 100644 --- a/code/modules/admin/verbs/onlyone.dm +++ b/code/modules/admin/verbs/onlyone.dm @@ -11,8 +11,9 @@ continue if(is_type_in_list(H.dna.species, incompatible_species)) H.set_species(/datum/species/human) - var/datum/preferences/A = new() // Randomize appearance - A.copy_to(H) + var/datum/character_save/S = new // Randomize appearance + S.randomise() + S.copy_to(H) SSticker.mode.traitors += H.mind H.mind.special_role = SPECIAL_ROLE_TRAITOR diff --git a/code/modules/admin/verbs/onlyoneteam.dm b/code/modules/admin/verbs/onlyoneteam.dm index a822367b68c..311a0bac2d8 100644 --- a/code/modules/admin/verbs/onlyoneteam.dm +++ b/code/modules/admin/verbs/onlyoneteam.dm @@ -12,8 +12,9 @@ continue if(is_type_in_list(H.dna.species, incompatible_species)) H.set_species(/datum/species/human) - var/datum/preferences/A = new() // Randomize appearance - A.copy_to(H) + var/datum/character_save/S = new // Randomize appearance + S.randomise() + S.copy_to(H) for(var/obj/item/I in H) if(istype(I, /obj/item/implant)) diff --git a/code/modules/admin/verbs/pray.dm b/code/modules/admin/verbs/pray.dm index 8055c5e7a03..93aaf292332 100644 --- a/code/modules/admin/verbs/pray.dm +++ b/code/modules/admin/verbs/pray.dm @@ -1,3 +1,7 @@ +#define NUKE_INTACT 0 +#define NUKE_CORE_MISSING 1 +#define NUKE_MISSING 2 + /mob/living/verb/pray(msg as text) set category = "IC" set name = "Pray" @@ -7,7 +11,7 @@ return if(usr.client) - if(usr.client.prefs.muted & MUTE_PRAY) + if(check_mute(client.ckey, MUTE_PRAY)) to_chat(usr, "You cannot pray (muted).") return if(client.handle_spam_prevention(msg, MUTE_PRAY, OOC_COOLDOWN)) @@ -72,11 +76,21 @@ /proc/Nuke_request(text , mob/Sender) var/nuke_code = get_nuke_code() + var/nuke_status = get_nuke_status() var/msg = sanitize(copytext(text, 1, MAX_MESSAGE_LEN)) msg = "NUKE CODE REQUEST: [key_name(Sender)] ([ADMIN_PP(Sender,"PP")]) ([ADMIN_VV(Sender,"VV")]) ([ADMIN_TP(Sender,"TP")]) ([ADMIN_SM(Sender,"SM")]) ([admin_jump_link(Sender)]) ([ADMIN_BSA(Sender,"BSA")]) ([ADMIN_CENTCOM_REPLY(Sender,"RPLY")]): [msg]" for(var/client/X in GLOB.admins) if(check_rights(R_EVENT,0,X.mob)) to_chat(X, msg) - to_chat(X, "The nuke code is [nuke_code].") + if(nuke_status == NUKE_MISSING) + to_chat(X, "The nuclear device is not on station!") + else + to_chat(X, "The nuke code is [nuke_code].") + if(nuke_status == NUKE_CORE_MISSING) + to_chat(X, "The nuclear device does not have a core, and will not arm!") if(X.prefs.sound & SOUND_ADMINHELP) SEND_SOUND(X, sound('sound/effects/adminhelp.ogg')) + +#undef NUKE_INTACT +#undef NUKE_CORE_MISSING +#undef NUKE_MISSING diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm index 81be8843152..07d5d1e5d7b 100644 --- a/code/modules/admin/verbs/randomverbs.dm +++ b/code/modules/admin/verbs/randomverbs.dm @@ -230,19 +230,19 @@ if(automute) muteunmute = "auto-muted" - M.client.prefs.muted |= mute_type + force_add_mute(M.client.ckey, mute_type) log_admin("SPAM AUTOMUTE: [muteunmute] [key_name(M)] from [mute_string]") message_admins("SPAM AUTOMUTE: [muteunmute] [key_name_admin(M)] from [mute_string].", 1) to_chat(M, "You have been [muteunmute] from [mute_string] by the SPAM AUTOMUTE system. Contact an admin.") SSblackbox.record_feedback("tally", "admin_verb", 1, "Automute") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! return - if(M.client.prefs.muted & mute_type) - muteunmute = "unmuted" - M.client.prefs.muted &= ~mute_type - else + toggle_mute(M.client.ckey, mute_type) + + if(check_mute(M.client.ckey, mute_type)) muteunmute = "muted" - M.client.prefs.muted |= mute_type + else + muteunmute = "unmuted" log_admin("[key_name(usr)] has [muteunmute] [key_name(M)] from [mute_string]") message_admins("[key_name_admin(usr)] has [muteunmute] [key_name_admin(M)] from [mute_string].", 1) @@ -396,10 +396,12 @@ Traitors and the like can also be revived with the previous role mostly intact. new_character.age = record_found.fields["age"] new_character.dna.blood_type = record_found.fields["blood_type"] else + // We make a random character new_character.change_gender(pick(MALE,FEMALE)) - var/datum/preferences/A = new() - A.real_name = G_found.real_name - A.copy_to(new_character) + var/datum/character_save/S = new + S.randomise() + S.real_name = G_found.real_name + S.copy_to(new_character) if(!new_character.real_name) new_character.real_name = random_name(new_character.gender) @@ -606,7 +608,7 @@ Traitors and the like can also be revived with the previous role mostly intact. "Custom" = "Cryptic Message") var/list/MsgSound = list("Beep" = 'sound/misc/notice2.ogg', - "Enemy Communications Intercepted" = 'sound/AI/intercept2.ogg', + "Enemy Communications Intercepted" = 'sound/AI/intercept.ogg', "New Command Report Created" = 'sound/AI/commandreport.ogg') var/type = input(usr, "Pick a type of report to send", "Report Type", "") as anything in MsgType diff --git a/code/modules/admin/verbs/striketeam.dm b/code/modules/admin/verbs/striketeam.dm index 55895e5b282..877dff5cd69 100644 --- a/code/modules/admin/verbs/striketeam.dm +++ b/code/modules/admin/verbs/striketeam.dm @@ -138,13 +138,14 @@ GLOBAL_VAR_INIT(sent_strike_team, 0) var/commando_leader_rank = pick("Lieutenant", "Captain", "Major") var/commando_name = pick(GLOB.commando_names) - var/datum/preferences/A = new()//Randomize appearance for the commando. + var/datum/character_save/S = new //Randomize appearance for the commando. + S.randomise() if(is_leader) - A.age = rand(35,45) - A.real_name = "[commando_leader_rank] [commando_name]" + S.age = rand(35, 45) + S.real_name = "[commando_leader_rank] [commando_name]" else - A.real_name = "[commando_name]" - A.copy_to(new_commando) + S.real_name = "[commando_name]" + S.copy_to(new_commando) new_commando.dna.ready_dna(new_commando)//Creates DNA. diff --git a/code/modules/admin/verbs/striketeam_syndicate.dm b/code/modules/admin/verbs/striketeam_syndicate.dm index 0c359e532b6..b40f9b6aae6 100644 --- a/code/modules/admin/verbs/striketeam_syndicate.dm +++ b/code/modules/admin/verbs/striketeam_syndicate.dm @@ -104,13 +104,14 @@ GLOBAL_VAR_INIT(sent_syndicate_strike_team, 0) var/syndicate_commando_rank = pick("Corporal", "Sergeant", "Staff Sergeant", "Sergeant 1st Class", "Master Sergeant", "Sergeant Major") var/syndicate_commando_name = pick(GLOB.last_names) - var/datum/preferences/A = new()//Randomize appearance for the commando. + var/datum/character_save/S = new //Randomize appearance for the commando. + S.randomise() if(is_leader) - A.age = rand(35,45) - A.real_name = "[syndicate_commando_leader_rank] [syndicate_commando_name]" + S.age = rand(35, 45) + S.real_name = "[syndicate_commando_leader_rank] [syndicate_commando_name]" else - A.real_name = "[syndicate_commando_rank] [syndicate_commando_name]" - A.copy_to(new_syndicate_commando) + S.real_name = "[syndicate_commando_rank] [syndicate_commando_name]" + S.copy_to(new_syndicate_commando) new_syndicate_commando.dna.ready_dna(new_syndicate_commando)//Creates DNA. diff --git a/code/modules/admin/verbs/view_instances.dm b/code/modules/admin/verbs/view_instances.dm new file mode 100644 index 00000000000..65d6105da3a --- /dev/null +++ b/code/modules/admin/verbs/view_instances.dm @@ -0,0 +1,33 @@ +/client/proc/view_instances() + set name = "View Server Instances" + set desc = "View the running server instances" + set category = "Server" + + if(!check_rights(R_ADMIN)) + return + + to_chat(usr, "Server instances info") + var/datum/db_query/dbq1 = SSdbcore.NewQuery({" + SELECT server_id, key_name, key_value FROM instance_data_cache WHERE server_id IN + (SELECT server_id FROM instance_data_cache WHERE + key_name='heartbeat' AND last_updated BETWEEN NOW() - INTERVAL 60 SECOND AND NOW()) + AND key_name IN ("playercount")"}) + if(!dbq1.warn_execute()) + qdel(dbq1) + return + + var/servers_outer = list() + while(dbq1.NextRow()) + if(!servers_outer[dbq1.item[1]]) + servers_outer[dbq1.item[1]] = list() + + servers_outer[dbq1.item[1]][dbq1.item[2]] = dbq1.item[3] // This should assoc load our data + + qdel(dbq1) + + for(var/server in servers_outer) + var/server_data = servers_outer[server] + var/players = text2num(server_data["playercount"]) + + to_chat(usr, "[server] - [players] player[players == 1 ? "" : "s"] online.") + to_chat(usr, "Offline instances are not reported") diff --git a/code/modules/admin/watchlist.dm b/code/modules/admin/watchlist.dm index 89288bd13ab..6b98a6050cf 100644 --- a/code/modules/admin/watchlist.dm +++ b/code/modules/admin/watchlist.dm @@ -16,8 +16,21 @@ qdel(query_watchfind) return else + qdel(query_watchfind) target_ckey = new_ckey - if(check_watchlist(target_ckey)) + + var/already_watched = FALSE + var/datum/db_query/query_watch = SSdbcore.NewQuery("SELECT reason FROM watch WHERE ckey=:target_ckey", list( + "target_ckey" = target_ckey + )) + if(!query_watch.warn_execute()) + qdel(query_watch) + return + if(query_watch.NextRow()) + already_watched = TRUE + qdel(query_watch) + + if(already_watched) to_chat(usr, "[target_ckey] is already on the watchlist.") return var/reason = input(usr,"Please state the reason","Reason") as message|null @@ -132,18 +145,3 @@ output += "
[reason]
" usr << browse(output, "window=watchwin;size=900x500") qdel(query_watchlist) - -/proc/check_watchlist(target_ckey) - var/datum/db_query/query_watch = SSdbcore.NewQuery("SELECT reason FROM watch WHERE ckey=:target_ckey", list( - "target_ckey" = target_ckey - )) - if(!query_watch.warn_execute()) - qdel(query_watch) - return - if(query_watch.NextRow()) - var/entry = query_watch.item[1] - qdel(query_watch) - return entry - else - qdel(query_watch) - return 0 diff --git a/code/modules/antagonists/traitor/contractor/datums/objective_contract.dm b/code/modules/antagonists/traitor/contractor/datums/objective_contract.dm index 171c1662cf9..a4a5edd4be0 100644 --- a/code/modules/antagonists/traitor/contractor/datums/objective_contract.dm +++ b/code/modules/antagonists/traitor/contractor/datums/objective_contract.dm @@ -25,7 +25,6 @@ "Locker Toilets", "Maintenance Bar", "Medical Secondary Storage", - "Mechanic Workshop", "Port Emergency Storage", "Psych Room", "Toxins Launch Room", diff --git a/code/modules/antagonists/wishgranter/wishgranter.dm b/code/modules/antagonists/wishgranter/wishgranter.dm index 92e6336d693..99efbc811f4 100644 --- a/code/modules/antagonists/wishgranter/wishgranter.dm +++ b/code/modules/antagonists/wishgranter/wishgranter.dm @@ -25,9 +25,6 @@ H.dna.SetSEState(GLOB.hulkblock, TRUE) singlemutcheck(H, GLOB.hulkblock, MUTCHK_FORCED) - H.dna.SetSEState(GLOB.xrayblock, TRUE) - singlemutcheck(H, GLOB.xrayblock, MUTCHK_FORCED) - H.dna.SetSEState(GLOB.fireblock, TRUE) singlemutcheck(H, GLOB.fireblock, MUTCHK_FORCED) diff --git a/code/modules/arcade/arcade_base.dm b/code/modules/arcade/arcade_base.dm index 2a2a5edaec0..9db0c2a509e 100644 --- a/code/modules/arcade/arcade_base.dm +++ b/code/modules/arcade/arcade_base.dm @@ -59,12 +59,8 @@ to_chat(user, "Someone else is already playing this machine, please wait your turn!") return -/obj/machinery/arcade/attackby(obj/item/O as obj, mob/user as mob, params) - if(istype(O, /obj/item/screwdriver) && anchored) - playsound(src.loc, O.usesound, 50, 1) - panel_open = !panel_open - to_chat(user, "You [panel_open ? "open" : "close"] the maintenance panel.") - update_icon() +/obj/machinery/arcade/attackby(obj/item/O, mob/user, params) + if(exchange_parts(user, O)) return if(!freeplay) if(istype(O, /obj/item/card/id)) @@ -76,12 +72,22 @@ var/obj/item/stack/spacecash/C = O if(pay_with_cash(C, user)) tokens += 1 - return - if(panel_open && component_parts && istype(O, /obj/item/crowbar)) - default_deconstruction_crowbar(user, O) - return + return return ..() +/obj/machinery/arcade/screwdriver_act(mob/living/user, obj/item/I) + if(!anchored) + return FALSE + default_deconstruction_screwdriver(user, icon_state, icon_state, I) + update_icon() + return TRUE + +/obj/machinery/arcade/crowbar_act(mob/living/user, obj/item/I) + if(!component_parts || !panel_open) + return FALSE + default_deconstruction_crowbar(user, I) + return TRUE + /obj/machinery/arcade/update_icon() return diff --git a/code/modules/arcade/claw_game.dm b/code/modules/arcade/claw_game.dm index 3af88b647c4..1b458160238 100644 --- a/code/modules/arcade/claw_game.dm +++ b/code/modules/arcade/claw_game.dm @@ -66,7 +66,14 @@ GLOBAL_VAR(claw_game_html) for(var/i in 1 to img_resources.len) user << browse_rsc(img_resources[i]) var/my_game_html = replacetext(GLOB.claw_game_html, "/* ref src */", UID()) - user << browse(my_game_html, "window=[window_name];size=915x600;can_resize=0") + var/datum/browser/popup = new(user, window_name, name, 915, 700, src) + popup.set_content(my_game_html) + popup.add_stylesheet("page.css", 'code/modules/arcade/page.css') + popup.add_stylesheet("Button.scss", 'tgui/packages/tgui/styles/components/Button.scss') + popup.add_script("jquery-1.8.2.min.js", 'html/browser/jquery-1.8.2.min.js') + popup.add_script("jquery-ui-1.8.24.custom.min.js", 'html/browser/jquery-ui-1.8.24.custom.min.js') + popup.open() + user.set_machine(src) /obj/machinery/arcade/claw/Topic(href, list/href_list) if(..()) diff --git a/code/modules/arcade/crane.html b/code/modules/arcade/crane.html index 5fef0d104dc..d0d7ffaa37b 100644 --- a/code/modules/arcade/crane.html +++ b/code/modules/arcade/crane.html @@ -251,7 +251,7 @@ -
+
@@ -268,7 +268,7 @@
-
+

diff --git a/code/modules/arcade/mob_hunt/mob_avatar.dm b/code/modules/arcade/mob_hunt/mob_avatar.dm index 7f7f53d3199..19f792af763 100644 --- a/code/modules/arcade/mob_hunt/mob_avatar.dm +++ b/code/modules/arcade/mob_hunt/mob_avatar.dm @@ -1,4 +1,3 @@ - /obj/effect/nanomob name = "Nano-Mob Avatar" //will be overridden by the mob datum name value when created desc = "A wild Nano-Mob appeared! Hit it with your PDA with the game open to attempt to capture it!" @@ -12,17 +11,29 @@ var/list/clients_encountered = list() //tracks who has already interacted with us, so they can't attempt a second capture var/image/avatar -/obj/effect/nanomob/New(loc, datum/mob_hunt/new_info) - ..() +/obj/effect/nanomob/Initialize(mapload, datum/mob_hunt/new_info) + . = ..() if(!new_info) - qdel(src) - return + return INITIALIZE_HINT_QDEL mob_info = new_info + RegisterSignal(mob_info, COMSIG_PARENT_QDELETING, .proc/delete_wrapper) update_self() forceMove(mob_info.spawn_point) if(!mob_info.is_trap) addtimer(CALLBACK(src, .proc/despawn), mob_info.lifetime) +/obj/effect/nanomob/Destroy() + SSmob_hunt.trap_spawns -= src + SSmob_hunt.normal_spawns -= src + mob_info = null // Can't delete this since multiple players can get the exact same /datum/mob_hunt. (This should be refactored) + clients_encountered.Cut() + QDEL_NULL(avatar) + return ..() + +/obj/effect/nanomob/proc/delete_wrapper() + SIGNAL_HANDLER + qdel(src) + /obj/effect/nanomob/proc/update_self() if(!mob_info) return @@ -132,12 +143,6 @@ icon_state = "placeholder" var/obj/machinery/computer/mob_battle_terminal/my_terminal -/obj/effect/nanomob/battle/New(loc, datum/mob_hunt/new_info) - . = ..() - if(new_info) - mob_info = new_info - update_self() - /obj/effect/nanomob/battle/update_self() if(!mob_info) name = "Nano-Mob Battle Avatar" diff --git a/code/modules/arcade/mob_hunt/mob_type_datums.dm b/code/modules/arcade/mob_hunt/mob_type_datums.dm index c042a9c7cfc..9d94b5f51f6 100644 --- a/code/modules/arcade/mob_hunt/mob_type_datums.dm +++ b/code/modules/arcade/mob_hunt/mob_type_datums.dm @@ -206,9 +206,7 @@ immunity = list(TYPE_GROUND) area_blacklist = list(/area/maintenance) area_whitelist = list(/area/hallway, - /area/escapepodbay, - /area/engine/mechanic_workshop, - /area/security/podbay) + /area/escapepodbay) /datum/mob_type/bluespace name = "Bluespace" diff --git a/code/modules/arcade/prize_datums.dm b/code/modules/arcade/prize_datums.dm index 8ffc59825cb..8be89339134 100644 --- a/code/modules/arcade/prize_datums.dm +++ b/code/modules/arcade/prize_datums.dm @@ -251,6 +251,12 @@ GLOBAL_DATUM_INIT(global_prizes, /datum/prizes, new()) typepath = /obj/item/toy/foamblade cost = 100 +/datum/prize_item/wind_up_toolbox + name = "Wind Up Toolbox" + desc = "A replica toolbox that rumbles when you turn the key." + typepath = /obj/item/toy/windup_toolbox + cost = 100 + /datum/prize_item/redbutton name = "Shiny Red Button" desc = "PRESS IT!" diff --git a/code/modules/assembly/infrared.dm b/code/modules/assembly/infrared.dm index d1efa862a63..cd83952fcae 100644 --- a/code/modules/assembly/infrared.dm +++ b/code/modules/assembly/infrared.dm @@ -215,7 +215,7 @@ var/life_cycles = 0 var/life_cap = 20 anchored = TRUE - pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE + pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE | PASSFENCE /obj/effect/beam/i_beam/proc/hit() diff --git a/code/modules/atmospherics/machinery/airalarm.dm b/code/modules/atmospherics/machinery/airalarm.dm index 2472491fab6..8f1acb83d4f 100644 --- a/code/modules/atmospherics/machinery/airalarm.dm +++ b/code/modules/atmospherics/machinery/airalarm.dm @@ -80,7 +80,7 @@ req_one_access = list(ACCESS_ATMOSPHERICS, ACCESS_ENGINE_EQUIP) max_integrity = 250 integrity_failure = 80 - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 100, "bomb" = 0, "bio" = 100, "rad" = 100, "fire" = 90, "acid" = 30) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 100, BOMB = 0, BIO = 100, RAD = 100, FIRE = 90, ACID = 30) resistance_flags = FIRE_PROOF siemens_strength = 1 frequency = ATMOS_VENTSCRUB diff --git a/code/modules/atmospherics/machinery/atmospherics.dm b/code/modules/atmospherics/machinery/atmospherics.dm index bb255692633..af834970244 100644 --- a/code/modules/atmospherics/machinery/atmospherics.dm +++ b/code/modules/atmospherics/machinery/atmospherics.dm @@ -35,7 +35,7 @@ Pipelines + Other Objects -> Pipe network /obj/machinery/atmospherics/New() if (!armor) - armor = list("melee" = 25, "bullet" = 10, "laser" = 10, "energy" = 100, "bomb" = 0, "bio" = 100, "rad" = 100, "fire" = 100, "acid" = 70) + armor = list(MELEE = 25, BULLET = 10, LASER = 10, ENERGY = 100, BOMB = 0, BIO = 100, RAD = 100, FIRE = 100, ACID = 70) ..() if(!pipe_color) @@ -71,10 +71,13 @@ Pipelines + Other Objects -> Pipe network // Icons/overlays/underlays /obj/machinery/atmospherics/update_icon() var/turf/T = get_turf(loc) - if(!T || level == 2 || !T.intact) - plane = GAME_PLANE - else + if(T && T.transparent_floor) plane = FLOOR_PLANE + else + if(!T || level == 2 || !T.intact) + plane = GAME_PLANE + else + plane = FLOOR_PLANE /obj/machinery/atmospherics/proc/update_pipe_image() pipe_image = image(src, loc, layer = ABOVE_HUD_LAYER, dir = dir) //the 20 puts it above Byond's darkness (not its opacity view) @@ -95,15 +98,18 @@ Pipelines + Other Objects -> Pipe network /obj/machinery/atmospherics/proc/add_underlay(turf/T, obj/machinery/atmospherics/node, direction, icon_connect_type) if(node) - if(T.intact && node.level == 1 && istype(node, /obj/machinery/atmospherics/pipe)) + if(T.intact && node.level == 1 && istype(node, /obj/machinery/atmospherics/pipe) && !T.transparent_floor) //underlays += SSair.icon_manager.get_atmos_icon("underlay_down", direction, color_cache_name(node)) underlays += SSair.icon_manager.get_atmos_icon("underlay", direction, color_cache_name(node), "down" + icon_connect_type) else //underlays += SSair.icon_manager.get_atmos_icon("underlay_intact", direction, color_cache_name(node)) underlays += SSair.icon_manager.get_atmos_icon("underlay", direction, color_cache_name(node), "intact" + icon_connect_type) else - //underlays += SSair.icon_manager.get_atmos_icon("underlay_exposed", direction, pipe_color) - underlays += SSair.icon_manager.get_atmos_icon("underlay", direction, color_cache_name(node), "exposed" + icon_connect_type) + if(T.transparent_floor) //we want to keep pipes under transparent floors connected normally + underlays += SSair.icon_manager.get_atmos_icon("underlay", direction, color_cache_name(node), "intact" + icon_connect_type) + else + //underlays += SSair.icon_manager.get_atmos_icon("underlay_exposed", direction, pipe_color) + underlays += SSair.icon_manager.get_atmos_icon("underlay", direction, color_cache_name(node), "exposed" + icon_connect_type) /obj/machinery/atmospherics/proc/update_underlays() if(check_icon_cache()) @@ -166,11 +172,14 @@ Pipelines + Other Objects -> Pipe network //(De)construction /obj/machinery/atmospherics/attackby(obj/item/W, mob/user) + var/turf/T = get_turf(src) if(can_unwrench && istype(W, /obj/item/wrench)) - var/turf/T = get_turf(src) + if(T.transparent_floor && istype(src, /obj/machinery/atmospherics/pipe) && layer != GAS_PIPE_VISIBLE_LAYER) //pipes on GAS_PIPE_VISIBLE_LAYER are above the transparent floor and should be interactable + to_chat(user, "You can't interact with something that's under the floor!") + return if(level == 1 && isturf(T) && T.intact) to_chat(user, "You must remove the plating first.") - return 1 + return var/datum/gas_mixture/int_air = return_air() var/datum/gas_mixture/env_air = loc.return_air() add_fingerprint(user) @@ -184,14 +193,14 @@ Pipelines + Other Objects -> Pipe network playsound(src.loc, W.usesound, 50, 1) to_chat(user, "You begin to unfasten \the [src]...") if(internal_pressure > 2*ONE_ATMOSPHERE) - to_chat(user, "As you begin unwrenching \the [src] a gush of air blows in your face... maybe you should reconsider?") + to_chat(user, "As you begin unwrenching \the [src] a gust of air blows in your face... maybe you should reconsider?") unsafe_wrenching = TRUE //Oh dear oh dear if(do_after(user, 40 * W.toolspeed, target = src) && !QDELETED(src)) user.visible_message( \ "[user] unfastens \the [src].", \ "You have unfastened \the [src].", \ - "You hear ratchet.") + "You hear ratcheting.") investigate_log("was REMOVED by [key_name(usr)]", "atmos") for(var/obj/item/clothing/shoes/magboots/usermagboots in user.get_equipped_items()) @@ -206,6 +215,9 @@ Pipelines + Other Objects -> Pipe network unsafe_pressure_release(user,internal_pressure) deconstruct(TRUE) else + if(T.transparent_floor) + to_chat(user, "You can't interact with something that's under the floor!") + return TRUE return ..() //Called when an atmospherics object is unwrenched while having a large pressure difference @@ -240,7 +252,12 @@ Pipelines + Other Objects -> Pipe network dir = D initialize_directions = P var/turf/T = loc - level = T.intact ? 2 : 1 + if(!T.transparent_floor) + level = T.intact ? 2 : 1 + else + level = 2 + plane = GAME_PLANE + layer = GAS_PIPE_VISIBLE_LAYER add_fingerprint(usr) if(!SSair.initialized) //If there's no atmos subsystem, we can't really initialize pipenets SSair.machinery_to_construct.Add(src) @@ -337,12 +354,15 @@ Pipelines + Other Objects -> Pipe network /obj/machinery/atmospherics/proc/add_underlay_adapter(turf/T, obj/machinery/atmospherics/node, direction, icon_connect_type) //modified from add_underlay, does not make exposed underlays if(node) - if(T.intact && node.level == 1 && istype(node, /obj/machinery/atmospherics/pipe)) + if(T.intact && node.level == 1 && istype(node, /obj/machinery/atmospherics/pipe) && !T.transparent_floor) underlays += SSair.icon_manager.get_atmos_icon("underlay", direction, color_cache_name(node), "down" + icon_connect_type) else underlays += SSair.icon_manager.get_atmos_icon("underlay", direction, color_cache_name(node), "intact" + icon_connect_type) else - underlays += SSair.icon_manager.get_atmos_icon("underlay", direction, color_cache_name(node), "retracted" + icon_connect_type) + if(T.transparent_floor) //we want to keep pipes under transparent floors connected normally + underlays += SSair.icon_manager.get_atmos_icon("underlay", direction, color_cache_name(node), "intact" + icon_connect_type) + else + underlays += SSair.icon_manager.get_atmos_icon("underlay", direction, color_cache_name(node), "retracted" + icon_connect_type) /obj/machinery/atmospherics/singularity_pull(S, current_size) if(current_size >= STAGE_FIVE) diff --git a/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm b/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm index 3943bde9a1d..84741016bef 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm @@ -12,7 +12,7 @@ plane = GAME_PLANE interact_offline = 1 max_integrity = 350 - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 100, "bomb" = 0, "bio" = 100, "rad" = 100, "fire" = 30, "acid" = 30) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 100, BOMB = 0, BIO = 100, RAD = 100, FIRE = 30, ACID = 30) var/temperature_archived var/mob/living/carbon/occupant = null var/obj/item/reagent_containers/glass/beaker = null @@ -144,7 +144,7 @@ if(!istype(L) || L.buckled) return if(L.abiotic()) - to_chat(user, "Subject cannot have abiotic items on.") + to_chat(user, "Subject may not hold anything in their hands.") return if(L.has_buckled_mobs()) //mob attached to us to_chat(user, "[L] will not fit into [src] because [L.p_they()] [L.p_have()] a slime latched onto [L.p_their()] head.") @@ -462,7 +462,7 @@ to_chat(usr, "The cryo cell is already occupied!") return if(M.abiotic()) - to_chat(usr, "Subject may not have abiotic items on.") + to_chat(usr, "Subject may not hold anything in their hands.") return if(!node) to_chat(usr, "The cell is not correctly connected to its pipe network!") diff --git a/code/modules/atmospherics/machinery/components/unary_devices/passive_vent.dm b/code/modules/atmospherics/machinery/components/unary_devices/passive_vent.dm index 9859058d731..94f9f17e4b5 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/passive_vent.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/passive_vent.dm @@ -2,6 +2,7 @@ icon = 'icons/atmos/vent_pump.dmi' icon_state = "map_vent" plane = FLOOR_PLANE + layer = GAS_SCRUBBER_LAYER name = "passive vent" desc = "A large air vent" diff --git a/code/modules/atmospherics/machinery/components/unary_devices/tank.dm b/code/modules/atmospherics/machinery/components/unary_devices/tank.dm index 1cfb4d18eb1..ed0c438008a 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/tank.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/tank.dm @@ -1,7 +1,7 @@ /obj/machinery/atmospherics/unary/tank icon = 'icons/atmos/tank.dmi' icon_state = "air_map" - + layer = GAS_PIPE_VISIBLE_LAYER name = "pressure tank" desc = "A large vessel containing pressurized gas." diff --git a/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm b/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm index aca2e02aff0..b5aa0382327 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/thermomachine.dm @@ -7,7 +7,7 @@ density = TRUE max_integrity = 300 - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 100, "bomb" = 0, "bio" = 100, "rad" = 100, "fire" = 80, "acid" = 30) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 100, BOMB = 0, BIO = 100, RAD = 100, FIRE = 80, ACID = 30) layer = OBJ_LAYER var/icon_state_off = "freezer" diff --git a/code/modules/atmospherics/machinery/datum_icon_manager.dm b/code/modules/atmospherics/machinery/datum_icon_manager.dm index 2e0ef593bae..f7a345a7c9a 100644 --- a/code/modules/atmospherics/machinery/datum_icon_manager.dm +++ b/code/modules/atmospherics/machinery/datum_icon_manager.dm @@ -159,9 +159,9 @@ var/cache_name = state for(var/D in GLOB.cardinal) - var/image/I = image(icon('icons/atmos/pipe_underlays.dmi', icon_state = state, dir = D)) + var/image/I = image(icon('icons/atmos/pipe_underlays.dmi', icon_state = state, dir = D), layer = GAS_PIPE_HIDDEN_LAYER) underlays[cache_name + "[D]"] = I for(var/pipe_color in GLOB.pipe_colors) - I = image(icon('icons/atmos/pipe_underlays.dmi', icon_state = state, dir = D)) + I = image(icon('icons/atmos/pipe_underlays.dmi', icon_state = state, dir = D), layer = GAS_PIPE_HIDDEN_LAYER) I.color = GLOB.pipe_colors[pipe_color] underlays[state + "[D]" + "[GLOB.pipe_colors[pipe_color]]"] = I diff --git a/code/modules/atmospherics/machinery/other/meter.dm b/code/modules/atmospherics/machinery/other/meter.dm index a84ff7f8cdf..acd46cc8e13 100644 --- a/code/modules/atmospherics/machinery/other/meter.dm +++ b/code/modules/atmospherics/machinery/other/meter.dm @@ -9,7 +9,7 @@ var/obj/machinery/atmospherics/pipe/target = null anchored = TRUE max_integrity = 150 - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 100, "bomb" = 0, "bio" = 100, "rad" = 100, "fire" = 40, "acid" = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 100, BOMB = 0, BIO = 100, RAD = 100, FIRE = 40, ACID = 0) power_channel = ENVIRON frequency = ATMOS_DISTRO_FREQ var/id diff --git a/code/modules/atmospherics/machinery/pipes/cap.dm b/code/modules/atmospherics/machinery/pipes/cap.dm index 615075cf3c0..4cfa2efb450 100644 --- a/code/modules/atmospherics/machinery/pipes/cap.dm +++ b/code/modules/atmospherics/machinery/pipes/cap.dm @@ -79,7 +79,8 @@ break var/turf/T = get_turf(src) // hide if turf is not intact - if(!istype(T)) return + if(!istype(T) || T.transparent_floor) + return hide(T.intact) update_icon() diff --git a/code/modules/atmospherics/machinery/pipes/manifold.dm b/code/modules/atmospherics/machinery/pipes/manifold.dm index ffb66a01da3..20dd2990888 100644 --- a/code/modules/atmospherics/machinery/pipes/manifold.dm +++ b/code/modules/atmospherics/machinery/pipes/manifold.dm @@ -57,6 +57,8 @@ node3 = target break var/turf/T = src.loc // hide if turf is not intact + if(T.transparent_floor) + return hide(T.intact) update_icon() diff --git a/code/modules/atmospherics/machinery/pipes/manifold4w.dm b/code/modules/atmospherics/machinery/pipes/manifold4w.dm index 80d18bcee0f..5cefc6f723c 100644 --- a/code/modules/atmospherics/machinery/pipes/manifold4w.dm +++ b/code/modules/atmospherics/machinery/pipes/manifold4w.dm @@ -165,7 +165,8 @@ break var/turf/T = src.loc // hide if turf is not intact - hide(T.intact) + if(!T.transparent_floor) + hide(T.intact) update_icon() /obj/machinery/atmospherics/pipe/manifold4w/visible diff --git a/code/modules/atmospherics/machinery/pipes/pipe.dm b/code/modules/atmospherics/machinery/pipes/pipe.dm index afda1c30db7..925bf48715d 100644 --- a/code/modules/atmospherics/machinery/pipes/pipe.dm +++ b/code/modules/atmospherics/machinery/pipes/pipe.dm @@ -46,10 +46,6 @@ if(istype(W, /obj/item/analyzer)) atmosanalyzer_scan(parent.air, user) return - - if(istype(W, /obj/item/painter)) - return - return ..() /obj/machinery/atmospherics/proc/pipeline_expansion() diff --git a/code/modules/atmospherics/machinery/pipes/simple/pipe_simple.dm b/code/modules/atmospherics/machinery/pipes/simple/pipe_simple.dm index 92c421fbff9..7e14946e61e 100644 --- a/code/modules/atmospherics/machinery/pipes/simple/pipe_simple.dm +++ b/code/modules/atmospherics/machinery/pipes/simple/pipe_simple.dm @@ -68,7 +68,8 @@ break var/turf/T = loc // hide if turf is not intact - hide(T.intact) + if(!T.transparent_floor) + hide(T.intact) update_icon() /obj/machinery/atmospherics/pipe/simple/check_pressure(pressure) diff --git a/code/modules/atmospherics/machinery/portable/canister.dm b/code/modules/atmospherics/machinery/portable/canister.dm index 5a9dc61863e..14432164782 100644 --- a/code/modules/atmospherics/machinery/portable/canister.dm +++ b/code/modules/atmospherics/machinery/portable/canister.dm @@ -45,7 +45,7 @@ GLOBAL_DATUM_INIT(canister_icon_container, /datum/canister_icons, new()) icon_state = "yellow" density = 1 flags = CONDUCT - armor = list("melee" = 50, "bullet" = 50, "laser" = 50, "energy" = 100, "bomb" = 10, "bio" = 100, "rad" = 100, "fire" = 80, "acid" = 50) + armor = list(MELEE = 50, BULLET = 50, LASER = 50, ENERGY = 100, BOMB = 10, BIO = 100, RAD = 100, FIRE = 80, ACID = 50) max_integrity = 250 integrity_failure = 100 diff --git a/code/modules/atmospherics/machinery/portable/portable_atmospherics.dm b/code/modules/atmospherics/machinery/portable/portable_atmospherics.dm index cec04bf4f6f..625b47a7fe7 100644 --- a/code/modules/atmospherics/machinery/portable/portable_atmospherics.dm +++ b/code/modules/atmospherics/machinery/portable/portable_atmospherics.dm @@ -2,7 +2,7 @@ name = "atmoalter" use_power = NO_POWER_USE max_integrity = 250 - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 100, "bomb" = 0, "bio" = 100, "rad" = 100, "fire" = 60, "acid" = 30) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 100, BOMB = 0, BIO = 100, RAD = 100, FIRE = 60, ACID = 30) var/datum/gas_mixture/air_contents = new var/obj/machinery/atmospherics/unary/portables_connector/connected_port diff --git a/code/modules/awaymissions/mission_code/ghost_role_spawners/golems.dm b/code/modules/awaymissions/mission_code/ghost_role_spawners/golems.dm index 53860cdb627..c1e1c158665 100644 --- a/code/modules/awaymissions/mission_code/ghost_role_spawners/golems.dm +++ b/code/modules/awaymissions/mission_code/ghost_role_spawners/golems.dm @@ -16,25 +16,28 @@ /obj/item/golem_shell/attackby(obj/item/I, mob/user, params) ..() var/static/list/golem_shell_species_types = list( - /obj/item/stack/sheet/metal = /datum/species/golem, - /obj/item/stack/sheet/glass = /datum/species/golem/glass, - /obj/item/stack/sheet/plasteel = /datum/species/golem/plasteel, - /obj/item/stack/ore/glass = /datum/species/golem/sand, - /obj/item/stack/sheet/mineral/sandstone = /datum/species/golem/sand, - /obj/item/stack/sheet/mineral/plasma = /datum/species/golem/plasma, - /obj/item/stack/sheet/mineral/diamond = /datum/species/golem/diamond, - /obj/item/stack/sheet/mineral/gold = /datum/species/golem/gold, - /obj/item/stack/sheet/mineral/silver = /datum/species/golem/silver, - /obj/item/stack/sheet/mineral/uranium = /datum/species/golem/uranium, - /obj/item/stack/sheet/mineral/bananium = /datum/species/golem/bananium, - /obj/item/stack/sheet/mineral/tranquillite = /datum/species/golem/tranquillite, - /obj/item/stack/sheet/mineral/titanium = /datum/species/golem/titanium, - /obj/item/stack/sheet/mineral/plastitanium = /datum/species/golem/plastitanium, - /obj/item/stack/sheet/mineral/abductor = /datum/species/golem/alloy, - /obj/item/stack/sheet/wood = /datum/species/golem/wood, - /obj/item/stack/sheet/bluespace_crystal = /datum/species/golem/bluespace, - /obj/item/stack/sheet/mineral/adamantine = /datum/species/golem/adamantine, - /obj/item/stack/sheet/plastic = /datum/species/golem/plastic) + /obj/item/stack/sheet/metal = /datum/species/golem, + /obj/item/stack/sheet/glass = /datum/species/golem/glass, + /obj/item/stack/sheet/plasteel = /datum/species/golem/plasteel, + /obj/item/stack/ore/glass = /datum/species/golem/sand, + /obj/item/stack/sheet/mineral/sandstone = /datum/species/golem/sand, + /obj/item/stack/sheet/mineral/plasma = /datum/species/golem/plasma, + /obj/item/stack/sheet/mineral/diamond = /datum/species/golem/diamond, + /obj/item/stack/sheet/mineral/gold = /datum/species/golem/gold, + /obj/item/stack/sheet/mineral/silver = /datum/species/golem/silver, + /obj/item/stack/sheet/mineral/uranium = /datum/species/golem/uranium, + /obj/item/stack/sheet/mineral/bananium = /datum/species/golem/bananium, + /obj/item/stack/sheet/mineral/tranquillite = /datum/species/golem/tranquillite, + /obj/item/stack/sheet/mineral/titanium = /datum/species/golem/titanium, + /obj/item/stack/sheet/mineral/plastitanium = /datum/species/golem/plastitanium, + /obj/item/stack/sheet/mineral/abductor = /datum/species/golem/alloy, + /obj/item/stack/sheet/wood = /datum/species/golem/wood, + /obj/item/stack/sheet/bluespace_crystal = /datum/species/golem/bluespace, + /obj/item/stack/medical/bruise_pack = /datum/species/golem/cloth, + /obj/item/stack/medical/bruise_pack/improvised = /datum/species/golem/cloth, + /obj/item/stack/sheet/cloth = /datum/species/golem/cloth, + /obj/item/stack/sheet/mineral/adamantine = /datum/species/golem/adamantine, + /obj/item/stack/sheet/plastic = /datum/species/golem/plastic) if(istype(I, /obj/item/stack)) var/obj/item/stack/O = I diff --git a/code/modules/awaymissions/mission_code/ruins/oldstation.dm b/code/modules/awaymissions/mission_code/ruins/oldstation.dm index ab1f4ca2603..551e500ebfc 100644 --- a/code/modules/awaymissions/mission_code/ruins/oldstation.dm +++ b/code/modules/awaymissions/mission_code/ruins/oldstation.dm @@ -158,7 +158,7 @@ desc = "Early prototype RIG hardsuit helmet, designed to quickly shift over a user's head. Design constraints of the helmet mean it has no inbuilt cameras, thus it restricts the users visability." icon_state = "hardsuit0-ancient" item_state = "anc_helm" - armor = list("melee" = 30, "bullet" = 5, "laser" = 5, "energy" = 0, "bomb" = 50, "bio" = 100, "rad" = 100, "fire" = 100, "acid" = 75) + armor = list(MELEE = 30, BULLET = 5, LASER = 5, ENERGY = 0, BOMB = 50, BIO = 100, RAD = 100, FIRE = 100, ACID = 75) item_color = "ancient" resistance_flags = FIRE_PROOF sprite_sheets = null @@ -168,7 +168,7 @@ desc = "Prototype powered RIG hardsuit. Provides excellent protection from the elements of space while being comfortable to move around in, thanks to the powered locomotives. Remains very bulky however." icon_state = "hardsuit-ancient" item_state = "anc_hardsuit" - armor = list("melee" = 30, "bullet" = 5, "laser" = 5, "energy" = 0, "bomb" = 50, "bio" = 100, "rad" = 100, "fire" = 100, "acid" = 75) + armor = list(MELEE = 30, BULLET = 5, LASER = 5, ENERGY = 0, BOMB = 50, BIO = 100, RAD = 100, FIRE = 100, ACID = 75) slowdown = 3 resistance_flags = FIRE_PROOF sprite_sheets = null diff --git a/code/modules/awaymissions/mission_code/wildwest.dm b/code/modules/awaymissions/mission_code/wildwest.dm index 2377deca844..f63d1a8c8d4 100644 --- a/code/modules/awaymissions/mission_code/wildwest.dm +++ b/code/modules/awaymissions/mission_code/wildwest.dm @@ -79,8 +79,6 @@ ADD_TRAIT(user, TRAIT_LASEREYES, "ww_wishgranter") user.dna.SetSEState(GLOB.fireblock, TRUE) singlemutcheck(user, GLOB.fireblock, MUTCHK_FORCED) - user.dna.SetSEState(GLOB.xrayblock, TRUE) - singlemutcheck(user, GLOB.xrayblock, MUTCHK_FORCED) if(ishuman(user)) var/mob/living/carbon/human/human = user if(!isshadowperson(human)) @@ -215,9 +213,6 @@ to_chat(user, "The communicator buzzes, and you hear the voice again: 'Oh really now?' You hear a clicking sound. 'Team, get back here. We have trouble'. Then the line goes dead.") for(var/thing in GLOB.landmarks_list) var/obj/effect/landmark/L = thing - if(L.name == "wildwest_syndipod") - var/obj/spacepod/syndi/P = new /obj/spacepod/syndi(get_turf(L)) - P.name = "Syndi Recon Pod" if(L.name == "wildwest_syndibackup") var/mob/living/simple_animal/hostile/syndicate/ranged/space/R = new /mob/living/simple_animal/hostile/syndicate/ranged/space(get_turf(L)) R.name = "Syndi Recon Team" diff --git a/code/modules/client/client_defines.dm b/code/modules/client/client_defines.dm index 583d59476eb..7c011962c08 100644 --- a/code/modules/client/client_defines.dm +++ b/code/modules/client/client_defines.dm @@ -114,10 +114,19 @@ /// Is the client watchlisted var/watchlisted = FALSE + /// Client's pAI save + var/datum/pai_save/pai_save + + /// List of the clients CUIs + var/list/datum/custom_user_item/cui_entries = list() + /client/vv_edit_var(var_name, var_value) switch(var_name) // I know we will never be in a world where admins are editing client vars to let people bypass TOS // But guess what, if I have the ability to overengineer something, I am going to do it if("tos_consent") return FALSE + // Dont fuck with this + if("cui_entries") + return FALSE return ..() diff --git a/code/modules/client/client_procs.dm b/code/modules/client/client_procs.dm index 8c7dc4963f6..6f8d489baf6 100644 --- a/code/modules/client/client_procs.dm +++ b/code/modules/client/client_procs.dm @@ -8,8 +8,8 @@ #define UPLOAD_LIMIT 10485760 //Restricts client uploads to the server to 10MB //Boosted this thing. What's the worst that can happen? #define MIN_CLIENT_VERSION 513 // Minimum byond major version required to play. //I would just like the code ready should it ever need to be used. -#define SUGGESTED_CLIENT_VERSION 513 // only integers (e.g: 513, 514) are useful here. This is the part BEFORE the ".", IE 513 out of 513.1542 -#define SUGGESTED_CLIENT_BUILD 1542 // only integers (e.g: 1542, 1543) are useful here. This is the part AFTER the ".", IE 1542 out of 513.1542 +#define SUGGESTED_CLIENT_VERSION 514 // only integers (e.g: 513, 514) are useful here. This is the part BEFORE the ".", IE 513 out of 513.1542 +#define SUGGESTED_CLIENT_BUILD 1566 // only integers (e.g: 1542, 1543) are useful here. This is the part AFTER the ".", IE 1542 out of 513.1542 #define SSD_WARNING_TIMER 30 // cycles, not seconds, so 30=60s @@ -113,7 +113,7 @@ if(!holder && received_discord_pm < world.time - 6000) // Worse they can do is spam discord for 10 minutes to_chat(usr, "You are no longer able to use this, it's been more then 10 minutes since an admin on Discord has responded to you") return - if(prefs.muted & MUTE_ADMINHELP) + if(check_mute(ckey, MUTE_ADMINHELP)) to_chat(usr, "You cannot use this as your client has been muted from sending messages to the admins on Discord") return cmd_admin_discord_pm() @@ -147,14 +147,8 @@ karma_purchase(karma,5,"job","Brig Physician") if("3") karma_purchase(karma,30,"job","Nanotrasen Representative") - if("5") + if("4") karma_purchase(karma,30,"job","Blueshield") - if("6") - karma_purchase(karma,30,"job","Mechanic") - if("7") - karma_purchase(karma,45,"job","Magistrate") - if("9") - karma_purchase(karma,30,"job","Security Pod Pilot") return if(href_list["KarmaBuy2"]) var/karma=verify_karma() @@ -202,6 +196,11 @@ ..() //redirect to hsrc.Topic() + +/client/proc/get_display_key() + var/fakekey = src?.holder?.fakekey + return fakekey ? fakekey : key + /client/proc/is_content_unlocked() if(!prefs.unlock_content) to_chat(src, "Become a BYOND member to access member-perks and features, as well as support the engine that makes this game possible. Click here to find out more.") @@ -268,8 +267,8 @@ show_update_prompt = TRUE else if(byond_version == SUGGESTED_CLIENT_VERSION && byond_build < SUGGESTED_CLIENT_BUILD) show_update_prompt = TRUE - // Actually sent to client much later, so it appears after MOTD. + // Actually sent to client much later, so it appears after MOTD. to_chat(src, "If the title screen is black, resources are still downloading. Please be patient until the title screen appears.") GLOB.directory[ckey] = src @@ -278,25 +277,58 @@ if(GLOB.configuration.admin.enable_localhost_autoadmin) if(is_connecting_from_localhost()) new /datum/admins("!LOCALHOST!", R_HOST, ckey) // Makes localhost rank + holder = GLOB.admin_datums[ckey] if(holder) GLOB.admins += src holder.owner = src - //preferences datum - also holds some persistant data for the client (because we may as well keep these datums to a minimum) - prefs = GLOB.preferences_datums[ckey] - if(!prefs) - prefs = new /datum/preferences(src) - GLOB.preferences_datums[ckey] = prefs + log_client_to_db(tdata) // Make sure our client exists in the DB + + pai_save = new(src) + + // This is where we load all of the clients stuff from the DB + if(SSdbcore.IsConnected()) + // Load in all our client data from the DB + var/list/datum/db_query/login_queries = list() // List of queries to run for login processing + + for(var/datum/client_login_processor/CLP as anything in GLOB.client_login_processors) + login_queries[CLP.type] = CLP.get_query(src) + + SSdbcore.MassExecute(login_queries, TRUE, FALSE, TRUE, FALSE) // Warn, no qdel, assoc, no log + + // Now do fancy things with the results + for(var/datum/client_login_processor/CLP as anything in GLOB.client_login_processors) + CLP.process_result(login_queries[CLP.type], src) + + QDEL_LIST_ASSOC_VAL(login_queries) // Clear out the used queries else - prefs.parent = src + // Set vars here that need to be set if the DB is offline + + // Give blank prefs + prefs = new /datum/preferences(src) + prefs.character_saves = list() + + // Random character + prefs.character_saves += new /datum/character_save + prefs.active_character = prefs.character_saves[1] + + // ToS accepted + tos_consent = TRUE + + prefs.last_ip = address //these are gonna be used for banning prefs.last_id = computer_id //these are gonna be used for banning - if(world.byond_version >= 511 && byond_version >= 511 && prefs.clientfps) - fps = prefs.clientfps + fps = prefs.clientfps - // Check if the client has or has not accepted TOS - check_tos_consent() + // Log alts + if(length(related_accounts_ip)) + log_admin("[key_name(src)] Alts by IP: [jointext(related_accounts_ip, " ")]") + if(length(related_accounts_cid)) + log_admin("[key_name(src)] Alts by CID: [jointext(related_accounts_cid, " ")]") + + // This sleeps so it has to go here. Dont fucking move it. + SSinstancing.update_playercache(ckey) // This has to go here to avoid issues // If you sleep past this point, you will get SSinput errors as well as goonchat errors @@ -304,14 +336,25 @@ // YOU WILL BREAK STUFF. SERIOUSLY. -aa07 GLOB.clients += src + spawn() // Goonchat does some non-instant checks in start() chatOutput.start() + var/_2fa_alert = FALSE // This is so we can display the message where it will be seen if(holder) - on_holder_add() - add_admin_verbs() - // Must be async because any sleeps (happen in sql queries) will break connectings clients - INVOKE_ASYNC(src, .proc/admin_memo_output, "Show", FALSE, TRUE) + if(GLOB.configuration.system.is_production && (holder.rights & R_ADMIN) && prefs._2fa_status == _2FA_DISABLED) // If they are an admin and their 2FA is disabled + // No, check_rights() does not work in the above proc, because we dont have a mob yet + _2fa_alert = TRUE + // This also has to be manually done since no mob to use check_rights() on + deadmin() + verbs += /client/proc/readmin + GLOB.deadmins += ckey + else + on_holder_add() + add_admin_verbs() + // Must be async because any sleeps (happen in sql queries) will break connectings clients + INVOKE_ASYNC(src, .proc/admin_memo_output, "Show", FALSE, TRUE) + // Forcibly enable hardware-accelerated graphics, as we need them for the lighting overlays. // (but turn them off first, since sometimes BYOND doesn't turn them on properly otherwise) @@ -320,7 +363,6 @@ winset(src, null, "command=\".configure graphics-hwmode off\"") winset(src, null, "command=\".configure graphics-hwmode on\"") - log_client_to_db(tdata) . = ..() //calls mob.Login() @@ -332,7 +374,6 @@ if(SSinput.initialized) set_macros() - donator_check() check_ip_intel() send_resources() @@ -383,11 +424,12 @@ if(world.TgsAvailable() && length(GLOB.revision_info.testmerges)) to_chat(src, GLOB.revision_info.get_testmerge_chatmessage(TRUE)) - INVOKE_ASYNC(src, .proc/cid_count_check) - if(check_rights(R_ADMIN, FALSE, mob)) // Mob is required. Dont even try without it. to_chat(src, "The queue server is currently [SSqueue.queue_enabled ? "enabled" : "disabled"], with a threshold of [SSqueue.queue_threshold]. This [SSqueue.persist_queue ? "will" : "will not"] persist through rounds.") + if(_2fa_alert) + to_chat(src,"You do not have 2FA enabled. Admin verbs will be unavailable until you have enabled 2FA.") // Very fucking obvious + /client/proc/is_connecting_from_localhost() var/localhost_addresses = list("127.0.0.1", "::1") // Adresses @@ -410,7 +452,9 @@ GLOB.admins -= src GLOB.directory -= ckey GLOB.clients -= src + SSinstancing.update_playercache() // Clear us out QDEL_NULL(chatOutput) + QDEL_NULL(pai_save) if(movingmob) movingmob.client_mobs_in_contents -= mob UNSETEMPTY(movingmob.client_mobs_in_contents) @@ -420,52 +464,18 @@ return QDEL_HINT_HARDDEL_NOW -/client/proc/donator_check() - set waitfor = FALSE // This needs to run async because any sleep() inside /client/New() breaks stuff badly - if(IsGuestKey(key)) - return - - if(!SSdbcore.IsConnected()) - return - - if(check_rights(R_ADMIN, 0, mob)) // Yes, the mob is required, regardless of other examples in this file, it won't work otherwise - donator_level = DONATOR_LEVEL_MAX - donor_loadout_points() - return - - //Donator stuff. - var/datum/db_query/query_donor_select = SSdbcore.NewQuery("SELECT ckey, tier, active FROM donators WHERE ckey=:ckey", list( - "ckey" = ckey - )) - - if(!query_donor_select.warn_execute()) - qdel(query_donor_select) - return - - while(query_donor_select.NextRow()) - if(!text2num(query_donor_select.item[3])) - // Inactive donator. - donator_level = 0 - qdel(query_donor_select) - return - donator_level = text2num(query_donor_select.item[2]) - donor_loadout_points() - break - qdel(query_donor_select) - /client/proc/donor_loadout_points() if(donator_level > 0 && prefs) prefs.max_gear_slots = GLOB.configuration.general.base_loadout_points + 5 /client/proc/log_client_to_db(connectiontopic) - set waitfor = FALSE // This needs to run async because any sleep() inside /client/New() breaks stuff badly if(IsGuestKey(key)) return if(!SSdbcore.IsConnected()) return - var/datum/db_query/query = SSdbcore.NewQuery("SELECT id, datediff(Now(),firstseen) as age FROM player WHERE ckey=:ckey", list( + var/datum/db_query/query = SSdbcore.NewQuery("SELECT id, datediff(Now(), firstseen) as age FROM player WHERE ckey=:ckey", list( "ckey" = ckey )) if(!query.warn_execute()) @@ -480,67 +490,29 @@ break qdel(query) - var/datum/db_query/query_ip = SSdbcore.NewQuery("SELECT ckey FROM player WHERE ip=:address", list( - "address" = address - )) - if(!query_ip.warn_execute()) - qdel(query_ip) - return - related_accounts_ip = list() - while(query_ip.NextRow()) - if(ckey != query_ip.item[1]) - related_accounts_ip.Add("[query_ip.item[1]]") - - qdel(query_ip) - - var/datum/db_query/query_cid = SSdbcore.NewQuery("SELECT ckey FROM player WHERE computerid=:cid", list( - "cid" = computer_id - )) - if(!query_cid.warn_execute()) - qdel(query_cid) - return - - related_accounts_cid = list() - while(query_cid.NextRow()) - if(ckey != query_cid.item[1]) - related_accounts_cid.Add("[query_cid.item[1]]") - - qdel(query_cid) var/admin_rank = "Player" + // Admins don't get slammed by this, I guess if(holder) admin_rank = holder.rank - // Admins don't get slammed by this, I guess else if(check_randomizer(connectiontopic)) return - //Log all the alts - if(related_accounts_cid.len) - log_admin("[key_name(src)] alts:[jointext(related_accounts_cid, " - ")]") - - - var/watchreason = check_watchlist(ckey) - if(watchreason) - message_admins("Notice: [key_name_admin(src)] is on the watchlist and has just connected - Reason: [watchreason]") - SSdiscord.send2discord_simple_noadmins("**\[Watchlist]** [key_name(src)] is on the watchlist and has just connected - Reason: [watchreason]") - watchlisted = TRUE - - - //Just the standard check to see if it's actually a number if(sql_id) + //Just the standard check to see if it's actually a number if(istext(sql_id)) sql_id = text2num(sql_id) if(!isnum(sql_id)) - return + return // Return here because if we somehow didnt pull a number from an INT column, EVERYTHING is breaking - if(sql_id) var/client_address = address if(!client_address) // Localhost can sometimes have no address set client_address = "127.0.0.1" + //Player already identified previously, we need to just update the 'lastseen', 'ip' and 'computer_id' variables - var/datum/db_query/query_update = SSdbcore.NewQuery("UPDATE player SET lastseen = Now(), ip=:sql_ip, computerid=:sql_cid, lastadminrank=:sql_ar WHERE id=:sql_id", list( + var/datum/db_query/query_update = SSdbcore.NewQuery("UPDATE player SET lastseen=NOW(), ip=:sql_ip, computerid=:sql_cid, lastadminrank=:sql_ar WHERE id=:sql_id", list( "sql_ip" = client_address, "sql_cid" = computer_id, "sql_ar" = admin_rank, @@ -550,6 +522,7 @@ if(!query_update.warn_execute()) qdel(query_update) return + qdel(query_update) // After the regular update INVOKE_ASYNC(src, /client/.proc/get_byond_account_date, FALSE) // Async to avoid other procs in the client chain being delayed by a web request @@ -565,7 +538,7 @@ qdel(query_insert) return qdel(query_insert) - // This is their first connection instance, so TRUE here to nofiy admins + // This is their first connection instance, so TRUE here to notify admins // This needs to happen here to ensure they actually have a row to update INVOKE_ASYNC(src, /client/.proc/get_byond_account_date, TRUE) // Async to avoid other procs in the client chain being delayed by a web request @@ -868,6 +841,7 @@ winset(src, "rpane.forumb", "background-color=#40628a;text-color=#FFFFFF") winset(src, "rpane.rulesb", "background-color=#40628a;text-color=#FFFFFF") winset(src, "rpane.githubb", "background-color=#40628a;text-color=#FFFFFF") + winset(src, "rpane.webmap", "background-color=#40628a;text-color=#FFFFFF") /* Mainwindow */ winset(src, "mainwindow.saybutton", "background-color=#40628a;text-color=#FFFFFF") winset(src, "mainwindow.mebutton", "background-color=#40628a;text-color=#FFFFFF") @@ -900,6 +874,7 @@ winset(src, "rpane.forumb", "background-color=none;text-color=#000000") winset(src, "rpane.rulesb", "background-color=none;text-color=#000000") winset(src, "rpane.githubb", "background-color=none;text-color=#000000") + winset(src, "rpane.webmap", "background-color=none;text-color=#000000") /* Mainwindow */ winset(src, "mainwindow.saybutton", "background-color=none;text-color=#000000") winset(src, "mainwindow.mebutton", "background-color=none;text-color=#000000") @@ -1051,7 +1026,7 @@ qdel(query_date) - // They have a date, lets bail + // They have a date already, lets bail if(byondacc_date) return @@ -1092,120 +1067,6 @@ /client/proc/show_update_notice() to_chat(src, "Your BYOND client (v: [byond_version].[byond_build]) is out of date. This can cause glitches. We highly suggest you download the latest client from byond.com before playing. You can also update via the BYOND launcher application.") -/** - * Checks if the client has accepted TOS - * - * Runs some checks against vars and the DB to see if the client has accepted TOS. - * Returns TRUE or FALSE if they have or have not - */ -/client/proc/check_tos_consent() - // If there is no TOS, auto accept - if(!GLOB.join_tos) - tos_consent = TRUE - return TRUE - - // If theres no DB, assume yes - if(!SSdbcore.IsConnected()) - tos_consent = TRUE - return TRUE - - var/datum/db_query/query = SSdbcore.NewQuery("SELECT ckey FROM privacy WHERE ckey=:ckey AND consent=1", list( - "ckey" = ckey - )) - if(!query.warn_execute()) - qdel(query) - // If our query failed, just assume yes - tos_consent = TRUE - return TRUE - - // If we returned a row, they accepted - while(query.NextRow()) - qdel(query) - tos_consent = TRUE - return TRUE - - qdel(query) - // If we are here, they have not accepted, and need to read it - return FALSE - -/** - * Checks if the client has more than a configured amount of CIDs tied to them in the past - */ -/client/proc/cid_count_check() - // If the config is 0, disable this - if(GLOB.configuration.general.max_client_cid_history == 0) - return - - // If we have no DB, dont even bother - if(!SSdbcore.IsConnected()) - return - - // Now query how many cids they have - var/datum/db_query/query_cidcheck = SSdbcore.NewQuery("SELECT COUNT(DISTINCT computerID) FROM connection_log WHERE ckey=:ckey", list( - "ckey" = ckey - )) - if(!query_cidcheck.warn_execute()) - qdel(query_cidcheck) - return - - var/cidcount = 0 - if(query_cidcheck.NextRow()) - cidcount = query_cidcheck.item[1] - qdel(query_cidcheck) - - if(cidcount > GLOB.configuration.general.max_client_cid_history) - // Check their notes for CID tracking in the past - var/has_note = FALSE - var/note_text = "" - var/datum/db_query/query_find_track_note = SSdbcore.NewQuery("SELECT notetext FROM notes WHERE ckey=:ckey AND adminckey=:ackey", list( - "ckey" = ckey, - "ackey" = CIDTRACKING_PSUEDO_CKEY - )) - if(!query_find_track_note.warn_execute()) - qdel(query_find_track_note) - return - if(query_find_track_note.NextRow()) - note_text = query_find_track_note.item[1] // Grab existing note text - has_note = TRUE - qdel(query_find_track_note) - - - if(has_note) // They have a note. Update it. - var/new_text = "Connected on the date of this note with unique CID #[cidcount]" - // Only update the note if the text is different. Otherwise it bumps the timestamp when it shouldnt - if(note_text != new_text) - var/datum/db_query/query_update_track_note = SSdbcore.NewQuery("UPDATE notes SET notetext=:notetext, timestamp=NOW(), round_id=:rid WHERE ckey=:ckey AND adminckey=:ackey", list( - "notetext" = new_text, - "ckey" = ckey, - "ackey" = CIDTRACKING_PSUEDO_CKEY, - "rid" = GLOB.round_id - )) - if(!query_update_track_note.warn_execute()) - qdel(query_update_track_note) - return - qdel(query_update_track_note) - - else // They dont have a note. Make one. - // NOT logged because its automatic and will spam logs otherwise - // Also right checking must be disabled because its a psuedockey, not a real one - add_note(ckey, "Connected on the date of this note with unique CID #[cidcount]", adminckey = CIDTRACKING_PSUEDO_CKEY, logged = FALSE, checkrights = FALSE, automated = TRUE) - - var/show_warning = TRUE - // Check if they have a note that matches the warning suppressor - var/datum/db_query/query_find_note = SSdbcore.NewQuery("SELECT id FROM notes WHERE ckey=:ckey AND notetext=:notetext", list( - "ckey" = ckey, - "notetext" = CIDWARNING_SUPPRESSED_NOTETEXT - )) - if(!query_find_note.warn_execute()) - qdel(query_find_note) - return - if(query_find_note.NextRow()) - show_warning = FALSE - qdel(query_find_note) - - if(show_warning) - message_admins("[ckey] has just connected and has a history of [cidcount] different CIDs. (WebInfo) (Suppress Warning)") - /client/proc/update_ambience_pref() if(prefs.sound & SOUND_AMBIENCE) if(SSambience.ambience_listening_clients[src] > world.time) diff --git a/code/modules/client/login_processing/10-load_preferences.dm b/code/modules/client/login_processing/10-load_preferences.dm new file mode 100644 index 00000000000..ed4f947b40d --- /dev/null +++ b/code/modules/client/login_processing/10-load_preferences.dm @@ -0,0 +1,31 @@ +/datum/client_login_processor/load_preferences + priority = 10 + +/datum/client_login_processor/load_preferences/get_query(client/C) + var/datum/db_query/query = SSdbcore.NewQuery({"SELECT + ooccolor, + UI_style, + UI_style_color, + UI_style_alpha, + be_role, + default_slot, + toggles, + toggles_2, + sound, + volume_mixer, + lastchangelog, + exp, + clientfps, + atklog, + fuid, + parallax, + 2fa_status + FROM player + WHERE ckey=:ckey"}, list( + "ckey" = C.ckey + )) + + return query + +/datum/client_login_processor/load_preferences/process_result(datum/db_query/Q, client/C) + C.prefs = new /datum/preferences(C, Q) diff --git a/code/modules/client/login_processing/20-load_characters.dm b/code/modules/client/login_processing/20-load_characters.dm new file mode 100644 index 00000000000..68bd1458c47 --- /dev/null +++ b/code/modules/client/login_processing/20-load_characters.dm @@ -0,0 +1,102 @@ +/datum/client_login_processor/load_characters + priority = 20 + +/datum/client_login_processor/load_characters/get_query(client/C) + // Get all their characters + var/datum/db_query/query = SSdbcore.NewQuery({"SELECT + OOC_Notes, + real_name, + name_is_always_random, + gender, + age, + species, + language, + hair_colour, + secondary_hair_colour, + facial_hair_colour, + secondary_facial_hair_colour, + skin_tone, + skin_colour, + marking_colours, + head_accessory_colour, + hair_style_name, + facial_style_name, + marking_styles, + head_accessory_style_name, + alt_head_name, + eye_colour, + underwear, + undershirt, + backbag, + b_type, + alternate_option, + job_support_high, + job_support_med, + job_support_low, + job_medsci_high, + job_medsci_med, + job_medsci_low, + job_engsec_high, + job_engsec_med, + job_engsec_low, + job_karma_high, + job_karma_med, + job_karma_low, + flavor_text, + med_record, + sec_record, + gen_record, + disabilities, + player_alt_titles, + organ_data, + rlimb_data, + nanotrasen_relation, + speciesprefs, + socks, + body_accessory, + gear, + autohiss, + slot + FROM characters WHERE ckey=:ckey"}, list( + "ckey" = C.ckey + )) + + return query + +/datum/client_login_processor/load_characters/process_result(datum/db_query/Q, client/C) + // If we already loaded their characters, dont do it all again + if(C.prefs.characters_loaded) + return + // Step one, initialize their list of characters + C.prefs.character_saves = list() + C.prefs.character_saves.len = C.prefs.max_save_slots // Fill the list with empty indexes + // Fill it with blank characters first + for(var/i in 1 to C.prefs.max_save_slots) + var/datum/character_save/CS = new + CS.slot_number = i + C.prefs.character_saves[i] = CS + + // Did we load at all + var/character_loaded = FALSE + + while(Q.NextRow()) + character_loaded = TRUE + var/datum/character_save/CS = C.prefs.character_saves[Q.item[53]] // Get the slot referenced by this query + CS.load(Q) // Let the save handle the query processing + CS.valid_save = TRUE + + if(character_loaded) + // They have a character, set their active as their default slot + C.prefs.active_character = C.prefs.character_saves[C.prefs.default_slot] + else + // If we are here, they dont have a character. Lets make them a random one + var/datum/character_save/CS = C.prefs.character_saves[1] // Get slot 1 + CS.randomise() + CS.real_name = random_name(CS.gender) // Pick a name + CS.valid_save = TRUE + CS.save(C) + C.prefs.active_character = C.prefs.character_saves[1] // Set slot 1 as their active + C.prefs.default_slot = 1 + C.prefs.save_preferences(C) + + C.prefs.characters_loaded = TRUE // Avoid this happening again diff --git a/code/modules/client/login_processing/30-tos_consent.dm b/code/modules/client/login_processing/30-tos_consent.dm new file mode 100644 index 00000000000..452a638cc02 --- /dev/null +++ b/code/modules/client/login_processing/30-tos_consent.dm @@ -0,0 +1,24 @@ +/datum/client_login_processor/tos_consent + priority = 30 + +/datum/client_login_processor/tos_consent/get_query(client/C) + var/datum/db_query/query = SSdbcore.NewQuery("SELECT ckey FROM privacy WHERE ckey=:ckey AND consent=1", list( + "ckey" = C.ckey + )) + return query + +/datum/client_login_processor/tos_consent/process_result(datum/db_query/Q, client/C) + // If there is no TOS, auto accept + if(!GLOB.join_tos) + C.tos_consent = TRUE + return + + // If our query failed, just assume yes + if(Q.last_error) + C.tos_consent = TRUE + return + + // If we returned a row, they accepted + while(Q.NextRow()) + C.tos_consent = TRUE + diff --git a/code/modules/client/login_processing/35-donator_check.dm b/code/modules/client/login_processing/35-donator_check.dm new file mode 100644 index 00000000000..fabcb6bdcdf --- /dev/null +++ b/code/modules/client/login_processing/35-donator_check.dm @@ -0,0 +1,27 @@ +/datum/client_login_processor/donator_check + priority = 35 + +/datum/client_login_processor/donator_check/get_query(client/C) + var/datum/db_query/query = SSdbcore.NewQuery("SELECT ckey, tier, active FROM donators WHERE ckey=:ckey", list( + "ckey" = C.ckey + )) + return query + +/datum/client_login_processor/donator_check/process_result(datum/db_query/Q, client/C) + if(IsGuestKey(C.key)) + return + + // Admins get all donor perks + if(check_rights_client(R_ADMIN, FALSE, C)) + C.donator_level = DONATOR_LEVEL_MAX + C.donor_loadout_points() + return + + while(Q.NextRow()) + if(!text2num(Q.item[3])) + // Inactive donator. + C.donator_level = 0 + return + + C.donator_level = text2num(Q.item[2]) + C.donor_loadout_points() diff --git a/code/modules/client/login_processing/36-watchlist.dm b/code/modules/client/login_processing/36-watchlist.dm new file mode 100644 index 00000000000..fa58d3b57f9 --- /dev/null +++ b/code/modules/client/login_processing/36-watchlist.dm @@ -0,0 +1,15 @@ +/datum/client_login_processor/watchlist + priority = 36 + +/datum/client_login_processor/watchlist/get_query(client/C) + var/datum/db_query/query = SSdbcore.NewQuery("SELECT reason FROM watch WHERE ckey=:ckey", list( + "ckey" = C.ckey + )) + return query + +/datum/client_login_processor/watchlist/process_result(datum/db_query/Q, client/C) + if(Q.NextRow()) + var/watchreason = Q.item[1] + message_admins("Notice: [key_name_admin(C)] is on the watchlist and has just connected - Reason: [watchreason]") + SSdiscord.send2discord_simple_noadmins("**\[Watchlist]** [key_name(C)] is on the watchlist and has just connected - Reason: [watchreason]") + C.watchlisted = TRUE diff --git a/code/modules/client/login_processing/37-alts_ip.dm b/code/modules/client/login_processing/37-alts_ip.dm new file mode 100644 index 00000000000..f67255f3295 --- /dev/null +++ b/code/modules/client/login_processing/37-alts_ip.dm @@ -0,0 +1,14 @@ +/datum/client_login_processor/alts_ip + priority = 37 + +/datum/client_login_processor/alts_ip/get_query(client/C) + var/datum/db_query/query = SSdbcore.NewQuery("SELECT ckey FROM player WHERE ip=:address", list( + "address" = C.address + )) + return query + +/datum/client_login_processor/alts_ip/process_result(datum/db_query/Q, client/C) + while(Q.NextRow()) + if("[Q.item[1]]" == C.ckey) + continue + C.related_accounts_ip += "[Q.item[1]]" diff --git a/code/modules/client/login_processing/38-alts_cid.dm b/code/modules/client/login_processing/38-alts_cid.dm new file mode 100644 index 00000000000..9613e9fcc3d --- /dev/null +++ b/code/modules/client/login_processing/38-alts_cid.dm @@ -0,0 +1,14 @@ +/datum/client_login_processor/alts_cid + priority = 38 + +/datum/client_login_processor/alts_cid/get_query(client/C) + var/datum/db_query/query = SSdbcore.NewQuery("SELECT ckey FROM player WHERE computerid=:cid", list( + "cid" = C.computer_id + )) + return query + +/datum/client_login_processor/alts_cid/process_result(datum/db_query/Q, client/C) + while(Q.NextRow()) + if("[Q.item[1]]" == C.ckey) + continue + C.related_accounts_cid += "[Q.item[1]]" diff --git a/code/modules/client/login_processing/39-cid_count.dm b/code/modules/client/login_processing/39-cid_count.dm new file mode 100644 index 00000000000..c0e8248e892 --- /dev/null +++ b/code/modules/client/login_processing/39-cid_count.dm @@ -0,0 +1,71 @@ +/datum/client_login_processor/cid_count + priority = 39 + +/datum/client_login_processor/cid_count/get_query(client/C) + var/datum/db_query/query = SSdbcore.NewQuery("SELECT COUNT(DISTINCT computerID) FROM connection_log WHERE ckey=:ckey", list( + "ckey" = C.ckey + )) + return query + +/datum/client_login_processor/cid_count/process_result(datum/db_query/Q, client/C) + // If the config is 0, disable this + if(GLOB.configuration.general.max_client_cid_history == 0) + return + + // Now query how many cids they have + var/cidcount = 0 + if(Q.NextRow()) + cidcount = Q.item[1] + + if(cidcount > GLOB.configuration.general.max_client_cid_history) + // Check their notes for CID tracking in the past + var/has_note = FALSE + var/note_text = "" + var/datum/db_query/query_find_track_note = SSdbcore.NewQuery("SELECT notetext FROM notes WHERE ckey=:ckey AND adminckey=:ackey", list( + "ckey" = C.ckey, + "ackey" = CIDTRACKING_PSUEDO_CKEY + )) + if(!query_find_track_note.warn_execute()) + qdel(query_find_track_note) + return + if(query_find_track_note.NextRow()) + note_text = query_find_track_note.item[1] // Grab existing note text + has_note = TRUE + qdel(query_find_track_note) + + + if(has_note) // They have a note. Update it. + var/new_text = "Connected on the date of this note with unique CID #[cidcount]" + // Only update the note if the text is different. Otherwise it bumps the timestamp when it shouldnt + if(note_text != new_text) + var/datum/db_query/query_update_track_note = SSdbcore.NewQuery("UPDATE notes SET notetext=:notetext, timestamp=NOW(), round_id=:rid WHERE ckey=:ckey AND adminckey=:ackey", list( + "notetext" = new_text, + "ckey" = C.ckey, + "ackey" = CIDTRACKING_PSUEDO_CKEY, + "rid" = GLOB.round_id + )) + if(!query_update_track_note.warn_execute()) + qdel(query_update_track_note) + return + qdel(query_update_track_note) + + else // They dont have a note. Make one. + // NOT logged because its automatic and will spam logs otherwise + // Also right checking must be disabled because its a psuedockey, not a real one + add_note(C.ckey, "Connected on the date of this note with unique CID #[cidcount]", adminckey = CIDTRACKING_PSUEDO_CKEY, logged = FALSE, checkrights = FALSE, automated = TRUE) + + var/show_warning = TRUE + // Check if they have a note that matches the warning suppressor + var/datum/db_query/query_find_note = SSdbcore.NewQuery("SELECT id FROM notes WHERE ckey=:ckey AND notetext=:notetext", list( + "ckey" = C.ckey, + "notetext" = CIDWARNING_SUPPRESSED_NOTETEXT + )) + if(!query_find_note.warn_execute()) + qdel(query_find_note) + return + if(query_find_note.NextRow()) + show_warning = FALSE + qdel(query_find_note) + + if(show_warning) + message_admins("[C.ckey] has just connected and has a history of [cidcount] different CIDs. (WebInfo) (Suppress Warning)") diff --git a/code/modules/client/login_processing/40-pai_save.dm b/code/modules/client/login_processing/40-pai_save.dm new file mode 100644 index 00000000000..4c21c0201a8 --- /dev/null +++ b/code/modules/client/login_processing/40-pai_save.dm @@ -0,0 +1,8 @@ +/datum/client_login_processor/pai_save + priority = 40 + +/datum/client_login_processor/pai_save/get_query(client/C) + return C.pai_save.get_query() + +/datum/client_login_processor/pai_save/process_result(datum/db_query/Q, client/C) + C.pai_save.load_data(Q) diff --git a/code/modules/client/login_processing/45-cuis.dm b/code/modules/client/login_processing/45-cuis.dm new file mode 100644 index 00000000000..88bfca44638 --- /dev/null +++ b/code/modules/client/login_processing/45-cuis.dm @@ -0,0 +1,20 @@ +/datum/client_login_processor/cuis + priority = 45 + +/datum/client_login_processor/cuis/get_query(client/C) + var/datum/db_query/query = SSdbcore.NewQuery("SELECT cuiRealName, cuiPath, cuiItemName, cuiDescription, cuiJobMask FROM customuseritems WHERE cuiCKey=:ckey", list( + "ckey" = C.ckey + )) + return query + +/datum/client_login_processor/cuis/process_result(datum/db_query/Q, client/C) + while(Q.NextRow()) + var/datum/custom_user_item/cui = new() + cui.characer_name = Q.item[1] + cui.object_typepath = text2path(Q.item[2]) + cui.item_name_override = Q.item[3] + cui.item_desc_override = Q.item[4] + cui.raw_job_mask = Q.item[5] + + if(cui.parse_info(C.ckey)) + C.cui_entries += cui diff --git a/code/modules/client/login_processing/__client_login_processor.dm b/code/modules/client/login_processing/__client_login_processor.dm new file mode 100644 index 00000000000..242e797f680 --- /dev/null +++ b/code/modules/client/login_processing/__client_login_processor.dm @@ -0,0 +1,51 @@ +/** + * # Client Login Processor Framework + * + * The holder class for all client data processing + * + * This framework is designed for loading in client data from the database. + * Login processors have their own queries, which will be put into one async batch and + * executed at the same time, to reduce the time it takes for a client to login. + * Login processors can also be given priorities to have things fire in specific orders + * EG: Load their preferences before their job bans, etc etc + * + * When creating these, please name the files with the priority at the start, and the typepath after + * EG: 10-load_preferences.dm + * This makes it easier to track stuff down -AA07 + * + * Also if you have used other languages before with "interface" types (Java, C# (Microsoft Java), etc), + * treat this class as one of those. [get_query(client/C)] and [process_result(datum/db_query/Q, client/C)] MUST be overriden + */ +/datum/client_login_processor + /// The login priority. A lower priority will fire first + var/priority = 0 + +/** + * Query Getter + * + * Gets the DB query for this login processor + * + * Takes the client as an arg instead of just the ckey incase we need more data (IP, CID, etc). + * Returns a DB query datum. + * + * Arguments: + * * C - The client to use to generate the query + */ +/datum/client_login_processor/proc/get_query(client/C) + RETURN_TYPE(/datum/db_query) + CRASH("get_query() not overriden for [type]!") + + + +/** + * Result Processor + * + * Takes the (now executed) query and the client and parses the required data out + * Note: This can be a no-op if you want to just update the DB, just return on the override + * + * Arguments: + * * Q - The DB query to process data from + * * C - The client to store stuff on + */ +/datum/client_login_processor/proc/process_result(datum/db_query/Q, client/C) + CRASH("process_result() not overriden for [type]!") diff --git a/code/modules/mob/new_player/preferences_setup.dm b/code/modules/client/preference/character.dm similarity index 50% rename from code/modules/mob/new_player/preferences_setup.dm rename to code/modules/client/preference/character.dm index ec5ae76c33d..9a98c853d1b 100644 --- a/code/modules/mob/new_player/preferences_setup.dm +++ b/code/modules/client/preference/character.dm @@ -1,6 +1,534 @@ -/datum/preferences - //The mob should have a gender you want before running this proc. Will run fine without H -/datum/preferences/proc/random_character(gender_override) +// PSA To anyone who opens this: +// Good fucking luck. You will need this: https://www.youtube.com/watch?v=W9GaIbECisQ + + +/datum/character_save + var/real_name //our character's name + var/be_random_name = FALSE //whether we are a random name every round + var/gender = MALE //gender of character (well duh) + var/age = 30 //age of character + var/spawnpoint = "Arrivals Shuttle" //where this character will spawn (0-2). + var/b_type = "A+" //blood type (not-chooseable) + var/underwear = "Nude" //underwear type + var/undershirt = "Nude" //undershirt type + var/socks = "Nude" //socks type + var/backbag = GBACKPACK //backpack type + var/ha_style = "None" //Head accessory style + var/hacc_colour = "#000000" //Head accessory colour. If this line looks badly indented in vscode, its because of the shitty colour square + var/list/m_styles = list( + "head" = "None", + "body" = "None", + "tail" = "None" + ) //Marking styles. + var/list/m_colours = list( + "head" = "#000000", + "body" = "#000000", + "tail" = "#000000" + ) //Marking colours. + var/h_style = "Bald" //Hair type + var/h_colour = "#000000" //Hair color + var/h_sec_colour = "#000000" //Secondary hair color + var/f_style = "Shaved" //Facial hair type + var/f_colour = "#000000" //Facial hair color + var/f_sec_colour = "#000000" //Secondary facial hair color + var/s_tone = 0 //Skin tone + var/s_colour = "#000000" //Skin color + var/e_colour = "#000000" //Eye color + var/alt_head = "None" //Alt head style. + var/species = "Human" + var/language = "None" //Secondary language + var/autohiss_mode = AUTOHISS_OFF //Species autohiss level. OFF, BASIC, FULL. + + var/body_accessory = null + + var/speciesprefs = 0 //I hate having to do this, I really do (Using this for oldvox code, making names universal I guess + + //Mob preview + var/icon/preview_icon = null + var/icon/preview_icon_front = null + var/icon/preview_icon_side = null + + //Jobs, uses bitflags + var/job_support_high = 0 + var/job_support_med = 0 + var/job_support_low = 0 + + var/job_medsci_high = 0 + var/job_medsci_med = 0 + var/job_medsci_low = 0 + + var/job_engsec_high = 0 + var/job_engsec_med = 0 + var/job_engsec_low = 0 + + var/job_karma_high = 0 + var/job_karma_med = 0 + var/job_karma_low = 0 + + //Keeps track of preferrence for not getting any wanted jobs + var/alternate_option = 2 + + // maps each organ to either null(intact), "cyborg" or "amputated" + // will probably not be able to do this for head and torso ;) + var/list/organ_data = list() + var/list/rlimb_data = list() + + var/list/player_alt_titles = new() // the default name of a job like "Medical Doctor" + var/flavor_text = "" + var/med_record = "" + var/sec_record = "" + var/gen_record = "" + var/disabilities = 0 + + var/nanotrasen_relation = "Neutral" + + // OOC Metadata: + var/metadata = "" + + //Gear stuff + var/list/loadout_gear = list() + + /// Is this character from the DB? + var/from_db = FALSE + /// Is this character valid to be picked? This is necessary to avoid someone getting a bald human called "Character 30" + var/valid_save = FALSE + /// Character slot number, used for saves and stuff. + var/slot_number = 0 + +// Fuckery to prevent null characters +/datum/character_save/New() + randomise() + real_name = random_name(gender, species) + +/datum/character_save/proc/save(client/C) + var/organlist + var/rlimblist + var/playertitlelist + var/gearlist + + var/markingcolourslist = list2params(m_colours) + var/markingstyleslist = list2params(m_styles) + if(!isemptylist(organ_data)) + organlist = list2params(organ_data) + if(!isemptylist(rlimb_data)) + rlimblist = list2params(rlimb_data) + if(!isemptylist(player_alt_titles)) + playertitlelist = list2params(player_alt_titles) + if(!isemptylist(loadout_gear)) + gearlist = json_encode(loadout_gear) + + var/datum/db_query/firstquery = SSdbcore.NewQuery("SELECT slot FROM characters WHERE ckey=:ckey ORDER BY slot", list( + "ckey" = C.ckey + )) + if(!firstquery.warn_execute()) + qdel(firstquery) + return + while(firstquery.NextRow()) + if(text2num(firstquery.item[1]) == slot_number) // Check if the character exists + var/datum/db_query/query = SSdbcore.NewQuery({"UPDATE characters + SET + OOC_Notes=:metadata, + real_name=:real_name, + name_is_always_random=:be_random_name, + gender=:gender, + age=:age, + species=:species, + language=:language, + hair_colour=:h_colour, + secondary_hair_colour=:h_sec_colour, + facial_hair_colour=:f_colour, + secondary_facial_hair_colour=:f_sec_colour, + skin_tone=:s_tone, + skin_colour=:s_colour, + marking_colours=:markingcolourslist, + head_accessory_colour=:hacc_colour, + hair_style_name=:h_style, + facial_style_name=:f_style, + marking_styles=:markingstyleslist, + head_accessory_style_name=:ha_style, + alt_head_name=:alt_head, + eye_colour=:e_colour, + underwear=:underwear, + undershirt=:undershirt, + backbag=:backbag, + b_type=:b_type, + alternate_option=:alternate_option, + job_support_high=:job_support_high, + job_support_med=:job_support_med, + job_support_low=:job_support_low, + job_medsci_high=:job_medsci_high, + job_medsci_med=:job_medsci_med, + job_medsci_low=:job_medsci_low, + job_engsec_high=:job_engsec_high, + job_engsec_med=:job_engsec_med, + job_engsec_low=:job_engsec_low, + job_karma_high=:job_karma_high, + job_karma_med=:job_karma_med, + job_karma_low=:job_karma_low, + flavor_text=:flavor_text, + med_record=:med_record, + sec_record=:sec_record, + gen_record=:gen_record, + player_alt_titles=:playertitlelist, + disabilities=:disabilities, + organ_data=:organlist, + rlimb_data=:rlimblist, + nanotrasen_relation=:nanotrasen_relation, + speciesprefs=:speciesprefs, + socks=:socks, + body_accessory=:body_accessory, + gear=:gearlist, + autohiss=:autohiss_mode + WHERE ckey=:ckey + AND slot=:slot"}, list( + // OH GOD SO MANY PARAMETERS + "metadata" = metadata, + "real_name" = real_name, + "be_random_name" = be_random_name, + "gender" = gender, + "age" = age, + "species" = species, + "language" = language, + "h_colour" = h_colour, + "h_sec_colour" = h_sec_colour, + "f_colour" = f_colour, + "f_sec_colour" = f_sec_colour, + "s_tone" = s_tone, + "s_colour" = s_colour, + "markingcolourslist" = markingcolourslist, + "hacc_colour" = hacc_colour, + "h_style" = h_style, + "f_style" = f_style, + "markingstyleslist" = markingstyleslist, + "ha_style" = ha_style, + "alt_head" = (alt_head ? alt_head : ""), // This it intentional. It wont work without it! + "e_colour" = e_colour, + "underwear" = underwear, + "undershirt" = undershirt, + "backbag" = backbag, + "b_type" = b_type, + "alternate_option" = alternate_option, + "job_support_high" = job_support_high, + "job_support_med" = job_support_med, + "job_support_low" = job_support_low, + "job_medsci_high" = job_medsci_high, + "job_medsci_med" = job_medsci_med, + "job_medsci_low" = job_medsci_low, + "job_engsec_high" = job_engsec_high, + "job_engsec_med" = job_engsec_med, + "job_engsec_low" = job_engsec_low, + "job_karma_high" = job_karma_high, + "job_karma_med" = job_karma_med, + "job_karma_low" = job_karma_low, + "flavor_text" = flavor_text, + "med_record" = med_record, + "sec_record" = sec_record, + "gen_record" = gen_record, + "playertitlelist" = (playertitlelist ? playertitlelist : ""), // This it intentnional. It wont work without it! + "disabilities" = disabilities, + "organlist" = (organlist ? organlist : ""), + "rlimblist" = (rlimblist ? rlimblist : ""), + "nanotrasen_relation" = nanotrasen_relation, + "speciesprefs" = speciesprefs, + "socks" = socks, + "body_accessory" = (body_accessory ? body_accessory : ""), + "gearlist" = (gearlist ? gearlist : ""), + "autohiss_mode" = autohiss_mode, + "ckey" = C.ckey, + "slot" = slot_number + )) + + if(!query.warn_execute()) + qdel(firstquery) + qdel(query) + return + qdel(firstquery) + qdel(query) + return 1 + + qdel(firstquery) + + var/datum/db_query/query = SSdbcore.NewQuery({" + INSERT INTO characters (ckey, slot, OOC_Notes, real_name, name_is_always_random, gender, + age, species, language, + hair_colour, secondary_hair_colour, + facial_hair_colour, secondary_facial_hair_colour, + skin_tone, skin_colour, + marking_colours, + head_accessory_colour, + hair_style_name, + facial_style_name, + marking_styles, + head_accessory_style_name, + alt_head_name, + eye_colour, + underwear, undershirt, + backbag, b_type, alternate_option, + job_support_high, job_support_med, job_support_low, + job_medsci_high, job_medsci_med, job_medsci_low, + job_engsec_high, job_engsec_med, job_engsec_low, + job_karma_high, job_karma_med, job_karma_low, + flavor_text, + med_record, + sec_record, + gen_record, + player_alt_titles, + disabilities, organ_data, rlimb_data, nanotrasen_relation, speciesprefs, + socks, body_accessory, gear, autohiss) + VALUES + (:ckey, :slot, :metadata, :name, :be_random_name, :gender, + :age, :species, :language, + :h_colour, :h_sec_colour, + :f_colour, :f_sec_colour, + :s_tone, :s_colour, + :markingcolourslist, + :hacc_colour, + :h_style, + :f_style, + :markingstyleslist, + :ha_style, + :alt_head, + :e_colour, + :underwear, :undershirt, + :backbag, :b_type, :alternate_option, + :job_support_high, :job_support_med, :job_support_low, + :job_medsci_high, :job_medsci_med, :job_medsci_low, + :job_engsec_high, :job_engsec_med, :job_engsec_low, + :job_karma_high, :job_karma_med, :job_karma_low, + :flavor_text, + :med_record, + :sec_record, + :gen_record, + :playertitlelist, + :disabilities, :organlist, :rlimblist, :nanotrasen_relation, :speciesprefs, + :socks, :body_accessory, :gearlist, :autohiss_mode) + "}, list( + // This has too many params for anyone to look at this without going insae + "ckey" = C.ckey, + "slot" = slot_number, + "metadata" = metadata, + "name" = real_name, + "be_random_name" = be_random_name, + "gender" = gender, + "age" = age, + "species" = species, + "language" = language, + "h_colour" = h_colour, + "h_sec_colour" = h_sec_colour, + "f_colour" = f_colour, + "f_sec_colour" = f_sec_colour, + "s_tone" = s_tone, + "s_colour" = s_colour, + "markingcolourslist" = markingcolourslist, + "hacc_colour" = hacc_colour, + "h_style" = h_style, + "f_style" = f_style, + "markingstyleslist" = markingstyleslist, + "ha_style" = ha_style, + "alt_head" = (alt_head ? alt_head : "None"), // bane of my fucking life + "e_colour" = e_colour, + "underwear" = underwear, + "undershirt" = undershirt, + "backbag" = backbag, + "b_type" = b_type, + "alternate_option" = alternate_option, + "job_support_high" = job_support_high, + "job_support_med" = job_support_med, + "job_support_low" = job_support_low, + "job_medsci_high" = job_medsci_high, + "job_medsci_med" = job_medsci_med, + "job_medsci_low" = job_medsci_low, + "job_engsec_high" = job_engsec_high, + "job_engsec_med" = job_engsec_med, + "job_engsec_low" = job_engsec_low, + "job_karma_high" = job_karma_high, + "job_karma_med" = job_karma_med, + "job_karma_low" = job_karma_low, + "flavor_text" = flavor_text, + "med_record" = med_record, + "sec_record" = sec_record, + "gen_record" = gen_record, + "playertitlelist" = (playertitlelist ? playertitlelist : ""), // This it intentional. It wont work without it! + "disabilities" = disabilities, + "organlist" = (organlist ? organlist : ""), + "rlimblist" = (rlimblist ? rlimblist : ""), + "nanotrasen_relation" = nanotrasen_relation, + "speciesprefs" = speciesprefs, + "socks" = socks, + "body_accessory" = (body_accessory ? body_accessory : ""), + "gearlist" = (gearlist ? gearlist : ""), + "autohiss_mode" = autohiss_mode + )) + + if(!query.warn_execute()) + qdel(query) + return + + qdel(query) + from_db = TRUE + return 1 + + +/datum/character_save/proc/load(datum/db_query/query) + //Character + metadata = query.item[1] + real_name = query.item[2] + be_random_name = text2num(query.item[3]) + gender = query.item[4] + age = text2num(query.item[5]) + species = query.item[6] + language = query.item[7] + + h_colour = query.item[8] + h_sec_colour = query.item[9] + f_colour = query.item[10] + f_sec_colour = query.item[11] + s_tone = text2num(query.item[12]) + s_colour = query.item[13] + m_colours = params2list(query.item[14]) + hacc_colour = query.item[15] + h_style = query.item[16] + f_style = query.item[17] + m_styles = params2list(query.item[18]) + ha_style = query.item[19] + alt_head = query.item[20] + e_colour = query.item[21] + underwear = query.item[22] + undershirt = query.item[23] + backbag = query.item[24] + b_type = query.item[25] + + + //Jobs + alternate_option = text2num(query.item[26]) + job_support_high = text2num(query.item[27]) + job_support_med = text2num(query.item[28]) + job_support_low = text2num(query.item[29]) + job_medsci_high = text2num(query.item[30]) + job_medsci_med = text2num(query.item[31]) + job_medsci_low = text2num(query.item[32]) + job_engsec_high = text2num(query.item[33]) + job_engsec_med = text2num(query.item[34]) + job_engsec_low = text2num(query.item[35]) + job_karma_high = text2num(query.item[36]) + job_karma_med = text2num(query.item[37]) + job_karma_low = text2num(query.item[38]) + + //Miscellaneous + flavor_text = query.item[39] + med_record = query.item[40] + sec_record = query.item[41] + gen_record = query.item[42] + // Apparently, the preceding vars weren't always encoded properly... + if(findtext(flavor_text, "<")) // ... so let's clumsily check for tags! + flavor_text = html_encode(flavor_text) + if(findtext(med_record, "<")) + med_record = html_encode(med_record) + if(findtext(sec_record, "<")) + sec_record = html_encode(sec_record) + if(findtext(gen_record, "<")) + gen_record = html_encode(gen_record) + disabilities = text2num(query.item[43]) + player_alt_titles = params2list(query.item[44]) + organ_data = params2list(query.item[45]) + rlimb_data = params2list(query.item[46]) + nanotrasen_relation = query.item[47] + speciesprefs = text2num(query.item[48]) + + //socks + socks = query.item[49] + body_accessory = query.item[50] + loadout_gear = query.item[51] + autohiss_mode = text2num(query.item[52]) + + //Sanitize + var/datum/species/SP = GLOB.all_species[species] + metadata = sanitize_text(metadata, initial(metadata)) + real_name = reject_bad_name(real_name, TRUE) + + if(isnull(species)) + species = "Human" + + if(isnull(language)) + language = "None" + + if(isnull(nanotrasen_relation)) + nanotrasen_relation = initial(nanotrasen_relation) + + if(isnull(speciesprefs)) + speciesprefs = initial(speciesprefs) + + if(!real_name) + real_name = random_name(gender, species) + + be_random_name = sanitize_integer(be_random_name, 0, 1, initial(be_random_name)) + gender = sanitize_gender(gender, FALSE, !SP.has_gender) + age = sanitize_integer(age, AGE_MIN, AGE_MAX, initial(age)) + h_colour = sanitize_hexcolor(h_colour) + h_sec_colour = sanitize_hexcolor(h_sec_colour) + f_colour = sanitize_hexcolor(f_colour) + f_sec_colour = sanitize_hexcolor(f_sec_colour) + s_tone = sanitize_integer(s_tone, -185, 34, initial(s_tone)) + s_colour = sanitize_hexcolor(s_colour) + + for(var/marking_location in m_colours) + m_colours[marking_location] = sanitize_hexcolor(m_colours[marking_location], DEFAULT_MARKING_COLOURS[marking_location]) + + hacc_colour = sanitize_hexcolor(hacc_colour) + h_style = sanitize_inlist(h_style, GLOB.hair_styles_public_list, initial(h_style)) + f_style = sanitize_inlist(f_style, GLOB.facial_hair_styles_list, initial(f_style)) + + for(var/marking_location in m_styles) + m_styles[marking_location] = sanitize_inlist(m_styles[marking_location], GLOB.marking_styles_list, DEFAULT_MARKING_STYLES[marking_location]) + + ha_style = sanitize_inlist(ha_style, GLOB.head_accessory_styles_list, initial(ha_style)) + alt_head = sanitize_inlist(alt_head, GLOB.alt_heads_list, initial(alt_head)) + e_colour = sanitize_hexcolor(e_colour) + underwear = sanitize_text(underwear, initial(underwear)) + undershirt = sanitize_text(undershirt, initial(undershirt)) + backbag = sanitize_text(backbag, initial(backbag)) + b_type = sanitize_text(b_type, initial(b_type)) + autohiss_mode = sanitize_integer(autohiss_mode, 0, 2, initial(autohiss_mode)) + + alternate_option = sanitize_integer(alternate_option, 0, 2, initial(alternate_option)) + job_support_high = sanitize_integer(job_support_high, 0, 65535, initial(job_support_high)) + job_support_med = sanitize_integer(job_support_med, 0, 65535, initial(job_support_med)) + job_support_low = sanitize_integer(job_support_low, 0, 65535, initial(job_support_low)) + job_medsci_high = sanitize_integer(job_medsci_high, 0, 65535, initial(job_medsci_high)) + job_medsci_med = sanitize_integer(job_medsci_med, 0, 65535, initial(job_medsci_med)) + job_medsci_low = sanitize_integer(job_medsci_low, 0, 65535, initial(job_medsci_low)) + job_engsec_high = sanitize_integer(job_engsec_high, 0, 65535, initial(job_engsec_high)) + job_engsec_med = sanitize_integer(job_engsec_med, 0, 65535, initial(job_engsec_med)) + job_engsec_low = sanitize_integer(job_engsec_low, 0, 65535, initial(job_engsec_low)) + job_karma_high = sanitize_integer(job_karma_high, 0, 65535, initial(job_karma_high)) + job_karma_med = sanitize_integer(job_karma_med, 0, 65535, initial(job_karma_med)) + job_karma_low = sanitize_integer(job_karma_low, 0, 65535, initial(job_karma_low)) + disabilities = sanitize_integer(disabilities, 0, 65535, initial(disabilities)) + + socks = sanitize_text(socks, initial(socks)) + body_accessory = sanitize_text(body_accessory, initial(body_accessory)) + loadout_gear = sanitize_json(loadout_gear) + + if(!player_alt_titles) + player_alt_titles = new() + if(!organ_data) + src.organ_data = list() + if(!rlimb_data) + src.rlimb_data = list() + if(!loadout_gear) + loadout_gear = list() + + // Check if the current body accessory exists + if(!GLOB.body_accessory_by_name[body_accessory]) + body_accessory = null + + from_db = TRUE + valid_save = TRUE + + return TRUE + +/datum/character_save/proc/randomise(gender_override) + b_type = pick(4;"O-", 36;"O+", 3;"A-", 28;"A+", 1;"B-", 20;"B+", 1;"AB-", 5;"AB+") var/datum/species/S = GLOB.all_species[species] if(!istype(S)) //The species was invalid. Set the species to the default, fetch the datum for that species and generate a random character. species = initial(species) @@ -48,7 +576,7 @@ age = rand(AGE_MIN, AGE_MAX) -/datum/preferences/proc/randomize_hair_color(target = "hair") +/datum/character_save/proc/randomize_hair_color(target = "hair") if(prob (75) && target == "facial") // Chance to inherit hair color f_colour = h_colour return @@ -102,7 +630,7 @@ if("facial") f_colour = rgb(red, green, blue) -/datum/preferences/proc/randomize_eyes_color() +/datum/character_save/proc/randomize_eyes_color() var/red var/green var/blue @@ -148,7 +676,7 @@ e_colour = rgb(red, green, blue) -/datum/preferences/proc/randomize_skin_color(pass_on) +/datum/character_save/proc/randomize_skin_color(pass_on) var/red var/green var/blue @@ -197,7 +725,7 @@ else s_colour = rgb(red, green, blue) -/datum/preferences/proc/blend_backpack(icon/clothes_s, backbag, satchel, backpack="backpack") +/datum/character_save/proc/blend_backpack(icon/clothes_s, backbag, satchel, backpack="backpack") switch(backbag) if(2) clothes_s.Blend(new /icon('icons/mob/clothing/back.dmi', backpack), ICON_OVERLAY) @@ -207,7 +735,7 @@ clothes_s.Blend(new /icon('icons/mob/clothing/back.dmi', "satchel"), ICON_OVERLAY) return clothes_s -/datum/preferences/proc/update_preview_icon(for_observer=0) //seriously. This is horrendous. +/datum/character_save/proc/update_preview_icon(for_observer=0) //seriously. This is horrendous. qdel(preview_icon_front) qdel(preview_icon_side) qdel(preview_icon) @@ -852,29 +1380,6 @@ clothes_s.Blend(new /icon('icons/mob/clothing/back.dmi', "satchel"), ICON_OVERLAY) else if(job_karma_high) switch(job_karma_high) - if(JOB_MECHANIC) - clothes_s = new /icon(uniform_dmi, "mechanic_s") - clothes_s.Blend(new /icon('icons/mob/clothing/feet.dmi', "orange"), ICON_UNDERLAY) - clothes_s.Blend(new /icon('icons/mob/clothing/belt.dmi', "utility"), ICON_OVERLAY) - clothes_s.Blend(new /icon('icons/mob/clothing/head.dmi', "hardhat0_yellow"), ICON_OVERLAY) - switch(backbag) - if(2) - clothes_s.Blend(new /icon('icons/mob/clothing/back.dmi', "engiepack"), ICON_OVERLAY) - if(3) - clothes_s.Blend(new /icon('icons/mob/clothing/back.dmi', "satchel-eng"), ICON_OVERLAY) - if(4) - clothes_s.Blend(new /icon('icons/mob/clothing/back.dmi', "satchel"), ICON_OVERLAY) - if(JOB_PILOT) - clothes_s = new /icon(uniform_dmi, "secred_s") - clothes_s.Blend(new /icon('icons/mob/clothing/feet.dmi', "jackboots"), ICON_UNDERLAY) - clothes_s.Blend(new /icon('icons/mob/clothing/suit.dmi', "bomber"), ICON_OVERLAY) - switch(backbag) - if(2) - clothes_s.Blend(new /icon('icons/mob/clothing/back.dmi', "securitypack"), ICON_OVERLAY) - if(3) - clothes_s.Blend(new /icon('icons/mob/clothing/back.dmi', "satchel-sec"), ICON_OVERLAY) - if(4) - clothes_s.Blend(new /icon('icons/mob/clothing/back.dmi', "satchel"), ICON_OVERLAY) if(JOB_BRIGDOC) clothes_s = new /icon(uniform_dmi, "medical_s") clothes_s.Blend(new /icon('icons/mob/clothing/feet.dmi', "white"), ICON_UNDERLAY) @@ -950,3 +1455,653 @@ qdel(undershirt_s) qdel(socks_s) qdel(clothes_s) + + + +/datum/character_save/proc/get_gear_metadata(datum/gear/G) // NYI + . = loadout_gear[G.type] + if(!.) + . = list() + loadout_gear[G.type] = . + +/datum/character_save/proc/get_tweak_metadata(datum/gear/G, datum/gear_tweak/tweak) + var/list/metadata = get_gear_metadata(G) + . = metadata["[tweak]"] + if(!.) + . = tweak.get_default() + metadata["[tweak]"] = . + +/datum/character_save/proc/set_tweak_metadata(datum/gear/G, datum/gear_tweak/tweak, new_metadata) + var/list/metadata = get_gear_metadata(G) + metadata["[tweak]"] = new_metadata + + +/datum/character_save/proc/SetJobPreferenceLevel(datum/job/job, level) + if(!job) + return 0 + + if(level == 1) // to high + // remove any other job(s) set to high + job_support_med |= job_support_high + job_engsec_med |= job_engsec_high + job_medsci_med |= job_medsci_high + job_karma_med |= job_karma_high + job_support_high = 0 + job_engsec_high = 0 + job_medsci_high = 0 + job_karma_high = 0 + + if(job.department_flag == JOBCAT_SUPPORT) + job_support_low &= ~job.flag + job_support_med &= ~job.flag + job_support_high &= ~job.flag + + switch(level) + if(1) + job_support_high |= job.flag + if(2) + job_support_med |= job.flag + if(3) + job_support_low |= job.flag + + return 1 + else if(job.department_flag == JOBCAT_ENGSEC) + job_engsec_low &= ~job.flag + job_engsec_med &= ~job.flag + job_engsec_high &= ~job.flag + + switch(level) + if(1) + job_engsec_high |= job.flag + if(2) + job_engsec_med |= job.flag + if(3) + job_engsec_low |= job.flag + + return 1 + else if(job.department_flag == JOBCAT_MEDSCI) + job_medsci_low &= ~job.flag + job_medsci_med &= ~job.flag + job_medsci_high &= ~job.flag + + switch(level) + if(1) + job_medsci_high |= job.flag + if(2) + job_medsci_med |= job.flag + if(3) + job_medsci_low |= job.flag + + return 1 + else if(job.department_flag == JOBCAT_KARMA) + job_karma_low &= ~job.flag + job_karma_med &= ~job.flag + job_karma_high &= ~job.flag + + switch(level) + if(1) + job_karma_high |= job.flag + if(2) + job_karma_med |= job.flag + if(3) + job_karma_low |= job.flag + + return 1 + + return 0 + +/datum/character_save/proc/ShowDisabilityState(mob/user, flag, label) + return "
  • [label]: [disabilities & flag ? "Yes" : "No"]
  • " + +/datum/character_save/proc/SetDisabilities(mob/user) + var/datum/species/S = GLOB.all_species[species] + var/HTML = "" + HTML += "
    " + + if(CAN_WINGDINGS in S.species_traits) + HTML += ShowDisabilityState(user, DISABILITY_FLAG_WINGDINGS, "Speak in Wingdings") + HTML += ShowDisabilityState(user, DISABILITY_FLAG_NEARSIGHTED, "Nearsighted") + HTML += ShowDisabilityState(user, DISABILITY_FLAG_COLOURBLIND, "Colourblind") + HTML += ShowDisabilityState(user, DISABILITY_FLAG_BLIND, "Blind") + HTML += ShowDisabilityState(user, DISABILITY_FLAG_DEAF, "Deaf") + HTML += ShowDisabilityState(user, DISABILITY_FLAG_MUTE, "Mute") + if(!(TRAIT_NOFAT in S.inherent_traits)) + HTML += ShowDisabilityState(user, DISABILITY_FLAG_FAT, "Obese") + HTML += ShowDisabilityState(user, DISABILITY_FLAG_NERVOUS, "Stutter") + HTML += ShowDisabilityState(user, DISABILITY_FLAG_SWEDISH, "Swedish accent") + HTML += ShowDisabilityState(user, DISABILITY_FLAG_CHAV, "Chav accent") + HTML += ShowDisabilityState(user, DISABILITY_FLAG_LISP, "Lisp") + HTML += ShowDisabilityState(user, DISABILITY_FLAG_DIZZY, "Dizziness") + + + HTML += {" + \[Done\] + \[Reset\] +
    "} + + var/datum/browser/popup = new(user, "disabil", "
    Choose Disabilities
    ", 350, 380) + popup.set_content(HTML) + popup.open(0) + +/datum/character_save/proc/SetRecords(mob/user) + var/HTML = "" + HTML += "
    " + + HTML += "Medical Records
    " + + if(length(med_record) <= 40) + HTML += "[med_record]" + else + HTML += "[copytext(med_record, 1, 37)]..." + + HTML += "
    Employment Records
    " + + if(length(gen_record) <= 40) + HTML += "[gen_record]" + else + HTML += "[copytext(gen_record, 1, 37)]..." + + HTML += "
    Security Records
    " + + if(length(sec_record) <= 40) + HTML += "[sec_record]
    " + else + HTML += "[copytext(sec_record, 1, 37)]...
    " + + HTML += "\[Done\]" + HTML += "
    " + + var/datum/browser/popup = new(user, "records", "
    Character Records
    ", 350, 300) + popup.set_content(HTML) + popup.open(0) + +/datum/character_save/proc/GetPlayerAltTitle(datum/job/job) + return player_alt_titles.Find(job.title) > 0 \ + ? player_alt_titles[job.title] \ + : job.title + +/datum/character_save/proc/SetPlayerAltTitle(datum/job/job, new_title) + // remove existing entry + if(player_alt_titles.Find(job.title)) + player_alt_titles -= job.title + // add one if it's not default + if(job.title != new_title) + player_alt_titles[job.title] = new_title + +/datum/character_save/proc/ResetJobs() + job_support_high = 0 + job_support_med = 0 + job_support_low = 0 + + job_medsci_high = 0 + job_medsci_med = 0 + job_medsci_low = 0 + + job_engsec_high = 0 + job_engsec_med = 0 + job_engsec_low = 0 + + job_karma_high = 0 + job_karma_med = 0 + job_karma_low = 0 + + +/datum/character_save/proc/GetJobDepartment(datum/job/job, level) + if(!job || !level) return 0 + switch(job.department_flag) + if(JOBCAT_SUPPORT) + switch(level) + if(1) + return job_support_high + if(2) + return job_support_med + if(3) + return job_support_low + if(JOBCAT_MEDSCI) + switch(level) + if(1) + return job_medsci_high + if(2) + return job_medsci_med + if(3) + return job_medsci_low + if(JOBCAT_ENGSEC) + switch(level) + if(1) + return job_engsec_high + if(2) + return job_engsec_med + if(3) + return job_engsec_low + if(JOBCAT_KARMA) + switch(level) + if(1) + return job_karma_high + if(2) + return job_karma_med + if(3) + return job_karma_low + return 0 + +/datum/character_save/proc/SetJobDepartment(datum/job/job, level) + if(!job || !level) return 0 + switch(level) + if(1)//Only one of these should ever be active at once so clear them all here + job_support_high = 0 + job_medsci_high = 0 + job_engsec_high = 0 + job_karma_high = 0 + return 1 + if(2)//Set current highs to med, then reset them + job_support_med |= job_support_high + job_medsci_med |= job_medsci_high + job_engsec_med |= job_engsec_high + job_karma_med |= job_karma_high + job_support_high = 0 + job_medsci_high = 0 + job_engsec_high = 0 + job_karma_high = 0 + + switch(job.department_flag) + if(JOBCAT_SUPPORT) + switch(level) + if(2) + job_support_high = job.flag + job_support_med &= ~job.flag + if(3) + job_support_med |= job.flag + job_support_low &= ~job.flag + else + job_support_low |= job.flag + if(JOBCAT_MEDSCI) + switch(level) + if(2) + job_medsci_high = job.flag + job_medsci_med &= ~job.flag + if(3) + job_medsci_med |= job.flag + job_medsci_low &= ~job.flag + else + job_medsci_low |= job.flag + if(JOBCAT_ENGSEC) + switch(level) + if(2) + job_engsec_high = job.flag + job_engsec_med &= ~job.flag + if(3) + job_engsec_med |= job.flag + job_engsec_low &= ~job.flag + else + job_engsec_low |= job.flag + if(JOBCAT_KARMA) + switch(level) + if(2) + job_karma_high = job.flag + job_karma_med &= ~job.flag + if(3) + job_karma_med |= job.flag + job_karma_low &= ~job.flag + else + job_karma_low |= job.flag + return 1 + +/datum/character_save/proc/copy_to(mob/living/carbon/human/character) + var/datum/species/S = GLOB.all_species[species] + character.set_species(S.type) // Yell at me if this causes everything to melt + if(be_random_name) + real_name = random_name(gender, species) + + character.add_language(language) + + + character.real_name = real_name + character.dna.real_name = real_name + character.name = character.real_name + + character.flavor_text = flavor_text + character.med_record = med_record + character.sec_record = sec_record + character.gen_record = gen_record + + character.change_gender(gender) + character.age = age + + //Head-specific + var/obj/item/organ/external/head/H = character.get_organ("head") + + H.hair_colour = h_colour + + H.sec_hair_colour = h_sec_colour + + H.facial_colour = f_colour + + H.sec_facial_colour = f_sec_colour + + H.h_style = h_style + H.f_style = f_style + + H.alt_head = alt_head + //End of head-specific. + + character.skin_colour = s_colour + + character.s_tone = s_tone + + // Destroy/cyborgize organs + for(var/name in organ_data) + + var/status = organ_data[name] + var/obj/item/organ/external/O = character.bodyparts_by_name[name] + if(O) + if(status == "amputated") + qdel(O.remove(character)) + + else if(status == "cyborg") + if(rlimb_data[name]) + O.robotize(rlimb_data[name], convert_all = 0) + else + O.robotize() + else + var/obj/item/organ/internal/I = character.get_int_organ_tag(name) + if(I) + if(status == "cybernetic") + I.robotize() + + character.dna.blood_type = b_type + + // Wheelchair necessary? + var/obj/item/organ/external/l_foot = character.get_organ("l_foot") + var/obj/item/organ/external/r_foot = character.get_organ("r_foot") + if(!l_foot && !r_foot) + var/obj/structure/chair/wheelchair/W = new /obj/structure/chair/wheelchair(character.loc) + W.buckle_mob(character, TRUE) + + character.underwear = underwear + character.undershirt = undershirt + character.socks = socks + + if(character.dna.species.bodyflags & HAS_HEAD_ACCESSORY) + H.headacc_colour = hacc_colour + H.ha_style = ha_style + if(character.dna.species.bodyflags & HAS_MARKINGS) + character.m_colours = m_colours + character.m_styles = m_styles + + if(body_accessory) + character.body_accessory = GLOB.body_accessory_by_name[body_accessory] + + character.backbag = backbag + + //Debugging report to track down a bug, which randomly assigned the plural gender to people. + if(character.dna.species.has_gender && (character.gender in list(PLURAL, NEUTER))) + if(isliving(src)) //Ghosts get neuter by default + message_admins("[key_name_admin(character)] has spawned with their gender as plural or neuter. Please notify coders.") + character.change_gender(MALE) + + character.change_eye_color(e_colour) + character.original_eye_color = e_colour + + if(disabilities & DISABILITY_FLAG_FAT) + character.dna.SetSEState(GLOB.fatblock, TRUE, TRUE) + character.overeatduration = 600 + character.dna.default_blocks.Add(GLOB.fatblock) + + if(disabilities & DISABILITY_FLAG_NEARSIGHTED) + character.dna.SetSEState(GLOB.glassesblock, TRUE, TRUE) + character.dna.default_blocks.Add(GLOB.glassesblock) + + if(disabilities & DISABILITY_FLAG_BLIND) + character.dna.SetSEState(GLOB.blindblock, TRUE, TRUE) + character.dna.default_blocks.Add(GLOB.blindblock) + + if(disabilities & DISABILITY_FLAG_DEAF) + character.dna.SetSEState(GLOB.deafblock, TRUE, TRUE) + character.dna.default_blocks.Add(GLOB.deafblock) + + if(disabilities & DISABILITY_FLAG_COLOURBLIND) + character.dna.SetSEState(GLOB.colourblindblock, TRUE, TRUE) + character.dna.default_blocks.Add(GLOB.colourblindblock) + + if(disabilities & DISABILITY_FLAG_MUTE) + character.dna.SetSEState(GLOB.muteblock, TRUE, TRUE) + character.dna.default_blocks.Add(GLOB.muteblock) + + if(disabilities & DISABILITY_FLAG_NERVOUS) + character.dna.SetSEState(GLOB.nervousblock, TRUE, TRUE) + character.dna.default_blocks.Add(GLOB.nervousblock) + + if(disabilities & DISABILITY_FLAG_SWEDISH) + character.dna.SetSEState(GLOB.swedeblock, TRUE, TRUE) + character.dna.default_blocks.Add(GLOB.swedeblock) + + if(disabilities & DISABILITY_FLAG_CHAV) + character.dna.SetSEState(GLOB.chavblock, TRUE, TRUE) + character.dna.default_blocks.Add(GLOB.chavblock) + + if(disabilities & DISABILITY_FLAG_LISP) + character.dna.SetSEState(GLOB.lispblock, TRUE, TRUE) + character.dna.default_blocks.Add(GLOB.lispblock) + + if(disabilities & DISABILITY_FLAG_DIZZY) + character.dna.SetSEState(GLOB.dizzyblock, TRUE, TRUE) + character.dna.default_blocks.Add(GLOB.dizzyblock) + + if(disabilities & DISABILITY_FLAG_WINGDINGS && (CAN_WINGDINGS in character.dna.species.species_traits)) + character.dna.SetSEState(GLOB.wingdingsblock, TRUE, TRUE) + character.dna.default_blocks.Add(GLOB.wingdingsblock) + + character.dna.species.handle_dna(character) + + if(character.dna.dirtySE) + character.dna.UpdateSE() + domutcheck(character, MUTCHK_FORCED) //'Activates' all the above disabilities. + + character.dna.ready_dna(character, flatten_SE = FALSE) + character.sync_organ_dna(assimilate = TRUE) + character.UpdateAppearance() + + // Do the initial caching of the player's body icons. + character.force_update_limbs() + character.update_eyes() + character.regenerate_icons() + +//Check if the user has ANY job selected. +/datum/character_save/proc/check_any_job() + return(job_support_high || job_support_med || job_support_low || job_medsci_high || job_medsci_med || job_medsci_low || job_engsec_high || job_engsec_med || job_engsec_low || job_karma_high || job_karma_med || job_karma_low) + + +/datum/character_save/proc/SetChoices(mob/user, limit = 17, list/splitJobs = list("Head of Security", "Bartender"), widthPerColumn = 400, height = 700) + if(!SSjobs) + return + + //limit - The amount of jobs allowed per column. Defaults to 17 to make it look nice. + //splitJobs - Allows you split the table by job. You can make different tables for each department by including their heads. Defaults to CE to make it look nice. + //widthPerColumn - Screen's width for every column. + //height - Screen's height. + var/width = widthPerColumn + + + var/list/html = list() + html += "" + if(!length(SSjobs.occupations)) + html += "The Jobs subsystem is not yet finished creating jobs, please try again later" + html += "
    Done

    " // Easier to press up here. + else + html += "
    " + html += "Choose occupation chances
    Unavailable occupations are crossed out.

    " + html += "
    Save

    " // Easier to press up here. + html += "
    Left-click to raise an occupation preference, right-click to lower it.
    " + html += "" + html += "
    " // Table within a table for alignment, also allows you to easily add more colomns. + html += "" + var/index = -1 + + //The job before the current job. I only use this to get the previous jobs color when I'm filling in blank rows. + var/datum/job/lastJob + if(!SSjobs) + return + for(var/J in SSjobs.occupations) + var/datum/job/job = J + + if(job.admin_only) + continue + + if(job.hidden_from_job_prefs) + continue + + index += 1 + if((index >= limit) || (job.title in splitJobs)) + if((index < limit) && (lastJob != null)) + // Dynamic window width + width += widthPerColumn + //If the cells were broken up by a job in the splitJob list then it will fill in the rest of the cells with + //the last job's selection color. Creating a rather nice effect. + for(var/i in 1 to limit - index) + html += "" + html += "
      
    " + index = 0 + + html += "" + continue + if(jobban_isbanned(user, job.title)) + html += "[rank]" + continue + var/available_in_playtime = job.available_in_playtime(user.client) + if(available_in_playtime) + html += "[rank]" + continue + if(job.barred_by_disability(user.client)) + html += "[rank]" + continue + if(!job.player_old_enough(user.client)) + var/available_in_days = job.available_in_days(user.client) + html += "[rank]" + continue + if((job_support_low & JOB_CIVILIAN) && (job.title != "Civilian")) + html += "[rank]" + continue + if((job.title in GLOB.command_positions) || (job.title == "AI"))//Bold head jobs + html += "[rank]" + else + html += "[rank]" + + html += "" + continue + /* + if(GetJobDepartment(job, 1) & job.flag) + HTML += " \[High]" + else if(GetJobDepartment(job, 2) & job.flag) + HTML += " \[Medium]" + else if(GetJobDepartment(job, 3) & job.flag) + HTML += " \[Low]" + else + HTML += " \[NEVER]" + */ + html += "[prefLevelLabel]" + + html += "" + + for(var/i in 1 to limit - index) // Finish the column so it is even + html += "" + + html += "
    " + var/rank + if(job.alt_titles) + rank = "[GetPlayerAltTitle(job)]" + else + rank = job.title + lastJob = job + if(!is_job_whitelisted(user, job.title)) + html += "[rank] \[KARMA]
    \[BANNED]
    \[[get_exp_format(available_in_playtime)] as [job.get_exp_req_type()]\]
    \[DISABILITY\]
    \[IN [(available_in_days)] DAYS]
    " + + var/prefLevelLabel = "ERROR" + var/prefLevelColor = "pink" + var/prefUpperLevel = -1 // level to assign on left click + var/prefLowerLevel = -1 // level to assign on right click + + if(GetJobDepartment(job, 1) & job.flag) + prefLevelLabel = "High" + prefLevelColor = "slateblue" + prefUpperLevel = 4 + prefLowerLevel = 2 + else if(GetJobDepartment(job, 2) & job.flag) + prefLevelLabel = "Medium" + prefLevelColor = "green" + prefUpperLevel = 1 + prefLowerLevel = 3 + else if(GetJobDepartment(job, 3) & job.flag) + prefLevelLabel = "Low" + prefLevelColor = "orange" + prefUpperLevel = 2 + prefLowerLevel = 4 + else + prefLevelLabel = "NEVER" + prefLevelColor = "red" + prefUpperLevel = 3 + prefLowerLevel = 1 + + + html += "" + + // HTML += "" + + if(job.title == "Civilian")//Civilian is special + if(job_support_low & JOB_CIVILIAN) + html += " Yes" + else + html += " No" + html += "
      
    " + html += "
    " + + switch(alternate_option) + if(GET_RANDOM_JOB) + html += "

    Get random job if preferences unavailable

    " + if(BE_ASSISTANT) + html += "

    Be a civilian if preferences unavailable

    " + if(RETURN_TO_LOBBY) + html += "

    Return to lobby if preferences unavailable

    " + + html += "
    Reset
    " + html += "

    Learn About Job Selection
    " + html += "
    " + + user << browse(null, "window=preferences") +// user << browse(HTML, "window=mob_occupation;size=[width]x[height]") + var/datum/browser/popup = new(user, "mob_occupation", "
    Occupation Preferences
    ", width, height) + popup.set_window_options("can_close=0") + var/html_string = html.Join() + popup.set_content(html_string) + popup.open(FALSE) + + +/datum/character_save/proc/clear_character_slot(client/C) + . = FALSE + // Is there a character in that slot? + var/datum/db_query/query = SSdbcore.NewQuery("SELECT slot FROM characters WHERE ckey=:ckey AND slot=:slot", list( + "ckey" = C.ckey, + "slot" = slot_number + )) + + if(!query.warn_execute()) + qdel(query) + return + + if(!query.NextRow()) + qdel(query) + return + + qdel(query) + + var/datum/db_query/delete_query = SSdbcore.NewQuery("DELETE FROM characters WHERE ckey=:ckey AND slot=:slot", list( + "ckey" = C.ckey, + "slot" = slot_number + )) + + if(!delete_query.warn_execute()) + qdel(delete_query) + return + + qdel(delete_query) + + from_db = FALSE + return TRUE diff --git a/code/modules/client/preference/link_processing.dm b/code/modules/client/preference/link_processing.dm new file mode 100644 index 00000000000..fe4f9574128 --- /dev/null +++ b/code/modules/client/preference/link_processing.dm @@ -0,0 +1,1034 @@ +/datum/preferences/proc/process_link(mob/user, list/href_list) + if(!user) + return + + var/datum/species/S = GLOB.all_species[active_character.species] + if(href_list["preference"] == "job") + switch(href_list["task"]) + if("close") + user << browse(null, "window=mob_occupation") + ShowChoices(user) + if("reset") + active_character.ResetJobs() + active_character.SetChoices(user) + if("learnaboutselection") + if(GLOB.configuration.url.wiki_url) + if(alert("Would you like to open the Job selection info in your browser?", "Open Job Selection", "Yes", "No") == "Yes") + user << link("[GLOB.configuration.url.wiki_url]/index.php/Job_Selection_and_Assignment") + else + to_chat(user, "The Wiki URL is not set in the server configuration.") + if("random") + if(active_character.alternate_option == GET_RANDOM_JOB || active_character.alternate_option == BE_ASSISTANT) + active_character.alternate_option += 1 + else if(active_character.alternate_option == RETURN_TO_LOBBY) + active_character.alternate_option = 0 + else + return 0 + active_character.SetChoices(user) + if("alt_title") + var/datum/job/job = locate(href_list["job"]) + if(job) + var/choices = list(job.title) + job.alt_titles + var/choice = input("Pick a title for [job.title].", "Character Generation", active_character.GetPlayerAltTitle(job)) as anything in choices | null + if(choice) + active_character.SetPlayerAltTitle(job, choice) + active_character.SetChoices(user) + if("input") + SetJob(user, href_list["text"]) + if("setJobLevel") + UpdateJobPreference(user, href_list["text"], text2num(href_list["level"])) + else + active_character.SetChoices(user) + return 1 + else if(href_list["preference"] == "disabilities") + switch(href_list["task"]) + if("close") + user << browse(null, "window=disabil") + ShowChoices(user) + if("reset") + active_character.disabilities = 0 + active_character.SetDisabilities(user) + if("input") + var/dflag=text2num(href_list["disability"]) + if(dflag >= 0) // Toggle it. + active_character.disabilities ^= text2num(href_list["disability"]) //MAGIC + active_character.SetDisabilities(user) + else + active_character.SetDisabilities(user) + return 1 + + else if(href_list["preference"] == "records") + if(text2num(href_list["record"]) >= 1) + active_character.SetRecords(user) + return + else + user << browse(null, "window=records") + + if(href_list["task"] == "med_record") + var/medmsg = input(usr,"Set your medical notes here.","Medical Records",html_decode(active_character.med_record)) as message + + if(medmsg != null) + medmsg = copytext(medmsg, 1, MAX_PAPER_MESSAGE_LEN) + medmsg = html_encode(medmsg) + + active_character.med_record = medmsg + active_character.SetRecords(user) + + if(href_list["task"] == "sec_record") + var/secmsg = input(usr,"Set your security notes here.","Security Records",html_decode(active_character.sec_record)) as message + + if(secmsg != null) + secmsg = copytext(secmsg, 1, MAX_PAPER_MESSAGE_LEN) + secmsg = html_encode(secmsg) + + active_character.sec_record = secmsg + active_character.SetRecords(user) + + if(href_list["task"] == "gen_record") + var/genmsg = input(usr,"Set your employment notes here.","Employment Records",html_decode(active_character.gen_record)) as message + + if(genmsg != null) + genmsg = copytext(genmsg, 1, MAX_PAPER_MESSAGE_LEN) + genmsg = html_encode(genmsg) + + active_character.gen_record = genmsg + active_character.SetRecords(user) + + if(href_list["preference"] == "gear") + if(href_list["toggle_gear"]) + var/datum/gear/TG = GLOB.gear_datums[text2path(href_list["toggle_gear"])] + if(TG && (TG.type in active_character.loadout_gear)) + active_character.loadout_gear -= TG.type + else + if(TG.donator_tier && user.client.donator_level < TG.donator_tier) + to_chat(user, "That gear is only available at a higher donation tier than you are on.") + return + build_loadout(TG) + + else if(href_list["gear"] && href_list["tweak"]) // NYI + var/datum/gear/gear = GLOB.gear_datums[text2path(href_list["gear"])] + var/datum/gear_tweak/tweak = locate(href_list["tweak"]) + if(!tweak || !istype(gear) || !(tweak in gear.gear_tweaks)) + return + var/metadata = tweak.get_metadata(user, active_character.get_tweak_metadata(gear, tweak)) + if(!metadata) + return + active_character.set_tweak_metadata(gear, tweak, metadata) + else if(href_list["select_category"]) + gear_tab = href_list["select_category"] + else if(href_list["clear_loadout"]) + active_character.loadout_gear.Cut() + + ShowChoices(user) + return + + switch(href_list["task"]) + if("random") + var/datum/robolimb/robohead + if(S.bodyflags & ALL_RPARTS) + var/head_model = "[!active_character.rlimb_data["head"] ? "Morpheus Cyberkinetics" : active_character.rlimb_data["head"]]" + robohead = GLOB.all_robolimbs[head_model] + switch(href_list["preference"]) + if("name") + active_character.real_name = random_name(active_character.gender, active_character.species) + if(isnewplayer(user)) + var/mob/new_player/N = user + N.new_player_panel_proc() + if("age") + active_character.age = rand(AGE_MIN, AGE_MAX) + if("hair") + if(active_character.species in list("Human", "Unathi", "Tajaran", "Skrell", "Machine", "Wryn", "Vulpkanin", "Vox")) + active_character.h_colour = rand_hex_color() + if("secondary_hair") + if(active_character.species in list("Human", "Unathi", "Tajaran", "Skrell", "Machine", "Wryn", "Vulpkanin", "Vox")) + active_character.h_sec_colour = rand_hex_color() + if("h_style") + active_character.h_style = random_hair_style(active_character.gender, active_character.species, robohead) + if("facial") + if(active_character.species in list("Human", "Unathi", "Tajaran", "Skrell", "Machine", "Wryn", "Vulpkanin", "Vox")) + active_character.f_colour = rand_hex_color() + if("secondary_facial") + if(active_character.species in list("Human", "Unathi", "Tajaran", "Skrell", "Machine", "Wryn", "Vulpkanin", "Vox")) + active_character.f_sec_colour = rand_hex_color() + if("f_style") + active_character.f_style = random_facial_hair_style(active_character.gender, active_character.species, robohead) + if("headaccessory") + if(S.bodyflags & HAS_HEAD_ACCESSORY) //Species that have head accessories. + active_character.hacc_colour = rand_hex_color() + if("ha_style") + if(S.bodyflags & HAS_HEAD_ACCESSORY) //Species that have head accessories. + active_character.ha_style = random_head_accessory(active_character.species) + if("m_style_head") + if(S.bodyflags & HAS_HEAD_MARKINGS) //Species with head markings. + active_character.m_styles["head"] = random_marking_style("head", active_character.species, robohead, null, active_character.alt_head) + if("m_head_colour") + if(S.bodyflags & HAS_HEAD_MARKINGS) //Species with head markings. + active_character.m_colours["head"] = rand_hex_color() + if("m_style_body") + if(S.bodyflags & HAS_BODY_MARKINGS) //Species with body markings. + active_character.m_styles["body"] = random_marking_style("body", active_character.species) + if("m_body_colour") + if(S.bodyflags & HAS_BODY_MARKINGS) //Species with body markings. + active_character.m_colours["body"] = rand_hex_color() + if("m_style_tail") + if(S.bodyflags & HAS_TAIL_MARKINGS) //Species with tail markings. + active_character.m_styles["tail"] = random_marking_style("tail", active_character.species, null, active_character.body_accessory) + if("m_tail_colour") + if(S.bodyflags & HAS_TAIL_MARKINGS) //Species with tail markings. + active_character.m_colours["tail"] = rand_hex_color() + if("underwear") + active_character.underwear = random_underwear(active_character.gender, active_character.species) + ShowChoices(user) + if("undershirt") + active_character.undershirt = random_undershirt(active_character.gender, active_character.species) + ShowChoices(user) + if("socks") + active_character.socks = random_socks(active_character.gender, active_character.species) + ShowChoices(user) + if("eyes") + active_character.e_colour = rand_hex_color() + if("s_tone") + if(S.bodyflags & (HAS_SKIN_TONE|HAS_ICON_SKIN_TONE)) + active_character.s_tone = random_skin_tone() + if("s_color") + if(S.bodyflags & HAS_SKIN_COLOR) + active_character.s_colour = rand_hex_color() + if("bag") + active_character.backbag = pick(GLOB.backbaglist) + if("all") + active_character.randomise() + if("input") + switch(href_list["preference"]) + if("name") + var/raw_name = clean_input("Choose your character's name:", "Character Preference", , user) + if(!isnull(raw_name)) // Check to ensure that the user entered text (rather than cancel.) + var/new_name = reject_bad_name(raw_name, 1) + if(new_name) + active_character.real_name = new_name + if(isnewplayer(user)) + var/mob/new_player/N = user + N.new_player_panel_proc() + else + to_chat(user, "Invalid name. Your name should be at least 2 and at most [MAX_NAME_LEN] characters long. It may only contain the characters A-Z, a-z, -, ' and .") + + if("age") + var/new_age = input(user, "Choose your character's age:\n([AGE_MIN]-[AGE_MAX])", "Character Preference") as num|null + if(new_age) + active_character.age = max(min(round(text2num(new_age)), AGE_MAX),AGE_MIN) + if("species") + var/list/new_species = list("Human", "Tajaran", "Skrell", "Unathi", "Diona", "Vulpkanin") + var/prev_species = active_character.species + + for(var/_species in GLOB.whitelisted_species) + if(is_alien_whitelisted(user, _species)) + new_species += _species + + active_character.species = input("Please select a species", "Character Generation", null) in sortTim(new_species, /proc/cmp_text_asc) + var/datum/species/NS = GLOB.all_species[active_character.species] + if(!istype(NS)) //The species was invalid. Notify the user and fail out. + active_character.species = prev_species + to_chat(user, "Invalid species, please pick something else.") + return + if(prev_species != active_character.species) + if(NS.has_gender && active_character.gender == PLURAL) + active_character.gender = pick(MALE,FEMALE) + var/datum/robolimb/robohead + if(NS.bodyflags & ALL_RPARTS) + var/head_model = "[!active_character.rlimb_data["head"] ? "Morpheus Cyberkinetics" : active_character.rlimb_data["head"]]" + robohead = GLOB.all_robolimbs[head_model] + //grab one of the valid hair styles for the newly chosen species + active_character.h_style = random_hair_style(active_character.gender, active_character.species, robohead) + + //grab one of the valid facial hair styles for the newly chosen species + active_character.f_style = random_facial_hair_style(active_character.gender, active_character.species, robohead) + + if(NS.bodyflags & HAS_HEAD_ACCESSORY) //Species that have head accessories. + active_character.ha_style = random_head_accessory(active_character.species) + else + active_character.ha_style = "None" // No Vulp ears on Unathi + active_character.hacc_colour = rand_hex_color() + + if(NS.bodyflags & HAS_HEAD_MARKINGS) //Species with head markings. + active_character.m_styles["head"] = random_marking_style("head", active_character.species, robohead, null, active_character.alt_head) + else + active_character.m_styles["head"] = "None" + active_character.m_colours["head"] = "#000000" + + if(NS.bodyflags & HAS_BODY_MARKINGS) //Species with body markings/tattoos. + active_character.m_styles["body"] = random_marking_style("body", active_character.species) + else + active_character.m_styles["body"] = "None" + active_character.m_colours["body"] = "#000000" + + if(NS.bodyflags & HAS_TAIL_MARKINGS) //Species with tail markings. + active_character.m_styles["tail"] = random_marking_style("tail", active_character.species, null, active_character.body_accessory) + else + active_character.m_styles["tail"] = "None" + active_character.m_colours["tail"] = "#000000" + + // Don't wear another species' underwear! + var/datum/sprite_accessory/SA = GLOB.underwear_list[active_character.underwear] + if(!SA || !(active_character.species in SA.species_allowed)) + active_character.underwear = random_underwear(active_character.gender, active_character.species) + + SA = GLOB.undershirt_list[active_character.undershirt] + if(!SA || !(active_character.species in SA.species_allowed)) + active_character.undershirt = random_undershirt(active_character.gender, active_character.species) + + SA = GLOB.socks_list[active_character.socks] + if(!SA || !(active_character.species in SA.species_allowed)) + active_character.socks = random_socks(active_character.gender, active_character.species) + + //reset skin tone and colour + if(NS.bodyflags & (HAS_SKIN_TONE|HAS_ICON_SKIN_TONE)) + random_skin_tone(active_character.species) + else + active_character.s_tone = 0 + + if(!(NS.bodyflags & HAS_SKIN_COLOR)) + active_character.s_colour = "#000000" + + active_character.alt_head = "None" //No alt heads on species that don't have them. + active_character.speciesprefs = 0 //My Vox tank shouldn't change how my future Grey talks. + + active_character.body_accessory = null //no vulptail on humans damnit + + //Reset prosthetics. + active_character.organ_data = list() + active_character.rlimb_data = list() + + if(!(NS.autohiss_basic_map)) + active_character.autohiss_mode = AUTOHISS_OFF + if("speciesprefs") + active_character.speciesprefs = !active_character.speciesprefs //Starts 0, so if someone clicks the button up top there, this won't be 0 anymore. If they click it again, it'll go back to 0. + if("language") +// var/languages_available + var/list/new_languages = list("None") + for(var/L in GLOB.all_languages) + var/datum/language/lang = GLOB.all_languages[L] + if(!(lang.flags & RESTRICTED)) + new_languages += lang.name + + active_character.language = input("Please select a secondary language", "Character Generation", null) in sortTim(new_languages, /proc/cmp_text_asc) + + if("autohiss_mode") + if(S.autohiss_basic_map) + var/list/autohiss_choice = list("Off" = AUTOHISS_OFF, "Basic" = AUTOHISS_BASIC, "Full" = AUTOHISS_FULL) + var/new_autohiss_pref = input(user, "Choose your character's auto-accent level:", "Character Preference") as null|anything in autohiss_choice + if(new_autohiss_pref) + active_character.autohiss_mode = autohiss_choice[new_autohiss_pref] + + if("metadata") + var/new_metadata = input(user, "Enter any information you'd like others to see, such as Roleplay-preferences:", "Game Preference" , active_character.metadata) as message|null + if(new_metadata) + active_character.metadata = sanitize(copytext(new_metadata,1,MAX_MESSAGE_LEN)) + + if("b_type") + var/new_b_type = input(user, "Choose your character's blood-type:", "Character Preference") as null|anything in list( "A+", "A-", "B+", "B-", "AB+", "AB-", "O+", "O-" ) + if(new_b_type) + active_character.b_type = new_b_type + + if("hair") + if(active_character.species in list("Human", "Unathi", "Tajaran", "Skrell", "Machine", "Vulpkanin", "Vox")) //Species that have hair. (No HAS_HAIR flag) + var/input = "Choose your character's hair colour:" + var/new_hair = input(user, input, "Character Preference", active_character.h_colour) as color|null + if(new_hair) + active_character.h_colour = new_hair + + if("secondary_hair") + if(active_character.species in list("Human", "Unathi", "Tajaran", "Skrell", "Machine", "Vulpkanin", "Vox")) + var/datum/sprite_accessory/hair_style = GLOB.hair_styles_public_list[active_character.h_style] + if(hair_style.secondary_theme && !hair_style.no_sec_colour) + var/new_hair = input(user, "Choose your character's secondary hair colour:", "Character Preference", active_character.h_sec_colour) as color|null + if(new_hair) + active_character.h_sec_colour = new_hair + + if("h_style") + var/list/valid_hairstyles = list() + for(var/hairstyle in GLOB.hair_styles_public_list) + var/datum/sprite_accessory/SA = GLOB.hair_styles_public_list[hairstyle] + + if(hairstyle == "Bald") //Just in case. + valid_hairstyles += hairstyle + continue + if(S.bodyflags & ALL_RPARTS) //Species that can use prosthetic heads. + var/head_model + if(!active_character.rlimb_data["head"]) //Handle situations where the head is default. + head_model = "Morpheus Cyberkinetics" + else + head_model = active_character.rlimb_data["head"] + var/datum/robolimb/robohead = GLOB.all_robolimbs[head_model] + if((active_character.species in SA.species_allowed) && robohead.is_monitor && ((SA.models_allowed && (robohead.company in SA.models_allowed)) || !SA.models_allowed)) //If this is a hair style native to the user's species, check to see if they have a head with an ipc-style screen and that the head's company is in the screen style's allowed models list. + valid_hairstyles += hairstyle //Give them their hairstyles if they do. + else + if(!robohead.is_monitor && ("Human" in SA.species_allowed)) /*If the hairstyle is not native to the user's species and they're using a head with an ipc-style screen, don't let them access it. + But if the user has a robotic humanoid head and the hairstyle can fit humans, let them use it as a wig. */ + valid_hairstyles += hairstyle + else //If the user is not a species who can have robotic heads, use the default handling. + if(active_character.species in SA.species_allowed) //If the user's head is of a species the hairstyle allows, add it to the list. + valid_hairstyles += hairstyle + + sortTim(valid_hairstyles, /proc/cmp_text_asc) //this alphabetizes the list + var/new_h_style = input(user, "Choose your character's hair style:", "Character Preference") as null|anything in valid_hairstyles + if(new_h_style) + active_character.h_style = new_h_style + + if("headaccessory") + if(S.bodyflags & HAS_HEAD_ACCESSORY) //Species with head accessories. + var/input = "Choose the colour of your your character's head accessory:" + var/new_head_accessory = input(user, input, "Character Preference", active_character.hacc_colour) as color|null + if(new_head_accessory) + active_character.hacc_colour = new_head_accessory + + if("ha_style") + if(S.bodyflags & HAS_HEAD_ACCESSORY) //Species with head accessories. + var/list/valid_head_accessory_styles = list() + for(var/head_accessory_style in GLOB.head_accessory_styles_list) + var/datum/sprite_accessory/H = GLOB.head_accessory_styles_list[head_accessory_style] + if(!(active_character.species in H.species_allowed)) + continue + + valid_head_accessory_styles += head_accessory_style + + sortTim(valid_head_accessory_styles, /proc/cmp_text_asc) + var/new_head_accessory_style = input(user, "Choose the style of your character's head accessory:", "Character Preference") as null|anything in valid_head_accessory_styles + if(new_head_accessory_style) + active_character.ha_style = new_head_accessory_style + + if("alt_head") + if(active_character.organ_data["head"] == "cyborg") + return + if(S.bodyflags & HAS_ALT_HEADS) //Species with alt heads. + var/list/valid_alt_heads = list() + valid_alt_heads["None"] = GLOB.alt_heads_list["None"] //The only null entry should be the "None" option + for(var/alternate_head in GLOB.alt_heads_list) + var/datum/sprite_accessory/alt_heads/head = GLOB.alt_heads_list[alternate_head] + if(!(active_character.species in head.species_allowed)) + continue + + valid_alt_heads += alternate_head + + var/new_alt_head = input(user, "Choose your character's alternate head style:", "Character Preference") as null|anything in valid_alt_heads + if(new_alt_head) + active_character.alt_head = new_alt_head + if(active_character.m_styles["head"]) + var/head_marking = active_character.m_styles["head"] + var/datum/sprite_accessory/body_markings/head/head_marking_style = GLOB.marking_styles_list[head_marking] + if(!head_marking_style.heads_allowed || (!("All" in head_marking_style.heads_allowed) && !(active_character.alt_head in head_marking_style.heads_allowed))) + active_character.m_styles["head"] = "None" + + if("m_style_head") + if(S.bodyflags & HAS_HEAD_MARKINGS) //Species with head markings. + var/list/valid_markings = list() + valid_markings["None"] = GLOB.marking_styles_list["None"] + for(var/markingstyle in GLOB.marking_styles_list) + var/datum/sprite_accessory/body_markings/head/M = GLOB.marking_styles_list[markingstyle] + if(!(active_character.species in M.species_allowed)) + continue + if(M.marking_location != "head") + continue + if(active_character.alt_head && active_character.alt_head != "None") + if(!("All" in M.heads_allowed) && !(active_character.alt_head in M.heads_allowed)) + continue + else + if(M.heads_allowed && !("All" in M.heads_allowed)) + continue + + if(S.bodyflags & ALL_RPARTS) //Species that can use prosthetic heads. + var/head_model + if(!active_character.rlimb_data["head"]) //Handle situations where the head is default. + head_model = "Morpheus Cyberkinetics" + else + head_model = active_character.rlimb_data["head"] + var/datum/robolimb/robohead = GLOB.all_robolimbs[head_model] + if(robohead.is_monitor && M.name != "None") //If the character can have prosthetic heads and they have the default Morpheus head (or another monitor-head), no optic markings. + continue + else if(!robohead.is_monitor && M.name != "None") //Otherwise, if they DON'T have the default head and the head's not a monitor but the head's not in the style's list of allowed models, skip. + if(!(robohead.company in M.models_allowed)) + continue + + valid_markings += markingstyle + sortTim(valid_markings, /proc/cmp_text_asc) + var/new_marking_style = input(user, "Choose the style of your character's head markings:", "Character Preference", active_character.m_styles["head"]) as null|anything in valid_markings + if(new_marking_style) + active_character.m_styles["head"] = new_marking_style + + if("m_head_colour") + if(S.bodyflags & HAS_HEAD_MARKINGS) //Species with head markings. + var/input = "Choose the colour of your your character's head markings:" + var/new_markings = input(user, input, "Character Preference", active_character.m_colours["head"]) as color|null + if(new_markings) + active_character.m_colours["head"] = new_markings + + if("m_style_body") + if(S.bodyflags & HAS_BODY_MARKINGS) //Species with body markings/tattoos. + var/list/valid_markings = list() + valid_markings["None"] = GLOB.marking_styles_list["None"] + for(var/markingstyle in GLOB.marking_styles_list) + var/datum/sprite_accessory/M = GLOB.marking_styles_list[markingstyle] + if(!(active_character.species in M.species_allowed)) + continue + if(M.marking_location != "body") + continue + + valid_markings += markingstyle + sortTim(valid_markings, /proc/cmp_text_asc) + var/new_marking_style = input(user, "Choose the style of your character's body markings:", "Character Preference", active_character.m_styles["body"]) as null|anything in valid_markings + if(new_marking_style) + active_character.m_styles["body"] = new_marking_style + + if("m_body_colour") + if(S.bodyflags & HAS_BODY_MARKINGS) //Species with body markings/tattoos. + var/input = "Choose the colour of your your character's body markings:" + var/new_markings = input(user, input, "Character Preference", active_character.m_colours["body"]) as color|null + if(new_markings) + active_character.m_colours["body"] = new_markings + + if("m_style_tail") + if(S.bodyflags & HAS_TAIL_MARKINGS) //Species with tail markings. + var/list/valid_markings = list() + valid_markings["None"] = GLOB.marking_styles_list["None"] + for(var/markingstyle in GLOB.marking_styles_list) + var/datum/sprite_accessory/body_markings/tail/M = GLOB.marking_styles_list[markingstyle] + if(M.marking_location != "tail") + continue + if(!(active_character.species in M.species_allowed)) + continue + if(!active_character.body_accessory) + if(M.tails_allowed) + continue + else + if(!M.tails_allowed || !(active_character.body_accessory in M.tails_allowed)) + continue + + valid_markings += markingstyle + sortTim(valid_markings, /proc/cmp_text_asc) + var/new_marking_style = input(user, "Choose the style of your character's tail markings:", "Character Preference", active_character.m_styles["tail"]) as null|anything in valid_markings + if(new_marking_style) + active_character.m_styles["tail"] = new_marking_style + + if("m_tail_colour") + if(S.bodyflags & HAS_TAIL_MARKINGS) //Species with tail markings. + var/input = "Choose the colour of your your character's tail markings:" + var/new_markings = input(user, input, "Character Preference", active_character.m_colours["tail"]) as color|null + if(new_markings) + active_character.m_colours["tail"] = new_markings + + if("body_accessory") + var/list/possible_body_accessories = list() + if(check_rights(R_ADMIN, 1, user)) + possible_body_accessories = GLOB.body_accessory_by_name.Copy() + else + for(var/B in GLOB.body_accessory_by_name) + var/datum/body_accessory/accessory = GLOB.body_accessory_by_name[B] + if(!istype(accessory)) + possible_body_accessories += "None" //the only null entry should be the "None" option + continue + if(active_character.species in accessory.allowed_species) + possible_body_accessories += B + sortTim(possible_body_accessories, /proc/cmp_text_asc) + var/new_body_accessory = input(user, "Choose your body accessory:", "Character Preference") as null|anything in possible_body_accessories + if(new_body_accessory) + active_character.m_styles["tail"] = "None" + active_character.body_accessory = (new_body_accessory == "None") ? null : new_body_accessory + + if("facial") + if(active_character.species in list("Human", "Unathi", "Tajaran", "Skrell", "Machine", "Vulpkanin", "Vox")) //Species that have facial hair. (No HAS_HAIR_FACIAL flag) + var/new_facial = input(user, "Choose your character's facial-hair colour:", "Character Preference", active_character.f_colour) as color|null + if(new_facial) + active_character.f_colour = new_facial + + if("secondary_facial") + if(active_character.species in list("Human", "Unathi", "Tajaran", "Skrell", "Machine", "Vulpkanin", "Vox")) + var/datum/sprite_accessory/facial_hair_style = GLOB.facial_hair_styles_list[active_character.f_style] + if(facial_hair_style.secondary_theme && !facial_hair_style.no_sec_colour) + var/new_facial = input(user, "Choose your character's secondary facial-hair colour:", "Character Preference", active_character.f_sec_colour) as color|null + if(new_facial) + active_character.f_sec_colour = new_facial + + if("f_style") + var/list/valid_facial_hairstyles = list() + for(var/facialhairstyle in GLOB.facial_hair_styles_list) + var/datum/sprite_accessory/SA = GLOB.facial_hair_styles_list[facialhairstyle] + + if(facialhairstyle == "Shaved") //Just in case. + valid_facial_hairstyles += facialhairstyle + continue + if(active_character.gender == MALE && SA.gender == FEMALE) + continue + if(active_character.gender == FEMALE && SA.gender == MALE) + continue + if(S.bodyflags & ALL_RPARTS) //Species that can use prosthetic heads. + var/head_model + if(!active_character.rlimb_data["head"]) //Handle situations where the head is default. + head_model = "Morpheus Cyberkinetics" + else + head_model = active_character.rlimb_data["head"] + var/datum/robolimb/robohead = GLOB.all_robolimbs[head_model] + if((active_character.species in SA.species_allowed) && robohead.is_monitor && ((SA.models_allowed && (robohead.company in SA.models_allowed)) || !SA.models_allowed)) //If this is a facial hair style native to the user's species, check to see if they have a head with an ipc-style screen and that the head's company is in the screen style's allowed models list. + valid_facial_hairstyles += facialhairstyle //Give them their facial hairstyles if they do. + else + if(!robohead.is_monitor && ("Human" in SA.species_allowed)) /*If the facial hairstyle is not native to the user's species and they're using a head with an ipc-style screen, don't let them access it. + But if the user has a robotic humanoid head and the facial hairstyle can fit humans, let them use it as a wig. */ + valid_facial_hairstyles += facialhairstyle + else //If the user is not a species who can have robotic heads, use the default handling. + if(active_character.species in SA.species_allowed) //If the user's head is of a species the facial hair style allows, add it to the list. + valid_facial_hairstyles += facialhairstyle + sortTim(valid_facial_hairstyles, /proc/cmp_text_asc) + var/new_f_style = input(user, "Choose your character's facial-hair style:", "Character Preference") as null|anything in valid_facial_hairstyles + if(new_f_style) + active_character.f_style = new_f_style + + if("underwear") + var/list/valid_underwear = list() + for(var/underwear in GLOB.underwear_list) + var/datum/sprite_accessory/SA = GLOB.underwear_list[underwear] + if(active_character.gender == MALE && SA.gender == FEMALE) + continue + if(active_character.gender == FEMALE && SA.gender == MALE) + continue + if(!(active_character.species in SA.species_allowed)) + continue + valid_underwear[underwear] = GLOB.underwear_list[underwear] + sortTim(valid_underwear, /proc/cmp_text_asc) + var/new_underwear = input(user, "Choose your character's underwear:", "Character Preference") as null|anything in valid_underwear + ShowChoices(user) + if(new_underwear) + active_character.underwear = new_underwear + if("undershirt") + var/list/valid_undershirts = list() + for(var/undershirt in GLOB.undershirt_list) + var/datum/sprite_accessory/SA = GLOB.undershirt_list[undershirt] + if(active_character.gender == MALE && SA.gender == FEMALE) + continue + if(active_character.gender == FEMALE && SA.gender == MALE) + continue + if(!(active_character.species in SA.species_allowed)) + continue + valid_undershirts[undershirt] = GLOB.undershirt_list[undershirt] + sortTim(valid_undershirts, /proc/cmp_text_asc) + var/new_undershirt = input(user, "Choose your character's undershirt:", "Character Preference") as null|anything in valid_undershirts + ShowChoices(user) + if(new_undershirt) + active_character.undershirt = new_undershirt + + if("socks") + var/list/valid_sockstyles = list() + for(var/sockstyle in GLOB.socks_list) + var/datum/sprite_accessory/SA = GLOB.socks_list[sockstyle] + if(active_character.gender == MALE && SA.gender == FEMALE) + continue + if(active_character.gender == FEMALE && SA.gender == MALE) + continue + if(!(active_character.species in SA.species_allowed)) + continue + valid_sockstyles[sockstyle] = GLOB.socks_list[sockstyle] + sortTim(valid_sockstyles, /proc/cmp_text_asc) + var/new_socks = input(user, "Choose your character's socks:", "Character Preference") as null|anything in valid_sockstyles + ShowChoices(user) + if(new_socks) + active_character.socks = new_socks + + if("eyes") + var/new_eyes = input(user, "Choose your character's eye colour:", "Character Preference", active_character.e_colour) as color|null + if(new_eyes) + active_character.e_colour = new_eyes + + if("s_tone") + if(S.bodyflags & HAS_SKIN_TONE) + var/new_s_tone = input(user, "Choose your character's skin-tone:\n(Light 1 - 220 Dark)", "Character Preference") as num|null + if(new_s_tone) + active_character.s_tone = 35 - max(min(round(new_s_tone), 220), 1) + else if(S.bodyflags & HAS_ICON_SKIN_TONE) + var/const/MAX_LINE_ENTRIES = 4 + var/prompt = "Choose your character's skin tone: 1-[S.icon_skin_tones.len]\n(" + for(var/i = 1 to S.icon_skin_tones.len) + if(i > MAX_LINE_ENTRIES && !((i - 1) % MAX_LINE_ENTRIES)) + prompt += "\n" + prompt += "[i] = [S.icon_skin_tones[i]]" + if(i != S.icon_skin_tones.len) + prompt += ", " + prompt += ")" + var/skin_c = input(user, prompt, "Character Preference") as num|null + if(isnum(skin_c)) + active_character.s_tone = max(min(round(skin_c), S.icon_skin_tones.len), 1) + + if("skin") + if((S.bodyflags & HAS_SKIN_COLOR) || GLOB.body_accessory_by_species[active_character.species] || check_rights(R_ADMIN, 0, user)) + var/new_skin = input(user, "Choose your character's skin colour: ", "Character Preference", active_character.s_colour) as color|null + if(new_skin) + active_character.s_colour = new_skin + + if("ooccolor") + var/new_ooccolor = input(user, "Choose your OOC colour:", "Game Preference", ooccolor) as color|null + if(new_ooccolor) + ooccolor = new_ooccolor + + if("bag") + var/new_backbag = input(user, "Choose your character's style of bag:", "Character Preference") as null|anything in GLOB.backbaglist + if(new_backbag) + active_character.backbag = new_backbag + + if("nt_relation") + var/new_relation = input(user, "Choose your relation to NT. Note that this represents what others can find out about your character by researching your background, not what your character actually thinks.", "Character Preference") as null|anything in list("Loyal", "Supportive", "Neutral", "Skeptical", "Opposed") + if(new_relation) + active_character.nanotrasen_relation = new_relation + + if("flavor_text") + var/msg = input(usr,"Set the flavor text in your 'examine' verb. The flavor text should be a physical descriptor of your character at a glance. SFW Drawn Art of your character is acceptable.","Flavor Text",html_decode(active_character.flavor_text)) as message + + if(msg != null) + msg = copytext(msg, 1, MAX_MESSAGE_LEN) + msg = html_encode(msg) + + active_character.flavor_text = msg + + if("limbs") + var/valid_limbs = list("Left Leg", "Right Leg", "Left Arm", "Right Arm", "Left Foot", "Right Foot", "Left Hand", "Right Hand") + if(S.bodyflags & ALL_RPARTS) + valid_limbs = list("Torso", "Lower Body", "Head", "Left Leg", "Right Leg", "Left Arm", "Right Arm", "Left Foot", "Right Foot", "Left Hand", "Right Hand") + var/limb_name = input(user, "Which limb do you want to change?") as null|anything in valid_limbs + if(!limb_name) return + + var/limb = null + var/second_limb = null // if you try to change the arm, the hand should also change + var/third_limb = null // if you try to unchange the hand, the arm should also change + var/valid_limb_states = list("Normal", "Amputated", "Prosthesis") + var/no_amputate = 0 + + switch(limb_name) + if("Torso") + limb = "chest" + second_limb = "groin" + no_amputate = 1 + if("Lower Body") + limb = "groin" + no_amputate = 1 + if("Head") + limb = "head" + no_amputate = 1 + if("Left Leg") + limb = "l_leg" + second_limb = "l_foot" + if("Right Leg") + limb = "r_leg" + second_limb = "r_foot" + if("Left Arm") + limb = "l_arm" + second_limb = "l_hand" + if("Right Arm") + limb = "r_arm" + second_limb = "r_hand" + if("Left Foot") + limb = "l_foot" + if(!(S.bodyflags & ALL_RPARTS)) + third_limb = "l_leg" + if("Right Foot") + limb = "r_foot" + if(!(S.bodyflags & ALL_RPARTS)) + third_limb = "r_leg" + if("Left Hand") + limb = "l_hand" + if(!(S.bodyflags & ALL_RPARTS)) + third_limb = "l_arm" + if("Right Hand") + limb = "r_hand" + if(!(S.bodyflags & ALL_RPARTS)) + third_limb = "r_arm" + + var/new_state = input(user, "What state do you wish the limb to be in?") as null|anything in valid_limb_states + if(!new_state) return + + switch(new_state) + if("Normal") + if(limb == "head") + active_character.m_styles["head"] = "None" + active_character.h_style = GLOB.hair_styles_public_list["Bald"] + active_character.f_style = GLOB.facial_hair_styles_list["Shaved"] + active_character.organ_data[limb] = null + active_character.rlimb_data[limb] = null + if(third_limb) + active_character.organ_data[third_limb] = null + active_character.rlimb_data[third_limb] = null + if("Amputated") + if(!no_amputate) + active_character.organ_data[limb] = "amputated" + active_character.rlimb_data[limb] = null + if(second_limb) + active_character.organ_data[second_limb] = "amputated" + active_character.rlimb_data[second_limb] = null + if("Prosthesis") + var/choice + var/subchoice + var/datum/robolimb/R = new() + var/in_model + var/robolimb_companies = list() + for(var/limb_type in typesof(/datum/robolimb)) //This loop populates a list of companies that offer the limb the user selected previously as one of their cybernetic products. + R = new limb_type() + if(!R.unavailable_at_chargen && (limb in R.parts) && R.has_subtypes) //Ensures users can only choose companies that offer the parts they want, that singular models get added to the list as well companies that offer more than one model, and... + robolimb_companies[R.company] = R //List only main brands that have the parts we're looking for. + R = new() //Re-initialize R. + + choice = input(user, "Which manufacturer do you wish to use for this limb?") as null|anything in robolimb_companies //Choose from a list of companies that offer the part the user wants. + if(!choice) + return + R.company = choice + R = GLOB.all_robolimbs[R.company] + if(R.has_subtypes == 1) //If the company the user selected provides more than just one base model, lets handle it. + var/list/robolimb_models = list() + for(var/limb_type in typesof(R)) //Handling the different models of parts that manufacturers can provide. + var/datum/robolimb/L = new limb_type() + if(limb in L.parts) //Make sure that only models that provide the parts the user needs populate the list. + robolimb_models[L.company] = L + if(robolimb_models.len == 1) //If there's only one model available in the list, autoselect it to avoid having to bother the user with a dialog that provides only one option. + subchoice = L.company //If there ends up being more than one model populating the list, subchoice will be overwritten later anyway, so this isn't a problem. + if(second_limb in L.parts) //If the child limb of the limb the user selected is also present in the model's parts list, state it's been found so the second limb can be set later. + in_model = 1 + if(robolimb_models.len > 1) //If there's more than one model in the list that can provide the part the user wants, let them choose. + subchoice = input(user, "Which model of [choice] [limb_name] do you wish to use?") as null|anything in robolimb_models + if(subchoice) + choice = subchoice + if(limb in list("head", "chest", "groin")) + if(!(S.bodyflags & ALL_RPARTS)) + return + if(limb == "head") + active_character.ha_style = "None" + active_character.alt_head = null + active_character.h_style = GLOB.hair_styles_public_list["Bald"] + active_character.f_style = GLOB.facial_hair_styles_list["Shaved"] + active_character.m_styles["head"] = "None" + active_character.rlimb_data[limb] = choice + active_character.organ_data[limb] = "cyborg" + if(second_limb) + if(subchoice) + if(in_model) + active_character.rlimb_data[second_limb] = choice + active_character.organ_data[second_limb] = "cyborg" + else + active_character.rlimb_data[second_limb] = choice + active_character.organ_data[second_limb] = "cyborg" + if("organs") + var/organ_name = input(user, "Which internal function do you want to change?") as null|anything in list("Eyes", "Ears", "Heart", "Lungs", "Liver", "Kidneys") + if(!organ_name) + return + + var/organ = null + switch(organ_name) + if("Eyes") + organ = "eyes" + if("Ears") + organ = "ears" + if("Heart") + organ = "heart" + if("Lungs") + organ = "lungs" + if("Liver") + organ = "liver" + if("Kidneys") + organ = "kidneys" + + var/new_state = input(user, "What state do you wish the organ to be in?") as null|anything in list("Normal", "Cybernetic") + if(!new_state) return + + switch(new_state) + if("Normal") + active_character.organ_data[organ] = null + if("Cybernetic") + active_character.organ_data[organ] = "cybernetic" + + if("clientfps") + var/version_message + if(user.client && user.client.byond_version < 511) + version_message = "\nYou need to be using byond version 511 or later to take advantage of this feature, your version of [user.client.byond_version] is too low" + if(world.byond_version < 511) + version_message += "\nThis server does not currently support client side fps. You can set now for when it does." + var/desiredfps = input(user, "Choose your desired fps.[version_message]\n(0 = synced with server tick rate (currently:[world.fps]))", "Character Preference", clientfps) as null|num + if(!isnull(desiredfps)) + clientfps = desiredfps + if(world.byond_version >= 511 && user.client && user.client.byond_version >= 511) + parent.fps = clientfps + + else + switch(href_list["preference"]) + if("publicity") + if(unlock_content) + toggles ^= PREFTOGGLE_MEMBER_PUBLIC + + if("donor_public") + if(user.client.donator_level > 0) + toggles ^= PREFTOGGLE_DONATOR_PUBLIC + + if("gender") + if(!S.has_gender) + var/newgender = input(user, "Choose Gender:") as null|anything in list("Male", "Female", "Genderless") + switch(newgender) + if("Male") + active_character.gender = MALE + if("Female") + active_character.gender = FEMALE + if("Genderless") + active_character.gender = PLURAL + else + if(active_character.gender == MALE) + active_character.gender = FEMALE + else + active_character.gender = MALE + active_character.underwear = random_underwear(active_character.gender) + + if("hear_adminhelps") + sound ^= SOUND_ADMINHELP + if("ui") + switch(UI_style) + if("Midnight") + UI_style = "Plasmafire" + if("Plasmafire") + UI_style = "Retro" + if("Retro") + UI_style = "Slimecore" + if("Slimecore") + UI_style = "Operative" + if("Operative") + UI_style = "White" + else + UI_style = "Midnight" + + if(ishuman(usr)) //mid-round preference changes, for aesthetics + var/mob/living/carbon/human/H = usr + H.remake_hud() + + if("tgui") + toggles2 ^= PREFTOGGLE_2_FANCYUI + + if("ghost_att_anim") + toggles2 ^= PREFTOGGLE_2_ITEMATTACK + + if("winflash") + toggles2 ^= PREFTOGGLE_2_WINDOWFLASHING + + if("afk_watch") + if(!(toggles2 & PREFTOGGLE_2_AFKWATCH)) + to_chat(user, "You will now get put into cryo dorms after [GLOB.configuration.afk.auto_cryo_minutes] minutes. \ + Then after [GLOB.configuration.afk.auto_despawn_minutes] minutes you will be fully despawned. You will receive a visual and auditory warning before you will be put into cryodorms.") + else + to_chat(user, "Automatic cryoing turned off.") + toggles2 ^= PREFTOGGLE_2_AFKWATCH + + if("UIcolor") + var/UI_style_color_new = input(user, "Choose your UI color, dark colors are not recommended!", UI_style_color) as color|null + if(!UI_style_color_new) return + UI_style_color = UI_style_color_new + + if(ishuman(usr)) //mid-round preference changes, for aesthetics + var/mob/living/carbon/human/H = usr + H.remake_hud() + + if("UIalpha") + var/UI_style_alpha_new = input(user, "Select a new alpha(transparence) parameter for UI, between 50 and 255", UI_style_alpha) as num + if(!UI_style_alpha_new || !(UI_style_alpha_new <= 255 && UI_style_alpha_new >= 50)) + return + UI_style_alpha = UI_style_alpha_new + + if(ishuman(usr)) //mid-round preference changes, for aesthetics + var/mob/living/carbon/human/H = usr + H.remake_hud() + + if("be_special") + var/r = href_list["role"] + if(r in GLOB.special_roles) + be_special ^= r + + if("name") + active_character.be_random_name = !active_character.be_random_name + + if("randomslot") + toggles2 ^= PREFTOGGLE_2_RANDOMSLOT + if(isnewplayer(usr)) + var/mob/new_player/N = usr + N.new_player_panel_proc() + + if("hear_midis") + sound ^= SOUND_MIDI + + if("lobby_music") + sound ^= SOUND_LOBBY + if((sound & SOUND_LOBBY) && user.client) + user.client.playtitlemusic() + else + user.stop_sound_channel(CHANNEL_LOBBYMUSIC) + + if("ghost_ears") + toggles ^= PREFTOGGLE_CHAT_GHOSTEARS + + if("ghost_sight") + toggles ^= PREFTOGGLE_CHAT_GHOSTSIGHT + + if("ghost_radio") + toggles ^= PREFTOGGLE_CHAT_GHOSTRADIO + + if("ghost_pda") + toggles ^= PREFTOGGLE_CHAT_GHOSTPDA + + if("ghost_anonsay") + toggles2 ^= PREFTOGGLE_2_ANONDCHAT + + if("save") + save_preferences(user) + active_character.save(user) + + if("clear") + if(!active_character.from_db || active_character.real_name != input("This will clear the current slot permanently. Please enter the character's full name to confirm.")) + return FALSE + active_character.clear_character_slot(user) + // Gimmie a freshie + var/datum/character_save/CS = new + character_saves[active_character.slot_number] = CS + CS.slot_number = active_character.slot_number // Dont lose this + active_character = CS + + if("open_load_dialog") + if(!IsGuestKey(user.key)) + open_load_dialog(user) + return 1 + + if("close_load_dialog") + close_load_dialog(user) + + if("changeslot") + active_character = character_saves[text2num(href_list["num"])] + default_slot = text2num(href_list["num"]) + close_load_dialog(user) + if(isnewplayer(user)) + var/mob/new_player/N = user + N.new_player_panel_proc() + + if("tab") + if(href_list["tab"]) + current_tab = text2num(href_list["tab"]) + + + if("ambientocclusion") + toggles ^= PREFTOGGLE_AMBIENT_OCCLUSION + if(length(parent?.screen)) + var/obj/screen/plane_master/game_world/PM = locate(/obj/screen/plane_master/game_world) in parent.screen + PM.backdrop(parent.mob) + + if("parallax") + var/parallax_styles = list( + "Off" = PARALLAX_DISABLE, + "Low" = PARALLAX_LOW, + "Medium" = PARALLAX_MED, + "High" = PARALLAX_HIGH, + "Insane" = PARALLAX_INSANE + ) + parallax = parallax_styles[input(user, "Pick a parallax style", "Parallax Style") as null|anything in parallax_styles] + if(parent && parent.mob && parent.mob.hud_used) + parent.mob.hud_used.update_parallax_pref() + + if("edit_2fa") + // Do this async so we arent holding up a topic() call + INVOKE_ASYNC(user.client, /client.proc/edit_2fa) + return // We return here to avoid focus being lost + + + ShowChoices(user) + return 1 diff --git a/code/modules/client/preference/loadout/loadout.dm b/code/modules/client/preference/loadout/loadout.dm index f1f0e2082de..eff55feedee 100644 --- a/code/modules/client/preference/loadout/loadout.dm +++ b/code/modules/client/preference/loadout/loadout.dm @@ -10,17 +10,27 @@ GLOBAL_LIST_EMPTY(gear_datums) ..() /datum/gear - var/display_name //Name/index. Must be unique. - var/description //Description of this gear. If left blank will default to the description of the pathed item. - var/path //Path to item. - var/cost = 1 //Number of points used. Items in general cost 1 point, storage/armor/gloves/special use costs 2 points. - var/slot //Slot to equip to. - var/list/allowed_roles //Roles that can spawn with this item. - var/whitelisted //Term to check the whitelist for.. + /// Displayed name of the item listing. + var/display_name + /// Description of the item listing. If left blank will default to the description of the pathed item. + var/description + /// Typepath of the item. + var/path + /// Loadout points cost to select the item listing. + var/cost = 1 + /// Slot to equip the item to. + var/slot + /// List of job roles which can spawn with the item. + var/list/allowed_roles + /// Loadout category of the item listing. var/sort_category = "General" - var/list/gear_tweaks = list() //List of datums which will alter the item after it has been spawned. - var/subtype_path = /datum/gear //for skipping organizational subtypes (optional) - var/subtype_cost_overlap = TRUE //if subtypes can take points at the same time + /// List of datums which will alter the item after it has been spawned. (NYI) + var/list/gear_tweaks = list() + /// Set on empty category datums to skip them being added to the list. (/datum/gear/accessory, /datum/gear/suit/coat/job, etc.) + var/main_typepath = /datum/gear + /// Does selecting a second item with the same `main_typepath` cost loadout points. + var/subtype_selection_cost = TRUE + /// Patreon donator tier needed to select this item listing. var/donator_tier = 0 /datum/gear/New() diff --git a/code/modules/client/preference/loadout/loadout_accessories.dm b/code/modules/client/preference/loadout/loadout_accessories.dm index 98485d1f6c4..ba5e8626a0e 100644 --- a/code/modules/client/preference/loadout/loadout_accessories.dm +++ b/code/modules/client/preference/loadout/loadout_accessories.dm @@ -1,203 +1,215 @@ +/* +###################################################################################### +## ## +## IMPORTANT README ## +## ## +## Changing any /datum/gear typepaths --WILL-- break people's loadouts. ## +## The typepaths are stored directly in the `characters.gear` column of the DB. ## +## Please inform the server host if you wish to modify any of these. ## +## ## +###################################################################################### +*/ + + /datum/gear/accessory - subtype_path = /datum/gear/accessory + main_typepath = /datum/gear/accessory slot = slot_tie sort_category = "Accessories" /datum/gear/accessory/scarf - display_name = "scarf" + display_name = "Scarf" path = /obj/item/clothing/accessory/scarf /datum/gear/accessory/scarf/red - display_name = "scarf, red" + display_name = "Scarf, red" path = /obj/item/clothing/accessory/scarf/red /datum/gear/accessory/scarf/green - display_name = "scarf, green" + display_name = "Scarf, green" path = /obj/item/clothing/accessory/scarf/green /datum/gear/accessory/scarf/darkblue - display_name = "scarf, dark blue" + display_name = "Scarf, dark blue" path = /obj/item/clothing/accessory/scarf/darkblue /datum/gear/accessory/scarf/purple - display_name = "scarf, purple" + display_name = "Scarf, purple" path = /obj/item/clothing/accessory/scarf/purple /datum/gear/accessory/scarf/yellow - display_name = "scarf, yellow" + display_name = "Scarf, yellow" path = /obj/item/clothing/accessory/scarf/yellow /datum/gear/accessory/scarf/orange - display_name = "scarf, orange" + display_name = "Scarf, orange" path = /obj/item/clothing/accessory/scarf/orange /datum/gear/accessory/scarf/lightblue - display_name = "scarf, light blue" + display_name = "Scarf, light blue" path = /obj/item/clothing/accessory/scarf/lightblue /datum/gear/accessory/scarf/white - display_name = "scarf, white" + display_name = "Scarf, white" path = /obj/item/clothing/accessory/scarf/white /datum/gear/accessory/scarf/black - display_name = "scarf, black" + display_name = "Scarf, black" path = /obj/item/clothing/accessory/scarf/black /datum/gear/accessory/scarf/zebra - display_name = "scarf, zebra" + display_name = "Scarf, zebra" path = /obj/item/clothing/accessory/scarf/zebra /datum/gear/accessory/scarf/christmas - display_name = "scarf, christmas" + display_name = "Scarf, christmas" path = /obj/item/clothing/accessory/scarf/christmas /datum/gear/accessory/scarf/stripedred - display_name = "scarf, striped red" + display_name = "Scarf, striped red" path = /obj/item/clothing/accessory/stripedredscarf /datum/gear/accessory/scarf/stripedgreen - display_name = "scarf, striped green" + display_name = "Scarf, striped green" path = /obj/item/clothing/accessory/stripedgreenscarf /datum/gear/accessory/scarf/stripedblue - display_name = "scarf, striped blue" + display_name = "Scarf, striped blue" path = /obj/item/clothing/accessory/stripedbluescarf /datum/gear/accessory/holobadge - display_name = "holobadge, pin" + display_name = "Holobadge, pin" path = /obj/item/clothing/accessory/holobadge - allowed_roles = list("Head of Security", "Warden", "Detective", "Security Officer", "Security Pod Pilot") + allowed_roles = list("Head of Security", "Warden", "Detective", "Security Officer") /datum/gear/accessory/holobadge_n - display_name = "holobadge, cord" + display_name = "Holobadge, cord" path = /obj/item/clothing/accessory/holobadge/cord - allowed_roles = list("Head of Security", "Warden", "Detective", "Security Officer", "Security Pod Pilot") + allowed_roles = list("Head of Security", "Warden", "Detective", "Security Officer") /datum/gear/accessory/tieblue - display_name = "tie, blue" + display_name = "Tie, blue" path = /obj/item/clothing/accessory/blue /datum/gear/accessory/tiered - display_name = "tie, red" + display_name = "Tie, red" path = /obj/item/clothing/accessory/red /datum/gear/accessory/tieblack - display_name = "tie, black" + display_name = "Tie, black" path = /obj/item/clothing/accessory/black /datum/gear/accessory/tiehorrible - display_name = "tie, vomit green" + display_name = "Tie, vomit green" path = /obj/item/clothing/accessory/horrible /datum/gear/accessory/stethoscope - display_name = "stethoscope" + display_name = "Stethoscope" path = /obj/item/clothing/accessory/stethoscope allowed_roles = list("Chief Medical Officer", "Medical Doctor", "Paramedic", "Brig Physician") /datum/gear/accessory/cowboyshirt - display_name = "cowboy shirt, black" + display_name = "Cowboy shirt, black" path = /obj/item/clothing/accessory/cowboyshirt /datum/gear/accessory/cowboyshirt/short_sleeved - display_name = "cowboy shirt, short sleeved black" + display_name = "Cowboy shirt, short sleeved black" path = /obj/item/clothing/accessory/cowboyshirt/short_sleeved /datum/gear/accessory/cowboyshirt/white - display_name = "cowboy shirt, white" + display_name = "Cowboy shirt, white" path = /obj/item/clothing/accessory/cowboyshirt/white /datum/gear/accessory/cowboyshirt/white/short_sleeved - display_name = "cowboy shirt, short sleeved white" + display_name = "Cowboy shirt, short sleeved white" path = /obj/item/clothing/accessory/cowboyshirt/white/short_sleeved /datum/gear/accessory/cowboyshirt/pink - display_name = "cowboy shirt, pink" + display_name = "Cowboy shirt, pink" path = /obj/item/clothing/accessory/cowboyshirt/pink /datum/gear/accessory/cowboyshirt/pink/short_sleeved - display_name = "cowboy shirt, short sleeved pink" + display_name = "Cowboy shirt, short sleeved pink" path = /obj/item/clothing/accessory/cowboyshirt/pink/short_sleeved /datum/gear/accessory/cowboyshirt/red - display_name = "cowboy shirt, red" + display_name = "Cowboy shirt, red" path = /obj/item/clothing/accessory/cowboyshirt/red /datum/gear/accessory/cowboyshirt/red/short_sleeved - display_name = "cowboy shirt, short sleeved red" + display_name = "Cowboy shirt, short sleeved red" path = /obj/item/clothing/accessory/cowboyshirt/red/short_sleeved /datum/gear/accessory/cowboyshirt/navy - display_name = "cowboy shirt, navy" + display_name = "Cowboy shirt, navy" path = /obj/item/clothing/accessory/cowboyshirt/navy /datum/gear/accessory/cowboyshirt/navy/short_sleeved - display_name = "cowboy shirt, short sleeved navy" + display_name = "Cowboy shirt, short sleeved navy" path = /obj/item/clothing/accessory/cowboyshirt/navy/short_sleeved /datum/gear/accessory/locket - display_name = "gold locket" + display_name = "Gold locket" path = /obj/item/clothing/accessory/necklace/locket /datum/gear/accessory/necklace - display_name = "simple necklace" + display_name = "Simple necklace" path = /obj/item/clothing/accessory/necklace /datum/gear/accessory/corset - display_name = "corset, black" + display_name = "Corset, black" path = /obj/item/clothing/accessory/corset /datum/gear/accessory/corsetred - display_name = "corset, red" + display_name = "Corset, red" path = /obj/item/clothing/accessory/corset/red /datum/gear/accessory/corsetblue - display_name = "corset, blue" + display_name = "Corset, blue" path = /obj/item/clothing/accessory/corset/blue - /datum/gear/accessory/armband_red - display_name = "armband" + display_name = "Armband" path = /obj/item/clothing/accessory/armband /datum/gear/accessory/armband_civ - display_name = "armband, blue-yellow" + display_name = "Armband, blue-yellow" path = /obj/item/clothing/accessory/armband/yb /datum/gear/accessory/armband_job - subtype_path = /datum/gear/accessory/armband_job - subtype_cost_overlap = FALSE + main_typepath = /datum/gear/accessory/armband_job + subtype_selection_cost = FALSE /datum/gear/accessory/armband_job/sec - display_name = " armband, security" + display_name = "Armband, security" path = /obj/item/clothing/accessory/armband/sec - allowed_roles = list("Head of Security", "Warden", "Detective", "Security Officer", "Brig Physician", "Security Pod Pilot") + allowed_roles = list("Head of Security", "Warden", "Detective", "Security Officer", "Brig Physician") /datum/gear/accessory/armband_job/cargo - display_name = "cargo armband" + display_name = "Armband, cargo" path = /obj/item/clothing/accessory/armband/cargo allowed_roles = list("Quartermaster","Cargo Technician", "Shaft Miner") /datum/gear/accessory/armband_job/medical - display_name = "armband, medical" + display_name = "Armband, medical" path = /obj/item/clothing/accessory/armband/med allowed_roles = list("Chief Medical Officer", "Medical Doctor", "Coroner", "Paramedic", "Brig Physician") /datum/gear/accessory/armband_job/emt - display_name = "armband, EMT" + display_name = "Armband, EMT" path = /obj/item/clothing/accessory/armband/medgreen allowed_roles = list("Paramedic", "Brig Physician") /datum/gear/accessory/armband_job/engineering - display_name = "armband, engineering" + display_name = "Armband, engineering" path = /obj/item/clothing/accessory/armband/engine allowed_roles = list("Chief Engineer","Station Engineer", "Life Support Specialist") /datum/gear/accessory/armband_job/hydro - display_name = "armband, hydroponics" + display_name = "Armband, hydroponics" path = /obj/item/clothing/accessory/armband/hydro allowed_roles = list("Botanist") /datum/gear/accessory/armband_job/sci - display_name = "armband, science" + display_name = "Armband, science" path = /obj/item/clothing/accessory/armband/science allowed_roles = list("Research Director","Scientist", "Roboticist") diff --git a/code/modules/client/preference/loadout/loadout_cosmetics.dm b/code/modules/client/preference/loadout/loadout_cosmetics.dm index 0375de2de53..2f30bd90ac5 100644 --- a/code/modules/client/preference/loadout/loadout_cosmetics.dm +++ b/code/modules/client/preference/loadout/loadout_cosmetics.dm @@ -1,24 +1,37 @@ +/* +###################################################################################### +## ## +## IMPORTANT README ## +## ## +## Changing any /datum/gear typepaths --WILL-- break people's loadouts. ## +## The typepaths are stored directly in the `characters.gear` column of the DB. ## +## Please inform the server host if you wish to modify any of these. ## +## ## +###################################################################################### +*/ + + /datum/gear/lipstick - display_name = "lipstick, red" + display_name = "Lipstick, red" path = /obj/item/lipstick sort_category = "Cosmetics" /datum/gear/lipstick/black - display_name = "lipstick, black" + display_name = "Lipstick, black" path = /obj/item/lipstick/black /datum/gear/lipstick/jade - display_name = "lipstick, jade" + display_name = "Lipstick, jade" path = /obj/item/lipstick/jade /datum/gear/lipstick/purple - display_name = "lipstick, purple" + display_name = "Lipstick, purple" path = /obj/item/lipstick/purple /datum/gear/lipstick/blue - display_name = "lipstick, blue" + display_name = "Lipstick, blue" path = /obj/item/lipstick/blue /datum/gear/lipstick/lime - display_name = "lipstick, lime" + display_name = "Lipstick, lime" path = /obj/item/lipstick/lime diff --git a/code/modules/client/preference/loadout/loadout_donor.dm b/code/modules/client/preference/loadout/loadout_donor.dm index cc84053806b..aad1a4f22b6 100644 --- a/code/modules/client/preference/loadout/loadout_donor.dm +++ b/code/modules/client/preference/loadout/loadout_donor.dm @@ -1,7 +1,20 @@ +/* +###################################################################################### +## ## +## IMPORTANT README ## +## ## +## Changing any /datum/gear typepaths --WILL-- break people's loadouts. ## +## The typepaths are stored directly in the `characters.gear` column of the DB. ## +## Please inform the server host if you wish to modify any of these. ## +## ## +###################################################################################### +*/ + + /datum/gear/donor donator_tier = 2 sort_category = "Donor" - subtype_path = /datum/gear/donor + main_typepath = /datum/gear/donor /datum/gear/donor/furgloves display_name = "Fur Gloves" diff --git a/code/modules/client/preference/loadout/loadout_general.dm b/code/modules/client/preference/loadout/loadout_general.dm index 7278ef38cc7..56c28df62fe 100644 --- a/code/modules/client/preference/loadout/loadout_general.dm +++ b/code/modules/client/preference/loadout/loadout_general.dm @@ -1,136 +1,149 @@ +/* +###################################################################################### +## ## +## IMPORTANT README ## +## ## +## Changing any /datum/gear typepaths --WILL-- break people's loadouts. ## +## The typepaths are stored directly in the `characters.gear` column of the DB. ## +## Please inform the server host if you wish to modify any of these. ## +## ## +###################################################################################### +*/ + + /datum/gear/dice - display_name = "a d20" + display_name = "D20" path = /obj/item/dice/d20 /datum/gear/uplift - display_name = "a pack of Uplifts" + display_name = "Pack of Uplifts" path = /obj/item/storage/fancy/cigarettes/cigpack_uplift /datum/gear/robust - display_name = "a pack of Robusts" + display_name = "Pack of Robusts" path = /obj/item/storage/fancy/cigarettes/cigpack_robust /datum/gear/carp - display_name = "a pack of Carps" + display_name = "Pack of Carps" path = /obj/item/storage/fancy/cigarettes/cigpack_carp /datum/gear/midori - display_name = "a pack of Midoris" + display_name = "Pack of Midoris" path = /obj/item/storage/fancy/cigarettes/cigpack_midori /datum/gear/smokingpipe - display_name = "smoking pipe" + display_name = "Smoking pipe" path = /obj/item/clothing/mask/cigarette/pipe cost = 2 /datum/gear/lighter - display_name = "a cheap lighter" + display_name = "Cheap lighter" path = /obj/item/lighter /datum/gear/matches - display_name = "a box of matches" + display_name = "Box of matches" path = /obj/item/storage/box/matches /datum/gear/candlebox - display_name = "a box candles" + display_name = "Box of candles" description = "For setting the mood or for occult rituals." path = /obj/item/storage/fancy/candle_box/full /datum/gear/rock - display_name = "a pet rock" + display_name = "Pet rock" path = /obj/item/toy/pet_rock /datum/gear/camera - display_name = "a camera" + display_name = "Camera" path = /obj/item/camera /datum/gear/redfoxplushie - display_name = "a red fox plushie" + display_name = "Red fox plushie" path = /obj/item/toy/plushie/red_fox /datum/gear/blackcatplushie - display_name = "a black cat plushie" + display_name = "Black cat plushie" path = /obj/item/toy/plushie/black_cat /datum/gear/voxplushie - display_name = "a vox plushie" + display_name = "Vox plushie" path = /obj/item/toy/plushie/voxplushie /datum/gear/lizardplushie - display_name = "a lizard plushie" + display_name = "Lizard plushie" path = /obj/item/toy/plushie/lizardplushie /datum/gear/deerplushie - display_name = "a deer plushie" + display_name = "Deer plushie" path = /obj/item/toy/plushie/deer /datum/gear/carpplushie - display_name = "a carp plushie" + display_name = "Carp plushie" path = /obj/item/toy/carpplushie /datum/gear/sechud - display_name = "a classic security HUD" + display_name = "Classic security HUD" path = /obj/item/clothing/glasses/hud/security - allowed_roles = list("Head of Security", "Warden", "Security Officer", "Security Pod Pilot", "Internal Affairs Agent","Magistrate") + allowed_roles = list("Head of Security", "Warden", "Security Officer", "Internal Affairs Agent","Magistrate") /datum/gear/cryaonbox - display_name = "a box of crayons" + display_name = "Box of crayons" path = /obj/item/storage/fancy/crayons /datum/gear/cane - display_name = "a walking cane" + display_name = "Walking cane" path = /obj/item/cane /datum/gear/cards - display_name = "a deck of standard cards" + display_name = "Deck of standard cards" path = /obj/item/deck/cards /datum/gear/doublecards - display_name = "a double deck of standard cards" + display_name = "Double deck of standard cards" path = /obj/item/deck/doublecards /datum/gear/tarot - display_name = "a deck of tarot cards" + display_name = "Deck of tarot cards" path = /obj/item/deck/tarot /datum/gear/headphones - display_name = "a pair of headphones" + display_name = "Headphones" path = /obj/item/clothing/ears/headphones /datum/gear/fannypack - display_name = "a fannypack" + display_name = "Fannypack" path = /obj/item/storage/belt/fannypack /datum/gear/blackbandana - display_name = "bandana, black" + display_name = "Bandana, black" path = /obj/item/clothing/mask/bandana/black /datum/gear/purplebandana - display_name = "bandana, purple" + display_name = "Bandana, purple" path = /obj/item/clothing/mask/bandana/purple /datum/gear/orangebandana - display_name = "bandana, orange" + display_name = "Bandana, orange" path = /obj/item/clothing/mask/bandana/orange /datum/gear/greenbandana - display_name = "bandana, green" + display_name = "Bandana, green" path = /obj/item/clothing/mask/bandana/green /datum/gear/bluebandana - display_name = "bandana, blue" + display_name = "Bandana, blue" path = /obj/item/clothing/mask/bandana/blue /datum/gear/redbandana - display_name = "bandana, red" + display_name = "Bandana, red" path = /obj/item/clothing/mask/bandana/red /datum/gear/goldbandana - display_name = "bandana, gold" + display_name = "Bandana, gold" path = /obj/item/clothing/mask/bandana/gold /datum/gear/skullbandana - display_name = "bandana, skull" + display_name = "Bandana, skull" path = /obj/item/clothing/mask/bandana/skull /datum/gear/mob_hunt_game @@ -143,54 +156,54 @@ ////////////////////// /datum/gear/mug - display_name = "random coffee mug" + display_name = "Coffee mug, random" description = "A randomly colored coffee mug. You'll need to supply your own beverage though." path = /obj/item/reagent_containers/food/drinks/mug sort_category = "Mugs" /datum/gear/novelty_mug - display_name = "novelty coffee mug" + display_name = "Coffee mug, novelty" description = "A random novelty coffee mug. You'll need to supply your own beverage though." path = /obj/item/reagent_containers/food/drinks/mug/novelty cost = 2 sort_category = "Mugs" /datum/gear/mug/flask - display_name = "flask" + display_name = "Flask" description = "A flask for drink transportation. You'll need to supply your own beverage though." path = /obj/item/reagent_containers/food/drinks/flask/barflask /datum/gear/mug/department - subtype_path = /datum/gear/mug/department + main_typepath = /datum/gear/mug/department sort_category = "Mugs" - subtype_cost_overlap = FALSE + subtype_selection_cost = FALSE /datum/gear/mug/department/eng - display_name = "engineer coffee mug" + display_name = "Coffee mug, engineering" description = "An engineer's coffee mug, emblazoned in the colors of the Engineering department." - allowed_roles = list("Chief Engineer", "Station Engineer", "Mechanic", "Life Support Specialist") + allowed_roles = list("Chief Engineer", "Station Engineer", "Life Support Specialist") path = /obj/item/reagent_containers/food/drinks/mug/eng /datum/gear/mug/department/med - display_name = "doctor coffee mug" + display_name = "Coffee mug, medical" description = "A doctor's coffee mug, emblazoned in the colors of the Medical department." allowed_roles = list("Chief Medical Officer", "Medical Doctor", "Chemist", "Psychiatrist", "Paramedic", "Virologist", "Coroner") path = /obj/item/reagent_containers/food/drinks/mug/med /datum/gear/mug/department/sci - display_name = "scientist coffee mug" + display_name = "Coffee mug, science" description = "A scientist's coffee mug, emblazoned in the colors of the Science department." allowed_roles = list("Research Director", "Scientist", "Roboticist") path = /obj/item/reagent_containers/food/drinks/mug/sci /datum/gear/mug/department/sec - display_name = "officer coffee mug" + display_name = "Coffee mug, security" description = "An officer's coffee mug, emblazoned in the colors of the Security department." - allowed_roles = list("Head of Security", "Warden", "Detective", "Security Officer", "Security Pod Pilot", "Brig Physician", "Internal Affairs Agent") + allowed_roles = list("Head of Security", "Warden", "Detective", "Security Officer", "Brig Physician", "Internal Affairs Agent") path = /obj/item/reagent_containers/food/drinks/mug/sec /datum/gear/mug/department/serv - display_name = "crewmember coffee mug" + display_name = "Coffee mug, service" description = "A crewmember's coffee mug, emblazoned in the colors of the Service department." path = /obj/item/reagent_containers/food/drinks/mug/serv diff --git a/code/modules/client/preference/loadout/loadout_glasses.dm b/code/modules/client/preference/loadout/loadout_glasses.dm index a84af914c49..bab9b9d63b0 100644 --- a/code/modules/client/preference/loadout/loadout_glasses.dm +++ b/code/modules/client/preference/loadout/loadout_glasses.dm @@ -1,10 +1,23 @@ +/* +###################################################################################### +## ## +## IMPORTANT README ## +## ## +## Changing any /datum/gear typepaths --WILL-- break people's loadouts. ## +## The typepaths are stored directly in the `characters.gear` column of the DB. ## +## Please inform the server host if you wish to modify any of these. ## +## ## +###################################################################################### +*/ + + /datum/gear/glasses - subtype_path = /datum/gear/glasses + main_typepath = /datum/gear/glasses slot = slot_glasses sort_category = "Glasses" /datum/gear/glasses/sunglasses - display_name = "cheap sunglasses" + display_name = "Cheap sunglasses" path = /obj/item/clothing/glasses/sunglasses_fake /datum/gear/glasses/eyepatch diff --git a/code/modules/client/preference/loadout/loadout_gloves.dm b/code/modules/client/preference/loadout/loadout_gloves.dm index fece3456e56..2104ecff292 100644 --- a/code/modules/client/preference/loadout/loadout_gloves.dm +++ b/code/modules/client/preference/loadout/loadout_gloves.dm @@ -1,5 +1,18 @@ +/* +###################################################################################### +## ## +## IMPORTANT README ## +## ## +## Changing any /datum/gear typepaths --WILL-- break people's loadouts. ## +## The typepaths are stored directly in the `characters.gear` column of the DB. ## +## Please inform the server host if you wish to modify any of these. ## +## ## +###################################################################################### +*/ + + /datum/gear/gloves - subtype_path = /datum/gear/gloves + main_typepath = /datum/gear/gloves slot = slot_gloves sort_category = "Gloves" diff --git a/code/modules/client/preference/loadout/loadout_hat.dm b/code/modules/client/preference/loadout/loadout_hat.dm index d5890a2cefc..f6aa86060f2 100644 --- a/code/modules/client/preference/loadout/loadout_hat.dm +++ b/code/modules/client/preference/loadout/loadout_hat.dm @@ -1,184 +1,197 @@ +/* +###################################################################################### +## ## +## IMPORTANT README ## +## ## +## Changing any /datum/gear typepaths --WILL-- break people's loadouts. ## +## The typepaths are stored directly in the `characters.gear` column of the DB. ## +## Please inform the server host if you wish to modify any of these. ## +## ## +###################################################################################### +*/ + + /datum/gear/hat - subtype_path = /datum/gear/hat + main_typepath = /datum/gear/hat slot = slot_head sort_category = "Headwear" /datum/gear/hat/hhat_yellow - display_name = "hardhat, yellow" + display_name = "Hardhat, yellow" path = /obj/item/clothing/head/hardhat - allowed_roles = list("Chief Engineer", "Station Engineer", "Mechanic", "Life Support Specialist") + allowed_roles = list("Chief Engineer", "Station Engineer", "Life Support Specialist") /datum/gear/hat/hhat_orange - display_name = "hardhat, orange" + display_name = "Hardhat, orange" path = /obj/item/clothing/head/hardhat/orange - allowed_roles = list("Chief Engineer", "Station Engineer", "Mechanic", "Life Support Specialist") + allowed_roles = list("Chief Engineer", "Station Engineer", "Life Support Specialist") /datum/gear/hat/hhat_blue - display_name = "hardhat, blue" + display_name = "Hardhat, blue" path = /obj/item/clothing/head/hardhat/dblue - allowed_roles = list("Chief Engineer", "Station Engineer", "Mechanic", "Life Support Specialist") + allowed_roles = list("Chief Engineer", "Station Engineer", "Life Support Specialist") /datum/gear/hat/that - display_name = "top hat" + display_name = "Top hat" path = /obj/item/clothing/head/that /datum/gear/hat/flatcap - display_name = "flat cap" + display_name = "Flat cap" path = /obj/item/clothing/head/flatcap /datum/gear/hat/witch - display_name = "witch hat" + display_name = "Witch hat" path = /obj/item/clothing/head/wizard/marisa/fake /datum/gear/hat/piratecaphat - display_name = "pirate captian hat" + display_name = "Pirate captian hat" path = /obj/item/clothing/head/pirate /datum/gear/hat/fez - display_name = "fez" + display_name = "Fez" path = /obj/item/clothing/head/fez /datum/gear/hat/rasta - display_name = "rasta hat" + display_name = "Rasta hat" path = /obj/item/clothing/head/beanie/rasta /datum/gear/hat/bfedora - display_name = "fedora, black" + display_name = "Fedora, black" path = /obj/item/clothing/head/fedora /datum/gear/hat/wfedora - display_name = "fedora, white" + display_name = "Fedora, white" path = /obj/item/clothing/head/fedora/whitefedora /datum/gear/hat/brfedora - display_name = "fedora, brown" + display_name = "Fedora, brown" path = /obj/item/clothing/head/fedora/brownfedora /datum/gear/hat/capcsec - display_name = "security corporate cap" + display_name = "Security cap, corporate" path = /obj/item/clothing/head/soft/sec/corp - allowed_roles = list("Head of Security", "Warden", "Security Officer", "Security Pod Pilot") + allowed_roles = list("Head of Security", "Warden", "Security Officer") /datum/gear/hat/capsec - display_name = "security cap" + display_name = "Security cap" path = /obj/item/clothing/head/soft/sec - allowed_roles = list("Head of Security", "Warden", "Security Officer", "Security Pod Pilot") + allowed_roles = list("Head of Security", "Warden", "Security Officer") /datum/gear/hat/capred - display_name = "cap, red" + display_name = "Cap, red" path = /obj/item/clothing/head/soft/red /datum/gear/hat/capblue - display_name = "cap, blue" + display_name = "Cap, blue" path = /obj/item/clothing/head/soft/blue /datum/gear/hat/capgreen - display_name = "cap, green" + display_name = "Cap, green" path = /obj/item/clothing/head/soft/green /datum/gear/hat/capblack - display_name = "cap, black" + display_name = "Cap, black" path = /obj/item/clothing/head/soft/black /datum/gear/hat/cappurple - display_name = "cap, purple" + display_name = "Cap, purple" path = /obj/item/clothing/head/soft/purple /datum/gear/hat/capwhite - display_name = "cap, white" + display_name = "Cap, white" path = /obj/item/clothing/head/soft/mime /datum/gear/hat/caporange - display_name = "cap, orange" + display_name = "Cap, orange" path = /obj/item/clothing/head/soft/orange /datum/gear/hat/capgrey - display_name = "cap, grey" + display_name = "Cap, grey" path = /obj/item/clothing/head/soft/grey /datum/gear/hat/capyellow - display_name = "cap, yellow" + display_name = "Cap, yellow" path = /obj/item/clothing/head/soft/yellow /datum/gear/hat/cowboyhat - display_name = "cowboy hat, brown" + display_name = "Cowboy hat, brown" path = /obj/item/clothing/head/cowboyhat /datum/gear/hat/cowboyhat/tan - display_name = "cowboy hat, tan" + display_name = "Cowboy hat, tan" path = /obj/item/clothing/head/cowboyhat/tan /datum/gear/hat/cowboyhat/black - display_name = "cowboy hat, black" + display_name = "Cowboy hat, black" path = /obj/item/clothing/head/cowboyhat/black /datum/gear/hat/cowboyhat/white - display_name = "cowboy hat, white" + display_name = "Cowboy hat, white" path = /obj/item/clothing/head/cowboyhat/white /datum/gear/hat/cowboyhat/pink - display_name = "cowboy hat, pink" + display_name = "Cowboy hat, pink" path = /obj/item/clothing/head/cowboyhat/pink /datum/gear/hat/beret_purple - display_name = "beret, purple" + display_name = "Beret, purple" path = /obj/item/clothing/head/beret/purple_normal /datum/gear/hat/beret_black - display_name = "beret, black" + display_name = "Beret, black" path = /obj/item/clothing/head/beret/black /datum/gear/hat/beret_blue - display_name = "beret, blue" + display_name = "Beret, blue" path = /obj/item/clothing/head/beret/blue /datum/gear/hat/beret_red - display_name = "beret, red" + display_name = "Beret, red" path = /obj/item/clothing/head/beret /datum/gear/hat/beret_job - subtype_path = /datum/gear/hat/beret_job - subtype_cost_overlap = FALSE + main_typepath = /datum/gear/hat/beret_job + subtype_selection_cost = FALSE /datum/gear/hat/beret_job/sec - display_name = "security beret" + display_name = "Beret, security" path = /obj/item/clothing/head/beret/sec - allowed_roles = list("Head of Security", "Warden", "Security Officer", "Security Pod Pilot") + allowed_roles = list("Head of Security", "Warden", "Security Officer") /datum/gear/hat/beret_job/sci - display_name = "science beret" + display_name = "Beret, science" path = /obj/item/clothing/head/beret/sci allowed_roles = list("Research Director", "Scientist") /datum/gear/hat/beret_job/med - display_name = "medical beret" + display_name = "Beret, medical" path = /obj/item/clothing/head/beret/med allowed_roles = list("Chief Medical Officer", "Medical Doctor" , "Virologist", "Brig Physician" , "Coroner") /datum/gear/hat/beret_job/eng - display_name = "engineering beret" + display_name = "Beret, engineering" path = /obj/item/clothing/head/beret/eng allowed_roles = list("Chief Engineer", "Station Engineer") /datum/gear/hat/beret_job/atmos - display_name = "atmospherics beret" + display_name = "Beret, atmospherics" path = /obj/item/clothing/head/beret/atmos allowed_roles = list("Chief Engineer", "Life Support Specialist") /datum/gear/hat/surgicalcap_purple - display_name = "surgical cap, purple" + display_name = "Surgical cap, purple" path = /obj/item/clothing/head/surgery/purple allowed_roles = list("Chief Medical Officer", "Medical Doctor") /datum/gear/hat/surgicalcap_green - display_name = "surgical cap, green" + display_name = "Surgical cap, green" path = /obj/item/clothing/head/surgery/green allowed_roles = list("Chief Medical Officer", "Medical Doctor") /datum/gear/hat/flowerpin - display_name = "hair flower" + display_name = "Hair flower" path = /obj/item/clothing/head/hairflower /datum/gear/hat/capsolgov - display_name = "cap, Sol Gov" + display_name = "Cap, Sol Gov" path = /obj/item/clothing/head/soft/solgov diff --git a/code/modules/client/preference/loadout/loadout_racial.dm b/code/modules/client/preference/loadout/loadout_racial.dm index 78d38cf87b5..e9e95bc54ae 100644 --- a/code/modules/client/preference/loadout/loadout_racial.dm +++ b/code/modules/client/preference/loadout/loadout_racial.dm @@ -1,47 +1,60 @@ +/* +###################################################################################### +## ## +## IMPORTANT README ## +## ## +## Changing any /datum/gear typepaths --WILL-- break people's loadouts. ## +## The typepaths are stored directly in the `characters.gear` column of the DB. ## +## Please inform the server host if you wish to modify any of these. ## +## ## +###################################################################################### +*/ + + /datum/gear/racial sort_category = "Racial" - subtype_path = /datum/gear/racial + main_typepath = /datum/gear/racial cost = 1 /datum/gear/racial/taj - display_name = "embroidered veil" + display_name = "Embroidered veil" description = "A common traditional nano-fiber veil worn by many Tajaran, It is rare and offensive to see it on other races." path = /obj/item/clothing/glasses/tajblind slot = slot_glasses /datum/gear/racial/taj/sec - display_name = "sleek veil" + display_name = "Sleek veil" description = "A common traditional nano-fiber veil worn by many Tajaran, It is rare and offensive to see it on other races. This one has an in-built security HUD." path = /obj/item/clothing/glasses/hud/security/tajblind - allowed_roles = list("Head of Security", "Warden", "Security Officer", "Security Pod Pilot", "Internal Affairs Agent", "Magistrate") + allowed_roles = list("Head of Security", "Warden", "Security Officer", "Internal Affairs Agent", "Magistrate") cost = 2 /datum/gear/racial/taj/med - display_name = "lightweight veil" + display_name = "Lightweight veil" description = "A common traditional nano-fiber veil worn by many Tajaran, It is rare and offensive to see it on other races. This one has an in-built medical HUD." path = /obj/item/clothing/glasses/hud/health/tajblind allowed_roles = list("Chief Medical Officer", "Medical Doctor", "Chemist", "Psychiatrist", "Paramedic", "Virologist", "Brig Physician" , "Coroner") cost = 2 /datum/gear/racial/taj/sci - display_name = "hi-tech veil" + display_name = "Hi-tech veil" description = "A common traditional nano-fiber veil worn by many Tajaran, It is rare and offensive to see it on other races." path = /obj/item/clothing/glasses/tajblind/sci cost = 2 /datum/gear/racial/taj/eng - display_name = "industrial veil" + display_name = "Industrial veil" description = "A common traditional nano-fiber veil worn by many Tajaran, It is rare and offensive to see it on other races." path = /obj/item/clothing/glasses/tajblind/eng cost = 2 /datum/gear/racial/taj/cargo - display_name = "khaki veil" + display_name = "Khaki veil" description = "A common traditional nano-fiber veil worn by many Tajaran, It is rare and offensive to see it on other races. It is light and comfy!" path = /obj/item/clothing/glasses/tajblind/cargo cost = 2 /datum/gear/racial/footwraps - display_name = "cloth footwraps" + display_name = "Cloth footwraps" path = /obj/item/clothing/shoes/footwraps slot = slot_shoes diff --git a/code/modules/client/preference/loadout/loadout_shoes.dm b/code/modules/client/preference/loadout/loadout_shoes.dm index dbc7f970a33..e7f969c2311 100644 --- a/code/modules/client/preference/loadout/loadout_shoes.dm +++ b/code/modules/client/preference/loadout/loadout_shoes.dm @@ -1,54 +1,67 @@ +/* +###################################################################################### +## ## +## IMPORTANT README ## +## ## +## Changing any /datum/gear typepaths --WILL-- break people's loadouts. ## +## The typepaths are stored directly in the `characters.gear` column of the DB. ## +## Please inform the server host if you wish to modify any of these. ## +## ## +###################################################################################### +*/ + + /datum/gear/shoes - subtype_path = /datum/gear/shoes + main_typepath = /datum/gear/shoes slot = slot_shoes sort_category = "Shoes" /datum/gear/shoes/sandals - display_name = "sandals, wooden" + display_name = "Sandals, wooden" path = /obj/item/clothing/shoes/sandal /datum/gear/shoes/winterboots - display_name = "winter boots" + display_name = "Winter boots" path = /obj/item/clothing/shoes/winterboots /datum/gear/shoes/workboots - display_name = "work boots" + display_name = "Work boots" path = /obj/item/clothing/shoes/workboots /datum/gear/shoes/fancysandals - display_name = "sandals, fancy" + display_name = "Sandals, fancy" path = /obj/item/clothing/shoes/sandal/fancy /datum/gear/shoes/dressshoes - display_name = "dress shoes" + display_name = "Dress shoes" path = /obj/item/clothing/shoes/centcom /datum/gear/shoes/cowboyboots - display_name = "cowboy boots, brown" + display_name = "Cowboy boots, brown" path = /obj/item/clothing/shoes/cowboy /datum/gear/shoes/cowboyboots_black - display_name = "cowboy boots, black" + display_name = "Cowboy boots, black" path = /obj/item/clothing/shoes/cowboy/black /datum/gear/shoes/cowboyboots/white - display_name = "cowboy boots, white" + display_name = "Cowboy boots, white" path = /obj/item/clothing/shoes/cowboy/white /datum/gear/shoes/cowboyboots/pink - display_name = "cowboy boots, pink" + display_name = "Cowboy boots, pink" path = /obj/item/clothing/shoes/cowboy/pink /datum/gear/shoes/jackboots - display_name = "jackboots" + display_name = "Jackboots" path = /obj/item/clothing/shoes/jackboots /datum/gear/shoes/jacksandals - display_name = "jacksandals" + display_name = "Jacksandals" path = /obj/item/clothing/shoes/jackboots/jacksandals /datum/gear/shoes/laceup - display_name = "laceup shoes" + display_name = "Laceup shoes" path = /obj/item/clothing/shoes/laceup /datum/gear/shoes/blackshoes diff --git a/code/modules/client/preference/loadout/loadout_suit.dm b/code/modules/client/preference/loadout/loadout_suit.dm index 0f84bbfa58d..4f9298c6ac9 100644 --- a/code/modules/client/preference/loadout/loadout_suit.dm +++ b/code/modules/client/preference/loadout/loadout_suit.dm @@ -1,227 +1,238 @@ +/* +###################################################################################### +## ## +## IMPORTANT README ## +## ## +## Changing any /datum/gear typepaths --WILL-- break people's loadouts. ## +## The typepaths are stored directly in the `characters.gear` column of the DB. ## +## Please inform the server host if you wish to modify any of these. ## +## ## +###################################################################################### +*/ + + /datum/gear/suit - subtype_path = /datum/gear/suit + main_typepath = /datum/gear/suit slot = slot_wear_suit sort_category = "External Wear" //WINTER COATS /datum/gear/suit/coat - subtype_path = /datum/gear/suit/coat + main_typepath = /datum/gear/suit/coat /datum/gear/suit/coat/grey - display_name = "winter coat" + display_name = "Winter coat" path = /obj/item/clothing/suit/hooded/wintercoat /datum/gear/suit/coat/job - subtype_path = /datum/gear/suit/coat/job - subtype_cost_overlap = FALSE + main_typepath = /datum/gear/suit/coat/job + subtype_selection_cost = FALSE /datum/gear/suit/coat/job/sec - display_name = "winter coat, security" + display_name = "Winter coat, security" path = /obj/item/clothing/suit/hooded/wintercoat/security - allowed_roles = list("Head of Security", "Warden", "Detective", "Security Officer", "Security Pod Pilot") + allowed_roles = list("Head of Security", "Warden", "Detective", "Security Officer") /datum/gear/suit/coat/job/captain - display_name = "winter coat, captain" + display_name = "Winter coat, captain" path = /obj/item/clothing/suit/hooded/wintercoat/captain allowed_roles = list("Captain") /datum/gear/suit/coat/job/med - display_name = "winter coat, medical" + display_name = "Winter coat, medical" path = /obj/item/clothing/suit/hooded/wintercoat/medical allowed_roles = list("Chief Medical Officer", "Medical Doctor", "Chemist", "Psychiatrist", "Paramedic", "Virologist", "Brig Physician" , "Coroner") /datum/gear/suit/coat/job/sci - display_name = "winter coat, science" + display_name = "Winter coat, science" path = /obj/item/clothing/suit/hooded/wintercoat/science allowed_roles = list("Scientist", "Research Director") /datum/gear/suit/coat/job/engi - display_name = "winter coat, engineering" + display_name = "Winter coat, engineering" path = /obj/item/clothing/suit/hooded/wintercoat/engineering - allowed_roles = list("Chief Engineer", "Station Engineer", "Mechanic") + allowed_roles = list("Chief Engineer", "Station Engineer") /datum/gear/suit/coat/job/atmos - display_name = "winter coat, atmospherics" + display_name = "Winter coat, atmospherics" path = /obj/item/clothing/suit/hooded/wintercoat/engineering/atmos allowed_roles = list("Chief Engineer", "Life Support Specialist") /datum/gear/suit/coat/job/hydro - display_name = "winter coat, hydroponics" + display_name = "Winter coat, hydroponics" path = /obj/item/clothing/suit/hooded/wintercoat/hydro allowed_roles = list("Botanist") /datum/gear/suit/coat/job/cargo - display_name = "winter coat, cargo" + display_name = "Winter coat, cargo" path = /obj/item/clothing/suit/hooded/wintercoat/cargo allowed_roles = list("Quartermaster", "Cargo Technician") /datum/gear/suit/coat/job/miner - display_name = "winter coat, miner" + display_name = "Winter coat, mining" path = /obj/item/clothing/suit/hooded/wintercoat/miner allowed_roles = list("Shaft Miner") //LABCOATS /datum/gear/suit/labcoat_emt - display_name = "labcoat, paramedic" + display_name = "Labcoat, paramedic" path = /obj/item/clothing/suit/storage/labcoat/emt allowed_roles = list("Chief Medical Officer", "Paramedic") //JACKETS /datum/gear/suit/leather_jacket - display_name = "leather jacket" + display_name = "Leather jacket" path = /obj/item/clothing/suit/jacket/leather /datum/gear/suit/motojacket - display_name = "leather motorcycle jacket" + display_name = "Leather motorcycle jacket" path = /obj/item/clothing/suit/jacket/motojacket /datum/gear/suit/br_tcoat - display_name = "trenchcoat, brown" + display_name = "Trenchcoat, brown" path = /obj/item/clothing/suit/browntrenchcoat /datum/gear/suit/bl_tcoat - display_name = "trenchcoat, black" + display_name = "Trenchcoat, black" path = /obj/item/clothing/suit/blacktrenchcoat /datum/gear/suit/bomber_jacket - display_name = "bomber jacket" + display_name = "Bomber jacket" path = /obj/item/clothing/suit/jacket /datum/gear/suit/ol_miljacket - display_name = "military jacket, olive" + display_name = "Military jacket, olive" path = /obj/item/clothing/suit/jacket/miljacket /datum/gear/suit/nv_miljacket - display_name = "military jacket, navy" + display_name = "Military jacket, navy" path = /obj/item/clothing/suit/jacket/miljacket/navy /datum/gear/suit/ds_miljacket - display_name = "military jacket, desert" + display_name = "Military jacket, desert" path = /obj/item/clothing/suit/jacket/miljacket/desert /datum/gear/suit/wh_miljacket - display_name = "military jacket, white" + display_name = "Military jacket, white" path = /obj/item/clothing/suit/jacket/miljacket/white /datum/gear/suit/secjacket - display_name = "security jacket" + display_name = "Security jacket" path = /obj/item/clothing/suit/armor/secjacket - allowed_roles = list("Head of Security", "Warden", "Detective", "Security Officer", "Security Pod Pilot") + allowed_roles = list("Head of Security", "Warden", "Detective", "Security Officer") /datum/gear/suit/secbomberjacket - display_name = "security bomber jacket" - path = /obj/item/clothing/suit/jacket/pilot - allowed_roles = list("Head of Security", "Warden", "Detective", "Security Officer", "Security Pod Pilot") + display_name = "Security bomber jacket" + path = /obj/item/clothing/suit/jacket/secbomber + allowed_roles = list("Head of Security", "Warden", "Detective", "Security Officer") /datum/gear/suit/ianshirt display_name = "Ian Shirt" path = /obj/item/clothing/suit/ianshirt /datum/gear/suit/poncho - display_name = "poncho, classic" + display_name = "Poncho, classic" path = /obj/item/clothing/suit/poncho /datum/gear/suit/grponcho - display_name = "poncho, green" + display_name = "Poncho, green" path = /obj/item/clothing/suit/poncho/green /datum/gear/suit/rdponcho - display_name = "poncho, red" + display_name = "Poncho, red" path = /obj/item/clothing/suit/poncho/red /datum/gear/suit/tphoodie - display_name = "hoodie, Tharsis Polytech" + display_name = "Hoodie, Tharsis Polytech" path = /obj/item/clothing/suit/hooded/hoodie/tp /datum/gear/suit/nthoodie - display_name = "hoodie, Nanotrasen" + display_name = "Hoodie, Nanotrasen" path = /obj/item/clothing/suit/hooded/hoodie/nt /datum/gear/suit/lamhoodie - display_name = "hoodie, Lunar Academy of Medicine" + display_name = "Hoodie, Lunar Academy of Medicine" path = /obj/item/clothing/suit/hooded/hoodie/lam /datum/gear/suit/cuthoodie - display_name = "hoodie, Canaan University of Technology" + display_name = "Hoodie, Canaan University of Technology" path = /obj/item/clothing/suit/hooded/hoodie/cut /datum/gear/suit/mithoodie - display_name = "hoodie, Martian Institute of Technology" + display_name = "Hoodie, Martian Institute of Technology" path = /obj/item/clothing/suit/hooded/hoodie/mit /datum/gear/suit/bluehoodie - display_name = "hoodie, blue" + display_name = "Hoodie, blue" path = /obj/item/clothing/suit/hooded/hoodie/blue /datum/gear/suit/blackhoodie - display_name = "hoodie, black" + display_name = "Hoodie, black" path = /obj/item/clothing/suit/hooded/hoodie //SUITS! /datum/gear/suit/blacksuit - display_name = "suit jacket, black" + display_name = "Suit jacket, black" path = /obj/item/clothing/suit/storage/lawyer/blackjacket /datum/gear/suit/bluesuit - display_name = "suit jacket, blue" + display_name = "Suit jacket, blue" path = /obj/item/clothing/suit/storage/lawyer/bluejacket /datum/gear/suit/purplesuit - display_name = "suit jacket, purple" + display_name = "Suit jacket, purple" path = /obj/item/clothing/suit/storage/lawyer/purpjacket //Mantles! /datum/gear/suit/mantle - display_name = "mantle" + display_name = "Mantle" path = /obj/item/clothing/suit/mantle /datum/gear/suit/old_scarf - display_name = "old scarf" + display_name = "Old scarf" path = /obj/item/clothing/suit/mantle/old /datum/gear/suit/regal_shawl - display_name = "regal shawl" + display_name = "Regal shawl" path = /obj/item/clothing/suit/mantle/regal /datum/gear/suit/mantle/job - subtype_path = /datum/gear/suit/mantle/job - subtype_cost_overlap = FALSE + main_typepath = /datum/gear/suit/mantle/job + subtype_selection_cost = FALSE /datum/gear/suit/mantle/job/captain - display_name = "mantle, captain" + display_name = "Mantle, captain" path = /obj/item/clothing/suit/mantle/armor/captain allowed_roles = list("Captain") /datum/gear/suit/mantle/job/ce - display_name = "mantle, chief engineer" + display_name = "Mantle, chief engineer" path = /obj/item/clothing/suit/mantle/chief_engineer allowed_roles = list("Chief Engineer") /datum/gear/suit/mantle/job/cmo - display_name = "mantle, chief medical officer" + display_name = "Mantle, chief medical officer" path = /obj/item/clothing/suit/mantle/labcoat/chief_medical_officer allowed_roles = list("Chief Medical Officer") /datum/gear/suit/mantle/job/hos - display_name = "mantle, head of security" + display_name = "Mantle, head of security" path = /obj/item/clothing/suit/mantle/armor allowed_roles = list("Head of Security") /datum/gear/suit/mantle/job/hop - display_name = "mantle, head of personnel" + display_name = "Mantle, head of personnel" path = /obj/item/clothing/suit/mantle/armor/head_of_personnel allowed_roles = list("Head of Personnel") /datum/gear/suit/mantle/job/rd - display_name = "mantle, research director" + display_name = "Mantle, research director" path = /obj/item/clothing/suit/mantle/labcoat allowed_roles = list("Research Director") //Robes! /datum/gear/suit/witch - display_name = "witch robes" + display_name = "Witch robes" path = /obj/item/clothing/suit/wizrobe/marisa/fake - - diff --git a/code/modules/client/preference/loadout/loadout_uniform.dm b/code/modules/client/preference/loadout/loadout_uniform.dm index e188431f719..30d912aedc1 100644 --- a/code/modules/client/preference/loadout/loadout_uniform.dm +++ b/code/modules/client/preference/loadout/loadout_uniform.dm @@ -1,96 +1,105 @@ +/* +###################################################################################### +## ## +## IMPORTANT README ## +## ## +## Changing any /datum/gear typepaths --WILL-- break people's loadouts. ## +## The typepaths are stored directly in the `characters.gear` column of the DB. ## +## Please inform the server host if you wish to modify any of these. ## +## ## +###################################################################################### +*/ + + // Uniform slot /datum/gear/uniform - subtype_path = /datum/gear/uniform + main_typepath = /datum/gear/uniform slot = slot_w_uniform sort_category = "Uniforms and Casual Dress" /datum/gear/uniform/suit - subtype_path = /datum/gear/uniform/suit + main_typepath = /datum/gear/uniform/suit //there's a lot more colors than I thought there were @_@ /datum/gear/uniform/suit/jumpsuitblack - display_name = "jumpsuit, black" + display_name = "Jumpsuit, black" path = /obj/item/clothing/under/color/black /datum/gear/uniform/suit/jumpsuitblue - display_name = "jumpsuit, blue" + display_name = "Jumpsuit, blue" path = /obj/item/clothing/under/color/blue /datum/gear/uniform/suit/jumpsuitgreen - display_name = "jumpsuit, green" + display_name = "Jumpsuit, green" path = /obj/item/clothing/under/color/green /datum/gear/uniform/suit/jumpsuitgrey - display_name = "jumpsuit, grey" + display_name = "Jumpsuit, grey" path = /obj/item/clothing/under/color/grey /datum/gear/uniform/suit/jumpsuitorange - display_name = "jumpsuit, orange" + display_name = "Jumpsuit, orange" path = /obj/item/clothing/under/color/orange /datum/gear/uniform/suit/jumpsuitpink - display_name = "jumpsuit, pink" + display_name = "Jumpsuit, pink" path = /obj/item/clothing/under/color/pink /datum/gear/uniform/suit/jumpsuitred - display_name = "jumpsuit, red" + display_name = "Jumpsuit, red" path = /obj/item/clothing/under/color/red /datum/gear/uniform/suit/jumpsuitwhite - display_name = "jumpsuit, white" + display_name = "Jumpsuit, white" path = /obj/item/clothing/under/color/white /datum/gear/uniform/suit/jumpsuityellow - display_name = "jumpsuit, yellow" + display_name = "Jumpsuit, yellow" path = /obj/item/clothing/under/color/yellow /datum/gear/uniform/suit/jumpsuitlightblue - display_name = "jumpsuit, lightblue" + display_name = "Jumpsuit, lightblue" path = /obj/item/clothing/under/color/lightblue /datum/gear/uniform/suit/jumpsuitaqua - display_name = "jumpsuit, aqua" + display_name = "Jumpsuit, aqua" path = /obj/item/clothing/under/color/aqua /datum/gear/uniform/suit/jumpsuitpurple - display_name = "jumpsuit, purple" + display_name = "Jumpsuit, purple" path = /obj/item/clothing/under/color/purple /datum/gear/uniform/suit/jumpsuitlightpurple - display_name = "jumpsuit, lightpurple" + display_name = "Jumpsuit, lightpurple" path = /obj/item/clothing/under/color/lightpurple /datum/gear/uniform/suit/jumpsuitlightgreen - display_name = "jumpsuit, lightgreen" + display_name = "Jumpsuit, lightgreen" path = /obj/item/clothing/under/color/lightgreen -/datum/gear/uniform/suit/jumpsuitlightblue - display_name = "jumpsuit, lightblue" - path = /obj/item/clothing/under/color/lightblue - /datum/gear/uniform/suit/jumpsuitlightbrown - display_name = "jumpsuit, lightbrown" + display_name = "Jumpsuit, lightbrown" path = /obj/item/clothing/under/color/lightbrown /datum/gear/uniform/suit/jumpsuitbrown - display_name = "jumpsuit, brown" + display_name = "Jumpsuit, brown" path = /obj/item/clothing/under/color/brown /datum/gear/uniform/suit/jumpsuityellowgreen - display_name = "jumpsuit, yellowgreen" + display_name = "Jumpsuit, yellowgreen" path = /obj/item/clothing/under/color/yellowgreen /datum/gear/uniform/suit/jumpsuitdarkblue - display_name = "jumpsuit, darkblue" + display_name = "Jumpsuit, darkblue" path = /obj/item/clothing/under/color/darkblue /datum/gear/uniform/suit/jumpsuitlightred - display_name = "jumpsuit, lightred" + display_name = "Jumpsuit, lightred" path = /obj/item/clothing/under/color/lightred /datum/gear/uniform/suit/jumpsuitdarkred - display_name = "jumpsuit, darkred" + display_name = "Jumpsuit, darkred" path = /obj/item/clothing/under/color/darkred /datum/gear/uniform/suit/soviet @@ -98,229 +107,229 @@ path = /obj/item/clothing/under/soviet /datum/gear/uniform/suit/kilt - display_name = "a kilt" + display_name = "Kilt" path = /obj/item/clothing/under/kilt /datum/gear/uniform/skirt - subtype_path = /datum/gear/uniform/skirt + main_typepath = /datum/gear/uniform/skirt /datum/gear/uniform/skirt/blue - display_name = "plaid skirt, blue" + display_name = "Plaid skirt, blue" path = /obj/item/clothing/under/dress/plaid_blue /datum/gear/uniform/skirt/purple - display_name = "plaid skirt, purple" + display_name = "Plaid skirt, purple" path = /obj/item/clothing/under/dress/plaid_purple /datum/gear/uniform/skirt/red - display_name = "plaid skirt, red" + display_name = "Plaid skirt, red" path = /obj/item/clothing/under/dress/plaid_red /datum/gear/uniform/skirt/black - display_name = "skirt, black" + display_name = "Skirt, black" path = /obj/item/clothing/under/blackskirt /datum/gear/uniform/skirt/job - subtype_path = /datum/gear/uniform/skirt/job - subtype_cost_overlap = FALSE + main_typepath = /datum/gear/uniform/skirt/job + subtype_selection_cost = FALSE /datum/gear/uniform/skirt/job/ce - display_name = "skirt, ce" + display_name = "Skirt, ce" path = /obj/item/clothing/under/rank/chief_engineer/skirt allowed_roles = list("Chief Engineer") /datum/gear/uniform/skirt/job/atmos - display_name = "skirt, atmos" + display_name = "Skirt, atmos" path = /obj/item/clothing/under/rank/atmospheric_technician/skirt allowed_roles = list("Chief Engineer","Life Support Specialist") /datum/gear/uniform/skirt/job/eng - display_name = "skirt, engineer" + display_name = "Skirt, engineer" path = /obj/item/clothing/under/rank/engineer/skirt allowed_roles = list("Chief Engineer","Station Engineer") /datum/gear/uniform/skirt/job/roboticist - display_name = "skirt, roboticist" + display_name = "Skirt, roboticist" path = /obj/item/clothing/under/rank/roboticist/skirt allowed_roles = list("Research Director","Roboticist") /datum/gear/uniform/skirt/job/cmo - display_name = "skirt, cmo" + display_name = "Skirt, cmo" path = /obj/item/clothing/under/rank/chief_medical_officer/skirt allowed_roles = list("Chief Medical Officer") /datum/gear/uniform/skirt/job/chem - display_name = "skirt, chemist" + display_name = "Skirt, chemist" path = /obj/item/clothing/under/rank/chemist/skirt allowed_roles = list("Chief Medical Officer","Chemist") /datum/gear/uniform/skirt/job/viro - display_name = "skirt, virologist" + display_name = "Skirt, virologist" path = /obj/item/clothing/under/rank/virologist/skirt allowed_roles = list("Virologist") /datum/gear/uniform/skirt/job/med - display_name = "skirt, medical" + display_name = "Skirt, medical" path = /obj/item/clothing/under/rank/medical/skirt allowed_roles = list("Chief Medical Officer","Medical Doctor","Psychiatrist","Paramedic","Coroner") /datum/gear/uniform/skirt/job/phys - display_name = "skirt, physician" + display_name = "Skirt, physician" path = /obj/item/clothing/under/rank/security/brigphys/skirt allowed_roles = list("Brig Physician") /datum/gear/uniform/skirt/job/sci - display_name = "skirt, scientist" + display_name = "Skirt, scientist" path = /obj/item/clothing/under/rank/scientist/skirt allowed_roles = list("Research Director","Scientist") /datum/gear/uniform/skirt/job/cargo - display_name = "skirt, cargo" + display_name = "Skirt, cargo" path = /obj/item/clothing/under/rank/cargotech/skirt allowed_roles = list("Quartermaster","Cargo Technician") /datum/gear/uniform/skirt/job/qm - display_name = "skirt, QM" + display_name = "Skirt, QM" path = /obj/item/clothing/under/rank/cargo/skirt allowed_roles = list("Quartermaster") /datum/gear/uniform/skirt/job/warden - display_name = "skirt, warden" + display_name = "Skirt, warden" path = /obj/item/clothing/under/rank/warden/skirt allowed_roles = list("Head of Security", "Warden") /datum/gear/uniform/skirt/job/security - display_name = "skirt, security" + display_name = "Skirt, security" path = /obj/item/clothing/under/rank/security/skirt allowed_roles = list("Head of Security", "Warden", "Detective", "Security Officer") /datum/gear/uniform/skirt/job/head_of_security - display_name = "skirt, hos" + display_name = "Skirt, hos" path = /obj/item/clothing/under/rank/head_of_security/skirt allowed_roles = list("Head of Security") /datum/gear/uniform/skirt/job/ntrep - display_name = "skirt, nt rep" + display_name = "Skirt, nt rep" path = /obj/item/clothing/under/rank/ntrep/skirt allowed_roles = list("Nanotrasen Representative") /datum/gear/uniform/skirt/job/blueshield - display_name = "skirt, blueshield" + display_name = "Skirt, blueshield" path = /obj/item/clothing/under/rank/blueshield/skirt allowed_roles = list("Blueshield") /datum/gear/uniform/medical - subtype_path = /datum/gear/uniform/medical + main_typepath = /datum/gear/uniform/medical /datum/gear/uniform/medical/pscrubs - display_name = "medical scrubs, purple" + display_name = "Medical scrubs, purple" path = /obj/item/clothing/under/rank/medical/purple allowed_roles = list("Chief Medical Officer", "Medical Doctor") /datum/gear/uniform/medical/gscrubs - display_name = "medical scrubs, green" + display_name = "Medical scrubs, green" path = /obj/item/clothing/under/rank/medical/green allowed_roles = list("Chief Medical Officer", "Medical Doctor") /datum/gear/uniform/sec - subtype_path = /datum/gear/uniform/sec + main_typepath = /datum/gear/uniform/sec /datum/gear/uniform/sec/formal - display_name = "security uniform, formal" + display_name = "Security uniform, formal" path = /obj/item/clothing/under/rank/security/formal - allowed_roles = list("Head of Security", "Warden", "Detective", "Security Officer", "Security Pod Pilot") + allowed_roles = list("Head of Security", "Warden", "Detective", "Security Officer") /datum/gear/uniform/sec/secorporate - display_name = "security uniform, corporate" + display_name = "Security uniform, corporate" path = /obj/item/clothing/under/rank/security/corp - allowed_roles = list("Head of Security", "Warden", "Security Officer", "Security Pod Pilot") + allowed_roles = list("Head of Security", "Warden", "Security Officer") /datum/gear/uniform/sec/dispatch - display_name = "security uniform, dispatch" + display_name = "Security uniform, dispatch" path = /obj/item/clothing/under/rank/dispatch - allowed_roles = list("Head of Security", "Warden", "Security Officer", "Security Pod Pilot") + allowed_roles = list("Head of Security", "Warden", "Security Officer") /datum/gear/uniform/sec/casual - display_name = "security uniform, casual" + display_name = "Security uniform, casual" path = /obj/item/clothing/under/rank/security2 - allowed_roles = list("Head of Security", "Warden", "Security Officer", "Detective", "Security Pod Pilot") + allowed_roles = list("Head of Security", "Warden", "Security Officer", "Detective") /datum/gear/uniform/shorts - subtype_path = /datum/gear/uniform/shorts + main_typepath = /datum/gear/uniform/shorts /datum/gear/uniform/shorts/red - display_name = "shorts, red" + display_name = "Shorts, red" path = /obj/item/clothing/under/shorts/red /datum/gear/uniform/shorts/green - display_name = "shorts, green" + display_name = "Shorts, green" path = /obj/item/clothing/under/shorts/green /datum/gear/uniform/shorts/blue - display_name = "shorts, blue" + display_name = "Shorts, blue" path = /obj/item/clothing/under/shorts/blue /datum/gear/uniform/shorts/black - display_name = "shorts, black" + display_name = "Shorts, black" path = /obj/item/clothing/under/shorts/black /datum/gear/uniform/shorts/grey - display_name = "shorts, grey" + display_name = "Shorts, grey" path = /obj/item/clothing/under/shorts/grey /datum/gear/uniform/pants - subtype_path = /datum/gear/uniform/pants + main_typepath = /datum/gear/uniform/pants /datum/gear/uniform/pants/jeans - display_name = "jeans, classic" + display_name = "Jeans, classic" path = /obj/item/clothing/under/pants/classicjeans /datum/gear/uniform/pants/mjeans - display_name = "jeans, mustang" + display_name = "Jeans, mustang" path = /obj/item/clothing/under/pants/mustangjeans /datum/gear/uniform/pants/bljeans - display_name = "jeans, black" + display_name = "Jeans, black" path = /obj/item/clothing/under/pants/blackjeans /datum/gear/uniform/pants/yfjeans - display_name = "jeans, Young Folks" + display_name = "Jeans, Young Folks" path = /obj/item/clothing/under/pants/youngfolksjeans /datum/gear/uniform/pants/whitepants - display_name = "pants, white" + display_name = "Pants, white" path = /obj/item/clothing/under/pants/white /datum/gear/uniform/pants/redpants - display_name = "pants, red" + display_name = "Pants, red" path = /obj/item/clothing/under/pants/red /datum/gear/uniform/pants/blackpants - display_name = "pants, black" + display_name = "Pants, black" path = /obj/item/clothing/under/pants/black /datum/gear/uniform/pants/tanpants - display_name = "pants, tan" + display_name = "Pants, tan" path = /obj/item/clothing/under/pants/tan /datum/gear/uniform/pants/bluepants - display_name = "pants, blue" + display_name = "Pants, blue" path = /obj/item/clothing/under/pants/blue /datum/gear/uniform/pants/trackpants - display_name = "trackpants" + display_name = "Trackpants" path = /obj/item/clothing/under/pants/track /datum/gear/uniform/pants/khakipants - display_name = "pants, khaki" + display_name = "Pants, khaki" path = /obj/item/clothing/under/pants/khaki /datum/gear/uniform/pants/caopants - display_name = "pants, camo" + display_name = "Pants, camo" path = /obj/item/clothing/under/pants/camo /datum/gear/uniform/suit/tacticool - display_name = "tacticool turtleneck" + display_name = "Tacticool turtleneck" description = "A sleek black turtleneck paired with some khakis (WARNING DOES NOT HAVE SUIT SENSORS)" path = /obj/item/clothing/under/syndicate/tacticool diff --git a/code/modules/client/preference/preferences.dm b/code/modules/client/preference/preferences.dm index 1979be243fa..9b2bb14e554 100644 --- a/code/modules/client/preference/preferences.dm +++ b/code/modules/client/preference/preferences.dm @@ -1,6 +1,3 @@ -GLOBAL_LIST_EMPTY(preferences_datums) -GLOBAL_PROTECT(preferences_datums) // These feel like something that shouldnt be fucked with - GLOBAL_LIST_INIT(special_role_times, list( //minimum age (in days) for accounts to play these roles ROLE_PAI = 0, ROLE_POSIBRAIN = 0, @@ -54,25 +51,14 @@ GLOBAL_LIST_INIT(special_role_times, list( //minimum age (in days) for accounts else return max(0, days - C.player_age) -#define MAX_SAVE_SLOTS 30 // Save slots for regular players -#define MAX_SAVE_SLOTS_MEMBER 30 // Save slots for BYOND members - -#define TAB_CHAR 0 -#define TAB_GAME 1 -#define TAB_GEAR 2 - /datum/preferences var/client/parent //doohickeys for savefiles -// var/path var/default_slot = 1 //Holder so it doesn't default to slot 1, rather the last one used -// var/savefile_version = 0 var/max_save_slots = MAX_SAVE_SLOTS var/max_gear_slots = 0 //non-preference stuff - var/warns = 0 - var/muted = 0 var/last_ip var/last_id @@ -91,98 +77,6 @@ GLOBAL_LIST_INIT(special_role_times, list( //minimum age (in days) for accounts var/atklog = ATKLOG_ALL var/fuid // forum userid - //character preferences - var/real_name //our character's name - var/be_random_name = 0 //whether we are a random name every round - var/gender = MALE //gender of character (well duh) - var/age = 30 //age of character - var/spawnpoint = "Arrivals Shuttle" //where this character will spawn (0-2). - var/b_type = "A+" //blood type (not-chooseable) - var/underwear = "Nude" //underwear type - var/undershirt = "Nude" //undershirt type - var/socks = "Nude" //socks type - var/backbag = GBACKPACK //backpack type - var/ha_style = "None" //Head accessory style - var/hacc_colour = "#000000" //Head accessory colour - var/list/m_styles = list( - "head" = "None", - "body" = "None", - "tail" = "None" - ) //Marking styles. - var/list/m_colours = list( - "head" = "#000000", - "body" = "#000000", - "tail" = "#000000" - ) //Marking colours. - var/h_style = "Bald" //Hair type - var/h_colour = "#000000" //Hair color - var/h_sec_colour = "#000000" //Secondary hair color - var/f_style = "Shaved" //Facial hair type - var/f_colour = "#000000" //Facial hair color - var/f_sec_colour = "#000000" //Secondary facial hair color - var/s_tone = 0 //Skin tone - var/s_colour = "#000000" //Skin color - var/e_colour = "#000000" //Eye color - var/alt_head = "None" //Alt head style. - var/species = "Human" - var/language = "None" //Secondary language - var/autohiss_mode = AUTOHISS_OFF //Species autohiss level. OFF, BASIC, FULL. - - var/body_accessory = null - - var/speciesprefs = 0//I hate having to do this, I really do (Using this for oldvox code, making names universal I guess - - //Mob preview - var/icon/preview_icon = null - var/icon/preview_icon_front = null - var/icon/preview_icon_side = null - - //Jobs, uses bitflags - var/job_support_high = 0 - var/job_support_med = 0 - var/job_support_low = 0 - - var/job_medsci_high = 0 - var/job_medsci_med = 0 - var/job_medsci_low = 0 - - var/job_engsec_high = 0 - var/job_engsec_med = 0 - var/job_engsec_low = 0 - - var/job_karma_high = 0 - var/job_karma_med = 0 - var/job_karma_low = 0 - - //Keeps track of preferrence for not getting any wanted jobs - var/alternate_option = 2 - - // maps each organ to either null(intact), "cyborg" or "amputated" - // will probably not be able to do this for head and torso ;) - var/list/organ_data = list() - var/list/rlimb_data = list() - - var/list/player_alt_titles = new() // the default name of a job like "Medical Doctor" -// var/accent = "en-us" -// var/voice = "m1" -// var/pitch = 50 -// var/talkspeed = 175 - var/flavor_text = "" - var/med_record = "" - var/sec_record = "" - var/gen_record = "" - var/disabilities = 0 - - var/nanotrasen_relation = "Neutral" - - // 0 = character settings, 1 = game preferences - var/current_tab = TAB_CHAR - - // OOC Metadata: - var/metadata = "" - var/slot_name = "" - var/saved = FALSE // Indicates whether the character comes from the database or not - /// Volume mixer, indexed by channel as TEXT (numerical indexes will not work). Volume goes from 0 to 100. var/list/volume_mixer = list( "1024" = 100, // CHANNEL_LOBBYMUSIC @@ -200,39 +94,41 @@ GLOBAL_LIST_INIT(special_role_times, list( //minimum age (in days) for accounts // BYOND membership var/unlock_content = 0 - //Gear stuff - var/list/loadout_gear = list() var/gear_tab = "General" // Parallax var/parallax = PARALLAX_HIGH /// 2FA status var/_2fa_status = _2FA_DISABLED - /// Do we want to force our runechat colour to be white? - var/force_white_runechat = FALSE + /// Did we load successfully? + var/successful_load = FALSE + /// Have we loaded characters already? + var/characters_loaded = FALSE -/datum/preferences/New(client/C) + // 0 = character settings, 1 = game preferences, 2 = loadout + var/current_tab = TAB_CHAR + + /// List of all character saves we have. This is indexed based on the slot number + var/list/datum/character_save/character_saves = list() + /// The current active character + var/datum/character_save/active_character + +/datum/preferences/New(client/C, datum/db_query/Q) // Process our query parent = C - b_type = pick(4;"O-", 36;"O+", 3;"A-", 28;"A+", 1;"B-", 20;"B+", 1;"AB-", 5;"AB+") max_gear_slots = GLOB.configuration.general.base_loadout_points - var/loaded_preferences_successfully = FALSE + + if(!SSdbcore.IsConnected()) + return // Bail + if(istype(C)) if(!IsGuestKey(C.key)) unlock_content = C.IsByondMember() if(unlock_content) max_save_slots = MAX_SAVE_SLOTS_MEMBER - loaded_preferences_successfully = load_preferences(C) // Do not call this with no client/C, it generates a runtime / SQL error - if(loaded_preferences_successfully) - if(load_character(C)) - return - //we couldn't load character data so just randomize the character appearance + name - random_character() //let's create a random character then - rather than a fat, bald and naked man. - real_name = random_name(gender) - if(istype(C)) - if(!loaded_preferences_successfully) - save_preferences(C) // Do not call this with no client/C, it generates a runtime / SQL error - save_character(C) // Do not call this with no client/C, it generates a runtime / SQL error + successful_load = load_preferences(Q) + if(!successful_load) + to_chat(C, "Your preferences failed to load. Please inform the server host immediately.") /datum/preferences/proc/color_square(colour) return "___" @@ -241,9 +137,9 @@ GLOBAL_LIST_INIT(special_role_times, list( //minimum age (in days) for accounts /datum/preferences/proc/ShowChoices(mob/user) if(!user || !user.client) return - update_preview_icon() - user << browse_rsc(preview_icon_front, "previewicon.png") - user << browse_rsc(preview_icon_side, "previewicon2.png") + active_character.update_preview_icon() + user << browse_rsc(active_character.preview_icon_front, "previewicon.png") + user << browse_rsc(active_character.preview_icon_side, "previewicon2.png") var/dat = "" dat += "
    " @@ -255,26 +151,25 @@ GLOBAL_LIST_INIT(special_role_times, list( //minimum age (in days) for accounts switch(current_tab) if(TAB_CHAR) // Character Settings - var/datum/species/S = GLOB.all_species[species] + var/datum/species/S = GLOB.all_species[active_character.species] if(!istype(S)) //The species was invalid. Set the species to the default, fetch the datum for that species and generate a random character. - species = initial(species) - S = GLOB.all_species[species] - random_character() + active_character.species = initial(active_character.species) + S = GLOB.all_species[active_character.species] + active_character.randomise() dat += "
    " dat += "
    " dat += "Name: " - dat += "[real_name]" + dat += "[active_character.real_name]" dat += "(Randomize)" - dat += "(Always Randomize)
    " + dat += "(Always Randomize)
    " dat += "
    " dat += "
    " - dat += "Slot [default_slot][saved ? "" : " (empty)"]
    " + dat += "Slot [default_slot][active_character.from_db ? "" : " (empty)"]
    " dat += "Load slot - " - dat += "Save slot - " - dat += "Reload slot" - if(saved) - dat += " - Clear slot" + dat += "Save slot" + if(active_character.from_db) + dat += "- Clear slot" dat += "
    " dat += "
    " dat += "
    " @@ -283,81 +178,83 @@ GLOBAL_LIST_INIT(special_role_times, list( //minimum age (in days) for accounts dat += "You are banned from using custom names and appearances. \ You can continue to adjust your characters, but you will be randomised once you join the game.\
    " - dat += "Gender: [gender == MALE ? "Male" : (gender == FEMALE ? "Female" : "Genderless")]" + dat += "Gender: [active_character.gender == MALE ? "Male" : (active_character.gender == FEMALE ? "Female" : "Genderless")]" dat += "
    " - dat += "Age: [age]
    " + dat += "Age: [active_character.age]
    " dat += "Body: (®)
    " - dat += "Species: [species]
    " - if(species == "Vox") - dat += "N2 Tank: [speciesprefs ? "Large N2 Tank" : "Specialized N2 Tank"]
    " - if(species == "Grey") + dat += "Species: [active_character.species]
    " + if(active_character.species == "Vox") // Purge these bastards + dat += "N2 Tank: [active_character.speciesprefs ? "Large N2 Tank" : "Specialized N2 Tank"]
    " + if(active_character.species == "Grey") dat += "Wingdings: Set in disabilities
    " - dat += "Voice Translator: [speciesprefs ? "Yes" : "No"]
    " - dat += "Secondary Language: [language]
    " + dat += "Voice Translator: [active_character.speciesprefs ? "Yes" : "No"]
    " + dat += "Secondary Language: [active_character.language]
    " if(S.autohiss_basic_map) - dat += "Auto-accent: [autohiss_mode == AUTOHISS_FULL ? "Full" : (autohiss_mode == AUTOHISS_BASIC ? "Basic" : "Off")]
    " - dat += "Blood Type: [b_type]
    " + dat += "Auto-accent: [active_character.autohiss_mode == AUTOHISS_FULL ? "Full" : (active_character.autohiss_mode == AUTOHISS_BASIC ? "Basic" : "Off")]
    " + dat += "Blood Type: [active_character.b_type]
    " if(S.bodyflags & (HAS_SKIN_TONE|HAS_ICON_SKIN_TONE)) - dat += "Skin Tone: [S.bodyflags & HAS_ICON_SKIN_TONE ? "[s_tone]" : "[-s_tone + 35]/220"]
    " + dat += "Skin Tone: [S.bodyflags & HAS_ICON_SKIN_TONE ? "[active_character.s_tone]" : "[-active_character.s_tone + 35]/220"]
    " dat += "Disabilities: \[Set\]
    " - dat += "Nanotrasen Relation: [nanotrasen_relation]
    " + dat += "Nanotrasen Relation: [active_character.nanotrasen_relation]
    " dat += "Set Flavor Text
    " - if(length(flavor_text) <= 40) - if(!length(flavor_text)) dat += "\[...\]
    " - else dat += "[flavor_text]
    " - else dat += "[TextPreview(flavor_text)]...
    " + if(length(active_character.flavor_text) <= 40) + if(!length(active_character.flavor_text)) + dat += "\[...\]
    " + else + dat += "[active_character.flavor_text]
    " + else dat += "[TextPreview(active_character.flavor_text)]...
    " dat += "

    Hair & Accessories

    " if(S.bodyflags & HAS_HEAD_ACCESSORY) //Species that have head accessories. var/headaccessoryname = "Head Accessory: " - if(species == "Unathi") + if(active_character.species == "Unathi") headaccessoryname = "Horns: " dat += "[headaccessoryname]" - dat += "[ha_style] " - dat += "Color [color_square(hacc_colour)]
    " + dat += "[active_character.ha_style] " + dat += "Color [color_square(active_character.hacc_colour)]
    " if(S.bodyflags & HAS_HEAD_MARKINGS) //Species with head markings. dat += "Head Markings: " - dat += "[m_styles["head"]]" - dat += "Color [color_square(m_colours["head"])]
    " + dat += "[active_character.m_styles["head"]]" + dat += "Color [color_square(active_character.m_colours["head"])]
    " if(S.bodyflags & HAS_BODY_MARKINGS) //Species with body markings/tattoos. dat += "Body Markings: " - dat += "[m_styles["body"]]" - dat += "Color [color_square(m_colours["body"])]
    " + dat += "[active_character.m_styles["body"]]" + dat += "Color [color_square(active_character.m_colours["body"])]
    " if(S.bodyflags & HAS_TAIL_MARKINGS) //Species with tail markings. dat += "Tail Markings: " - dat += "[m_styles["tail"]]" - dat += "Color [color_square(m_colours["tail"])]
    " + dat += "[active_character.m_styles["tail"]]" + dat += "Color [color_square(active_character.m_colours["tail"])]
    " dat += "Hair: " - dat += "[h_style]" - dat += "Color [color_square(h_colour)]" - var/datum/sprite_accessory/temp_hair_style = GLOB.hair_styles_public_list[h_style] + dat += "[active_character.h_style]" + dat += "Color [color_square(active_character.h_colour)]" + var/datum/sprite_accessory/temp_hair_style = GLOB.hair_styles_public_list[active_character.h_style] if(temp_hair_style && temp_hair_style.secondary_theme && !temp_hair_style.no_sec_colour) - dat += " Color #2 [color_square(h_sec_colour)]" + dat += " Color #2 [color_square(active_character.h_sec_colour)]" dat += "
    " dat += "Facial Hair: " - dat += "[f_style ? "[f_style]" : "Shaved"]" - dat += "Color [color_square(f_colour)]" - var/datum/sprite_accessory/temp_facial_hair_style = GLOB.facial_hair_styles_list[f_style] + dat += "[active_character.f_style ? "[active_character.f_style]" : "Shaved"]" + dat += "Color [color_square(active_character.f_colour)]" + var/datum/sprite_accessory/temp_facial_hair_style = GLOB.facial_hair_styles_list[active_character.f_style] if(temp_facial_hair_style && temp_facial_hair_style.secondary_theme && !temp_facial_hair_style.no_sec_colour) - dat += " Color #2 [color_square(f_sec_colour)]" + dat += " Color #2 [color_square(active_character.f_sec_colour)]" dat += "
    " if(!(S.bodyflags & ALL_RPARTS)) dat += "Eyes: " - dat += "Color [color_square(e_colour)]
    " + dat += "Color [color_square(active_character.e_colour)]
    " - if((S.bodyflags & HAS_SKIN_COLOR) || GLOB.body_accessory_by_species[species] || check_rights(R_ADMIN, 0, user)) //admins can always fuck with this, because they are admins + if((S.bodyflags & HAS_SKIN_COLOR) || GLOB.body_accessory_by_species[active_character.species] || check_rights(R_ADMIN, 0, user)) //admins can always fuck with this, because they are admins dat += "Body Color: " - dat += "Color [color_square(s_colour)]
    " + dat += "Color [color_square(active_character.s_colour)]
    " - if(GLOB.body_accessory_by_species[species] || check_rights(R_ADMIN, 0, user)) + if(GLOB.body_accessory_by_species[active_character.species] || check_rights(R_ADMIN, 0, user)) dat += "Body Accessory: " - dat += "[body_accessory ? "[body_accessory]" : "None"]
    " + dat += "[active_character.body_accessory ? "[active_character.body_accessory]" : "None"]
    " dat += "
    " dat += "

    Occupation Choices

    " @@ -370,15 +267,15 @@ GLOBAL_LIST_INIT(special_role_times, list( //minimum age (in days) for accounts dat += "

    Limbs

    " if(S.bodyflags & HAS_ALT_HEADS) //Species with alt heads. dat += "Alternate Head: " - dat += "[alt_head]
    " + dat += "[active_character.alt_head]
    " dat += "Limbs and Parts: Adjust
    " - if(species != "Slime People" && species != "Machine") + if(active_character.species != "Slime People" && active_character.species != "Machine") dat += "Internal Organs: Adjust
    " //display limbs below var/ind = 0 - for(var/name in organ_data) - var/status = organ_data[name] + for(var/name in active_character.organ_data) + var/status = active_character.organ_data[name] var/organ_name = null switch(name) if("chest") @@ -423,8 +320,8 @@ GLOBAL_LIST_INIT(special_role_times, list( //minimum age (in days) for accounts switch(status) if("cyborg") var/datum/robolimb/R - if(rlimb_data[name] && GLOB.all_robolimbs[rlimb_data[name]]) - R = GLOB.all_robolimbs[rlimb_data[name]] + if(active_character.rlimb_data[name] && GLOB.all_robolimbs[active_character.rlimb_data[name]]) + R = GLOB.all_robolimbs[active_character.rlimb_data[name]] else R = GLOB.basic_robolimb dat += "\t[R.company] [organ_name] prosthesis" @@ -437,12 +334,12 @@ GLOBAL_LIST_INIT(special_role_times, list( //minimum age (in days) for accounts dat += "

    Clothing

    " if(S.clothing_flags & HAS_UNDERWEAR) - dat += "Underwear: [underwear]
    " + dat += "Underwear: [active_character.underwear]
    " if(S.clothing_flags & HAS_UNDERSHIRT) - dat += "Undershirt: [undershirt]
    " + dat += "Undershirt: [active_character.undershirt]
    " if(S.clothing_flags & HAS_SOCKS) - dat += "Socks: [socks]
    " - dat += "Backpack Type: [backbag]
    " + dat += "Socks: [active_character.socks]
    " + dat += "Backpack Type: [active_character.backbag]
    " dat += "
    " @@ -516,19 +413,9 @@ GLOBAL_LIST_INIT(special_role_times, list( //minimum age (in days) for accounts dat += "" if(TAB_GEAR) - var/total_cost = 0 - var/list/type_blacklist = list() - if(loadout_gear && loadout_gear.len) - for(var/i = 1, i <= loadout_gear.len, i++) - var/datum/gear/G = GLOB.gear_datums[loadout_gear[i]] - if(G) - if(!G.subtype_cost_overlap) - if(G.subtype_path in type_blacklist) - continue - type_blacklist += G.subtype_path - total_cost += G.cost + var/total_cost = build_loadout() - var/fcolor = "#3366CC" + var/fcolor = "#3366CC" if(total_cost < max_gear_slots) fcolor = "#E67300" dat += "" @@ -553,11 +440,11 @@ GLOBAL_LIST_INIT(special_role_times, list( //minimum age (in days) for accounts dat += "" for(var/gear_name in LC.gear) var/datum/gear/G = LC.gear[gear_name] - var/ticked = (G.display_name in loadout_gear) + var/ticked = (G.type in active_character.loadout_gear) if(G.donator_tier > user.client.donator_level) dat += "" else - dat += "" + dat += "" dat += "" dat += "

    [G.display_name]
    [G.display_name]
    [G.display_name][G.cost]" if(G.allowed_roles) dat += "Restrictions: " @@ -568,7 +455,7 @@ GLOBAL_LIST_INIT(special_role_times, list( //minimum age (in days) for accounts if(ticked) . += "
    " for(var/datum/gear_tweak/tweak in G.gear_tweaks) - . += " [tweak.get_contents(get_tweak_metadata(G, tweak))]" + . += " [tweak.get_contents(active_character.get_tweak_metadata(G, tweak))]" . += "
    " @@ -584,262 +471,33 @@ GLOBAL_LIST_INIT(special_role_times, list( //minimum age (in days) for accounts popup.set_content(dat) popup.open(0) +/datum/preferences/proc/open_load_dialog(mob/user) + var/dat = "" + dat += "
    " + dat += "Select a character slot to load
    " + var/name -/datum/preferences/proc/get_gear_metadata(datum/gear/G) - . = loadout_gear[G.display_name] - if(!.) - . = list() - loadout_gear[G.display_name] = . + for(var/i in 1 to length(character_saves)) + var/datum/character_save/CS = character_saves[i] + if(CS.from_db) + name = CS.real_name + else + name = "Character [i]" + if(i == default_slot) + name = "[name]" + dat += "[name]
    " -/datum/preferences/proc/get_tweak_metadata(datum/gear/G, datum/gear_tweak/tweak) - var/list/metadata = get_gear_metadata(G) - . = metadata["[tweak]"] - if(!.) - . = tweak.get_default() - metadata["[tweak]"] = . + dat += "
    " + dat += "Close
    " + dat += "
    " -/datum/preferences/proc/set_tweak_metadata(datum/gear/G, datum/gear_tweak/tweak, new_metadata) - var/list/metadata = get_gear_metadata(G) - metadata["[tweak]"] = new_metadata - - -/datum/preferences/proc/SetChoices(mob/user, limit = 17, list/splitJobs = list("Head of Security", "Bartender"), widthPerColumn = 400, height = 700) - if(!SSjobs) - return - - //limit - The amount of jobs allowed per column. Defaults to 17 to make it look nice. - //splitJobs - Allows you split the table by job. You can make different tables for each department by including their heads. Defaults to CE to make it look nice. - //widthPerColumn - Screen's width for every column. - //height - Screen's height. - var/width = widthPerColumn - - - var/list/html = list() - html += "" - if(!length(SSjobs.occupations)) - html += "The Jobs subsystem is not yet finished creating jobs, please try again later" - html += "
    Done

    " // Easier to press up here. - else - html += "
    " - html += "Choose occupation chances
    Unavailable occupations are crossed out.

    " - html += "
    Save

    " // Easier to press up here. - html += "
    Left-click to raise an occupation preference, right-click to lower it.
    " - html += "" - html += "
    " // Table within a table for alignment, also allows you to easily add more colomns. - html += "" - var/index = -1 - - //The job before the current job. I only use this to get the previous jobs color when I'm filling in blank rows. - var/datum/job/lastJob - if(!SSjobs) - return - for(var/J in SSjobs.occupations) - var/datum/job/job = J - - if(job.admin_only) - continue - - if(job.hidden_from_job_prefs) - continue - - index += 1 - if((index >= limit) || (job.title in splitJobs)) - if((index < limit) && (lastJob != null)) - // Dynamic window width - width += widthPerColumn - //If the cells were broken up by a job in the splitJob list then it will fill in the rest of the cells with - //the last job's selection color. Creating a rather nice effect. - for(var/i in 1 to limit - index) - html += "" - html += "
      
    " - index = 0 - - html += "" - continue - if(jobban_isbanned(user, job.title)) - html += "[rank]" - continue - var/available_in_playtime = job.available_in_playtime(user.client) - if(available_in_playtime) - html += "[rank]" - continue - if(job.barred_by_disability(user.client)) - html += "[rank]" - continue - if(!job.player_old_enough(user.client)) - var/available_in_days = job.available_in_days(user.client) - html += "[rank]" - continue - if((job_support_low & JOB_CIVILIAN) && (job.title != "Civilian")) - html += "[rank]" - continue - if((job.title in GLOB.command_positions) || (job.title == "AI"))//Bold head jobs - html += "[rank]" - else - html += "[rank]" - - html += "" - continue - /* - if(GetJobDepartment(job, 1) & job.flag) - HTML += " \[High]" - else if(GetJobDepartment(job, 2) & job.flag) - HTML += " \[Medium]" - else if(GetJobDepartment(job, 3) & job.flag) - HTML += " \[Low]" - else - HTML += " \[NEVER]" - */ - html += "[prefLevelLabel]" - - html += "" - - for(var/i in 1 to limit - index) // Finish the column so it is even - html += "" - - html += "
    " - var/rank - if(job.alt_titles) - rank = "[GetPlayerAltTitle(job)]" - else - rank = job.title - lastJob = job - if(!is_job_whitelisted(user, job.title)) - html += "[rank] \[KARMA]
    \[BANNED]
    \[" + get_exp_format(available_in_playtime) + " as " + job.get_exp_req_type() + "\]
    \[DISABILITY\]
    \[IN [(available_in_days)] DAYS]
    " - - var/prefLevelLabel = "ERROR" - var/prefLevelColor = "pink" - var/prefUpperLevel = -1 // level to assign on left click - var/prefLowerLevel = -1 // level to assign on right click - - if(GetJobDepartment(job, 1) & job.flag) - prefLevelLabel = "High" - prefLevelColor = "slateblue" - prefUpperLevel = 4 - prefLowerLevel = 2 - else if(GetJobDepartment(job, 2) & job.flag) - prefLevelLabel = "Medium" - prefLevelColor = "green" - prefUpperLevel = 1 - prefLowerLevel = 3 - else if(GetJobDepartment(job, 3) & job.flag) - prefLevelLabel = "Low" - prefLevelColor = "orange" - prefUpperLevel = 2 - prefLowerLevel = 4 - else - prefLevelLabel = "NEVER" - prefLevelColor = "red" - prefUpperLevel = 3 - prefLowerLevel = 1 - - - html += "" - - // HTML += "" - - if(job.title == "Civilian")//Civilian is special - if(job_support_low & JOB_CIVILIAN) - html += " Yes" - else - html += " No" - html += "
      
    " - html += "
    " - - switch(alternate_option) - if(GET_RANDOM_JOB) - html += "

    Get random job if preferences unavailable

    " - if(BE_ASSISTANT) - html += "

    Be a civilian if preferences unavailable

    " - if(RETURN_TO_LOBBY) - html += "

    Return to lobby if preferences unavailable

    " - - html += "
    Reset
    " - html += "

    Learn About Job Selection
    " - html += "
    " - - user << browse(null, "window=preferences") -// user << browse(HTML, "window=mob_occupation;size=[width]x[height]") - var/datum/browser/popup = new(user, "mob_occupation", "
    Occupation Preferences
    ", width, height) - popup.set_window_options("can_close=0") - var/html_string = html.Join() - popup.set_content(html_string) + var/datum/browser/popup = new(user, "saves", "
    Character Saves
    ", 300, 390) + popup.set_content(dat) popup.open(0) - return -/datum/preferences/proc/SetJobPreferenceLevel(datum/job/job, level) - if(!job) - return 0 +/datum/preferences/proc/close_load_dialog(mob/user) + user << browse(null, "window=saves") - if(level == 1) // to high - // remove any other job(s) set to high - job_support_med |= job_support_high - job_engsec_med |= job_engsec_high - job_medsci_med |= job_medsci_high - job_karma_med |= job_karma_high - job_support_high = 0 - job_engsec_high = 0 - job_medsci_high = 0 - job_karma_high = 0 - - if(job.department_flag == JOBCAT_SUPPORT) - job_support_low &= ~job.flag - job_support_med &= ~job.flag - job_support_high &= ~job.flag - - switch(level) - if(1) - job_support_high |= job.flag - if(2) - job_support_med |= job.flag - if(3) - job_support_low |= job.flag - - return 1 - else if(job.department_flag == JOBCAT_ENGSEC) - job_engsec_low &= ~job.flag - job_engsec_med &= ~job.flag - job_engsec_high &= ~job.flag - - switch(level) - if(1) - job_engsec_high |= job.flag - if(2) - job_engsec_med |= job.flag - if(3) - job_engsec_low |= job.flag - - return 1 - else if(job.department_flag == JOBCAT_MEDSCI) - job_medsci_low &= ~job.flag - job_medsci_med &= ~job.flag - job_medsci_high &= ~job.flag - - switch(level) - if(1) - job_medsci_high |= job.flag - if(2) - job_medsci_med |= job.flag - if(3) - job_medsci_low |= job.flag - - return 1 - else if(job.department_flag == JOBCAT_KARMA) - job_karma_low &= ~job.flag - job_karma_med &= ~job.flag - job_karma_high &= ~job.flag - - switch(level) - if(1) - job_karma_high |= job.flag - if(2) - job_karma_med |= job.flag - if(3) - job_karma_low |= job.flag - - return 1 - - return 0 /datum/preferences/proc/UpdateJobPreference(mob/user, role, desiredLvl) var/datum/job/job = SSjobs.GetJob(role) @@ -855,96 +513,19 @@ GLOBAL_LIST_INIT(special_role_times, list( //minimum age (in days) for accounts return if(role == "Civilian") - if(job_support_low & job.flag) - job_support_low &= ~job.flag + if(active_character.job_support_low & job.flag) + active_character.job_support_low &= ~job.flag else - job_support_low |= job.flag - SetChoices(user) + active_character.job_support_low |= job.flag + active_character.SetChoices(user) return 1 - SetJobPreferenceLevel(job, desiredLvl) - SetChoices(user) + active_character.SetJobPreferenceLevel(job, desiredLvl) + active_character.SetChoices(user) return 1 -/datum/preferences/proc/ShowDisabilityState(mob/user, flag, label) - return "
  • [label]: [disabilities & flag ? "Yes" : "No"]
  • " - -/datum/preferences/proc/SetDisabilities(mob/user) - var/datum/species/S = GLOB.all_species[species] - var/HTML = "" - HTML += "
    " - - if(CAN_WINGDINGS in S.species_traits) - HTML += ShowDisabilityState(user, DISABILITY_FLAG_WINGDINGS, "Speak in Wingdings") - HTML += ShowDisabilityState(user, DISABILITY_FLAG_NEARSIGHTED, "Nearsighted") - HTML += ShowDisabilityState(user, DISABILITY_FLAG_COLOURBLIND, "Colourblind") - HTML += ShowDisabilityState(user, DISABILITY_FLAG_BLIND, "Blind") - HTML += ShowDisabilityState(user, DISABILITY_FLAG_DEAF, "Deaf") - HTML += ShowDisabilityState(user, DISABILITY_FLAG_MUTE, "Mute") - if(!(TRAIT_NOFAT in S.inherent_traits)) - HTML += ShowDisabilityState(user, DISABILITY_FLAG_FAT, "Obese") - HTML += ShowDisabilityState(user, DISABILITY_FLAG_NERVOUS, "Stutter") - HTML += ShowDisabilityState(user, DISABILITY_FLAG_SWEDISH, "Swedish accent") - HTML += ShowDisabilityState(user, DISABILITY_FLAG_CHAV, "Chav accent") - HTML += ShowDisabilityState(user, DISABILITY_FLAG_LISP, "Lisp") - HTML += ShowDisabilityState(user, DISABILITY_FLAG_DIZZY, "Dizziness") - - - HTML += {" - \[Done\] - \[Reset\] -
    "} - - var/datum/browser/popup = new(user, "disabil", "
    Choose Disabilities
    ", 350, 380) - popup.set_content(HTML) - popup.open(0) - -/datum/preferences/proc/SetRecords(mob/user) - var/HTML = "" - HTML += "
    " - - HTML += "Medical Records
    " - - if(length(med_record) <= 40) - HTML += "[med_record]" - else - HTML += "[copytext(med_record, 1, 37)]..." - - HTML += "
    Employment Records
    " - - if(length(gen_record) <= 40) - HTML += "[gen_record]" - else - HTML += "[copytext(gen_record, 1, 37)]..." - - HTML += "
    Security Records
    " - - if(length(sec_record) <= 40) - HTML += "[sec_record]
    " - else - HTML += "[copytext(sec_record, 1, 37)]...
    " - - HTML += "\[Done\]" - HTML += "
    " - - var/datum/browser/popup = new(user, "records", "
    Character Records
    ", 350, 300) - popup.set_content(HTML) - popup.open(0) - -/datum/preferences/proc/GetPlayerAltTitle(datum/job/job) - return player_alt_titles.Find(job.title) > 0 \ - ? player_alt_titles[job.title] \ - : job.title - -/datum/preferences/proc/SetPlayerAltTitle(datum/job/job, new_title) - // remove existing entry - if(player_alt_titles.Find(job.title)) - player_alt_titles -= job.title - // add one if it's not default - if(job.title != new_title) - player_alt_titles[job.title] = new_title - +// This is scoped here instead of /datum/character_save just because of ShowChoices() /datum/preferences/proc/SetJob(mob/user, role) var/datum/job/job = SSjobs.GetJob(role) if(!job) @@ -953,1387 +534,57 @@ GLOBAL_LIST_INIT(special_role_times, list( //minimum age (in days) for accounts return if(role == "Civilian") - if(job_support_low & job.flag) - job_support_low &= ~job.flag + if(active_character.job_support_low & job.flag) + active_character.job_support_low &= ~job.flag else - job_support_low |= job.flag - SetChoices(user) + active_character.job_support_low |= job.flag + active_character.SetChoices(user) return 1 - if(GetJobDepartment(job, 1) & job.flag) - SetJobDepartment(job, 1) - else if(GetJobDepartment(job, 2) & job.flag) - SetJobDepartment(job, 2) - else if(GetJobDepartment(job, 3) & job.flag) - SetJobDepartment(job, 3) + if(active_character.GetJobDepartment(job, 1) & job.flag) + active_character.SetJobDepartment(job, 1) + else if(active_character.GetJobDepartment(job, 2) & job.flag) + active_character.SetJobDepartment(job, 2) + else if(active_character.GetJobDepartment(job, 3) & job.flag) + active_character.SetJobDepartment(job, 3) else//job = Never - SetJobDepartment(job, 4) + active_character.SetJobDepartment(job, 4) - SetChoices(user) + active_character.SetChoices(user) return 1 -/datum/preferences/proc/ResetJobs() - job_support_high = 0 - job_support_med = 0 - job_support_low = 0 +/** + * Rebuilds the `loadout_gear` list of the [active_character], and returns the total end cost. + * + * Caches and cuts the existing [/datum/character_save/var/loadout_gear] list and remakes it, checking the `subtype_selection_cost` and overall cost validity of each item. + * + * If the item's [/datum/gear/var/subtype_selection_cost] is `FALSE`, any future items with the same [/datum/gear/var/main_typepath] will have their cost skipped. + * If adding the item will take the total cost over the maximum, it won't be added to the list. + * + * Arguments: + * * new_item - A new [/datum/gear] item to be added to the `loadout_gear` list. + */ +/datum/preferences/proc/build_loadout(datum/gear/new_item) + var/total_cost = 0 + var/list/type_blacklist = list() + var/list/loadout_cache = active_character.loadout_gear.Copy() + active_character.loadout_gear.Cut() + if(new_item) + loadout_cache += new_item.type - job_medsci_high = 0 - job_medsci_med = 0 - job_medsci_low = 0 - - job_engsec_high = 0 - job_engsec_med = 0 - job_engsec_low = 0 - - job_karma_high = 0 - job_karma_med = 0 - job_karma_low = 0 - - -/datum/preferences/proc/GetJobDepartment(datum/job/job, level) - if(!job || !level) return 0 - switch(job.department_flag) - if(JOBCAT_SUPPORT) - switch(level) - if(1) - return job_support_high - if(2) - return job_support_med - if(3) - return job_support_low - if(JOBCAT_MEDSCI) - switch(level) - if(1) - return job_medsci_high - if(2) - return job_medsci_med - if(3) - return job_medsci_low - if(JOBCAT_ENGSEC) - switch(level) - if(1) - return job_engsec_high - if(2) - return job_engsec_med - if(3) - return job_engsec_low - if(JOBCAT_KARMA) - switch(level) - if(1) - return job_karma_high - if(2) - return job_karma_med - if(3) - return job_karma_low - return 0 - -/datum/preferences/proc/SetJobDepartment(datum/job/job, level) - if(!job || !level) return 0 - switch(level) - if(1)//Only one of these should ever be active at once so clear them all here - job_support_high = 0 - job_medsci_high = 0 - job_engsec_high = 0 - job_karma_high = 0 - return 1 - if(2)//Set current highs to med, then reset them - job_support_med |= job_support_high - job_medsci_med |= job_medsci_high - job_engsec_med |= job_engsec_high - job_karma_med |= job_karma_high - job_support_high = 0 - job_medsci_high = 0 - job_engsec_high = 0 - job_karma_high = 0 - - switch(job.department_flag) - if(JOBCAT_SUPPORT) - switch(level) - if(2) - job_support_high = job.flag - job_support_med &= ~job.flag - if(3) - job_support_med |= job.flag - job_support_low &= ~job.flag - else - job_support_low |= job.flag - if(JOBCAT_MEDSCI) - switch(level) - if(2) - job_medsci_high = job.flag - job_medsci_med &= ~job.flag - if(3) - job_medsci_med |= job.flag - job_medsci_low &= ~job.flag - else - job_medsci_low |= job.flag - if(JOBCAT_ENGSEC) - switch(level) - if(2) - job_engsec_high = job.flag - job_engsec_med &= ~job.flag - if(3) - job_engsec_med |= job.flag - job_engsec_low &= ~job.flag - else - job_engsec_low |= job.flag - if(JOBCAT_KARMA) - switch(level) - if(2) - job_karma_high = job.flag - job_karma_med &= ~job.flag - if(3) - job_karma_med |= job.flag - job_karma_low &= ~job.flag - else - job_karma_low |= job.flag - return 1 - -/datum/preferences/proc/process_link(mob/user, list/href_list) - if(!user) return - - var/datum/species/S = GLOB.all_species[species] - if(href_list["preference"] == "job") - switch(href_list["task"]) - if("close") - user << browse(null, "window=mob_occupation") - ShowChoices(user) - if("reset") - ResetJobs() - SetChoices(user) - if("learnaboutselection") - if(GLOB.configuration.url.wiki_url) - if(alert("Would you like to open the Job selection info in your browser?", "Open Job Selection", "Yes", "No") == "Yes") - user << link("[GLOB.configuration.url.wiki_url]/index.php/Job_Selection_and_Assignment") - else - to_chat(user, "The Wiki URL is not set in the server configuration.") - if("random") - if(alternate_option == GET_RANDOM_JOB || alternate_option == BE_ASSISTANT) - alternate_option += 1 - else if(alternate_option == RETURN_TO_LOBBY) - alternate_option = 0 - else - return 0 - SetChoices(user) - if("alt_title") - var/datum/job/job = locate(href_list["job"]) - if(job) - var/choices = list(job.title) + job.alt_titles - var/choice = input("Pick a title for [job.title].", "Character Generation", GetPlayerAltTitle(job)) as anything in choices | null - if(choice) - SetPlayerAltTitle(job, choice) - SetChoices(user) - if("input") - SetJob(user, href_list["text"]) - if("setJobLevel") - UpdateJobPreference(user, href_list["text"], text2num(href_list["level"])) + for(var/I in loadout_cache) + var/datum/gear/G = GLOB.gear_datums[text2path(I) || I] + if(!G) + continue + var/added_cost = G.cost + if(!G.subtype_selection_cost) // If listings of the same subtype shouldn't have their cost added. + if(G.main_typepath in type_blacklist) + added_cost = 0 else - SetChoices(user) - return 1 - else if(href_list["preference"] == "disabilities") + type_blacklist += G.main_typepath - switch(href_list["task"]) - if("close") - user << browse(null, "window=disabil") - ShowChoices(user) - if("reset") - disabilities=0 - SetDisabilities(user) - if("input") - var/dflag=text2num(href_list["disability"]) - if(dflag >= 0) // Toggle it. - disabilities ^= text2num(href_list["disability"]) //MAGIC - SetDisabilities(user) - else - SetDisabilities(user) - return 1 - - else if(href_list["preference"] == "records") - if(text2num(href_list["record"]) >= 1) - SetRecords(user) - return - else - user << browse(null, "window=records") - if(href_list["task"] == "med_record") - var/medmsg = input(usr,"Set your medical notes here.","Medical Records",html_decode(med_record)) as message - - if(medmsg != null) - medmsg = copytext(medmsg, 1, MAX_PAPER_MESSAGE_LEN) - medmsg = html_encode(medmsg) - - med_record = medmsg - SetRecords(user) - - if(href_list["task"] == "sec_record") - var/secmsg = input(usr,"Set your security notes here.","Security Records",html_decode(sec_record)) as message - - if(secmsg != null) - secmsg = copytext(secmsg, 1, MAX_PAPER_MESSAGE_LEN) - secmsg = html_encode(secmsg) - - sec_record = secmsg - SetRecords(user) - if(href_list["task"] == "gen_record") - var/genmsg = input(usr,"Set your employment notes here.","Employment Records",html_decode(gen_record)) as message - - if(genmsg != null) - genmsg = copytext(genmsg, 1, MAX_PAPER_MESSAGE_LEN) - genmsg = html_encode(genmsg) - - gen_record = genmsg - SetRecords(user) - - if(href_list["preference"] == "gear") - if(href_list["toggle_gear"]) - var/datum/gear/TG = GLOB.gear_datums[href_list["toggle_gear"]] - if(TG.display_name in loadout_gear) - loadout_gear -= TG.display_name - else - if(TG.donator_tier && user.client.donator_level < TG.donator_tier) - to_chat(user, "That gear is only available at a higher donation tier than you are on.") - return - var/total_cost = 0 - var/list/type_blacklist = list() - for(var/gear_name in loadout_gear) - var/datum/gear/G = GLOB.gear_datums[gear_name] - if(istype(G)) - if(!G.subtype_cost_overlap) - if(G.subtype_path in type_blacklist) - continue - type_blacklist += G.subtype_path - total_cost += G.cost - - if((total_cost + TG.cost) <= max_gear_slots) - loadout_gear += TG.display_name - - else if(href_list["gear"] && href_list["tweak"]) - var/datum/gear/gear = GLOB.gear_datums[href_list["gear"]] - var/datum/gear_tweak/tweak = locate(href_list["tweak"]) - if(!tweak || !istype(gear) || !(tweak in gear.gear_tweaks)) - return - var/metadata = tweak.get_metadata(user, get_tweak_metadata(gear, tweak)) - if(!metadata) - return - set_tweak_metadata(gear, tweak, metadata) - else if(href_list["select_category"]) - gear_tab = href_list["select_category"] - else if(href_list["clear_loadout"]) - loadout_gear.Cut() - - ShowChoices(user) - return - - switch(href_list["task"]) - if("random") - var/datum/robolimb/robohead - if(S.bodyflags & ALL_RPARTS) - var/head_model = "[!rlimb_data["head"] ? "Morpheus Cyberkinetics" : rlimb_data["head"]]" - robohead = GLOB.all_robolimbs[head_model] - switch(href_list["preference"]) - if("name") - real_name = random_name(gender,species) - if(isnewplayer(user)) - var/mob/new_player/N = user - N.new_player_panel_proc() - if("age") - age = rand(AGE_MIN, AGE_MAX) - if("hair") - if(species in list("Human", "Unathi", "Tajaran", "Skrell", "Machine", "Wryn", "Vulpkanin", "Vox")) - h_colour = rand_hex_color() - if("secondary_hair") - if(species in list("Human", "Unathi", "Tajaran", "Skrell", "Machine", "Wryn", "Vulpkanin", "Vox")) - h_sec_colour = rand_hex_color() - if("h_style") - h_style = random_hair_style(gender, species, robohead) - if("facial") - if(species in list("Human", "Unathi", "Tajaran", "Skrell", "Machine", "Wryn", "Vulpkanin", "Vox")) - f_colour = rand_hex_color() - if("secondary_facial") - if(species in list("Human", "Unathi", "Tajaran", "Skrell", "Machine", "Wryn", "Vulpkanin", "Vox")) - f_sec_colour = rand_hex_color() - if("f_style") - f_style = random_facial_hair_style(gender, species, robohead) - if("headaccessory") - if(S.bodyflags & HAS_HEAD_ACCESSORY) //Species that have head accessories. - hacc_colour = rand_hex_color() - if("ha_style") - if(S.bodyflags & HAS_HEAD_ACCESSORY) //Species that have head accessories. - ha_style = random_head_accessory(species) - if("m_style_head") - if(S.bodyflags & HAS_HEAD_MARKINGS) //Species with head markings. - m_styles["head"] = random_marking_style("head", species, robohead, null, alt_head) - if("m_head_colour") - if(S.bodyflags & HAS_HEAD_MARKINGS) //Species with head markings. - m_colours["head"] = rand_hex_color() - if("m_style_body") - if(S.bodyflags & HAS_BODY_MARKINGS) //Species with body markings. - m_styles["body"] = random_marking_style("body", species) - if("m_body_colour") - if(S.bodyflags & HAS_BODY_MARKINGS) //Species with body markings. - m_colours["body"] = rand_hex_color() - if("m_style_tail") - if(S.bodyflags & HAS_TAIL_MARKINGS) //Species with tail markings. - m_styles["tail"] = random_marking_style("tail", species, null, body_accessory) - if("m_tail_colour") - if(S.bodyflags & HAS_TAIL_MARKINGS) //Species with tail markings. - m_colours["tail"] = rand_hex_color() - if("underwear") - underwear = random_underwear(gender, species) - ShowChoices(user) - if("undershirt") - undershirt = random_undershirt(gender, species) - ShowChoices(user) - if("socks") - socks = random_socks(gender, species) - ShowChoices(user) - if("eyes") - e_colour = rand_hex_color() - if("s_tone") - if(S.bodyflags & (HAS_SKIN_TONE|HAS_ICON_SKIN_TONE)) - s_tone = random_skin_tone() - if("s_color") - if(S.bodyflags & HAS_SKIN_COLOR) - s_colour = rand_hex_color() - if("bag") - backbag = pick(GLOB.backbaglist) - /*if("skin_style") - h_style = random_skin_style(gender)*/ - if("all") - random_character() - if("input") - switch(href_list["preference"]) - if("name") - var/raw_name = clean_input("Choose your character's name:", "Character Preference", , user) - if(!isnull(raw_name)) // Check to ensure that the user entered text (rather than cancel.) - var/new_name = reject_bad_name(raw_name, 1) - if(new_name) - real_name = new_name - if(isnewplayer(user)) - var/mob/new_player/N = user - N.new_player_panel_proc() - else - to_chat(user, "Invalid name. Your name should be at least 2 and at most [MAX_NAME_LEN] characters long. It may only contain the characters A-Z, a-z, -, ' and .") - - if("age") - var/new_age = input(user, "Choose your character's age:\n([AGE_MIN]-[AGE_MAX])", "Character Preference") as num|null - if(new_age) - age = max(min(round(text2num(new_age)), AGE_MAX),AGE_MIN) - if("species") - var/list/new_species = list("Human", "Tajaran", "Skrell", "Unathi", "Diona", "Vulpkanin") - var/prev_species = species - - for(var/species in GLOB.whitelisted_species) - if(is_alien_whitelisted(user, species)) - new_species += species - - species = input("Please select a species", "Character Generation", null) in sortTim(new_species, /proc/cmp_text_asc) - var/datum/species/NS = GLOB.all_species[species] - if(!istype(NS)) //The species was invalid. Notify the user and fail out. - species = prev_species - to_chat(user, "Invalid species, please pick something else.") - return - if(prev_species != species) - if(NS.has_gender && gender == PLURAL) - gender = pick(MALE,FEMALE) - var/datum/robolimb/robohead - if(NS.bodyflags & ALL_RPARTS) - var/head_model = "[!rlimb_data["head"] ? "Morpheus Cyberkinetics" : rlimb_data["head"]]" - robohead = GLOB.all_robolimbs[head_model] - //grab one of the valid hair styles for the newly chosen species - h_style = random_hair_style(gender, species, robohead) - - //grab one of the valid facial hair styles for the newly chosen species - f_style = random_facial_hair_style(gender, species, robohead) - - if(NS.bodyflags & HAS_HEAD_ACCESSORY) //Species that have head accessories. - ha_style = random_head_accessory(species) - else - ha_style = "None" // No Vulp ears on Unathi - hacc_colour = rand_hex_color() - - if(NS.bodyflags & HAS_HEAD_MARKINGS) //Species with head markings. - m_styles["head"] = random_marking_style("head", species, robohead, null, alt_head) - else - m_styles["head"] = "None" - m_colours["head"] = "#000000" - - if(NS.bodyflags & HAS_BODY_MARKINGS) //Species with body markings/tattoos. - m_styles["body"] = random_marking_style("body", species) - else - m_styles["body"] = "None" - m_colours["body"] = "#000000" - - if(NS.bodyflags & HAS_TAIL_MARKINGS) //Species with tail markings. - m_styles["tail"] = random_marking_style("tail", species, null, body_accessory) - else - m_styles["tail"] = "None" - m_colours["tail"] = "#000000" - - // Don't wear another species' underwear! - var/datum/sprite_accessory/SA = GLOB.underwear_list[underwear] - if(!SA || !(species in SA.species_allowed)) - underwear = random_underwear(gender, species) - - SA = GLOB.undershirt_list[undershirt] - if(!SA || !(species in SA.species_allowed)) - undershirt = random_undershirt(gender, species) - - SA = GLOB.socks_list[socks] - if(!SA || !(species in SA.species_allowed)) - socks = random_socks(gender, species) - - //reset skin tone and colour - if(NS.bodyflags & (HAS_SKIN_TONE|HAS_ICON_SKIN_TONE)) - random_skin_tone(species) - else - s_tone = 0 - - if(!(NS.bodyflags & HAS_SKIN_COLOR)) - s_colour = "#000000" - - alt_head = "None" //No alt heads on species that don't have them. - speciesprefs = 0 //My Vox tank shouldn't change how my future Grey talks. - - body_accessory = null //no vulptail on humans damnit - - //Reset prosthetics. - organ_data = list() - rlimb_data = list() - - if(!(NS.autohiss_basic_map)) - autohiss_mode = AUTOHISS_OFF - if("speciesprefs") - speciesprefs = !speciesprefs //Starts 0, so if someone clicks the button up top there, this won't be 0 anymore. If they click it again, it'll go back to 0. - if("language") -// var/languages_available - var/list/new_languages = list("None") - for(var/L in GLOB.all_languages) - var/datum/language/lang = GLOB.all_languages[L] - if(!(lang.flags & RESTRICTED)) - new_languages += lang.name - - language = input("Please select a secondary language", "Character Generation", null) in sortTim(new_languages, /proc/cmp_text_asc) - - if("autohiss_mode") - if(S.autohiss_basic_map) - var/list/autohiss_choice = list("Off" = AUTOHISS_OFF, "Basic" = AUTOHISS_BASIC, "Full" = AUTOHISS_FULL) - var/new_autohiss_pref = input(user, "Choose your character's auto-accent level:", "Character Preference") as null|anything in autohiss_choice - if(new_autohiss_pref) - autohiss_mode = autohiss_choice[new_autohiss_pref] - - if("metadata") - var/new_metadata = input(user, "Enter any information you'd like others to see, such as Roleplay-preferences:", "Game Preference" , metadata) as message|null - if(new_metadata) - metadata = sanitize(copytext(new_metadata,1,MAX_MESSAGE_LEN)) - - if("b_type") - var/new_b_type = input(user, "Choose your character's blood-type:", "Character Preference") as null|anything in list( "A+", "A-", "B+", "B-", "AB+", "AB-", "O+", "O-" ) - if(new_b_type) - b_type = new_b_type - - if("hair") - if(species in list("Human", "Unathi", "Tajaran", "Skrell", "Machine", "Vulpkanin", "Vox")) //Species that have hair. (No HAS_HAIR flag) - var/input = "Choose your character's hair colour:" - var/new_hair = input(user, input, "Character Preference", h_colour) as color|null - if(new_hair) - h_colour = new_hair - - if("secondary_hair") - if(species in list("Human", "Unathi", "Tajaran", "Skrell", "Machine", "Vulpkanin", "Vox")) - var/datum/sprite_accessory/hair_style = GLOB.hair_styles_public_list[h_style] - if(hair_style.secondary_theme && !hair_style.no_sec_colour) - var/new_hair = input(user, "Choose your character's secondary hair colour:", "Character Preference", h_sec_colour) as color|null - if(new_hair) - h_sec_colour = new_hair - - if("h_style") - var/list/valid_hairstyles = list() - for(var/hairstyle in GLOB.hair_styles_public_list) - var/datum/sprite_accessory/SA = GLOB.hair_styles_public_list[hairstyle] - - if(hairstyle == "Bald") //Just in case. - valid_hairstyles += hairstyle - continue - if(S.bodyflags & ALL_RPARTS) //Species that can use prosthetic heads. - var/head_model - if(!rlimb_data["head"]) //Handle situations where the head is default. - head_model = "Morpheus Cyberkinetics" - else - head_model = rlimb_data["head"] - var/datum/robolimb/robohead = GLOB.all_robolimbs[head_model] - if((species in SA.species_allowed) && robohead.is_monitor && ((SA.models_allowed && (robohead.company in SA.models_allowed)) || !SA.models_allowed)) //If this is a hair style native to the user's species, check to see if they have a head with an ipc-style screen and that the head's company is in the screen style's allowed models list. - valid_hairstyles += hairstyle //Give them their hairstyles if they do. - else - if(!robohead.is_monitor && ("Human" in SA.species_allowed)) /*If the hairstyle is not native to the user's species and they're using a head with an ipc-style screen, don't let them access it. - But if the user has a robotic humanoid head and the hairstyle can fit humans, let them use it as a wig. */ - valid_hairstyles += hairstyle - else //If the user is not a species who can have robotic heads, use the default handling. - if(species in SA.species_allowed) //If the user's head is of a species the hairstyle allows, add it to the list. - valid_hairstyles += hairstyle - - sortTim(valid_hairstyles, /proc/cmp_text_asc) //this alphabetizes the list - var/new_h_style = input(user, "Choose your character's hair style:", "Character Preference") as null|anything in valid_hairstyles - if(new_h_style) - h_style = new_h_style - - if("headaccessory") - if(S.bodyflags & HAS_HEAD_ACCESSORY) //Species with head accessories. - var/input = "Choose the colour of your your character's head accessory:" - var/new_head_accessory = input(user, input, "Character Preference", hacc_colour) as color|null - if(new_head_accessory) - hacc_colour = new_head_accessory - - if("ha_style") - if(S.bodyflags & HAS_HEAD_ACCESSORY) //Species with head accessories. - var/list/valid_head_accessory_styles = list() - for(var/head_accessory_style in GLOB.head_accessory_styles_list) - var/datum/sprite_accessory/H = GLOB.head_accessory_styles_list[head_accessory_style] - if(!(species in H.species_allowed)) - continue - - valid_head_accessory_styles += head_accessory_style - - sortTim(valid_head_accessory_styles, /proc/cmp_text_asc) - var/new_head_accessory_style = input(user, "Choose the style of your character's head accessory:", "Character Preference") as null|anything in valid_head_accessory_styles - if(new_head_accessory_style) - ha_style = new_head_accessory_style - - if("alt_head") - if(organ_data["head"] == "cyborg") - return - if(S.bodyflags & HAS_ALT_HEADS) //Species with alt heads. - var/list/valid_alt_heads = list() - valid_alt_heads["None"] = GLOB.alt_heads_list["None"] //The only null entry should be the "None" option - for(var/alternate_head in GLOB.alt_heads_list) - var/datum/sprite_accessory/alt_heads/head = GLOB.alt_heads_list[alternate_head] - if(!(species in head.species_allowed)) - continue - - valid_alt_heads += alternate_head - - var/new_alt_head = input(user, "Choose your character's alternate head style:", "Character Preference") as null|anything in valid_alt_heads - if(new_alt_head) - alt_head = new_alt_head - if(m_styles["head"]) - var/head_marking = m_styles["head"] - var/datum/sprite_accessory/body_markings/head/head_marking_style = GLOB.marking_styles_list[head_marking] - if(!head_marking_style.heads_allowed || (!("All" in head_marking_style.heads_allowed) && !(alt_head in head_marking_style.heads_allowed))) - m_styles["head"] = "None" - - if("m_style_head") - if(S.bodyflags & HAS_HEAD_MARKINGS) //Species with head markings. - var/list/valid_markings = list() - valid_markings["None"] = GLOB.marking_styles_list["None"] - for(var/markingstyle in GLOB.marking_styles_list) - var/datum/sprite_accessory/body_markings/head/M = GLOB.marking_styles_list[markingstyle] - if(!(species in M.species_allowed)) - continue - if(M.marking_location != "head") - continue - if(alt_head && alt_head != "None") - if(!("All" in M.heads_allowed) && !(alt_head in M.heads_allowed)) - continue - else - if(M.heads_allowed && !("All" in M.heads_allowed)) - continue - - if(S.bodyflags & ALL_RPARTS) //Species that can use prosthetic heads. - var/head_model - if(!rlimb_data["head"]) //Handle situations where the head is default. - head_model = "Morpheus Cyberkinetics" - else - head_model = rlimb_data["head"] - var/datum/robolimb/robohead = GLOB.all_robolimbs[head_model] - if(robohead.is_monitor && M.name != "None") //If the character can have prosthetic heads and they have the default Morpheus head (or another monitor-head), no optic markings. - continue - else if(!robohead.is_monitor && M.name != "None") //Otherwise, if they DON'T have the default head and the head's not a monitor but the head's not in the style's list of allowed models, skip. - if(!(robohead.company in M.models_allowed)) - continue - - valid_markings += markingstyle - sortTim(valid_markings, /proc/cmp_text_asc) - var/new_marking_style = input(user, "Choose the style of your character's head markings:", "Character Preference", m_styles["head"]) as null|anything in valid_markings - if(new_marking_style) - m_styles["head"] = new_marking_style - - if("m_head_colour") - if(S.bodyflags & HAS_HEAD_MARKINGS) //Species with head markings. - var/input = "Choose the colour of your your character's head markings:" - var/new_markings = input(user, input, "Character Preference", m_colours["head"]) as color|null - if(new_markings) - m_colours["head"] = new_markings - - if("m_style_body") - if(S.bodyflags & HAS_BODY_MARKINGS) //Species with body markings/tattoos. - var/list/valid_markings = list() - valid_markings["None"] = GLOB.marking_styles_list["None"] - for(var/markingstyle in GLOB.marking_styles_list) - var/datum/sprite_accessory/M = GLOB.marking_styles_list[markingstyle] - if(!(species in M.species_allowed)) - continue - if(M.marking_location != "body") - continue - - valid_markings += markingstyle - sortTim(valid_markings, /proc/cmp_text_asc) - var/new_marking_style = input(user, "Choose the style of your character's body markings:", "Character Preference", m_styles["body"]) as null|anything in valid_markings - if(new_marking_style) - m_styles["body"] = new_marking_style - - if("m_body_colour") - if(S.bodyflags & HAS_BODY_MARKINGS) //Species with body markings/tattoos. - var/input = "Choose the colour of your your character's body markings:" - var/new_markings = input(user, input, "Character Preference", m_colours["body"]) as color|null - if(new_markings) - m_colours["body"] = new_markings - - if("m_style_tail") - if(S.bodyflags & HAS_TAIL_MARKINGS) //Species with tail markings. - var/list/valid_markings = list() - valid_markings["None"] = GLOB.marking_styles_list["None"] - for(var/markingstyle in GLOB.marking_styles_list) - var/datum/sprite_accessory/body_markings/tail/M = GLOB.marking_styles_list[markingstyle] - if(M.marking_location != "tail") - continue - if(!(species in M.species_allowed)) - continue - if(!body_accessory) - if(M.tails_allowed) - continue - else - if(!M.tails_allowed || !(body_accessory in M.tails_allowed)) - continue - - valid_markings += markingstyle - sortTim(valid_markings, /proc/cmp_text_asc) - var/new_marking_style = input(user, "Choose the style of your character's tail markings:", "Character Preference", m_styles["tail"]) as null|anything in valid_markings - if(new_marking_style) - m_styles["tail"] = new_marking_style - - if("m_tail_colour") - if(S.bodyflags & HAS_TAIL_MARKINGS) //Species with tail markings. - var/input = "Choose the colour of your your character's tail markings:" - var/new_markings = input(user, input, "Character Preference", m_colours["tail"]) as color|null - if(new_markings) - m_colours["tail"] = new_markings - - if("body_accessory") - var/list/possible_body_accessories = list() - if(check_rights(R_ADMIN, 1, user)) - possible_body_accessories = GLOB.body_accessory_by_name.Copy() - else - for(var/B in GLOB.body_accessory_by_name) - var/datum/body_accessory/accessory = GLOB.body_accessory_by_name[B] - if(!istype(accessory)) - possible_body_accessories += "None" //the only null entry should be the "None" option - continue - if(species in accessory.allowed_species) - possible_body_accessories += B - sortTim(possible_body_accessories, /proc/cmp_text_asc) - var/new_body_accessory = input(user, "Choose your body accessory:", "Character Preference") as null|anything in possible_body_accessories - if(new_body_accessory) - m_styles["tail"] = "None" - body_accessory = (new_body_accessory == "None") ? null : new_body_accessory - - if("facial") - if(species in list("Human", "Unathi", "Tajaran", "Skrell", "Machine", "Vulpkanin", "Vox")) //Species that have facial hair. (No HAS_HAIR_FACIAL flag) - var/new_facial = input(user, "Choose your character's facial-hair colour:", "Character Preference", f_colour) as color|null - if(new_facial) - f_colour = new_facial - - if("secondary_facial") - if(species in list("Human", "Unathi", "Tajaran", "Skrell", "Machine", "Vulpkanin", "Vox")) - var/datum/sprite_accessory/facial_hair_style = GLOB.facial_hair_styles_list[f_style] - if(facial_hair_style.secondary_theme && !facial_hair_style.no_sec_colour) - var/new_facial = input(user, "Choose your character's secondary facial-hair colour:", "Character Preference", f_sec_colour) as color|null - if(new_facial) - f_sec_colour = new_facial - - if("f_style") - var/list/valid_facial_hairstyles = list() - for(var/facialhairstyle in GLOB.facial_hair_styles_list) - var/datum/sprite_accessory/SA = GLOB.facial_hair_styles_list[facialhairstyle] - - if(facialhairstyle == "Shaved") //Just in case. - valid_facial_hairstyles += facialhairstyle - continue - if(gender == MALE && SA.gender == FEMALE) - continue - if(gender == FEMALE && SA.gender == MALE) - continue - if(S.bodyflags & ALL_RPARTS) //Species that can use prosthetic heads. - var/head_model - if(!rlimb_data["head"]) //Handle situations where the head is default. - head_model = "Morpheus Cyberkinetics" - else - head_model = rlimb_data["head"] - var/datum/robolimb/robohead = GLOB.all_robolimbs[head_model] - if((species in SA.species_allowed) && robohead.is_monitor && ((SA.models_allowed && (robohead.company in SA.models_allowed)) || !SA.models_allowed)) //If this is a facial hair style native to the user's species, check to see if they have a head with an ipc-style screen and that the head's company is in the screen style's allowed models list. - valid_facial_hairstyles += facialhairstyle //Give them their facial hairstyles if they do. - else - if(!robohead.is_monitor && ("Human" in SA.species_allowed)) /*If the facial hairstyle is not native to the user's species and they're using a head with an ipc-style screen, don't let them access it. - But if the user has a robotic humanoid head and the facial hairstyle can fit humans, let them use it as a wig. */ - valid_facial_hairstyles += facialhairstyle - else //If the user is not a species who can have robotic heads, use the default handling. - if(species in SA.species_allowed) //If the user's head is of a species the facial hair style allows, add it to the list. - valid_facial_hairstyles += facialhairstyle - sortTim(valid_facial_hairstyles, /proc/cmp_text_asc) - var/new_f_style = input(user, "Choose your character's facial-hair style:", "Character Preference") as null|anything in valid_facial_hairstyles - if(new_f_style) - f_style = new_f_style - - if("underwear") - var/list/valid_underwear = list() - for(var/underwear in GLOB.underwear_list) - var/datum/sprite_accessory/SA = GLOB.underwear_list[underwear] - if(gender == MALE && SA.gender == FEMALE) - continue - if(gender == FEMALE && SA.gender == MALE) - continue - if(!(species in SA.species_allowed)) - continue - valid_underwear[underwear] = GLOB.underwear_list[underwear] - sortTim(valid_underwear, /proc/cmp_text_asc) - var/new_underwear = input(user, "Choose your character's underwear:", "Character Preference") as null|anything in valid_underwear - ShowChoices(user) - if(new_underwear) - underwear = new_underwear - if("undershirt") - var/list/valid_undershirts = list() - for(var/undershirt in GLOB.undershirt_list) - var/datum/sprite_accessory/SA = GLOB.undershirt_list[undershirt] - if(gender == MALE && SA.gender == FEMALE) - continue - if(gender == FEMALE && SA.gender == MALE) - continue - if(!(species in SA.species_allowed)) - continue - valid_undershirts[undershirt] = GLOB.undershirt_list[undershirt] - sortTim(valid_undershirts, /proc/cmp_text_asc) - var/new_undershirt = input(user, "Choose your character's undershirt:", "Character Preference") as null|anything in valid_undershirts - ShowChoices(user) - if(new_undershirt) - undershirt = new_undershirt - - if("socks") - var/list/valid_sockstyles = list() - for(var/sockstyle in GLOB.socks_list) - var/datum/sprite_accessory/SA = GLOB.socks_list[sockstyle] - if(gender == MALE && SA.gender == FEMALE) - continue - if(gender == FEMALE && SA.gender == MALE) - continue - if(!(species in SA.species_allowed)) - continue - valid_sockstyles[sockstyle] = GLOB.socks_list[sockstyle] - sortTim(valid_sockstyles, /proc/cmp_text_asc) - var/new_socks = input(user, "Choose your character's socks:", "Character Preference") as null|anything in valid_sockstyles - ShowChoices(user) - if(new_socks) - socks = new_socks - - if("eyes") - var/new_eyes = input(user, "Choose your character's eye colour:", "Character Preference", e_colour) as color|null - if(new_eyes) - e_colour = new_eyes - - if("s_tone") - if(S.bodyflags & HAS_SKIN_TONE) - var/new_s_tone = input(user, "Choose your character's skin-tone:\n(Light 1 - 220 Dark)", "Character Preference") as num|null - if(new_s_tone) - s_tone = 35 - max(min(round(new_s_tone), 220), 1) - else if(S.bodyflags & HAS_ICON_SKIN_TONE) - var/const/MAX_LINE_ENTRIES = 4 - var/prompt = "Choose your character's skin tone: 1-[S.icon_skin_tones.len]\n(" - for(var/i = 1 to S.icon_skin_tones.len) - if(i > MAX_LINE_ENTRIES && !((i - 1) % MAX_LINE_ENTRIES)) - prompt += "\n" - prompt += "[i] = [S.icon_skin_tones[i]]" - if(i != S.icon_skin_tones.len) - prompt += ", " - prompt += ")" - var/skin_c = input(user, prompt, "Character Preference") as num|null - if(isnum(skin_c)) - s_tone = max(min(round(skin_c), S.icon_skin_tones.len), 1) - - if("skin") - if((S.bodyflags & HAS_SKIN_COLOR) || GLOB.body_accessory_by_species[species] || check_rights(R_ADMIN, 0, user)) - var/new_skin = input(user, "Choose your character's skin colour: ", "Character Preference", s_colour) as color|null - if(new_skin) - s_colour = new_skin - - if("ooccolor") - var/new_ooccolor = input(user, "Choose your OOC colour:", "Game Preference", ooccolor) as color|null - if(new_ooccolor) - ooccolor = new_ooccolor - - if("bag") - var/new_backbag = input(user, "Choose your character's style of bag:", "Character Preference") as null|anything in GLOB.backbaglist - if(new_backbag) - backbag = new_backbag - - if("nt_relation") - var/new_relation = input(user, "Choose your relation to NT. Note that this represents what others can find out about your character by researching your background, not what your character actually thinks.", "Character Preference") as null|anything in list("Loyal", "Supportive", "Neutral", "Skeptical", "Opposed") - if(new_relation) - nanotrasen_relation = new_relation - - if("flavor_text") - var/msg = input(usr,"Set the flavor text in your 'examine' verb. The flavor text should be a physical descriptor of your character at a glance. SFW Drawn Art of your character is acceptable.","Flavor Text",html_decode(flavor_text)) as message - - if(msg != null) - msg = copytext(msg, 1, MAX_MESSAGE_LEN) - msg = html_encode(msg) - - flavor_text = msg - - if("limbs") - var/valid_limbs = list("Left Leg", "Right Leg", "Left Arm", "Right Arm", "Left Foot", "Right Foot", "Left Hand", "Right Hand") - if(S.bodyflags & ALL_RPARTS) - valid_limbs = list("Torso", "Lower Body", "Head", "Left Leg", "Right Leg", "Left Arm", "Right Arm", "Left Foot", "Right Foot", "Left Hand", "Right Hand") - var/limb_name = input(user, "Which limb do you want to change?") as null|anything in valid_limbs - if(!limb_name) return - - var/limb = null - var/second_limb = null // if you try to change the arm, the hand should also change - var/third_limb = null // if you try to unchange the hand, the arm should also change - var/valid_limb_states = list("Normal", "Amputated", "Prosthesis") - var/no_amputate = 0 - - switch(limb_name) - if("Torso") - limb = "chest" - second_limb = "groin" - no_amputate = 1 - if("Lower Body") - limb = "groin" - no_amputate = 1 - if("Head") - limb = "head" - no_amputate = 1 - if("Left Leg") - limb = "l_leg" - second_limb = "l_foot" - if("Right Leg") - limb = "r_leg" - second_limb = "r_foot" - if("Left Arm") - limb = "l_arm" - second_limb = "l_hand" - if("Right Arm") - limb = "r_arm" - second_limb = "r_hand" - if("Left Foot") - limb = "l_foot" - if(!(S.bodyflags & ALL_RPARTS)) - third_limb = "l_leg" - if("Right Foot") - limb = "r_foot" - if(!(S.bodyflags & ALL_RPARTS)) - third_limb = "r_leg" - if("Left Hand") - limb = "l_hand" - if(!(S.bodyflags & ALL_RPARTS)) - third_limb = "l_arm" - if("Right Hand") - limb = "r_hand" - if(!(S.bodyflags & ALL_RPARTS)) - third_limb = "r_arm" - - var/new_state = input(user, "What state do you wish the limb to be in?") as null|anything in valid_limb_states - if(!new_state) return - - switch(new_state) - if("Normal") - if(limb == "head") - m_styles["head"] = "None" - h_style = GLOB.hair_styles_public_list["Bald"] - f_style = GLOB.facial_hair_styles_list["Shaved"] - organ_data[limb] = null - rlimb_data[limb] = null - if(third_limb) - organ_data[third_limb] = null - rlimb_data[third_limb] = null - if("Amputated") - if(!no_amputate) - organ_data[limb] = "amputated" - rlimb_data[limb] = null - if(second_limb) - organ_data[second_limb] = "amputated" - rlimb_data[second_limb] = null - if("Prosthesis") - var/choice - var/subchoice - var/datum/robolimb/R = new() - var/in_model - var/robolimb_companies = list() - for(var/limb_type in typesof(/datum/robolimb)) //This loop populates a list of companies that offer the limb the user selected previously as one of their cybernetic products. - R = new limb_type() - if(!R.unavailable_at_chargen && (limb in R.parts) && R.has_subtypes) //Ensures users can only choose companies that offer the parts they want, that singular models get added to the list as well companies that offer more than one model, and... - robolimb_companies[R.company] = R //List only main brands that have the parts we're looking for. - R = new() //Re-initialize R. - - choice = input(user, "Which manufacturer do you wish to use for this limb?") as null|anything in robolimb_companies //Choose from a list of companies that offer the part the user wants. - if(!choice) - return - R.company = choice - R = GLOB.all_robolimbs[R.company] - if(R.has_subtypes == 1) //If the company the user selected provides more than just one base model, lets handle it. - var/list/robolimb_models = list() - for(var/limb_type in typesof(R)) //Handling the different models of parts that manufacturers can provide. - var/datum/robolimb/L = new limb_type() - if(limb in L.parts) //Make sure that only models that provide the parts the user needs populate the list. - robolimb_models[L.company] = L - if(robolimb_models.len == 1) //If there's only one model available in the list, autoselect it to avoid having to bother the user with a dialog that provides only one option. - subchoice = L.company //If there ends up being more than one model populating the list, subchoice will be overwritten later anyway, so this isn't a problem. - if(second_limb in L.parts) //If the child limb of the limb the user selected is also present in the model's parts list, state it's been found so the second limb can be set later. - in_model = 1 - if(robolimb_models.len > 1) //If there's more than one model in the list that can provide the part the user wants, let them choose. - subchoice = input(user, "Which model of [choice] [limb_name] do you wish to use?") as null|anything in robolimb_models - if(subchoice) - choice = subchoice - if(limb in list("head", "chest", "groin")) - if(!(S.bodyflags & ALL_RPARTS)) - return - if(limb == "head") - ha_style = "None" - alt_head = null - h_style = GLOB.hair_styles_public_list["Bald"] - f_style = GLOB.facial_hair_styles_list["Shaved"] - m_styles["head"] = "None" - rlimb_data[limb] = choice - organ_data[limb] = "cyborg" - if(second_limb) - if(subchoice) - if(in_model) - rlimb_data[second_limb] = choice - organ_data[second_limb] = "cyborg" - else - rlimb_data[second_limb] = choice - organ_data[second_limb] = "cyborg" - if("organs") - var/organ_name = input(user, "Which internal function do you want to change?") as null|anything in list("Eyes", "Ears", "Heart", "Lungs", "Liver", "Kidneys") - if(!organ_name) - return - - var/organ = null - switch(organ_name) - if("Eyes") - organ = "eyes" - if("Ears") - organ = "ears" - if("Heart") - organ = "heart" - if("Lungs") - organ = "lungs" - if("Liver") - organ = "liver" - if("Kidneys") - organ = "kidneys" - - var/new_state = input(user, "What state do you wish the organ to be in?") as null|anything in list("Normal", "Cybernetic") - if(!new_state) return - - switch(new_state) - if("Normal") - organ_data[organ] = null - if("Cybernetic") - organ_data[organ] = "cybernetic" - - if("clientfps") - var/version_message - if(user.client && user.client.byond_version < 511) - version_message = "\nYou need to be using byond version 511 or later to take advantage of this feature, your version of [user.client.byond_version] is too low" - if(world.byond_version < 511) - version_message += "\nThis server does not currently support client side fps. You can set now for when it does." - var/desiredfps = input(user, "Choose your desired fps.[version_message]\n(0 = synced with server tick rate (currently:[world.fps]))", "Character Preference", clientfps) as null|num - if(!isnull(desiredfps)) - clientfps = desiredfps - if(world.byond_version >= 511 && user.client && user.client.byond_version >= 511) - parent.fps = clientfps - - else - switch(href_list["preference"]) - if("publicity") - if(unlock_content) - toggles ^= PREFTOGGLE_MEMBER_PUBLIC - - if("donor_public") - if(user.client.donator_level > 0) - toggles ^= PREFTOGGLE_DONATOR_PUBLIC - - if("gender") - if(!S.has_gender) - var/newgender = input(user, "Choose Gender:") as null|anything in list("Male", "Female", "Genderless") - switch(newgender) - if("Male") - gender = MALE - if("Female") - gender = FEMALE - if("Genderless") - gender = PLURAL - else - if(gender == MALE) - gender = FEMALE - else - gender = MALE - underwear = random_underwear(gender) - - if("hear_adminhelps") - sound ^= SOUND_ADMINHELP - if("ui") - switch(UI_style) - if("Midnight") - UI_style = "Plasmafire" - if("Plasmafire") - UI_style = "Retro" - if("Retro") - UI_style = "Slimecore" - if("Slimecore") - UI_style = "Operative" - if("Operative") - UI_style = "White" - else - UI_style = "Midnight" - - if(ishuman(usr)) //mid-round preference changes, for aesthetics - var/mob/living/carbon/human/H = usr - H.remake_hud() - - if("tgui") - toggles2 ^= PREFTOGGLE_2_FANCYUI - - if("ghost_att_anim") - toggles2 ^= PREFTOGGLE_2_ITEMATTACK - - if("winflash") - toggles2 ^= PREFTOGGLE_2_WINDOWFLASHING - - if("afk_watch") - if(!(toggles2 & PREFTOGGLE_2_AFKWATCH)) - to_chat(user, "You will now get put into cryo dorms after [GLOB.configuration.afk.auto_cryo_minutes] minutes. \ - Then after [GLOB.configuration.afk.auto_despawn_minutes] minutes you will be fully despawned. You will receive a visual and auditory warning before you will be put into cryodorms.") - else - to_chat(user, "Automatic cryoing turned off.") - toggles2 ^= PREFTOGGLE_2_AFKWATCH - - if("UIcolor") - var/UI_style_color_new = input(user, "Choose your UI color, dark colors are not recommended!", UI_style_color) as color|null - if(!UI_style_color_new) return - UI_style_color = UI_style_color_new - - if(ishuman(usr)) //mid-round preference changes, for aesthetics - var/mob/living/carbon/human/H = usr - H.remake_hud() - - if("UIalpha") - var/UI_style_alpha_new = input(user, "Select a new alpha(transparence) parameter for UI, between 50 and 255", UI_style_alpha) as num - if(!UI_style_alpha_new || !(UI_style_alpha_new <= 255 && UI_style_alpha_new >= 50)) - return - UI_style_alpha = UI_style_alpha_new - - if(ishuman(usr)) //mid-round preference changes, for aesthetics - var/mob/living/carbon/human/H = usr - H.remake_hud() - - if("be_special") - var/r = href_list["role"] - if(r in GLOB.special_roles) - be_special ^= r - - if("name") - be_random_name = !be_random_name - - if("randomslot") - toggles2 ^= PREFTOGGLE_2_RANDOMSLOT - if(isnewplayer(usr)) - var/mob/new_player/N = usr - N.new_player_panel_proc() - - if("hear_midis") - sound ^= SOUND_MIDI - - if("lobby_music") - sound ^= SOUND_LOBBY - if((sound & SOUND_LOBBY) && user.client) - user.client.playtitlemusic() - else - user.stop_sound_channel(CHANNEL_LOBBYMUSIC) - - if("ghost_ears") - toggles ^= PREFTOGGLE_CHAT_GHOSTEARS - - if("ghost_sight") - toggles ^= PREFTOGGLE_CHAT_GHOSTSIGHT - - if("ghost_radio") - toggles ^= PREFTOGGLE_CHAT_GHOSTRADIO - - if("ghost_pda") - toggles ^= PREFTOGGLE_CHAT_GHOSTPDA - - if("ghost_anonsay") - toggles2 ^= PREFTOGGLE_2_ANONDCHAT - - if("save") - save_preferences(user) - save_character(user) - - if("reload") - load_preferences(user) - load_character(user) - - if("clear") - if(!saved || real_name != input("This will clear the current slot permanently. Please enter the character's full name to confirm.")) - return FALSE - clear_character_slot(user) - - if("open_load_dialog") - if(!IsGuestKey(user.key)) - open_load_dialog(user) - return 1 - - if("close_load_dialog") - close_load_dialog(user) - - if("changeslot") - if(!load_character(user,text2num(href_list["num"]))) - random_character() - real_name = random_name(gender) - save_character(user) - close_load_dialog(user) - if(isnewplayer(user)) - var/mob/new_player/N = user - N.new_player_panel_proc() - - if("tab") - if(href_list["tab"]) - current_tab = text2num(href_list["tab"]) - - - if("ambientocclusion") - toggles ^= PREFTOGGLE_AMBIENT_OCCLUSION - if(length(parent?.screen)) - var/obj/screen/plane_master/game_world/PM = locate(/obj/screen/plane_master/game_world) in parent.screen - PM.backdrop(parent.mob) - - if("parallax") - var/parallax_styles = list( - "Off" = PARALLAX_DISABLE, - "Low" = PARALLAX_LOW, - "Medium" = PARALLAX_MED, - "High" = PARALLAX_HIGH, - "Insane" = PARALLAX_INSANE - ) - parallax = parallax_styles[input(user, "Pick a parallax style", "Parallax Style") as null|anything in parallax_styles] - if(parent && parent.mob && parent.mob.hud_used) - parent.mob.hud_used.update_parallax_pref() - - if("edit_2fa") - // Do this async so we arent holding up a topic() call - INVOKE_ASYNC(user.client, /client.proc/edit_2fa) - return // We return here to avoid focus being lost - - - ShowChoices(user) - return 1 - -/datum/preferences/proc/copy_to(mob/living/carbon/human/character) - var/datum/species/S = GLOB.all_species[species] - character.set_species(S.type) // Yell at me if this causes everything to melt - if(be_random_name) - real_name = random_name(gender,species) - - character.add_language(language) - - - character.real_name = real_name - character.dna.real_name = real_name - character.name = character.real_name - - character.flavor_text = flavor_text - character.med_record = med_record - character.sec_record = sec_record - character.gen_record = gen_record - - character.change_gender(gender) - character.age = age - - //Head-specific - var/obj/item/organ/external/head/H = character.get_organ("head") - - H.hair_colour = h_colour - - H.sec_hair_colour = h_sec_colour - - H.facial_colour = f_colour - - H.sec_facial_colour = f_sec_colour - - H.h_style = h_style - H.f_style = f_style - - H.alt_head = alt_head - //End of head-specific. - - character.skin_colour = s_colour - - character.s_tone = s_tone - - // Destroy/cyborgize organs - for(var/name in organ_data) - - var/status = organ_data[name] - var/obj/item/organ/external/O = character.bodyparts_by_name[name] - if(O) - if(status == "amputated") - qdel(O.remove(character)) - - else if(status == "cyborg") - if(rlimb_data[name]) - O.robotize(rlimb_data[name], convert_all = 0) - else - O.robotize() - else - var/obj/item/organ/internal/I = character.get_int_organ_tag(name) - if(I) - if(status == "cybernetic") - I.robotize() - - character.dna.blood_type = b_type - - // Wheelchair necessary? - var/obj/item/organ/external/l_foot = character.get_organ("l_foot") - var/obj/item/organ/external/r_foot = character.get_organ("r_foot") - if(!l_foot && !r_foot) - var/obj/structure/chair/wheelchair/W = new /obj/structure/chair/wheelchair(character.loc) - W.buckle_mob(character, TRUE) - - character.underwear = underwear - character.undershirt = undershirt - character.socks = socks - - if(character.dna.species.bodyflags & HAS_HEAD_ACCESSORY) - H.headacc_colour = hacc_colour - H.ha_style = ha_style - if(character.dna.species.bodyflags & HAS_MARKINGS) - character.m_colours = m_colours - character.m_styles = m_styles - - if(body_accessory) - character.body_accessory = GLOB.body_accessory_by_name["[body_accessory]"] - - character.backbag = backbag - - //Debugging report to track down a bug, which randomly assigned the plural gender to people. - if(character.dna.species.has_gender && (character.gender in list(PLURAL, NEUTER))) - if(isliving(src)) //Ghosts get neuter by default - message_admins("[key_name_admin(character)] has spawned with their gender as plural or neuter. Please notify coders.") - character.change_gender(MALE) - - character.change_eye_color(e_colour) - character.original_eye_color = e_colour - - if(disabilities & DISABILITY_FLAG_FAT) - character.dna.SetSEState(GLOB.fatblock, TRUE, TRUE) - character.overeatduration = 600 - character.dna.default_blocks.Add(GLOB.fatblock) - - if(disabilities & DISABILITY_FLAG_NEARSIGHTED) - character.dna.SetSEState(GLOB.glassesblock, TRUE, TRUE) - character.dna.default_blocks.Add(GLOB.glassesblock) - - if(disabilities & DISABILITY_FLAG_BLIND) - character.dna.SetSEState(GLOB.blindblock, TRUE, TRUE) - character.dna.default_blocks.Add(GLOB.blindblock) - - if(disabilities & DISABILITY_FLAG_DEAF) - character.dna.SetSEState(GLOB.deafblock, TRUE, TRUE) - character.dna.default_blocks.Add(GLOB.deafblock) - - if(disabilities & DISABILITY_FLAG_COLOURBLIND) - character.dna.SetSEState(GLOB.colourblindblock, TRUE, TRUE) - character.dna.default_blocks.Add(GLOB.colourblindblock) - - if(disabilities & DISABILITY_FLAG_MUTE) - character.dna.SetSEState(GLOB.muteblock, TRUE, TRUE) - character.dna.default_blocks.Add(GLOB.muteblock) - - if(disabilities & DISABILITY_FLAG_NERVOUS) - character.dna.SetSEState(GLOB.nervousblock, TRUE, TRUE) - character.dna.default_blocks.Add(GLOB.nervousblock) - - if(disabilities & DISABILITY_FLAG_SWEDISH) - character.dna.SetSEState(GLOB.swedeblock, TRUE, TRUE) - character.dna.default_blocks.Add(GLOB.swedeblock) - - if(disabilities & DISABILITY_FLAG_CHAV) - character.dna.SetSEState(GLOB.chavblock, TRUE, TRUE) - character.dna.default_blocks.Add(GLOB.chavblock) - - if(disabilities & DISABILITY_FLAG_LISP) - character.dna.SetSEState(GLOB.lispblock, TRUE, TRUE) - character.dna.default_blocks.Add(GLOB.lispblock) - - if(disabilities & DISABILITY_FLAG_DIZZY) - character.dna.SetSEState(GLOB.dizzyblock, TRUE, TRUE) - character.dna.default_blocks.Add(GLOB.dizzyblock) - - if(disabilities & DISABILITY_FLAG_WINGDINGS && (CAN_WINGDINGS in character.dna.species.species_traits)) - character.dna.SetSEState(GLOB.wingdingsblock, TRUE, TRUE) - character.dna.default_blocks.Add(GLOB.wingdingsblock) - - character.dna.species.handle_dna(character) - - if(character.dna.dirtySE) - character.dna.UpdateSE() - domutcheck(character, MUTCHK_FORCED) //'Activates' all the above disabilities. - - character.dna.ready_dna(character, flatten_SE = 0) - character.sync_organ_dna(assimilate=1) - character.UpdateAppearance() - - // Do the initial caching of the player's body icons. - character.force_update_limbs() - character.update_eyes() - character.regenerate_icons() - -/datum/preferences/proc/open_load_dialog(mob/user) - - var/datum/db_query/query = SSdbcore.NewQuery("SELECT slot, real_name FROM characters WHERE ckey=:ckey ORDER BY slot", list( - "ckey" = user.ckey - )) - var/list/slotnames[max_save_slots] - - if(!query.warn_execute()) - qdel(query) - return - - while(query.NextRow()) - slotnames[text2num(query.item[1])] = query.item[2] - qdel(query) - - var/dat = "" - dat += "
    " - dat += "Select a character slot to load
    " - var/name - - for(var/i in 1 to max_save_slots) - name = slotnames[i] || "Character [i]" - if(i == default_slot) - name = "[name]" - dat += "[name]
    " - - dat += "
    " - dat += "Close
    " - dat += "
    " -// user << browse(dat, "window=saves;size=300x390") - var/datum/browser/popup = new(user, "saves", "
    Character Saves
    ", 300, 390) - popup.set_content(dat) - popup.open(0) - -/datum/preferences/proc/close_load_dialog(mob/user) - user << browse(null, "window=saves") - -//Check if the user has ANY job selected. -/datum/preferences/proc/check_any_job() - return(job_support_high || job_support_med || job_support_low || job_medsci_high || job_medsci_med || job_medsci_low || job_engsec_high || job_engsec_med || job_engsec_low || job_karma_high || job_karma_med || job_karma_low) + if((total_cost + added_cost) > max_gear_slots) + continue // If the final cost is too high, don't add the item. + active_character.loadout_gear += G.type + total_cost += added_cost + return total_cost diff --git a/code/modules/client/preference/preferences_mysql.dm b/code/modules/client/preference/preferences_mysql.dm index 0f589cabaf3..8d8b16ead1e 100644 --- a/code/modules/client/preference/preferences_mysql.dm +++ b/code/modules/client/preference/preferences_mysql.dm @@ -1,32 +1,6 @@ -/datum/preferences/proc/load_preferences(client/C) - - var/datum/db_query/query = SSdbcore.NewQuery({"SELECT - ooccolor, - UI_style, - UI_style_color, - UI_style_alpha, - be_role, - default_slot, - toggles, - toggles_2, - sound, - volume_mixer, - lastchangelog, - exp, - clientfps, - atklog, - fuid, - parallax, - 2fa_status - FROM player - WHERE ckey=:ckey"}, list( - "ckey" = C.ckey - )) - - if(!query.warn_execute()) - qdel(query) - return - +/datum/preferences/proc/load_preferences(datum/db_query/query) + // Looking for the query? + // Check ../login_processing/10-load_preferences.dm //general preferences while(query.NextRow()) @@ -48,8 +22,6 @@ parallax = text2num(query.item[16]) _2fa_status = query.item[17] - qdel(query) - //Sanitize ooccolor = sanitize_hexcolor(ooccolor, initial(ooccolor)) UI_style = sanitize_inlist(UI_style, list("White", "Midnight", "Plasmafire", "Retro", "Slimecore", "Operative"), initial(UI_style)) @@ -65,7 +37,7 @@ atklog = sanitize_integer(atklog, 0, 100, initial(atklog)) fuid = sanitize_integer(fuid, 0, 10000000, initial(fuid)) parallax = sanitize_integer(parallax, 0, 16, initial(parallax)) - return 1 + return TRUE /datum/preferences/proc/save_preferences(client/C) @@ -126,550 +98,23 @@ qdel(query) return 1 -/datum/preferences/proc/load_character(client/C, slot) - saved = FALSE - - if(!slot) - slot = default_slot - slot = sanitize_integer(slot, 1, max_save_slots, initial(default_slot)) - if(slot != default_slot) - default_slot = slot - var/datum/db_query/firstquery = SSdbcore.NewQuery("UPDATE player SET default_slot=:slot WHERE ckey=:ckey", list( - "slot" = slot, - "ckey" = C.ckey - )) - if(!firstquery.warn_execute(async = FALSE)) // Dont make this async. It makes roundstart slow. - qdel(firstquery) - return - qdel(firstquery) - - if(!C) // If the client disconnected during the query, try again later. - qdel(src) - return TRUE - - // Let's not have this explode if you sneeze on the DB - var/datum/db_query/query = SSdbcore.NewQuery({"SELECT - OOC_Notes, - real_name, - name_is_always_random, - gender, - age, - species, - language, - hair_colour, - secondary_hair_colour, - facial_hair_colour, - secondary_facial_hair_colour, - skin_tone, - skin_colour, - marking_colours, - head_accessory_colour, - hair_style_name, - facial_style_name, - marking_styles, - head_accessory_style_name, - alt_head_name, - eye_colour, - underwear, - undershirt, - backbag, - b_type, - alternate_option, - job_support_high, - job_support_med, - job_support_low, - job_medsci_high, - job_medsci_med, - job_medsci_low, - job_engsec_high, - job_engsec_med, - job_engsec_low, - job_karma_high, - job_karma_med, - job_karma_low, - flavor_text, - med_record, - sec_record, - gen_record, - disabilities, - player_alt_titles, - organ_data, - rlimb_data, - nanotrasen_relation, - speciesprefs, - socks, - body_accessory, - gear, - autohiss - FROM characters WHERE ckey=:ckey AND slot=:slot"}, list( - "ckey" = C.ckey, - "slot" = slot - )) - if(!query.warn_execute(async = FALSE)) // Dont make this async. It makes roundstart slow. - qdel(query) - return - - while(query.NextRow()) - //Character - metadata = query.item[1] - real_name = query.item[2] - be_random_name = text2num(query.item[3]) - gender = query.item[4] - age = text2num(query.item[5]) - species = query.item[6] - language = query.item[7] - - h_colour = query.item[8] - h_sec_colour = query.item[9] - f_colour = query.item[10] - f_sec_colour = query.item[11] - s_tone = text2num(query.item[12]) - s_colour = query.item[13] - m_colours = params2list(query.item[14]) - hacc_colour = query.item[15] - h_style = query.item[16] - f_style = query.item[17] - m_styles = params2list(query.item[18]) - ha_style = query.item[19] - alt_head = query.item[20] - e_colour = query.item[21] - underwear = query.item[22] - undershirt = query.item[23] - backbag = query.item[24] - b_type = query.item[25] - - - //Jobs - alternate_option = text2num(query.item[26]) - job_support_high = text2num(query.item[27]) - job_support_med = text2num(query.item[28]) - job_support_low = text2num(query.item[29]) - job_medsci_high = text2num(query.item[30]) - job_medsci_med = text2num(query.item[31]) - job_medsci_low = text2num(query.item[32]) - job_engsec_high = text2num(query.item[33]) - job_engsec_med = text2num(query.item[34]) - job_engsec_low = text2num(query.item[35]) - job_karma_high = text2num(query.item[36]) - job_karma_med = text2num(query.item[37]) - job_karma_low = text2num(query.item[38]) - - //Miscellaneous - flavor_text = query.item[39] - med_record = query.item[40] - sec_record = query.item[41] - gen_record = query.item[42] - // Apparently, the preceding vars weren't always encoded properly... - if(findtext(flavor_text, "<")) // ... so let's clumsily check for tags! - flavor_text = html_encode(flavor_text) - if(findtext(med_record, "<")) - med_record = html_encode(med_record) - if(findtext(sec_record, "<")) - sec_record = html_encode(sec_record) - if(findtext(gen_record, "<")) - gen_record = html_encode(gen_record) - disabilities = text2num(query.item[43]) - player_alt_titles = params2list(query.item[44]) - organ_data = params2list(query.item[45]) - rlimb_data = params2list(query.item[46]) - nanotrasen_relation = query.item[47] - speciesprefs = text2num(query.item[48]) - - //socks - socks = query.item[49] - body_accessory = query.item[50] - loadout_gear = params2list(query.item[51]) - autohiss_mode = text2num(query.item[52]) - - saved = TRUE - - qdel(query) - //Sanitize - var/datum/species/SP = GLOB.all_species[species] - metadata = sanitize_text(metadata, initial(metadata)) - real_name = reject_bad_name(real_name, 1) - if(isnull(species)) species = "Human" - if(isnull(language)) language = "None" - if(isnull(nanotrasen_relation)) nanotrasen_relation = initial(nanotrasen_relation) - if(isnull(speciesprefs)) speciesprefs = initial(speciesprefs) - if(!real_name) real_name = random_name(gender,species) - be_random_name = sanitize_integer(be_random_name, 0, 1, initial(be_random_name)) - gender = sanitize_gender(gender, FALSE, !SP.has_gender) - age = sanitize_integer(age, AGE_MIN, AGE_MAX, initial(age)) - h_colour = sanitize_hexcolor(h_colour) - h_sec_colour = sanitize_hexcolor(h_sec_colour) - f_colour = sanitize_hexcolor(f_colour) - f_sec_colour = sanitize_hexcolor(f_sec_colour) - s_tone = sanitize_integer(s_tone, -185, 34, initial(s_tone)) - s_colour = sanitize_hexcolor(s_colour) - for(var/marking_location in m_colours) - m_colours[marking_location] = sanitize_hexcolor(m_colours[marking_location], DEFAULT_MARKING_COLOURS[marking_location]) - hacc_colour = sanitize_hexcolor(hacc_colour) - h_style = sanitize_inlist(h_style, GLOB.hair_styles_public_list, initial(h_style)) - f_style = sanitize_inlist(f_style, GLOB.facial_hair_styles_list, initial(f_style)) - for(var/marking_location in m_styles) - m_styles[marking_location] = sanitize_inlist(m_styles[marking_location], GLOB.marking_styles_list, DEFAULT_MARKING_STYLES[marking_location]) - ha_style = sanitize_inlist(ha_style, GLOB.head_accessory_styles_list, initial(ha_style)) - alt_head = sanitize_inlist(alt_head, GLOB.alt_heads_list, initial(alt_head)) - e_colour = sanitize_hexcolor(e_colour) - underwear = sanitize_text(underwear, initial(underwear)) - undershirt = sanitize_text(undershirt, initial(undershirt)) - backbag = sanitize_text(backbag, initial(backbag)) - b_type = sanitize_text(b_type, initial(b_type)) - autohiss_mode = sanitize_integer(autohiss_mode, 0, 2, initial(autohiss_mode)) - - alternate_option = sanitize_integer(alternate_option, 0, 2, initial(alternate_option)) - job_support_high = sanitize_integer(job_support_high, 0, 65535, initial(job_support_high)) - job_support_med = sanitize_integer(job_support_med, 0, 65535, initial(job_support_med)) - job_support_low = sanitize_integer(job_support_low, 0, 65535, initial(job_support_low)) - job_medsci_high = sanitize_integer(job_medsci_high, 0, 65535, initial(job_medsci_high)) - job_medsci_med = sanitize_integer(job_medsci_med, 0, 65535, initial(job_medsci_med)) - job_medsci_low = sanitize_integer(job_medsci_low, 0, 65535, initial(job_medsci_low)) - job_engsec_high = sanitize_integer(job_engsec_high, 0, 65535, initial(job_engsec_high)) - job_engsec_med = sanitize_integer(job_engsec_med, 0, 65535, initial(job_engsec_med)) - job_engsec_low = sanitize_integer(job_engsec_low, 0, 65535, initial(job_engsec_low)) - job_karma_high = sanitize_integer(job_karma_high, 0, 65535, initial(job_karma_high)) - job_karma_med = sanitize_integer(job_karma_med, 0, 65535, initial(job_karma_med)) - job_karma_low = sanitize_integer(job_karma_low, 0, 65535, initial(job_karma_low)) - disabilities = sanitize_integer(disabilities, 0, 65535, initial(disabilities)) - - socks = sanitize_text(socks, initial(socks)) - body_accessory = sanitize_text(body_accessory, initial(body_accessory)) - -// if(isnull(disabilities)) disabilities = 0 - if(!player_alt_titles) player_alt_titles = new() - if(!organ_data) src.organ_data = list() - if(!rlimb_data) src.rlimb_data = list() - if(!loadout_gear) loadout_gear = list() - - // Check if the current body accessory exists - if(!GLOB.body_accessory_by_name[body_accessory]) - body_accessory = null - - return 1 - -/datum/preferences/proc/save_character(client/C) - var/organlist - var/rlimblist - var/playertitlelist - var/gearlist - - var/markingcolourslist = list2params(m_colours) - var/markingstyleslist = list2params(m_styles) - if(!isemptylist(organ_data)) - organlist = list2params(organ_data) - if(!isemptylist(rlimb_data)) - rlimblist = list2params(rlimb_data) - if(!isemptylist(player_alt_titles)) - playertitlelist = list2params(player_alt_titles) - if(!isemptylist(loadout_gear)) - gearlist = list2params(loadout_gear) - - var/datum/db_query/firstquery = SSdbcore.NewQuery("SELECT slot FROM characters WHERE ckey=:ckey ORDER BY slot", list( - "ckey" = C.ckey - )) - if(!firstquery.warn_execute()) - qdel(firstquery) - return - while(firstquery.NextRow()) - if(text2num(firstquery.item[1]) == default_slot) - var/datum/db_query/query = SSdbcore.NewQuery({"UPDATE characters - SET - OOC_Notes=:metadata, - real_name=:real_name, - name_is_always_random=:be_random_name, - gender=:gender, - age=:age, - species=:species, - language=:language, - hair_colour=:h_colour, - secondary_hair_colour=:h_sec_colour, - facial_hair_colour=:f_colour, - secondary_facial_hair_colour=:f_sec_colour, - skin_tone=:s_tone, - skin_colour=:s_colour, - marking_colours=:markingcolourslist, - head_accessory_colour=:hacc_colour, - hair_style_name=:h_style, - facial_style_name=:f_style, - marking_styles=:markingstyleslist, - head_accessory_style_name=:ha_style, - alt_head_name=:alt_head, - eye_colour=:e_colour, - underwear=:underwear, - undershirt=:undershirt, - backbag=:backbag, - b_type=:b_type, - alternate_option=:alternate_option, - job_support_high=:job_support_high, - job_support_med=:job_support_med, - job_support_low=:job_support_low, - job_medsci_high=:job_medsci_high, - job_medsci_med=:job_medsci_med, - job_medsci_low=:job_medsci_low, - job_engsec_high=:job_engsec_high, - job_engsec_med=:job_engsec_med, - job_engsec_low=:job_engsec_low, - job_karma_high=:job_karma_high, - job_karma_med=:job_karma_med, - job_karma_low=:job_karma_low, - flavor_text=:flavor_text, - med_record=:med_record, - sec_record=:sec_record, - gen_record=:gen_record, - player_alt_titles=:playertitlelist, - disabilities=:disabilities, - organ_data=:organlist, - rlimb_data=:rlimblist, - nanotrasen_relation=:nanotrasen_relation, - speciesprefs=:speciesprefs, - socks=:socks, - body_accessory=:body_accessory, - gear=:gearlist, - autohiss=:autohiss_mode - WHERE ckey=:ckey - AND slot=:slot"}, list( - // OH GOD SO MANY PARAMETERS - "metadata" = metadata, - "real_name" = real_name, - "be_random_name" = be_random_name, - "gender" = gender, - "age" = age, - "species" = species, - "language" = language, - "h_colour" = h_colour, - "h_sec_colour" = h_sec_colour, - "f_colour" = f_colour, - "f_sec_colour" = f_sec_colour, - "s_tone" = s_tone, - "s_colour" = s_colour, - "markingcolourslist" = markingcolourslist, - "hacc_colour" = hacc_colour, - "h_style" = h_style, - "f_style" = f_style, - "markingstyleslist" = markingstyleslist, - "ha_style" = ha_style, - "alt_head" = (alt_head ? alt_head : ""), // This it intentional. It wont work without it! - "e_colour" = e_colour, - "underwear" = underwear, - "undershirt" = undershirt, - "backbag" = backbag, - "b_type" = b_type, - "alternate_option" = alternate_option, - "job_support_high" = job_support_high, - "job_support_med" = job_support_med, - "job_support_low" = job_support_low, - "job_medsci_high" = job_medsci_high, - "job_medsci_med" = job_medsci_med, - "job_medsci_low" = job_medsci_low, - "job_engsec_high" = job_engsec_high, - "job_engsec_med" = job_engsec_med, - "job_engsec_low" = job_engsec_low, - "job_karma_high" = job_karma_high, - "job_karma_med" = job_karma_med, - "job_karma_low" = job_karma_low, - "flavor_text" = flavor_text, - "med_record" = med_record, - "sec_record" = sec_record, - "gen_record" = gen_record, - "playertitlelist" = (playertitlelist ? playertitlelist : ""), // This it intentnional. It wont work without it! - "disabilities" = disabilities, - "organlist" = (organlist ? organlist : ""), - "rlimblist" = (rlimblist ? rlimblist : ""), - "nanotrasen_relation" = nanotrasen_relation, - "speciesprefs" = speciesprefs, - "socks" = socks, - "body_accessory" = (body_accessory ? body_accessory : ""), - "gearlist" = (gearlist ? gearlist : ""), - "autohiss_mode" = autohiss_mode, - "ckey" = C.ckey, - "slot" = default_slot - ) - ) - - if(!query.warn_execute()) - qdel(firstquery) - qdel(query) - return - qdel(firstquery) - qdel(query) - return 1 - - qdel(firstquery) - - var/datum/db_query/query = SSdbcore.NewQuery({" - INSERT INTO characters (ckey, slot, OOC_Notes, real_name, name_is_always_random, gender, - age, species, language, - hair_colour, secondary_hair_colour, - facial_hair_colour, secondary_facial_hair_colour, - skin_tone, skin_colour, - marking_colours, - head_accessory_colour, - hair_style_name, - facial_style_name, - marking_styles, - head_accessory_style_name, - alt_head_name, - eye_colour, - underwear, undershirt, - backbag, b_type, alternate_option, - job_support_high, job_support_med, job_support_low, - job_medsci_high, job_medsci_med, job_medsci_low, - job_engsec_high, job_engsec_med, job_engsec_low, - job_karma_high, job_karma_med, job_karma_low, - flavor_text, - med_record, - sec_record, - gen_record, - player_alt_titles, - disabilities, organ_data, rlimb_data, nanotrasen_relation, speciesprefs, - socks, body_accessory, gear, autohiss) - - VALUES - (:ckey, :slot, :metadata, :name, :be_random_name, :gender, - :age, :species, :language, - :h_colour, :h_sec_colour, - :f_colour, :f_sec_colour, - :s_tone, :s_colour, - :markingcolourslist, - :hacc_colour, - :h_style, - :f_style, - :markingstyleslist, - :ha_style, - :alt_head, - :e_colour, - :underwear, :undershirt, - :backbag, :b_type, :alternate_option, - :job_support_high, :job_support_med, :job_support_low, - :job_medsci_high, :job_medsci_med, :job_medsci_low, - :job_engsec_high, :job_engsec_med, :job_engsec_low, - :job_karma_high, :job_karma_med, :job_karma_low, - :flavor_text, - :med_record, - :sec_record, - :gen_record, - :playertitlelist, - :disabilities, :organlist, :rlimblist, :nanotrasen_relation, :speciesprefs, - :socks, :body_accessory, :gearlist, :autohiss_mode) - - "}, list( - // This has too many params for anyone to look at this without going insae - "ckey" = C.ckey, - "slot" = default_slot, - "metadata" = metadata, - "name" = real_name, - "be_random_name" = be_random_name, - "gender" = gender, - "age" = age, - "species" = species, - "language" = language, - "h_colour" = h_colour, - "h_sec_colour" = h_sec_colour, - "f_colour" = f_colour, - "f_sec_colour" = f_sec_colour, - "s_tone" = s_tone, - "s_colour" = s_colour, - "markingcolourslist" = markingcolourslist, - "hacc_colour" = hacc_colour, - "h_style" = h_style, - "f_style" = f_style, - "markingstyleslist" = markingstyleslist, - "ha_style" = ha_style, - "alt_head" = alt_head, - "e_colour" = e_colour, - "underwear" = underwear, - "undershirt" = undershirt, - "backbag" = backbag, - "b_type" = b_type, - "alternate_option" = alternate_option, - "job_support_high" = job_support_high, - "job_support_med" = job_support_med, - "job_support_low" = job_support_low, - "job_medsci_high" = job_medsci_high, - "job_medsci_med" = job_medsci_med, - "job_medsci_low" = job_medsci_low, - "job_engsec_high" = job_engsec_high, - "job_engsec_med" = job_engsec_med, - "job_engsec_low" = job_engsec_low, - "job_karma_high" = job_karma_high, - "job_karma_med" = job_karma_med, - "job_karma_low" = job_karma_low, - "flavor_text" = flavor_text, - "med_record" = med_record, - "sec_record" = sec_record, - "gen_record" = gen_record, - "playertitlelist" = (playertitlelist ? playertitlelist : ""), // This it intentnional. It wont work without it! - "disabilities" = disabilities, - "organlist" = (organlist ? organlist : ""), - "rlimblist" = (rlimblist ? rlimblist : ""), - "nanotrasen_relation" = nanotrasen_relation, - "speciesprefs" = speciesprefs, - "socks" = socks, - "body_accessory" = (body_accessory ? body_accessory : ""), - "gearlist" = (gearlist ? gearlist : ""), - "autohiss_mode" = autohiss_mode - )) - - if(!query.warn_execute()) - qdel(query) - return - - qdel(query) - saved = TRUE - return 1 /datum/preferences/proc/load_random_character_slot(client/C) - var/datum/db_query/query = SSdbcore.NewQuery("SELECT slot FROM characters WHERE ckey=:ckey ORDER BY slot", list( - "ckey" = C.ckey - )) - var/list/saves = list() + var/list/datum/character_save/valid_slots = list() + for(var/datum/character_save/CS in character_saves) + if(CS.valid_save) + valid_slots += CS - if(!query.warn_execute(async = FALSE)) // Dont async this. Youll make roundstart slow. - qdel(query) + if(!length(valid_slots)) + // They have no valid saves. Lets just randomise #1 + var/datum/character_save/CS = C.prefs.character_saves[1] // Get slot 1 + CS.randomise() + CS.real_name = random_name(CS.gender) // Pick a name + C.prefs.active_character = C.prefs.character_saves[1] // Set slot 1 as their active return - while(query.NextRow()) - saves += text2num(query.item[1]) - qdel(query) - - if(!saves.len) - load_character(C) - return 0 - load_character(C,pick(saves)) - return 1 - -/datum/preferences/proc/clear_character_slot(client/C) - . = FALSE - // Is there a character in that slot? - var/datum/db_query/query = SSdbcore.NewQuery("SELECT slot FROM characters WHERE ckey=:ckey AND slot=:slot", list( - "ckey" = C.ckey, - "slot" = default_slot - )) - - if(!query.warn_execute()) - qdel(query) - return - - if(!query.NextRow()) - qdel(query) - return - - qdel(query) - - var/datum/db_query/delete_query = SSdbcore.NewQuery("DELETE FROM characters WHERE ckey=:ckey AND slot=:slot", list( - "ckey" = C.ckey, - "slot" = default_slot - )) - - if(!delete_query.warn_execute()) - qdel(delete_query) - return - - qdel(delete_query) - - saved = FALSE - return TRUE + var/datum/character_save/CS = pick(valid_slots) + C.prefs.active_character = CS /** * Saves [/datum/preferences/proc/volume_mixer] for the current client. diff --git a/code/modules/client/preference/preferences_toggles.dm b/code/modules/client/preference/preferences_toggles.dm index 2bb7b7529e2..6a290e230aa 100644 --- a/code/modules/client/preference/preferences_toggles.dm +++ b/code/modules/client/preference/preferences_toggles.dm @@ -347,7 +347,7 @@ set desc = "Toggles forcing your runechat colour to white" prefs.toggles2 ^= PREFTOGGLE_2_FORCE_WHITE_RUNECHAT prefs.save_preferences(src) - to_chat(src, "Your runechats will [(prefs.toggles2 & PREFTOGGLE_2_FORCE_WHITE_RUNECHAT) ? "no longer" : "now"] be forced to be white.") + to_chat(src, "Your runechats will [(prefs.toggles2 & PREFTOGGLE_2_FORCE_WHITE_RUNECHAT) ? "now" : "no longer"] be forced to be white.") /client/verb/toggle_simple_stat_panel() set name = "Toggle Simple Status Panel" @@ -356,3 +356,11 @@ prefs.toggles2 ^= PREFTOGGLE_2_SIMPLE_STAT_PANEL prefs.save_preferences(src) to_chat(src, "You will [(prefs.toggles2 & PREFTOGGLE_2_SIMPLE_STAT_PANEL) ? "no longer" : "now"] get detailed information on the status panel.") + +/client/verb/toggle_item_outlines() + set name = "Toggle Item Outlines" + set category = "Preferences" + set desc = "Toggles seeing item outlines on hover." + prefs.toggles2 ^= PREFTOGGLE_2_SEE_ITEM_OUTLINES + prefs.save_preferences(src) + to_chat(usr, "You will [(prefs.toggles2 & PREFTOGGLE_2_SEE_ITEM_OUTLINES) ? "now" : "no longer"] see item outlines on hover.") diff --git a/code/modules/clothing/chameleon.dm b/code/modules/clothing/chameleon.dm index c873c76e1a5..c69c58df137 100644 --- a/code/modules/clothing/chameleon.dm +++ b/code/modules/clothing/chameleon.dm @@ -198,7 +198,7 @@ sensor_mode = SENSOR_OFF //Hey who's this guy on the Syndicate Shuttle?? random_sensor = FALSE resistance_flags = NONE - armor = list("melee" = 10, "bullet" = 10, "laser" = 10, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50) + armor = list(MELEE = 10, BULLET = 10, LASER = 10, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 50) var/datum/action/item_action/chameleon/change/chameleon_action @@ -229,7 +229,7 @@ item_state = "armor" blood_overlay_type = "armor" resistance_flags = NONE - armor = list("melee" = 10, "bullet" = 10, "laser" = 10, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50) + armor = list(MELEE = 10, BULLET = 10, LASER = 10, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 50) sprite_sheets = list( "Vox" = 'icons/mob/clothing/species/vox/suit.dmi' @@ -264,7 +264,7 @@ item_state = "meson" resistance_flags = NONE prescription_upgradable = TRUE - armor = list("melee" = 10, "bullet" = 10, "laser" = 10, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50) + armor = list(MELEE = 10, BULLET = 10, LASER = 10, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 50) sprite_sheets = list( "Vox" = 'icons/mob/clothing/species/vox/eyes.dmi', @@ -333,7 +333,7 @@ item_state = "ygloves" resistance_flags = NONE - armor = list("melee" = 10, "bullet" = 10, "laser" = 10, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50) + armor = list(MELEE = 10, BULLET = 10, LASER = 10, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 50) var/datum/action/item_action/chameleon/change/chameleon_action @@ -364,7 +364,7 @@ item_color = "grey" resistance_flags = NONE - armor = list("melee" = 5, "bullet" = 5, "laser" = 5, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50) + armor = list(MELEE = 5, BULLET = 5, LASER = 5, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 50) sprite_sheets = list( "Vox" = 'icons/mob/clothing/species/vox/head.dmi' @@ -398,7 +398,7 @@ icon_state = "gas_alt" item_state = "gas_alt" resistance_flags = NONE - armor = list("melee" = 5, "bullet" = 5, "laser" = 5, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50) + armor = list(MELEE = 5, BULLET = 5, LASER = 5, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 50) flags = AIRTIGHT | BLOCK_GAS_SMOKE_EFFECT flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE gas_transfer_coefficient = 0.01 @@ -449,7 +449,7 @@ desc = "A pair of black shoes." permeability_coefficient = 0.05 resistance_flags = NONE - armor = list("melee" = 10, "bullet" = 10, "laser" = 10, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50) + armor = list(MELEE = 10, BULLET = 10, LASER = 10, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 50) var/datum/action/item_action/chameleon/change/chameleon_action diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index cc5710d14d6..ea74a9778ca 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -428,6 +428,10 @@ BLIND // can't see anything var/datum/action/A = X A.UpdateButtonIcon() +// Changes the speech verb when wearing a mask if a value is returned +/obj/item/clothing/mask/proc/change_speech_verb() + return + //Shoes /obj/item/clothing/shoes name = "shoes" @@ -454,10 +458,12 @@ BLIND // can't see anything /obj/item/clothing/shoes/attackby(obj/item/I, mob/user, params) if(istype(I, /obj/item/match) && src.loc == user) var/obj/item/match/M = I - if(M.matchignite()) // Match isn't lit, but isn't burnt. + if(!M.lit && !M.burnt) // Match isn't lit, but isn't burnt. user.visible_message("[user] strikes a [M] on the bottom of [src], lighting it.","You strike [M] on the bottom of [src] to light it.") + M.matchignite() playsound(user.loc, 'sound/goonstation/misc/matchstick_light.ogg', 50, 1) - else + return + if(M.lit && !M.burnt) user.visible_message("[user] crushes [M] into the bottom of [src], extinguishing it.","You crush [M] into the bottom of [src], extinguishing it.") M.dropped() return @@ -488,7 +494,7 @@ BLIND // can't see anything icon = 'icons/obj/clothing/suits.dmi' var/fire_resist = T0C+100 allowed = list(/obj/item/tank/internals/emergency_oxygen) - armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 0, ACID = 0) drop_sound = 'sound/items/handling/cloth_drop.ogg' pickup_sound = 'sound/items/handling/cloth_pickup.ogg' slot_flags = SLOT_OCLOTHING @@ -579,7 +585,7 @@ BLIND // can't see anything flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH item_state = "s_helmet" permeability_coefficient = 0.01 - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 100, "rad" = 50, "fire" = 80, "acid" = 70) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 100, RAD = 50, FIRE = 80, ACID = 70) flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE cold_protection = HEAD min_cold_protection_temperature = SPACE_HELM_MIN_TEMP_PROTECT @@ -605,7 +611,7 @@ BLIND // can't see anything body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS allowed = list(/obj/item/flashlight, /obj/item/tank/internals) slowdown = 1 - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 100, "rad" = 50, "fire" = 80, "acid" = 70) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 100, RAD = 50, FIRE = 80, ACID = 70) flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT|HIDETAIL cold_protection = UPPER_TORSO | LOWER_TORSO | LEGS | FEET | ARMS | HANDS min_cold_protection_temperature = SPACE_SUIT_MIN_TEMP_PROTECT @@ -627,7 +633,7 @@ BLIND // can't see anything body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS permeability_coefficient = 0.90 slot_flags = SLOT_ICLOTHING - armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 0, ACID = 0) equip_sound = 'sound/items/equip/jumpsuit_equip.ogg' drop_sound = 'sound/items/handling/cloth_drop.ogg' pickup_sound = 'sound/items/handling/cloth_pickup.ogg' @@ -782,7 +788,7 @@ BLIND // can't see anything handle_accessories_removal() /obj/item/clothing/obj_destruction(damage_flag) - if(damage_flag == "bomb" || damage_flag == "melee") + if(damage_flag == BOMB || damage_flag == MELEE) var/turf/T = get_turf(src) spawn(1) //so the shred survives potential turf change from the explosion. var/obj/effect/decal/cleanable/shreds/Shreds = new(T) diff --git a/code/modules/clothing/glasses/glasses.dm b/code/modules/clothing/glasses/glasses.dm index 00dcd32547e..527262799c8 100644 --- a/code/modules/clothing/glasses/glasses.dm +++ b/code/modules/clothing/glasses/glasses.dm @@ -119,7 +119,7 @@ prescription_upgradable = TRUE scan_reagents = 1 //You can see reagents while wearing science goggles resistance_flags = ACID_PROOF - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 100) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 80, ACID = 100) sprite_sheets = list( "Vox" = 'icons/mob/clothing/species/vox/eyes.dmi', "Grey" = 'icons/mob/clothing/species/grey/eyes.dmi', diff --git a/code/modules/clothing/glasses/hud.dm b/code/modules/clothing/glasses/hud.dm index 2a03c6f0a60..7cc16ade700 100644 --- a/code/modules/clothing/glasses/hud.dm +++ b/code/modules/clothing/glasses/hud.dm @@ -64,7 +64,7 @@ desc = "A heads-up display capable of analyzing the integrity and status of robotics and exosuits." icon_state = "diagnostichud" origin_tech = "magnets=2;engineering=2" - HUDType = DATA_HUD_DIAGNOSTIC + HUDType = DATA_HUD_DIAGNOSTIC_BASIC sprite_sheets = list( "Vox" = 'icons/mob/clothing/species/vox/eyes.dmi', diff --git a/code/modules/clothing/gloves/color.dm b/code/modules/clothing/gloves/color.dm index dbd5ab859e7..0ae06840e91 100644 --- a/code/modules/clothing/gloves/color.dm +++ b/code/modules/clothing/gloves/color.dm @@ -240,4 +240,4 @@ heat_protection = HANDS max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT strip_delay = 60 - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 70, "acid" = 50) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 70, ACID = 50) diff --git a/code/modules/clothing/gloves/miscellaneous.dm b/code/modules/clothing/gloves/miscellaneous.dm index a6ece08feee..bf52be51cdb 100644 --- a/code/modules/clothing/gloves/miscellaneous.dm +++ b/code/modules/clothing/gloves/miscellaneous.dm @@ -37,7 +37,7 @@ heat_protection = HANDS max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT resistance_flags = NONE - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 50) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 80, ACID = 50) /obj/item/clothing/gloves/bracer name = "bone bracers" @@ -52,7 +52,7 @@ min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT resistance_flags = NONE - armor = list("melee" = 15, "bullet" = 25, "laser" = 15, "energy" = 15, "bomb" = 20, "bio" = 10, "rad" = 0, "fire" = 0, "acid" = 0) + armor = list(MELEE = 15, BULLET = 25, LASER = 15, ENERGY = 15, BOMB = 20, BIO = 10, RAD = 0, FIRE = 0, ACID = 0) /obj/item/clothing/gloves/botanic_leather name = "botanist's leather gloves" @@ -65,7 +65,7 @@ heat_protection = HANDS max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT resistance_flags = NONE - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 70, "acid" = 30) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 70, ACID = 30) /obj/item/clothing/gloves/batmangloves name = "batgloves" @@ -165,12 +165,10 @@ /obj/item/clothing/gloves/fingerless/rapid/Touch(mob/living/target, proximity = TRUE) var/mob/living/M = loc - if(M.a_intent in accepted_intents) - if(M.mind.martial_art || HAS_TRAIT(M, TRAIT_HULK)) - M.changeNext_move(CLICK_CD_MELEE)//normal attack speed for hulk, CQC and Carp. - else - M.changeNext_move(click_speed_modifier) - .= FALSE + if((M.a_intent in accepted_intents) && !M.mind.martial_art?.can_use(M) && !HAS_TRAIT(M, TRAIT_HULK)) + M.changeNext_move(click_speed_modifier) + + return FALSE /obj/item/clothing/gloves/fingerless/rapid/admin name = "advanced interactive gloves" diff --git a/code/modules/clothing/head/beanie.dm b/code/modules/clothing/head/beanie.dm index 61767d23fe0..a87267b0547 100644 --- a/code/modules/clothing/head/beanie.dm +++ b/code/modules/clothing/head/beanie.dm @@ -84,7 +84,7 @@ desc = "A beanie made from durathread, its resilient fibres provide some protection to the wearer." icon_state = "beaniedurathread" item_color = null - armor = list("melee" = 15, "bullet" = 5, "laser" = 15, "energy" = 5, "bomb" = 10, "bio" = 0, "rad" = 0, "fire" = 30, "acid" = 5) + armor = list(MELEE = 15, BULLET = 5, LASER = 15, ENERGY = 5, BOMB = 10, BIO = 0, RAD = 0, FIRE = 30, ACID = 5) /obj/item/clothing/head/beanie/waldo name = "red striped bobble hat" diff --git a/code/modules/clothing/head/hardhat.dm b/code/modules/clothing/head/hardhat.dm index 791802f0251..5462a209a53 100644 --- a/code/modules/clothing/head/hardhat.dm +++ b/code/modules/clothing/head/hardhat.dm @@ -7,7 +7,7 @@ var/brightness_on = 4 //luminosity when on var/on = FALSE item_color = "yellow" //Determines used sprites: hardhat[on]_[color] and hardhat[on]_[color]2 (lying down sprite) - armor = list("melee" = 15, "bullet" = 5, "laser" = 20, "energy" = 10, "bomb" = 20, "bio" = 10, "rad" = 20, "fire" = 100, "acid" = 50) + armor = list(MELEE = 15, BULLET = 5, LASER = 20, ENERGY = 10, BOMB = 20, BIO = 10, RAD = 20, FIRE = 100, ACID = 50) flags_inv = 0 actions_types = list(/datum/action/item_action/toggle_helmet_light) resistance_flags = FIRE_PROOF @@ -52,6 +52,7 @@ visible_message("[src]'s light fades and turns off.") /obj/item/clothing/head/hardhat/orange + name = "orange hard hat" icon_state = "hardhat0_orange" item_state = "hardhat0_orange" item_color = "orange" @@ -69,6 +70,7 @@ dog_fashion = /datum/dog_fashion/head/hardhat/red /obj/item/clothing/head/hardhat/white + name = "white hard hat" icon_state = "hardhat0_white" item_state = "hardhat0_white" item_color = "white" @@ -80,6 +82,7 @@ dog_fashion = /datum/dog_fashion/head/hardhat/white /obj/item/clothing/head/hardhat/dblue + name = "blue hard hat" icon_state = "hardhat0_dblue" item_state = "hardhat0_dblue" item_color = "dblue" diff --git a/code/modules/clothing/head/helmet.dm b/code/modules/clothing/head/helmet.dm index 552f0677827..936fe1f0b0f 100644 --- a/code/modules/clothing/head/helmet.dm +++ b/code/modules/clothing/head/helmet.dm @@ -6,7 +6,7 @@ flags = HEADBANGPROTECT flags_cover = HEADCOVERSEYES item_state = "helmetmaterials" - armor = list("melee" = 35, "bullet" = 30, "laser" = 30,"energy" = 10, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50) + armor = list(MELEE = 35, BULLET = 30, LASER = 30, ENERGY = 10, BOMB = 25, BIO = 0, RAD = 0, FIRE = 50, ACID = 50) flags_inv = HIDEEARS|HIDEEYES cold_protection = HEAD min_cold_protection_temperature = HELMET_MIN_TEMP_PROTECT @@ -75,7 +75,7 @@ desc = "A bulletproof helmet that excels in protecting the wearer against traditional projectile weaponry and explosives to a minor extent." icon_state = "swat" item_state = "swat-alt" - armor = list("melee" = 15, "bullet" = 60, "laser" = 10, "energy" = 10, "bomb" = 40, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50) + armor = list(MELEE = 15, BULLET = 60, LASER = 10, ENERGY = 10, BOMB = 40, BIO = 0, RAD = 0, FIRE = 50, ACID = 50) dog_fashion = null /obj/item/clothing/head/helmet/riot @@ -83,7 +83,7 @@ desc = "It's a helmet specifically designed to protect against close range attacks." icon_state = "riot" item_state = "helmet" - armor = list("melee" = 50, "bullet" = 10, "laser" = 10, "energy" = 10, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 80) + armor = list(MELEE = 50, BULLET = 10, LASER = 10, ENERGY = 10, BOMB = 0, BIO = 0, RAD = 0, FIRE = 80, ACID = 80) flags_inv = HIDEEARS flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH strip_delay = 80 @@ -123,7 +123,7 @@ desc = "They're often used by highly trained Swat Members." icon_state = "swat" item_state = "swat" - armor = list("melee" = 40, "bullet" = 30, "laser" = 30,"energy" = 30, "bomb" = 50, "bio" = 90, "rad" = 20, "fire" = 50, "acid" = 50) + armor = list(MELEE = 40, BULLET = 30, LASER = 30, ENERGY = 30, BOMB = 50, BIO = 90, RAD = 20, FIRE = 50, ACID = 50) flags = null flags_inv = HIDEEARS|HIDEEYES cold_protection = HEAD @@ -145,7 +145,7 @@ icon_state = "thunderdome" flags = null item_state = "thunderdome" - armor = list("melee" = 80, "bullet" = 80, "laser" = 50, "energy" = 50, "bomb" = 100, "bio" = 100, "rad" = 100, "fire" = 90, "acid" = 90) + armor = list(MELEE = 80, BULLET = 80, LASER = 50, ENERGY = 50, BOMB = 100, BIO = 100, RAD = 100, FIRE = 90, ACID = 90) cold_protection = HEAD min_cold_protection_temperature = SPACE_HELM_MIN_TEMP_PROTECT heat_protection = HEAD @@ -157,7 +157,7 @@ name = "roman helmet" desc = "An ancient helmet made of bronze and leather." flags = null - armor = list("melee" = 25, "bullet" = 0, "laser" = 25, "energy" = 10, "bomb" = 10, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 50) + armor = list(MELEE = 25, BULLET = 0, LASER = 25, ENERGY = 10, BOMB = 10, BIO = 0, RAD = 0, FIRE = 100, ACID = 50) resistance_flags = FIRE_PROOF icon_state = "roman" item_state = "roman" @@ -199,7 +199,7 @@ icon_state = "redtaghelm" flags = null item_state = "redtaghelm" - armor = list("melee" = 15, "bullet" = 10, "laser" = 20,"energy" = 10, "bomb" = 20, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 50) + armor = list(MELEE = 15, BULLET = 10, LASER = 20, ENERGY = 10, BOMB = 20, BIO = 0, RAD = 0, FIRE = 0, ACID = 50) // Offer about the same protection as a hardhat. flags_inv = HIDEEARS|HIDEEYES dog_fashion = null @@ -210,7 +210,7 @@ icon_state = "bluetaghelm" flags = null item_state = "bluetaghelm" - armor = list("melee" = 15, "bullet" = 10, "laser" = 20,"energy" = 10, "bomb" = 20, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 50) + armor = list(MELEE = 15, BULLET = 10, LASER = 20, ENERGY = 10, BOMB = 20, BIO = 0, RAD = 0, FIRE = 0, ACID = 50) // Offer about the same protection as a hardhat. flags_inv = HIDEEARS|HIDEEYES dog_fashion = null @@ -251,7 +251,7 @@ desc = "An intimidating tribal helmet, it doesn't look very comfortable." flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE flags_cover = HEADCOVERSEYES - armor = list("melee" = 35, "bullet" = 25, "laser" = 25, "energy" = 10, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50) + armor = list(MELEE = 35, BULLET = 25, LASER = 25, ENERGY = 10, BOMB = 25, BIO = 0, RAD = 0, FIRE = 50, ACID = 50) icon_state = "skull" item_state = "skull" strip_delay = 100 @@ -262,7 +262,7 @@ icon_state = "durathread" item_state = "durathread" resistance_flags = FLAMMABLE - armor = list("melee" = 20, "bullet" = 10, "laser" = 30, "energy" = 5, "bomb" = 15, "bio" = 0, "rad" = 0, "fire" = 40, "acid" = 50) + armor = list(MELEE = 20, BULLET = 10, LASER = 30, ENERGY = 5, BOMB = 15, BIO = 0, RAD = 0, FIRE = 40, ACID = 50) strip_delay = 60 //Commander diff --git a/code/modules/clothing/head/jobs.dm b/code/modules/clothing/head/jobs.dm index e7e6d98b5b9..5e136698274 100644 --- a/code/modules/clothing/head/jobs.dm +++ b/code/modules/clothing/head/jobs.dm @@ -16,7 +16,7 @@ icon_state = "captain" desc = "It's good being the king." item_state = "caphat" - armor = list("melee" = 25, "bullet" = 15, "laser" = 25, "energy" = 10, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50) + armor = list(MELEE = 25, BULLET = 15, LASER = 25, ENERGY = 10, BOMB = 25, BIO = 0, RAD = 0, FIRE = 50, ACID = 50) strip_delay = 60 dog_fashion = /datum/dog_fashion/head/captain @@ -32,7 +32,7 @@ name = "head of personnel's cap" icon_state = "hopcap" desc = "The symbol of true bureaucratic micromanagement." - armor = list("melee" = 25, "bullet" = 15, "laser" = 25, "energy" = 10, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50) + armor = list(MELEE = 25, BULLET = 15, LASER = 25, ENERGY = 10, BOMB = 25, BIO = 0, RAD = 0, FIRE = 50, ACID = 50) dog_fashion = /datum/dog_fashion/head/hop //Nanotrasen Representative @@ -78,7 +78,7 @@ desc = "Someone who wears this will look very smart." icon_state = "detective" allowed = list(/obj/item/reagent_containers/food/snacks/candy/candy_corn, /obj/item/pen) - armor = list("melee" = 25, "bullet" = 5, "laser" = 25, "energy" = 10, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 30, "acid" = 50) + armor = list(MELEE = 25, BULLET = 5, LASER = 25, ENERGY = 10, BOMB = 0, BIO = 0, RAD = 0, FIRE = 30, ACID = 50) dog_fashion = /datum/dog_fashion/head/detective sprite_sheets = list( @@ -97,14 +97,14 @@ desc = "A beret made from durathread, its resilient fibres provide some protection to the wearer." icon_state = "beretdurathread" item_color = null - armor = list("melee" = 15, "bullet" = 5, "laser" = 15, "energy" = 5, "bomb" = 10, "bio" = 0, "rad" = 0, "fire" = 30, "acid" = 5) + armor = list(MELEE = 15, BULLET = 5, LASER = 15, ENERGY = 5, BOMB = 10, BIO = 0, RAD = 0, FIRE = 30, ACID = 5) //Security /obj/item/clothing/head/HoS name = "head of security's cap" desc = "The robust standard-issue cap of the Head of Security. For showing the officers who's in charge." icon_state = "hoscap" - armor = list("melee" = 40, "bullet" = 30, "laser" = 30, "energy" = 10, "bomb" = 25, "bio" = 10, "rad" = 0, "fire" = 50, "acid" = 60) + armor = list(MELEE = 40, BULLET = 30, LASER = 30, ENERGY = 10, BOMB = 25, BIO = 10, RAD = 0, FIRE = 50, ACID = 60) strip_delay = 80 dog_fashion = /datum/dog_fashion/head/HoS @@ -118,7 +118,7 @@ name = "warden's police hat" desc = "It's a special armored hat issued to the Warden of a security force. Protects the head from impacts." icon_state = "policehelm" - armor = list("melee" = 40, "bullet" = 30, "laser" = 30, "energy" = 10, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 30, "acid" = 60) + armor = list(MELEE = 40, BULLET = 30, LASER = 30, ENERGY = 10, BOMB = 25, BIO = 0, RAD = 0, FIRE = 30, ACID = 60) strip_delay = 60 dog_fashion = /datum/dog_fashion/head/warden @@ -127,14 +127,14 @@ desc = "A red cap with an old-fashioned badge on the front for establishing that you are, in fact, the law." icon_state = "customshelm" item_state = "customshelm" - armor = list("melee" = 35, "bullet" = 30, "laser" = 30,"energy" = 10, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 20, "acid" = 50) + armor = list(MELEE = 35, BULLET = 30, LASER = 30, ENERGY = 10, BOMB = 0, BIO = 0, RAD = 0, FIRE = 20, ACID = 50) strip_delay = 60 /obj/item/clothing/head/beret/sec name = "security beret" desc = "A beret with the security insignia emblazoned on it. For officers that are more inclined towards style than safety." icon_state = "beret_officer" - armor = list("melee" = 35, "bullet" = 30, "laser" = 30,"energy" = 10, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 20, "acid" = 50) + armor = list(MELEE = 35, BULLET = 30, LASER = 30, ENERGY = 10, BOMB = 0, BIO = 0, RAD = 0, FIRE = 20, ACID = 50) strip_delay = 60 dog_fashion = /datum/dog_fashion/head/beret/sec @@ -142,7 +142,7 @@ name = "warden's beret" desc = "A special beret with the Warden's insignia emblazoned on it. For wardens with class." icon_state = "beret_warden" - armor = list("melee" = 40, "bullet" = 30, "laser" = 30, "energy" = 10, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 30, "acid" = 50) + armor = list(MELEE = 40, BULLET = 30, LASER = 30, ENERGY = 10, BOMB = 25, BIO = 0, RAD = 0, FIRE = 30, ACID = 50) /obj/item/clothing/head/beret/eng name = "engineering beret" @@ -171,7 +171,7 @@ icon_state = "beret_med" /obj/item/clothing/head/surgery - name = "surgical cap" + name = "blue surgical cap" desc = "A cap surgeons wear during operations. Keeps their hair from tickling your internal organs." icon_state = "surgcap_blue" flags = BLOCKHEADHAIR @@ -180,16 +180,19 @@ ) /obj/item/clothing/head/surgery/purple + name = "purple surgical cap" desc = "A cap surgeons wear during operations. Keeps their hair from tickling your internal organs. This one is deep purple." icon_state = "surgcap_purple" dog_fashion = /datum/dog_fashion/head/surgery /obj/item/clothing/head/surgery/blue + name = "blue surgical cap" desc = "A cap surgeons wear during operations. Keeps their hair from tickling your internal organs. This one is baby blue." icon_state = "surgcap_blue" dog_fashion = /datum/dog_fashion/head/surgery /obj/item/clothing/head/surgery/green + name = "green surgical cap" desc = "A cap surgeons wear during operations. Keeps their hair from tickling your internal organs. This one is dark green." icon_state = "surgcap_green" dog_fashion = /datum/dog_fashion/head/surgery @@ -206,13 +209,13 @@ icon_state = "solgovcberet" item_color = "solgovc" dog_fashion = null - armor = list("melee" = 20, "bullet" = 30, "laser" = 30, "energy" = 10, "bomb" = 25, "bio" = 10, "rad" = 0, "fire" = 50, "acid" = 60) + armor = list(MELEE = 20, BULLET = 30, LASER = 30, ENERGY = 10, BOMB = 25, BIO = 10, RAD = 0, FIRE = 50, ACID = 60) strip_delay = 80 /obj/item/clothing/head/beret/solgov/command/elite name = "\improper Trans-Solar Federation Specops Lieutenant's beret" desc = "A beret worn by marines of the Trans-Solar Federation Specops division. The insignia signifies the wearer bears the rank of a Lieutenant." - armor = list("melee" = 35, "bullet" = 60, "laser" = 10, "energy" = 10, "bomb" = 25, "bio" = 10, "rad" = 50, "fire" = 80, "acid" = 80) + armor = list(MELEE = 35, BULLET = 60, LASER = 10, ENERGY = 10, BOMB = 25, BIO = 10, RAD = 50, FIRE = 80, ACID = 80) icon_state = "solgovceliteberet" item_color = "solgovcelite" resistance_flags = FIRE_PROOF diff --git a/code/modules/clothing/head/misc.dm b/code/modules/clothing/head/misc.dm index 85d6080f642..5d44d924000 100644 --- a/code/modules/clothing/head/misc.dm +++ b/code/modules/clothing/head/misc.dm @@ -5,7 +5,7 @@ icon_state = "centcom" desc = "It's good to be emperor." item_state = "centhat" - armor = list("melee" = 30, "bullet" = 15, "laser" = 30, "energy" = 10, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50) + armor = list(MELEE = 30, BULLET = 15, LASER = 30, ENERGY = 10, BOMB = 25, BIO = 0, RAD = 0, FIRE = 50, ACID = 50) strip_delay = 80 /obj/item/clothing/head/hairflower @@ -365,14 +365,14 @@ name = "officer beret" desc = "A black beret adorned with the shield—a silver kite shield with an engraved sword—of the Nanotrasen security forces, announcing to the world that the wearer is a defender of Nanotrasen." icon_state = "beret_centcom_officer" - armor = list("melee" = 40, "bullet" = 30, "laser" = 30,"energy" = 10, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 20, "acid" = 50) + armor = list(MELEE = 40, BULLET = 30, LASER = 30, ENERGY = 10, BOMB = 25, BIO = 0, RAD = 0, FIRE = 20, ACID = 50) strip_delay = 60 /obj/item/clothing/head/beret/centcom/officer/navy name = "navy blue officer beret" desc = "A navy blue beret adorned with the shield—a silver kite shield with an engraved sword—of the Nanotrasen security forces, announcing to the world that the wearer is a defender of Nanotrasen." icon_state = "beret_centcom_officer_navy" - armor = list("melee" = 40, "bullet" = 30, "laser" = 30,"energy" = 10, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 20, "acid" = 50) + armor = list(MELEE = 40, BULLET = 30, LASER = 30, ENERGY = 10, BOMB = 25, BIO = 0, RAD = 0, FIRE = 20, ACID = 50) strip_delay = 60 /obj/item/clothing/head/beret/centcom/captain @@ -487,7 +487,7 @@ name = "crown" desc = "A crown fit for a king, a petty king maybe." icon_state = "crown" - armor = list("melee" = 15, "bullet" = 0, "laser" = 0,"energy" = 15, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 50) + armor = list(MELEE = 15, BULLET = 0, LASER = 0, ENERGY = 15, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 50) resistance_flags = FIRE_PROOF /obj/item/clothing/head/crown/fancy diff --git a/code/modules/clothing/head/misc_special.dm b/code/modules/clothing/head/misc_special.dm index b78360a34dc..1efc0aa79d0 100644 --- a/code/modules/clothing/head/misc_special.dm +++ b/code/modules/clothing/head/misc_special.dm @@ -21,7 +21,7 @@ materials = list(MAT_METAL=1750, MAT_GLASS=400) flash_protect = 2 tint = 2 - armor = list("melee" = 10, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 60) + armor = list(MELEE = 10, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 60) flags_inv = (HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE) actions_types = list(/datum/action/item_action/toggle) visor_flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE @@ -93,7 +93,7 @@ desc = "It's tasty looking!" icon_state = "cake0" flags_cover = HEADCOVERSEYES - armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 0, ACID = 0) var/onfire = 0.0 var/status = 0 var/fire_resist = T0C+1300 //this is the max temp it can stand before you start to cook. although it might not burn away, you take damage @@ -172,7 +172,7 @@ "Grey" = 'icons/mob/clothing/species/grey/head.dmi' ) - armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 0, ACID = 0) brightness_on = 2 //luminosity when on @@ -183,7 +183,7 @@ item_state = "hardhat0_reindeer" item_color = "reindeer" flags_inv = 0 - armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 0, ACID = 0) brightness_on = 1 //luminosity when on dog_fashion = /datum/dog_fashion/head/reindeer diff --git a/code/modules/clothing/head/soft_caps.dm b/code/modules/clothing/head/soft_caps.dm index 774b560a858..2e556ad8654 100644 --- a/code/modules/clothing/head/soft_caps.dm +++ b/code/modules/clothing/head/soft_caps.dm @@ -107,7 +107,7 @@ desc = "It's baseball hat in tasteful red colour." icon_state = "secsoft" item_color = "sec" - armor = list("melee" = 35, "bullet" = 30, "laser" = 30, "energy" = 10, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 20, "acid" = 50) + armor = list(MELEE = 35, BULLET = 30, LASER = 30, ENERGY = 10, BOMB = 0, BIO = 0, RAD = 0, FIRE = 20, ACID = 50) strip_delay = 60 dog_fashion = /datum/dog_fashion/head/softcap @@ -125,7 +125,7 @@ dog_fashion = null /obj/item/clothing/head/soft/solgov/marines - armor = list("melee" = 20, "bullet" = 30, "laser" = 30, "energy" = 10, "bomb" = 25, "bio" = 10, "rad" = 0, "fire" = 50, "acid" = 60) + armor = list(MELEE = 20, BULLET = 30, LASER = 30, ENERGY = 10, BOMB = 25, BIO = 10, RAD = 0, FIRE = 50, ACID = 60) icon_state = "solgovsoft_flipped" strip_delay = 60 flipped = TRUE @@ -133,7 +133,7 @@ /obj/item/clothing/head/soft/solgov/marines/elite name = "\improper Trans-Solar Federation Specops marine cap" desc = "A cap worn by marines of the Trans-Solar Federation Specops division. You aren't quite sure how they made this bulletproof, but you are glad it is!" - armor = list("melee" = 35, "bullet" = 60, "laser" = 10, "energy" = 10, "bomb" = 25, "bio" = 0, "rad" = 50, "fire" = 80, "acid" = 80) + armor = list(MELEE = 35, BULLET = 60, LASER = 10, ENERGY = 10, BOMB = 25, BIO = 0, RAD = 50, FIRE = 80, ACID = 80) icon_state = "solgovelitesoft_flipped" item_color = "solgovelite" resistance_flags = FIRE_PROOF @@ -141,7 +141,7 @@ /obj/item/clothing/head/soft/solgov/marines/command name = "\improper Trans-Solar Federation lieutenant's cap" desc = "A soft cap worn by marines of the Trans-Solar Federation. The insignia signifies the wearer bears the rank of a Lieutenant." - armor = list("melee" = 20, "bullet" = 30, "laser" = 30, "energy" = 10, "bomb" = 25, "bio" = 10, "rad" = 0, "fire" = 50, "acid" = 60) + armor = list(MELEE = 20, BULLET = 30, LASER = 30, ENERGY = 10, BOMB = 25, BIO = 10, RAD = 0, FIRE = 50, ACID = 60) icon_state = "solgovcsoft_flipped" item_color = "solgovc" dog_fashion = null @@ -150,7 +150,7 @@ /obj/item/clothing/head/soft/solgov/marines/command/elite name = "\improper Trans-Solar Federation Specops Lieutenant's cap" desc = "A cap worn by marines of the Trans-Solar Federation Specops division. You aren't quite sure how they made this bulletproof, but you are glad it is! The insignia signifies the wearer bears the rank of a Lieutenant." - armor= list("melee" = 35, "bullet" = 60, "laser" = 10, "energy" = 10, "bomb" = 25, "bio" = 0, "rad" = 50, "fire" = 80, "acid" = 80) + armor= list(MELEE = 35, BULLET = 60, LASER = 10, ENERGY = 10, BOMB = 25, BIO = 0, RAD = 50, FIRE = 80, ACID = 80) icon_state = "solgovcelitesoft" item_color = "solgovcelite" resistance_flags = FIRE_PROOF diff --git a/code/modules/clothing/masks/gasmask.dm b/code/modules/clothing/masks/gasmask.dm index 14dd7f3653e..80a1bedadae 100644 --- a/code/modules/clothing/masks/gasmask.dm +++ b/code/modules/clothing/masks/gasmask.dm @@ -30,7 +30,7 @@ materials = list(MAT_METAL=4000, MAT_GLASS=2000) flash_protect = 2 tint = 2 - armor = list("melee" = 10, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 55) + armor = list(MELEE = 10, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 55) origin_tech = "materials=2;engineering=3" actions_types = list(/datum/action/item_action/toggle) flags_inv = HIDEEARS|HIDEEYES|HIDEFACE @@ -46,7 +46,7 @@ desc = "A military-grade gas mask that can be connected to an air supply." icon_state = "gas_mining" actions_types = list(/datum/action/item_action/adjust) - armor = list("melee" = 10, "bullet" = 5, "laser" = 5, "energy" = 5, "bomb" = 0, "bio" = 50, "rad" = 0, "fire" = 20, "acid" = 40) + armor = list(MELEE = 10, BULLET = 5, LASER = 5, ENERGY = 5, BOMB = 0, BIO = 50, RAD = 0, FIRE = 20, ACID = 40) resistance_flags = FIRE_PROOF sprite_sheets = list( @@ -92,7 +92,7 @@ desc = "A modernised version of the classic design, this mask will not only filter out toxins but it can also be connected to an air supply." icon_state = "plaguedoctor" item_state = "gas_mask" - armor = list("melee" = 0, "bullet" = 0, "laser" = 2, "energy" = 2, "bomb" = 0, "bio" = 75, "rad" = 0, "fire" = 0, "acid" = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 2, ENERGY = 2, BOMB = 0, BIO = 75, RAD = 0, FIRE = 0, ACID = 0) /obj/item/clothing/mask/gas/swat name = "\improper SWAT mask" diff --git a/code/modules/clothing/masks/miscellaneous.dm b/code/modules/clothing/masks/miscellaneous.dm index ece319c7a1a..cb2b402b2a2 100644 --- a/code/modules/clothing/masks/miscellaneous.dm +++ b/code/modules/clothing/masks/miscellaneous.dm @@ -212,7 +212,7 @@ flags_cover = MASKCOVERSMOUTH gas_transfer_coefficient = 0.90 permeability_coefficient = 0.01 - armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 25, "rad" = 0, "fire" = 0, "acid" = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 25, RAD = 0, FIRE = 0, ACID = 0) actions_types = list(/datum/action/item_action/adjust) sprite_sheets = list( @@ -313,7 +313,7 @@ flags = BLOCKHAIR flags_inv = HIDEFACE w_class = WEIGHT_CLASS_SMALL - var/voicechange = 0 + var/voicechange = FALSE var/temporaryname = " the Horse" var/originalname = "" @@ -347,6 +347,10 @@ if(user.real_name == "[originalname][temporaryname]" || user.real_name == "A Horse With No Name") //if it's somehow changed while the mask is on it doesn't revert user.real_name = originalname +/obj/item/clothing/mask/horsehead/change_speech_verb() + if(voicechange) + return pick("whinnies", "neighs", "says") + /obj/item/clothing/mask/face flags_inv = HIDEFACE flags_cover = MASKCOVERSMOUTH diff --git a/code/modules/clothing/masks/voicemodulator.dm b/code/modules/clothing/masks/voicemodulator.dm new file mode 100644 index 00000000000..c05a17aeab1 --- /dev/null +++ b/code/modules/clothing/masks/voicemodulator.dm @@ -0,0 +1,44 @@ +/obj/item/clothing/mask/gas/voice_modulator + name = "modified gas mask" + desc = "A gas mask modified with a sound modulator that disguises the user's voice when active" + icon_state = "voice_modulator" + item_state = "voice_modulator" + + var/obj/item/voice_changer/voice_modulator/voice_modulator + +/obj/item/clothing/mask/gas/voice_modulator/Initialize(mapload) + . = ..() + voice_modulator = new(src) + +/obj/item/clothing/mask/gas/voice_modulator/Destroy() + QDEL_NULL(voice_modulator) + return ..() + +/obj/item/clothing/mask/gas/voice_modulator/chameleon + name = "chameleon voice modulator mask" + desc = "A tactical mask equipped with chameleon technology and a sound modulator that disguises the user's voice when active" + icon_state = "swat" + item_state = "swat" + + var/datum/action/item_action/chameleon/change/chameleon_action + +/obj/item/clothing/mask/gas/voice_modulator/chameleon/Initialize(mapload) + . = ..() + + chameleon_action = new(src) + chameleon_action.chameleon_type = /obj/item/clothing/mask + chameleon_action.chameleon_name = "Mask" + chameleon_action.chameleon_blacklist = list() + chameleon_action.initialize_disguises() + +/obj/item/clothing/mask/gas/voice_modulator/chameleon/Destroy() + QDEL_NULL(chameleon_action) + return ..() + +/obj/item/clothing/mask/gas/voice_modulator/chameleon/emp_act(severity) + . = ..() + chameleon_action.emp_randomise() + +/obj/item/clothing/mask/gas/voice_modulator/change_speech_verb() + if(voice_modulator.active) + return pick("modulates", "drones", "hums", "buzzes") diff --git a/code/modules/clothing/shoes/miscellaneous.dm b/code/modules/clothing/shoes/miscellaneous.dm index 35bf654d85b..4c23bbdff38 100644 --- a/code/modules/clothing/shoes/miscellaneous.dm +++ b/code/modules/clothing/shoes/miscellaneous.dm @@ -10,7 +10,7 @@ can_cut_open = 1 icon_state = "jackboots" item_state = "jackboots" - armor = list("melee" = 25, "bullet" = 25, "laser" = 25, "energy" = 25, "bomb" = 50, "bio" = 10, "rad" = 0, "fire" = 70, "acid" = 50) + armor = list(MELEE = 25, BULLET = 25, LASER = 25, ENERGY = 25, BOMB = 50, BIO = 10, RAD = 0, FIRE = 70, ACID = 50) strip_delay = 70 resistance_flags = NONE @@ -18,7 +18,7 @@ name = "\improper SWAT shoes" desc = "High speed, no drag combat boots." permeability_coefficient = 0.01 - armor = list("melee" = 40, "bullet" = 30, "laser" = 25, "energy" = 25, "bomb" = 50, "bio" = 30, "rad" = 30, "fire" = 90, "acid" = 50) + armor = list(MELEE = 40, BULLET = 30, LASER = 25, ENERGY = 25, BOMB = 50, BIO = 30, RAD = 30, FIRE = 90, ACID = 50) flags = NOSLIP /obj/item/clothing/shoes/sandal @@ -50,7 +50,7 @@ strip_delay = 50 put_on_delay = 50 resistance_flags = NONE - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 40, "acid" = 75) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 40, ACID = 75) /obj/item/clothing/shoes/galoshes/dry name = "absorbent galoshes" @@ -96,6 +96,9 @@ if(user.get_active_hand() != src) to_chat(user, "You must hold [src] in your hand to do this.") return + toggle_waddle(user) + +/obj/item/clothing/shoes/clown_shoes/proc/toggle_waddle(mob/living/user) if(!enabled_waddle) to_chat(user, "You switch off the waddle dampeners!") enabled_waddle = TRUE @@ -111,6 +114,45 @@ desc = "Standard-issue shoes of the wizarding class clown. Damn they're huge! And powerful! Somehow." magical = TRUE +/obj/item/clothing/shoes/clown_shoes/slippers + actions_types = list(/datum/action/item_action/slipping) + var/slide_distance = 6 + var/recharging_rate = 8 SECONDS + var/recharging_time = 0 + +/obj/item/clothing/shoes/clown_shoes/slippers/item_action_slot_check(slot, mob/user) + if(slot == slot_shoes) + return TRUE + +/obj/item/clothing/shoes/clown_shoes/slippers/ui_action_click(mob/user, action) + if(recharging_time > world.time) + to_chat(user, "The boot's internal propulsion needs to recharge still!") + return + var/prev_dir = user.dir + var/prev_pass_flags = user.pass_flags + user.pass_flags |= PASSMOB + user.Weaken(2) + user.dir = prev_dir + playsound(src, 'sound/effects/stealthoff.ogg', 50, TRUE, 1) + recharging_time = world.time + recharging_rate + user.visible_message("[user] slips forward!") + for(var/i in 1 to slide_distance) + step(user, user.dir) + sleep(1) + user.SetWeakened(0) + user.pass_flags = prev_pass_flags + + +/obj/item/clothing/shoes/clown_shoes/slippers/toggle_waddle(mob/living/user) + if(!enabled_waddle) + to_chat(user, "You switch off the waddle dampeners!") + enabled_waddle = TRUE + slowdown = initial(slowdown) + else + to_chat(user, "You switch on the waddle dampeners, [src] no longer slow you down!") + enabled_waddle = FALSE + slowdown = SHOES_SLOWDOWN + /obj/item/clothing/shoes/jackboots name = "jackboots" desc = "Nanotrasen-issue Security combat boots for combat scenarios or combat situations. All combat, all the time." @@ -288,7 +330,7 @@ name = "lizard skin boots" desc = "You can hear a faint hissing from inside the boots; you hope it is just a mournful ghost." icon_state = "lizardboots_green" - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 40, "acid" = 0) //lizards like to stay warm + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 40, ACID = 0) //lizards like to stay warm /obj/item/clothing/shoes/cowboy/lizardmasterwork name = "\improper Hugs-The-Feet lizard skin boots" diff --git a/code/modules/clothing/spacesuits/chronosuit.dm b/code/modules/clothing/spacesuits/chronosuit.dm index aab301df1a8..65d5b5dd00d 100644 --- a/code/modules/clothing/spacesuits/chronosuit.dm +++ b/code/modules/clothing/spacesuits/chronosuit.dm @@ -4,7 +4,7 @@ icon_state = "chronohelmet" item_state = "chronohelmet" slowdown = 1 - armor = list("melee" = 60, "bullet" = 60, "laser" = 60, "energy" = 60, "bomb" = 30, "bio" = 90, "rad" = 90, "fire" = 100, "acid" = 100) + armor = list(MELEE = 60, BULLET = 60, LASER = 60, ENERGY = 60, BOMB = 30, BIO = 90, RAD = 90, FIRE = 100, ACID = 100) resistance_flags = FIRE_PROOF | ACID_PROOF var/obj/item/clothing/suit/space/chronos/suit = null @@ -24,7 +24,7 @@ icon_state = "chronosuit" item_state = "chronosuit" actions_types = list(/datum/action/item_action/toggle) - armor = list("melee" = 60, "bullet" = 60, "laser" = 60, "energy" = 60, "bomb" = 30, "bio" = 90, "rad" = 90, "fire" = 100, "acid" = 1000) + armor = list(MELEE = 60, BULLET = 60, LASER = 60, ENERGY = 60, BOMB = 30, BIO = 90, RAD = 90, FIRE = 100, ACID = 1000) resistance_flags = FIRE_PROOF | ACID_PROOF var/obj/item/clothing/head/helmet/space/chronos/helmet = null var/obj/effect/chronos_cam/camera = null diff --git a/code/modules/clothing/spacesuits/ert.dm b/code/modules/clothing/spacesuits/ert.dm index 571785f46a0..535cd7f0435 100644 --- a/code/modules/clothing/spacesuits/ert.dm +++ b/code/modules/clothing/spacesuits/ert.dm @@ -5,7 +5,7 @@ icon_state = "hardsuit0-ert_commander" item_state = "helm-command" item_color = "ert_commander" - armor = list(melee = 45, bullet = 25, laser = 30, energy = 10, bomb = 25, bio = 100, rad = 50, fire = 80, acid = 80) + armor = list(MELEE = 45, BULLET = 25, LASER = 30, ENERGY = 10, BOMB = 25, BIO = 100, RAD = 50, FIRE = 80, ACID = 80) resistance_flags = FIRE_PROOF var/obj/machinery/camera/camera var/has_camera = TRUE @@ -50,7 +50,7 @@ item_state = "suit-command" w_class = WEIGHT_CLASS_NORMAL allowed = list(/obj/item/gun,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/melee/baton,/obj/item/melee/energy/sword/saber,/obj/item/restraints/handcuffs,/obj/item/tank/internals) - armor = list(melee = 45, bullet = 25, laser = 30, energy = 10, bomb = 25, bio = 100, rad = 50, fire = 80, acid = 80) + armor = list(MELEE = 45, BULLET = 25, LASER = 30, ENERGY = 10, BOMB = 25, BIO = 100, RAD = 50, FIRE = 80, ACID = 80) allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/t_scanner, /obj/item/rcd, /obj/item/crowbar, \ /obj/item/screwdriver, /obj/item/weldingtool, /obj/item/wirecutters, /obj/item/wrench, /obj/item/multitool, \ /obj/item/radio, /obj/item/analyzer, /obj/item/gun, /obj/item/melee/baton, /obj/item/reagent_containers/spray/pepper, \ @@ -121,6 +121,7 @@ /obj/item/clothing/head/helmet/space/hardsuit/ert/engineer name = "emergency response team engineer helmet" desc = "A helmet worn by engineers of a Nanotrasen Emergency Response Team. Has yellow highlights. Armoured and space ready." + armor = list(MELEE = 45, BULLET = 25, LASER = 30, ENERGY = 10, BOMB = 25, BIO = 100, RAD = 75, FIRE = 80, ACID = 80) icon_state = "hardsuit0-ert_engineer" item_state = "helm-orange" item_color = "ert_engineer" @@ -129,6 +130,7 @@ /obj/item/clothing/head/helmet/space/hardsuit/ert/engineer/gamma name = "elite emergency response team engineer helmet" max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT + armor = list(MELEE = 45, BULLET = 25, LASER = 30, ENERGY = 10, BOMB = 25, BIO = 100, RAD = 100, FIRE = 80, ACID = 80) icon_state = "hardsuit0-gammaengineer" item_color = "gammaengineer" @@ -137,12 +139,14 @@ desc = "A suit worn by the engineers of a Nanotrasen Emergency Response Team. Has yellow highlights. Armoured, space ready, and fire resistant." icon_state = "ert_engineer" item_state = "suit-orange" + armor = list(MELEE = 45, BULLET = 25, LASER = 30, ENERGY = 10, BOMB = 25, BIO = 100, RAD = 75, FIRE = 80, ACID = 80) helmettype = /obj/item/clothing/head/helmet/space/hardsuit/ert/engineer /obj/item/clothing/suit/space/hardsuit/ert/engineer/gamma name = "elite emergency response team engineer suit" max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT icon_state = "ert_gengineer" + armor = list(MELEE = 45, BULLET = 25, LASER = 30, ENERGY = 10, BOMB = 25, BIO = 100, RAD = 100, FIRE = 80, ACID = 80) helmettype = /obj/item/clothing/head/helmet/space/hardsuit/ert/engineer/gamma //Medical @@ -269,7 +273,7 @@ icon_state = "hardsuit0-solgovmarine" item_state = "hardsuit0-solgovmarine" item_color = "solgovmarine" - armor = list("melee" = 35, "bullet" = 60, "laser" = 15, "energy" = 10, "bomb" = 25, "bio" = 100, "rad" = 50, "fire" = 100, "acid" = 100) + armor = list(MELEE = 35, BULLET = 60, LASER = 15, ENERGY = 10, BOMB = 25, BIO = 100, RAD = 50, FIRE = 100, ACID = 100) /obj/item/clothing/suit/space/hardsuit/ert/solgov name = "\improper Trans-Solar Federation Specops Marine hardsuit" @@ -279,7 +283,7 @@ item_state = "ert_solgov_marine" helmettype = /obj/item/clothing/head/helmet/space/hardsuit/ert/solgov slowdown = 0 - armor = list("melee" = 35, "bullet" = 60, "laser" = 15, "energy" = 10, "bomb" = 25, "bio" = 100, "rad" = 50, "fire" = 100, "acid" = 100) + armor = list(MELEE = 35, BULLET = 60, LASER = 15, ENERGY = 10, BOMB = 25, BIO = 100, RAD = 50, FIRE = 100, ACID = 100) /obj/item/clothing/head/helmet/space/hardsuit/ert/solgov/command name = "\improper Trans-Solar Federation Specops Lieutenant helmet" diff --git a/code/modules/clothing/spacesuits/hardsuit.dm b/code/modules/clothing/spacesuits/hardsuit.dm index 58514aa5a59..3e851544b65 100644 --- a/code/modules/clothing/spacesuits/hardsuit.dm +++ b/code/modules/clothing/spacesuits/hardsuit.dm @@ -5,7 +5,7 @@ icon_state = "hardsuit0-engineering" item_state = "eng_helm" max_integrity = 300 - armor = list("melee" = 10, "bullet" = 5, "laser" = 10, "energy" = 5, "bomb" = 10, "bio" = 100, "rad" = 75, "fire" = 50, "acid" = 75) + armor = list(MELEE = 10, BULLET = 5, LASER = 10, ENERGY = 5, BOMB = 10, BIO = 100, RAD = 75, FIRE = 50, ACID = 75) var/basestate = "hardsuit" allowed = list(/obj/item/flashlight) var/brightness_on = 4 //luminosity when on @@ -146,7 +146,7 @@ icon_state = "hardsuit-engineering" item_state = "eng_hardsuit" max_integrity = 300 - armor = list("melee" = 10, "bullet" = 5, "laser" = 10, "energy" = 5, "bomb" = 10, "bio" = 100, "rad" = 75, "fire" = 50, "acid" = 75) + armor = list(MELEE = 10, BULLET = 5, LASER = 10, ENERGY = 5, BOMB = 10, BIO = 100, RAD = 75, FIRE = 50, ACID = 75) allowed = list(/obj/item/flashlight,/obj/item/tank/internals,/obj/item/t_scanner, /obj/item/rcd, /obj/item/rpd) siemens_coefficient = 0 var/obj/item/clothing/head/helmet/space/hardsuit/helmet @@ -237,7 +237,7 @@ desc = "A special helmet designed for work in a hazardous, low-pressure environment. Has radiation shielding." icon_state = "hardsuit0-engineering" item_state = "eng_helm" - armor = list("melee" = 30, "bullet" = 5, "laser" = 10, "energy" = 5, "bomb" = 10, "bio" = 100, "rad" = 75, "fire" = 100, "acid" = 75) + armor = list(MELEE = 30, BULLET = 5, LASER = 10, ENERGY = 5, BOMB = 10, BIO = 100, RAD = 75, FIRE = 100, ACID = 75) resistance_flags = FIRE_PROOF item_color = "engineering" @@ -246,7 +246,7 @@ desc = "A special suit that protects against hazardous, low pressure environments. Has radiation shielding." icon_state = "hardsuit-engineering" item_state = "eng_hardsuit" - armor = list("melee" = 30, "bullet" = 5, "laser" = 10, "energy" = 5, "bomb" = 10, "bio" = 100, "rad" = 75, "fire" = 100, "acid" = 75) + armor = list(MELEE = 30, BULLET = 5, LASER = 10, ENERGY = 5, BOMB = 10, BIO = 100, RAD = 75, FIRE = 100, ACID = 75) helmettype = /obj/item/clothing/head/helmet/space/hardsuit/engine dog_fashion = /datum/dog_fashion/back/hardsuit resistance_flags = FIRE_PROOF @@ -258,7 +258,7 @@ icon_state = "hardsuit0-atmos" item_state = "atmos_helm" item_color = "atmos" - armor = list("melee" = 30, "bullet" = 5, "laser" = 10, "energy" = 5, "bomb" = 10, "bio" = 100, "rad" = 25, "fire" = 100, "acid" = 75) + armor = list(MELEE = 30, BULLET = 5, LASER = 10, ENERGY = 5, BOMB = 10, BIO = 100, RAD = 25, FIRE = 100, ACID = 75) heat_protection = HEAD //Uncomment to enable firesuit protection max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT @@ -267,7 +267,7 @@ desc = "A special suit that protects against hazardous, low pressure environments. Has thermal shielding." icon_state = "hardsuit-atmos" item_state = "atmos_hardsuit" - armor = list("melee" = 30, "bullet" = 5, "laser" = 10, "energy" = 5, "bomb" = 10, "bio" = 100, "rad" = 25, "fire" = 100, "acid" = 75) + armor = list(MELEE = 30, BULLET = 5, LASER = 10, ENERGY = 5, BOMB = 10, BIO = 100, RAD = 25, FIRE = 100, ACID = 75) heat_protection = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS //Uncomment to enable firesuit protection max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT helmettype = /obj/item/clothing/head/helmet/space/hardsuit/engine/atmos @@ -280,7 +280,7 @@ icon_state = "hardsuit0-white" item_state = "ce_helm" item_color = "white" - armor = list("melee" = 40, "bullet" = 5, "laser" = 10, "energy" = 5, "bomb" = 50, "bio" = 100, "rad" = 100, "fire" = 100, "acid" = 90) + armor = list(MELEE = 40, BULLET = 5, LASER = 10, ENERGY = 5, BOMB = 50, BIO = 100, RAD = 100, FIRE = 100, ACID = 90) heat_protection = HEAD //Uncomment to enable firesuit protection max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT @@ -289,7 +289,7 @@ desc = "An advanced suit that protects against hazardous, low pressure environments. Shines with a high polish." icon_state = "hardsuit-white" item_state = "ce_hardsuit" - armor = list("melee" = 40, "bullet" = 5, "laser" = 10, "energy" = 5, "bomb" = 50, "bio" = 100, "rad" = 100, "fire" = 100, "acid" = 90) + armor = list(MELEE = 40, BULLET = 5, LASER = 10, ENERGY = 5, BOMB = 50, BIO = 100, RAD = 100, FIRE = 100, ACID = 90) heat_protection = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS //Uncomment to enable firesuit protection max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT helmettype = /obj/item/clothing/head/helmet/space/hardsuit/engine/elite @@ -306,7 +306,7 @@ max_heat_protection_temperature = FIRE_SUIT_MAX_TEMP_PROTECT resistance_flags = FIRE_PROOF heat_protection = HEAD - armor = list("melee" = 30, "bullet" = 5, "laser" = 10, "energy" = 5, "bomb" = 50, "bio" = 100, "rad" = 50, "fire" = 50, "acid" = 75) + armor = list(MELEE = 30, BULLET = 5, LASER = 10, ENERGY = 5, BOMB = 50, BIO = 100, RAD = 50, FIRE = 50, ACID = 75) brightness_on = 7 /obj/item/clothing/suit/space/hardsuit/mining @@ -316,7 +316,7 @@ item_state = "mining_hardsuit" max_heat_protection_temperature = FIRE_SUIT_MAX_TEMP_PROTECT resistance_flags = FIRE_PROOF - armor = list("melee" = 30, "bullet" = 5, "laser" = 10, "energy" = 5, "bomb" = 50, "bio" = 100, "rad" = 50, "fire" = 50, "acid" = 75) + armor = list(MELEE = 30, BULLET = 5, LASER = 10, ENERGY = 5, BOMB = 50, BIO = 100, RAD = 50, FIRE = 50, ACID = 75) allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/storage/bag/ore, /obj/item/pickaxe, /obj/item/resonator, /obj/item/mining_scanner, /obj/item/t_scanner/adv_mining_scanner, /obj/item/gun/energy/kinetic_accelerator) helmettype = /obj/item/clothing/head/helmet/space/hardsuit/mining heat_protection = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS @@ -329,7 +329,7 @@ icon_state = "hardsuit1-syndi" item_state = "syndie_helm" item_color = "syndi" - armor = list("melee" = 40, "bullet" = 50, "laser" = 30, "energy" = 15, "bomb" = 35, "bio" = 100, "rad" = 50, "fire" = 50, "acid" = 90) + armor = list(MELEE = 40, BULLET = 50, LASER = 30, ENERGY = 15, BOMB = 35, BIO = 100, RAD = 50, FIRE = 50, ACID = 90) on = 1 var/obj/item/clothing/suit/space/hardsuit/syndi/linkedsuit = null actions_types = list(/datum/action/item_action/toggle_helmet_mode) @@ -407,7 +407,7 @@ w_class = WEIGHT_CLASS_NORMAL var/on = 1 actions_types = list(/datum/action/item_action/toggle_hardsuit_mode) - armor = list("melee" = 40, "bullet" = 50, "laser" = 30, "energy" = 15, "bomb" = 35, "bio" = 100, "rad" = 50, "fire" = 50, "acid" = 90) + armor = list(MELEE = 40, BULLET = 50, LASER = 30, ENERGY = 15, BOMB = 35, BIO = 100, RAD = 50, FIRE = 50, ACID = 90) allowed = list(/obj/item/gun, /obj/item/ammo_box,/obj/item/ammo_casing, /obj/item/melee/baton, /obj/item/melee/energy/sword, /obj/item/restraints/handcuffs, /obj/item/tank/internals) helmettype = /obj/item/clothing/head/helmet/space/hardsuit/syndi jetpack = /obj/item/tank/jetpack/suit @@ -421,7 +421,7 @@ desc = "An elite version of the syndicate helmet, with improved armour and fire shielding. It is in travel mode. Property of Gorlex Marauders." icon_state = "hardsuit0-syndielite" item_color = "syndielite" - armor = list("melee" = 60, "bullet" = 60, "laser" = 50, "energy" = 25, "bomb" = 55, "bio" = 100, "rad" = 70, "fire" = 100, "acid" = 100) + armor = list(MELEE = 60, BULLET = 60, LASER = 50, ENERGY = 25, BOMB = 55, BIO = 100, RAD = 70, FIRE = 100, ACID = 100) heat_protection = HEAD max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT resistance_flags = FIRE_PROOF | ACID_PROOF @@ -432,7 +432,7 @@ icon_state = "hardsuit0-syndielite" item_color = "syndielite" helmettype = /obj/item/clothing/head/helmet/space/hardsuit/syndi/elite - armor = list("melee" = 60, "bullet" = 60, "laser" = 50, "energy" = 25, "bomb" = 55, "bio" = 100, "rad" = 70, "fire" = 100, "acid" = 100) + armor = list(MELEE = 60, BULLET = 60, LASER = 50, ENERGY = 25, BOMB = 55, BIO = 100, RAD = 70, FIRE = 100, ACID = 100) heat_protection = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT resistance_flags = FIRE_PROOF | ACID_PROOF @@ -478,7 +478,7 @@ item_state = "medical_helm" item_color = "medical" flash_protect = 0 - armor = list("melee" = 30, "bullet" = 5, "laser" = 10, "energy" = 5, "bomb" = 10, "bio" = 100, "rad" = 60, "fire" = 60, "acid" = 75) + armor = list(MELEE = 30, BULLET = 5, LASER = 10, ENERGY = 5, BOMB = 10, BIO = 100, RAD = 60, FIRE = 60, ACID = 75) scan_reagents = 1 //Generally worn by the CMO, so they'd get utility off of seeing reagents /obj/item/clothing/suit/space/hardsuit/medical @@ -487,7 +487,7 @@ icon_state = "hardsuit-medical" item_state = "medical_hardsuit" allowed = list(/obj/item/flashlight,/obj/item/tank/internals,/obj/item/storage/firstaid,/obj/item/healthanalyzer,/obj/item/stack/medical,/obj/item/rad_laser) - armor = list("melee" = 30, "bullet" = 5, "laser" = 10, "energy" = 5, "bomb" = 10, "bio" = 100, "rad" = 60, "fire" = 60, "acid" = 75) + armor = list(MELEE = 30, BULLET = 5, LASER = 10, ENERGY = 5, BOMB = 10, BIO = 100, RAD = 60, FIRE = 60, ACID = 75) helmettype = /obj/item/clothing/head/helmet/space/hardsuit/medical slowdown = 0.5 @@ -500,7 +500,7 @@ item_color = "rd" flash_protect = 0 scan_reagents = TRUE - armor = list("melee" = 30,"bullet" = 5, "laser" = 10, "energy" = 5, "bomb" = 100, "bio" = 100, "rad" = 60, "fire" = 60, "acid" = 80) + armor = list(MELEE = 30, BULLET = 5, LASER = 10, ENERGY = 5, BOMB = 100, BIO = 100, RAD = 60, FIRE = 60, ACID = 80) var/hud_active = FALSE var/explosion_detection_dist = 21 @@ -512,8 +512,8 @@ var/mob/living/carbon/human/U = user if(istype(U.glasses, /obj/item/clothing/glasses/hud/diagnostic)) // If they are for some reason wearing a diagnostic hud when they put the helmet on return // already have a hud - var/datum/atom_hud/H = GLOB.huds[DATA_HUD_DIAGNOSTIC] - H.add_hud_to(U) + var/datum/atom_hud/DHUD = GLOB.huds[DATA_HUD_DIAGNOSTIC_BASIC] + DHUD.add_hud_to(user) hud_active = TRUE @@ -521,8 +521,8 @@ ..() if((user.head == src) && hud_active) GLOB.doppler_arrays -= src - var/datum/atom_hud/H = GLOB.huds[DATA_HUD_DIAGNOSTIC] - H.remove_hud_from(user) + var/datum/atom_hud/DHUD = GLOB.huds[DATA_HUD_DIAGNOSTIC_BASIC] + DHUD.remove_hud_from(user) /obj/item/clothing/head/helmet/space/hardsuit/rd/proc/sense_explosion(x0, y0, z0, devastation_range, heavy_impact_range, light_impact_range, took, orig_dev_range, orig_heavy_range, orig_light_range) @@ -548,7 +548,7 @@ max_heat_protection_temperature = FIRE_SUIT_MAX_TEMP_PROTECT //Same as an emergency firesuit. Not ideal for extended exposure. allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/gun/energy/wormhole_projector, /obj/item/hand_tele, /obj/item/aicard) - armor = list("melee" = 30,"bullet" = 5, "laser" = 10, "energy" = 5, "bomb" = 100, "bio" = 100, "rad" = 60, "fire" = 60, "acid" = 80) + armor = list(MELEE = 30, BULLET = 5, LASER = 10, ENERGY = 5, BOMB = 100, BIO = 100, RAD = 60, FIRE = 60, ACID = 80) helmettype = /obj/item/clothing/head/helmet/space/hardsuit/rd @@ -559,14 +559,14 @@ icon_state = "hardsuit0-sec" item_state = "sec_helm" item_color = "sec" - armor = list("melee" = 35, "bullet" = 15, "laser" = 30,"energy" = 10, "bomb" = 10, "bio" = 100, "rad" = 50, "fire" = 75, "acid" = 75) + armor = list(MELEE = 35, BULLET = 15, LASER = 30, ENERGY = 10, BOMB = 10, BIO = 100, RAD = 50, FIRE = 75, ACID = 75) /obj/item/clothing/suit/space/hardsuit/security name = "security hardsuit" desc = "A special suit that protects against hazardous, low pressure environments. Has an additional layer of armor." icon_state = "hardsuit-sec" item_state = "sec_hardsuit" - armor = list("melee" = 35, "bullet" = 15, "laser" = 30, "energy" = 10, "bomb" = 10, "bio" = 100, "rad" = 50, "fire" = 75, "acid" = 75) + armor = list(MELEE = 35, BULLET = 15, LASER = 30, ENERGY = 10, BOMB = 10, BIO = 100, RAD = 50, FIRE = 75, ACID = 75) allowed = list(/obj/item/gun,/obj/item/flashlight,/obj/item/tank/internals,/obj/item/melee/baton,/obj/item/reagent_containers/spray/pepper,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/restraints/handcuffs) helmettype = /obj/item/clothing/head/helmet/space/hardsuit/security @@ -575,13 +575,13 @@ desc = "A special bulky helmet designed for work in a hazardous, low pressure environment. Has an additional layer of armor." icon_state = "hardsuit0-hos" item_color = "hos" - armor = list("melee" = 45, "bullet" = 25, "laser" = 30, "energy" = 10, "bomb" = 25, "bio" = 100, "rad" = 50, "fire" = 95, "acid" = 95) + armor = list(MELEE = 45, BULLET = 25, LASER = 30, ENERGY = 10, BOMB = 25, BIO = 100, RAD = 50, FIRE = 95, ACID = 95) /obj/item/clothing/suit/space/hardsuit/security/hos name = "head of security's hardsuit" desc = "A special bulky suit that protects against hazardous, low pressure environments. Has an additional layer of armor." icon_state = "hardsuit-hos" - armor = list("melee" = 45, "bullet" = 25, "laser" = 30, "energy" = 10, "bomb" = 25, "bio" = 100, "rad" = 50, "fire" = 95, "acid" = 95) + armor = list(MELEE = 45, BULLET = 25, LASER = 30, ENERGY = 10, BOMB = 25, BIO = 100, RAD = 50, FIRE = 95, ACID = 95) helmettype = /obj/item/clothing/head/helmet/space/hardsuit/security/hos jetpack = /obj/item/tank/jetpack/suit @@ -615,7 +615,7 @@ icon_state = "hardsuit-hos" helmettype = /obj/item/clothing/head/helmet/space/hardsuit/shielded allowed = list(/obj/item/flashlight,/obj/item/tank/internals, /obj/item/gun,/obj/item/reagent_containers/spray/pepper,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/melee/baton,/obj/item/restraints/handcuffs) - armor = list("melee" = 30, "bullet" = 15, "laser" = 30, "energy" = 10, "bomb" = 10, "bio" = 100, "rad" = 50, "fire" = 100, "acid" = 100) + armor = list(MELEE = 30, BULLET = 15, LASER = 30, ENERGY = 10, BOMB = 10, BIO = 100, RAD = 50, FIRE = 100, ACID = 100) resistance_flags = FIRE_PROOF | ACID_PROOF var/current_charges = 3 var/max_charges = 3 //How many charges total the shielding has @@ -667,7 +667,7 @@ icon_state = "hardsuit0-sec" item_state = "sec_helm" item_color = "sec" - armor = list("melee" = 30, "bullet" = 15, "laser" = 30, "energy" = 10, "bomb" = 10, "bio" = 100, "rad" = 50, "fire" = 100, "acid" = 100) + armor = list(MELEE = 30, BULLET = 15, LASER = 30, ENERGY = 10, BOMB = 10, BIO = 100, RAD = 50, FIRE = 100, ACID = 100) resistance_flags = FIRE_PROOF | ACID_PROOF @@ -679,7 +679,7 @@ icon_state = "hardsuit1-syndi" item_state = "syndie_hardsuit" item_color = "syndi" - armor = list("melee" = 40, "bullet" = 50, "laser" = 30, "energy" = 15, "bomb" = 35, "bio" = 100, "rad" = 50, "fire" = 100, "acid" = 100) + armor = list(MELEE = 40, BULLET = 50, LASER = 30, ENERGY = 15, BOMB = 35, BIO = 100, RAD = 50, FIRE = 100, ACID = 100) allowed = list(/obj/item/gun,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/melee/baton,/obj/item/melee/energy/sword/saber,/obj/item/restraints/handcuffs,/obj/item/tank/internals) slowdown = 0 helmettype = /obj/item/clothing/head/helmet/space/hardsuit/shielded/syndi @@ -710,7 +710,7 @@ icon_state = "hardsuit1-syndi" item_state = "syndie_helm" item_color = "syndi" - armor = list("melee" = 40, "bullet" = 50, "laser" = 30, "energy" = 15, "bomb" = 35, "bio" = 100, "rad" = 50, "fire" = 100, "acid" = 100) + armor = list(MELEE = 40, BULLET = 50, LASER = 30, ENERGY = 15, BOMB = 35, BIO = 100, RAD = 50, FIRE = 100, ACID = 100) //////Security Version (Gamma armory only) @@ -720,7 +720,7 @@ desc = "A more advanced version of the normal security hardsuit. Comes with built in energy shielding." icon_state = "hardsuit-sec" item_state = "sec-hardsuit" - armor = list("melee" = 35, "bullet" = 15, "laser" = 30, "energy" = 10, "bomb" = 10, "bio" = 100, "rad" = 50, "fire" = 75, "acid" = 75) + armor = list(MELEE = 35, BULLET = 15, LASER = 30, ENERGY = 10, BOMB = 10, BIO = 100, RAD = 50, FIRE = 75, ACID = 75) allowed = list(/obj/item/gun,/obj/item/flashlight,/obj/item/tank,/obj/item/melee/baton,/obj/item/reagent_containers/spray/pepper,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/restraints/handcuffs) helmettype = /obj/item/clothing/head/helmet/space/hardsuit/shielded/gamma @@ -730,5 +730,5 @@ icon_state = "hardsuit0-sec" item_state = "sec_helm" item_color = "sec" - armor = list("melee" = 35, "bullet" = 15, "laser" = 30,"energy" = 10, "bomb" = 10, "bio" = 100, "rad" = 50, "fire" = 75, "acid" = 75) + armor = list(MELEE = 35, BULLET = 15, LASER = 30, ENERGY = 10, BOMB = 10, BIO = 100, RAD = 50, FIRE = 75, ACID = 75) diff --git a/code/modules/clothing/spacesuits/miscellaneous.dm b/code/modules/clothing/spacesuits/miscellaneous.dm index 32c192c213e..18b44128873 100644 --- a/code/modules/clothing/spacesuits/miscellaneous.dm +++ b/code/modules/clothing/spacesuits/miscellaneous.dm @@ -6,7 +6,7 @@ desc = "A special helmet designed for only the most fashionable of military figureheads." flags_inv = HIDEFACE permeability_coefficient = 0.01 - armor = list("melee" = 40, "bullet" = 50, "laser" = 50, "energy" = 25, "bomb" = 50, "bio" = 100, "rad" = 50, "fire" = 100, "acid" = 100) + armor = list(MELEE = 40, BULLET = 50, LASER = 50, ENERGY = 25, BOMB = 50, BIO = 100, RAD = 50, FIRE = 100, ACID = 100) species_restricted = list("exclude", "Wryn") sprite_sheets = list( @@ -30,7 +30,7 @@ item_state = "capspacesuit" w_class = WEIGHT_CLASS_BULKY allowed = list(/obj/item/tank/internals, /obj/item/flashlight,/obj/item/gun/energy, /obj/item/gun/projectile, /obj/item/ammo_box, /obj/item/ammo_casing, /obj/item/melee/baton,/obj/item/restraints/handcuffs) - armor = list("melee" = 40, "bullet" = 50, "laser" = 50, "energy" = 25, "bomb" = 50, "bio" = 100, "rad" = 50, "fire" = 100, "acid" = 100) + armor = list(MELEE = 40, BULLET = 50, LASER = 50, ENERGY = 25, BOMB = 50, BIO = 100, RAD = 50, FIRE = 100, ACID = 100) species_restricted = list("exclude", "Wryn") sprite_sheets = list( @@ -43,7 +43,7 @@ desc = "That's not red paint. That's real blood." icon_state = "deathsquad" item_state = "deathsquad" - armor = list("melee" = 80, "bullet" = 80, "laser" = 50, "energy" = 50, "bomb" = 100, "bio" = 100, "rad" = 100, "fire" = 100, "acid" = 100) + armor = list(MELEE = 80, BULLET = 80, LASER = 50, ENERGY = 50, BOMB = 100, BIO = 100, RAD = 100, FIRE = 100, ACID = 100) max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT resistance_flags = FIRE_PROOF | ACID_PROOF vision_flags = SEE_MOBS @@ -58,7 +58,7 @@ icon_state = "deathsquad" item_state = "swat_suit" allowed = list(/obj/item/gun,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/melee/baton,/obj/item/restraints/handcuffs,/obj/item/tank/internals,/obj/item/kitchen/knife/combat) - armor = list("melee" = 80, "bullet" = 80, "laser" = 50, "energy" = 50, "bomb" = 100, "bio" = 100, "rad" = 100, "fire" = 100, "acid" = 100) + armor = list(MELEE = 80, BULLET = 80, LASER = 50, ENERGY = 50, BOMB = 100, BIO = 100, RAD = 100, FIRE = 100, ACID = 100) max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT resistance_flags = FIRE_PROOF | ACID_PROOF strip_delay = 130 @@ -71,7 +71,7 @@ icon_state = "heavy" item_state = "swat_suit" allowed = list(/obj/item/gun,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/melee/baton,/obj/item/restraints/handcuffs,/obj/item/tank/internals,/obj/item/kitchen/knife/combat) - armor = list("melee" = 40, "bullet" = 30, "laser" = 30,"energy" = 30, "bomb" = 50, "bio" = 90, "rad" = 20, "fire" = 100, "acid" = 100) + armor = list(MELEE = 40, BULLET = 30, LASER = 30, ENERGY = 30, BOMB = 50, BIO = 90, RAD = 20, FIRE = 100, ACID = 100) strip_delay = 120 resistance_flags = FIRE_PROOF | ACID_PROOF species_restricted = list("exclude", "Wryn") @@ -84,7 +84,7 @@ name = "officer beret" desc = "An armored beret commonly used by special operations officers." icon_state = "beret_officer" - armor = list("melee" = 80, "bullet" = 80, "laser" = 50, "energy" = 50, "bomb" = 100, "bio" = 100, "rad" = 100, "fire" = 100, "acid" = 100) + armor = list(MELEE = 80, BULLET = 80, LASER = 50, ENERGY = 50, BOMB = 100, BIO = 100, RAD = 100, FIRE = 100, ACID = 100) flags = STOPSPRESSUREDMAGE | THICKMATERIAL /obj/item/clothing/head/helmet/space/deathsquad/beret/solgov @@ -100,7 +100,7 @@ blood_overlay_type = "coat" flags_inv = 0 slowdown = 0 - armor = list("melee" = 80, "bullet" = 80, "laser" = 50, "energy" = 50, "bomb" = 100, "bio" = 100, "rad" = 100, "fire" = 100, "acid" = 100) + armor = list(MELEE = 80, BULLET = 80, LASER = 50, ENERGY = 50, BOMB = 100, BIO = 100, RAD = 100, FIRE = 100, ACID = 100) resistance_flags = FIRE_PROOF | ACID_PROOF w_class = WEIGHT_CLASS_NORMAL @@ -149,7 +149,7 @@ desc = "Yarr." icon_state = "pirate" item_state = "pirate" - armor = list("melee" = 30, "bullet" = 50, "laser" = 30,"energy" = 15, "bomb" = 30, "bio" = 30, "rad" = 30, "fire" = 60, "acid" = 75) + armor = list(MELEE = 30, BULLET = 50, LASER = 30, ENERGY = 15, BOMB = 30, BIO = 30, RAD = 30, FIRE = 60, ACID = 75) flags = BLOCKHAIR | STOPSPRESSUREDMAGE flags_cover = HEADCOVERSEYES strip_delay = 40 @@ -163,7 +163,7 @@ w_class = WEIGHT_CLASS_NORMAL allowed = list(/obj/item/gun,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/melee/baton,/obj/item/restraints/handcuffs,/obj/item/tank/internals) slowdown = 0 - armor = list("melee" = 30, "bullet" = 50, "laser" = 30,"energy" = 15, "bomb" = 30, "bio" = 30, "rad" = 30, "fire" = 60, "acid" = 75) + armor = list(MELEE = 30, BULLET = 50, LASER = 30, ENERGY = 15, BOMB = 30, BIO = 30, RAD = 30, FIRE = 60, ACID = 75) strip_delay = 40 put_on_delay = 20 diff --git a/code/modules/clothing/spacesuits/plasmamen.dm b/code/modules/clothing/spacesuits/plasmamen.dm index df18facbb10..184de7d0e58 100644 --- a/code/modules/clothing/spacesuits/plasmamen.dm +++ b/code/modules/clothing/spacesuits/plasmamen.dm @@ -7,7 +7,7 @@ strip_delay = 80 flash_protect = 2 tint = 2 - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 100, "rad" = 0, "fire" = 100, "acid" = 75) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 100, RAD = 0, FIRE = 100, ACID = 75) resistance_flags = FIRE_PROOF var/brightness_on = 4 //luminosity when the light is on var/on = FALSE @@ -96,7 +96,7 @@ desc = "A plasmaman containment helmet designed for security officers, protecting them from being flashed and burning alive, alongside other undesirables." icon_state = "security_envirohelm" item_state = "security_envirohelm" - armor = list("melee" = 10, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 100, "rad" = 0, "fire" = 100, "acid" = 75) + armor = list(MELEE = 10, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 100, RAD = 0, FIRE = 100, ACID = 75) /obj/item/clothing/head/helmet/space/plasmaman/security/warden name = "warden's plasma envirosuit helmet" @@ -163,7 +163,7 @@ desc = "A space-worthy helmet specially designed for engineer plasmamen, the usual purple stripes being replaced by engineering's orange." icon_state = "engineer_envirohelm" item_state = "engineer_envirohelm" - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 100, "rad" = 10, "fire" = 100, "acid" = 75) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 100, RAD = 10, FIRE = 100, ACID = 75) /obj/item/clothing/head/helmet/space/plasmaman/engineering/ce name = "chief engineer's plasma envirosuit helmet" @@ -267,7 +267,7 @@ item_state = "wizard_envirohelm" gas_transfer_coefficient = 0.01 permeability_coefficient = 0.01 - armor = list("melee" = 30, "bullet" = 20, "laser" = 20, "energy" = 20, "bomb" = 20, "bio" = 20, "rad" = 20, "fire" = 100, "acid" = 100) + armor = list(MELEE = 30, BULLET = 20, LASER = 20, ENERGY = 20, BOMB = 20, BIO = 20, RAD = 20, FIRE = 100, ACID = 100) resistance_flags = FIRE_PROOF | ACID_PROOF magical = TRUE diff --git a/code/modules/clothing/spacesuits/syndi.dm b/code/modules/clothing/spacesuits/syndi.dm index 696428b90ff..e365d669c92 100644 --- a/code/modules/clothing/spacesuits/syndi.dm +++ b/code/modules/clothing/spacesuits/syndi.dm @@ -5,7 +5,7 @@ icon_state = "syndicate" item_state = "syndicate" desc = "Has a tag on it: Totally not property of a hostile corporation, honest!" - armor = list("melee" = 40, "bullet" = 50, "laser" = 30,"energy" = 15, "bomb" = 30, "bio" = 30, "rad" = 30, "fire" = 80, "acid" = 85) + armor = list(MELEE = 40, BULLET = 50, LASER = 30, ENERGY = 15, BOMB = 30, BIO = 30, RAD = 30, FIRE = 80, ACID = 85) sprite_sheets = list( "Grey" = 'icons/mob/clothing/species/grey/helmet.dmi', "Tajaran" = 'icons/mob/clothing/species/tajaran/helmet.dmi', @@ -21,7 +21,7 @@ desc = "Has a tag on it: Totally not property of a hostile corporation, honest!" w_class = WEIGHT_CLASS_NORMAL allowed = list(/obj/item/gun,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/melee/baton,/obj/item/melee/energy/sword/saber,/obj/item/restraints/handcuffs,/obj/item/tank/internals) - armor = list("melee" = 40, "bullet" = 50, "laser" = 30,"energy" = 15, "bomb" = 30, "bio" = 30, "rad" = 30, "fire" = 80, "acid" = 85) + armor = list(MELEE = 40, BULLET = 50, LASER = 30, ENERGY = 15, BOMB = 30, BIO = 30, RAD = 30, FIRE = 80, ACID = 85) sprite_sheets = list( "Tajaran" = 'icons/mob/clothing/species/tajaran/suit.dmi', "Unathi" = 'icons/mob/clothing/species/unathi/suit.dmi', diff --git a/code/modules/clothing/spacesuits/void.dm b/code/modules/clothing/spacesuits/void.dm index e81482dd340..bd2d248d8b7 100644 --- a/code/modules/clothing/spacesuits/void.dm +++ b/code/modules/clothing/spacesuits/void.dm @@ -75,7 +75,7 @@ icon_state = "void-syndi" desc = "A high tech, NASA Centcom branch designed space suit helmet. This one looks rather suspicious." flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE - armor = list("melee" = 40, "bullet" = 50, "laser" = 30,"energy" = 15, "bomb" = 30, "bio" = 30, "rad" = 30, "fire" = 80, "acid" = 85) + armor = list(MELEE = 40, BULLET = 50, LASER = 30, ENERGY = 15, BOMB = 30, BIO = 30, RAD = 30, FIRE = 80, ACID = 85) /obj/item/clothing/suit/space/nasavoid/syndi name = "blood-red NASA void suit" @@ -83,7 +83,7 @@ desc = "A high tech, NASA Centcom branch designed space suit. This one looks rather suspicious." w_class = WEIGHT_CLASS_NORMAL allowed = list(/obj/item/gun,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/melee/baton,/obj/item/melee/energy/sword/saber,/obj/item/restraints/handcuffs,/obj/item/tank/internals) - armor = list("melee" = 40, "bullet" = 50, "laser" = 30,"energy" = 15, "bomb" = 30, "bio" = 30, "rad" = 30, "fire" = 80, "acid" = 85) + armor = list(MELEE = 40, BULLET = 50, LASER = 30, ENERGY = 15, BOMB = 30, BIO = 30, RAD = 30, FIRE = 80, ACID = 85) //random spawner diff --git a/code/modules/clothing/suits/armor.dm b/code/modules/clothing/suits/armor.dm index b928ff403b5..d3708923c7d 100644 --- a/code/modules/clothing/suits/armor.dm +++ b/code/modules/clothing/suits/armor.dm @@ -9,7 +9,7 @@ put_on_delay = 40 max_integrity = 250 resistance_flags = NONE - armor = list("melee" = 30, "bullet" = 30, "laser" = 30, "energy" = 10, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50) + armor = list(MELEE = 30, BULLET = 30, LASER = 30, ENERGY = 10, BOMB = 25, BIO = 0, RAD = 0, FIRE = 50, ACID = 50) sprite_sheets = list( "Vox" = 'icons/mob/clothing/species/vox/suit.dmi', ) @@ -113,7 +113,7 @@ icon_state = "hos" item_state = "hos" body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS|LEGS - armor = list("melee" = 30, "bullet" = 30, "laser" = 30, "energy" = 10, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 70, "acid" = 90) + armor = list(MELEE = 30, BULLET = 30, LASER = 30, ENERGY = 10, BOMB = 25, BIO = 0, RAD = 0, FIRE = 70, ACID = 90) flags_inv = HIDEJUMPSUIT cold_protection = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS heat_protection = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS @@ -161,7 +161,7 @@ icon_state = "capcarapace" item_state = "armor" body_parts_covered = UPPER_TORSO|LOWER_TORSO - armor = list("melee" = 50, "bullet" = 40, "laser" = 50, "energy" = 10, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 90) + armor = list(MELEE = 50, BULLET = 40, LASER = 50, ENERGY = 10, BOMB = 25, BIO = 0, RAD = 0, FIRE = 100, ACID = 90) dog_fashion = null resistance_flags = FIRE_PROOF @@ -179,7 +179,7 @@ body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS cold_protection = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS heat_protection = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS - armor = list("melee" = 50, "bullet" = 10, "laser" = 10, "energy" = 10, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 80) + armor = list(MELEE = 50, BULLET = 10, LASER = 10, ENERGY = 10, BOMB = 0, BIO = 0, RAD = 0, FIRE = 80, ACID = 80) flags_inv = HIDEJUMPSUIT strip_delay = 80 put_on_delay = 60 @@ -220,7 +220,7 @@ strip_delay = 60 max_integrity = 200 resistance_flags = FLAMMABLE - armor = list("melee" = 20, "bullet" = 10, "laser" = 30, "energy" = 5, "bomb" = 15, "bio" = 0, "rad" = 0, "fire" = 40, "acid" = 50) + armor = list(MELEE = 20, BULLET = 10, LASER = 30, ENERGY = 5, BOMB = 15, BIO = 0, RAD = 0, FIRE = 40, ACID = 50) /obj/item/clothing/suit/armor/bulletproof name = "bulletproof vest" @@ -228,7 +228,7 @@ icon_state = "bulletproof" item_state = "armor" blood_overlay_type = "armor" - armor = list("melee" = 15, "bullet" = 60, "laser" = 10, "energy" = 10, "bomb" = 40, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50) + armor = list(MELEE = 15, BULLET = 60, LASER = 10, ENERGY = 10, BOMB = 40, BIO = 0, RAD = 0, FIRE = 50, ACID = 50) strip_delay = 70 put_on_delay = 50 @@ -238,7 +238,7 @@ icon_state = "armor_reflec" item_state = "armor_reflec" blood_overlay_type = "armor" - armor = list("melee" = 10, "bullet" = 10, "laser" = 60, "energy" = 50, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100) + armor = list(MELEE = 10, BULLET = 10, LASER = 60, ENERGY = 50, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 100) resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF var/hit_reflect_chance = 40 @@ -267,7 +267,7 @@ icon_state = "reactiveoff" item_state = "reactiveoff" blood_overlay_type = "armor" - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 100) actions_types = list(/datum/action/item_action/toggle) resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF hit_reaction_chance = 50 @@ -472,14 +472,14 @@ cold_protection = UPPER_TORSO | LOWER_TORSO | LEGS | FEET | ARMS | HANDS min_cold_protection_temperature = SPACE_SUIT_MIN_TEMP_PROTECT sprite_sheets = null - armor = list("melee" = 80, "bullet" = 80, "laser" = 50, "energy" = 50, "bomb" = 100, "bio" = 100, "rad" = 100, "fire" = 90, "acid" = 90) + armor = list(MELEE = 80, BULLET = 80, LASER = 50, ENERGY = 50, BOMB = 100, BIO = 100, RAD = 100, FIRE = 90, ACID = 90) /obj/item/clothing/suit/armor/heavy name = "heavy armor" desc = "A heavily armored suit that protects against moderate damage." icon_state = "heavy" item_state = "swat_suit" - armor = list("melee" = 80, "bullet" = 80, "laser" = 50, "energy" = 50, "bomb" = 100, "bio" = 100, "rad" = 100, "fire" = 90, "acid" = 90) + armor = list(MELEE = 80, BULLET = 80, LASER = 50, ENERGY = 50, BOMB = 100, BIO = 100, RAD = 100, FIRE = 90, ACID = 90) w_class = WEIGHT_CLASS_BULKY gas_transfer_coefficient = 0.90 flags = THICKMATERIAL @@ -489,7 +489,7 @@ hide_tail_by_species = list("Vox") /obj/item/clothing/suit/armor/tdome - armor = list("melee" = 80, "bullet" = 80, "laser" = 50, "energy" = 50, "bomb" = 100, "bio" = 100, "rad" = 100, "fire" = 90, "acid" = 90) + armor = list(MELEE = 80, BULLET = 80, LASER = 50, ENERGY = 50, BOMB = 100, BIO = 100, RAD = 100, FIRE = 90, ACID = 90) body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT flags = THICKMATERIAL @@ -572,7 +572,7 @@ item_state = "dragon" desc = "A suit of armour fashioned from the remains of an ash drake." allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/resonator, /obj/item/mining_scanner, /obj/item/t_scanner/adv_mining_scanner, /obj/item/gun/energy/kinetic_accelerator, /obj/item/pickaxe, /obj/item/twohanded/spear) - armor = list("melee" = 70, "bullet" = 30, "laser" = 50, "energy" = 40, "bomb" = 70, "bio" = 60, "rad" = 50, "fire" = 100, "acid" = 100) + armor = list(MELEE = 70, BULLET = 30, LASER = 50, ENERGY = 40, BOMB = 70, BIO = 60, RAD = 50, FIRE = 100, ACID = 100) hoodtype = /obj/item/clothing/head/hooded/drake heat_protection = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS @@ -584,7 +584,7 @@ icon_state = "dragon" item_state = "dragon" desc = "The skull of a dragon." - armor = list("melee" = 70, "bullet" = 30, "laser" = 50, "energy" = 40, "bomb" = 70, "bio" = 60, "rad" = 50, "fire" = 100, "acid" = 100) + armor = list(MELEE = 70, BULLET = 30, LASER = 50, ENERGY = 40, BOMB = 70, BIO = 60, RAD = 50, FIRE = 100, ACID = 100) heat_protection = HEAD max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT resistance_flags = FIRE_PROOF | ACID_PROOF @@ -597,7 +597,7 @@ item_state = "goliath_cloak" desc = "A staunch, practical cape made out of numerous monster materials, it is coveted amongst exiles & hermits." allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/pickaxe, /obj/item/twohanded/spear, /obj/item/organ/internal/regenerative_core/legion, /obj/item/kitchen/knife/combat/survival) - armor = list("melee" = 35, "bullet" = 10, "laser" = 25, "energy" = 10, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 60, "acid" = 60) //a fair alternative to bone armor, requiring alternative materials and gaining a suit slot + armor = list(MELEE = 35, BULLET = 10, LASER = 25, ENERGY = 10, BOMB = 25, BIO = 0, RAD = 0, FIRE = 60, ACID = 60) //a fair alternative to bone armor, requiring alternative materials and gaining a suit slot hoodtype = /obj/item/clothing/head/hooded/goliath body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS @@ -606,7 +606,7 @@ icon_state = "golhood" item_state = "golhood" desc = "A protective & concealing hood." - armor = list("melee" = 35, "bullet" = 10, "laser" = 25, "energy" = 10, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 60, "acid" = 60) + armor = list(MELEE = 35, BULLET = 10, LASER = 25, ENERGY = 10, BOMB = 25, BIO = 0, RAD = 0, FIRE = 60, ACID = 60) flags = BLOCKHAIR flags_cover = HEADCOVERSEYES @@ -616,5 +616,5 @@ icon_state = "bonearmor" item_state = "bonearmor" blood_overlay_type = "armor" - armor = list("melee" = 35, "bullet" = 25, "laser" = 25, "energy" = 10, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50) + armor = list(MELEE = 35, BULLET = 25, LASER = 25, ENERGY = 10, BOMB = 25, BIO = 0, RAD = 0, FIRE = 50, ACID = 50) body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS diff --git a/code/modules/clothing/suits/bio.dm b/code/modules/clothing/suits/bio.dm index 448df4cf4e7..a833d9c6d1f 100644 --- a/code/modules/clothing/suits/bio.dm +++ b/code/modules/clothing/suits/bio.dm @@ -6,7 +6,7 @@ permeability_coefficient = 0.01 flags = BLOCKHAIR | THICKMATERIAL flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH - armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 100, "rad" = 80, "fire" = 30, "acid" = 100) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 100, RAD = 80, FIRE = 30, ACID = 100) flags_inv = HIDEMASK|HIDEEARS|HIDEEYES resistance_flags = ACID_PROOF @@ -30,7 +30,7 @@ body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS slowdown = 1 allowed = list(/obj/item/tank/internals/emergency_oxygen,/obj/item/pen,/obj/item/flashlight/pen) - armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 100, "rad" = 80, "fire" = 30, "acid" = 100) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 100, RAD = 80, FIRE = 30, ACID = 100) flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT|HIDETAIL strip_delay = 70 put_on_delay = 70 @@ -61,11 +61,11 @@ //Security biosuit, grey with red stripe across the chest /obj/item/clothing/head/bio_hood/security - armor = list("melee" = 25, "bullet" = 15, "laser" = 25, "energy" = 10, "bomb" = 25, "bio" = 100, "rad" = 80, "fire" = 30, "acid" = 100) + armor = list(MELEE = 25, BULLET = 15, LASER = 25, ENERGY = 10, BOMB = 25, BIO = 100, RAD = 80, FIRE = 30, ACID = 100) icon_state = "bio_security" /obj/item/clothing/suit/bio_suit/security - armor = list("melee" = 25, "bullet" = 15, "laser" = 25, "energy" = 10, "bomb" = 25, "bio" = 100, "rad" = 80, "fire" = 30, "acid" = 100) + armor = list(MELEE = 25, BULLET = 15, LASER = 25, ENERGY = 10, BOMB = 25, BIO = 100, RAD = 80, FIRE = 30, ACID = 100) icon_state = "bio_security" diff --git a/code/modules/clothing/suits/jobs.dm b/code/modules/clothing/suits/jobs.dm index ed7c776058f..fc152b9e45c 100644 --- a/code/modules/clothing/suits/jobs.dm +++ b/code/modules/clothing/suits/jobs.dm @@ -180,7 +180,7 @@ blood_overlay_type = "coat" body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS allowed = list(/obj/item/tank/internals/emergency_oxygen, /obj/item/reagent_containers/spray/pepper, /obj/item/flashlight, /obj/item/gun, /obj/item/ammo_box, /obj/item/ammo_casing, /obj/item/melee/baton, /obj/item/restraints/handcuffs, /obj/item/storage/fancy/cigarettes, /obj/item/lighter, /obj/item/detective_scanner, /obj/item/taperecorder) - armor = list("melee" = 25, "bullet" = 10, "laser" = 25, "energy" = 10, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 45) + armor = list(MELEE = 25, BULLET = 10, LASER = 25, ENERGY = 10, BOMB = 0, BIO = 0, RAD = 0, FIRE = 0, ACID = 45) cold_protection = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS heat_protection = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS diff --git a/code/modules/clothing/suits/labcoat.dm b/code/modules/clothing/suits/labcoat.dm index fd0cc650679..e931c36977b 100644 --- a/code/modules/clothing/suits/labcoat.dm +++ b/code/modules/clothing/suits/labcoat.dm @@ -8,7 +8,7 @@ blood_overlay_type = "coat" body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS allowed = list(/obj/item/analyzer, /obj/item/stack/medical, /obj/item/dnainjector, /obj/item/reagent_containers/dropper, /obj/item/reagent_containers/syringe, /obj/item/reagent_containers/hypospray, /obj/item/reagent_containers/applicator, /obj/item/healthanalyzer, /obj/item/flashlight/pen, /obj/item/reagent_containers/glass/bottle, /obj/item/reagent_containers/glass/beaker, /obj/item/reagent_containers/food/pill, /obj/item/storage/pill_bottle, /obj/item/paper, /obj/item/rad_laser, /obj/item/robotanalyzer) - armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 50, "rad" = 0, "fire" = 50, "acid" = 50) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 50, RAD = 0, FIRE = 50, ACID = 50) species_exception = list(/datum/species/golem) sprite_sheets = list( "Vox" = 'icons/mob/clothing/species/vox/suit.dmi', diff --git a/code/modules/clothing/suits/miscellaneous.dm b/code/modules/clothing/suits/miscellaneous.dm index 47b79e2d228..7fc26d5c16c 100644 --- a/code/modules/clothing/suits/miscellaneous.dm +++ b/code/modules/clothing/suits/miscellaneous.dm @@ -370,7 +370,7 @@ body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS cold_protection = UPPER_TORSO|LOWER_TORSO|ARMS min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT - armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 10, "rad" = 0, "fire" = 0, "acid" = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 10, RAD = 0, FIRE = 0, ACID = 0) allowed = list(/obj/item/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter) sprite_sheets = list("Vox" = 'icons/mob/clothing/species/vox/suit.dmi') @@ -392,7 +392,7 @@ icon_state = "wintercoat_captain" w_class = WEIGHT_CLASS_NORMAL item_state = "coatcaptain" - armor = list("melee" = 25, "bullet" = 30, "laser" = 30, "energy" = 10, "bomb" = 25, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 50) + armor = list(MELEE = 25, BULLET = 30, LASER = 30, ENERGY = 10, BOMB = 25, BIO = 0, RAD = 0, FIRE = 0, ACID = 50) allowed = list(/obj/item/gun/energy, /obj/item/reagent_containers/spray/pepper, /obj/item/gun/projectile, /obj/item/ammo_box,/obj/item/ammo_casing, /obj/item/melee/baton, /obj/item/restraints/handcuffs, /obj/item/flashlight/seclite, /obj/item/melee/classic_baton/telescopic) hoodtype = /obj/item/clothing/head/hooded/winterhood/captain @@ -404,7 +404,7 @@ icon_state = "wintercoat_sec" w_class = WEIGHT_CLASS_NORMAL item_state = "coatsecurity" - armor = list("melee" = 15, "bullet" = 10, "laser" = 15, "energy" = 5, "bomb" = 15, "bio" = 0, "rad" = 0, "fire" = 30, "acid" = 30) + armor = list(MELEE = 15, BULLET = 10, LASER = 15, ENERGY = 5, BOMB = 15, BIO = 0, RAD = 0, FIRE = 30, ACID = 30) allowed = list(/obj/item/gun/energy, /obj/item/reagent_containers/spray/pepper, /obj/item/gun/projectile, /obj/item/ammo_box, /obj/item/ammo_casing, /obj/item/melee/baton, /obj/item/restraints/handcuffs, /obj/item/flashlight/seclite, /obj/item/melee/classic_baton/telescopic) hoodtype = /obj/item/clothing/head/hooded/winterhood/security @@ -417,7 +417,7 @@ w_class = WEIGHT_CLASS_NORMAL item_state = "coatmedical" allowed = list(/obj/item/analyzer, /obj/item/dnainjector, /obj/item/reagent_containers/dropper, /obj/item/reagent_containers/syringe, /obj/item/reagent_containers/hypospray, /obj/item/reagent_containers/applicator,/obj/item/healthanalyzer,/obj/item/flashlight/pen, /obj/item/reagent_containers/glass/bottle, /obj/item/reagent_containers/glass/beaker, /obj/item/storage/pill_bottle, /obj/item/paper, /obj/item/melee/classic_baton/telescopic) - armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 50, "rad" = 0, "fire" = 0, "acid" = 45) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 50, RAD = 0, FIRE = 0, ACID = 45) hoodtype = /obj/item/clothing/head/hooded/winterhood/medical /obj/item/clothing/head/hooded/winterhood/medical @@ -440,7 +440,7 @@ icon_state = "wintercoat_engi" w_class = WEIGHT_CLASS_NORMAL item_state = "coatengineer" - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 20, "fire" = 30, "acid" = 45) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 20, FIRE = 30, ACID = 45) allowed = list(/obj/item/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/t_scanner, /obj/item/rcd) hoodtype = /obj/item/clothing/head/hooded/winterhood/engineering @@ -481,7 +481,7 @@ w_class = WEIGHT_CLASS_NORMAL item_state = "coatminer" allowed = list(/obj/item/pickaxe, /obj/item/flashlight, /obj/item/tank/internals/emergency_oxygen, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter) - armor = list("melee" = 10, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) + armor = list(MELEE = 10, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 0, ACID = 0) hoodtype = /obj/item/clothing/head/hooded/winterhood/miner /obj/item/clothing/head/hooded/winterhood/miner @@ -789,7 +789,7 @@ "Vox" = 'icons/mob/clothing/species/vox/suit.dmi' ) -/obj/item/clothing/suit/jacket/pilot +/obj/item/clothing/suit/jacket/secbomber name = "security bomber jacket" desc = "A stylish and worn-in armoured black bomber jacket emblazoned with the NT Security crest on the left breast. Looks rugged." w_class = WEIGHT_CLASS_NORMAL diff --git a/code/modules/clothing/suits/utility.dm b/code/modules/clothing/suits/utility.dm index 78321ba9733..8020e6ad5be 100644 --- a/code/modules/clothing/suits/utility.dm +++ b/code/modules/clothing/suits/utility.dm @@ -20,7 +20,7 @@ body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS allowed = list(/obj/item/flashlight,/obj/item/tank/internals/emergency_oxygen,/obj/item/extinguisher) slowdown = 1 - armor = list("melee" = 15, "bullet" = 5, "laser" = 20, "energy" = 10, "bomb" = 20, "bio" = 10, "rad" = 20, "fire" = 100, "acid" = 50) + armor = list(MELEE = 15, BULLET = 5, LASER = 20, ENERGY = 10, BOMB = 20, BIO = 10, RAD = 20, FIRE = 100, ACID = 50) flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT|HIDETAIL flags = STOPSPRESSUREDMAGE | THICKMATERIAL heat_protection = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS @@ -67,7 +67,7 @@ w_class = WEIGHT_CLASS_NORMAL icon_state = "bombsuit" flags = BLOCKHAIR | THICKMATERIAL - armor = list("melee" = 20, "bullet" = 0, "laser" = 20,"energy" = 10, "bomb" = 100, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 50) + armor = list(MELEE = 20, BULLET = 0, LASER = 20, ENERGY = 10, BOMB = 100, BIO = 0, RAD = 0, FIRE = 80, ACID = 50) flags_inv = HIDEMASK|HIDEEARS|HIDEEYES flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH cold_protection = HEAD @@ -94,7 +94,7 @@ flags = THICKMATERIAL body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS slowdown = 2 - armor = list("melee" = 20, "bullet" = 0, "laser" = 20,"energy" = 10, "bomb" = 100, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 50) + armor = list(MELEE = 20, BULLET = 0, LASER = 20, ENERGY = 10, BOMB = 100, BIO = 0, RAD = 0, FIRE = 80, ACID = 50) flags_inv = HIDEJUMPSUIT|HIDETAIL heat_protection = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS max_heat_protection_temperature = ARMOR_MAX_TEMP_PROTECT @@ -127,7 +127,7 @@ desc = "A hood with radiation protective properties. Label: Made with lead, do not eat insulation" flags = BLOCKHAIR|THICKMATERIAL flags_cover = HEADCOVERSEYES | HEADCOVERSMOUTH - armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 60, "rad" = 100, "fire" = 30, "acid" = 30) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 60, RAD = 100, FIRE = 30, ACID = 30) strip_delay = 60 put_on_delay = 60 resistance_flags = NONE @@ -149,7 +149,7 @@ body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS allowed = list(/obj/item/flashlight,/obj/item/tank/internals/emergency_oxygen, /obj/item/geiger_counter) slowdown = 1.5 - armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 60, "rad" = 100, "fire" = 30, "acid" = 30) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 60, RAD = 100, FIRE = 30, ACID = 30) flags_inv = HIDEJUMPSUIT|HIDETAIL strip_delay = 60 put_on_delay = 60 diff --git a/code/modules/clothing/suits/wiz_robe.dm b/code/modules/clothing/suits/wiz_robe.dm index 8d529d82160..8d441124e7a 100644 --- a/code/modules/clothing/suits/wiz_robe.dm +++ b/code/modules/clothing/suits/wiz_robe.dm @@ -4,7 +4,7 @@ icon_state = "wizard" gas_transfer_coefficient = 0.01 // IT'S MAGICAL OKAY JEEZ +1 TO NOT DIE permeability_coefficient = 0.01 - armor = list("melee" = 30, "bullet" = 20, "laser" = 20, "energy" = 20, "bomb" = 20, "bio" = 20, "rad" = 20, "fire" = 100, "acid" = 100) + armor = list(MELEE = 30, BULLET = 20, LASER = 20, ENERGY = 20, BOMB = 20, BIO = 20, RAD = 20, FIRE = 100, ACID = 100) resistance_flags = FIRE_PROOF | ACID_PROOF //Not given any special protective value since the magic robes are full-body protection --NEO strip_delay = 50 @@ -49,7 +49,7 @@ icon_state = "wizard-fake" gas_transfer_coefficient = 1 permeability_coefficient = 1 - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 0, ACID = 0) magical = FALSE resistance_flags = FLAMMABLE dog_fashion = /datum/dog_fashion/head/blue_wizard @@ -81,7 +81,7 @@ gas_transfer_coefficient = 0.01 permeability_coefficient = 0.01 body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS|LEGS - armor = list("melee" = 30, "bullet" = 20, "laser" = 20, "energy" = 20, "bomb" = 20, "bio" = 20, "rad" = 20, "fire" = 100, "acid" = 100) + armor = list(MELEE = 30, BULLET = 20, LASER = 20, ENERGY = 20, BOMB = 20, BIO = 20, RAD = 20, FIRE = 100, ACID = 100) allowed = list(/obj/item/teleportation_scroll) flags_inv = HIDEJUMPSUIT strip_delay = 50 @@ -149,7 +149,7 @@ item_state = "wizrobe" gas_transfer_coefficient = 1 permeability_coefficient = 1 - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 0, ACID = 0) resistance_flags = FLAMMABLE magical = FALSE @@ -159,7 +159,7 @@ icon_state = "marisa" gas_transfer_coefficient = 1 permeability_coefficient = 1 - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 0, ACID = 0) resistance_flags = FLAMMABLE magical = FALSE @@ -170,7 +170,7 @@ item_state = "marisarobe" gas_transfer_coefficient = 1 permeability_coefficient = 1 - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 0, ACID = 0) resistance_flags = FLAMMABLE magical = FALSE diff --git a/code/modules/clothing/under/accessories/accessory.dm b/code/modules/clothing/under/accessories/accessory.dm index b17f32df7a6..a46727168a6 100644 --- a/code/modules/clothing/under/accessories/accessory.dm +++ b/code/modules/clothing/under/accessories/accessory.dm @@ -454,7 +454,7 @@ icon_state = "skull" item_state = "skull" item_color = "skull" - armor = list("melee" = 5, "bullet" = 5, "laser" = 5, "energy" = 5, "bomb" = 20, "bio" = 20, "rad" = 5, "fire" = 0, "acid" = 25) + armor = list(MELEE = 5, BULLET = 5, LASER = 5, ENERGY = 5, BOMB = 20, BIO = 20, RAD = 5, FIRE = 0, ACID = 25) allow_duplicates = FALSE /obj/item/clothing/accessory/necklace/talisman @@ -463,7 +463,7 @@ icon_state = "talisman" item_state = "talisman" item_color = "talisman" - armor = list("melee" = 5, "bullet" = 5, "laser" = 5, "energy" = 5, "bomb" = 20, "bio" = 20, "rad" = 5, "fire" = 0, "acid" = 25) + armor = list(MELEE = 5, BULLET = 5, LASER = 5, ENERGY = 5, BOMB = 20, BIO = 20, RAD = 5, FIRE = 0, ACID = 25) allow_duplicates = FALSE /obj/item/clothing/accessory/necklace/locket diff --git a/code/modules/clothing/under/jobs/civilian.dm b/code/modules/clothing/under/jobs/civilian.dm index 4b12b652755..877091714d9 100644 --- a/code/modules/clothing/under/jobs/civilian.dm +++ b/code/modules/clothing/under/jobs/civilian.dm @@ -135,7 +135,7 @@ name = "janitor's jumpsuit" icon_state = "janitor" item_color = "janitor" - armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 10, "rad" = 0, "fire" = 0, "acid" = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 10, RAD = 0, FIRE = 0, ACID = 0) /obj/item/clothing/under/lawyer diff --git a/code/modules/clothing/under/jobs/engineering.dm b/code/modules/clothing/under/jobs/engineering.dm index 3a717a5907f..e7c2e796355 100644 --- a/code/modules/clothing/under/jobs/engineering.dm +++ b/code/modules/clothing/under/jobs/engineering.dm @@ -5,7 +5,7 @@ icon_state = "chiefengineer" item_state = "chief" item_color = "chief" - armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 10, "fire" = 80, "acid" = 40) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 10, FIRE = 80, ACID = 40) resistance_flags = NONE /obj/item/clothing/under/rank/chief_engineer/skirt @@ -36,7 +36,7 @@ icon_state = "engine" item_state = "engi_suit" item_color = "engine" - armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 10, "fire" = 60, "acid" = 20) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 10, FIRE = 60, ACID = 20) resistance_flags = NONE /obj/item/clothing/under/rank/engineer/sensor @@ -64,10 +64,3 @@ name = "roboticist's jumpskirt" icon_state = "roboticsf" item_color = "roboticsf" - -/obj/item/clothing/under/rank/mechanic - desc = "It's a pair of overalls worn by mechanics." - name = "mechanic's overalls" - icon_state = "mechanic" - item_state = "mechanic" - item_color = "mechanic" diff --git a/code/modules/clothing/under/jobs/medsci.dm b/code/modules/clothing/under/jobs/medsci.dm index ffd730d7a6d..935916d57d0 100644 --- a/code/modules/clothing/under/jobs/medsci.dm +++ b/code/modules/clothing/under/jobs/medsci.dm @@ -7,7 +7,7 @@ icon_state = "director" item_state = "g_suit" item_color = "director" - armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 10, "bio" = 10, "rad" = 0, "fire" = 0, "acid" = 35) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 10, BIO = 10, RAD = 0, FIRE = 0, ACID = 35) /obj/item/clothing/under/rank/scientist desc = "It's made of a special fiber that provides minor protection against biohazards. It has markings that denote the wearer as a scientist." @@ -16,7 +16,7 @@ item_state = "w_suit" item_color = "toxinswhite" permeability_coefficient = 0.50 - armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 10, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 10, BIO = 0, RAD = 0, FIRE = 0, ACID = 0) /obj/item/clothing/under/rank/scientist/skirt name = "scientist's jumpskirt" @@ -31,7 +31,7 @@ item_state = "w_suit" item_color = "chemistrywhite" permeability_coefficient = 0.50 - armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 10, "rad" = 0, "fire" = 50, "acid" = 65) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 10, RAD = 0, FIRE = 50, ACID = 65) /obj/item/clothing/under/rank/chemist/skirt name = "chemist's jumpskirt" @@ -49,7 +49,7 @@ item_state = "w_suit" item_color = "cmo" permeability_coefficient = 0.50 - armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 10, "rad" = 0, "fire" = 0, "acid" = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 10, RAD = 0, FIRE = 0, ACID = 0) /obj/item/clothing/under/rank/chief_medical_officer/skirt desc = "It's a jumpskirt worn by those with the experience to be \"Chief Medical Officer\". It provides minor biological protection." @@ -65,7 +65,7 @@ item_state = "w_suit" item_color = "geneticswhite" permeability_coefficient = 0.50 - armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 10, "rad" = 0, "fire" = 0, "acid" = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 10, RAD = 0, FIRE = 0, ACID = 0) /obj/item/clothing/under/rank/geneticist/skirt name = "geneticist's jumpskirt" @@ -80,7 +80,7 @@ item_state = "w_suit" item_color = "virologywhite" permeability_coefficient = 0.50 - armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 10, "rad" = 0, "fire" = 0, "acid" = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 10, RAD = 0, FIRE = 0, ACID = 0) /obj/item/clothing/under/rank/virologist/skirt name = "virologist's jumpskirt" @@ -95,7 +95,7 @@ item_state = "nursesuit" item_color = "nursesuit" permeability_coefficient = 0.50 - armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 10, "rad" = 0, "fire" = 0, "acid" = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 10, RAD = 0, FIRE = 0, ACID = 0) /obj/item/clothing/under/rank/nurse desc = "A dress commonly worn by the nursing staff in the medical department." @@ -104,7 +104,7 @@ item_state = "nurse" item_color = "nurse" permeability_coefficient = 0.50 - armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 10, "rad" = 0, "fire" = 0, "acid" = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 10, RAD = 0, FIRE = 0, ACID = 0) /obj/item/clothing/under/rank/orderly desc = "A white suit to be worn by orderly people who love orderly things." @@ -113,7 +113,7 @@ item_state = "orderly" item_color = "orderly" permeability_coefficient = 0.50 - armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 10, "rad" = 0, "fire" = 0, "acid" = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 10, RAD = 0, FIRE = 0, ACID = 0) /obj/item/clothing/under/rank/medical desc = "It's made of a special fiber that provides minor protection against biohazards. It has a cross on the chest denoting that the wearer is trained medical personnel." @@ -122,7 +122,7 @@ item_state = "w_suit" item_color = "medical" permeability_coefficient = 0.50 - armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 10, "rad" = 0, "fire" = 0, "acid" = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 10, RAD = 0, FIRE = 0, ACID = 0) /obj/item/clothing/under/rank/medical/sensor sensor_mode = SENSOR_COORDS @@ -135,19 +135,19 @@ body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS /obj/item/clothing/under/rank/medical/blue - name = "medical scrubs" + name = "blue medical scrubs" desc = "It's made of a special fiber that provides minor protection against biohazards. This one is in baby blue." icon_state = "scrubsblue" item_color = "scrubsblue" /obj/item/clothing/under/rank/medical/green - name = "medical scrubs" + name = "green medical scrubs" desc = "It's made of a special fiber that provides minor protection against biohazards. This one is in dark green." icon_state = "scrubsgreen" item_color = "scrubsgreen" /obj/item/clothing/under/rank/medical/purple - name = "medical scrubs" + name = "purple medical scrubs" desc = "It's made of a special fiber that provides minor protection against biohazards. This one is in deep purple." icon_state = "scrubspurple" item_color = "scrubspurple" @@ -166,7 +166,7 @@ item_state = "paramedic" item_color = "paramedic" permeability_coefficient = 0.50 - armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 10, "rad" = 10, "fire" = 0, "acid" = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 10, RAD = 10, FIRE = 0, ACID = 0) /obj/item/clothing/under/rank/psych desc = "A basic white jumpsuit. It has turqouise markings that denote the wearer as a psychiatrist." @@ -193,7 +193,7 @@ item_state = "w_suit" item_color = "genetics_new" permeability_coefficient = 0.50 - armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 10, "rad" = 0, "fire" = 0, "acid" = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 10, RAD = 0, FIRE = 0, ACID = 0) /obj/item/clothing/under/rank/chemist_new desc = "It's made of a special fiber which provides minor protection against biohazards." @@ -202,7 +202,7 @@ item_state = "w_suit" item_color = "chemist_new" permeability_coefficient = 0.50 - armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 10, "rad" = 0, "fire" = 50, "acid" = 65) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 10, RAD = 0, FIRE = 50, ACID = 65) /obj/item/clothing/under/rank/scientist_new desc = "Made of a special fiber that gives special protection against biohazards and small explosions." @@ -211,7 +211,7 @@ item_state = "w_suit" item_color = "scientist_new" permeability_coefficient = 0.50 - armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 10, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 10, BIO = 0, RAD = 0, FIRE = 0, ACID = 0) /obj/item/clothing/under/rank/virologist_new desc = "Made of a special fiber that gives increased protection against biohazards." @@ -220,4 +220,4 @@ item_state = "w_suit" item_color = "virologist_new" permeability_coefficient = 0.50 - armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 10, "rad" = 0, "fire" = 0, "acid" = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 10, RAD = 0, FIRE = 0, ACID = 0) diff --git a/code/modules/clothing/under/jobs/plasmamen/_plasmamen.dm b/code/modules/clothing/under/jobs/plasmamen/_plasmamen.dm index 05cb5a1fb71..8090cabfbbd 100644 --- a/code/modules/clothing/under/jobs/plasmamen/_plasmamen.dm +++ b/code/modules/clothing/under/jobs/plasmamen/_plasmamen.dm @@ -1,7 +1,7 @@ /obj/item/clothing/under/plasmaman name = "plasma envirosuit" desc = "A special containment suit that allows plasma-based lifeforms to exist safely in an oxygenated environment, and automatically extinguishes them in a crisis. Despite being airtight, it's not spaceworthy." - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 100, "rad" = 0, "fire" = 95, "acid" = 95) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 100, RAD = 0, FIRE = 95, ACID = 95) body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS strip_delay = 80 var/next_extinguish = 0 diff --git a/code/modules/clothing/under/jobs/plasmamen/engineering.dm b/code/modules/clothing/under/jobs/plasmamen/engineering.dm index 62c46f050a5..f822333a90f 100644 --- a/code/modules/clothing/under/jobs/plasmamen/engineering.dm +++ b/code/modules/clothing/under/jobs/plasmamen/engineering.dm @@ -4,7 +4,7 @@ icon_state = "engineer_envirosuit" item_state = "engineer_envirosuit" item_color = "engineer_envirosuit" - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 100, "rad" = 10, "fire" = 95, "acid" = 95) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 100, RAD = 10, FIRE = 95, ACID = 95) /obj/item/clothing/under/plasmaman/engineering/ce name = "chief engineer's plasma envirosuit" diff --git a/code/modules/clothing/under/jobs/plasmamen/security.dm b/code/modules/clothing/under/jobs/plasmamen/security.dm index 427969307f4..8912d1218b6 100644 --- a/code/modules/clothing/under/jobs/plasmamen/security.dm +++ b/code/modules/clothing/under/jobs/plasmamen/security.dm @@ -4,7 +4,7 @@ icon_state = "security_envirosuit" item_state = "security_envirosuit" item_color = "security_envirosuit" - armor = list("melee" = 10, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 100, "rad" = 0, "fire" = 95, "acid" = 95) + armor = list(MELEE = 10, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 100, RAD = 0, FIRE = 95, ACID = 95) /obj/item/clothing/under/plasmaman/security/warden name = "warden plasma envirosuit" diff --git a/code/modules/clothing/under/jobs/security.dm b/code/modules/clothing/under/jobs/security.dm index 6908a405a88..af48c5814ca 100644 --- a/code/modules/clothing/under/jobs/security.dm +++ b/code/modules/clothing/under/jobs/security.dm @@ -15,7 +15,7 @@ icon_state = "warden" item_state = "r_suit" item_color = "warden" - armor = list("melee" = 10, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 30, "acid" = 30) + armor = list(MELEE = 10, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 30, ACID = 30) strip_delay = 50 /obj/item/clothing/under/rank/warden/skirt @@ -31,7 +31,7 @@ icon_state = "security" item_state = "r_suit" item_color = "secred" - armor = list("melee" = 10, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 30, "acid" = 30) + armor = list(MELEE = 10, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 30, ACID = 30) strip_delay = 50 /obj/item/clothing/under/rank/security/sensor @@ -51,7 +51,7 @@ icon_state = "dispatch" item_state = "dispatch" item_color = "dispatch" - armor = list("melee" = 10, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 30, "acid" = 30) + armor = list(MELEE = 10, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 30, ACID = 30) /obj/item/clothing/under/rank/security2 name = "security officer's uniform" @@ -59,9 +59,10 @@ icon_state = "redshirt2" item_state = "r_suit" item_color = "redshirt2" - armor = list("melee" = 10, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 30, "acid" = 30) + armor = list(MELEE = 10, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 30, ACID = 30) /obj/item/clothing/under/rank/security/corp + name = "corporate security jumpsuit" icon_state = "sec_corporate" item_state = "sec_corporate" item_color = "sec_corporate" @@ -80,7 +81,7 @@ icon_state = "detective" item_state = "det" item_color = "detective" - armor = list("melee" = 10, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 30, "acid" = 30) + armor = list(MELEE = 10, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 30, ACID = 30) strip_delay = 50 sprite_sheets = list( @@ -96,7 +97,7 @@ icon_state = "hos" item_state = "r_suit" item_color = "hosred" - armor = list("melee" = 10, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 50) + armor = list(MELEE = 10, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 50) strip_delay = 60 /obj/item/clothing/under/rank/head_of_security/skirt @@ -182,11 +183,3 @@ item_state = "brig_physf" item_color = "brig_physf" permeability_coefficient = 0.50 - -//Pod Pilot -/obj/item/clothing/under/rank/security/pod_pilot - name = "pod pilot's jumpsuit" - desc = "Suit for your regular pod pilot." - icon_state = "pod_pilot" - item_state = "pod_pilot" - item_color = "pod_pilot" diff --git a/code/modules/clothing/under/miscellaneous.dm b/code/modules/clothing/under/miscellaneous.dm index 71bd1e165d0..0a211ab698c 100644 --- a/code/modules/clothing/under/miscellaneous.dm +++ b/code/modules/clothing/under/miscellaneous.dm @@ -66,7 +66,7 @@ icon_state = "solgov" item_state = "ro_suit" item_color = "solgov" - armor = list("melee" = 10, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 30, "acid" = 30) + armor = list(MELEE = 10, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 30, ACID = 30) displays_id = 0 /obj/item/clothing/under/solgov/elite name = "\improper Trans-Solar Federation Specops marine uniform" @@ -79,7 +79,7 @@ desc = "A comfortable and durable combat uniform worn by Trans-Solar Federation Marine Forces. This one has additional insignia on its shoulders and cuffs." icon_state = "solgovc" item_color = "solgovc" - armor = list("melee" = 10, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 30, "acid" = 30) + armor = list(MELEE = 10, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 30, ACID = 30) /obj/item/clothing/under/solgov/command/elite name = "\improper Trans-Solar Federation Specops Lieutenant's uniform" @@ -117,7 +117,7 @@ icon_state = "navy_gold" item_state = "navy_gold" item_color = "navy_gold" - armor = list("melee" = 10, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 30, "acid" = 30) + armor = list(MELEE = 10, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 30, ACID = 30) displays_id = 0 /obj/item/clothing/under/rank/centcom/captain @@ -126,7 +126,7 @@ icon_state = "navy_gold" item_state = "navy_gold" item_color = "navy_gold" - armor = list("melee" = 10, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 30, "acid" = 30) + armor = list(MELEE = 10, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 30, ACID = 30) displays_id = 0 /obj/item/clothing/under/rank/centcom/captain/solgov @@ -139,7 +139,7 @@ icon_state = "officer" item_state = "g_suit" item_color = "officer" - armor = list("melee" = 10, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 30, "acid" = 30) + armor = list(MELEE = 10, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 30, ACID = 30) displays_id = 0 /obj/item/clothing/under/rank/centcom/representative @@ -180,7 +180,7 @@ icon_state = "ert_uniform" item_state = "bl_suit" item_color = "ert_uniform" - armor = list("melee" = 10, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 30, "acid" = 30) + armor = list(MELEE = 10, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 30, ACID = 30) /obj/item/clothing/under/rank/blueshield/skirt name = "blueshield's skirt" @@ -214,7 +214,7 @@ gas_transfer_coefficient = 0.01 permeability_coefficient = 0.01 body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS|HEAD - armor = list("melee" = 100, "bullet" = 100, "laser" = 100,"energy" = 100, "bomb" = 100, "bio" = 100, "rad" = 100, "fire" = 100, "acid" = 100) + armor = list(MELEE = 100, BULLET = 100, LASER = 100, ENERGY = 100, BOMB = 100, BIO = 100, RAD = 100, FIRE = 100, ACID = 100) cold_protection = UPPER_TORSO | LOWER_TORSO | LEGS | FEET | ARMS | HANDS | HEAD min_cold_protection_temperature = SPACE_SUIT_MIN_TEMP_PROTECT heat_protection = UPPER_TORSO | LOWER_TORSO|LEGS|FEET|ARMS|HANDS | HEAD diff --git a/code/modules/clothing/under/syndicate.dm b/code/modules/clothing/under/syndicate.dm index 441cf8d9420..8641d0d3d69 100644 --- a/code/modules/clothing/under/syndicate.dm +++ b/code/modules/clothing/under/syndicate.dm @@ -5,7 +5,7 @@ item_state = "bl_suit" item_color = "syndicate" has_sensor = 0 - armor = list("melee" = 10, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 40) + armor = list(MELEE = 10, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 40) /obj/item/clothing/under/syndicate/combat name = "combat turtleneck" @@ -16,7 +16,7 @@ icon_state = "tactifool" item_state = "bl_suit" item_color = "tactifool" - armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 40) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 40) /obj/item/clothing/under/syndicate/sniper name = "Tactical turtleneck suit" diff --git a/code/modules/crafting/recipes.dm b/code/modules/crafting/recipes.dm index 3905458d864..6d7ffbf829f 100644 --- a/code/modules/crafting/recipes.dm +++ b/code/modules/crafting/recipes.dm @@ -373,7 +373,71 @@ result = list(/obj/item/stack/tile/carpet/black) time = 20 reqs = list(/obj/item/stack/tile/carpet = 1) - pathtools = list(/obj/item/toy/crayon) + pathtools = list(/obj/item/toy/crayon/black) + category = CAT_MISC + +/datum/crafting_recipe/bluecarpet + name = "Blue Carpet" + result = list(/obj/item/stack/tile/carpet/blue) + time = 20 + reqs = list(/obj/item/stack/tile/carpet = 1) + pathtools = list(/obj/item/toy/crayon/blue) + category = CAT_MISC + +/datum/crafting_recipe/cyancarpet + name = "Cyan Carpet" + result = list(/obj/item/stack/tile/carpet/cyan) + time = 20 + reqs = list(/obj/item/stack/tile/carpet = 1) + pathtools = list(/obj/item/toy/crayon/blue, /obj/item/toy/crayon/green) + category = CAT_MISC + +/datum/crafting_recipe/greencarpet + name = "Green Carpet" + result = list(/obj/item/stack/tile/carpet/green) + time = 20 + reqs = list(/obj/item/stack/tile/carpet = 1) + pathtools = list(/obj/item/toy/crayon/green) + category = CAT_MISC + +/datum/crafting_recipe/orangecarpet + name = "Orange Carpet" + result = list(/obj/item/stack/tile/carpet/orange) + time = 20 + reqs = list(/obj/item/stack/tile/carpet = 1) + pathtools = list(/obj/item/toy/crayon/yellow, /obj/item/toy/crayon/red) + category = CAT_MISC + +/datum/crafting_recipe/purplecarpet + name = "Purple Carpet" + result = list(/obj/item/stack/tile/carpet/purple) + time = 20 + reqs = list(/obj/item/stack/tile/carpet = 1) + pathtools = list(/obj/item/toy/crayon/red, /obj/item/toy/crayon/blue) + category = CAT_MISC + +/datum/crafting_recipe/redcarpet + name = "Red Carpet" + result = list(/obj/item/stack/tile/carpet/red) + time = 20 + reqs = list(/obj/item/stack/tile/carpet = 1) + pathtools = list(/obj/item/toy/crayon/red) + category = CAT_MISC + +/datum/crafting_recipe/royalblackcarpet + name = "Royal Black Carpet" + result = list(/obj/item/stack/tile/carpet/royalblack = 10) + time = 20 + reqs = list(/obj/item/stack/tile/carpet/black = 10, + /obj/item/stack/sheet/mineral/gold = 2) + category = CAT_MISC + +/datum/crafting_recipe/royalbluecarpet + name = "Royal Blue Carpet" + result = list(/obj/item/stack/tile/carpet/royalblue = 10) + time = 20 + reqs = list(/obj/item/stack/tile/carpet/blue = 10, + /obj/item/stack/sheet/mineral/gold = 2) category = CAT_MISC /datum/crafting_recipe/showercurtain @@ -510,6 +574,22 @@ /obj/item/stack/sheet/sinew = 1) category = CAT_PRIMAL +/datum/crafting_recipe/bonepickaxe + name = "Bone Pickaxe" + result = list(/obj/item/pickaxe/bone) + time = 40 + reqs = list(/obj/item/stack/sheet/bone = 4, + /obj/item/stack/sheet/sinew = 2) + category = CAT_PRIMAL + +/datum/crafting_recipe/bonescythe + name = "Bone Scythe" + result = list(/obj/item/scythe/bone) + time = 40 + reqs = list(/obj/item/stack/sheet/bone = 5, + /obj/item/stack/sheet/sinew = 2) + category = CAT_PRIMAL + /datum/crafting_recipe/boneaxe name = "Bone Axe" result = list(/obj/item/twohanded/fireaxe/boneaxe) diff --git a/code/modules/crafting/tailoring.dm b/code/modules/crafting/tailoring.dm index 6a597e9e8fa..a1fc09728d0 100644 --- a/code/modules/crafting/tailoring.dm +++ b/code/modules/crafting/tailoring.dm @@ -162,3 +162,13 @@ tools = list(TOOL_WIRECUTTER) pathtools = list(/obj/item/kitchen/knife) category = CAT_CLOTHING + +/datum/crafting_recipe/voice_modulator + name = "Voice Modulator Mask" + result = list(/obj/item/clothing/mask/gas/voice_modulator) + time = 45 + tools = list(TOOL_SCREWDRIVER, TOOL_MULTITOOL) + reqs = list(/obj/item/clothing/mask/gas = 1, + /obj/item/assembly/voice = 1, + /obj/item/stack/cable_coil = 5) + category = CAT_CLOTHING diff --git a/code/modules/customitems/item_defines.dm b/code/modules/customitems/item_defines.dm index f316f486379..e7e3f6e6f2d 100644 --- a/code/modules/customitems/item_defines.dm +++ b/code/modules/customitems/item_defines.dm @@ -1537,30 +1537,6 @@ icon_state = "ikelos_envirohelm" // New item needed because `initial(icon_state)` is used. icon = 'icons/obj/custom_items.dmi' - -/obj/item/fluff/decemviri_spacepod_kit //Decemviri: Sylus Cain - name = "Spacepod mod kit" - desc = "a kit on tools and a blueprint detailing how to reconfigure a spacepod" - icon_state = "modkit" - -/obj/item/fluff/decemviri_spacepod_kit/afterattack(atom/target, mob/user, proximity) - if(!proximity || !ishuman(user) || user.incapacitated()) - return - - if(!istype(target, /obj/spacepod)) - to_chat(user, "You can't modify [target]!") - return - - to_chat(user, "You modify the appearance of [target] based on the kit blueprints.") - var/obj/spacepod/pod = target - pod.icon = 'icons/48x48/custom_pod.dmi' - pod.icon_state = "pod_dece" - pod.name = "sleek spacepod" - pod.desc = "A modified varient of a space pod." - pod.can_paint = FALSE - used = 1 - qdel(src) - /obj/item/bikehorn/fluff/pinkbikehorn //Xerdies: Squiddle Toodle name = "Honkinator5000" desc = "This horn may look ridiculous but is the new hot item for clowns in the Clown Empire. It has a fine print on its side reading: Property of Prince Honktertong the IV" @@ -1712,5 +1688,17 @@ body_parts_covered = UPPER_TORSO|LOWER_TORSO species_restricted = list("Vox") +/obj/item/clothing/mask/gas/fluff/kikerimask //Gangelwaefre: Kikeri + name = "Kikeri's Mask" + desc = "A light grey mask with masquerade-esque blue details." + icon = 'icons/obj/custom_items.dmi' + lefthand_file = 'icons/mob/inhands/fluff_lefthand.dmi' + righthand_file = 'icons/mob/inhands/fluff_righthand.dmi' + sprite_sheets = list("Vox" = 'icons/mob/clothing/species/vox/mask.dmi') + icon_state = "kikerimask" + item_state = "kikerimask" + item_color = "kikerimask" + species_restricted = list("Vox") + #undef USED_MOD_HELM #undef USED_MOD_SUIT diff --git a/code/modules/customitems/item_spawning.dm b/code/modules/customitems/item_spawning.dm deleted file mode 100644 index 5f998861cf6..00000000000 --- a/code/modules/customitems/item_spawning.dm +++ /dev/null @@ -1,101 +0,0 @@ -/proc/EquipCustomItems(mob/living/carbon/human/M) - if(!SSdbcore.IsConnected()) - return - - // Grab the info we want. - var/datum/db_query/query = SSdbcore.NewQuery({" - SELECT cuiPath, cuiPropAdjust, cuiJobMask, cuiDescription, cuiItemName FROM customuseritems - WHERE cuiCKey=:ckey AND (cuiRealName=:realname OR cuiRealName='*')"}, list( - "ckey" = M.ckey, - "realname" = M.real_name - )) - if(!query.warn_execute(async = FALSE)) // Dont make this async. Youll make roundstart slow. Trust me. - qdel(query) - return - - while(query.NextRow()) - var/path = text2path(query.item[1]) - var/propadjust = query.item[2] - var/jobmask = query.item[3] - var/ok = 0 - if(!path || !ispath(path)) - log_debug("Incorrect database entry found in table 'customuseritems' path value = [path], cuiPath is null. cuiCKey='[M.ckey]' AND (cuiRealName='[M.real_name]' OR cuiRealName='*'") - continue - if(jobmask != "*") - var/list/allowed_jobs = splittext(jobmask,",") - for(var/i = 1, i <= allowed_jobs.len, i++) - if(istext(allowed_jobs[i])) - allowed_jobs[i] = trim(allowed_jobs[i]) - var/alt_blocked = 0 - if(M.mind.role_alt_title) - if(!(M.mind.role_alt_title in allowed_jobs)) - alt_blocked = 1 - if(!(M.mind.assigned_role in allowed_jobs) || alt_blocked) - continue - - var/obj/item/Item = new path() - var/description = query.item[4] - var/newname = query.item[5] - if(istype(Item,/obj/item/card/id)) - var/obj/item/card/id/I = Item - for(var/obj/item/card/id/C in M) - //default settings - I.name = "[M.real_name]'s ID Card ([M.mind.role_alt_title ? M.mind.role_alt_title : M.mind.assigned_role])" - I.registered_name = M.real_name - I.access = C.access - I.assignment = C.assignment - I.blood_type = C.blood_type - I.dna_hash = C.dna_hash - I.fingerprint_hash = C.fingerprint_hash - qdel(C) - ok = M.equip_or_collect(I, slot_wear_id, 0) //if 1, last argument deletes on fail - break - else if(istype(M.back, /obj/item/storage)) // Try to place it in something on the mob's back - var/obj/item/storage/S = M.back - if(S.contents.len < S.storage_slots) - Item.loc = M.back - ok = 1 - to_chat(M, "Your [Item.name] has been added to your [M.back.name].") - if(ok == 0) - for(var/obj/item/storage/S in M.contents) // Try to place it in any item that can store stuff, on the mob. - if(S.contents.len < S.storage_slots) - Item.loc = S - ok = 1 - to_chat(M, "Your [Item.name] has been added to your [S.name].") - break - if(description) - Item.desc = description - if(newname) - Item.name = newname - - if(ok == 0) // Finally, since everything else failed, place it on the ground - Item.loc = get_turf(M.loc) - - HackProperties(Item,propadjust) - M.regenerate_icons() - qdel(query) - -// This is hacky, but since it's difficult as fuck to make a proper parser in BYOND without killing the server, here it is. - N3X -/proc/HackProperties(mob/living/carbon/human/M, obj/item/I, script) - var/list/statements = splittext(script,";") - if(statements.len == 0) - return - for(var/statement in statements) - var/list/assignmentChunks = splittext(statement,"=") - var/varname = assignmentChunks[1] - var/list/typeChunks=splittext(script,":") - var/desiredType=typeChunks[1] - switch(desiredType) - if("string") - var/output = typeChunks[2] - output = replacetext(output,"{REALNAME}", M.real_name) - output = replacetext(output,"{ROLE}", M.mind.assigned_role) - output = replacetext(output,"{ROLE_ALT}", "[M.mind.role_alt_title ? M.mind.role_alt_title : M.mind.assigned_role]") - I.vars[varname]=output - if("number") - I.vars[varname]=text2num(typeChunks[2]) - if("icon") - if(typeChunks.len==2) - I.vars[varname]=new /icon(typeChunks[2]) - if(typeChunks.len==3) - I.vars[varname]=new /icon(typeChunks[2],typeChunks[3]) diff --git a/code/modules/events/anomaly.dm b/code/modules/events/anomaly.dm index c806fac3ce0..12eaef33823 100644 --- a/code/modules/events/anomaly.dm +++ b/code/modules/events/anomaly.dm @@ -20,10 +20,15 @@ ) //Subtypes from the above that actually should explode. - var/list/unsafe_area_subtypes = typecacheof(list(/area/engine/break_room)) + var/list/unsafe_area_subtypes = typecacheof(list( + /area/engine/break_room, + /area/engine/equipmentstorage, + /area/engine/chiefs_office, + /area/engine/controlroom + )) - allowed_areas = make_associative(GLOB.the_station_areas) - safe_area_types + unsafe_area_subtypes - var/list/possible_areas = typecache_filter_list(GLOB.all_areas, allowed_areas) + allowed_areas = typecacheof(GLOB.the_station_areas) - safe_area_types + unsafe_area_subtypes + var/list/possible_areas = typecache_filter_list(SSmapping.existing_station_areas, allowed_areas) if(length(possible_areas)) return pick(possible_areas) @@ -36,7 +41,7 @@ CRASH("Anomaly: No valid turfs found for [impact_area] - [impact_area.type]") /datum/event/anomaly/announce() - GLOB.event_announcement.Announce("Localized hyper-energetic flux wave detected on long range scanners. Expected location of impact: [impact_area.name].", "Anomaly Alert") + GLOB.event_announcement.Announce("Localized hyper-energetic flux wave detected on long range scanners. Expected location of impact: [impact_area.name].", "Anomaly Alert", 'sound/AI/anomaly_flux.ogg') /datum/event/anomaly/start() var/turf/T = pick(get_area_turfs(impact_area)) diff --git a/code/modules/events/anomaly_bluespace.dm b/code/modules/events/anomaly_bluespace.dm index b90e8b86b01..67a559f97bd 100644 --- a/code/modules/events/anomaly_bluespace.dm +++ b/code/modules/events/anomaly_bluespace.dm @@ -5,4 +5,4 @@ anomaly_path = /obj/effect/anomaly/bluespace /datum/event/anomaly/anomaly_bluespace/announce() - GLOB.event_announcement.Announce("Unstable bluespace anomaly detected on long range scanners. Expected location: [impact_area.name].", "Anomaly Alert") + GLOB.event_announcement.Announce("Unstable bluespace anomaly detected on long range scanners. Expected location: [impact_area.name].", "Anomaly Alert", 'sound/AI/anomaly_bluespace.ogg') diff --git a/code/modules/events/anomaly_flux.dm b/code/modules/events/anomaly_flux.dm index 350e21cb496..2635185faa1 100644 --- a/code/modules/events/anomaly_flux.dm +++ b/code/modules/events/anomaly_flux.dm @@ -5,4 +5,4 @@ anomaly_path = /obj/effect/anomaly/flux /datum/event/anomaly/anomaly_flux/announce() - GLOB.event_announcement.Announce("Localized hyper-energetic flux wave detected on long range scanners. Expected location: [impact_area.name].", "Anomaly Alert") + GLOB.event_announcement.Announce("Localized hyper-energetic flux wave detected on long range scanners. Expected location: [impact_area.name].", "Anomaly Alert", 'sound/AI/anomaly_flux.ogg') diff --git a/code/modules/events/anomaly_grav.dm b/code/modules/events/anomaly_grav.dm index 4acf530c081..1009e12fed2 100644 --- a/code/modules/events/anomaly_grav.dm +++ b/code/modules/events/anomaly_grav.dm @@ -5,4 +5,4 @@ anomaly_path = /obj/effect/anomaly/grav /datum/event/anomaly/anomaly_grav/announce() - GLOB.event_announcement.Announce("Gravitational anomaly detected on long range scanners. Expected location: [impact_area.name].", "Anomaly Alert") + GLOB.event_announcement.Announce("Gravitational anomaly detected on long range scanners. Expected location: [impact_area.name].", "Anomaly Alert", 'sound/AI/anomaly_gravity.ogg') diff --git a/code/modules/events/anomaly_pyro.dm b/code/modules/events/anomaly_pyro.dm index 2caa8dc4a0c..5c29ba1c4b7 100644 --- a/code/modules/events/anomaly_pyro.dm +++ b/code/modules/events/anomaly_pyro.dm @@ -5,4 +5,4 @@ anomaly_path = /obj/effect/anomaly/pyro /datum/event/anomaly/anomaly_pyro/announce() - GLOB.event_announcement.Announce("Atmospheric anomaly detected on long range scanners. Expected location: [impact_area.name].", "Anomaly Alert") + GLOB.event_announcement.Announce("Atmospheric anomaly detected on long range scanners. Expected location: [impact_area.name].", "Anomaly Alert", 'sound/AI/anomaly_pyro.ogg') diff --git a/code/modules/events/anomaly_vortex.dm b/code/modules/events/anomaly_vortex.dm index 76058cfa574..a3bf8938d57 100644 --- a/code/modules/events/anomaly_vortex.dm +++ b/code/modules/events/anomaly_vortex.dm @@ -5,4 +5,4 @@ anomaly_path = /obj/effect/anomaly/bhole /datum/event/anomaly/anomaly_vortex/announce() - GLOB.event_announcement.Announce("Localized high-intensity vortex anomaly detected on long range scanners. Expected location: [impact_area.name]", "Anomaly Alert") + GLOB.event_announcement.Announce("Localized high-intensity vortex anomaly detected on long range scanners. Expected location: [impact_area.name]", "Anomaly Alert", 'sound/AI/anomaly_vortex.ogg') diff --git a/code/modules/events/apc_overload.dm b/code/modules/events/apc_overload.dm index 4e2a296dda5..e1784ae9726 100644 --- a/code/modules/events/apc_overload.dm +++ b/code/modules/events/apc_overload.dm @@ -21,7 +21,7 @@ SEND_SOUND(M, S) /datum/event/apc_overload/announce() - GLOB.event_announcement.Announce("Overload detected in [station_name()]'s powernet. Engineering, please check all underfloor APC terminals.", "Critical Power Failure", new_sound = 'sound/AI/attention.ogg') + GLOB.event_announcement.Announce("Overload detected in [station_name()]'s powernet. Engineering, please check all underfloor APC terminals.", "Critical Power Failure", 'sound/AI/power_overload.ogg') /datum/event/apc_overload/end() return TRUE @@ -33,7 +33,7 @@ /area/turret_protected/ai) if(announce) - GLOB.event_announcement.Announce("Overload detected in [station_name()]'s powernet. Engineering, please check all underfloor APC terminals.", "Critical Power Failure", new_sound = 'sound/AI/attention.ogg') + GLOB.event_announcement.Announce("Overload detected in [station_name()]'s powernet. Engineering, please check all underfloor APC terminals.", "Critical Power Failure", 'sound/AI/power_overload.ogg') // break APC_BREAK_PROBABILITY% of all of the APCs on the station var/affected_apc_count = 0 diff --git a/code/modules/events/apc_short.dm b/code/modules/events/apc_short.dm index 759b443e2bf..9c29b96a0f1 100644 --- a/code/modules/events/apc_short.dm +++ b/code/modules/events/apc_short.dm @@ -20,7 +20,7 @@ SEND_SOUND(M, S) /datum/event/apc_short/announce() - GLOB.event_announcement.Announce("Overload detected in [station_name()]'s powernet. Engineering, please repair shorted APCs.", "Systems Power Failure", new_sound = 'sound/AI/attention.ogg') + GLOB.event_announcement.Announce("Overload detected in [station_name()]'s powernet. Engineering, please repair shorted APCs.", "Systems Power Failure", 'sound/AI/power_overload.ogg') /datum/event/apc_short/end() return TRUE @@ -30,7 +30,7 @@ /area/engine/engineering, /area/engine/supermatter, /area/turret_protected/ai) - GLOB.event_announcement.Announce("Power failure detected in [station_name()]'s powernet. All APCs have lost power. Gravity systems likely to fail.", "Systems Power Failure", new_sound = 'sound/AI/attention.ogg') + GLOB.event_announcement.Announce("Power failure detected in [station_name()]'s powernet. All APCs have lost power. Gravity systems likely to fail.", "Systems Power Failure", 'sound/AI/attention.ogg') for(var/thing in GLOB.apcs) var/obj/machinery/power/apc/A = thing var/area/current_area = get_area(A) @@ -49,7 +49,7 @@ /area/engine/supermatter, /area/turret_protected/ai) if(announce) - GLOB.event_announcement.Announce("Overload detected in [station_name()]'s powernet. Engineering, please repair shorted APCs.", "Systems Power Failure", new_sound = 'sound/AI/attention.ogg') + GLOB.event_announcement.Announce("Overload detected in [station_name()]'s powernet. Engineering, please repair shorted APCs.", "Systems Power Failure", 'sound/AI/power_overload.ogg') // break APC_BREAK_PROBABILITY% of all of the APCs on the station var/affected_apc_count = 0 for(var/thing in GLOB.apcs) @@ -76,7 +76,7 @@ /proc/power_restore(announce = TRUE, power_type) if(power_type == 0) //Power without Repairing if(announce) - GLOB.event_announcement.Announce("All operational APCs on \the [station_name()] have been fully charged.", "Power Systems Nominal", new_sound = 'sound/AI/poweron.ogg') + GLOB.event_announcement.Announce("All operational APCs on \the [station_name()] have been fully charged.", "Power Systems Nominal", 'sound/AI/power_restore.ogg') var/affected_apc_count = 0 for(var/thing in GLOB.apcs) var/obj/machinery/power/apc/A = thing @@ -90,7 +90,7 @@ log_and_message_admins("Power has been restored to [affected_apc_count] APCs.") if(power_type == 1) //Repair without charging if(announce) - GLOB.event_announcement.Announce("All APCs on \the [station_name()] have been repaired.", "Power Systems Nominal", new_sound = 'sound/AI/poweron.ogg') + GLOB.event_announcement.Announce("All APCs on \the [station_name()] have been repaired.", "Power Systems Nominal", 'sound/AI/power_restore.ogg') for(var/thing in GLOB.apcs) var/obj/machinery/power/apc/A = thing var/area/current_area = get_area(A) @@ -101,7 +101,7 @@ log_and_message_admins("Power has been restored to all APCs.") if(power_type == 2) //Repair and Power APCs if(announce) - GLOB.event_announcement.Announce("All APCs on \the [station_name()] have been repaired and recharged. We apologize for the inconvenience.", "Power Systems Optimal", new_sound = 'sound/AI/poweron.ogg') + GLOB.event_announcement.Announce("All APCs on \the [station_name()] have been repaired and recharged. We apologize for the inconvenience.", "Power Systems Optimal", 'sound/AI/power_restore.ogg') // repair the APCs and recharge them for(var/thing in GLOB.apcs) var/obj/machinery/power/apc/A = thing @@ -115,7 +115,7 @@ /proc/power_restore_quick(announce = TRUE) if(announce) - GLOB.event_announcement.Announce("All SMESs on \the [station_name()] have been recharged. We apologize for the inconvenience.", "Power Systems Nominal", new_sound = 'sound/AI/poweron.ogg') + GLOB.event_announcement.Announce("All SMESs on \the [station_name()] have been recharged. We apologize for the inconvenience.", "Power Systems Nominal", 'sound/AI/power_restore.ogg') // fix all of the SMESs for(var/obj/machinery/power/smes/S in GLOB.machines) if(!is_station_level(S.z)) diff --git a/code/modules/events/blob.dm b/code/modules/events/blob.dm index 65d820ce43f..4f15e3983e4 100644 --- a/code/modules/events/blob.dm +++ b/code/modules/events/blob.dm @@ -27,6 +27,7 @@ var/mob/living/simple_animal/mouse/blobinfected/B = new(vent.loc) var/mob/M = pick(candidates) B.key = M.key + B.mind.special_role = SPECIAL_ROLE_BLOB SSticker.mode.update_blob_icons_added(B.mind) to_chat(B, "You are now a mouse, infected with blob spores. Find somewhere isolated... before you burst and become the blob! Use ventcrawl (alt-click on vents) to move around.") diff --git a/code/modules/events/brand_intelligence.dm b/code/modules/events/brand_intelligence.dm index 2ffcdb2acb9..e8a557ed069 100644 --- a/code/modules/events/brand_intelligence.dm +++ b/code/modules/events/brand_intelligence.dm @@ -14,7 +14,7 @@ "You don't want to buy anything? Yeah, well I didn't want to buy your mom either.") /datum/event/brand_intelligence/announce() - GLOB.event_announcement.Announce("Rampant brand intelligence has been detected aboard [station_name()], please stand-by. The origin is believed to be \a [originMachine.name].", "Machine Learning Alert") + GLOB.event_announcement.Announce("Rampant brand intelligence has been detected aboard [station_name()], please stand-by. The origin is believed to be \a [originMachine.name].", "Machine Learning Alert", 'sound/AI/brand_intelligence.ogg') /datum/event/brand_intelligence/start() for(var/obj/machinery/vending/V in GLOB.machines) diff --git a/code/modules/events/disease_outbreak.dm b/code/modules/events/disease_outbreak.dm index 9a6ab6ca614..feba4fc1626 100644 --- a/code/modules/events/disease_outbreak.dm +++ b/code/modules/events/disease_outbreak.dm @@ -20,7 +20,7 @@ D.carrier = TRUE /datum/event/disease_outbreak/announce() - GLOB.event_announcement.Announce("Confirmed outbreak of level 7 major viral biohazard aboard [station_name()]. All personnel must contain the outbreak.", "Biohazard Alert", new_sound = 'sound/AI/outbreak7.ogg') + GLOB.event_announcement.Announce("Confirmed outbreak of level 7 major viral biohazard aboard [station_name()]. All personnel must contain the outbreak.", "Biohazard Alert", 'sound/AI/outbreak7.ogg') for(var/p in GLOB.dead_mob_list) var/mob/M = p to_chat(M, "[patient_zero] has been infected with [D.name] ([ghost_follow_link(patient_zero, M)])") diff --git a/code/modules/events/door_runtime.dm b/code/modules/events/door_runtime.dm index 39e02e694db..67110810a82 100644 --- a/code/modules/events/door_runtime.dm +++ b/code/modules/events/door_runtime.dm @@ -1,7 +1,7 @@ /datum/event/door_runtime /datum/event/door_runtime/announce() - GLOB.minor_announcement.Announce("Hostile runtime detected in door controllers. Isolation lockdown protocols are now in effect. Please remain calm.", "Network Alert") + GLOB.minor_announcement.Announce("Hostile runtime detected in door controllers. Isolation lockdown protocols are now in effect. Please remain calm.", "Network Alert", 'sound/AI/door_runtimes.ogg') /datum/event/door_runtime/start() for(var/obj/machinery/door/D in GLOB.airlocks) @@ -13,4 +13,4 @@ post_status("alert", "lockdown") /datum/event/door_runtime/proc/reboot() - GLOB.minor_announcement.Announce("Automatic system reboot complete. Have a secure day.","Network reset:") + GLOB.minor_announcement.Announce("Automatic system reboot complete. Have a secure day.","Network reset:", 'sound/AI/door_runtimes_fix.ogg') diff --git a/code/modules/events/electrical_storm.dm b/code/modules/events/electrical_storm.dm index 17c697faf11..555d26ee353 100644 --- a/code/modules/events/electrical_storm.dm +++ b/code/modules/events/electrical_storm.dm @@ -3,7 +3,7 @@ var/lightsoutRange = 25 /datum/event/electrical_storm/announce() - GLOB.event_announcement.Announce("An electrical storm has been detected in your area, please repair potential electronic overloads.", "Electrical Storm Alert") + GLOB.event_announcement.Announce("An electrical storm has been detected in your area, please repair potential electronic overloads.", "Electrical Storm Alert", 'sound/AI/elec_storm.ogg') /datum/event/electrical_storm/start() var/list/epicentreList = list() @@ -26,4 +26,3 @@ var/obj/effect/landmark/epicentre = thing for(var/obj/machinery/power/apc/apc in range(epicentre, lightsoutRange)) INVOKE_ASYNC(apc, /obj/machinery/power/apc.proc/overload_lighting) - diff --git a/code/modules/events/ion_storm.dm b/code/modules/events/ion_storm.dm index 60fc5e4d39a..e9df07a8d3c 100644 --- a/code/modules/events/ion_storm.dm +++ b/code/modules/events/ion_storm.dm @@ -18,7 +18,7 @@ /datum/event/ion_storm/announce() if(announceEvent == ION_ANNOUNCE || (announceEvent == ION_RANDOM && prob(ionAnnounceChance))) - GLOB.event_announcement.Announce("Ion storm detected near the station. Please check all AI-controlled equipment for errors.", "Anomaly Alert", 'sound/AI/ionstorm.ogg') + GLOB.event_announcement.Announce("Ion storm detected near the station. Please check all AI-controlled equipment for errors.", "Anomaly Alert", 'sound/AI/ions.ogg') /datum/event/ion_storm/start() //AI laws @@ -31,6 +31,9 @@ to_chat(M, "[message] ...LAWS UPDATED") to_chat(M, "
    ") + for(var/player in GLOB.dead_mob_list) + to_chat(player, "[M] ([ghost_follow_link(M, player)]) has recieved an ion law:\n'[message]'") + if(botEmagChance) for(var/mob/living/simple_animal/bot/bot in GLOB.machines) if(prob(botEmagChance)) diff --git a/code/modules/events/koi_mirgration.dm b/code/modules/events/koi_mirgration.dm index 45f1ccf6d85..33510149c1b 100644 --- a/code/modules/events/koi_mirgration.dm +++ b/code/modules/events/koi_mirgration.dm @@ -5,4 +5,4 @@ /datum/event/carp_migration/koi/start() - spawn_fish(GLOB.landmarks_list.len) + spawn_fish(rand(4, 6)) //12 to 30 koi, in small groups diff --git a/code/modules/events/mass_hallucination.dm b/code/modules/events/mass_hallucination.dm index 4fff53f1a8f..cb811c32035 100644 --- a/code/modules/events/mass_hallucination.dm +++ b/code/modules/events/mass_hallucination.dm @@ -9,7 +9,7 @@ var/turf/T = get_turf(H) if(!is_station_level(T.z)) continue - var/armor = H.getarmor(type = "rad") + var/armor = H.getarmor(type = RAD) if(HAS_TRAIT(H, TRAIT_RADIMMUNE) || armor >= 75) // Leave radiation-immune species/rad armored players completely unaffected continue H.AdjustHallucinate(rand(50, 100)) diff --git a/code/modules/events/rogue_drones.dm b/code/modules/events/rogue_drones.dm index f3ea93c80c4..e069fb4e5c8 100644 --- a/code/modules/events/rogue_drones.dm +++ b/code/modules/events/rogue_drones.dm @@ -22,7 +22,7 @@ else if(prob(50)) msg = "Contact has been lost with a combat drone wing operating out of the NSV Icarus. If any are sighted in the area, approach with caution." else - msg = "Unidentified hackers have targetted a combat drone wing deployed from the NSV Icarus. If any are sighted in the area, approach with caution." + msg = "Unidentified hackers have targeted a combat drone wing deployed from the NSV Icarus. If any are sighted in the area, approach with caution." GLOB.event_announcement.Announce(msg, "Rogue drone alert") /datum/event/rogue_drone/tick() diff --git a/code/modules/events/solarflare.dm b/code/modules/events/solarflare.dm index edd1726cbb2..fa72b6182cb 100644 --- a/code/modules/events/solarflare.dm +++ b/code/modules/events/solarflare.dm @@ -4,7 +4,7 @@ announceWhen = 1 /datum/event/solar_flare/announce() - GLOB.event_announcement.Announce("A solar flare has been detected on collision course with the station.", "Incoming Solar Flare", 'sound/AI/attention.ogg') + GLOB.event_announcement.Announce("A solar flare has been detected on collision course with the station.", "Incoming Solar Flare", 'sound/AI/flare.ogg') /datum/event/solar_flare/start() SSweather.run_weather(/datum/weather/solar_flare) diff --git a/code/modules/events/spacevine.dm b/code/modules/events/spacevine.dm index 3ede42ef1e6..619a6a51977 100644 --- a/code/modules/events/spacevine.dm +++ b/code/modules/events/spacevine.dm @@ -487,7 +487,7 @@ damage_dealt *= 4 for(var/obj/structure/spacevine/B in range(1,src)) if(B.obj_integrity > damage_dealt) //this only is going to occur for woodening mutation vines (increased health) or if we nerf scythe damage/multiplier - B.take_damage(damage_dealt, I.damtype, "melee", 1) + B.take_damage(damage_dealt, I.damtype, MELEE, 1) else B.wither() return @@ -498,7 +498,7 @@ for(var/datum/spacevine_mutation/SM in mutations) damage_dealt = SM.on_hit(src, user, I, damage_dealt) //on_hit now takes override damage as arg and returns new value for other mutations to permutate further - take_damage(damage_dealt, I.damtype, "melee", 1) + take_damage(damage_dealt, I.damtype, MELEE, 1) /obj/structure/spacevine/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0) switch(damage_type) diff --git a/code/modules/events/spider_terror.dm b/code/modules/events/spider_terror.dm index 5f9a06a501b..6bcd369884e 100644 --- a/code/modules/events/spider_terror.dm +++ b/code/modules/events/spider_terror.dm @@ -11,7 +11,7 @@ /datum/event/spider_terror/announce() if(successSpawn) - GLOB.command_announcement.Announce("Confirmed outbreak of level 3 biohazard aboard [station_name()]. All personnel must contain the outbreak.", "Biohazard Alert", 'sound/effects/siren-spooky.ogg') + GLOB.command_announcement.Announce("Confirmed outbreak of level 3 biohazard aboard [station_name()]. All personnel must contain the outbreak.", "Biohazard Alert", 'sound/effects/siren-spooky.ogg', new_sound2 = 'sound/AI/outbreak3.ogg') else log_and_message_admins("Warning: Could not spawn any mobs for event Terror Spiders") @@ -61,4 +61,3 @@ successSpawn = TRUE #undef TS_HIGHPOP_TRIGGER - diff --git a/code/modules/events/tear.dm b/code/modules/events/tear.dm index 85976290f9c..ae0597e501f 100644 --- a/code/modules/events/tear.dm +++ b/code/modules/events/tear.dm @@ -5,7 +5,7 @@ var/obj/effect/tear/TE /datum/event/tear/announce() - GLOB.event_announcement.Announce("A tear in the fabric of space and time has opened. Expected location: [impact_area.name].", "Anomaly Alert") + GLOB.event_announcement.Announce("A tear in the fabric of space and time has opened. Expected location: [impact_area.name].", "Anomaly Alert", 'sound/AI/anomaly.ogg') /datum/event/tear/start() var/turf/T = pick(get_area_turfs(impact_area)) diff --git a/code/modules/events/vent_clog.dm b/code/modules/events/vent_clog.dm index daa2013a126..484b3eb2e73 100644 --- a/code/modules/events/vent_clog.dm +++ b/code/modules/events/vent_clog.dm @@ -6,7 +6,7 @@ var/list/vents = list() /datum/event/vent_clog/announce() - GLOB.event_announcement.Announce("The scrubbers network is experiencing a backpressure surge. Some ejection of contents may occur.", "Atmospherics alert") + GLOB.event_announcement.Announce("The scrubbers network is experiencing a backpressure surge. Some ejection of contents may occur.", "Atmospherics alert", 'sound/AI/scrubbers.ogg') /datum/event/vent_clog/setup() endWhen = rand(25, 100) diff --git a/code/modules/events/wizard/ghost.dm b/code/modules/events/wizard/ghost.dm index 11529e3080d..e703799ff02 100644 --- a/code/modules/events/wizard/ghost.dm +++ b/code/modules/events/wizard/ghost.dm @@ -3,3 +3,12 @@ /datum/event/wizard/ghost/start() var/msg = "You suddenly feel extremely obvious..." set_observer_default_invisibility(0, msg) + +/datum/event/wizard/ghost_mute //The spook is silent + +/datum/event/wizard/ghost_mute/start() + GLOB.dsay_enabled = FALSE + var/sound/S = sound('sound/hallucinations/wail.ogg') + for(var/mob/dead/observer/silenced in GLOB.player_list) + to_chat(silenced, "Magical forces wrap around your spectral form. You can no longer speak to other ghosts!") + SEND_SOUND(silenced, S) diff --git a/code/modules/food_and_drinks/drinks/drinks.dm b/code/modules/food_and_drinks/drinks/drinks.dm index b3b03b5777b..209f9526b76 100644 --- a/code/modules/food_and_drinks/drinks/drinks.dm +++ b/code/modules/food_and_drinks/drinks/drinks.dm @@ -12,6 +12,7 @@ volume = 50 resistance_flags = NONE antable = FALSE + var/chugging = FALSE /obj/item/reagent_containers/food/drinks/New() ..() @@ -40,22 +41,32 @@ return FALSE /obj/item/reagent_containers/food/drinks/MouseDrop(atom/over_object) //CHUG! CHUG! CHUG! + if(!iscarbon(over_object)) + return var/mob/living/carbon/chugger = over_object - if (!(container_type & DRAINABLE)) + if(!(container_type & DRAINABLE)) to_chat(chugger, "You need to open [src] first!") return - if(istype(chugger) && loc == chugger && src == chugger.get_active_hand() && reagents.total_volume) - chugger.visible_message("[chugger] raises [src] to [chugger.p_their()] mouth and starts [pick("chugging","gulping")] it down like [pick("a savage","a mad beast","it's going out of style","there's no tomorrow")]!", "You start chugging [src].", "You hear what sounds like gulping.") - while(do_mob(chugger, chugger, 40)) //Between the default time for do_mob and the time it takes for a vampire to suck blood. + if(reagents.total_volume && loc == chugger && src == chugger.get_active_hand()) + chugger.visible_message("[chugger] raises [src] to [chugger.p_their()] mouth and starts [pick("chugging","gulping")] it down like [pick("a savage","a mad beast","it's going out of style","there's no tomorrow")]!", + "You start chugging [src].", + "You hear what sounds like gulping.") + chugging = TRUE + while(do_after_once(chugger, 4 SECONDS, TRUE, chugger, null, "You stop chugging [src].")) chugger.eat(src, chugger, 25) //Half of a glass, quarter of a bottle. if(!reagents.total_volume) //Finish in style. chugger.emote("gasp") - chugger.visible_message("[chugger] [pick("finishes","downs","polishes off","slams")] the entire [src], what a [pick("savage","monster","champ","beast")]!", "You finish off [src]![prob(50) ? " Maybe that wasn't such a good idea..." : ""]", "You hear a gasp and a clink.") + chugger.visible_message("[chugger] [pick("finishes","downs","polishes off","slams")] the entire [src], what a [pick("savage","monster","champ","beast")]!", + "You finish off [src]![prob(50) ? " Maybe that wasn't such a good idea..." : ""]", + "You hear a gasp and a clink.") break + chugging = FALSE /obj/item/reagent_containers/food/drinks/afterattack(obj/target, mob/user, proximity) if(!proximity) return + if(chugging) + return if(target.is_refillable() && is_drainable()) //Something like a glass. Player probably wants to transfer TO it. if(!reagents.total_volume) diff --git a/code/modules/food_and_drinks/drinks/drinks/bottle.dm b/code/modules/food_and_drinks/drinks/drinks/bottle.dm index d01e314c593..727cf7cd034 100644 --- a/code/modules/food_and_drinks/drinks/drinks/bottle.dm +++ b/code/modules/food_and_drinks/drinks/drinks/bottle.dm @@ -66,14 +66,14 @@ var/mob/living/carbon/human/H = target var/headarmor = 0 // Target's head armor - armor_block = H.run_armor_check(affecting, "melee","","",armour_penetration) // For normal attack damage + armor_block = H.run_armor_check(affecting, MELEE,"","",armour_penetration) // For normal attack damage //If they have a hat/helmet and the user is targeting their head. if(istype(H.head, /obj/item/clothing/head) && affecting == "head") // If their head has an armor value, assign headarmor to it, else give it 0. - if(H.head.armor.getRating("melee")) - headarmor = H.head.armor.getRating("melee") + if(H.head.armor.getRating(MELEE)) + headarmor = H.head.armor.getRating(MELEE) else headarmor = 0 else @@ -84,7 +84,7 @@ else //Only humans can have armor, right? - armor_block = target.run_armor_check(affecting, "melee") + armor_block = target.run_armor_check(affecting, MELEE) if(affecting == "head") armor_duration = duration + force armor_duration /= 10 diff --git a/code/modules/food_and_drinks/drinks/drinks/cans.dm b/code/modules/food_and_drinks/drinks/drinks/cans.dm index 4759f76eb2b..e373fa7f78e 100644 --- a/code/modules/food_and_drinks/drinks/drinks/cans.dm +++ b/code/modules/food_and_drinks/drinks/drinks/cans.dm @@ -1,4 +1,5 @@ /obj/item/reagent_containers/food/drinks/cans + container_type = NONE var/canopened = FALSE var/is_glass = 0 var/is_plastic = 0 @@ -7,10 +8,6 @@ var/can_burst = FALSE var/burst_chance = 0 -/obj/item/reagent_containers/food/drinks/cans/New() - ..() - flags &= ~OPENCONTAINER - /obj/item/reagent_containers/food/drinks/cans/examine(mob/user) . = ..() if(canopened) @@ -26,7 +23,7 @@ return ..() playsound(loc, 'sound/effects/canopen.ogg', rand(10, 50), 1) canopened = TRUE - flags |= OPENCONTAINER + container_type |= OPENCONTAINER to_chat(user, "You open the drink with an audible pop!") return ..() @@ -111,7 +108,7 @@ /obj/item/reagent_containers/food/drinks/cans/proc/fizzy_open(mob/user, burstopen = FALSE) playsound(loc, 'sound/effects/canopenfizz.ogg', rand(10, 50), 1) canopened = TRUE - flags |= OPENCONTAINER + container_type |= OPENCONTAINER if(!burstopen && user) to_chat(user, "You open the drink with an audible pop!") diff --git a/code/modules/food_and_drinks/food/foods/candy.dm b/code/modules/food_and_drinks/food/foods/candy.dm index aeab2b52128..730ba91f413 100644 --- a/code/modules/food_and_drinks/food/foods/candy.dm +++ b/code/modules/food_and_drinks/food/foods/candy.dm @@ -132,6 +132,7 @@ filling_color = "#7D5F46" bitesize = 3 junkiness = 25 + antable = FALSE list_reagents = list("nutriment" = 1, "chocolate" = 1) tastes = list("chocolate" = 1) diff --git a/code/modules/food_and_drinks/food/foods/ethnic.dm b/code/modules/food_and_drinks/food/foods/ethnic.dm index 6523b7521e3..4d7faf2c0a3 100644 --- a/code/modules/food_and_drinks/food/foods/ethnic.dm +++ b/code/modules/food_and_drinks/food/foods/ethnic.dm @@ -58,6 +58,7 @@ desc = "What is in this anyways?" icon_state = "chinese1" junkiness = 25 + antable = FALSE list_reagents = list("nutriment" = 1, "beans" = 3, "msg" = 4, "sugar" = 2) tastes = list("noodle" = 1, "vegetables" = 1) @@ -75,6 +76,7 @@ desc = "Tastes like chicken." icon_state = "chinese2" junkiness = 25 + antable = FALSE list_reagents = list("nutriment" = 1, "protein" = 1, "msg" = 4, "sugar" = 4) tastes = list("chicken" = 1) @@ -83,6 +85,7 @@ desc = "Made fresh, weekly!" icon_state = "chinese3" junkiness = 25 + antable = FALSE list_reagents = list("nutriment" = 1, "msg" = 4, "sugar" = 3) tastes = list("noodles" = 1) @@ -91,6 +94,7 @@ desc = "A timeless classic." icon_state = "chinese4" item_state = "chinese2" + antable = FALSE junkiness = 20 list_reagents = list("nutriment" = 1, "rice" = 3, "msg" = 4, "sugar" = 2) tastes = list("rice" = 1) diff --git a/code/modules/food_and_drinks/food/foods/junkfood.dm b/code/modules/food_and_drinks/food/foods/junkfood.dm index ec17f3c4a5a..7b7a665e0f5 100644 --- a/code/modules/food_and_drinks/food/foods/junkfood.dm +++ b/code/modules/food_and_drinks/food/foods/junkfood.dm @@ -11,6 +11,7 @@ trash = /obj/item/trash/chips filling_color = "#E8C31E" junkiness = 20 + antable = FALSE list_reagents = list("nutriment" = 1, "sodiumchloride" = 1, "sugar" = 3) tastes = list("crisps" = 1) @@ -21,6 +22,7 @@ trash = /obj/item/trash/sosjerky filling_color = "#631212" junkiness = 25 + antable = FALSE list_reagents = list("protein" = 1, "sugar" = 3) tastes = list("chewy beef" = 1) @@ -31,6 +33,7 @@ trash = /obj/item/trash/pistachios filling_color = "#BAD145" junkiness = 20 + antable = FALSE list_reagents = list("plantmatter" = 2, "sodiumchloride" = 1, "sugar" = 4) tastes = list("pistachios" = 1) @@ -41,6 +44,7 @@ trash = /obj/item/trash/raisins filling_color = "#343834" junkiness = 25 + antable = FALSE list_reagents = list("plantmatter" = 2, "sugar" = 4) tastes = list("dried raisins" = 1) @@ -61,6 +65,7 @@ trash = /obj/item/trash/cheesie filling_color = "#FFA305" junkiness = 25 + antable = FALSE list_reagents = list("nutriment" = 1, "fake_cheese" = 2, "sugar" = 3) tastes = list("cheese" = 1, "crisps" = 2) @@ -71,6 +76,7 @@ filling_color = "#FF5D05" trash = /obj/item/trash/syndi_cakes bitesize = 3 + antable = FALSE list_reagents = list("nutriment" = 4, "salglu_solution" = 5) tastes = list("sweetness" = 3, "cake" = 1) @@ -81,6 +87,7 @@ trash = /obj/item/trash/tastybread filling_color = "#A66829" junkiness = 20 + antable = FALSE list_reagents = list("nutriment" = 2, "sugar" = 4) tastes = list("bread" = 1) diff --git a/code/modules/food_and_drinks/food/foods/sandwiches.dm b/code/modules/food_and_drinks/food/foods/sandwiches.dm index f0e49305175..0649a5beed5 100644 --- a/code/modules/food_and_drinks/food/foods/sandwiches.dm +++ b/code/modules/food_and_drinks/food/foods/sandwiches.dm @@ -180,7 +180,7 @@ /obj/item/reagent_containers/food/snacks/grilledcheese name = "grilled cheese sandwich" desc = "Goes great with tomato soup!" - icon_state = "toastedsandwich" + icon_state = "grilledcheese" filling_color = "#D9BE29" list_reagents = list("nutriment" = 7, "vitamin" = 1) //why make a regualr sandwhich when you can make grilled cheese, with this nutriment value? tastes = list("toast" = 1, "grilled cheese" = 1) diff --git a/code/modules/food_and_drinks/food/foods/seafood.dm b/code/modules/food_and_drinks/food/foods/seafood.dm index 0edb18df72f..d3f291828ca 100644 --- a/code/modules/food_and_drinks/food/foods/seafood.dm +++ b/code/modules/food_and_drinks/food/foods/seafood.dm @@ -3,7 +3,7 @@ name = "carp fillet" desc = "A fillet of spess carp meat." icon = 'icons/obj/food/seafood.dmi' - icon_state = "fishfillet" + icon_state = "carpfillet" // Sprite created by https://github.com/binarysudoku for Goonstation, They have relicensed it for our use. filling_color = "#FFDEFE" bitesize = 6 list_reagents = list("protein" = 3, "carpotoxin" = 2, "vitamin" = 2) @@ -13,7 +13,7 @@ name = "raw salmon" desc = "A fillet of raw salmon." icon = 'icons/obj/food/seafood.dmi' - icon_state = "fishfillet" + icon_state = "salmonfillet" // Sprite created by https://github.com/binarysudoku for Goonstation, They have relicensed it for our use. filling_color = "#FFDEFE" bitesize = 6 list_reagents = list("protein" = 3, "vitamin" = 2) @@ -23,7 +23,7 @@ name = "salmon steak" desc = "A fillet of freshly-grilled salmon meat." icon = 'icons/obj/food/seafood.dmi' - icon_state = "salmonsteak" + icon_state = "salmonsteak" // Sprite based on one created by https://github.com/binarysudoku for Goonstation, They have relicensed it for our use. trash = /obj/item/trash/plate filling_color = "#7A3D11" bitesize = 3 @@ -34,7 +34,7 @@ name = "raw catfish" desc = "A fillet of raw catfish." icon = 'icons/obj/food/seafood.dmi' - icon_state = "fishfillet" + icon_state = "catfishfillet" // Sprite created by https://github.com/binarysudoku for Goonstation, They have relicensed it for our use. filling_color = "#FFDEFE" bitesize = 6 list_reagents = list("protein" = 3, "vitamin" = 2) diff --git a/code/modules/food_and_drinks/kitchen_machinery/gibber.dm b/code/modules/food_and_drinks/kitchen_machinery/gibber.dm index 4ec135e9e01..36da44bbfb1 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/gibber.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/gibber.dm @@ -24,6 +24,21 @@ idle_power_usage = 2 active_power_usage = 500 +/obj/machinery/gibber/Initialize(mapload) + . = ..() + add_overlay("grjam") + component_parts = list() + component_parts += new /obj/item/circuitboard/gibber(null) + component_parts += new /obj/item/stock_parts/matter_bin(null) + component_parts += new /obj/item/stock_parts/manipulator(null) + RefreshParts() + +/obj/machinery/gibber/Destroy() + for(var/atom/movable/A in contents) + A.forceMove(get_turf(src)) + occupant = null + return ..() + /obj/machinery/gibber/suicide_act(mob/user) if(occupant || locked) return FALSE @@ -36,21 +51,6 @@ addtimer(CALLBACK(src, .proc/startgibbing, user), 33) return OBLITERATION -/obj/machinery/gibber/Destroy() - if(contents.len) - for(var/atom/movable/A in contents) - A.loc = get_turf(src) - if(occupant) - occupant = null - return ..() - -/obj/machinery/gibber/RefreshParts() //If you want to make the machine upgradable, this is where you would change any vars basd on its stock parts. - return - -/obj/machinery/gibber/New() - ..() - overlays += image('icons/obj/kitchen.dmi', "grjam") - /obj/machinery/gibber/update_icon() overlays.Cut() @@ -139,8 +139,8 @@ to_chat(user, "This is not suitable for [src]!") return - if(victim.abiotic(1)) - to_chat(user, "Subject may not have abiotic items on.") + if(victim.abiotic(TRUE)) + to_chat(user, "Subject may not have anything on their body.") return user.visible_message("[user] starts to put [victim] into [src]!") diff --git a/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm b/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm index 6d1f482adf9..4c712b9ece6 100644 --- a/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm +++ b/code/modules/food_and_drinks/kitchen_machinery/smartfridge.dm @@ -237,7 +237,7 @@ var/K = item_quants[i] var/count = item_quants[K] if(count > 0) - items.Add(list(list("display_name" = html_encode(capitalize(K)), "vend" = i, "quantity" = count))) + items.Add(list(list("display_name" = capitalize(K), "vend" = i, "quantity" = count))) if(length(items)) data["contents"] = items diff --git a/code/modules/games/cards.dm b/code/modules/games/cards.dm index 87e17efd10b..599eef5b2f0 100644 --- a/code/modules/games/cards.dm +++ b/code/modules/games/cards.dm @@ -200,11 +200,12 @@ deckshuffle() /obj/item/deck/verb/verb_shuffle() - set category = "Object" - set name = "Shuffle" - set desc = "Shuffle the cards in the deck." - set src in view(1) - deckshuffle() + if(!isobserver(usr)) + set category = "Object" + set name = "Shuffle" + set desc = "Shuffle the cards in the deck." + set src in view(1) + deckshuffle() /obj/item/deck/proc/deckshuffle() var/mob/living/user = usr diff --git a/code/modules/holiday/christmas.dm b/code/modules/holiday/christmas.dm index 62195e7885e..b3e1421d751 100644 --- a/code/modules/holiday/christmas.dm +++ b/code/modules/holiday/christmas.dm @@ -65,4 +65,4 @@ icon_state = "xmashat" desc = "A crappy paper hat that you are REQUIRED to wear." flags_inv = 0 - armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 0, ACID = 0) diff --git a/code/modules/hydroponics/gene_modder.dm b/code/modules/hydroponics/gene_modder.dm index b42045f86d9..13cce41ed77 100644 --- a/code/modules/hydroponics/gene_modder.dm +++ b/code/modules/hydroponics/gene_modder.dm @@ -277,6 +277,13 @@ if(can_insert && istype(disk.gene, /datum/plant_gene/trait)) dat += "Insert: [disk.gene.get_name()]" dat += "
    " + + dat += "

    Variant

    " + dat += "" + dat += "" + if(seed.variant) + dat += "" + dat += "
    [seed.variant ? seed.variant : "None"]EditRemove
    " else dat += "
    No sample found.
    Please, insert a plant sample to use this device." popup.set_content(dat) @@ -391,6 +398,16 @@ else if(href_list["abort"]) operation = "" target = null + else if(href_list["set_v"]) + if(!seed) + return + seed.variant_prompt(usr, src) + else if(href_list["del_v"]) + if(!seed) + return + seed.variant = null + seed.apply_variant_name() + to_chat(usr, "You remove the [seed.plantname]'s variant designation.") interact(usr) diff --git a/code/modules/hydroponics/grown.dm b/code/modules/hydroponics/grown.dm index a69e2da495e..e5d4f501c5d 100644 --- a/code/modules/hydroponics/grown.dm +++ b/code/modules/hydroponics/grown.dm @@ -42,6 +42,8 @@ seed.prepare_result(src) transform *= TRANSFORM_USING_VARIABLE(seed.potency, 100) + 0.5 //Makes the resulting produce's sprite larger or smaller based on potency! add_juice() + if(seed.variant) + name += " \[[seed.variant]]" /obj/item/reagent_containers/food/snacks/grown/Destroy() QDEL_NULL(seed) diff --git a/code/modules/hydroponics/grown/berries.dm b/code/modules/hydroponics/grown/berries.dm index 5a383049f21..07eb158689e 100644 --- a/code/modules/hydroponics/grown/berries.dm +++ b/code/modules/hydroponics/grown/berries.dm @@ -85,7 +85,7 @@ lifespan = 30 endurance = 25 mutatelist = list() - genes = list(/datum/plant_gene/trait/glow/berry , /datum/plant_gene/trait/noreact, /datum/plant_gene/trait/repeated_harvest) + genes = list(/datum/plant_gene/trait/glow/berry, /datum/plant_gene/trait/repeated_harvest) reagents_add = list("uranium" = 0.25, "iodine" = 0.2, "vitamin" = 0.04, "plantmatter" = 0.1) rarity = 20 diff --git a/code/modules/hydroponics/hydroitemdefines.dm b/code/modules/hydroponics/hydroitemdefines.dm index b1464d998a9..fa91c03336d 100644 --- a/code/modules/hydroponics/hydroitemdefines.dm +++ b/code/modules/hydroponics/hydroitemdefines.dm @@ -8,7 +8,7 @@ w_class = WEIGHT_CLASS_TINY slot_flags = SLOT_BELT origin_tech = "magnets=2;biotech=2" - materials = list(MAT_METAL=30, MAT_GLASS=20) + materials = list(MAT_METAL = 30, MAT_GLASS = 20) // ************************************* // Hydroponics Tools @@ -111,9 +111,9 @@ flags = NONE /obj/item/scythe - icon_state = "scythe0" name = "scythe" desc = "A sharp and curved blade on a long fibremetal handle, this tool makes it easy to reap what you sow." + icon_state = "scythe0" force = 13 throwforce = 5 throw_speed = 2 @@ -129,6 +129,14 @@ var/extend = 1 var/swiping = FALSE +/obj/item/scythe/bone + name = "bone scythe" + desc = "Perfect for harvesting. And it's not about plants." + icon_state = "bone_scythe" + force = 14 + throw_range = 4 + origin_tech = "materials=1;combat=2" + /obj/item/scythe/suicide_act(mob/user) user.visible_message("[user] is beheading [user.p_them()]self with [src]! It looks like [user.p_theyre()] trying to commit suicide.") if(ishuman(user)) @@ -155,10 +163,10 @@ swiping = FALSE /obj/item/scythe/tele - icon_state = "tscythe0" - item_state = null //no sprite for folded version, like a tele-baton name = "telescopic scythe" desc = "A sharp and curved blade on a collapsable fibre metal handle, this tool is the pinnacle of covert reaping technology." + icon_state = "tscythe0" + item_state = null //no sprite for folded version, like a tele-baton force = 3 sharp = 0 w_class = WEIGHT_CLASS_SMALL @@ -198,17 +206,6 @@ H.update_inv_l_hand() H.update_inv_r_hand() add_fingerprint(user) - if(!blood_DNA) - return - if(blood_overlay && (blood_DNA.len >= 1)) //updated blood overlay, if any - overlays.Cut() //this might delete other item overlays as well but eeeeeh - - var/icon/I = new /icon(icon, icon_state) - I.Blend(new /icon('icons/effects/blood.dmi', rgb(255,255,255)), ICON_ADD) - I.Blend(new /icon('icons/effects/blood.dmi', "itemblood"), ICON_MULTIPLY) - blood_overlay = I - overlays += blood_overlay - // ************************************* // Nutrient defines for hydroponics diff --git a/code/modules/hydroponics/hydroponics.dm b/code/modules/hydroponics/hydroponics.dm index 134e337fa4e..81a4f83e6a6 100644 --- a/code/modules/hydroponics/hydroponics.dm +++ b/code/modules/hydroponics/hydroponics.dm @@ -344,7 +344,10 @@ /obj/machinery/hydroponics/examine(user) . = ..() if(myseed) - . += "It has [myseed.plantname] planted." + if(myseed.variant) + . += "It has the [myseed.variant] variant of [myseed.plantname] planted." + else + . += "It has [myseed.plantname] planted." if (dead) . += "It's dead!" else if (harvest) @@ -875,7 +878,8 @@ plant_hud_set_status() adjustWeeds(-10) //Has a side effect of cleaning up those nasty weeds update_icon() - + else if(istype(O, /obj/item/pen) && myseed) + myseed.variant_prompt(user, src) else return ..() diff --git a/code/modules/hydroponics/plant_genes.dm b/code/modules/hydroponics/plant_genes.dm index d959ab2933e..c304d5d1c70 100644 --- a/code/modules/hydroponics/plant_genes.dm +++ b/code/modules/hydroponics/plant_genes.dm @@ -327,21 +327,6 @@ new /obj/effect/decal/cleanable/molten_object(T) qdel(G) - -/datum/plant_gene/trait/noreact - // Makes plant reagents not react until squashed. - name = "Separated Chemicals" - -/datum/plant_gene/trait/noreact/on_new(obj/item/reagent_containers/food/snacks/grown/G, newloc) - ..() - G.reagents.set_reacting(FALSE) - -/datum/plant_gene/trait/noreact/on_squash(obj/item/reagent_containers/food/snacks/grown/G, atom/target) - if(G && G.reagents) - G.reagents.set_reacting(TRUE) - G.reagents.handle_reactions() - - /datum/plant_gene/trait/maxchem // 2x to max reagents volume. name = "Densified Chemicals" diff --git a/code/modules/hydroponics/seed_extractor.dm b/code/modules/hydroponics/seed_extractor.dm index 34ec63ebcb7..f35d7751c7a 100644 --- a/code/modules/hydroponics/seed_extractor.dm +++ b/code/modules/hydroponics/seed_extractor.dm @@ -109,6 +109,7 @@ /datum/seed_pile var/name = "" + var/variant = "" var/lifespan = 0 //Saved stats var/endurance = 0 var/maturation = 0 @@ -117,8 +118,9 @@ var/potency = 0 var/amount = 0 -/datum/seed_pile/New(name, life, endur, matur, prod, yie, poten, am = 1) +/datum/seed_pile/New(name, variant, life, endur, matur, prod, yie, poten, am = 1) src.name = name + src.variant = variant src.lifespan = life src.endurance = endur src.maturation = matur @@ -145,9 +147,9 @@ if (contents.len == 0) dat += "No seeds" else - dat += "" + dat += "
    NameLifespanEnduranceMaturationProductionYieldPotencyStock
    " for (var/datum/seed_pile/O in piles) - dat += "" + dat += "" dat += "" dat += "
    NameVariantLifespanEnduranceMaturationProductionYieldPotencyStock
    [O.name][O.lifespan][O.endurance][O.maturation]
    [O.name][O.variant][O.lifespan][O.endurance][O.maturation][O.production][O.yield][O.potency]" dat += "Vend ([O.amount] left)
    " @@ -203,9 +205,9 @@ O.forceMove(src) . = 1 for (var/datum/seed_pile/N in piles) - if (O.plantname == N.name && O.lifespan == N.lifespan && O.endurance == N.endurance && O.maturation == N.maturation && O.production == N.production && O.yield == N.yield && O.potency == N.potency) + if (O.plantname == N.name && O.variant == N.variant && O.lifespan == N.lifespan && O.endurance == N.endurance && O.maturation == N.maturation && O.production == N.production && O.yield == N.yield && O.potency == N.potency) ++N.amount return - piles += new /datum/seed_pile(O.plantname, O.lifespan, O.endurance, O.maturation, O.production, O.yield, O.potency) + piles += new /datum/seed_pile(O.plantname, O.variant, O.lifespan, O.endurance, O.maturation, O.production, O.yield, O.potency) return diff --git a/code/modules/hydroponics/seeds.dm b/code/modules/hydroponics/seeds.dm index cd9271379ed..539ab5e7573 100644 --- a/code/modules/hydroponics/seeds.dm +++ b/code/modules/hydroponics/seeds.dm @@ -10,6 +10,7 @@ var/plantname = "Plants" // Name of plant when planted. var/product // A type path. The thing that is created when the plant is harvested. var/species = "" // Used to update icons. Should match the name in the sprites unless all icon_* are overriden. + var/variant = null // Optional custom name to track modified plants. Can be set with pen or from gene modder. var/growing_icon = 'icons/obj/hydroponics/growing.dmi' //the file that stores the sprites of the growing plant from this seed. var/icon_grow // Used to override grow icon (default is "[species]-grow"). You can use one grow icon for multiple closely related plants with it. @@ -83,6 +84,8 @@ S.potency = potency S.weed_rate = weed_rate S.weed_chance = weed_chance + S.variant = variant + S.apply_variant_name() S.genes = list() for(var/g in genes) var/datum/plant_gene/G = g @@ -317,16 +320,43 @@ return /obj/item/seeds/attackby(obj/item/O, mob/user, params) - if (istype(O, /obj/item/plant_analyzer)) + 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]") return + if(istype(O, /obj/item/pen)) + variant_prompt(user) + return ..() // Fallthrough to item/attackby() so that bags can pick seeds up +/obj/item/seeds/proc/variant_prompt(mob/user, obj/item/container = null) + var/prev = variant + var/V = input(user, "Choose variant name:", "Plant Variant Naming", variant) as text|null + if(isnull(V)) // Did the user cancel? + return + if(container && (loc != container)) // Was the seed removed from the container, if there is a container? + return + if(!(container ? container : src).Adjacent(user)) // Is the user next to the seed/container? + return + variant = copytext(sanitize(html_encode(trim(V))), 1, 64) // Sanitization must happen after null check because it converts nulls to empty strings + if(variant == "") + variant = null + if(prev != variant) + to_chat(user, "You [variant ? "change" : "remove"] the [plantname]'s variant designation.") + apply_variant_name() + +/obj/item/seeds/proc/apply_variant_name() + var/V = variant ? " \[[variant]]" : "" // If we have a non-empty variant add it to the name + var/N = initial(name) + if(copytext(name, 1, 13) == "experimental") // Don't delete 'experimental' + N = "experimental " + N + name = N + V + if(GetComponent(/datum/component/label)) + GetComponent(/datum/component/label).apply_label() // Don't delete labels diff --git a/code/modules/karma/karma.dm b/code/modules/karma/karma.dm index 04f9d27dcd8..14878faf54a 100644 --- a/code/modules/karma/karma.dm +++ b/code/modules/karma/karma.dm @@ -16,15 +16,16 @@ return var/datum/db_query/log_query = SSdbcore.NewQuery({" - INSERT INTO karma (spendername, spenderkey, receivername, receiverkey, receiverrole, receiverspecial, spenderip, time) - VALUES (:sname, :skey, :rname, :rkey, :rrole, :rspecial, :sip, Now())"}, list( + INSERT INTO karma (spendername, spenderkey, receivername, receiverkey, receiverrole, receiverspecial, spenderip, time, server_id) + VALUES (:sname, :skey, :rname, :rkey, :rrole, :rspecial, :sip, Now(), :server_id)"}, list( "sname" = spender.name, "skey" = spender.ckey, "rname" = receiver.name, "rkey" = receiver.ckey, "rrole" = receiverrole, "rspecial" = receiverspecial, - "sip" = spender.client.address + "sip" = spender.client.address, + "server_id" = GLOB.configuration.system.instance_id )) if(!log_query.warn_execute()) @@ -271,21 +272,9 @@ GLOBAL_LIST_EMPTY(karma_spenders) else dat += "Nanotrasen Representative - Unlocked
    " if(!("Blueshield" in joblist)) - dat += "Unlock Blueshield -- 30KP
    " + dat += "Unlock Blueshield -- 30KP
    " else dat += "Blueshield - Unlocked
    " - if(!("Security Pod Pilot" in joblist)) - dat += "Unlock Security Pod Pilot -- 30KP
    " - else - dat += "Security Pod Pilot - Unlocked
    " - if(!("Mechanic" in joblist)) - dat += "Unlock Mechanic -- 30KP
    " - else - dat += "Mechanic - Unlocked
    " - if(!("Magistrate" in joblist)) - dat += "Unlock Magistrate -- 45KP
    " - else - dat+= "Magistrate - Unlocked
    " if(1) // Species Unlocks if(!("Machine" in specieslist)) @@ -350,6 +339,15 @@ GLOBAL_LIST_EMPTY(karma_spenders) if("Nanotrasen Recruiter" in purchased) refundable += "Nanotrasen Recruiter" dat += "Refund Nanotrasen Recruiter -- 10KP
    " + if("Mechanic" in purchased) + refundable += "Mechanic" + dat += "Refund Mechanic -- 30KP
    " + if("Security Pod Pilot" in purchased) + refundable += "Security Pod Pilot" + dat += "Refund Security Pod Pilot -- 30KP
    " + if("Magistrate" in purchased) + refundable += "Magistrate" + dat += "Refund Magistrate -- 45KP
    " if(!refundable.len) dat += "You do not have any refundable karma purchases.
    " @@ -512,10 +510,12 @@ GLOBAL_LIST_EMPTY(karma_spenders) /client/proc/karmarefund(type, name, cost) switch(name) if("Tajaran Ambassador","Unathi Ambassador","Skrell Ambassador","Diona Ambassador","Kidan Ambassador", - "Slime People Ambassador","Grey Ambassador","Vox Ambassador","Customs Officer") + "Slime People Ambassador","Grey Ambassador","Vox Ambassador","Customs Officer", "Mechanic", "Security Pod Pilot") cost = 30 if("Nanotrasen Recruiter") cost = 10 + if("Magistrate") + cost = 45 else to_chat(usr, "That job is not refundable.") return diff --git a/code/modules/library/codex_gigas.dm b/code/modules/library/codex_gigas.dm index 964f885d59a..c1d03f3aed3 100644 --- a/code/modules/library/codex_gigas.dm +++ b/code/modules/library/codex_gigas.dm @@ -8,3 +8,4 @@ author = "Forces beyond your comprehension" unique = TRUE title = "The codex gigas" + has_drm = TRUE diff --git a/code/modules/library/lib_items.dm b/code/modules/library/lib_items.dm index 1f588c71ec7..e6aa29b0142 100644 --- a/code/modules/library/lib_items.dm +++ b/code/modules/library/lib_items.dm @@ -20,7 +20,7 @@ opacity = 1 resistance_flags = FLAMMABLE max_integrity = 200 - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 0) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 0) var/tmp/busy = 0 var/list/allowed_books = list(/obj/item/book, /obj/item/spellbook, /obj/item/storage/bible, /obj/item/tome) //Things allowed in the bookcase diff --git a/code/modules/mapping/base_map_datum.dm b/code/modules/mapping/base_map_datum.dm index 6a5c7260f3a..a1962d8bba1 100644 --- a/code/modules/mapping/base_map_datum.dm +++ b/code/modules/mapping/base_map_datum.dm @@ -12,3 +12,5 @@ var/technical_name /// Path to the map file var/map_path + /// URL to the maps webmap + var/webmap_url diff --git a/code/modules/mapping/cyberiad.dm b/code/modules/mapping/cyberiad.dm index 29c27d59c73..46850a42682 100644 --- a/code/modules/mapping/cyberiad.dm +++ b/code/modules/mapping/cyberiad.dm @@ -2,3 +2,4 @@ fluff_name = "NSS Cyberiad" technical_name = "Cyberiad" map_path = "_maps/map_files/cyberiad/cyberiad.dmm" + webmap_url = "https://affectedarc07.github.io/SS13WebMap/Paradise/Cyberiad/" diff --git a/code/modules/mapping/delta.dm b/code/modules/mapping/delta.dm index 6b8bbce94cd..3eceefb2012 100644 --- a/code/modules/mapping/delta.dm +++ b/code/modules/mapping/delta.dm @@ -2,3 +2,4 @@ fluff_name = "NSS Kerberos" technical_name = "Delta" map_path = "_maps/map_files/Delta/delta.dmm" + webmap_url = "https://affectedarc07.github.io/SS13WebMap/Paradise/Delta/" diff --git a/code/modules/mapping/metastation.dm b/code/modules/mapping/metastation.dm index 654aad46ac8..461d02cfc44 100644 --- a/code/modules/mapping/metastation.dm +++ b/code/modules/mapping/metastation.dm @@ -2,3 +2,4 @@ fluff_name = "NSS Cerebron" technical_name = "MetaStation" map_path = "_maps/map_files/MetaStation/MetaStation.dmm" + webmap_url = "https://affectedarc07.github.io/SS13WebMap/Paradise/MetaStation/" diff --git a/code/modules/martial_arts/brawling.dm b/code/modules/martial_arts/brawling.dm index 6d64cfdd994..dfb0fd4aec4 100644 --- a/code/modules/martial_arts/brawling.dm +++ b/code/modules/martial_arts/brawling.dm @@ -24,7 +24,7 @@ var/obj/item/organ/external/affecting = D.get_organ(ran_zone(A.zone_selected)) - var/armor_block = D.run_armor_check(affecting, "melee") + var/armor_block = D.run_armor_check(affecting, MELEE) playsound(D.loc, 'sound/weapons/punch1.ogg', 25, 1, -1) @@ -82,7 +82,7 @@ return 1 //returns 1 so that they actually miss and don't switch to attackhand damage var/obj/item/organ/external/affecting = D.get_organ(ran_zone(A.zone_selected)) - var/armor_block = D.run_armor_check(affecting, "melee") + var/armor_block = D.run_armor_check(affecting, MELEE) playsound(D.loc, 'sound/weapons/punch1.ogg', 25, 1, -1) diff --git a/code/modules/martial_arts/combos/mimejutsu/mimechucks.dm b/code/modules/martial_arts/combos/mimejutsu/mimechucks.dm index b7f2d247b4b..0352d1d72ac 100644 --- a/code/modules/martial_arts/combos/mimejutsu/mimechucks.dm +++ b/code/modules/martial_arts/combos/mimejutsu/mimechucks.dm @@ -13,7 +13,7 @@ var/obj/item/organ/external/affecting = target.get_organ(ran_zone(user.zone_selected)) - var/armor_block = target.run_armor_check(affecting, "melee") + var/armor_block = target.run_armor_check(affecting, MELEE) target.visible_message("[user] has hit [target] with invisible nunchucks!", \ "[user] has hit [target] with a with invisible nunchuck!") diff --git a/code/modules/martial_arts/krav_maga.dm b/code/modules/martial_arts/krav_maga.dm index 6705503f8fe..1c7182decdb 100644 --- a/code/modules/martial_arts/krav_maga.dm +++ b/code/modules/martial_arts/krav_maga.dm @@ -158,4 +158,4 @@ heat_protection = HANDS max_heat_protection_temperature = GLOVES_MAX_TEMP_PROTECT resistance_flags = NONE - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 50) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 80, ACID = 50) diff --git a/code/modules/martial_arts/martial.dm b/code/modules/martial_arts/martial.dm index ca46831f8ca..2f7d6c04bc5 100644 --- a/code/modules/martial_arts/martial.dm +++ b/code/modules/martial_arts/martial.dm @@ -115,7 +115,7 @@ return FALSE var/obj/item/organ/external/affecting = D.get_organ(ran_zone(A.zone_selected)) - var/armor_block = D.run_armor_check(affecting, "melee") + var/armor_block = D.run_armor_check(affecting, MELEE) playsound(D.loc, attack.attack_sound, 25, 1, -1) D.visible_message("[A] has [atk_verb]ed [D]!", \ diff --git a/code/modules/martial_arts/wrestling.dm b/code/modules/martial_arts/wrestling.dm index 5fd75d102ec..d7f5a0a1666 100644 --- a/code/modules/martial_arts/wrestling.dm +++ b/code/modules/martial_arts/wrestling.dm @@ -25,7 +25,7 @@ D.visible_message("[A] suplexes [D]!", \ "[A] suplexes [D]!") D.forceMove(A.loc) - var/armor_block = D.run_armor_check(null, "melee") + var/armor_block = D.run_armor_check(null, MELEE) D.apply_damage(30, BRUTE, null, armor_block) D.apply_effect(6, WEAKEN, armor_block) add_attack_logs(A, D, "Melee attacked with [src] (SUPLEX)") @@ -34,7 +34,7 @@ D.SpinAnimation(10,1) spawn(3) - armor_block = A.run_armor_check(null, "melee") + armor_block = A.run_armor_check(null, MELEE) A.apply_effect(4, WEAKEN, armor_block) return @@ -52,7 +52,7 @@ D.visible_message("[A] holds [D] down!", \ "[A] holds [D] down!") var/obj/item/organ/external/affecting = D.get_organ(ran_zone(A.zone_selected)) - var/armor_block = D.run_armor_check(affecting, "melee") + var/armor_block = D.run_armor_check(affecting, MELEE) D.apply_damage(10, STAMINA, affecting, armor_block) return 1 diff --git a/code/modules/maze_generation/maze_generator.dm b/code/modules/maze_generation/maze_generator.dm index 96f6392a3f1..339b595f084 100644 --- a/code/modules/maze_generation/maze_generator.dm +++ b/code/modules/maze_generation/maze_generator.dm @@ -14,7 +14,7 @@ do { \ var/timer = start_watch(); \ proc2run ;\ - log_debug("\[MAZE] Operation '[opname]' on maze at [##x],[##y],[##z] took [stop_watch(timer)]s"); \ + log_debug("\[MAZE] Operation '[opname]' on maze at [x],[y],[z] took [stop_watch(timer)]s"); \ } while (FALSE) diff --git a/code/modules/mining/abandonedcrates.dm b/code/modules/mining/abandonedcrates.dm index 56c5c820559..f289a2dc8e1 100644 --- a/code/modules/mining/abandonedcrates.dm +++ b/code/modules/mining/abandonedcrates.dm @@ -104,21 +104,7 @@ new /obj/item/toy/katana(src) if(85 to 86) new /obj/item/defibrillator/compact(src) - if(87) //1% chance - new /obj/item/weed_extract(src) - if(88) - new /obj/item/organ/internal/brain(src) - if(89) - new /obj/item/organ/internal/brain/xeno(src) - if(90) - new /obj/item/organ/internal/heart(src) - if(91) - new /obj/item/soulstone/anybody(src) - if(92) - new /obj/item/katana(src) - if(93) - new /obj/item/dnainjector/xraymut(src) - if(94) + if(87 to 88) new /obj/item/storage/backpack/clown(src) new /obj/item/clothing/under/rank/clown(src) new /obj/item/clothing/shoes/clown_shoes(src) @@ -128,6 +114,18 @@ new /obj/item/toy/crayon/rainbow(src) new /obj/item/reagent_containers/spray/waterflower(src) new /obj/item/reagent_containers/food/drinks/bottle/bottleofbanana(src) + if(89) //1% chance + new /obj/item/weed_extract(src) + if(90) + new /obj/item/organ/internal/brain(src) + if(91) + new /obj/item/organ/internal/brain/xeno(src) + if(92) + new /obj/item/organ/internal/heart(src) + if(93) + new /obj/item/soulstone/anybody(src) + if(94) + new /obj/item/katana(src) if(95) new /obj/item/clothing/under/mime(src) new /obj/item/clothing/shoes/black(src) diff --git a/code/modules/mining/equipment/explorer_gear.dm b/code/modules/mining/equipment/explorer_gear.dm index b76c036390b..f94a4e2eeba 100644 --- a/code/modules/mining/equipment/explorer_gear.dm +++ b/code/modules/mining/equipment/explorer_gear.dm @@ -10,7 +10,7 @@ max_heat_protection_temperature = FIRE_SUIT_MAX_TEMP_PROTECT heat_protection = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS hoodtype = /obj/item/clothing/head/hooded/explorer - armor = list("melee" = 30, "bullet" = 20, "laser" = 20, "energy" = 20, "bomb" = 50, "bio" = 100, "rad" = 50, "fire" = 50, "acid" = 50) + armor = list(MELEE = 30, BULLET = 20, LASER = 20, ENERGY = 20, BOMB = 50, BIO = 100, RAD = 50, FIRE = 50, ACID = 50) allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/resonator, /obj/item/mining_scanner, /obj/item/t_scanner/adv_mining_scanner, /obj/item/gun/energy/kinetic_accelerator, /obj/item/pickaxe) resistance_flags = FIRE_PROOF hide_tail_by_species = list("Vox" , "Vulpkanin" , "Unathi" , "Tajaran") @@ -33,7 +33,7 @@ flags_cover = HEADCOVERSEYES min_cold_protection_temperature = FIRE_HELM_MIN_TEMP_PROTECT max_heat_protection_temperature = FIRE_HELM_MAX_TEMP_PROTECT - armor = list("melee" = 30, "bullet" = 20, "laser" = 20, "energy" = 20, "bomb" = 50, "bio" = 100, "rad" = 50, "fire" = 50, "acid" = 50) + armor = list(MELEE = 30, BULLET = 20, LASER = 20, ENERGY = 20, BOMB = 50, BIO = 100, RAD = 50, FIRE = 50, ACID = 50) resistance_flags = FIRE_PROOF sprite_sheets = list( @@ -52,7 +52,7 @@ max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT resistance_flags = FIRE_PROOF | LAVA_PROOF slowdown = 0 - armor = list("melee" = 70, "bullet" = 40, "laser" = 10, "energy" = 10, "bomb" = 50, "bio" = 100, "rad" = 100, "fire" = 100, "acid" = 100) + armor = list(MELEE = 70, BULLET = 40, LASER = 10, ENERGY = 10, BOMB = 50, BIO = 100, RAD = 100, FIRE = 100, ACID = 100) allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/resonator, /obj/item/mining_scanner, /obj/item/t_scanner/adv_mining_scanner, /obj/item/gun/energy/kinetic_accelerator, /obj/item/pickaxe) /obj/item/clothing/suit/space/hostile_environment/New() @@ -80,7 +80,7 @@ w_class = WEIGHT_CLASS_NORMAL max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT flags = THICKMATERIAL // no space protection - armor = list("melee" = 70, "bullet" = 40, "laser" = 10, "energy" = 10, "bomb" = 50, "bio" = 100, "rad" = 100, "fire" = 100, "acid" = 100) + armor = list(MELEE = 70, BULLET = 40, LASER = 10, ENERGY = 10, BOMB = 50, BIO = 100, RAD = 100, FIRE = 100, ACID = 100) resistance_flags = FIRE_PROOF | LAVA_PROOF /obj/item/clothing/head/helmet/space/hostile_environment/New() diff --git a/code/modules/mining/equipment/kinetic_crusher.dm b/code/modules/mining/equipment/kinetic_crusher.dm index 4af48e7050a..5bcb3fcadd1 100644 --- a/code/modules/mining/equipment/kinetic_crusher.dm +++ b/code/modules/mining/equipment/kinetic_crusher.dm @@ -114,7 +114,7 @@ C.total_damage += target_health - L.health //we did some damage, but let's not assume how much we did new /obj/effect/temp_visual/kinetic_blast(get_turf(L)) var/backstab_dir = get_dir(user, L) - var/def_check = L.getarmor(type = "bomb") + var/def_check = L.getarmor(type = BOMB) if((user.dir & backstab_dir) && (L.dir & backstab_dir)) if(!QDELETED(C)) C.total_damage += detonation_damage + backstab_bonus //cheat a little and add the total before killing it, so certain mobs don't have much lower chances of giving an item @@ -163,7 +163,7 @@ nodamage = TRUE damage = 0 //We're just here to mark people. This is still a melee weapon. damage_type = BRUTE - flag = "bomb" + flag = BOMB range = 6 log_override = TRUE var/obj/item/twohanded/kinetic_crusher/hammer_synced diff --git a/code/modules/mining/equipment/marker_beacons.dm b/code/modules/mining/equipment/marker_beacons.dm index c6d0ba0fb37..d44db114b0f 100644 --- a/code/modules/mining/equipment/marker_beacons.dm +++ b/code/modules/mining/equipment/marker_beacons.dm @@ -20,7 +20,7 @@ GLOBAL_LIST_INIT(marker_beacon_colors, list( desc = "Prism-brand path illumination devices. Used by miners to mark paths and warn of danger." icon = 'icons/obj/lighting.dmi' icon_state = "marker" - armor = list("melee" = 50, "bullet" = 75, "laser" = 75, "energy" = 75, "bomb" = 25, "bio" = 100, "rad" = 100, "fire" = 25, "acid" = 0) + armor = list(MELEE = 50, BULLET = 75, LASER = 75, ENERGY = 75, BOMB = 25, BIO = 100, RAD = 100, FIRE = 25, ACID = 0) max_integrity = 50 merge_type = /obj/item/stack/marker_beacon max_amount = 100 @@ -73,7 +73,7 @@ GLOBAL_LIST_INIT(marker_beacon_colors, list( icon = 'icons/obj/lighting.dmi' icon_state = "marker" layer = BELOW_OPEN_DOOR_LAYER - armor = list("melee" = 50, "bullet" = 75, "laser" = 75, "energy" = 75, "bomb" = 25, "bio" = 100, "rad" = 100, "fire" = 25, "acid" = 0) + armor = list(MELEE = 50, BULLET = 75, LASER = 75, ENERGY = 75, BOMB = 25, BIO = 100, RAD = 100, FIRE = 25, ACID = 0) max_integrity = 50 anchored = TRUE light_range = 2 diff --git a/code/modules/mining/equipment/mining_tools.dm b/code/modules/mining/equipment/mining_tools.dm index 7815bad0c37..dc25972ddaa 100644 --- a/code/modules/mining/equipment/mining_tools.dm +++ b/code/modules/mining/equipment/mining_tools.dm @@ -9,7 +9,7 @@ throwforce = 10 item_state = "pickaxe" w_class = WEIGHT_CLASS_BULKY - materials = list(MAT_METAL=2000) //one sheet, but where can you make them? + materials = list(MAT_METAL = 2000) //one sheet, but where can you make them? origin_tech = "materials=2;engineering=3" attack_verb = list("hit", "pierced", "sliced", "attacked") var/list/digsound = list('sound/effects/picaxe1.ogg','sound/effects/picaxe2.ogg','sound/effects/picaxe3.ogg') @@ -42,35 +42,49 @@ w_class = WEIGHT_CLASS_NORMAL materials = list(MAT_METAL = 1000) +/obj/item/pickaxe/bone + name = "bone pickaxe" + desc = "Do it yourself pickaxe." + icon_state = "bone_pickaxe" + item_state = "bone_pickaxe" + origin_tech = "materials=1;engineering=2" + toolspeed = 0.7 + force = 16 + materials = list() + /obj/item/pickaxe/silver name = "silver-plated pickaxe" + desc = "A silver-plated pickaxe that mines slightly faster than standard-issue." icon_state = "spickaxe" item_state = "spickaxe" origin_tech = "materials=3;engineering=4" toolspeed = 0.5 //mines faster than a normal pickaxe, bought from mining vendor - desc = "A silver-plated pickaxe that mines slightly faster than standard-issue." force = 17 + materials = list(MAT_METAL = 1900, MAT_SILVER = 100) /obj/item/pickaxe/gold name = "golden pickaxe" + desc = "A gold-plated pickaxe that mines faster than standard-issue." icon_state = "gpickaxe" item_state = "gpickaxe" origin_tech = "materials=4;engineering=4" toolspeed = 0.4 - desc = "A gold-plated pickaxe that mines faster than standard-issue." force = 18 + materials = list(MAT_METAL = 1900, MAT_GOLD = 100) /obj/item/pickaxe/diamond name = "diamond-tipped pickaxe" + desc = "A pickaxe with a diamond pick head. Extremely robust at cracking rock walls and digging up dirt." icon_state = "dpickaxe" item_state = "dpickaxe" origin_tech = "materials=5;engineering=4" toolspeed = 0.3 - desc = "A pickaxe with a diamond pick head. Extremely robust at cracking rock walls and digging up dirt." force = 19 + materials = list(MAT_METAL = 1900, MAT_DIAMOND = 100) /obj/item/pickaxe/drill name = "mining drill" + desc = "An electric mining drill for the especially scrawny." icon_state = "handdrill" item_state = "jackhammer" digsound = list('sound/weapons/drill.ogg') @@ -78,7 +92,6 @@ hitsound = 'sound/weapons/drill.ogg' usesound = 'sound/weapons/drill.ogg' origin_tech = "materials=2;powerstorage=2;engineering=3" - desc = "An electric mining drill for the especially scrawny." /obj/item/pickaxe/drill/cyborg name = "cyborg mining drill" @@ -87,9 +100,9 @@ /obj/item/pickaxe/drill/diamonddrill name = "diamond-tipped mining drill" + desc = "Yours is the drill that will pierce the heavens!" icon_state = "diamonddrill" origin_tech = "materials=6;powerstorage=4;engineering=4" - desc = "Yours is the drill that will pierce the heavens!" toolspeed = 0.2 /obj/item/pickaxe/drill/cyborg/diamond //This is the BORG version! @@ -99,13 +112,13 @@ /obj/item/pickaxe/drill/jackhammer name = "sonic jackhammer" + desc = "Cracks rocks with sonic blasts, and doubles as a demolition power tool for smashing walls." icon_state = "jackhammer" item_state = "jackhammer" origin_tech = "materials=6;powerstorage=4;engineering=5;magnets=4" digsound = list('sound/weapons/sonic_jackhammer.ogg') hitsound = 'sound/weapons/sonic_jackhammer.ogg' usesound = 'sound/weapons/sonic_jackhammer.ogg' - desc = "Cracks rocks with sonic blasts, and doubles as a demolition power tool for smashing walls." toolspeed = 0.1 //the epitome of powertools. extremely fast mining, laughs at puny walls /obj/item/shovel @@ -119,7 +132,7 @@ throwforce = 4 item_state = "shovel" w_class = WEIGHT_CLASS_NORMAL - materials = list(MAT_METAL=50) + materials = list(MAT_METAL = 50) origin_tech = "materials=2;engineering=2" attack_verb = list("bashed", "bludgeoned", "thrashed", "whacked") usesound = 'sound/effects/shovel_dig.ogg' diff --git a/code/modules/mining/equipment/survival_pod.dm b/code/modules/mining/equipment/survival_pod.dm index 615718bb834..ca0a4df5f69 100644 --- a/code/modules/mining/equipment/survival_pod.dm +++ b/code/modules/mining/equipment/survival_pod.dm @@ -323,7 +323,7 @@ /obj/item/lava_staff, /obj/item/katana/energy, /obj/item/hierophant_club, - /obj/item/storage/toolbox/green/memetic, + /obj/item/his_grace, /obj/item/gun/projectile/automatic/l6_saw, /obj/item/gun/magic/staff/chaos, /obj/item/gun/magic/staff/spellblade, diff --git a/code/modules/mining/lavaland/loot/colossus_loot.dm b/code/modules/mining/lavaland/loot/colossus_loot.dm index b8b2a96402f..fb608d1b359 100644 --- a/code/modules/mining/lavaland/loot/colossus_loot.dm +++ b/code/modules/mining/lavaland/loot/colossus_loot.dm @@ -82,23 +82,6 @@ new random_crystal(loc) qdel(src) -/obj/machinery/anomalous_crystal/honk //Strips and equips you as a clown. I apologize for nothing - activation_method = "mob_bump" - activation_sound = 'sound/items/bikehorn.ogg' - -/obj/machinery/anomalous_crystal/honk/ActivationReaction(mob/user) - if(..() && ishuman(user) && !(user in affected_targets)) - var/mob/living/carbon/human/H = user - for(var/obj/item/W in H) - H.unEquip(W) - var/datum/job/clown/C = SSjobs.GetJob("Clown") - C.equip(H) - affected_targets.Add(H) - -/obj/machinery/anomalous_crystal/honk/New() - ..() - activation_method = pick("mob_bump","speech") - /obj/machinery/anomalous_crystal/theme_warp //Warps the area you're in to look like a new one activation_method = "touch" cooldown_add = 200 diff --git a/code/modules/mining/machine_redemption.dm b/code/modules/mining/machine_redemption.dm index 47c110bb998..c7571668392 100644 --- a/code/modules/mining/machine_redemption.dm +++ b/code/modules/mining/machine_redemption.dm @@ -31,7 +31,6 @@ "Science", "Robotics", "Research Director's Desk", - "Mechanic", "Engineering" = list(MAT_METAL, MAT_GLASS, MAT_PLASMA), "Chief Engineer's Desk" = list(MAT_METAL, MAT_GLASS, MAT_PLASMA), "Atmospherics" = list(MAT_METAL, MAT_GLASS, MAT_PLASMA), diff --git a/code/modules/mining/machine_stacking.dm b/code/modules/mining/machine_stacking.dm index f143b064722..fd687019ffe 100644 --- a/code/modules/mining/machine_stacking.dm +++ b/code/modules/mining/machine_stacking.dm @@ -7,22 +7,30 @@ desc = "Controls a stacking machine... in theory." density = FALSE anchored = TRUE - var/obj/machinery/mineral/stacking_machine/machine = null + var/obj/machinery/mineral/stacking_machine/machine var/machinedir = SOUTHEAST -/obj/machinery/mineral/stacking_unit_console/New() - ..() +/obj/machinery/mineral/stacking_unit_console/Initialize(mapload) + . = ..() machine = locate(/obj/machinery/mineral/stacking_machine, get_step(src, machinedir)) if(machine) - machine.CONSOLE = src + machine.console = src else - qdel(src) + return INITIALIZE_HINT_QDEL + +/obj/machinery/mineral/stacking_unit_console/Destroy() + if(machine) + machine.console = null + machine = null + return ..() /obj/machinery/mineral/stacking_unit_console/attack_hand(mob/user) - var/obj/item/stack/sheet/s var/dat + if(!machine) + return + dat += text("Stacking unit console

    ") for(var/O in machine.stack_list) @@ -60,15 +68,20 @@ desc = "A machine that automatically stacks acquired materials. Controlled by a nearby console." density = TRUE anchored = TRUE - var/obj/machinery/mineral/stacking_unit_console/CONSOLE - var/stk_types = list() - var/stk_amt = list() - var/stack_list[0] //Key: Type. Value: Instance of type. - var/stack_amt = 50; //ammount to stack before releassing + var/obj/machinery/mineral/stacking_unit_console/console + var/list/stack_list = list() //Key: Type. Value: Instance of type. + var/stack_amt = 50 //ammount to stack before releassing input_dir = EAST output_dir = WEST speed_process = TRUE +/obj/machinery/mineral/stacking_machine/Destroy() + QDEL_LIST(stack_list) + if(console) + console.machine = null + console = null + return ..() + /obj/machinery/mineral/stacking_machine/process() var/turf/T = get_step(src, input_dir) if(T) diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index 80fe2db8bb2..278440502e2 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -339,7 +339,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp * * user - A reference to the ghost's old mob. This argument is required since `src` does not have a `client` at this point. */ /mob/dead/observer/proc/toggle_all_huds_on(mob/user) - show_me_the_hud(DATA_HUD_DIAGNOSTIC) + show_me_the_hud(DATA_HUD_DIAGNOSTIC_ADVANCED) show_me_the_hud(DATA_HUD_SECURITY_ADVANCED) show_me_the_hud(DATA_HUD_MEDICAL_ADVANCED) if(!check_rights((R_ADMIN | R_MOD), FALSE, user)) @@ -389,23 +389,21 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp if(!isobserver(usr)) to_chat(usr, "Not when you're not dead!") return + var/target = input("Area to teleport to", "Teleport to a location") as null|anything in SSmapping.ghostteleportlocs + teleport(SSmapping.ghostteleportlocs[target]) - var/datum/async_input/A = input_autocomplete_async(usr, "Area to jump to: ", SSmapping.ghostteleportlocs) - A.on_close(CALLBACK(src, .proc/teleport)) - -/mob/dead/observer/proc/teleport(area/thearea) - if(!thearea || !isobserver(usr)) +/mob/dead/observer/proc/teleport(area/A) + if(!A || !isobserver(usr)) return - var/list/L = list() - for(var/turf/T in get_area_turfs(thearea.type)) - L += T + var/list/turfs = list() + for(var/turf/T in get_area_turfs(A.type)) + turfs += T - if(!L || !L.len) - to_chat(usr, "No area available.") + if(!length(turfs)) + to_chat(src, "Nowhere to jump to!") return - - forceMove(pick(L)) + forceMove(pick(turfs)) update_parallax_contents() /mob/dead/observer/verb/follow() @@ -743,7 +741,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp return var/mob/living/carbon/human/new_char = new(get_turf(src)) - client.prefs.copy_to(new_char) + client.prefs.active_character.copy_to(new_char) if(mind) mind.active = TRUE mind.transfer_to(new_char) diff --git a/code/modules/mob/dead/observer/orbit.dm b/code/modules/mob/dead/observer/orbit.dm index 20b2a4d375a..0d67959c5e2 100644 --- a/code/modules/mob/dead/observer/orbit.dm +++ b/code/modules/mob/dead/observer/orbit.dm @@ -31,10 +31,6 @@ update_static_data(owner, ui) . = TRUE -/datum/orbit_menu/ui_data(mob/user) - var/list/data = list() - return data - /datum/orbit_menu/ui_static_data(mob/user) var/list/data = list() @@ -96,6 +92,7 @@ ) if(SSticker && SSticker.mode) other_antags += list( + "Blob" = (mind.special_role == SPECIAL_ROLE_BLOB), "Cultist" = (mind in SSticker.mode.cult), "Wizard" = (mind in SSticker.mode.wizards), "Wizard's Apprentice" = (mind in SSticker.mode.apprentices), @@ -121,6 +118,10 @@ var/list/antag_serialized = serialized.Copy() antag_serialized["antag"] = "Terror Spider" antagonists += list(antag_serialized) + else if(istype(M, /mob/living/simple_animal/revenant)) + var/list/antag_serialized = serialized.Copy() + antag_serialized["antag"] = "Revenant" + antagonists += list(antag_serialized) else misc += list(serialized) diff --git a/code/modules/mob/dead/observer/say.dm b/code/modules/mob/dead/observer/say.dm index 9e9245d274a..a7dc2c86a9f 100644 --- a/code/modules/mob/dead/observer/say.dm +++ b/code/modules/mob/dead/observer/say.dm @@ -19,7 +19,7 @@ log_ghostemote(message, src) if(src.client) - if(src.client.prefs.muted & MUTE_DEADCHAT) + if(check_mute(client.ckey, MUTE_DEADCHAT)) to_chat(src, "You cannot emote in deadchat (muted).") return diff --git a/code/modules/mob/emote.dm b/code/modules/mob/emote.dm index 12312a4fdff..ae6cd715cec 100644 --- a/code/modules/mob/emote.dm +++ b/code/modules/mob/emote.dm @@ -112,7 +112,7 @@ O.show_message(message, m_type) /mob/proc/emote_dead(message) - if(client.prefs.muted & MUTE_DEADCHAT) + if(check_mute(client.ckey, MUTE_DEADCHAT)) to_chat(src, "You cannot send deadchat emotes (muted).") return diff --git a/code/modules/mob/inventory.dm b/code/modules/mob/inventory.dm index 40a53d4ffab..b832ad724ef 100644 --- a/code/modules/mob/inventory.dm +++ b/code/modules/mob/inventory.dm @@ -207,6 +207,14 @@ items += s_store return items +/mob/living/proc/unequip_everything() + var/list/items = list() + items |= get_equipped_items(TRUE) + for(var/I in items) + unEquip(I) + drop_l_hand() + drop_r_hand() + /obj/item/proc/equip_to_best_slot(mob/M) if(src != M.get_active_hand()) to_chat(M, "You are not holding anything to equip!") diff --git a/code/modules/mob/living/autohiss.dm b/code/modules/mob/living/autohiss.dm index 78c12148ee3..0535b3f172b 100644 --- a/code/modules/mob/living/autohiss.dm +++ b/code/modules/mob/living/autohiss.dm @@ -2,17 +2,17 @@ return message // no autohiss at this level /mob/living/carbon/human/handle_autohiss(message, datum/language/L) - if(!client || client.prefs.autohiss_mode == AUTOHISS_OFF) // no need to process if there's no client or they have autohiss off + if(!client || client.prefs.active_character.autohiss_mode == AUTOHISS_OFF) // no need to process if there's no client or they have autohiss off return message - return dna.species.handle_autohiss(message, L, client.prefs.autohiss_mode) + return dna.species.handle_autohiss(message, L, client.prefs.active_character.autohiss_mode) /client/verb/toggle_autohiss() set name = "Toggle Auto-Accent" set desc = "Toggle automatic accents for your species" set category = "OOC" - prefs.autohiss_mode = (prefs.autohiss_mode + 1) % AUTOHISS_NUM - switch(prefs.autohiss_mode) + prefs.active_character.autohiss_mode = (prefs.active_character.autohiss_mode + 1) % AUTOHISS_NUM + switch(prefs.active_character.autohiss_mode) if(AUTOHISS_OFF) to_chat(src, "Auto-hiss is now OFF.") if(AUTOHISS_BASIC) @@ -20,7 +20,7 @@ if(AUTOHISS_FULL) to_chat(src, "Auto-hiss is now FULL.") else - prefs.autohiss_mode = AUTOHISS_OFF + prefs.active_character.autohiss_mode = AUTOHISS_OFF to_chat(src, "Auto-hiss is now OFF.") /datum/species @@ -61,7 +61,7 @@ /datum/species/drask autohiss_basic_map = list( "o" = list ("oo", "ooo"), - "u" = list ("uu", "uuu") + "u" = list ("uu", "uuu") ) autohiss_extra_map = list( "m" = list ("mm", "mmm") diff --git a/code/modules/mob/living/carbon/alien/humanoid/caste/hunter.dm b/code/modules/mob/living/carbon/alien/humanoid/caste/hunter.dm index f43010b951b..da0184b751a 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/caste/hunter.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/caste/hunter.dm @@ -82,7 +82,7 @@ L.visible_message("[src] pounces on [L]!", "[src] pounces on you!") if(ishuman(L)) var/mob/living/carbon/human/H = L - H.apply_effect(5, WEAKEN, H.run_armor_check(null, "melee")) + H.apply_effect(5, WEAKEN, H.run_armor_check(null, MELEE)) else L.Weaken(5) sleep(2)//Runtime prevention (infinite bump() calls on hulks) diff --git a/code/modules/mob/living/carbon/alien/larva/emote.dm b/code/modules/mob/living/carbon/alien/larva/emote.dm index 9871c735725..e2c2a224831 100644 --- a/code/modules/mob/living/carbon/alien/larva/emote.dm +++ b/code/modules/mob/living/carbon/alien/larva/emote.dm @@ -14,10 +14,10 @@ if(silent) return if(src.client) - if(client.prefs.muted & MUTE_IC) + if(check_mute(client.ckey, MUTE_IC)) to_chat(src, "You cannot send IC messages (muted).") return - if(src.client.handle_spam_prevention(message,MUTE_IC)) + if(src.client.handle_spam_prevention(message, MUTE_IC)) return if(stat) return diff --git a/code/modules/mob/living/carbon/brain/MMI.dm b/code/modules/mob/living/carbon/brain/MMI.dm index 07282106a21..6c359c9c0c4 100644 --- a/code/modules/mob/living/carbon/brain/MMI.dm +++ b/code/modules/mob/living/carbon/brain/MMI.dm @@ -96,6 +96,7 @@ // Maybe later add encryption key support, but that's a pain in the neck atm if(brainmob) + user.changeNext_move(CLICK_CD_MELEE) O.attack(brainmob, user)//Oh noooeeeee // Brainmobs can take damage, but they can't actually die. Maybe should fix. return diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 160a9d55288..46a71531dcd 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -1203,6 +1203,14 @@ so that different stomachs can handle things in different ways VB*/ sight |= (SEE_TURFS|SEE_MOBS|SEE_OBJS) see_in_dark = max(see_in_dark, 8) + if(HAS_TRAIT(src, TRAIT_MESON_VISION)) + sight |= SEE_TURFS + lighting_alpha = min(lighting_alpha, LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE) + + if(HAS_TRAIT(src, TRAIT_NIGHT_VISION)) + see_in_dark = max(see_in_dark, 8) + lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE + SEND_SIGNAL(src, COMSIG_MOB_UPDATE_SIGHT) sync_lighting_plane_alpha() diff --git a/code/modules/mob/living/carbon/human/emote.dm b/code/modules/mob/living/carbon/human/emote.dm index a8a4133310d..d98e00b1e3f 100644 --- a/code/modules/mob/living/carbon/human/emote.dm +++ b/code/modules/mob/living/carbon/human/emote.dm @@ -446,15 +446,14 @@ SpinAnimation(5,1) if("spin", "spins") - if(!restrained() && !lying) + if(!incapacitated(ignore_lying = TRUE)) if(prob(5)) - spin(30, 1) - message = "[src] spins too much!" + spin(32, 1) + to_chat(src, "You spin too much!") Dizzy(12) Confused(12) else spin(20, 1) - message = "[src] spins!" if("aflap", "aflaps") if(!restrained()) diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 9cbec689ade..0c780c46fa3 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -211,18 +211,13 @@ stat("Total Blood", "[mind.vampire.bloodtotal]") stat("Usable Blood", "[mind.vampire.bloodusable]") - if(istype(loc, /obj/spacepod)) // Spacdpods! - var/obj/spacepod/S = loc - stat("Spacepod Charge", "[istype(S.battery) ? "[(S.battery.charge / S.battery.maxcharge) * 100]" : "No cell detected"]") - stat("Spacepod Integrity", "[!S.health ? "0" : "[(S.health / initial(S.health)) * 100]"]%") - /mob/living/carbon/human/ex_act(severity) if(status_flags & GODMODE) return FALSE var/brute_loss = 0 var/burn_loss = 0 - var/bomb_armor = getarmor(null, "bomb") + var/bomb_armor = getarmor(null, BOMB) var/list/valid_limbs = list("l_arm", "l_leg", "r_arm", "r_leg") var/limbs_amount = 1 var/limb_loss_chance = 50 @@ -264,7 +259,7 @@ var/obj/item/organ/external/BP = get_organ(X) if(!BP) //limb already blown off, move to the next one without counting it continue - if(prob(limb_loss_chance) && !prob(getarmor(BP, "bomb"))) + if(prob(limb_loss_chance) && !prob(getarmor(BP, BOMB))) BP.droplimb(TRUE, DROPLIMB_SHARP, FALSE, TRUE) limbs_amount-- if(!limbs_amount) @@ -280,7 +275,7 @@ show_message("The blob attacks you!") var/dam_zone = pick("head", "chest", "groin", "l_arm", "l_hand", "r_arm", "r_hand", "l_leg", "l_foot", "r_leg", "r_foot") var/obj/item/organ/external/affecting = get_organ(ran_zone(dam_zone)) - apply_damage(5, BRUTE, affecting, run_armor_check(affecting, "melee")) + apply_damage(5, BRUTE, affecting, run_armor_check(affecting, MELEE)) /mob/living/carbon/human/get_restraining_item() . = ..() @@ -1679,9 +1674,14 @@ Eyes need to have significantly high darksight to shine unless the mob has the X return return md5(dna.uni_identity) -/mob/living/carbon/human/can_see_reagents() - for(var/obj/item/clothing/C in src) //If they have some clothing equipped that lets them see reagents, they can see reagents - if(C.scan_reagents) +/mob/living/carbon/human/can_see_reagents() //If they have some glasses or helmet equipped that lets them see reagents, they can see reagents + if(istype(head, /obj/item/clothing/head)) + var/obj/item/clothing/head/hat = head + if(hat.scan_reagents) + return 1 + if(istype(glasses, /obj/item/clothing/glasses)) + var/obj/item/clothing/rscan = glasses + if(rscan.scan_reagents) return 1 /mob/living/carbon/human/can_eat(flags = 255) @@ -1950,7 +1950,7 @@ Eyes need to have significantly high darksight to shine unless the mob has the X if(GLOB.configuration.general.allow_character_metadata) if(client) - to_chat(usr, "[src]'s Metainfo:
    [sanitize(client.prefs.metadata)]") + to_chat(usr, "[src]'s Metainfo:
    [sanitize(client.prefs.active_character.metadata)]") else to_chat(usr, "[src] does not have any stored infomation!") else diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index 139a3868f1d..2737ca54228 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -39,7 +39,7 @@ emp_act if(mind?.martial_art?.deflection_chance) //Some martial arts users can deflect projectiles! if(!lying && !HAS_TRAIT(src, TRAIT_HULK) && mind.martial_art.try_deflect(src)) //But only if they're not lying down, and hulks can't do it add_attack_logs(P.firer, src, "hit by [P.type] but got deflected by martial arts '[mind.martial_art]'") - visible_message("[src] deflects the projectile; [p_they()] can't be hit with ranged weapons!", "You deflect the projectile!") + visible_message("[src] deflects the projectile!", "You deflect the projectile!") playsound(src, pick('sound/weapons/bulletflyby.ogg', 'sound/weapons/bulletflyby2.ogg', 'sound/weapons/bulletflyby3.ogg'), 75, TRUE) if(mind.martial_art.reroute_deflection) P.firer = src @@ -445,9 +445,9 @@ emp_act if(!I.force) return 0 //item force is zero - var/armor = run_armor_check(affecting, "melee", "Your armour has protected your [hit_area].", "Your armour has softened hit to your [hit_area].", armour_penetration = I.armour_penetration) + var/armor = run_armor_check(affecting, MELEE, "Your armour has protected your [hit_area].", "Your armour has softened hit to your [hit_area].", armour_penetration = I.armour_penetration) var/weapon_sharp = is_sharp(I) - if(weapon_sharp && prob(getarmor(user.zone_selected, "melee"))) + if(weapon_sharp && prob(getarmor(user.zone_selected, MELEE))) weapon_sharp = 0 if(armor >= 100) return 0 @@ -591,7 +591,7 @@ emp_act if(stat != DEAD) L.amount_grown = min(L.amount_grown + damage, L.max_grown) var/obj/item/organ/external/affecting = get_organ(ran_zone(L.zone_selected)) - var/armor_block = run_armor_check(affecting, "melee") + var/armor_block = run_armor_check(affecting, MELEE) apply_damage(damage, BRUTE, affecting, armor_block) updatehealth("larva attack") @@ -610,7 +610,7 @@ emp_act visible_message("[M] has lunged at [src]!") return 0 var/obj/item/organ/external/affecting = get_organ(ran_zone(M.zone_selected)) - var/armor_block = run_armor_check(affecting, "melee", armour_penetration = 10) + var/armor_block = run_armor_check(affecting, MELEE, armour_penetration = 10) playsound(loc, 'sound/weapons/slice.ogg', 25, TRUE, -1) visible_message("[M] has slashed at [src]!", \ @@ -629,7 +629,7 @@ emp_act else var/obj/item/organ/external/affecting = get_organ(ran_zone(M.zone_selected)) playsound(loc, 'sound/weapons/pierce.ogg', 25, 1, -1) - apply_effect(5, WEAKEN, run_armor_check(affecting, "melee")) + apply_effect(5, WEAKEN, run_armor_check(affecting, MELEE)) add_attack_logs(M, src, "Alien tackled") visible_message("[M] has tackled down [src]!") @@ -644,7 +644,7 @@ emp_act if(!affecting) affecting = get_organ("chest") affecting.add_autopsy_data(M.name, damage) // Add the mob's name to the autopsy data - var/armor = run_armor_check(affecting, "melee", armour_penetration = M.armour_penetration) + var/armor = run_armor_check(affecting, MELEE, armour_penetration = M.armour_penetration) apply_damage(damage, M.melee_damage_type, affecting, armor) updatehealth("animal attack") @@ -662,7 +662,7 @@ emp_act var/obj/item/organ/external/affecting = get_organ(ran_zone(dam_zone)) if(!affecting) affecting = get_organ("chest") - var/armor_block = run_armor_check(affecting, "melee") + var/armor_block = run_armor_check(affecting, MELEE) apply_damage(damage, BRUTE, affecting, armor_block) /mob/living/carbon/human/mech_melee_attack(obj/mecha/M) diff --git a/code/modules/mob/living/carbon/human/say.dm b/code/modules/mob/living/carbon/human/say.dm index 4f857163500..76211cf3198 100644 --- a/code/modules/mob/living/carbon/human/say.dm +++ b/code/modules/mob/living/carbon/human/say.dm @@ -149,7 +149,6 @@ var/obj/item/clothing/mask/horsehead/hoers = wear_mask if(hoers.voicechange) S.message = pick("NEEIIGGGHHHH!", "NEEEIIIIGHH!", "NEIIIGGHH!", "HAAWWWWW!", "HAAAWWW!") - verb = pick("whinnies", "neighs", "says") if(dna) for(var/mutation_type in active_mutations) @@ -167,6 +166,12 @@ if(span) S.message = "[S.message]" + + if(wear_mask) + var/speech_verb_when_masked = wear_mask.change_speech_verb() + if(speech_verb_when_masked) + verb = speech_verb_when_masked + return list("verb" = verb) /mob/living/carbon/human/handle_message_mode(message_mode, list/message_pieces, verb, used_radios) diff --git a/code/modules/mob/living/carbon/human/species/_species.dm b/code/modules/mob/living/carbon/human/species/_species.dm index 7d1ae80a955..60e645faa5d 100644 --- a/code/modules/mob/living/carbon/human/species/_species.dm +++ b/code/modules/mob/living/carbon/human/species/_species.dm @@ -480,7 +480,7 @@ var/obj/item/organ/external/affecting = target.get_organ(ran_zone(user.zone_selected)) - var/armor_block = target.run_armor_check(affecting, "melee") + var/armor_block = target.run_armor_check(affecting, MELEE) playsound(target.loc, attack.attack_sound, 25, 1, -1) @@ -509,7 +509,7 @@ var/obj/item/organ/external/affecting = target.get_organ(ran_zone(user.zone_selected)) var/randn = rand(1, 100) if(randn <= 25) - target.apply_effect(2, WEAKEN, target.run_armor_check(affecting, "melee")) + target.apply_effect(2, WEAKEN, target.run_armor_check(affecting, MELEE)) playsound(target.loc, 'sound/weapons/thudswoosh.ogg', 50, 1, -1) target.visible_message("[user] has pushed [target]!") add_attack_logs(user, target, "Pushed over", ATKLOG_ALL) @@ -894,13 +894,21 @@ It'll return null if the organ doesn't correspond, so include null checks when u if(!isnull(H.vision_type.lighting_alpha)) H.lighting_alpha = min(H.vision_type.lighting_alpha, H.lighting_alpha) - if(HAS_TRAIT(src, TRAIT_THERMAL_VISION)) + if(HAS_TRAIT(H, TRAIT_MESON_VISION)) + H.sight |= SEE_TURFS + H.lighting_alpha = min(H.lighting_alpha, LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE) + + if(HAS_TRAIT(H, TRAIT_THERMAL_VISION)) H.sight |= (SEE_MOBS) H.lighting_alpha = min(H.lighting_alpha, LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE) if(HAS_TRAIT(H, TRAIT_XRAY_VISION)) H.sight |= (SEE_TURFS|SEE_MOBS|SEE_OBJS) + if(HAS_TRAIT(H, TRAIT_NIGHT_VISION)) + H.see_in_dark = max(H.see_in_dark, 8) + H.lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE + if(H.has_status_effect(STATUS_EFFECT_SUMMONEDGHOST)) H.see_invisible = SEE_INVISIBLE_OBSERVER diff --git a/code/modules/mob/living/carbon/human/species/golem.dm b/code/modules/mob/living/carbon/human/species/golem.dm index a6e3bf4ef18..d3bf2007322 100644 --- a/code/modules/mob/living/carbon/human/species/golem.dm +++ b/code/modules/mob/living/carbon/human/species/golem.dm @@ -390,7 +390,7 @@ /datum/species/golem/sand/bullet_act(obj/item/projectile/P, mob/living/carbon/human/H) if(!(P.original == H && P.firer == H)) - if(P.flag == "bullet" || P.flag == "bomb") + if(P.flag == BULLET || P.flag == BOMB) playsound(H, 'sound/effects/shovel_dig.ogg', 70, 1) H.visible_message("[P] sinks harmlessly in [H]'s sandy body!", \ "[P] sinks harmlessly in [H]'s sandy body!") @@ -674,3 +674,107 @@ /datum/unarmed_attack/golem/tranquillite attack_sound = null + +/datum/species/golem/cloth + name = "Cloth Golem" + icobase = 'icons/mob/human_races/r_cloth_golem.dmi' + flesh_color = "#E9E9E9" + blood_color = "#E9E9E9" + info_text = "As a Cloth Golem, you are able to reform yourself after death, provided your remains aren't burned or destroyed. You are, of course, very flammable. \ + Being made of cloth, your body is magic resistant and faster than that of other golems, but weaker and less resilient." + inherent_traits = list(TRAIT_RESISTCOLD, TRAIT_NOBREATH, TRAIT_RESISTHIGHPRESSURE, TRAIT_RESISTLOWPRESSURE, TRAIT_RADIMMUNE, TRAIT_PIERCEIMMUNE, TRAIT_CHUNKYFINGERS, TRAIT_NOPAIN) + inherent_biotypes = MOB_UNDEAD | MOB_HUMANOID + brute_mod = 0.85 //15% damage reduction + burn_mod = 1.7 // don't get burned + tox_mod = 0.85 + clone_mod = 0.85 + brain_mod = 0.85 + stamina_mod = 0.85 + speed_mod = 1 // not as heavy as stone + punchdamagelow = 4 + punchstunthreshold = 7 + punchdamagehigh = 8 // not as heavy as stone + prefix = "Cloth" + golem_colour = null + special_names = null + +/datum/species/golem/cloth/get_random_name() + var/pharaoh_name = pick("Neferkare", "Hudjefa", "Khufu", "Mentuhotep", "Ahmose", "Amenhotep", "Thutmose", "Hatshepsut", "Tutankhamun", "Ramses", "Seti", \ + "Merenptah", "Djer", "Semerkhet", "Nynetjer", "Khafre", "Pepi", "Intef", "Ay") //yes, Ay was an actual pharaoh + var/golem_name = "[pharaoh_name] \Roman[rand(1,99)]" + return golem_name + +/datum/species/golem/cloth/handle_life(mob/living/carbon/human/H) + if(H.fire_stacks < 1) + H.adjust_fire_stacks(1) //always prone to burning + ..() + +/datum/species/golem/cloth/handle_death(gibbed, mob/living/carbon/human/H) + if(gibbed) + return + if(H.on_fire) + H.visible_message("[H] burns into ash!") + H.dust() + return + + H.visible_message("[H] falls apart into a pile of bandages!") + new /obj/structure/cloth_pile(get_turf(H), H) + ..() + +/obj/structure/cloth_pile + name = "pile of bandages" + desc = "It emits a strange aura, as if there was still life within it..." + max_integrity = 50 + armor = list(MELEE = 90, BULLET = 90, LASER = 25, ENERGY = 80, BOMB = 50, BIO = 100, FIRE = -50, ACID = -50) + icon = 'icons/obj/items.dmi' + icon_state = "pile_bandages" + resistance_flags = FLAMMABLE + var/revive_time = 900 + var/mob/living/carbon/human/cloth_golem + +/obj/structure/cloth_pile/Initialize(mapload, mob/living/carbon/human/H) + . = ..() + if(!QDELETED(H) && is_species(H, /datum/species/golem/cloth)) + H.unequip_everything() + H.forceMove(src) + cloth_golem = H + to_chat(cloth_golem, "You start gathering your life energy, preparing to rise again...") + addtimer(CALLBACK(src, .proc/revive), revive_time) + else + return INITIALIZE_HINT_QDEL + +/obj/structure/cloth_pile/Destroy() + QDEL_NULL(cloth_golem) + return ..() + +/obj/structure/cloth_pile/burn() + visible_message("[src] burns into ash!") + new /obj/effect/decal/cleanable/ash(get_turf(src)) + ..() + +/obj/structure/cloth_pile/proc/revive() + if(QDELETED(src) || QDELETED(cloth_golem)) //QDELETED also checks for null, so if no cloth golem is set this won't runtime + return + if(cloth_golem.suiciding) + QDEL_NULL(cloth_golem) + return + + invisibility = INVISIBILITY_MAXIMUM //disappear before the animation + new /obj/effect/temp_visual/mummy_animation(get_turf(src)) + cloth_golem.revive() + cloth_golem.grab_ghost() //won't pull if it's a suicide + sleep(20) + cloth_golem.forceMove(get_turf(src)) + cloth_golem.visible_message("[src] rises and reforms into [cloth_golem]!", "You reform into yourself!") + cloth_golem = null + qdel(src) + +/obj/structure/cloth_pile/attackby(obj/item/P, mob/living/carbon/human/user, params) + . = ..() + + if(resistance_flags & ON_FIRE) + return + + if(is_hot(P)) + visible_message("[src] bursts into flames!") + fire_act() diff --git a/code/modules/mob/living/carbon/human/species/grey.dm b/code/modules/mob/living/carbon/human/species/grey.dm index 915d0072434..75f4787e7b1 100644 --- a/code/modules/mob/living/carbon/human/species/grey.dm +++ b/code/modules/mob/living/carbon/human/species/grey.dm @@ -67,7 +67,7 @@ to_chat(H, "The water stings[volume < 10 ? " you, but isn't concentrated enough to harm you" : null]!") /datum/species/grey/after_equip_job(datum/job/J, mob/living/carbon/human/H) - var/translator_pref = H.client.prefs.speciesprefs + var/translator_pref = H.client.prefs.active_character.speciesprefs if(translator_pref || ((ismindshielded(H) || J.is_command || J.supervisors == "the captain") && HAS_TRAIT(H, TRAIT_WINGDINGS))) if(J.title == "Mime") return @@ -91,4 +91,6 @@ /datum/species/grey/get_species_runechat_color(mob/living/carbon/human/H) var/obj/item/organ/internal/eyes/E = H.get_int_organ(/obj/item/organ/internal/eyes) - return E.eye_color + if(E) + return E.eye_color + return flesh_color diff --git a/code/modules/mob/living/carbon/human/species/machine.dm b/code/modules/mob/living/carbon/human/species/machine.dm index 963b878a758..43c0931f96b 100644 --- a/code/modules/mob/living/carbon/human/species/machine.dm +++ b/code/modules/mob/living/carbon/human/species/machine.dm @@ -21,7 +21,7 @@ death_message = "gives a short series of shrill beeps, their chassis shuddering before falling limp, nonfunctional." death_sounds = list('sound/voice/borg_deathsound.ogg') //I've made this a list in the event we add more sounds for dead robots. - species_traits = list(IS_WHITELISTED, NO_BLOOD, NO_CLONESCAN, NO_INTORGANS, NOTRANSSTING) + species_traits = list(IS_WHITELISTED, NO_BLOOD, NO_CLONESCAN, NO_INTORGANS) inherent_traits = list(TRAIT_VIRUSIMMUNE, TRAIT_NOBREATH, TRAIT_RADIMMUNE, TRAIT_NOGERMS, TRAIT_NODECAY, TRAIT_NOPAIN, TRAIT_GENELESS) //Computers that don't decay? What a lie! inherent_biotypes = MOB_ROBOTIC | MOB_HUMANOID clothing_flags = HAS_UNDERWEAR | HAS_UNDERSHIRT | HAS_SOCKS diff --git a/code/modules/mob/living/carbon/human/species/plasmaman.dm b/code/modules/mob/living/carbon/human/species/plasmaman.dm index 926ed17348e..fceda9035f6 100644 --- a/code/modules/mob/living/carbon/human/species/plasmaman.dm +++ b/code/modules/mob/living/carbon/human/species/plasmaman.dm @@ -5,7 +5,7 @@ dangerous_existence = TRUE //So so much //language = "Clatter" - species_traits = list(IS_WHITELISTED, NO_BLOOD, NOTRANSSTING, NO_HAIR) + species_traits = list(IS_WHITELISTED, NO_BLOOD, NO_HAIR) inherent_traits = list(TRAIT_RADIMMUNE, TRAIT_NOHUNGER) inherent_biotypes = MOB_HUMANOID | MOB_MINERAL forced_heartattack = TRUE // Plasmamen have no blood, but they should still get heart-attacks @@ -69,7 +69,7 @@ if("Chef") O = new /datum/outfit/plasmaman/chef - if("Security Officer", "Security Pod Pilot", "Special Operations Officer") + if("Security Officer", "Special Operations Officer") O = new /datum/outfit/plasmaman/security if("Detective") @@ -111,7 +111,7 @@ if("Research Director") O = new /datum/outfit/plasmaman/rd - if("Station Engineer", "Mechanic") + if("Station Engineer") O = new /datum/outfit/plasmaman/engineering if("Chief Engineer") diff --git a/code/modules/mob/living/carbon/human/species/slime.dm b/code/modules/mob/living/carbon/human/species/slime.dm index c849615e4a0..59dc44026ee 100644 --- a/code/modules/mob/living/carbon/human/species/slime.dm +++ b/code/modules/mob/living/carbon/human/species/slime.dm @@ -88,9 +88,8 @@ /datum/species/slime/proc/blend(mob/living/carbon/human/H) var/new_color = BlendRGB(H.skin_colour, "#acacac", 0.5) // Blends this to make it work better - if(H.blood_color != new_color) // Put here, so if it's a roundstart, dyed, or CMA'd slime, their blood changes to match skin - H.blood_color = new_color - H.dna.species.blood_color = H.blood_color + if(H.dna.species.blood_color != new_color) // Put here, so if it's a roundstart, dyed, or CMA'd slime, their blood changes to match skin + H.dna.species.blood_color = new_color /datum/species/slime/handle_life(mob/living/carbon/human/H) // Slowly shifting to the color of the reagents diff --git a/code/modules/mob/living/carbon/human/species/vox.dm b/code/modules/mob/living/carbon/human/species/vox.dm index e7736da2291..a52ae7bb06d 100644 --- a/code/modules/mob/living/carbon/human/species/vox.dm +++ b/code/modules/mob/living/carbon/human/species/vox.dm @@ -22,7 +22,7 @@ eyes = "vox_eyes_s" - species_traits = list(NO_CLONESCAN, IS_WHITELISTED, NOTRANSSTING) + species_traits = list(NO_CLONESCAN, IS_WHITELISTED) inherent_traits = list(TRAIT_NOGERMS, TRAIT_NODECAY) clothing_flags = HAS_UNDERWEAR | HAS_UNDERSHIRT | HAS_SOCKS //Species-fitted 'em all. dietflags = DIET_OMNI @@ -81,7 +81,7 @@ H.unEquip(H.wear_mask) H.equip_or_collect(new /obj/item/clothing/mask/breath/vox(H), slot_wear_mask) - var/tank_pref = H.client && H.client.prefs ? H.client.prefs.speciesprefs : null + var/tank_pref = H.client && H.client.prefs ? H.client.prefs.active_character.speciesprefs : null var/obj/item/tank/internal_tank if(tank_pref)//Diseasel, here you go internal_tank = new /obj/item/tank/internals/nitrogen(H) diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index bd0aad32dac..53a13b37dec 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -760,7 +760,7 @@ //called when the mob receives a bright flash /mob/living/proc/flash_eyes(intensity = 1, override_blindness_check = 0, affect_silicon = 0, visual = 0, type = /obj/screen/fullscreen/flash) - if(check_eye_prot() < intensity && (override_blindness_check || !HAS_TRAIT(src, TRAIT_BLIND))) + if(check_eye_prot() < intensity && (override_blindness_check || !HAS_TRAIT(src, TRAIT_BLIND)) && !HAS_TRAIT(src, TRAIT_FLASH_PROTECTION)) overlay_fullscreen("flash", type) addtimer(CALLBACK(src, .proc/clear_fullscreen, "flash", 25), 25) return 1 @@ -847,10 +847,6 @@ var/obj/mecha/M = loc loc_temp = M.return_temperature() - else if(istype(loc, /obj/spacepod)) - var/obj/spacepod/S = loc - loc_temp = S.return_temperature() - else if(istype(loc, /obj/structure/transit_tube_pod)) loc_temp = environment.temperature @@ -992,7 +988,7 @@ amount -= RAD_BACKGROUND_RADIATION // This will always be at least 1 because of how skin protection is calculated - var/blocked = getarmor(null, "rad") + var/blocked = getarmor(null, RAD) if(amount > RAD_BURN_THRESHOLD) apply_damage(RAD_BURN_CURVE(amount), BURN, null, blocked) diff --git a/code/modules/mob/living/living_defense.dm b/code/modules/mob/living/living_defense.dm index 26b940308ea..941df161049 100644 --- a/code/modules/mob/living/living_defense.dm +++ b/code/modules/mob/living/living_defense.dm @@ -10,7 +10,7 @@ 1 - halfblock 2 - fullblock */ -/mob/living/proc/run_armor_check(def_zone = null, attack_flag = "melee", absorb_text = null, soften_text = null, armour_penetration, penetrated_text) +/mob/living/proc/run_armor_check(def_zone = null, attack_flag = MELEE, absorb_text = null, soften_text = null, armour_penetration, penetrated_text) var/armor = getarmor(def_zone, attack_flag) //the if "armor" check is because this is used for everything on /living, including humans @@ -118,7 +118,7 @@ visible_message("[src] is hit by [thrown_item]!", "You're hit by [thrown_item]!") if(!thrown_item.throwforce) return - var/armor = run_armor_check(zone, "melee", "Your armor has protected your [parse_zone(zone)].", "Your armor has softened hit to your [parse_zone(zone)].", thrown_item.armour_penetration) + var/armor = run_armor_check(zone, MELEE, "Your armor has protected your [parse_zone(zone)].", "Your armor has softened hit to your [parse_zone(zone)].", thrown_item.armour_penetration) apply_damage(thrown_item.throwforce, thrown_item.damtype, zone, armor, is_sharp(thrown_item), thrown_item) if(QDELETED(src)) //Damage can delete the mob. return diff --git a/code/modules/mob/living/say.dm b/code/modules/mob/living/say.dm index 43d1c402fd0..0ac3b497530 100644 --- a/code/modules/mob/living/say.dm +++ b/code/modules/mob/living/say.dm @@ -110,7 +110,7 @@ GLOBAL_LIST_EMPTY(channel_to_radio_key) /mob/living/say(message, verb = "says", sanitize = TRUE, ignore_speech_problems = FALSE, ignore_atmospherics = FALSE, ignore_languages = FALSE) if(client) - if(client.prefs.muted & MUTE_IC) + if(check_mute(client.ckey, MUTE_IC)) to_chat(src, "You cannot speak in IC (Muted).") return @@ -297,7 +297,7 @@ GLOBAL_LIST_EMPTY(channel_to_radio_key) /mob/living/emote(act, type, message, force) //emote code is terrible, this is so that anything that isn't already snowflaked to shit can call the parent and handle emoting sanely if(client) - if(client.prefs.muted & MUTE_IC) + if(check_mute(client.ckey, MUTE_IC)) to_chat(src, "You cannot speak in IC (Muted).") return @@ -352,7 +352,7 @@ GLOBAL_LIST_EMPTY(channel_to_radio_key) /mob/living/proc/whisper_say(list/message_pieces, verb = "whispers") if(client) - if(client.prefs.muted & MUTE_IC) + if(check_mute(client.ckey, MUTE_IC)) to_chat(src, "You cannot speak in IC (Muted).") return diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index 6c646d2509e..943f894b151 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -44,6 +44,7 @@ GLOBAL_LIST_INIT(ai_verbs_default, list( move_resist = MOVE_FORCE_NORMAL density = 1 status_flags = CANSTUN|CANPARALYSE|CANPUSH + d_hud = DATA_HUD_DIAGNOSTIC_ADVANCED mob_size = MOB_SIZE_LARGE sight = SEE_TURFS | SEE_MOBS | SEE_OBJS see_in_dark = 8 @@ -78,6 +79,9 @@ GLOBAL_LIST_INIT(ai_verbs_default, list( var/obj/machinery/power/apc/malfhack = null var/explosive = 0 //does the AI explode when it dies? + /// List of modules the AI has purchased malf upgrades for. + var/list/purchased_modules = list() + var/mob/living/silicon/ai/parent = null var/camera_light_on = 0 var/list/obj/machinery/camera/lit_cameras = list() @@ -212,6 +216,20 @@ GLOBAL_LIST_INIT(ai_verbs_default, list( GLOB.shuttle_caller_list += src ..() +/mob/living/silicon/ai/Destroy() + GLOB.ai_list -= src + GLOB.shuttle_caller_list -= src + SSshuttle.autoEvac() + if(malfhacking) + deltimer(malfhacking) + malfhacking = null + QDEL_NULL(eyeobj) // No AI, no Eye + QDEL_NULL(aiPDA) + QDEL_NULL(aiMulti) + QDEL_NULL(aiRadio) + QDEL_NULL(builtInCamera) + return ..() + /mob/living/silicon/ai/proc/on_mob_init() to_chat(src, "You are playing the station's AI. The AI cannot move, but can interact with many objects while viewing them (through cameras).") to_chat(src, "To look at other parts of the station, click on yourself to get a camera menu.") @@ -314,17 +332,6 @@ GLOBAL_LIST_INIT(ai_verbs_default, list( return TRUE -/mob/living/silicon/ai/Destroy() - GLOB.ai_list -= src - GLOB.shuttle_caller_list -= src - SSshuttle.autoEvac() - QDEL_NULL(eyeobj) // No AI, no Eye - if(malfhacking) - deltimer(malfhacking) - malfhacking = null - malfhack = null - return ..() - /* The AI Power supply is a dummy object used for powering the AI since only machinery should be using power. diff --git a/code/modules/mob/living/silicon/ai/death.dm b/code/modules/mob/living/silicon/ai/death.dm index 717f9700316..30bd84c48fc 100644 --- a/code/modules/mob/living/silicon/ai/death.dm +++ b/code/modules/mob/living/silicon/ai/death.dm @@ -27,7 +27,7 @@ if(SSshuttle.emergency.mode == SHUTTLE_STRANDED) SSshuttle.emergency.mode = SHUTTLE_DOCKED SSshuttle.emergency.timer = world.time - GLOB.priority_announcement.Announce("Hostile environment resolved. You have 3 minutes to board the Emergency Shuttle.", "Priority Announcement", 'sound/AI/shuttledock.ogg') + GLOB.priority_announcement.Announce("Hostile environment resolved. You have 3 minutes to board the Emergency Shuttle.", "Priority Announcement", 'sound/AI/eshuttle_dock.ogg') qdel(doomsday_device) if(explosive) diff --git a/code/modules/mob/living/silicon/pai/pai.dm b/code/modules/mob/living/silicon/pai/pai.dm index 677f67ebf13..768bbbc65f9 100644 --- a/code/modules/mob/living/silicon/pai/pai.dm +++ b/code/modules/mob/living/silicon/pai/pai.dm @@ -26,7 +26,8 @@ "Parrot" = "parrot", "Box Bot" = "boxbot", "Spider Bot" = "spiderbot", - "Fairy" = "fairy" + "Fairy" = "fairy", + "Snake" = "snake" ) var/global/list/possible_say_verbs = list( @@ -35,7 +36,8 @@ "Beep" = list("beeps","beeps loudly","boops"), "Chirp" = list("chirps","chirrups","cheeps"), "Feline" = list("purrs","yowls","meows"), - "Canine" = list("yaps","barks","growls") + "Canine" = list("yaps","barks","growls"), + "Hiss" = list("hisses","hisses","hisses") ) diff --git a/code/modules/mob/living/silicon/pai/personality.dm b/code/modules/mob/living/silicon/pai/personality.dm index 16e9f431b6d..144ede5d5b5 100644 --- a/code/modules/mob/living/silicon/pai/personality.dm +++ b/code/modules/mob/living/silicon/pai/personality.dm @@ -1,60 +1,65 @@ -/* - name - key - description - role - comments - ready = 0 -*/ +/datum/pai_save + /// Client that owns the pAI + var/client/owner + /// pAI's name + var/pai_name + /// pAI's description + var/description + /// pAI's role + var/role + /// pAI's OOC comments + var/ooc_comments -/datum/paiCandidate/proc/savefile_path(mob/user) - return "data/player_saves/[copytext(user.ckey, 1, 2)]/[user.ckey]/pai.sav" +/datum/pai_save/New(client/C) + ..() + owner = C -/datum/paiCandidate/proc/savefile_save(mob/user) - if(IsGuestKey(user.key)) - return 0 +/datum/pai_save/Destroy(force, ...) + owner = null + GLOB.paiController.pai_candidates -= src + return ..() - var/savefile/F = new /savefile(src.savefile_path(user)) +// This proc seems useless but its used by client data loading +/datum/pai_save/proc/get_query() + var/datum/db_query/query = SSdbcore.NewQuery("SELECT pai_name, description, preferred_role, ooc_comments FROM pai_saves WHERE ckey=:ckey", list( + "ckey" = owner.ckey + )) + return query +// Loads our data up +/datum/pai_save/proc/load_data(datum/db_query/Q) + while(Q.NextRow()) + pai_name = Q.item[1] + description = Q.item[2] + role = Q.item[3] + ooc_comments = Q.item[4] - F["name"] << src.name - F["description"] << src.description - F["role"] << src.role - F["comments"] << src.comments +// Reload save from DB if the user edits it +/datum/pai_save/proc/reload_save() + var/datum/db_query/Q = get_query() + if(!Q.warn_execute()) + qdel(Q) + return + load_data(Q) + qdel(Q) - F["version"] << 1 +// Save their save to the DB +/datum/pai_save/proc/save_to_db() + var/datum/db_query/query = SSdbcore.NewQuery({" + INSERT INTO pai_saves (ckey, pai_name, description, preferred_role, ooc_comments) + VALUES (:ckey, :pai_name, :description, :preferred_role, :ooc_comments) + ON DUPLICATE KEY UPDATE pai_name=:pai_name2, description=:description2, preferred_role=:preferred_role2, ooc_comments=:ooc_comments2 + "}, list( + "ckey" = owner.ckey, + "pai_name" = pai_name, + "description" = description, + "preferred_role" = role, + "ooc_comments" = ooc_comments, + "pai_name2" = pai_name, + "description2" = description, + "preferred_role2" = role, + "ooc_comments2" = ooc_comments + )) - return 1 - -// loads the savefile corresponding to the mob's ckey -// if silent=true, report incompatible savefiles -// returns 1 if loaded (or file was incompatible) -// returns 0 if savefile did not exist - -/datum/paiCandidate/proc/savefile_load(mob/user, silent = 1) - if(IsGuestKey(user.key)) - return 0 - - var/path = savefile_path(user) - - if(!fexists(path)) - return 0 - - var/savefile/F = new /savefile(path) - - if(!F) return //Not everyone has a pai savefile. - - var/version = null - F["version"] >> version - - if(isnull(version) || version != 1) - fdel(path) - if(!silent) - alert(user, "Your savefile was incompatible with this version and was deleted.") - return 0 - - F["name"] >> src.name - F["description"] >> src.description - F["role"] >> src.role - F["comments"] >> src.comments - return 1 + query.warn_execute() + qdel(query) diff --git a/code/modules/mob/living/silicon/pai/recruit.dm b/code/modules/mob/living/silicon/pai/recruit.dm index 02de57df689..6606472f65d 100644 --- a/code/modules/mob/living/silicon/pai/recruit.dm +++ b/code/modules/mob/living/silicon/pai/recruit.dm @@ -2,14 +2,6 @@ GLOBAL_DATUM_INIT(paiController, /datum/paiController, new) // Global handler for pAI candidates -/datum/paiCandidate - var/name - var/key - var/description - var/role - var/comments - var/ready = 0 - /datum/paiController var/list/pai_candidates = list() var/list/asked = list() @@ -18,7 +10,7 @@ GLOBAL_DATUM_INIT(paiController, /datum/paiController, new) // Global handler fo /datum/paiController/Topic(href, href_list[]) - var/datum/paiCandidate/candidate = locateUID(href_list["candidate"]) + var/datum/pai_save/candidate = locateUID(href_list["candidate"]) if(candidate) if(!istype(candidate)) @@ -32,14 +24,14 @@ GLOBAL_DATUM_INIT(paiController, /datum/paiController, new) // Global handler fo return if(usr.incapacitated() || isobserver(usr) || !card.Adjacent(usr)) return - if(istype(card, /obj/item/paicard) && istype(candidate, /datum/paiCandidate)) + if(istype(card, /obj/item/paicard) && istype(candidate, /datum/pai_save)) var/mob/living/silicon/pai/pai = new(card) - if(!candidate.name) + if(!candidate.pai_name) pai.name = pick(GLOB.ninja_names) else - pai.name = candidate.name + pai.name = candidate.pai_name pai.real_name = pai.name - pai.key = candidate.key + pai.key = candidate.owner.ckey card.setPersonality(pai) card.looking_for_personality = 0 @@ -64,7 +56,7 @@ GLOBAL_DATUM_INIT(paiController, /datum/paiController, new) // Global handler fo return if(candidate) - if(candidate.key && usr.key && candidate.key != usr.key) + if(candidate.owner.ckey && usr.ckey && candidate.owner.ckey != usr.ckey) message_admins("Warning: possible href exploit by [key_name_admin(usr)] (paiController/Topic, candidate and usr have different keys)") log_debug("Warning: possible href exploit by [key_name(usr)] (paiController/Topic, candidate and usr have different keys)") return @@ -75,9 +67,9 @@ GLOBAL_DATUM_INIT(paiController, /datum/paiController, new) // Global handler fo switch(option) if("name") - t = input("Enter a name for your pAI", "pAI Name", candidate.name) as text + t = input("Enter a name for your pAI", "pAI Name", candidate.pai_name) as text if(t) - candidate.name = sanitize(copytext(t,1,MAX_NAME_LEN)) + candidate.pai_name = sanitize(copytext(t,1,MAX_NAME_LEN)) if("desc") t = input("Enter a description for your pAI", "pAI Description", candidate.description) as message if(t) @@ -87,26 +79,26 @@ GLOBAL_DATUM_INIT(paiController, /datum/paiController, new) // Global handler fo if(t) candidate.role = sanitize(copytext(t,1,MAX_MESSAGE_LEN)) if("ooc") - t = input("Enter any OOC comments", "pAI OOC Comments", candidate.comments) as message + t = input("Enter any OOC comments", "pAI OOC Comments", candidate.ooc_comments) as message if(t) - candidate.comments = sanitize(copytext(t,1,MAX_MESSAGE_LEN)) + candidate.ooc_comments = sanitize(copytext(t,1,MAX_MESSAGE_LEN)) if("save") - candidate.savefile_save(usr) - if("load") - candidate.savefile_load(usr) + candidate.save_to_db(usr) + if("reload") + candidate.reload_save(usr) //In case people have saved unsanitized stuff. - if(candidate.name) - candidate.name = sanitize(copytext(candidate.name,1,MAX_NAME_LEN)) + if(candidate.pai_name) + candidate.pai_name = sanitize(copytext(candidate.pai_name, 1, MAX_NAME_LEN)) if(candidate.description) - candidate.description = sanitize(copytext(candidate.description,1,MAX_MESSAGE_LEN)) + candidate.description = sanitize(copytext(candidate.description, 1, MAX_MESSAGE_LEN)) if(candidate.role) - candidate.role = sanitize(copytext(candidate.role,1,MAX_MESSAGE_LEN)) - if(candidate.comments) - candidate.comments = sanitize(copytext(candidate.comments,1,MAX_MESSAGE_LEN)) + candidate.role = sanitize(copytext(candidate.role, 1, MAX_MESSAGE_LEN)) + if(candidate.ooc_comments) + candidate.ooc_comments = sanitize(copytext(candidate.ooc_comments, 1, MAX_MESSAGE_LEN)) if("submit") if(candidate) - candidate.ready = 1 + GLOB.paiController.pai_candidates |= candidate for(var/obj/item/paicard/p in world) if(p.looking_for_personality == 1) p.alertUpdate() @@ -114,18 +106,8 @@ GLOBAL_DATUM_INIT(paiController, /datum/paiController, new) // Global handler fo return recruitWindow(usr) -/datum/paiController/proc/recruitWindow(mob/M as mob) - var/datum/paiCandidate/candidate - for(var/datum/paiCandidate/c in pai_candidates) - if(!istype(c) || !istype(M)) - break - if(c.key == M.key) - candidate = c - if(!candidate) - candidate = new /datum/paiCandidate() - candidate.key = M.key - pai_candidates.Add(candidate) - +/datum/paiController/proc/recruitWindow(mob/M) + var/datum/pai_save/candidate = M.client.pai_save var/dat = "" dat += {" @@ -194,7 +176,7 @@ GLOBAL_DATUM_INIT(paiController, /datum/paiController, new) // Global handler fo - + @@ -215,7 +197,7 @@ GLOBAL_DATUM_INIT(paiController, /datum/paiController, new) // Global handler fo - + @@ -230,7 +212,7 @@ GLOBAL_DATUM_INIT(paiController, /datum/paiController, new) // Global handler fo
    Name:[candidate.name] [candidate.pai_name] 
    What you plan to call yourself. Suggestions: Any character name you would choose for a station character OR an AI.
    OOC Comments:[candidate.comments] [candidate.ooc_comments] 
    Anything you'd like to address specifically to the player reading this in an OOC manner. \"I prefer more serious RP.\", \"I'm still learning the interface!\", etc. Feel free to leave this blank if you want.
    - Load Personality + Reload Personality

    @@ -246,14 +228,13 @@ GLOBAL_DATUM_INIT(paiController, /datum/paiController, new) // Global handler fo /datum/paiController/proc/findPAI(obj/item/paicard/p, mob/user) requestRecruits(p, user) var/list/available = list() - for(var/datum/paiCandidate/c in GLOB.paiController.pai_candidates) - if(c.ready) - var/found = 0 - for(var/mob/o in GLOB.respawnable_list) - if(o.key == c.key) - found = 1 - if(found) - available.Add(c) + for(var/datum/pai_save/c in GLOB.paiController.pai_candidates) + var/found = 0 + for(var/mob/o in GLOB.respawnable_list) + if(o.ckey == c.owner.ckey) + found = 1 + if(found) + available.Add(c) var/dat = "" dat += {" @@ -325,12 +306,12 @@ GLOBAL_DATUM_INIT(paiController, /datum/paiController, new) // Global handler fo "} dat += "

    Displaying available AI personalities from central database... If there are no entries, or if a suitable entry is not listed, check again later as more personalities may be added.

    " - for(var/datum/paiCandidate/c in available) + for(var/datum/pai_save/c in available) dat += {" - + @@ -342,11 +323,11 @@ GLOBAL_DATUM_INIT(paiController, /datum/paiController, new) // Global handler fo - +
    Name:[c.name][c.pai_name]
    Description:
    OOC Comments:[c.comments][c.ooc_comments]
    -
    Download [c.name] + Download [c.pai_name]

    diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 21d9e75db90..60d13a88ce5 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -300,7 +300,7 @@ GLOBAL_LIST_INIT(robot_verbs_default, list( /mob/living/silicon/robot/proc/pick_module() if(module) return - var/list/modules = list("Generalist", "Engineering", "Medical", "Miner", "Janitor", "Service", "Security") + var/list/modules = list("Engineering", "Medical", "Miner", "Janitor", "Service") if(islist(force_modules) && force_modules.len) modules = force_modules.Copy() if(mmi != null && mmi.alien) @@ -315,14 +315,6 @@ GLOBAL_LIST_INIT(robot_verbs_default, list( return switch(modtype) - if("Generalist") - module = new /obj/item/robot_module/standard(src) - module.channels = list("Engineering" = 1, "Medical" = 1, "Security" = 1, "Service" = 1, "Supply" = 1) - module_sprites["Basic"] = "robot_old" - module_sprites["Android"] = "droid" - module_sprites["Default"] = "Standard" - module_sprites["Noble-STD"] = "Noble-STD" - if("Service") module = new /obj/item/robot_module/butler(src) module.channels = list("Service" = 1) @@ -365,17 +357,6 @@ GLOBAL_LIST_INIT(robot_verbs_default, list( see_reagents = TRUE if("Security") - if(!weapons_unlock) - var/count_secborgs = 0 - for(var/mob/living/silicon/robot/R in GLOB.alive_mob_list) - if(R && R.stat != DEAD && R.module && istype(R.module, /obj/item/robot_module/security)) - count_secborgs++ - var/max_secborgs = 2 - if(GLOB.security_level == SEC_LEVEL_GREEN) - max_secborgs = 1 - if(count_secborgs >= max_secborgs) - to_chat(src, "There are too many Security cyborgs active. Please choose another module.") - return module = new /obj/item/robot_module/security(src) module.channels = list("Security" = 1) module_sprites["Basic"] = "secborg" @@ -1147,55 +1128,18 @@ GLOBAL_LIST_INIT(robot_verbs_default, list( cell = null qdel(src) -#define BORG_CAMERA_BUFFER 30 -/mob/living/silicon/robot/Move(a, b, flag) - var/oldLoc = src.loc +#define BORG_CAMERA_BUFFER 3 SECONDS + +/mob/living/silicon/robot/Move(atom/newloc, direct, movetime) + var/oldLoc = loc . = ..() - if(.) - if(src.camera) - if(!updating) - updating = 1 - spawn(BORG_CAMERA_BUFFER) - if(camera && oldLoc != src.loc) - GLOB.cameranet.updatePortableCamera(src.camera) - updating = 0 - if(module) - if(module.type == /obj/item/robot_module/janitor) - var/turf/tile = loc - if(stat != DEAD && isturf(tile)) - var/floor_only = TRUE - for(var/A in tile) - if(istype(A, /obj/effect)) - var/obj/effect/E = A - if(E.is_cleanable()) - var/obj/effect/decal/cleanable/blood/B = E - if(istype(B) && B.off_floor) - floor_only = FALSE - else - qdel(E) - else if(istype(A, /obj/item)) - var/obj/item/cleaned_item = A - cleaned_item.clean_blood() - else if(istype(A, /mob/living/carbon/human)) - var/mob/living/carbon/human/cleaned_human = A - if(cleaned_human.lying) - if(cleaned_human.head) - cleaned_human.head.clean_blood() - cleaned_human.update_inv_head() - if(cleaned_human.wear_suit) - cleaned_human.wear_suit.clean_blood() - cleaned_human.update_inv_wear_suit() - else if(cleaned_human.w_uniform) - cleaned_human.w_uniform.clean_blood() - cleaned_human.update_inv_w_uniform() - if(cleaned_human.shoes) - cleaned_human.shoes.clean_blood() - cleaned_human.update_inv_shoes() - cleaned_human.clean_blood() - to_chat(cleaned_human, "[src] cleans your face!") - if(floor_only) - tile.clean_blood() - return + if(. && !updating && camera) + updating = TRUE + spawn(BORG_CAMERA_BUFFER) + if(camera && oldLoc != loc) + GLOB.cameranet.updatePortableCamera(camera) + updating = FALSE + #undef BORG_CAMERA_BUFFER /mob/living/silicon/robot/proc/self_destruct() @@ -1320,6 +1264,8 @@ GLOBAL_LIST_INIT(robot_verbs_default, list( connected_ai = AI connected_ai.connected_robots |= src notify_ai(1) + if(module) + module.rebuild_modules() //This way, if a borg gets linked to a malf AI that has upgrades, they get their upgrades. sync() /mob/living/silicon/robot/adjustOxyLoss(amount) @@ -1386,7 +1332,7 @@ GLOBAL_LIST_INIT(robot_verbs_default, list( scrambledcodes = 1 req_one_access = list(ACCESS_CENT_SPECOPS) ionpulse = 1 - force_modules = list("Engineering", "Medical", "Security") + force_modules = list("Engineering", "Medical") static_radio_channels = 1 allow_rename = FALSE weapons_unlock = TRUE diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm index 8554068dce8..3c202a35029 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules.dm @@ -6,12 +6,17 @@ item_state = "electronic" flags = CONDUCT + /// Has the AI hacked the borg module, allowing access to the malf AI exclusive item. + var/malfhacked = FALSE + /// A list of all currently usable and created modules the robot currently has access too. var/list/modules = list() /// A list of module-specific, non-emag modules the borg will gain when this module is chosen. var/list/basic_modules = list() /// A list of modules the robot gets when emagged. var/list/emag_modules = list() + /// A list of modules that the robot gets when malf AI buys it. + var/list/malf_modules = list() /// A list of modules that require special recharge handling. Examples include things like flashes, sprays and welding tools. var/list/special_rechargables = list() /// A list of all "energy stacks", i.e metal, glass, brute kits, splints, etc. @@ -43,12 +48,17 @@ emag_modules += I emag_modules -= i + for(var/i in malf_modules) + var/obj/item/I = new i(src) + malf_modules += I + malf_modules -= i + // Flashes need a special recharge, and since basically every module uses it, add it here. // Even if the module doesn't use a flash, it wont cause any issues to have it in this list. special_rechargables += /obj/item/flash/cyborg // This is done so we can loop through this list later and call cyborg_recharge() on the items while the borg is recharging. - var/all_modules = basic_modules | emag_modules + var/all_modules = basic_modules | emag_modules | malf_modules for(var/path in special_rechargables) var/obj/item/I = locate(path) in all_modules if(I) // If it exists, add the object reference. @@ -70,6 +80,7 @@ QDEL_LIST(modules) QDEL_LIST(basic_modules) QDEL_LIST(emag_modules) + QDEL_LIST(malf_modules) QDEL_LIST(storages) QDEL_LIST(special_rechargables) return ..() @@ -88,6 +99,7 @@ var/list/lists = list( basic_modules, emag_modules, + malf_modules, storages, special_rechargables ) @@ -155,13 +167,17 @@ return I /** - * Builds the usable module list from the modules we have in `basic_modules` and `emag_modules` + * Builds the usable module list from the modules we have in `basic_modules`, `emag_modules` and `malf_modules` */ /obj/item/robot_module/proc/rebuild_modules() var/mob/living/silicon/robot/R = loc R.uneq_all() modules = list() + if(!malfhacked && R.connected_ai) + if(type in R.connected_ai.purchased_modules) + malfhacked = TRUE + // By this point these lists should only contain items. It's safe to use typeless loops here. for(var/item in basic_modules) add_module(item, FALSE) @@ -170,6 +186,10 @@ for(var/item in emag_modules) add_module(item, FALSE) + if(malfhacked) + for(var/item in malf_modules) + add_module(item, FALSE) + if(R.hud_used) R.hud_used.update_robot_modules_display() @@ -265,47 +285,6 @@ /obj/item/robot_module/proc/handle_death(mob/living/silicon/robot/R, gibbed) return -// Standard cyborg module. -/obj/item/robot_module/standard - // if station is fine, assist with constructing station goal room, cleaning, and repairing cables chewed by rats - // if medical crisis, assist by providing basic healthcare, retrieving corpses, and monitoring crew lifesigns - // if eng crisis, assist by helping repair hull breaches - // if sec crisis, assist by opening doors for sec and providing backup zipties on patrols - name = "generalist robot module" - module_type = "Standard" - subsystems = list(/mob/living/silicon/proc/subsystem_power_monitor, /mob/living/silicon/proc/subsystem_crew_monitor) - basic_modules = list( - // sec - /obj/item/flash/cyborg, - /obj/item/restraints/handcuffs/cable/zipties/cyborg, - // janitorial - /obj/item/soap/nanotrasen, - /obj/item/lightreplacer/cyborg, - // eng - /obj/item/crowbar/cyborg, - /obj/item/wrench/cyborg, - /obj/item/extinguisher, // for firefighting, and propulsion in space - /obj/item/weldingtool/largetank/cyborg, - // mining - /obj/item/pickaxe, - /obj/item/t_scanner/adv_mining_scanner, - /obj/item/storage/bag/ore/cyborg, - // med - /obj/item/healthanalyzer, - /obj/item/reagent_containers/borghypo/basic, - /obj/item/roller_holder, // for taking the injured to medbay without worsening their injuries or leaving a blood trail the whole way - /obj/item/stack/sheet/metal/cyborg, - /obj/item/stack/cable_coil/cyborg, - /obj/item/stack/rods/cyborg, - /obj/item/stack/tile/plasteel/cyborg - ) - emag_modules = list(/obj/item/melee/energy/sword/cyborg) - special_rechargables = list( - /obj/item/extinguisher, - /obj/item/weldingtool/largetank/cyborg, - /obj/item/lightreplacer/cyborg - ) - // Medical cyborg module. /obj/item/robot_module/medical name = "medical robot module" @@ -319,6 +298,7 @@ /obj/item/borg_defib, /obj/item/handheld_defibrillator, /obj/item/roller_holder, + /obj/item/borg/cyborghug, /obj/item/reagent_containers/borghypo, /obj/item/scalpel/laser/laser1, /obj/item/hemostat, @@ -394,8 +374,9 @@ /obj/item/stack/sheet/glass/cyborg, /obj/item/stack/sheet/rglass/cyborg ) - emag_modules = list(/obj/item/borg/stun) - special_rechargables = list(/obj/item/extinguisher, /obj/item/weldingtool/largetank/cyborg) + emag_modules = list(/obj/item/borg/stun, /obj/item/restraints/handcuffs/cable/zipties/cyborg) + malf_modules = list(/obj/item/gun/energy/emitter/cyborg) + special_rechargables = list(/obj/item/extinguisher, /obj/item/weldingtool/largetank/cyborg, /obj/item/gun/energy/emitter/cyborg) /obj/item/robot_module/engineering/handle_death(mob/living/silicon/robot/R, gibbed) var/obj/item/gripper/G = locate(/obj/item/gripper) in modules @@ -440,13 +421,50 @@ /obj/item/holosign_creator, /obj/item/extinguisher/mini ) - emag_modules = list(/obj/item/reagent_containers/spray/cyborg_lube) + emag_modules = list(/obj/item/reagent_containers/spray/cyborg_lube, /obj/item/restraints/handcuffs/cable/zipties/cyborg) special_rechargables = list( /obj/item/lightreplacer, /obj/item/reagent_containers/spray/cyborg_lube, /obj/item/extinguisher/mini ) +/obj/item/robot_module/janitor/Initialize(mapload) + . = ..() + var/mob/living/silicon/robot/R = loc + RegisterSignal(R, COMSIG_MOVABLE_MOVED, .proc/on_cyborg_move) + +/** + * Proc called after the janitor cyborg has moved, in order to clean atoms at it's new location. + * + * Arguments: + * * mob/living/silicon/robot/R - The cyborg who moved. + */ +/obj/item/robot_module/janitor/proc/on_cyborg_move(mob/living/silicon/robot/R) + SIGNAL_HANDLER + + if(R.stat == DEAD || !isturf(R.loc)) + return + var/turf/tile = R.loc + for(var/A in tile) + if(iseffect(A)) + var/obj/effect/E = A + if(!E.is_cleanable()) + continue + var/obj/effect/decal/cleanable/blood/B = E + if(istype(B) && B.off_floor) + tile.clean_blood() + else + qdel(E) + else if(isitem(A)) + var/obj/item/I = A + I.clean_blood() + else if(ishuman(A)) + var/mob/living/carbon/human/cleaned_human = A + if(!cleaned_human.lying) + continue + cleaned_human.clean_blood() + to_chat(cleaned_human, "[src] cleans your face!") + /obj/item/reagent_containers/spray/cyborg_lube name = "Lube spray" list_reagents = list("lube" = 250) @@ -474,7 +492,7 @@ /obj/item/storage/bag/tray/cyborg, /obj/item/reagent_containers/food/drinks/shaker ) - emag_modules = list(/obj/item/reagent_containers/food/drinks/cans/beer/sleepy_beer) + emag_modules = list(/obj/item/reagent_containers/food/drinks/cans/beer/sleepy_beer, /obj/item/restraints/handcuffs/cable/zipties/cyborg) special_rechargables = list( /obj/item/reagent_containers/food/condiment/enzyme, /obj/item/reagent_containers/food/drinks/cans/beer/sleepy_beer @@ -533,7 +551,7 @@ /obj/item/gun/energy/kinetic_accelerator/cyborg, /obj/item/gps/cyborg ) - emag_modules = list(/obj/item/borg/stun, /obj/item/pickaxe/drill/cyborg/diamond) + emag_modules = list(/obj/item/borg/stun, /obj/item/pickaxe/drill/cyborg/diamond, /obj/item/restraints/handcuffs/cable/zipties/cyborg) special_rechargables = list(/obj/item/extinguisher/mini, /obj/item/weldingtool/mini) // Replace their normal drill with a diamond drill. diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm index 3770f1125e2..2ca6822951a 100644 --- a/code/modules/mob/living/silicon/silicon.dm +++ b/code/modules/mob/living/silicon/silicon.dm @@ -20,7 +20,7 @@ var/list/speech_synthesizer_langs = list() //which languages can be vocalized by the speech synthesizer var/designation = "" var/obj/item/camera/siliconcam/aiCamera = null //photography -//Used in say.dm, allows for pAIs to have different say flavor text, as well as silicons, although the latter is not implemented. + //Used in say.dm, allows for pAIs to have different say flavor text, as well as silicons, although the latter is not implemented. var/speak_statement = "states" var/speak_exclamation = "declares" var/speak_query = "queries" @@ -34,7 +34,7 @@ var/med_hud = DATA_HUD_MEDICAL_ADVANCED //Determines the med hud to use var/sec_hud = DATA_HUD_SECURITY_ADVANCED //Determines the sec hud to use - var/d_hud = DATA_HUD_DIAGNOSTIC_ADVANCED //There is only one kind of diag hud + var/d_hud = DATA_HUD_DIAGNOSTIC_BASIC //There is only one kind of diag hud var/obj/item/radio/common_radio @@ -46,13 +46,14 @@ RegisterSignal(SSalarm, COMSIG_TRIGGERED_ALARM, .proc/alarm_triggered) RegisterSignal(SSalarm, COMSIG_CANCELLED_ALARM, .proc/alarm_cancelled) -/mob/living/silicon/Initialize() +/mob/living/silicon/Initialize(mapload) . = ..() - var/datum/atom_hud/data/diagnostic/diag_hud = GLOB.huds[DATA_HUD_DIAGNOSTIC] - diag_hud.add_to_hud(src) + for(var/datum/atom_hud/data/diagnostic/diag_hud in GLOB.huds) + diag_hud.add_to_hud(src) diag_hud_set_status() diag_hud_set_health() + /mob/living/silicon/med_hud_set_health() return //we use a different hud @@ -311,10 +312,10 @@ /mob/living/silicon/proc/remove_med_sec_hud() var/datum/atom_hud/secsensor = GLOB.huds[sec_hud] var/datum/atom_hud/medsensor = GLOB.huds[med_hud] - for(var/datum/atom_hud/data/diagnostic/diagsensor in GLOB.huds) - diagsensor.remove_hud_from(src) + var/datum/atom_hud/diagsensor = GLOB.huds[d_hud] secsensor.remove_hud_from(src) medsensor.remove_hud_from(src) + diagsensor.remove_hud_from(src) /mob/living/silicon/proc/add_sec_hud() @@ -326,8 +327,8 @@ medsensor.add_hud_to(src) /mob/living/silicon/proc/add_diag_hud() - for(var/datum/atom_hud/data/diagnostic/diagsensor in GLOB.huds) - diagsensor.add_hud_to(src) + var/datum/atom_hud/diagsensor = GLOB.huds[d_hud] + diagsensor.add_hud_to(src) /mob/living/silicon/proc/toggle_sensor_mode() diff --git a/code/modules/mob/living/simple_animal/animal_defense.dm b/code/modules/mob/living/simple_animal/animal_defense.dm index 28fff50a124..5cba2950976 100644 --- a/code/modules/mob/living/simple_animal/animal_defense.dm +++ b/code/modules/mob/living/simple_animal/animal_defense.dm @@ -76,7 +76,7 @@ damage = rand(20, 35) return attack_threshold_check(damage) -/mob/living/simple_animal/proc/attack_threshold_check(damage, damagetype = BRUTE, armorcheck = "melee") +/mob/living/simple_animal/proc/attack_threshold_check(damage, damagetype = BRUTE, armorcheck = MELEE) var/temp_damage = damage if(!damage_coeff[damagetype]) temp_damage = 0 @@ -101,7 +101,7 @@ if(origin && istype(origin, /datum/spacevine_mutation) && isvineimmune(src)) return ..() - var/bomb_armor = getarmor(null, "bomb") + var/bomb_armor = getarmor(null, BOMB) switch(severity) if(1) if(prob(bomb_armor)) diff --git a/code/modules/mob/living/simple_animal/bot/bot.dm b/code/modules/mob/living/simple_animal/bot/bot.dm index aeb51e55d8c..cb0f29d2fbc 100644 --- a/code/modules/mob/living/simple_animal/bot/bot.dm +++ b/code/modules/mob/living/simple_animal/bot/bot.dm @@ -78,7 +78,7 @@ var/control_freq = BOT_FREQ // bot control frequency var/bot_filter // The radio filter the bot uses to identify itself on the network. var/bot_type = 0 //The type of bot it is, for radio control. - var/data_hud_type = DATA_HUD_DIAGNOSTIC //The type of data HUD the bot uses. Diagnostic by default. + var/data_hud_type = DATA_HUD_DIAGNOSTIC_BASIC //The type of data HUD the bot uses. Diagnostic by default. //This holds text for what the bot is mode doing, reported on the remote bot control interface. var/list/mode_name = list("In Pursuit","Preparing to Arrest", "Arresting", \ "Beginning Patrol", "Patrolling", "Summoned by PDA", \ @@ -537,19 +537,16 @@ Pass a positive integer as an argument to override a bot's default speed. bot_reset() //Reset a bot before setting it to call mode. var/area/end_area = get_area(waypoint) - //For giving the bot temporary all-access. - var/obj/item/card/id/all_access = new /obj/item/card/id var/datum/job/captain/All = new/datum/job/captain - all_access.access = All.get_access() + access_card.access = All.get_access() // Give the bot temporary all access - set_path(get_path_to(src, waypoint, /turf/proc/Distance_cardinal, 0, 200, id=all_access)) + set_path(get_path_to(src, waypoint, /turf/proc/Distance_cardinal, 0, 200, id = access_card)) calling_ai = caller //Link the AI to the bot! ai_waypoint = waypoint if(path && path.len) //Ensures that a valid path is calculated! if(!on) turn_on() //Saves the AI the hassle of having to activate a bot manually. - access_card = all_access //Give the bot all-access while under the AI's command. if(client) reset_access_timer_id = addtimer(CALLBACK (src, .proc/bot_reset), 600, TIMER_OVERRIDE|TIMER_STOPPABLE) //if the bot is player controlled, they get the extra access for a limited time to_chat(src, "Priority waypoint set by [calling_ai] [caller]. Proceed to [end_area.name].
    [path.len-1] meters to destination. You have been granted additional door access for 60 seconds.
    ") @@ -562,6 +559,7 @@ Pass a positive integer as an argument to override a bot's default speed. if(message) to_chat(calling_ai, "Failed to calculate a valid route. Ensure destination is clear of obstructions and within range.") calling_ai = null + access_card.access = prev_access // Don't forget to reset it set_path(null) /mob/living/simple_animal/bot/proc/call_mode() //Handles preparing a bot for a call, as well as calling the move proc. @@ -1079,6 +1077,8 @@ Pass a positive integer as an argument to override a bot's default speed. if(newpath) for(var/i in 1 to newpath.len) var/turf/T = newpath[i] + if(T == loc) //don't bother putting an image if it's where we already exist. + continue var/direction = NORTH if(i > 1) var/turf/prevT = path[i - 1] @@ -1121,7 +1121,7 @@ Pass a positive integer as an argument to override a bot's default speed. return var/image/I = path[path[1]] if(I) - I.icon = null + I.icon_state = null path.Cut(1, 2) /mob/living/simple_animal/bot/proc/drop_part(obj/item/drop_item, dropzone) diff --git a/code/modules/mob/living/simple_animal/bot/construction.dm b/code/modules/mob/living/simple_animal/bot/construction.dm index beca603f4cc..5abf3b185b5 100644 --- a/code/modules/mob/living/simple_animal/bot/construction.dm +++ b/code/modules/mob/living/simple_animal/bot/construction.dm @@ -214,7 +214,7 @@ var/list/allowed_toolbox = list(/obj/item/storage/toolbox/emergency, //which toolboxes can be made into floorbots /obj/item/storage/toolbox/electrical, /obj/item/storage/toolbox/mechanical, - /obj/item/storage/toolbox/green, + /obj/item/storage/toolbox/artistic, /obj/item/storage/toolbox/syndicate, /obj/item/storage/toolbox/fakesyndi) @@ -223,8 +223,6 @@ return if(!is_type_in_list(src, allowed_toolbox)) return - if(type == /obj/item/storage/toolbox/green/memetic) - return if(contents.len >= 1) to_chat(user, "They won't fit in, as there is already stuff inside.") return @@ -242,7 +240,7 @@ B.toolbox_color = "or" if(/obj/item/storage/toolbox/electrical) B.toolbox_color = "y" - if(/obj/item/storage/toolbox/green) + if(/obj/item/storage/toolbox/artistic) B.toolbox_color = "g" if(/obj/item/storage/toolbox/syndicate) B.toolbox_color = "s" diff --git a/code/modules/mob/living/simple_animal/bot/griefsky.dm b/code/modules/mob/living/simple_animal/bot/griefsky.dm index 8b0878f7115..dfab1029958 100644 --- a/code/modules/mob/living/simple_animal/bot/griefsky.dm +++ b/code/modules/mob/living/simple_animal/bot/griefsky.dm @@ -92,7 +92,8 @@ C.apply_damage(dmg, BRUTE) if(prob(stun_chance)) C.Weaken(5) - add_attack_logs(src, C, "sliced") + if(dmg) + add_attack_logs(src, C, "sliced") if(declare_arrests) var/area/location = get_area(src) if(!spam_flag) diff --git a/code/modules/mob/living/simple_animal/bot/mulebot.dm b/code/modules/mob/living/simple_animal/bot/mulebot.dm index c17b911b0f2..c9f594f7b25 100644 --- a/code/modules/mob/living/simple_animal/bot/mulebot.dm +++ b/code/modules/mob/living/simple_animal/bot/mulebot.dm @@ -695,12 +695,12 @@ playsound(loc, 'sound/effects/splat.ogg', 50, 1) var/damage = rand(5,15) - H.apply_damage(2*damage, BRUTE, "head", run_armor_check("head", "melee")) - H.apply_damage(2*damage, BRUTE, "chest", run_armor_check("chest", "melee")) - H.apply_damage(0.5*damage, BRUTE, "l_leg", run_armor_check("l_leg", "melee")) - H.apply_damage(0.5*damage, BRUTE, "r_leg", run_armor_check("r_leg", "melee")) - H.apply_damage(0.5*damage, BRUTE, "l_arm", run_armor_check("l_arm", "melee")) - H.apply_damage(0.5*damage, BRUTE, "r_arm", run_armor_check("r_arm", "melee")) + H.apply_damage(2*damage, BRUTE, "head", run_armor_check("head", MELEE)) + H.apply_damage(2*damage, BRUTE, "chest", run_armor_check("chest", MELEE)) + H.apply_damage(0.5*damage, BRUTE, "l_leg", run_armor_check("l_leg", MELEE)) + H.apply_damage(0.5*damage, BRUTE, "r_leg", run_armor_check("r_leg", MELEE)) + H.apply_damage(0.5*damage, BRUTE, "l_arm", run_armor_check("l_arm", MELEE)) + H.apply_damage(0.5*damage, BRUTE, "r_arm", run_armor_check("r_arm", MELEE)) diff --git a/code/modules/mob/living/simple_animal/bot/syndicate.dm b/code/modules/mob/living/simple_animal/bot/syndicate.dm index d3cd9bd85b1..3d18faeef38 100644 --- a/code/modules/mob/living/simple_animal/bot/syndicate.dm +++ b/code/modules/mob/living/simple_animal/bot/syndicate.dm @@ -131,21 +131,6 @@ spawn(0) handle_automated_action() break - for(var/obj/spacepod/P in view(7, src)) - if((P.name == oldtarget_name) && (world.time < last_found + 100)) - continue - if(!P.pilot) - continue - if("syndicate" in P.pilot.faction) - continue - if(P.pilot.stat == DEAD) - continue - target = P - oldtarget_name = P.name - mode = BOT_HUNT - spawn(0) - handle_automated_action() - break /mob/living/simple_animal/bot/ed209/syndicate/shootAt(atom/target) diff --git a/code/modules/mob/living/simple_animal/friendly/diona.dm b/code/modules/mob/living/simple_animal/friendly/diona.dm index c4438fc8da3..41a568559e0 100644 --- a/code/modules/mob/living/simple_animal/friendly/diona.dm +++ b/code/modules/mob/living/simple_animal/friendly/diona.dm @@ -65,7 +65,7 @@ /datum/action/innate/diona/evolve name = "Evolve" icon_icon = 'icons/obj/cloning.dmi' - button_icon_state = "pod_1" + button_icon_state = "pod_cloning" /datum/action/innate/diona/evolve/Activate() var/mob/living/simple_animal/diona/user = owner @@ -108,6 +108,8 @@ to_chat(src, "You feel your being twine with that of [M] as you merge with its biomass.") throw_alert(gestalt_alert, /obj/screen/alert/nymph, new_master = src) //adds a screen alert that can call resist forceMove(M) + else if(isrobot(M)) + M.visible_message("[M] playfully boops [src] on the head!", "You playfully boop [src] on the head!") else get_scooped(M) else diff --git a/code/modules/mob/living/simple_animal/friendly/mouse.dm b/code/modules/mob/living/simple_animal/friendly/mouse.dm index d8bdbfeb0ab..e924ea9eed7 100644 --- a/code/modules/mob/living/simple_animal/friendly/mouse.dm +++ b/code/modules/mob/living/simple_animal/friendly/mouse.dm @@ -226,18 +226,6 @@ to_chat(grabber, "You try to pick up [src], but they slip out of your grasp!") to_chat(src, "[src] tries to pick you up, but you wriggle free of their grasp!") -/mob/living/simple_animal/mouse/fluff/clockwork - name = "Chip" - real_name = "Chip" - mouse_color = "clockwork" - icon_state = "mouse_clockwork" - response_help = "pets" - response_disarm = "gently pushes aside" - response_harm = "stamps on" - gold_core_spawnable = NO_SPAWN - can_collar = 0 - butcher_results = list(/obj/item/stack/sheet/metal = 1) - /mob/living/simple_animal/mouse/decompile_act(obj/item/matter_decompiler/C, mob/user) if(!(istype(user, /mob/living/silicon/robot/drone))) user.visible_message("[user] sucks [src] into its decompiler. There's a horrible crunching noise.", \ diff --git a/code/modules/mob/living/simple_animal/hostile/bat.dm b/code/modules/mob/living/simple_animal/hostile/bat.dm index 1cc904f1017..09f77e052d6 100644 --- a/code/modules/mob/living/simple_animal/hostile/bat.dm +++ b/code/modules/mob/living/simple_animal/hostile/bat.dm @@ -33,27 +33,16 @@ // break_stuff_probability = 2 faction = list("scarybat") - var/mob/living/owner gold_core_spawnable = HOSTILE_SPAWN -/mob/living/simple_animal/hostile/scarybat/New(loc, mob/living/L as mob) - ..() +/mob/living/simple_animal/hostile/scarybat/Initialize(mapload, mob/living/L) + . = ..() if(istype(L)) - owner = L + faction += "\ref[L]" /mob/living/simple_animal/hostile/scarybat/Process_Spacemove(check_drift = 0) return ..() //No drifting in space for space carp! //original comments do not steal -/mob/living/simple_animal/hostile/scarybat/Found(atom/A)//This is here as a potential override to pick a specific target if available - if(istype(A) && A == owner) - return 0 - return ..() - -/mob/living/simple_animal/hostile/scarybat/CanAttack(atom/the_target)//This is here as a potential override to pick a specific target if available - if(istype(the_target) && the_target == owner) - return 0 - return ..() - /mob/living/simple_animal/hostile/scarybat/AttackingTarget() . =..() var/mob/living/L = . @@ -63,7 +52,8 @@ L.visible_message("\the [src] scares \the [L]!") -/mob/living/simple_animal/hostile/scarybat/batswarm +//This mob is for the admin-only ancient vampire, DO NOT USE ELSEWHERE +/mob/living/simple_animal/hostile/scarybat/adminvampire name = "bat swarm" desc = "A swarm of vicious, angry-looking space bats." speed = 1 diff --git a/code/modules/mob/living/simple_animal/hostile/bees.dm b/code/modules/mob/living/simple_animal/hostile/bees.dm index 0370a84baba..63a883b4d00 100644 --- a/code/modules/mob/living/simple_animal/hostile/bees.dm +++ b/code/modules/mob/living/simple_animal/hostile/bees.dm @@ -31,7 +31,6 @@ move_to_delay = 0 obj_damage = 0 environment_smash = 0 - mouse_opacity = MOUSE_OPACITY_OPAQUE pass_flags = PASSTABLE | PASSGRILLE | PASSMOB density = FALSE mob_size = MOB_SIZE_TINY @@ -51,6 +50,8 @@ var/isqueen = FALSE var/bee_syndicate = FALSE var/icon_base = "bee" + var/last_attack = 0 + var/opacity_time = 1 MINUTES var/static/list/bee_icons = list() var/static/beehometypecache = typecacheof(/obj/structure/beebox) var/static/hydroponicstypecache = typecacheof(/obj/machinery/hydroponics) @@ -162,6 +163,7 @@ else . = ..() if(. && isliving(target) && (!client || a_intent == INTENT_HARM)) + make_opaque() var/mob/living/L = target if(L.reagents) if(beegent) @@ -170,6 +172,23 @@ else L.reagents.add_reagent("spidertoxin", 5) +/mob/living/simple_animal/hostile/poison/bees/proc/make_opaque() + // If a bee attacks someone, make it very easy to hit for a while + last_attack = world.time + mouse_opacity = MOUSE_OPACITY_OPAQUE + +/mob/living/simple_animal/hostile/poison/bees/Life(seconds, times_fired) + . = ..() + if(mind || (mouse_opacity == initial(mouse_opacity))) + return + var/diff = world.time - last_attack + if(diff >= opacity_time) + mouse_opacity = initial(mouse_opacity) + +/mob/living/simple_animal/hostile/poison/bees/sentience_act() + . = ..() + make_opaque() + /mob/living/simple_animal/hostile/poison/bees/proc/assign_reagent(datum/reagent/R) if(istype(R)) beegent = R @@ -233,6 +252,7 @@ desc = "She's the queen of bees, BZZ BZZ" icon_base = "queen" isqueen = TRUE + mouse_opacity = MOUSE_OPACITY_OPAQUE //the Queen doesn't leave the box on her own, and she CERTAINLY doesn't pollinate by herself @@ -324,6 +344,7 @@ search_objects = FALSE //these bees don't care about trivial things like plants, especially when there is havoc to sow bee_syndicate = TRUE var/list/master_and_friends = list() + mouse_opacity = MOUSE_OPACITY_OPAQUE /mob/living/simple_animal/hostile/poison/bees/syndi/New() beegent = GLOB.chemical_reagents_list["facid"] //Prepare to die diff --git a/code/modules/mob/living/simple_animal/hostile/hostile.dm b/code/modules/mob/living/simple_animal/hostile/hostile.dm index 903f4517a8f..40f0e1d1dcd 100644 --- a/code/modules/mob/living/simple_animal/hostile/hostile.dm +++ b/code/modules/mob/living/simple_animal/hostile/hostile.dm @@ -131,7 +131,7 @@ if(!search_objects) . = hearers(vision_range, targets_from) - src //Remove self, so we don't suicide - var/static/hostile_machines = typecacheof(list(/obj/machinery/porta_turret, /obj/mecha, /obj/spacepod)) + var/static/hostile_machines = typecacheof(list(/obj/machinery/porta_turret, /obj/mecha)) for(var/HM in typecache_filter_list(range(vision_range, targets_from), hostile_machines)) if(can_see(targets_from, HM, vision_range)) @@ -216,12 +216,6 @@ if(CanAttack(M.occupant)) return TRUE - if(isspacepod(the_target)) - var/obj/spacepod/S = the_target - if(S.pilot)//Just so we don't attack empty pods - if(CanAttack(S.pilot)) - return TRUE - if(istype(the_target, /obj/machinery/porta_turret)) var/obj/machinery/porta_turret/P = the_target if(P.faction in faction) @@ -557,7 +551,7 @@ toggle_ai(AI_ON) /mob/living/simple_animal/hostile/proc/ListTargetsLazy(_Z)//Step 1, find out what we can see - var/static/hostile_machines = typecacheof(list(/obj/machinery/porta_turret, /obj/mecha, /obj/spacepod)) + var/static/hostile_machines = typecacheof(list(/obj/machinery/porta_turret, /obj/mecha)) . = list() for(var/I in SSmobs.clients_by_zlevel[_Z]) var/mob/M = I diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm index bf5f45cfe69..92318dbe450 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/bubblegum.dm @@ -253,7 +253,7 @@ Difficulty: Hard to_chat(L, "[src] rends you!") playsound(T, attack_sound, 100, TRUE, -1) var/limb_to_hit = L.get_organ(pick(BODY_ZONE_HEAD, BODY_ZONE_CHEST, BODY_ZONE_R_ARM, BODY_ZONE_L_ARM, BODY_ZONE_R_LEG, BODY_ZONE_L_LEG)) - L.apply_damage(10, BRUTE, limb_to_hit, L.run_armor_check(limb_to_hit, "melee", null, null, armour_penetration)) + L.apply_damage(10, BRUTE, limb_to_hit, L.run_armor_check(limb_to_hit, MELEE, null, null, armour_penetration)) SLEEP_CHECK_DEATH(3) /mob/living/simple_animal/hostile/megafauna/bubblegum/proc/bloodgrab(turf/T, handedness) diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm index 6324e8bb7a6..c0dcff97bb9 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/colossus.dm @@ -205,10 +205,9 @@ Difficulty: Very Hard shoot_projectile(E) /mob/living/simple_animal/hostile/megafauna/colossus/proc/telegraph() - for(var/mob/M in range(10,src)) - if(M.client) - flash_color(M.client, "#C80000", 1) - shake_camera(M, 4, 3) + for(var/mob/M in range(10, src)) + M.flash_screen_color("#C80000", 1) + shake_camera(M, 4, 3) playsound(src, 'sound/magic/narsie_attack.ogg', 200, TRUE) diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm index 9bad9930c46..54e2efacf4a 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/drake.dm @@ -288,7 +288,7 @@ Difficulty: Medium if(M in hit_list) continue hit_list += M - M.take_damage(45, BRUTE, "melee", 1) + M.take_damage(45, BRUTE, MELEE, 1) sleep(1.5) /mob/living/simple_animal/hostile/megafauna/dragon/proc/swoop_attack(lava_arena = FALSE, atom/movable/manual_target, swoop_cooldown = 30) @@ -372,7 +372,7 @@ Difficulty: Medium L.throw_at(throwtarget, 3) visible_message("[L] is thrown clear of [src]!") for(var/obj/mecha/M in orange(1, src)) - M.take_damage(75, BRUTE, "melee", 1) + M.take_damage(75, BRUTE, MELEE, 1) for(var/mob/M in range(7, src)) shake_camera(M, 15, 1) @@ -447,7 +447,7 @@ Difficulty: Medium // deals damage to mechs for(var/obj/mecha/M in T.contents) - M.take_damage(45, BRUTE, "melee", 1) + M.take_damage(45, BRUTE, MELEE, 1) // changes turf to lava temporarily if(!T.density && !istype(T, /turf/simulated/floor/plating/lava)) diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm index c83cf6c3c18..a85bff9c834 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/hierophant.dm @@ -670,12 +670,11 @@ Difficulty: Hard hit_things += L if((friendly_fire_check && caster && caster.faction_check_mob(L)) || L.stat == DEAD) continue - if(L.client) - flash_color(L.client, "#660099", 1) + L.flash_screen_color("#660099", 1) playsound(L,'sound/weapons/sear.ogg', 50, TRUE, -4) to_chat(L, "You're struck by a [name]!") var/limb_to_hit = L.get_organ(pick(BODY_ZONE_HEAD, BODY_ZONE_CHEST, BODY_ZONE_R_ARM, BODY_ZONE_L_ARM, BODY_ZONE_R_LEG, BODY_ZONE_L_LEG)) - var/armor = L.run_armor_check(limb_to_hit, "melee", "Your armor absorbs [src]!", "Your armor blocks part of [src]!", 50, "Your armor was penetrated by [src]!") + var/armor = L.run_armor_check(limb_to_hit, MELEE, "Your armor absorbs [src]!", "Your armor blocks part of [src]!", 50, "Your armor was penetrated by [src]!") L.apply_damage(damage, BURN, limb_to_hit, armor) if(ishostile(L)) var/mob/living/simple_animal/hostile/H = L //mobs find and damage you... diff --git a/code/modules/mob/living/simple_animal/hostile/megafauna/legion.dm b/code/modules/mob/living/simple_animal/hostile/megafauna/legion.dm index 5be97564787..352eae47ead 100644 --- a/code/modules/mob/living/simple_animal/hostile/megafauna/legion.dm +++ b/code/modules/mob/living/simple_animal/hostile/megafauna/legion.dm @@ -69,7 +69,7 @@ Difficulty: Medium ranged_cooldown = world.time + ranged_cooldown_time else visible_message("[src] charges!") - SpinAnimation(speed = 20, loops = 5) + SpinAnimation(speed = 20, loops = 5, parallel = FALSE) ranged = 0 retreat_distance = 0 minimum_distance = 0 diff --git a/code/modules/mob/living/simple_animal/hostile/mining/basilisk.dm b/code/modules/mob/living/simple_animal/hostile/mining/basilisk.dm index 9f3dc477218..581a1b3b02e 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining/basilisk.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining/basilisk.dm @@ -41,7 +41,7 @@ damage = 0 damage_type = BURN nodamage = TRUE - flag = "energy" + flag = ENERGY temperature = 50 /mob/living/simple_animal/hostile/asteroid/basilisk/GiveTarget(new_target) diff --git a/code/modules/mob/living/simple_animal/hostile/mining/gutlunch.dm b/code/modules/mob/living/simple_animal/hostile/mining/gutlunch.dm index c5c50177511..87e35f1157e 100644 --- a/code/modules/mob/living/simple_animal/hostile/mining/gutlunch.dm +++ b/code/modules/mob/living/simple_animal/hostile/mining/gutlunch.dm @@ -1,7 +1,7 @@ //Gutlunches, passive mods that devour blood and gibs /mob/living/simple_animal/hostile/asteroid/gutlunch name = "gutlunch" - desc = "A scavenger that eats raw meat, often found alongside ash walkers. Produces a thick, nutritious milk." + desc = "A scavenger that eats raw meat, often found alongside ash walkers. Produces a thick, medicinally nutritious milk." icon = 'icons/mob/lavaland/lavaland_monsters.dmi' icon_state = "gutlunch" icon_living = "gutlunch" @@ -104,7 +104,9 @@ if(prob(60)) reagents.add_reagent("cream", rand(2, 5)) if(prob(45)) - reagents.add_reagent("salglu_solution", rand(2,5)) + reagents.add_reagent("salglu_solution", rand(2, 5)) + if(prob(30)) + reagents.add_reagent("epinephrine", rand(2, 5)) //Male gutlunch. They're smaller and more colorful! diff --git a/code/modules/mob/living/simple_animal/hostile/netherworld.dm b/code/modules/mob/living/simple_animal/hostile/netherworld.dm index 4c3635e406a..9d2ddae7a65 100644 --- a/code/modules/mob/living/simple_animal/hostile/netherworld.dm +++ b/code/modules/mob/living/simple_animal/hostile/netherworld.dm @@ -33,7 +33,7 @@ /mob/living/simple_animal/hostile/netherworld/migo/Initialize(mapload) . = ..() - migo_sounds = list('sound/items/bubblewrap.ogg', 'sound/items/change_jaws.ogg', 'sound/items/crowbar.ogg', 'sound/items/drink.ogg', 'sound/items/deconstruct.ogg', 'sound/items/change_drill.ogg', 'sound/items/dodgeball.ogg', 'sound/items/eatfood.ogg', 'sound/items/screwdriver.ogg', 'sound/items/weeoo1.ogg', 'sound/items/wirecutter.ogg', 'sound/items/welder.ogg', 'sound/items/zip.ogg', 'sound/items/rped.ogg', 'sound/items/ratchet.ogg', 'sound/items/polaroid1.ogg', 'sound/items/pshoom.ogg', 'sound/items/airhorn.ogg', 'sound/voice/bcreep.ogg', 'sound/voice/biamthelaw.ogg', 'sound/voice/ed209_20sec.ogg', 'sound/voice/hiss3.ogg', 'sound/voice/hiss6.ogg', 'sound/voice/mpatchedup.ogg', 'sound/voice/mfeelbetter.ogg', 'sound/weapons/sear.ogg', 'sound/ambience/antag/tatoralert.ogg', 'sound/mecha/nominal.ogg', 'sound/mecha/weapdestr.ogg', 'sound/mecha/critdestr.ogg', 'sound/mecha/imag_enh.ogg', 'sound/effects/adminhelp.ogg', 'sound/effects/alert.ogg', 'sound/effects/attackblob.ogg', 'sound/effects/bamf.ogg', 'sound/effects/blobattack.ogg', 'sound/effects/break_stone.ogg', 'sound/effects/bubbles.ogg', 'sound/effects/bubbles2.ogg', 'sound/effects/clang.ogg', 'sound/effects/clownstep2.ogg', 'sound/effects/dimensional_rend.ogg', 'sound/effects/doorcreaky.ogg', 'sound/effects/empulse.ogg', 'sound/effects/explosionfar.ogg', 'sound/effects/explosion1.ogg', 'sound/effects/grillehit.ogg', 'sound/effects/genetics.ogg', 'sound/effects/heartbeat.ogg', 'sound/effects/hyperspace_begin.ogg', 'sound/effects/hyperspace_end.ogg', 'sound/goonstation/effects/screech.ogg', 'sound/effects/phasein.ogg', 'sound/effects/picaxe1.ogg', 'sound/effects/sparks1.ogg', 'sound/effects/smoke.ogg', 'sound/effects/splat.ogg', 'sound/effects/snap.ogg', 'sound/effects/tendril_destroyed.ogg', 'sound/effects/supermatter.ogg', 'sound/misc/desceration-01.ogg', 'sound/misc/desceration-02.ogg', 'sound/misc/desceration-03.ogg', 'sound/misc/bloblarm.ogg', 'sound/goonstation/misc/airraid_loop.ogg', 'sound/misc/interference.ogg', 'sound/misc/notice1.ogg', 'sound/misc/notice2.ogg', 'sound/misc/sadtrombone.ogg', 'sound/misc/slip.ogg', 'sound/weapons/armbomb.ogg', 'sound/weapons/chainsaw.ogg', 'sound/weapons/emitter.ogg', 'sound/weapons/emitter2.ogg', 'sound/weapons/blade1.ogg', 'sound/weapons/bladeslice.ogg', 'sound/weapons/blastcannon.ogg', 'sound/weapons/blaster.ogg', 'sound/weapons/bulletflyby3.ogg', 'sound/weapons/circsawhit.ogg', 'sound/weapons/cqchit2.ogg', 'sound/weapons/drill.ogg', 'sound/weapons/genhit1.ogg', 'sound/weapons/gunshots/gunshot_silenced.ogg', 'sound/weapons/gunshots/gunshot.ogg', 'sound/weapons/handcuffs.ogg', 'sound/weapons/homerun.ogg', 'sound/weapons/kenetic_accel.ogg', 'sound/machines/fryer/deep_fryer_emerge.ogg', 'sound/machines/airlock_alien_prying.ogg', 'sound/machines/airlock_close.ogg', 'sound/machines/airlockforced.ogg', 'sound/machines/airlock_open.ogg', 'sound/machines/alarm.ogg', 'sound/machines/blender.ogg', 'sound/machines/boltsdown.ogg', 'sound/machines/boltsup.ogg', 'sound/machines/buzz-sigh.ogg', 'sound/machines/buzz-two.ogg', 'sound/machines/chime.ogg', 'sound/machines/defib_charge.ogg', 'sound/machines/defib_failed.ogg', 'sound/machines/defib_ready.ogg', 'sound/machines/defib_zap.ogg', 'sound/machines/deniedbeep.ogg', 'sound/machines/ding.ogg', 'sound/machines/disposalflush.ogg', 'sound/machines/door_close.ogg', 'sound/machines/door_open.ogg', 'sound/machines/engine_alert1.ogg', 'sound/machines/engine_alert2.ogg', 'sound/machines/hiss.ogg', 'sound/machines/honkbot_evil_laugh.ogg', 'sound/machines/juicer.ogg', 'sound/machines/ping.ogg', 'sound/ambience/signal.ogg', 'sound/machines/synth_no.ogg', 'sound/machines/synth_yes.ogg', 'sound/machines/terminal_alert.ogg', 'sound/machines/twobeep.ogg', 'sound/machines/ventcrawl.ogg', 'sound/machines/warning-buzzer.ogg', 'sound/ai/outbreak5.ogg', 'sound/ai/outbreak7.ogg', 'sound/ai/poweroff.ogg', 'sound/ai/radiation.ogg', 'sound/ai/shuttlecalled.ogg', 'sound/ai/shuttledock.ogg', 'sound/ai/shuttlerecalled.ogg', 'sound/ai/aimalf.ogg', 'sound/ambience/ambigen1.ogg', 'sound/ambience/ambigen3.ogg', 'sound/ambience/ambigen4.ogg', 'sound/ambience/ambigen5.ogg', 'sound/ambience/ambigen6.ogg', 'sound/ambience/ambigen10.ogg', 'sound/hallucinations/over_here1.ogg', 'sound/hallucinations/over_here2.ogg', 'sound/hallucinations/over_here3.ogg') //hahahaha fuck you code divers + migo_sounds = list('sound/items/bubblewrap.ogg', 'sound/items/change_jaws.ogg', 'sound/items/crowbar.ogg', 'sound/items/drink.ogg', 'sound/items/deconstruct.ogg', 'sound/items/change_drill.ogg', 'sound/items/dodgeball.ogg', 'sound/items/eatfood.ogg', 'sound/items/screwdriver.ogg', 'sound/items/weeoo1.ogg', 'sound/items/wirecutter.ogg', 'sound/items/welder.ogg', 'sound/items/zip.ogg', 'sound/items/rped.ogg', 'sound/items/ratchet.ogg', 'sound/items/polaroid1.ogg', 'sound/items/pshoom.ogg', 'sound/items/airhorn.ogg', 'sound/voice/bcreep.ogg', 'sound/voice/biamthelaw.ogg', 'sound/voice/ed209_20sec.ogg', 'sound/voice/hiss3.ogg', 'sound/voice/hiss6.ogg', 'sound/voice/mpatchedup.ogg', 'sound/voice/mfeelbetter.ogg', 'sound/weapons/sear.ogg', 'sound/ambience/antag/tatoralert.ogg', 'sound/mecha/nominal.ogg', 'sound/mecha/weapdestr.ogg', 'sound/mecha/critdestr.ogg', 'sound/mecha/imag_enh.ogg', 'sound/effects/adminhelp.ogg', 'sound/effects/alert.ogg', 'sound/effects/attackblob.ogg', 'sound/effects/bamf.ogg', 'sound/effects/blobattack.ogg', 'sound/effects/break_stone.ogg', 'sound/effects/bubbles.ogg', 'sound/effects/bubbles2.ogg', 'sound/effects/clang.ogg', 'sound/effects/clownstep2.ogg', 'sound/effects/dimensional_rend.ogg', 'sound/effects/doorcreaky.ogg', 'sound/effects/empulse.ogg', 'sound/effects/explosionfar.ogg', 'sound/effects/explosion1.ogg', 'sound/effects/grillehit.ogg', 'sound/effects/genetics.ogg', 'sound/effects/heartbeat.ogg', 'sound/effects/hyperspace_begin.ogg', 'sound/effects/hyperspace_end.ogg', 'sound/goonstation/effects/screech.ogg', 'sound/effects/phasein.ogg', 'sound/effects/picaxe1.ogg', 'sound/effects/sparks1.ogg', 'sound/effects/smoke.ogg', 'sound/effects/splat.ogg', 'sound/effects/snap.ogg', 'sound/effects/tendril_destroyed.ogg', 'sound/effects/supermatter.ogg', 'sound/misc/desceration-01.ogg', 'sound/misc/desceration-02.ogg', 'sound/misc/desceration-03.ogg', 'sound/misc/bloblarm.ogg', 'sound/goonstation/misc/airraid_loop.ogg', 'sound/misc/interference.ogg', 'sound/misc/notice1.ogg', 'sound/misc/notice2.ogg', 'sound/misc/sadtrombone.ogg', 'sound/misc/slip.ogg', 'sound/weapons/armbomb.ogg', 'sound/weapons/chainsaw.ogg', 'sound/weapons/emitter.ogg', 'sound/weapons/emitter2.ogg', 'sound/weapons/blade1.ogg', 'sound/weapons/bladeslice.ogg', 'sound/weapons/blastcannon.ogg', 'sound/weapons/blaster.ogg', 'sound/weapons/bulletflyby3.ogg', 'sound/weapons/circsawhit.ogg', 'sound/weapons/cqchit2.ogg', 'sound/weapons/drill.ogg', 'sound/weapons/genhit1.ogg', 'sound/weapons/gunshots/gunshot_silenced.ogg', 'sound/weapons/gunshots/gunshot.ogg', 'sound/weapons/handcuffs.ogg', 'sound/weapons/homerun.ogg', 'sound/weapons/kenetic_accel.ogg', 'sound/machines/fryer/deep_fryer_emerge.ogg', 'sound/machines/airlock_alien_prying.ogg', 'sound/machines/airlock_close.ogg', 'sound/machines/airlockforced.ogg', 'sound/machines/airlock_open.ogg', 'sound/machines/alarm.ogg', 'sound/machines/blender.ogg', 'sound/machines/boltsdown.ogg', 'sound/machines/boltsup.ogg', 'sound/machines/buzz-sigh.ogg', 'sound/machines/buzz-two.ogg', 'sound/machines/chime.ogg', 'sound/machines/defib_charge.ogg', 'sound/machines/defib_failed.ogg', 'sound/machines/defib_ready.ogg', 'sound/machines/defib_zap.ogg', 'sound/machines/deniedbeep.ogg', 'sound/machines/ding.ogg', 'sound/machines/disposalflush.ogg', 'sound/machines/door_close.ogg', 'sound/machines/door_open.ogg', 'sound/machines/engine_alert1.ogg', 'sound/machines/engine_alert2.ogg', 'sound/machines/hiss.ogg', 'sound/machines/honkbot_evil_laugh.ogg', 'sound/machines/juicer.ogg', 'sound/machines/ping.ogg', 'sound/ambience/signal.ogg', 'sound/machines/synth_no.ogg', 'sound/machines/synth_yes.ogg', 'sound/machines/terminal_alert.ogg', 'sound/machines/twobeep.ogg', 'sound/machines/ventcrawl.ogg', 'sound/machines/warning-buzzer.ogg', 'sound/ai/outbreak5.ogg', 'sound/ai/outbreak7.ogg', 'sound/ai/alert.ogg', 'sound/ai/radiation.ogg', 'sound/ai/eshuttle_call.ogg', 'sound/ai/eshuttle_dock.ogg', 'sound/ai/eshuttle_recall.ogg', 'sound/ai/aimalf.ogg', 'sound/ambience/ambigen1.ogg', 'sound/ambience/ambigen3.ogg', 'sound/ambience/ambigen4.ogg', 'sound/ambience/ambigen5.ogg', 'sound/ambience/ambigen6.ogg', 'sound/ambience/ambigen10.ogg', 'sound/hallucinations/over_here1.ogg', 'sound/hallucinations/over_here2.ogg', 'sound/hallucinations/over_here3.ogg') //hahahaha fuck you code divers /mob/living/simple_animal/hostile/netherworld/migo/say(message, bubble_type, list/spans = list(), sanitize = TRUE, datum/language/language = null, ignore_spam = FALSE, forced = null) ..() diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/retaliate.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/retaliate.dm index 7afaf3679c2..bbc45c0b7fd 100644 --- a/code/modules/mob/living/simple_animal/hostile/retaliate/retaliate.dm +++ b/code/modules/mob/living/simple_animal/hostile/retaliate/retaliate.dm @@ -12,10 +12,6 @@ var/obj/mecha/M = A if(M.occupant) return A - else if(isspacepod(A)) - var/obj/spacepod/S = A - if(S.pilot) - return A /mob/living/simple_animal/hostile/retaliate/ListTargets() if(!enemies.len) @@ -39,11 +35,6 @@ if(M.occupant) enemies |= M enemies |= M.occupant - else if(isspacepod(A)) - var/obj/spacepod/S = A - if(S.pilot) - enemies |= S - enemies |= S.pilot for(var/mob/living/simple_animal/hostile/retaliate/H in around) if(faction_check_mob(H) && !attack_same && !H.attack_same) diff --git a/code/modules/mob/living/simple_animal/hostile/syndicate.dm b/code/modules/mob/living/simple_animal/hostile/syndicate.dm index b69836d1f26..18dcacdfbb8 100644 --- a/code/modules/mob/living/simple_animal/hostile/syndicate.dm +++ b/code/modules/mob/living/simple_animal/hostile/syndicate.dm @@ -139,8 +139,6 @@ seen_enemy_name = target.name if(istype(target, /obj/mecha)) depotarea.saw_mech(target) - if(istype(target, /obj/spacepod)) - depotarea.saw_pod(target) if(depotarea.list_includes(target, depotarea.dead_list)) seen_revived_enemy = TRUE raise_alert("[name] reports intruder [target] has returned from death!") diff --git a/code/modules/mob/living/simple_animal/hostile/terror_spiders/terror_ai.dm b/code/modules/mob/living/simple_animal/hostile/terror_spiders/terror_ai.dm index c3e0c9a0511..3c5772017d2 100644 --- a/code/modules/mob/living/simple_animal/hostile/terror_spiders/terror_ai.dm +++ b/code/modules/mob/living/simple_animal/hostile/terror_spiders/terror_ai.dm @@ -30,7 +30,7 @@ else // Target prioritization by spider type. BRUTE spiders prioritize lower armor values, POISON spiders prioritize poisonable targets if(ai_target_method == TS_DAMAGE_BRUTE) - var/theirarmor = C.getarmor(type = "melee") + var/theirarmor = C.getarmor(type = MELEE) // Example values: Civilian: 2, Engineer w/ Hardsuit: 10, Sec Officer with armor: 19, HoS: 48, Deathsquad: 80 if(theirarmor < 10) targets1 += C @@ -68,8 +68,6 @@ targets2 += M else targets3 += M - for(var/obj/spacepod/S in view(src, vision_range)) - targets3 += S if(targets1.len) return targets1 if(targets2.len) @@ -188,11 +186,6 @@ if(M.occupant) enemies |= M enemies |= M.occupant - else if(istype(A, /obj/spacepod)) - var/obj/spacepod/M = A - if(M.pilot) - enemies |= M - enemies |= M.pilot for(var/mob/living/simple_animal/hostile/poison/terror_spider/H in ts_nearby) var/retaliate_faction_check = 0 for(var/F in faction) diff --git a/code/modules/mob/living/simple_animal/parrot.dm b/code/modules/mob/living/simple_animal/parrot.dm index 002d3b9f41a..fd3b3227d0c 100644 --- a/code/modules/mob/living/simple_animal/parrot.dm +++ b/code/modules/mob/living/simple_animal/parrot.dm @@ -491,7 +491,7 @@ var/mob/living/carbon/human/H = parrot_interest var/obj/item/organ/external/affecting = H.get_organ(ran_zone(pick(parrot_dam_zone))) - H.apply_damage(damage, BRUTE, affecting, H.run_armor_check(affecting, "melee"), sharp = TRUE) + H.apply_damage(damage, BRUTE, affecting, H.run_armor_check(affecting, MELEE), sharp = TRUE) custom_emote(EMOTE_VISUAL, pick("pecks [H]'s [affecting].", "cuts [H]'s [affecting] with its talons.")) else L.adjustBruteLoss(damage) diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index f5c812e7d83..d1ce3158bcd 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -397,10 +397,6 @@ var/obj/mecha/M = the_target if(M.occupant) return FALSE - if(isspacepod(the_target)) - var/obj/spacepod/S = the_target - if(S.pilot) - return FALSE return TRUE /mob/living/simple_animal/handle_fire() diff --git a/code/modules/mob/living/simple_animal/slime/emote.dm b/code/modules/mob/living/simple_animal/slime/emote.dm index 0eceec7a124..14ce0de54c8 100644 --- a/code/modules/mob/living/simple_animal/slime/emote.dm +++ b/code/modules/mob/living/simple_animal/slime/emote.dm @@ -19,10 +19,10 @@ if(silent) return if(src.client) - if(client.prefs.muted & MUTE_IC) + if(check_mute(client.ckey, MUTE_IC)) to_chat(src, "You cannot send IC messages (muted).") return - if(src.client.handle_spam_prevention(message,MUTE_IC)) + if(src.client.handle_spam_prevention(message, MUTE_IC)) return if(stat) return diff --git a/code/modules/mob/living/status_procs.dm b/code/modules/mob/living/status_procs.dm index fab75c91507..c7a11c933b9 100644 --- a/code/modules/mob/living/status_procs.dm +++ b/code/modules/mob/living/status_procs.dm @@ -365,9 +365,6 @@ // STUN /mob/living/Stun(amount, updating = 1, force = 0) - if(status_flags & CANSTUN || force) - if(absorb_stun(amount, force)) - return FALSE return SetStunned(max(stunned, amount), updating, force) /mob/living/SetStunned(amount, updating = 1, force = 0) //if you REALLY need to set stun to a set amount without the whole "can't go below current stunned" @@ -377,6 +374,8 @@ . = STATUS_UPDATE_NONE if(status_flags & CANSTUN || force) + if(absorb_stun(amount, force)) + return STATUS_UPDATE_NONE stunned = max(amount, 0) if(updating) update_canmove() @@ -405,9 +404,6 @@ // WEAKEN /mob/living/Weaken(amount, updating = 1, force = 0) - if(status_flags & CANWEAKEN || force) - if(absorb_stun(amount, force)) - return FALSE return SetWeakened(max(weakened, amount), updating, force) /mob/living/SetWeakened(amount, updating = 1, force = 0) @@ -416,6 +412,8 @@ updating = FALSE . = STATUS_UPDATE_NONE if(status_flags & CANWEAKEN || force) + if(absorb_stun(amount, force)) + return STATUS_UPDATE_NONE weakened = max(amount, 0) if(updating) update_canmove() //updates lying, canmove and icons diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index f801c0f072f..c6cceea3842 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -1351,17 +1351,21 @@ GLOBAL_LIST_INIT(slot_equipment_priority, list( \ return FALSE //overridden in living.dm /mob/proc/spin(spintime, speed) - set waitfor = 0 + set waitfor = FALSE if(!spintime || !speed || spintime > 100) CRASH("Aborted attempted call of /mob/proc/spin with invalid args ([spintime],[speed]) which could have frozen the server.") - var/end_time = world.time + spintime - var/spin_dir = prob(50) - while(world.time <= end_time) + while(spintime >= speed) sleep(speed) - if(spin_dir) - dir = turn(dir, 90) - else - dir = turn(dir, -90) + switch(dir) + if(NORTH) + setDir(EAST) + if(SOUTH) + setDir(WEST) + if(EAST) + setDir(SOUTH) + if(WEST) + setDir(NORTH) + spintime -= speed /mob/proc/is_literate() return FALSE @@ -1479,7 +1483,7 @@ GLOBAL_LIST_INIT(slot_equipment_priority, list( \ MA.plane = GAME_PLANE pic.appearance = MA flick_overlay(pic, list(client), 10) - + GLOBAL_LIST_INIT(holy_areas, typecacheof(list( /area/chapel diff --git a/code/modules/mob/mob_grab.dm b/code/modules/mob/mob_grab.dm index 61118a32cdb..72838011c17 100644 --- a/code/modules/mob/mob_grab.dm +++ b/code/modules/mob/mob_grab.dm @@ -342,7 +342,7 @@ var/obj/item/clothing/hat = attacker.head if(istype(hat)) damage += hat.force * 3 - affecting.apply_damage(damage*rand(90, 110)/100, BRUTE, "head", affected.run_armor_check(affecting, "melee")) + affecting.apply_damage(damage*rand(90, 110)/100, BRUTE, "head", affected.run_armor_check(affecting, MELEE)) playsound(assailant.loc, "swing_hit", 25, 1, -1) add_attack_logs(assailant, affecting, "Headbutted") return diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm index 8276d06f126..2d103da8be5 100644 --- a/code/modules/mob/mob_helpers.dm +++ b/code/modules/mob/mob_helpers.dm @@ -13,6 +13,7 @@ return 0 /mob/proc/get_screen_colour() + return /mob/proc/update_client_colour(time = 10) //Update the mob's client.color with an animation the specified time in length. if(!client) //No client_colour without client. If the player logs back in they'll be back through here anyway. @@ -31,6 +32,19 @@ else if(eyes) //If they're not, check to see if their eyes got one of them there colour matrices. Will be null if eyes are robotic/the mob isn't colourblind and they have no default colour matrix. return eyes.get_colourmatrix() +/** + * Flash up a color as an overlay on a player's screen, then fade back to normal. + * + * Arguments: + * * flash_color - The color to overlay on the screen. + * * flash_time - The time it takes for the color to fade back to normal. + */ +/mob/proc/flash_screen_color(flash_color, flash_time) + if(!client) + return + client.color = flash_color + INVOKE_ASYNC(client, /client/.proc/colour_transition, get_screen_colour(), flash_time) + /proc/ismindshielded(A) //Checks to see if the person contains a mindshield implant, then checks that the implant is actually inside of them for(var/obj/item/implant/mindshield/L in A) if(L && L.implanted) @@ -670,13 +684,13 @@ GLOBAL_LIST_INIT(intents, list(INTENT_HELP,INTENT_DISARM,INTENT_GRAB,INTENT_HARM /mob/proc/has_valid_preferences() if(!client) return FALSE //Not sure how this would get run without the mob having a client, but let's just be safe. - if(client.prefs.alternate_option != RETURN_TO_LOBBY) + if(client.prefs.active_character.alternate_option != RETURN_TO_LOBBY) return TRUE // If they have antags enabled, they're potentially doing this on purpose instead of by accident. Notify admins if so. var/has_antags = FALSE if(client.prefs.be_special.len > 0) has_antags = TRUE - if(!client.prefs.check_any_job()) + if(!client.prefs.active_character.check_any_job()) to_chat(src, "You have no jobs enabled, along with return to lobby if job is unavailable. This makes you ineligible for any round start role, please update your job preferences.") if(has_antags) log_admin("[src.ckey] just got booted back to lobby with no jobs, but antags enabled.") diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm index ec54e6aa9c4..9370829c746 100644 --- a/code/modules/mob/new_player/new_player.dm +++ b/code/modules/mob/new_player/new_player.dm @@ -42,7 +42,7 @@ /mob/new_player/proc/new_player_panel_proc() - var/real_name = client.prefs.real_name + var/real_name = client.prefs.active_character.real_name if(client.prefs.toggles2 & PREFTOGGLE_2_RANDOMSLOT) real_name = "Random Character Slot" var/output = "

    Setup Character
    [real_name]

    " @@ -184,13 +184,13 @@ to_chat(src, "Now teleporting.") observer.forceMove(O.loc) observer.timeofdeath = world.time // Set the time of death so that the respawn timer works correctly. - client.prefs.update_preview_icon(1) - observer.icon = client.prefs.preview_icon + client.prefs.active_character.update_preview_icon(1) + observer.icon = client.prefs.active_character.preview_icon observer.alpha = 127 - if(client.prefs.be_random_name) - client.prefs.real_name = random_name(client.prefs.gender,client.prefs.species) - observer.real_name = client.prefs.real_name + if(client.prefs.active_character.be_random_name) + client.prefs.active_character.real_name = random_name(client.prefs.active_character.gender,client.prefs.active_character.species) + observer.real_name = client.prefs.active_character.real_name observer.name = observer.real_name observer.key = key QDEL_NULL(mind) @@ -212,10 +212,10 @@ if(!SSticker || SSticker.current_state != GAME_STATE_PLAYING) to_chat(usr, "The round is either not ready, or has already finished...") return - if(client.prefs.species in GLOB.whitelisted_species) + if(client.prefs.active_character.species in GLOB.whitelisted_species) - if(!is_alien_whitelisted(src, client.prefs.species)) - to_chat(src, alert("You are currently not whitelisted to play [client.prefs.species].")) + if(!is_alien_whitelisted(src, client.prefs.active_character.species)) + to_chat(src, alert("You are currently not whitelisted to play [client.prefs.active_character.species].")) return FALSE LateChoices() @@ -232,12 +232,12 @@ if(client.prefs.toggles2 & PREFTOGGLE_2_RANDOMSLOT) client.prefs.load_random_character_slot(client) - if(client.prefs.species in GLOB.whitelisted_species) - if(!is_alien_whitelisted(src, client.prefs.species)) - to_chat(src, alert("You are currently not whitelisted to play [client.prefs.species].")) + if(client.prefs.active_character.species in GLOB.whitelisted_species) + if(!is_alien_whitelisted(src, client.prefs.active_character.species)) + to_chat(src, alert("You are currently not whitelisted to play [client.prefs.active_character.species].")) return FALSE - AttemptLateSpawn(href_list["SelectedJob"],client.prefs.spawnpoint) + AttemptLateSpawn(href_list["SelectedJob"],client.prefs.active_character.spawnpoint) return if(!ready && href_list["preference"]) @@ -359,7 +359,7 @@ character.buckled.dir = character.dir character = SSjobs.EquipRank(character, rank, 1) //equips the human - EquipCustomItems(character) + SSticker.equip_cuis(character) // Gives them their CUIs SSticker.mode.latespawn(character) @@ -543,9 +543,9 @@ new_character.lastarea = get_area(loc) if(SSticker.random_players || appearance_isbanned(new_character)) - client.prefs.random_character() - client.prefs.real_name = random_name(client.prefs.gender) - client.prefs.copy_to(new_character) + client.prefs.active_character.randomise() + client.prefs.active_character.real_name = random_name(client.prefs.active_character.gender) + client.prefs.active_character.copy_to(new_character) stop_sound_channel(CHANNEL_LOBBYMUSIC) @@ -569,19 +569,19 @@ // This is to check that the player only has preferences set that they're supposed to /mob/new_player/proc/check_prefs_are_sane() var/datum/species/chosen_species - if(client.prefs.species) - chosen_species = GLOB.all_species[client.prefs.species] + if(client.prefs.active_character.species) + chosen_species = GLOB.all_species[client.prefs.active_character.species] if(!(chosen_species && (is_species_whitelisted(chosen_species) || has_admin_rights()))) // Have to recheck admin due to no usr at roundstart. Latejoins are fine though. - log_runtime(EXCEPTION("[src] had species [client.prefs.species], though they weren't supposed to. Setting to Human."), src) - client.prefs.species = "Human" + log_runtime(EXCEPTION("[src] had species [client.prefs.active_character.species], though they weren't supposed to. Setting to Human."), src) + client.prefs.active_character.species = "Human" var/datum/language/chosen_language - if(client.prefs.language) - chosen_language = GLOB.all_languages[client.prefs.language] - if((chosen_language == null && client.prefs.language != "None") || (chosen_language && chosen_language.flags & RESTRICTED)) - log_runtime(EXCEPTION("[src] had language [client.prefs.language], though they weren't supposed to. Setting to None."), src) - client.prefs.language = "None" + if(client.prefs.active_character.language) + chosen_language = GLOB.all_languages[client.prefs.active_character.language] + if((chosen_language == null && client.prefs.active_character.language != "None") || (chosen_language && chosen_language.flags & RESTRICTED)) + log_runtime(EXCEPTION("[src] had language [client.prefs.active_character.language], though they weren't supposed to. Setting to None."), src) + client.prefs.active_character.language = "None" /mob/new_player/proc/ViewManifest() GLOB.generic_crew_manifest.ui_interact(usr, state = GLOB.always_state) @@ -607,7 +607,7 @@ /mob/new_player/get_gender() if(!client || !client.prefs) ..() - return client.prefs.gender + return client.prefs.active_character.gender /mob/new_player/is_ready() return ready && ..() diff --git a/code/modules/mob/say.dm b/code/modules/mob/say.dm index e199e81eb69..86e3a44aa8a 100644 --- a/code/modules/mob/say.dm +++ b/code/modules/mob/say.dm @@ -46,12 +46,12 @@ /mob/proc/say_dead(message) if(client) - if(!client.holder) + if(!check_rights(R_ADMIN, FALSE)) if(!GLOB.dsay_enabled) to_chat(src, "Deadchat is globally muted.") return - if(client.prefs.muted & MUTE_DEADCHAT) + if(check_mute(client.ckey, MUTE_DEADCHAT)) to_chat(src, "You cannot talk in deadchat (muted).") return diff --git a/code/modules/newscaster/obj/newscaster.dm b/code/modules/newscaster/obj/newscaster.dm index cff3ac16d13..d257f2ba06d 100644 --- a/code/modules/newscaster/obj/newscaster.dm +++ b/code/modules/newscaster/obj/newscaster.dm @@ -73,9 +73,7 @@ /datum/job/judge, /datum/job/blueshield, /datum/job/nanotrasenrep, - /datum/job/pilot, /datum/job/brigdoc, - /datum/job/mechanic, /datum/job/barber, /datum/job/chaplain, /datum/job/ntnavyofficer, diff --git a/code/modules/ninja/suit/head.dm b/code/modules/ninja/suit/head.dm index 9d183f4f1a1..b7e6529609a 100644 --- a/code/modules/ninja/suit/head.dm +++ b/code/modules/ninja/suit/head.dm @@ -5,5 +5,5 @@ name = "ninja hood" icon_state = "s-ninja" item_state = "s-ninja_hood" - armor = list("melee" = 60, "bullet" = 50, "laser" = 30,"energy" = 15, "bomb" = 30, "bio" = 30, "rad" = 25, "fire" = 100, "acid" = 100) + armor = list(MELEE = 60, BULLET = 50, LASER = 30, ENERGY = 15, BOMB = 30, BIO = 30, RAD = 25, FIRE = 100, ACID = 100) blockTracking = 1 diff --git a/code/modules/ninja/suit/shoes.dm b/code/modules/ninja/suit/shoes.dm index 8d79cf6d9ae..c70af20b006 100644 --- a/code/modules/ninja/suit/shoes.dm +++ b/code/modules/ninja/suit/shoes.dm @@ -5,7 +5,7 @@ icon_state = "s-ninja" permeability_coefficient = 0.01 flags = NOSLIP - armor = list("melee" = 60, "bullet" = 50, "laser" = 30,"energy" = 15, "bomb" = 30, "bio" = 30, "rad" = 30, "fire" = 100, "acid" = 100) + armor = list(MELEE = 60, BULLET = 50, LASER = 30, ENERGY = 15, BOMB = 30, BIO = 30, RAD = 30, FIRE = 100, ACID = 100) cold_protection = FEET min_cold_protection_temperature = SHOES_MIN_TEMP_PROTECT heat_protection = FEET diff --git a/code/modules/ninja/suit/suit.dm b/code/modules/ninja/suit/suit.dm index 0d965f8b483..619d93da659 100644 --- a/code/modules/ninja/suit/suit.dm +++ b/code/modules/ninja/suit/suit.dm @@ -14,7 +14,7 @@ Contents: item_state = "s-ninja_suit" allowed = list(/obj/item/gun, /obj/item/ammo_box, /obj/item/melee/baton, /obj/item/tank/internals, /obj/item/stock_parts/cell) slowdown = 0 - armor = list("melee" = 60, "bullet" = 50, "laser" = 30,"energy" = 15, "bomb" = 30, "bio" = 30, "rad" = 30, "fire" = 100, "acid" = 100) + armor = list(MELEE = 60, BULLET = 50, LASER = 30, ENERGY = 15, BOMB = 30, BIO = 30, RAD = 30, FIRE = 100, ACID = 100) var/suitActive = 0 var/suitBusy = 0 diff --git a/code/modules/paperwork/faxmachine.dm b/code/modules/paperwork/faxmachine.dm index 76a5dd4dc03..b36df828017 100644 --- a/code/modules/paperwork/faxmachine.dm +++ b/code/modules/paperwork/faxmachine.dm @@ -40,11 +40,15 @@ GLOBAL_LIST_EMPTY(fax_blacklist) /// Target department to send outgoing faxes to var/destination -/obj/machinery/photocopier/faxmachine/New() - ..() +/obj/machinery/photocopier/faxmachine/Initialize(mapload) + . = ..() GLOB.allfaxes += src update_network() +/obj/machinery/photocopier/faxmachine/Destroy() + GLOB.allfaxes -= src + return ..() + /obj/machinery/photocopier/faxmachine/proc/update_network() if(department != "Unknown") if(!(("[department]" in GLOB.alldepartments) || ("[department]" in GLOB.hidden_departments) || ("[department]" in GLOB.admin_departments) || ("[department]" in GLOB.hidden_admin_departments))) @@ -52,22 +56,24 @@ GLOBAL_LIST_EMPTY(fax_blacklist) /obj/machinery/photocopier/faxmachine/longrange name = "long range fax machine" - icon_state = "longfax" - insert_anim = "longfaxsend" - receive_anim = "longfaxreceive" fax_network = "Central Command Quantum Entanglement Network" long_range_enabled = TRUE +/obj/machinery/photocopier/faxmachine/longrange/Initialize(mapload) + . = ..() + add_overlay("longfax") + /obj/machinery/photocopier/faxmachine/longrange/syndie name = "syndicate long range fax machine" - icon_state = "fax" - insert_anim = "faxsend" - receive_anim = "faxsend" emagged = TRUE syndie_restricted = TRUE req_one_access = list(ACCESS_SYNDICATE) //No point setting fax network, being emagged overrides that anyway. +/obj/machinery/photocopier/faxmachine/longrange/syndie/Initialize(mapload) + . = ..() + add_overlay("syndiefax") + /obj/machinery/photocopier/faxmachine/longrange/syndie/update_network() if(department != "Unknown") GLOB.hidden_departments |= department diff --git a/code/modules/paperwork/pen.dm b/code/modules/paperwork/pen.dm index 25c83556882..dd5f68eb739 100644 --- a/code/modules/paperwork/pen.dm +++ b/code/modules/paperwork/pen.dm @@ -140,6 +140,7 @@ var/on = 0 var/brightness_on = 2 light_color = LIGHT_COLOR_RED + armour_penetration = 20 /obj/item/pen/edagger/attack_self(mob/living/user) if(on) diff --git a/code/modules/pda/PDA.dm b/code/modules/pda/PDA.dm old mode 100644 new mode 100755 index d6aaaebf0f6..06aa4988d5d --- a/code/modules/pda/PDA.dm +++ b/code/modules/pda/PDA.dm @@ -15,7 +15,7 @@ GLOBAL_LIST_EMPTY(PDAs) item_state = "electronic" w_class = WEIGHT_CLASS_TINY slot_flags = SLOT_ID | SLOT_BELT | SLOT_PDA - armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 100) + armor = list(MELEE = 0, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 100) resistance_flags = FIRE_PROOF | ACID_PROOF origin_tech = "programming=2" diff --git a/code/modules/pda/mob_hunt_game_app.dm b/code/modules/pda/mob_hunt_game_app.dm index 5db744c37ef..fe4ef7962f3 100644 --- a/code/modules/pda/mob_hunt_game_app.dm +++ b/code/modules/pda/mob_hunt_game_app.dm @@ -28,6 +28,11 @@ disconnect("Program Terminated") STOP_PROCESSING(SSobj, pda) +/datum/data/pda/app/mob_hunter_game/Destroy() + STOP_PROCESSING(SSobj, pda) + SSmob_hunt.connected_clients -= src + return ..() + /datum/data/pda/app/mob_hunter_game/proc/scan_nearby() if(!SSmob_hunt || !connected) return @@ -74,13 +79,14 @@ return scan_nearby() -/datum/data/pda/app/mob_hunter_game/proc/register_capture(datum/mob_hunt/captured, wild = 0) +/datum/data/pda/app/mob_hunter_game/proc/register_capture(datum/mob_hunt/captured, wild = FALSE) if(!captured) - return 0 - my_collection.Add(captured) + return FALSE + my_collection += captured + RegisterSignal(captured, COMSIG_PARENT_QDELETING, .proc/remove_mob) if(wild) wild_captures++ - return 1 + return TRUE /datum/data/pda/app/mob_hunter_game/update_ui(mob/user, list/data) if(!SSmob_hunt || !(src in SSmob_hunt.connected_clients)) @@ -138,12 +144,27 @@ card.forceMove(get_turf(pda)) remove_mob() -/datum/data/pda/app/mob_hunter_game/proc/remove_mob() - if(!my_collection.len) +/** + * Removes a Nanomob from the [my_collection] list. + * + * The Nanomob that is currently selected in the app ([current_index]) will be removed from the list unless a `mob_override` argument is given, in which case that will be removed instead. + * + * Arguments: + * * mob_override - A specific Nanomob to remove from the list. (Optional) + */ +/datum/data/pda/app/mob_hunter_game/proc/remove_mob(datum/mob_hunt/mob_override = null) + SIGNAL_HANDLER + if(!length(my_collection)) return - my_collection.Remove(my_collection[current_index]) - if(current_index > my_collection.len) - current_index = my_collection.len + + if(mob_override) + my_collection -= mob_override + else + my_collection -= my_collection[current_index] + + var/collection_length = length(my_collection) + if(current_index > collection_length) + current_index = collection_length /datum/data/pda/app/mob_hunter_game/proc/set_trap() if(!my_collection.len || !pda || !hacked) diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm index ffb92c12cc4..7022852928f 100644 --- a/code/modules/power/apc.dm +++ b/code/modules/power/apc.dm @@ -155,7 +155,7 @@ /obj/machinery/power/apc/New(turf/loc, direction, building = 0) if(!armor) - armor = list("melee" = 20, "bullet" = 20, "laser" = 10, "energy" = 100, "bomb" = 30, "bio" = 100, "rad" = 100, "fire" = 90, "acid" = 50) + armor = list(MELEE = 20, BULLET = 20, LASER = 10, ENERGY = 100, BOMB = 30, BIO = 100, RAD = 100, FIRE = 90, ACID = 50) ..() GLOB.apcs += src GLOB.apcs = sortAtom(GLOB.apcs) diff --git a/code/modules/power/cable.dm b/code/modules/power/cable.dm index fcccefbf513..db7152b3505 100644 --- a/code/modules/power/cable.dm +++ b/code/modules/power/cable.dm @@ -35,6 +35,7 @@ By design, d1 is the smallest direction and d2 is the highest icon_state = "0-1" var/d1 = 0 var/d2 = 1 + plane = FLOOR_PLANE layer = WIRE_LAYER //Just below unary stuff, which is at 2.45 and above pipes, which are at 2.4 color = COLOR_RED @@ -68,9 +69,11 @@ By design, d1 is the smallest direction and d2 is the highest d2 = text2num(copytext( icon_state, dash+1 )) var/turf/T = get_turf(src) // hide if turf is not intact + LAZYADD(GLOB.cable_list, src) //add it to the global cable list + if(T.transparent_floor) + return if(level == 1) hide(T.intact) - LAZYADD(GLOB.cable_list, src) //add it to the global cable list /obj/structure/cable/Destroy() // called when a cable is deleted if(powernet) @@ -162,7 +165,8 @@ By design, d1 is the smallest direction and d2 is the highest // /obj/structure/cable/attackby(obj/item/W, mob/user) var/turf/T = get_turf(src) - if(T.intact) + if(T.transparent_floor || T.intact) + to_chat(user, "You can't interact with something that's under the floor!") return else if(istype(W, /obj/item/stack/cable_coil)) @@ -204,7 +208,8 @@ By design, d1 is the smallest direction and d2 is the highest /obj/structure/cable/wirecutter_act(mob/user, obj/item/I) . = TRUE var/turf/T = get_turf(src) - if(T.intact) + if(T.transparent_floor || T.intact) + to_chat(user, "You can't interact with something that's under the floor!") return if(!I.use_tool(src, user, 0, volume = I.tool_volume)) return @@ -703,7 +708,7 @@ GLOBAL_LIST_INIT(cable_coil_recipes, list (new/datum/stack_recipe/cable_restrain var/turf/T = get_turf(C) - if(!isturf(T) || T.intact) // sanity checks, also stop use interacting with T-scanner revealed cable + if(!isturf(T) || T.intact || T.transparent_floor) // sanity checks, also stop use interacting with T-scanner revealed cable return if(get_dist(C, user) > 1) // make sure it's close enough @@ -719,7 +724,7 @@ GLOBAL_LIST_INIT(cable_coil_recipes, list (new/datum/stack_recipe/cable_restrain // one end of the clicked cable is pointing towards us if(C.d1 == dirn || C.d2 == dirn) - if(U.intact) // can't place a cable if the floor is complete + if(U.intact || U.transparent_floor) // can't place a cable if the floor is complete to_chat(user, "You can't lay cable there unless the floor tiles are removed!") return else diff --git a/code/modules/power/cell.dm b/code/modules/power/cell.dm index 38575891d07..eae1047d0e0 100644 --- a/code/modules/power/cell.dm +++ b/code/modules/power/cell.dm @@ -284,6 +284,12 @@ charge = 0 update_icon() +/obj/item/stock_parts/cell/bluespace/charging + name = "self-charging bluespace power cell" + desc = "An experimental, self-charging, transdimensional power cell." + origin_tech = "powerstorage=10;bluespace=10" + self_recharge = TRUE + /obj/item/stock_parts/cell/infinite name = "infinite-capacity power cell!" icon_state = "icell" @@ -294,7 +300,7 @@ chargerate = 30000 /obj/item/stock_parts/cell/infinite/use() - return 1 + return TRUE /obj/item/stock_parts/cell/infinite/abductor name = "void core" diff --git a/code/modules/power/lighting.dm b/code/modules/power/lighting.dm index cb605bf2beb..0ec6651e95a 100644 --- a/code/modules/power/lighting.dm +++ b/code/modules/power/lighting.dm @@ -26,7 +26,7 @@ anchored = TRUE layer = 5 max_integrity = 200 - armor = list("melee" = 50, "bullet" = 10, "laser" = 10, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 50) + armor = list(MELEE = 50, BULLET = 10, LASER = 10, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 80, ACID = 50) /// Construction stage (1 = Empty frame | 2 = Wired frame | 3 = Completed frame) var/stage = 1 /// Light bulb type diff --git a/code/modules/power/singularity/field_generator.dm b/code/modules/power/singularity/field_generator.dm index d8d8ce5c0e1..83e509055e0 100644 --- a/code/modules/power/singularity/field_generator.dm +++ b/code/modules/power/singularity/field_generator.dm @@ -29,7 +29,7 @@ field_generator power level display use_power = NO_POWER_USE max_integrity = 500 //100% immune to lasers and energy projectiles since it absorbs their energy. - armor = list("melee" = 25, "bullet" = 10, "laser" = 100, "energy" = 100, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 50, "acid" = 70) + armor = list(MELEE = 25, BULLET = 10, LASER = 100, ENERGY = 100, BOMB = 0, BIO = 0, RAD = 0, FIRE = 50, ACID = 70) var/const/num_power_levels = 6 // Total number of power level icon has var/power_level = 0 var/active = FG_OFFLINE @@ -144,7 +144,7 @@ field_generator power level display ..() /obj/machinery/field/generator/bullet_act(obj/item/projectile/Proj) - if(Proj.flag != "bullet" && !Proj.nodamage) + if(Proj.flag != BULLET && !Proj.nodamage) power = min(power + Proj.damage, field_generator_max_power) check_power_level() return 0 diff --git a/code/modules/power/singularity/narsie.dm b/code/modules/power/singularity/narsie.dm index e4f43373974..475b4f7db47 100644 --- a/code/modules/power/singularity/narsie.dm +++ b/code/modules/power/singularity/narsie.dm @@ -60,7 +60,8 @@ to_chat(cult_mind.current, "Current goal: Slaughter the heretics!") ..() -/obj/singularity/narsie/large/attack_ghost(mob/dead/observer/user) +/obj/singularity/narsie/large/attack_ghost(mob/dead/observer/user as mob) + user.forceMove(get_turf(src)) //make_new_construct spawns harvesters at observers locations, could be used to get into admin rooms/CC make_new_construct(/mob/living/simple_animal/hostile/construct/harvester, user, cult_override = TRUE) new /obj/effect/particle_effect/smoke/sleeping(user.loc) diff --git a/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm b/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm index 0e1e9176642..a4478b831d8 100644 --- a/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm +++ b/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm @@ -67,7 +67,7 @@ So, hopefully this is helpful if any more icons are to be added/changed/wonderin anchored = 0 density = 1 max_integrity = 500 - armor = list("melee" = 30, "bullet" = 20, "laser" = 20, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 90, "acid" = 80) + armor = list(MELEE = 30, BULLET = 20, LASER = 20, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 90, ACID = 80) var/obj/machinery/particle_accelerator/control_box/master = null var/construction_state = 0 var/reference = null diff --git a/code/modules/power/solar.dm b/code/modules/power/solar.dm index 6c3ac951b12..172836f6cdd 100644 --- a/code/modules/power/solar.dm +++ b/code/modules/power/solar.dm @@ -352,8 +352,6 @@ overlays += "[icon_state]_broken" else overlays += icon_screen - if(cdir > -1) - overlays += image('icons/obj/computer.dmi', "solcon-o", FLY_LAYER, angle2dir(cdir)) /obj/machinery/power/solar_control/attack_ai(mob/user as mob) add_hiddenprint(user) diff --git a/code/modules/power/supermatter/supermatter.dm b/code/modules/power/supermatter/supermatter.dm index 996817666ca..280e8da9f03 100644 --- a/code/modules/power/supermatter/supermatter.dm +++ b/code/modules/power/supermatter/supermatter.dm @@ -221,7 +221,7 @@ return var/mob/living/carbon/human/H = user var/immune = istype(H.glasses, /obj/item/clothing/glasses/meson) - if(!immune && (get_dist(user, src) < HALLUCINATION_RANGE(power))) + if(!immune && !HAS_TRAIT(H, TRAIT_MESON_VISION) && (get_dist(user, src) < HALLUCINATION_RANGE(power))) . += "You get headaches just from looking at it." /obj/machinery/power/supermatter_crystal/detailed_examine() @@ -537,7 +537,7 @@ //Makes em go mad and accumulate rads. for(var/mob/living/carbon/human/l in view(src, HALLUCINATION_RANGE(power))) // If they can see it without mesons on. Bad on them. - if(!istype(l.glasses, /obj/item/clothing/glasses/meson)) + if(!istype(l.glasses, /obj/item/clothing/glasses/meson) && !HAS_TRAIT(l, TRAIT_MESON_VISION)) var/D = sqrt(1 / max(1, get_dist(l, src))) l.hallucination += power * hallucination_power * D l.hallucination = clamp(l.hallucination, 0, 200) @@ -639,7 +639,7 @@ return FALSE if(!istype(Proj.firer, /obj/machinery/power/emitter) && power_changes) investigate_log("has been hit by [Proj] fired by [key_name(Proj.firer)]", "supermatter") - if(Proj.flag != "bullet") + if(Proj.flag != BULLET) if(power_changes) //This needs to be here I swear power += Proj.damage * bullet_energy if(!has_been_powered) diff --git a/code/modules/power/terminal.dm b/code/modules/power/terminal.dm index 584079b3c45..d8fc709a656 100644 --- a/code/modules/power/terminal.dm +++ b/code/modules/power/terminal.dm @@ -15,6 +15,8 @@ /obj/machinery/power/terminal/Initialize(mapload) . = ..() var/turf/T = get_turf(src) + if(T.transparent_floor) + return if(level == 1) hide(T.intact) diff --git a/code/modules/power/treadmill.dm b/code/modules/power/treadmill.dm index 2ffc4f301f4..2d35e35d532 100644 --- a/code/modules/power/treadmill.dm +++ b/code/modules/power/treadmill.dm @@ -40,7 +40,7 @@ /obj/machinery/power/treadmill/proc/throw_off(atom/movable/A) // if 2fast, throw the person, otherwise they just slide off, if there's reasonable speed at all - if(speed) + if(speed && A.move_resist < INFINITY) var/dist = max(throw_dist * speed / MAX_SPEED, 1) A.throw_at(get_distant_turf(get_turf(src), reverse_direction(dir), dist), A.throw_range, A.throw_speed, src, 1) diff --git a/code/modules/projectiles/ammunition/ammo_casings.dm b/code/modules/projectiles/ammunition/ammo_casings.dm index 6236b8a42ab..fc1b3594bad 100644 --- a/code/modules/projectiles/ammunition/ammo_casings.dm +++ b/code/modules/projectiles/ammunition/ammo_casings.dm @@ -86,7 +86,7 @@ muzzle_flash_range = MUZZLE_FLASH_RANGE_NORMAL /obj/item/ammo_casing/c46x30mm/ap - projectile_type = /obj/item/projectile/bullet/armourpiercing + projectile_type = /obj/item/projectile/bullet/armourpiercing/wt550 /obj/item/ammo_casing/c46x30mm/tox projectile_type = /obj/item/projectile/bullet/toxinbullet diff --git a/code/modules/projectiles/ammunition/energy.dm b/code/modules/projectiles/ammunition/energy.dm index 18ed273ff23..049bf13c174 100644 --- a/code/modules/projectiles/ammunition/energy.dm +++ b/code/modules/projectiles/ammunition/energy.dm @@ -271,6 +271,17 @@ delay = 50 select_name = "snipe" +/obj/item/ammo_casing/energy/emitter + projectile_type = /obj/item/projectile/beam/emitter + muzzle_flash_color = LIGHT_COLOR_GREEN + fire_sound = 'sound/weapons/emitter.ogg' + e_cost = 100 + delay = 2 SECONDS // Lasers fire twice every second for 40 dps, this fires every 2 seconds for 15 dps. Seems fair, since every cyborg will have this with more shots? + select_name = "emitter" + +/obj/item/ammo_casing/energy/emitter/cyborg + e_cost = 500 // about 28 shots on an engineering borg from a borging machine, assuming some power is used for lights / movement. May need to change. + /obj/item/ammo_casing/energy/bsg projectile_type = /obj/item/projectile/energy/bsg muzzle_flash_color = LIGHT_COLOR_DARKBLUE diff --git a/code/modules/projectiles/ammunition/magazines.dm b/code/modules/projectiles/ammunition/magazines.dm index 355972c8fda..e38451f6adf 100644 --- a/code/modules/projectiles/ammunition/magazines.dm +++ b/code/modules/projectiles/ammunition/magazines.dm @@ -110,7 +110,7 @@ /obj/item/ammo_box/magazine/internal/shot/com name = "combat shotgun internal magazine" - ammo_type = /obj/item/ammo_casing/shotgun/buckshot + ammo_type = /obj/item/ammo_casing/shotgun/beanbag max_ammo = 6 /obj/item/ammo_box/magazine/internal/shot/dual @@ -133,9 +133,6 @@ /obj/item/ammo_box/magazine/internal/shot/riot/short max_ammo = 3 -/obj/item/ammo_box/magazine/internal/shot/riot/buckshot - ammo_type = /obj/item/ammo_casing/shotgun/buckshot - /obj/item/ammo_box/magazine/internal/grenadelauncher name = "grenade launcher internal magazine" ammo_type = /obj/item/ammo_casing/a40mm diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index fc650f1810f..b69482fdf6c 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -403,7 +403,7 @@ return TRUE /obj/item/gun/extinguish_light() - if(gun_light.on) + if(gun_light?.on) toggle_gunlight() visible_message("[src]'s light fades and turns off.") diff --git a/code/modules/projectiles/guns/alien.dm b/code/modules/projectiles/guns/alien.dm index 135923c6ef6..c56db84d610 100644 --- a/code/modules/projectiles/guns/alien.dm +++ b/code/modules/projectiles/guns/alien.dm @@ -69,7 +69,7 @@ icon_state = "particle" damage = 60 damage_type = BRUTE - flag = "bullet" + flag = BULLET pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE weaken = 5 diff --git a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm index 8a30d27517a..fc19c2e12ed 100644 --- a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm +++ b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm @@ -36,7 +36,7 @@ . += "There is a [M.name] mod installed, using [M.cost]% capacity." /obj/item/gun/energy/kinetic_accelerator/attackby(obj/item/I, mob/user) - if(istype(I, /obj/item/borg/upgrade/modkit)) + if(istype(I, /obj/item/borg/upgrade/modkit) && max_mod_capacity) var/obj/item/borg/upgrade/modkit/MK = I MK.install(src, user) else @@ -44,6 +44,8 @@ /obj/item/gun/energy/kinetic_accelerator/crowbar_act(mob/user, obj/item/I) . = TRUE + if(!max_mod_capacity) + return if(!modkits.len) to_chat(user, "There are no modifications currently installed.") return @@ -190,7 +192,7 @@ icon_state = null damage = 40 damage_type = BRUTE - flag = "bomb" + flag = BOMB range = 3 var/pressure_decrease_active = FALSE @@ -270,7 +272,11 @@ /obj/item/borg/upgrade/modkit/attackby(obj/item/A, mob/user) if(istype(A, /obj/item/gun/energy/kinetic_accelerator) && !issilicon(user)) - install(A, user) + var/obj/item/gun/energy/kinetic_accelerator/KA = A + if(KA.max_mod_capacity) + install(A, user) + else + return ..() else return ..() diff --git a/code/modules/projectiles/guns/energy/laser.dm b/code/modules/projectiles/guns/energy/laser.dm index b205dc44797..9d7b9bde281 100644 --- a/code/modules/projectiles/guns/energy/laser.dm +++ b/code/modules/projectiles/guns/energy/laser.dm @@ -141,6 +141,29 @@ name = "cyborg immolator cannon" ammo_type = list(/obj/item/ammo_casing/energy/immolator/scatter/cyborg, /obj/item/ammo_casing/energy/immolator/strong/cyborg) // scatter is default, because it is more useful +/obj/item/gun/energy/emitter + name = "mobile emitter" + desc = "An emitter removed from its base, and attached to a laser cannon frame." + icon_state = "emittercannon" + item_state = "laser" + w_class = WEIGHT_CLASS_BULKY + shaded_charge = TRUE + can_holster = FALSE + origin_tech = "combat=4;magnets=4;powerstorage=3" + ammo_type = list(/obj/item/ammo_casing/energy/emitter) + ammo_x_offset = 3 + +/obj/item/gun/energy/emitter/cyborg + name = "mounted emitter" + desc = "An emitter built into to your cyborg frame, draining charge from your cell." + ammo_type = list(/obj/item/ammo_casing/energy/emitter/cyborg) + +/obj/item/gun/energy/emitter/cyborg/newshot() + ..() + robocharge() + +/obj/item/gun/energy/emitter/cyborg/emp_act() + return ////////Laser Tag//////////////////// diff --git a/code/modules/projectiles/guns/magic/staff.dm b/code/modules/projectiles/guns/magic/staff.dm index 06e522733e2..ec854602ab9 100644 --- a/code/modules/projectiles/guns/magic/staff.dm +++ b/code/modules/projectiles/guns/magic/staff.dm @@ -53,7 +53,7 @@ fire_sound = 'sound/magic/staff_door.ogg' /obj/item/gun/magic/staff/slipping - name = "wand of slipping" + name = "staff of slipping" desc = "An artefact that spits... bananas?" ammo_type = /obj/item/ammo_casing/magic/slipping icon_state = "staffofslipping" diff --git a/code/modules/projectiles/guns/magic/wand.dm b/code/modules/projectiles/guns/magic/wand.dm index 08e7b79ac33..5e0f6ffcf09 100644 --- a/code/modules/projectiles/guns/magic/wand.dm +++ b/code/modules/projectiles/guns/magic/wand.dm @@ -51,7 +51,7 @@ user.visible_message("[user] zaps [user.p_them()]self with [src].") playsound(user, fire_sound, 50, 1) user.create_attack_log("[key_name(user)] zapped [user.p_them()]self with a [src]") - add_attack_logs(null, user, "zapped [user.p_them()]self with a [src]", ATKLOG_ALL) + add_attack_logs(user, user, "zapped [user.p_them()]self with a [src]", ATKLOG_ALL) ///////////////////////////////////// //WAND OF DEATH @@ -182,7 +182,7 @@ desc = "This wand shoots... banana peels?" fire_sound = 'sound/items/bikehorn.ogg' ammo_type = /obj/item/ammo_casing/magic/slipping - icon_state = "staffofslipping" + icon_state = "wandofslipping" max_charges = 5 //5, 4, 3, 2 /obj/item/gun/magic/wand/slipping/zap_self(mob/living/user) diff --git a/code/modules/projectiles/guns/medbeam.dm b/code/modules/projectiles/guns/medbeam.dm index 452023946ae..459c6681aa2 100644 --- a/code/modules/projectiles/guns/medbeam.dm +++ b/code/modules/projectiles/guns/medbeam.dm @@ -81,7 +81,7 @@ if(!istype(user_turf)) return 0 var/obj/dummy = new(user_turf) - dummy.pass_flags |= PASSTABLE & PASSGLASS & PASSGRILLE //Grille/Glass so it can be used through common windows + dummy.pass_flags |= PASSTABLE & PASSGLASS & PASSGRILLE & PASSFENCE //Grille/Glass so it can be used through common windows for(var/turf/turf in getline(user_turf,target)) if(turf.density) qdel(dummy) diff --git a/code/modules/projectiles/guns/projectile/automatic.dm b/code/modules/projectiles/guns/projectile/automatic.dm index ec24553f68d..df7992a69ae 100644 --- a/code/modules/projectiles/guns/projectile/automatic.dm +++ b/code/modules/projectiles/guns/projectile/automatic.dm @@ -175,7 +175,7 @@ /obj/item/gun/projectile/automatic/m90/attackby(obj/item/A, mob/user, params) if(istype(A, /obj/item/ammo_casing)) if(istype(A, underbarrel.magazine.ammo_type)) - underbarrel.attack_self() + underbarrel.attack_self(user) underbarrel.attackby(A, user, params) else return ..() diff --git a/code/modules/projectiles/guns/projectile/shotgun.dm b/code/modules/projectiles/guns/projectile/shotgun.dm index 16bdfec9b2b..c32ca8cb26e 100644 --- a/code/modules/projectiles/guns/projectile/shotgun.dm +++ b/code/modules/projectiles/guns/projectile/shotgun.dm @@ -204,10 +204,6 @@ ..() post_sawoff() -/obj/item/gun/projectile/shotgun/riot/buckshot //comes pre-loaded with buckshot rather than rubber - mag_type = /obj/item/ammo_box/magazine/internal/shot/riot/buckshot - - /////////////////////// // BOLT ACTION RIFLE // /////////////////////// diff --git a/code/modules/projectiles/guns/projectile/toy.dm b/code/modules/projectiles/guns/projectile/toy.dm index 5250ae70c81..c24ce64fc36 100644 --- a/code/modules/projectiles/guns/projectile/toy.dm +++ b/code/modules/projectiles/guns/projectile/toy.dm @@ -44,7 +44,7 @@ /obj/item/gun/projectile/automatic/toy/pistol/enforcer name = "foam Enforcer" - desc = "A foam-shooting version of the Enforcer meant to be used for training new cadets who can't be trusted with rubber bullets." + desc = "A toy inspired by the popular Enforcer pistol. Ages 8 and up!" icon_state = "enforcer" mag_type = /obj/item/ammo_box/magazine/toy/enforcer can_flashlight = TRUE diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm index d341330fb16..b3461ad20a9 100644 --- a/code/modules/projectiles/projectile.dm +++ b/code/modules/projectiles/projectile.dm @@ -35,7 +35,7 @@ var/tile_dropoff_s = 0 //same as above but for stamina var/damage_type = BRUTE //BRUTE, BURN, TOX, OXY, CLONE are the only things that should be in here var/nodamage = FALSE //Determines if the projectile will skip any damage inflictions - var/flag = "bullet" //Defines what armor to use when it hits things. Must be set to bullet, laser, energy,or bomb //Cael - bio and rad are also valid + var/flag = BULLET //Defines what armor to use when it hits things. Must be set to bullet, laser, energy,or bomb //Cael - bio and rad are also valid var/projectile_type = "/obj/item/projectile" var/range = 50 //This will de-increment every step. When 0, it will delete the projectile. var/is_reflectable = FALSE // Can it be reflected or not? diff --git a/code/modules/projectiles/projectile/beams.dm b/code/modules/projectiles/projectile/beams.dm index b8e1348fb43..1be7bc9d95c 100644 --- a/code/modules/projectiles/projectile/beams.dm +++ b/code/modules/projectiles/projectile/beams.dm @@ -142,8 +142,8 @@ /obj/item/projectile/beam/immolator/on_hit(atom/target, blocked = 0) . = ..() - if(istype(target, /mob/living/carbon)) - var/mob/living/carbon/M = target + if(isliving(target)) + var/mob/living/M = target M.adjust_fire_stacks(1) M.IgniteMob() diff --git a/code/modules/projectiles/projectile/bullets.dm b/code/modules/projectiles/projectile/bullets.dm index 027de5c9f54..16e7cec1537 100644 --- a/code/modules/projectiles/projectile/bullets.dm +++ b/code/modules/projectiles/projectile/bullets.dm @@ -80,6 +80,10 @@ damage = 17 armour_penetration = 10 +/obj/item/projectile/bullet/armourpiercing/wt550 + damage = 15 + armour_penetration = 40 + /obj/item/projectile/bullet/pellet name = "pellet" damage = 12.5 diff --git a/code/modules/projectiles/projectile/magic.dm b/code/modules/projectiles/projectile/magic.dm index 512f9188606..0f2de1d502c 100644 --- a/code/modules/projectiles/projectile/magic.dm +++ b/code/modules/projectiles/projectile/magic.dm @@ -5,7 +5,7 @@ damage_type = OXY nodamage = 1 armour_penetration = 100 - flag = "magic" + flag = MAGIC /obj/item/projectile/magic/death name = "bolt of death" @@ -267,15 +267,16 @@ if("human") new_mob = new /mob/living/carbon/human(M.loc) var/mob/living/carbon/human/H = new_mob - var/datum/preferences/A = new() //Randomize appearance for the human - A.species = get_random_species(TRUE) - A.copy_to(new_mob) + var/datum/character_save/S = new //Randomize appearance for the human + S.species = get_random_species(TRUE) + S.randomise() + S.copy_to(new_mob) randomize = H.dna.species.name else return M.create_attack_log("[key_name(M)] became [new_mob.real_name].") - add_attack_logs(null, M, "became [new_mob.real_name]", ATKLOG_ALL) + add_attack_logs(M, M, "became [new_mob.real_name]", ATKLOG_ALL) new_mob.a_intent = INTENT_HARM if(M.mind) @@ -367,5 +368,5 @@ damage_type = BURN nodamage = FALSE armour_penetration = 0 - flag = "magic" + flag = MAGIC hitsound = 'sound/weapons/barragespellhit.ogg' diff --git a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm index 97e85cb7857..b68fd5f2b56 100644 --- a/code/modules/reagents/chemistry/machinery/chem_dispenser.dm +++ b/code/modules/reagents/chemistry/machinery/chem_dispenser.dm @@ -319,6 +319,19 @@ return ui_interact(user) +/obj/machinery/chem_dispenser/AltClick(mob/user) + if(!is_drink || !Adjacent(user)) + return + if(user.incapacitated()) + to_chat(user, "You can't do that right now!") + return + if(anchored) + to_chat(user, "[src] is anchored to the floor!") + return + pixel_x = 0 + pixel_y = 0 + setDir(turn(dir, 90)) + /obj/machinery/chem_dispenser/soda icon_state = "soda_dispenser" name = "soda fountain" diff --git a/code/modules/reagents/chemistry/machinery/reagentgrinder.dm b/code/modules/reagents/chemistry/machinery/reagentgrinder.dm index 52a54e47a3b..17ca9085a3a 100644 --- a/code/modules/reagents/chemistry/machinery/reagentgrinder.dm +++ b/code/modules/reagents/chemistry/machinery/reagentgrinder.dm @@ -17,75 +17,76 @@ //IMPORTANT NOTE! A negative number is a multiplier, a positive number is a flat amount to add. 0 means equal to the amount of the original reagent var/list/blend_items = list ( - //Sheets - /obj/item/stack/sheet/mineral/plasma = list("plasma_dust" = 20), - /obj/item/stack/sheet/metal = list("iron" = 20), - /obj/item/stack/rods = list("iron" = 10), - /obj/item/stack/sheet/plasteel = list("iron" = 20, "plasma_dust" = 20), - /obj/item/stack/sheet/wood = list("carbon" = 20), - /obj/item/stack/sheet/glass = list("silicon" = 20), - /obj/item/stack/sheet/rglass = list("silicon" = 20, "iron" = 20), - /obj/item/stack/sheet/mineral/uranium = list("uranium" = 20), - /obj/item/stack/sheet/mineral/bananium = list("banana" = 20), - /obj/item/stack/sheet/mineral/tranquillite = list("nothing" = 20), - /obj/item/stack/sheet/mineral/silver = list("silver" = 20), - /obj/item/stack/sheet/mineral/gold = list("gold" = 20), - /obj/item/grown/nettle/basic = list("wasabi" = 0), - /obj/item/grown/nettle/death = list("facid" = 0, "sacid" = 0), - /obj/item/grown/novaflower = list("capsaicin" = 0, "condensedcapsaicin" = 0), + //Sheets + /obj/item/stack/sheet/mineral/plasma = list("plasma_dust" = 20), + /obj/item/stack/sheet/metal = list("iron" = 20), + /obj/item/stack/rods = list("iron" = 10), + /obj/item/stack/sheet/plasteel = list("iron" = 20, "plasma_dust" = 20), + /obj/item/stack/sheet/wood = list("carbon" = 20), + /obj/item/stack/sheet/glass = list("silicon" = 20), + /obj/item/stack/sheet/rglass = list("silicon" = 20, "iron" = 20), + /obj/item/stack/sheet/mineral/uranium = list("uranium" = 20), + /obj/item/stack/sheet/mineral/bananium = list("banana" = 20), + /obj/item/stack/sheet/mineral/tranquillite = list("nothing" = 20), + /obj/item/stack/sheet/mineral/silver = list("silver" = 20), + /obj/item/stack/sheet/mineral/gold = list("gold" = 20), - //Blender Stuff - /obj/item/reagent_containers/food/snacks/grown/tomato = list("ketchup" = 0), - /obj/item/reagent_containers/food/snacks/grown/wheat = list("flour" = -5), - /obj/item/reagent_containers/food/snacks/grown/oat = list("flour" = -5), - /obj/item/reagent_containers/food/snacks/grown/cherries = list("cherryjelly" = 0), - /obj/item/reagent_containers/food/snacks/grown/bluecherries = list("bluecherryjelly" = 0), - /obj/item/reagent_containers/food/snacks/egg = list("egg" = -5), - /obj/item/reagent_containers/food/snacks/grown/rice = list("rice" = -5), + /obj/item/grown/nettle/basic = list("wasabi" = 0), + /obj/item/grown/nettle/death = list("facid" = 0, "sacid" = 0), + /obj/item/grown/novaflower = list("capsaicin" = 0, "condensedcapsaicin" = 0), - //Grinder stuff, but only if dry - /obj/item/reagent_containers/food/snacks/grown/coffee/robusta = list("coffeepowder" = 0, "morphine" = 0), - /obj/item/reagent_containers/food/snacks/grown/coffee = list("coffeepowder" = 0), - /obj/item/reagent_containers/food/snacks/grown/tea/astra = list("teapowder" = 0, "salglu_solution" = 0), - /obj/item/reagent_containers/food/snacks/grown/tea = list("teapowder" = 0), + //Blender Stuff + /obj/item/reagent_containers/food/snacks/grown/tomato = list("ketchup" = 0), + /obj/item/reagent_containers/food/snacks/grown/wheat = list("flour" = -5), + /obj/item/reagent_containers/food/snacks/grown/oat = list("flour" = -5), + /obj/item/reagent_containers/food/snacks/grown/cherries = list("cherryjelly" = 0), + /obj/item/reagent_containers/food/snacks/grown/bluecherries = list("bluecherryjelly" = 0), + /obj/item/reagent_containers/food/snacks/egg = list("egg" = -5), + /obj/item/reagent_containers/food/snacks/grown/rice = list("rice" = -5), + //Grinder stuff, but only if dry + /obj/item/reagent_containers/food/snacks/grown/coffee/robusta = list("coffeepowder" = 0, "morphine" = 0), + /obj/item/reagent_containers/food/snacks/grown/coffee = list("coffeepowder" = 0), + /obj/item/reagent_containers/food/snacks/grown/tea/astra = list("teapowder" = 0, "salglu_solution" = 0), + /obj/item/reagent_containers/food/snacks/grown/tea = list("teapowder" = 0), - //All types that you can put into the grinder to transfer the reagents to the beaker. !Put all recipes above this.! - /obj/item/slime_extract = list(), - /obj/item/reagent_containers/food = list(), - /obj/item/reagent_containers/honeycomb = list() + //All types that you can put into the grinder to transfer the reagents to the beaker. !Put all recipes above this.! + /obj/item/slime_extract = list(), + /obj/item/reagent_containers/food = list(), + /obj/item/reagent_containers/honeycomb = list() ) var/list/juice_items = list ( - //Juicer Stuff - /obj/item/reagent_containers/food/snacks/grown/soybeans = list("soymilk" = 0), - /obj/item/reagent_containers/food/snacks/grown/corn = list("corn_starch" = 0), - /obj/item/reagent_containers/food/snacks/grown/tomato = list("tomatojuice" = 0), - /obj/item/reagent_containers/food/snacks/grown/carrot = list("carrotjuice" = 0), - /obj/item/reagent_containers/food/snacks/grown/berries = list("berryjuice" = 0), - /obj/item/reagent_containers/food/snacks/grown/banana = list("banana" = 0), - /obj/item/reagent_containers/food/snacks/grown/potato = list("potato" = 0), - /obj/item/reagent_containers/food/snacks/grown/citrus/lemon = list("lemonjuice" = 0), - /obj/item/reagent_containers/food/snacks/grown/citrus/orange = list("orangejuice" = 0), - /obj/item/reagent_containers/food/snacks/grown/citrus/lime = list("limejuice" = 0), - /obj/item/reagent_containers/food/snacks/grown/watermelon = list("watermelonjuice" = 0), - /obj/item/reagent_containers/food/snacks/watermelonslice = list("watermelonjuice" = 0), - /obj/item/reagent_containers/food/snacks/grown/berries/poison = list("poisonberryjuice" = 0), - /obj/item/reagent_containers/food/snacks/grown/pumpkin = list("pumpkinjuice" = 0), - /obj/item/reagent_containers/food/snacks/grown/blumpkin = list("blumpkinjuice" = 0), - /obj/item/reagent_containers/food/snacks/grown/apple = list("applejuice" = 0), - /obj/item/reagent_containers/food/snacks/grown/grapes = list("grapejuice" = 0), - /obj/item/reagent_containers/food/snacks/grown/grapes/green = list("grapejuice" = 0), - /obj/item/reagent_containers/food/snacks/grown/pineapple = list("pineapplejuice" = 0) + //Juicer Stuff + /obj/item/reagent_containers/food/snacks/grown/soybeans = list("soymilk" = 0), + /obj/item/reagent_containers/food/snacks/grown/corn = list("corn_starch" = 0), + /obj/item/reagent_containers/food/snacks/grown/tomato = list("tomatojuice" = 0), + /obj/item/reagent_containers/food/snacks/grown/carrot = list("carrotjuice" = 0), + /obj/item/reagent_containers/food/snacks/grown/berries = list("berryjuice" = 0), + /obj/item/reagent_containers/food/snacks/grown/banana = list("banana" = 0), + /obj/item/reagent_containers/food/snacks/grown/potato = list("potato" = 0), + /obj/item/reagent_containers/food/snacks/grown/citrus/lemon = list("lemonjuice" = 0), + /obj/item/reagent_containers/food/snacks/grown/citrus/orange = list("orangejuice" = 0), + /obj/item/reagent_containers/food/snacks/grown/citrus/lime = list("limejuice" = 0), + /obj/item/reagent_containers/food/snacks/grown/watermelon = list("watermelonjuice" = 0), + /obj/item/reagent_containers/food/snacks/watermelonslice = list("watermelonjuice" = 0), + /obj/item/reagent_containers/food/snacks/grown/berries/poison = list("poisonberryjuice" = 0), + /obj/item/reagent_containers/food/snacks/grown/pumpkin = list("pumpkinjuice" = 0), + /obj/item/reagent_containers/food/snacks/grown/blumpkin = list("blumpkinjuice" = 0), + /obj/item/reagent_containers/food/snacks/grown/apple = list("applejuice" = 0), + /obj/item/reagent_containers/food/snacks/grown/grapes = list("grapejuice" = 0), + /obj/item/reagent_containers/food/snacks/grown/grapes/green = list("grapejuice" = 0), + /obj/item/reagent_containers/food/snacks/grown/pineapple = list("pineapplejuice" = 0) ) var/list/dried_items = list( - //Grinder stuff, but only if dry, - /obj/item/reagent_containers/food/snacks/grown/coffee/robusta = list("coffeepowder" = 0, "morphine" = 0), - /obj/item/reagent_containers/food/snacks/grown/coffee = list("coffeepowder" = 0), - /obj/item/reagent_containers/food/snacks/grown/tea/astra = list("teapowder" = 0, "salglu_solution" = 0), - /obj/item/reagent_containers/food/snacks/grown/tea = list("teapowder" = 0) + + //Grinder stuff, but only if dry, + /obj/item/reagent_containers/food/snacks/grown/coffee/robusta = list("coffeepowder" = 0, "morphine" = 0), + /obj/item/reagent_containers/food/snacks/grown/coffee = list("coffeepowder" = 0), + /obj/item/reagent_containers/food/snacks/grown/tea/astra = list("teapowder" = 0, "salglu_solution" = 0), + /obj/item/reagent_containers/food/snacks/grown/tea = list("teapowder" = 0) ) var/list/holdingitems = list() @@ -231,59 +232,59 @@ /obj/machinery/reagentgrinder/attack_ai(mob/user) - return FALSE + return FALSE /obj/machinery/reagentgrinder/attack_hand(mob/user) - user.set_machine(src) - interact(user) + user.set_machine(src) + interact(user) /obj/machinery/reagentgrinder/interact(mob/user) // The microwave Menu - var/is_chamber_empty = 0 - var/is_beaker_ready = 0 - var/processing_chamber = "" - var/beaker_contents = "" - var/dat = "" + var/is_chamber_empty = 0 + var/is_beaker_ready = 0 + var/processing_chamber = "" + var/beaker_contents = "" + var/dat = "" - if(!operating) - for (var/obj/item/O in holdingitems) - processing_chamber += "\A [html_encode(O.name)]
    " + if(!operating) + for (var/obj/item/O in holdingitems) + processing_chamber += "\A [html_encode(O.name)]
    " - if (!processing_chamber) - is_chamber_empty = 1 - processing_chamber = "Nothing." - if (!beaker) - beaker_contents = "No beaker attached.
    " - else - is_beaker_ready = 1 - beaker_contents = "The beaker contains:
    " - var/anything = 0 - for(var/datum/reagent/R in beaker.reagents.reagent_list) - anything = 1 - beaker_contents += "[R.volume] - [R.name]
    " - if(!anything) - beaker_contents += "Nothing
    " - - - dat = {" - Processing chamber contains:
    - [processing_chamber]
    - [beaker_contents]
    - "} - if (is_beaker_ready && !is_chamber_empty && !(stat & (NOPOWER|BROKEN))) - dat += "Grind the reagents
    " - dat += "Juice the reagents

    " - if(holdingitems && holdingitems.len > 0) - dat += "Eject the reagents
    " - if (beaker) - dat += "Detach the beaker
    " + if(!processing_chamber) + is_chamber_empty = 1 + processing_chamber = "Nothing." + if(!beaker) + beaker_contents = "No beaker attached.
    " else - dat += "Please wait..." + is_beaker_ready = 1 + beaker_contents = "The beaker contains:
    " + var/anything = 0 + for(var/datum/reagent/R in beaker.reagents.reagent_list) + anything = 1 + beaker_contents += "[R.volume] - [R.name]
    " + if(!anything) + beaker_contents += "Nothing
    " - var/datum/browser/popup = new(user, "reagentgrinder", "All-In-One Grinder") - popup.set_content(dat) - popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state)) - popup.open(1) - return + + dat = {" + Processing chamber contains:
    + [processing_chamber]
    + [beaker_contents]
    + "} + if(is_beaker_ready && !is_chamber_empty && !(stat & (NOPOWER|BROKEN))) + dat += "Grind the reagents
    " + dat += "Juice the reagents

    " + if(holdingitems && holdingitems.len > 0) + dat += "Eject the reagents
    " + if(beaker) + dat += "Detach the beaker
    " + else + dat += "Please wait..." + + var/datum/browser/popup = new(user, "reagentgrinder", "All-In-One Grinder") + popup.set_content(dat) + popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state)) + popup.open(1) + return /obj/machinery/reagentgrinder/Topic(href, href_list) if(..()) @@ -293,223 +294,228 @@ updateUsrDialog() return switch(href_list["action"]) - if ("grind") + if("grind") grind() if("juice") juice() if("eject") eject() - if ("detach") + if("detach") detach() /obj/machinery/reagentgrinder/proc/detach() - - if (usr.stat != 0) - return - if (!beaker) - return - beaker.loc = src.loc - beaker = null - update_icon() - updateUsrDialog() + if(usr.stat != 0) + return + if(!beaker) + return + beaker.loc = src.loc + beaker = null + update_icon() + updateUsrDialog() /obj/machinery/reagentgrinder/proc/eject() + if(usr.stat != 0) + return + if(holdingitems && holdingitems.len == 0) + return - if (usr.stat != 0) - return - if (holdingitems && holdingitems.len == 0) - return - - for(var/obj/item/O in holdingitems) - O.loc = src.loc - holdingitems -= O - holdingitems = list() - updateUsrDialog() + for(var/obj/item/O in holdingitems) + O.loc = src.loc + holdingitems -= O + holdingitems = list() + updateUsrDialog() /obj/machinery/reagentgrinder/proc/is_allowed(obj/item/reagent_containers/O) - for (var/i in blend_items) - if(istype(O, i)) - return TRUE - return FALSE + for (var/i in blend_items) + if(istype(O, i)) + return TRUE + return FALSE /obj/machinery/reagentgrinder/proc/get_allowed_by_id(obj/item/O) - for (var/i in blend_items) - if (istype(O, i)) - return blend_items[i] + for (var/i in blend_items) + if(istype(O, i)) + return blend_items[i] /obj/machinery/reagentgrinder/proc/get_allowed_snack_by_id(obj/item/reagent_containers/food/snacks/O) - for(var/i in blend_items) - if(istype(O, i)) - return blend_items[i] + for(var/i in blend_items) + if(istype(O, i)) + return blend_items[i] /obj/machinery/reagentgrinder/proc/get_allowed_juice_by_id(obj/item/reagent_containers/food/snacks/O) - for(var/i in juice_items) - if(istype(O, i)) - return juice_items[i] + for(var/i in juice_items) + if(istype(O, i)) + return juice_items[i] /obj/machinery/reagentgrinder/proc/get_grownweapon_amount(obj/item/grown/O) - if (!istype(O) || !O.seed) - return 5 - else if (O.seed.potency == -1) - return 5 - else - return round(O.seed.potency) + if(!istype(O) || !O.seed) + return 5 + else if(O.seed.potency == -1) + return 5 + else + return round(O.seed.potency) /obj/machinery/reagentgrinder/proc/get_juice_amount(obj/item/reagent_containers/food/snacks/grown/O) - if (!istype(O) || !O.seed) - return 5 - else if (O.seed.potency == -1) - return 5 - else - return round(5*sqrt(O.seed.potency)) + if(!istype(O) || !O.seed) + return 5 + else if(O.seed.potency == -1) + return 5 + else + return round(5*sqrt(O.seed.potency)) /obj/machinery/reagentgrinder/proc/remove_object(obj/item/O) - holdingitems -= O - qdel(O) + holdingitems -= O + qdel(O) /obj/machinery/reagentgrinder/proc/juice() - power_change() - if(stat & (NOPOWER|BROKEN)) - return - if (!beaker || (beaker && beaker.reagents.total_volume >= beaker.reagents.maximum_volume)) - return - playsound(src.loc, 'sound/machines/juicer.ogg', 20, 1) - var/offset = prob(50) ? -2 : 2 - animate(src, pixel_x = pixel_x + offset, time = 0.2, loop = 250) //start shaking - operating = 1 + power_change() + if(stat & (NOPOWER|BROKEN)) + return + if(!beaker || (beaker && beaker.reagents.total_volume >= beaker.reagents.maximum_volume)) + return + playsound(src.loc, 'sound/machines/juicer.ogg', 20, 1) + var/offset = prob(50) ? -2 : 2 + animate(src, pixel_x = pixel_x + offset, time = 0.2, loop = 250) //start shaking + operating = 1 + updateUsrDialog() + spawn(50) + pixel_x = initial(pixel_x) //return to its spot after shaking + operating = 0 updateUsrDialog() - spawn(50) - pixel_x = initial(pixel_x) //return to its spot after shaking - operating = 0 - updateUsrDialog() - //Snacks - for (var/obj/item/reagent_containers/food/snacks/O in holdingitems) - if (beaker.reagents.total_volume >= beaker.reagents.maximum_volume) - break + //Snacks + for (var/obj/item/reagent_containers/food/snacks/O in holdingitems) + if(beaker.reagents.holder_full()) + break - var/allowed = get_allowed_juice_by_id(O) - if(isnull(allowed)) - break + var/allowed = get_allowed_juice_by_id(O) + if(isnull(allowed)) + break - for (var/r_id in allowed) + for (var/r_id in allowed) - var/space = beaker.reagents.maximum_volume - beaker.reagents.total_volume - var/amount = get_juice_amount(O) + var/space = beaker.reagents.maximum_volume - beaker.reagents.total_volume + var/amount = get_juice_amount(O) - beaker.reagents.add_reagent(r_id, min(amount*efficiency, space)) + beaker.reagents.add_reagent(r_id, min(amount * efficiency, space)) - if (beaker.reagents.total_volume >= beaker.reagents.maximum_volume) - break + if(beaker.reagents.total_volume >= beaker.reagents.maximum_volume) + break - remove_object(O) + remove_object(O) /obj/machinery/reagentgrinder/proc/grind() - power_change() - if(stat & (NOPOWER|BROKEN)) - return - if (!beaker || (beaker && beaker.reagents.total_volume >= beaker.reagents.maximum_volume)) - return - playsound(src.loc, 'sound/machines/blender.ogg', 50, 1) - var/offset = prob(50) ? -2 : 2 - animate(src, pixel_x = pixel_x + offset, time = 0.2, loop = 250) //start shaking - operating = 1 + power_change() + if(stat & (NOPOWER|BROKEN)) + return + if(!beaker || (beaker && beaker.reagents.holder_full())) + return + playsound(src.loc, 'sound/machines/blender.ogg', 50, 1) + var/offset = prob(50) ? -2 : 2 + animate(src, pixel_x = pixel_x + offset, time = 0.2, loop = 250) //start shaking + operating = 1 + updateUsrDialog() + spawn(60) + pixel_x = initial(pixel_x) //return to its spot after shaking + operating = 0 updateUsrDialog() - spawn(60) - pixel_x = initial(pixel_x) //return to its spot after shaking - operating = 0 - updateUsrDialog() - //Snacks and Plants - for (var/obj/item/reagent_containers/food/snacks/O in holdingitems) - if (beaker.reagents.total_volume >= beaker.reagents.maximum_volume) - break + //Snacks and Plants + for (var/obj/item/reagent_containers/food/snacks/O in holdingitems) + if(beaker.reagents.holder_full()) + break - var/allowed = get_allowed_snack_by_id(O) - if(isnull(allowed)) - break + var/allowed = get_allowed_snack_by_id(O) + if(isnull(allowed)) + break - for (var/r_id in allowed) + for (var/r_id in allowed) - var/space = beaker.reagents.maximum_volume - beaker.reagents.total_volume - var/amount = allowed[r_id] - if(amount <= 0) - if(amount == 0) - if (O.reagents != null && O.reagents.has_reagent("nutriment")) - beaker.reagents.add_reagent(r_id, min(O.reagents.get_reagent_amount("nutriment")*efficiency, space)) - O.reagents.remove_reagent("nutriment", min(O.reagents.get_reagent_amount("nutriment"), space)) - if (O.reagents != null && O.reagents.has_reagent("plantmatter")) - beaker.reagents.add_reagent(r_id, min(O.reagents.get_reagent_amount("plantmatter")*efficiency, space)) - O.reagents.remove_reagent("plantmatter", min(O.reagents.get_reagent_amount("plantmatter"), space)) - else - if (O.reagents != null && O.reagents.has_reagent("nutriment")) - beaker.reagents.add_reagent(r_id, min(round(O.reagents.get_reagent_amount("nutriment")*abs(amount)*efficiency), space)) - O.reagents.remove_reagent("nutriment", min(O.reagents.get_reagent_amount("nutriment"), space)) - if (O.reagents != null && O.reagents.has_reagent("plantmatter")) - beaker.reagents.add_reagent(r_id, min(round(O.reagents.get_reagent_amount("plantmatter")*abs(amount)*efficiency), space)) - O.reagents.remove_reagent("plantmatter", min(O.reagents.get_reagent_amount("plantmatter"), space)) + var/space = beaker.reagents.maximum_volume - beaker.reagents.total_volume + var/amount = allowed[r_id] + if(amount <= 0) + if(amount == 0) + if(O.reagents != null && O.reagents.has_reagent("nutriment")) + beaker.reagents.add_reagent(r_id, min(O.reagents.get_reagent_amount("nutriment") * efficiency, space)) + O.reagents.remove_reagent("nutriment", min(O.reagents.get_reagent_amount("nutriment"), space)) + if(O.reagents != null && O.reagents.has_reagent("plantmatter")) + beaker.reagents.add_reagent(r_id, min(O.reagents.get_reagent_amount("plantmatter") * efficiency, space)) + O.reagents.remove_reagent("plantmatter", min(O.reagents.get_reagent_amount("plantmatter"), space)) + else + if(O.reagents != null && O.reagents.has_reagent("nutriment")) + beaker.reagents.add_reagent(r_id, min(round(O.reagents.get_reagent_amount("nutriment") * abs(amount) * efficiency), space)) + O.reagents.remove_reagent("nutriment", min(O.reagents.get_reagent_amount("nutriment"), space)) + if(O.reagents != null && O.reagents.has_reagent("plantmatter")) + beaker.reagents.add_reagent(r_id, min(round(O.reagents.get_reagent_amount("plantmatter") * abs(amount) * efficiency), space)) + O.reagents.remove_reagent("plantmatter", min(O.reagents.get_reagent_amount("plantmatter"), space)) - else - O.reagents.trans_id_to(beaker, r_id, min(amount, space)) + else + O.reagents.trans_id_to(beaker, r_id, min(amount, space)) - if (beaker.reagents.total_volume >= beaker.reagents.maximum_volume) - break + if(beaker.reagents.holder_full()) + break - if(O.reagents.reagent_list.len == 0) - remove_object(O) + if(O.reagents.reagent_list.len == 0) + remove_object(O) - //Sheets - for (var/obj/item/stack/sheet/O in holdingitems) - var/allowed = get_allowed_by_id(O) - if (beaker.reagents.total_volume >= beaker.reagents.maximum_volume) - break - for(var/i = 1; i <= round(O.amount, 1); i++) - for (var/r_id in allowed) - var/space = beaker.reagents.maximum_volume - beaker.reagents.total_volume - var/amount = allowed[r_id] - beaker.reagents.add_reagent(r_id,min(amount*efficiency, space)) - if (space < amount) - break - if (i == round(O.amount, 1)) - remove_object(O) - break - //Plants - for (var/obj/item/grown/O in holdingitems) - if (beaker.reagents.total_volume >= beaker.reagents.maximum_volume) - break - var/allowed = get_allowed_by_id(O) - for (var/r_id in allowed) - var/space = beaker.reagents.maximum_volume - beaker.reagents.total_volume - var/amount = allowed[r_id] - if (amount == 0) - if (O.reagents != null && O.reagents.has_reagent(r_id)) - beaker.reagents.add_reagent(r_id,min(O.reagents.get_reagent_amount(r_id)*efficiency, space)) - else - beaker.reagents.add_reagent(r_id,min(amount*efficiency, space)) + //Sheets and rods(!) + for (var/obj/item/stack/O in holdingitems) + if(beaker.reagents.holder_full()) + break - if (beaker.reagents.total_volume >= beaker.reagents.maximum_volume) - break + var/allowed = get_allowed_by_id(O) + if(isnull(allowed)) + break + + var/space = beaker.reagents.maximum_volume - beaker.reagents.total_volume + while(O.amount) //Grind until there's no more reagents + if(!space) //if no free space - exit + break + O.amount -= 1 //remove one from stack + for (var/r_id in allowed) + var/spaceused = min(allowed[r_id] * efficiency, space) + space -= spaceused + beaker.reagents.add_reagent(r_id, spaceused) + if(O.amount < 1) //if leftover small - destroy remove_object(O) + break - //Slime Extractis - for (var/obj/item/slime_extract/O in holdingitems) - if (beaker.reagents.total_volume >= beaker.reagents.maximum_volume) - break - var/space = beaker.reagents.maximum_volume - beaker.reagents.total_volume - if (O.reagents != null) - var/amount = O.reagents.total_volume - O.reagents.trans_to(beaker, min(amount, space)) - if (O.Uses > 0) - beaker.reagents.add_reagent("slimejelly",min(20*efficiency, space)) - remove_object(O) + //Plants + for (var/obj/item/grown/O in holdingitems) + if(beaker.reagents.holder_full()) + break + var/allowed = get_allowed_by_id(O) + for (var/r_id in allowed) + var/space = beaker.reagents.maximum_volume - beaker.reagents.total_volume + var/amount = allowed[r_id] + if(amount == 0) + if(O.reagents != null && O.reagents.has_reagent(r_id)) + beaker.reagents.add_reagent(r_id,min(O.reagents.get_reagent_amount(r_id) * efficiency, space)) + else + beaker.reagents.add_reagent(r_id,min(amount * efficiency, space)) - //Everything else - Transfers reagents from it into beaker - for (var/obj/item/reagent_containers/O in holdingitems) - if (beaker.reagents.total_volume >= beaker.reagents.maximum_volume) - break - var/amount = O.reagents.total_volume - O.reagents.trans_to(beaker, amount) - if(!O.reagents.total_volume) - remove_object(O) + if(beaker.reagents.holder_full()) + break + remove_object(O) + + //Slime Extractis + for (var/obj/item/slime_extract/O in holdingitems) + if(beaker.reagents.holder_full()) + break + var/space = beaker.reagents.maximum_volume - beaker.reagents.total_volume + if(O.reagents != null) + var/amount = O.reagents.total_volume + O.reagents.trans_to(beaker, min(amount, space)) + if(O.Uses > 0) + beaker.reagents.add_reagent("slimejelly",min(20 * efficiency, space)) + remove_object(O) + + //Everything else - Transfers reagents from it into beaker + for (var/obj/item/reagent_containers/O in holdingitems) + if(beaker.reagents.holder_full()) + break + var/amount = O.reagents.total_volume + O.reagents.trans_to(beaker, amount) + if(!O.reagents.total_volume) + remove_object(O) diff --git a/code/modules/reagents/chemistry/reagents/disease.dm b/code/modules/reagents/chemistry/reagents/disease.dm index 1cd1111b49e..8e386386a2b 100644 --- a/code/modules/reagents/chemistry/reagents/disease.dm +++ b/code/modules/reagents/chemistry/reagents/disease.dm @@ -1,5 +1,5 @@ /datum/reagent/spider_eggs - name = "spider eggs" + name = "Spider eggs" id = "spidereggs" description = "A fine dust containing spider eggs. Oh gosh." reagent_state = SOLID @@ -124,7 +124,7 @@ return ..() /datum/reagent/bacon_grease - name = "pure bacon grease" + name = "Pure bacon grease" id = "bacon_grease" description = "Hook me up to an IV of that sweet, sweet stuff!" reagent_state = LIQUID @@ -185,30 +185,30 @@ taste_description = "watery milk" /datum/reagent/mutagen/mutagenvirusfood - name = "mutagenic agar" + name = "Mutagenic agar" id = "mutagenvirusfood" description = "mutates blood" color = "#A3C00F" // rgb: 163,192,15 /datum/reagent/mutagen/mutagenvirusfood/sugar - name = "sucrose agar" + name = "Sucrose agar" id = "sugarvirusfood" color = "#41B0C0" // rgb: 65,176,192 taste_mult = 1.5 /datum/reagent/medicine/diphenhydramine/diphenhydraminevirusfood - name = "virus rations" + name = "Virus rations" id = "diphenhydraminevirusfood" description = "mutates blood" color = "#D18AA5" // rgb: 209,138,165 /datum/reagent/plasma_dust/plasmavirusfood - name = "virus plasma" + name = "Virus plasma" id = "plasmavirusfood" description = "mutates blood" color = "#A69DA9" // rgb: 166,157,169 /datum/reagent/plasma_dust/plasmavirusfood/weak - name = "weakened virus plasma" + name = "Weakened virus plasma" id = "weakplasmavirusfood" color = "#CEC3C6" // rgb: 206,195,198 diff --git a/code/modules/reagents/chemistry/reagents/drugs.dm b/code/modules/reagents/chemistry/reagents/drugs.dm index 89362dc9166..760b2a7bc01 100644 --- a/code/modules/reagents/chemistry/reagents/drugs.dm +++ b/code/modules/reagents/chemistry/reagents/drugs.dm @@ -568,21 +568,21 @@ /datum/reagent/fliptonium/on_mob_life(mob/living/M) var/update_flags = STATUS_UPDATE_NONE if(current_cycle == 5) - M.SpinAnimation(speed = 11, loops = -1) + M.SpinAnimation(speed = 11, loops = -1, parallel = FALSE) if(current_cycle == 10) - M.SpinAnimation(speed = 10, loops = -1) + M.SpinAnimation(speed = 10, loops = -1, parallel = FALSE) if(current_cycle == 15) - M.SpinAnimation(speed = 9, loops = -1) + M.SpinAnimation(speed = 9, loops = -1, parallel = FALSE) if(current_cycle == 20) - M.SpinAnimation(speed = 8, loops = -1) + M.SpinAnimation(speed = 8, loops = -1, parallel = FALSE) if(current_cycle == 25) - M.SpinAnimation(speed = 7, loops = -1) + M.SpinAnimation(speed = 7, loops = -1, parallel = FALSE) if(current_cycle == 30) - M.SpinAnimation(speed = 6, loops = -1) + M.SpinAnimation(speed = 6, loops = -1, parallel = FALSE) if(current_cycle == 40) - M.SpinAnimation(speed = 5, loops = -1) + M.SpinAnimation(speed = 5, loops = -1, parallel = FALSE) if(current_cycle == 50) - M.SpinAnimation(speed = 4, loops = -1) + M.SpinAnimation(speed = 4, loops = -1, parallel = FALSE) M.AdjustDrowsy(-6) update_flags |= M.AdjustParalysis(-1.5, FALSE) @@ -594,11 +594,11 @@ /datum/reagent/fliptonium/reaction_mob(mob/living/M, method=REAGENT_TOUCH, volume) if(method == REAGENT_INGEST || method == REAGENT_TOUCH) - M.SpinAnimation(speed = 12, loops = -1) + M.SpinAnimation(speed = 12, loops = -1, parallel = FALSE) ..() /datum/reagent/fliptonium/on_mob_delete(mob/living/M) - M.SpinAnimation(speed = 12, loops = -1) + M.SpinAnimation(speed = 12, loops = -1, parallel = FALSE) /datum/reagent/fliptonium/overdose_process(mob/living/M, severity) var/list/overdose_info = ..() diff --git a/code/modules/reagents/chemistry/reagents/food.dm b/code/modules/reagents/chemistry/reagents/food.dm index 38430bc3dce..9abb46b3861 100644 --- a/code/modules/reagents/chemistry/reagents/food.dm +++ b/code/modules/reagents/chemistry/reagents/food.dm @@ -376,7 +376,7 @@ /datum/reagent/consumable/sprinkles/on_mob_life(mob/living/M) var/update_flags = STATUS_UPDATE_NONE - if(ishuman(M) && (M.job in list("Security Officer", "Security Pod Pilot", "Detective", "Warden", "Head of Security", "Brig Physician", "Internal Affairs Agent", "Magistrate"))) + if(ishuman(M) && (M.job in list("Security Officer", "Detective", "Warden", "Head of Security", "Brig Physician", "Internal Affairs Agent", "Magistrate"))) update_flags |= M.adjustBruteLoss(-1, FALSE) update_flags |= M.adjustFireLoss(-1, FALSE) return ..() | update_flags @@ -447,7 +447,7 @@ return ..() /datum/reagent/consumable/flour - name = "flour" + name = "Flour" id = "flour" description = "This is what you rub all over yourself to pretend to be a ghost." reagent_state = SOLID @@ -852,7 +852,7 @@ return ..() | update_flags /datum/reagent/cholesterol - name = "cholesterol" + name = "Cholesterol" id = "cholesterol" description = "Pure cholesterol. Probably not very good for you." reagent_state = LIQUID diff --git a/code/modules/reagents/chemistry/reagents/medicine.dm b/code/modules/reagents/chemistry/reagents/medicine.dm index 96f5a766778..e5cbdbd3f08 100644 --- a/code/modules/reagents/chemistry/reagents/medicine.dm +++ b/code/modules/reagents/chemistry/reagents/medicine.dm @@ -1205,26 +1205,48 @@ description = "Ichor from an extremely powerful plant. Great for restoring wounds, but it's a little heavy on the brain." color = "#FFAF00" overdose_threshold = 25 + addiction_threshold = 50 + addiction_chance = 5 harmless = FALSE taste_description = "a gift from nature" /datum/reagent/medicine/earthsblood/on_mob_life(mob/living/M) var/update_flags = STATUS_UPDATE_NONE - update_flags |= M.adjustBruteLoss(-3 * REAGENTS_EFFECT_MULTIPLIER, FALSE) - update_flags |= M.adjustFireLoss(-3 * REAGENTS_EFFECT_MULTIPLIER, FALSE) - update_flags |= M.adjustOxyLoss(-15 * REAGENTS_EFFECT_MULTIPLIER, FALSE) - update_flags |= M.adjustToxLoss(-3 * REAGENTS_EFFECT_MULTIPLIER, FALSE) - update_flags |= M.adjustBrainLoss(2 * REAGENTS_EFFECT_MULTIPLIER, FALSE) //This does, after all, come from ambrosia, and the most powerful ambrosia in existence, at that! - update_flags |= M.adjustCloneLoss(-1 * REAGENTS_EFFECT_MULTIPLIER, FALSE) - update_flags |= M.adjustStaminaLoss(-30 * REAGENTS_EFFECT_MULTIPLIER, FALSE) - M.SetJitter(min(max(0, M.jitteriness + 3), 30)) + if(current_cycle <= 25) //10u has to be processed before u get into THE FUN ZONE + update_flags |= M.adjustBruteLoss(-1 * REAGENTS_EFFECT_MULTIPLIER, FALSE) + update_flags |= M.adjustFireLoss(-1 * REAGENTS_EFFECT_MULTIPLIER, FALSE) + update_flags |= M.adjustOxyLoss(-0.5 * REAGENTS_EFFECT_MULTIPLIER, FALSE) + update_flags |= M.adjustToxLoss(-0.5 * REAGENTS_EFFECT_MULTIPLIER, FALSE) + update_flags |= M.adjustCloneLoss(-0.1 * REAGENTS_EFFECT_MULTIPLIER, FALSE) + update_flags |= M.adjustStaminaLoss(-0.5 * REAGENTS_EFFECT_MULTIPLIER, FALSE) + update_flags |= M.adjustBrainLoss(1 * REAGENTS_EFFECT_MULTIPLIER, FALSE) //This does, after all, come from ambrosia, and the most powerful ambrosia in existence, at that! + else + update_flags |= M.adjustBruteLoss(-5 * REAGENTS_EFFECT_MULTIPLIER, FALSE) + update_flags |= M.adjustFireLoss(-5 * REAGENTS_EFFECT_MULTIPLIER, FALSE) + update_flags |= M.adjustOxyLoss(-3 * REAGENTS_EFFECT_MULTIPLIER, FALSE) + update_flags |= M.adjustToxLoss(-3 * REAGENTS_EFFECT_MULTIPLIER, FALSE) + update_flags |= M.adjustCloneLoss(-1 * REAGENTS_EFFECT_MULTIPLIER, FALSE) + update_flags |= M.adjustStaminaLoss(-3 * REAGENTS_EFFECT_MULTIPLIER, FALSE) + M.SetJitter(min(max(0, M.jitteriness + 3), 30)) + update_flags |= M.adjustBrainLoss(2 * REAGENTS_EFFECT_MULTIPLIER, FALSE) //See above update_flags |= M.SetDruggy(min(max(0, M.druggy + 10), 15), FALSE) //See above return ..() | update_flags +/datum/reagent/medicine/earthsblood/on_mob_add(mob/living/M) + ..() + ADD_TRAIT(M, TRAIT_PACIFISM, type) + +/datum/reagent/medicine/earthsblood/on_mob_delete(mob/living/M) + REMOVE_TRAIT(M, TRAIT_PACIFISM, type) + ..() + /datum/reagent/medicine/earthsblood/overdose_process(mob/living/M) var/update_flags = STATUS_UPDATE_NONE - M.SetHallucinate(min(max(0, M.hallucination + 10), 50)) - update_flags |= M.adjustToxLoss(5 * REAGENTS_EFFECT_MULTIPLIER, FALSE) + M.SetHallucinate(min(max(0, M.hallucination + 5), 60)) + if(current_cycle > 25) + update_flags |= M.adjustToxLoss(4 * REAGENTS_EFFECT_MULTIPLIER, FALSE) + if(current_cycle > 100) //podpeople get out reeeeeeeeeeeeeeeeeeeee + update_flags |= M.adjustToxLoss(6 * REAGENTS_EFFECT_MULTIPLIER, FALSE) return list(0, update_flags) /datum/reagent/medicine/corazone diff --git a/code/modules/reagents/chemistry/reagents/misc.dm b/code/modules/reagents/chemistry/reagents/misc.dm index 7edb9f67fcf..aa0fcf41a21 100644 --- a/code/modules/reagents/chemistry/reagents/misc.dm +++ b/code/modules/reagents/chemistry/reagents/misc.dm @@ -500,7 +500,7 @@ M.RemoveElement(/datum/element/waddling) /datum/reagent/royal_bee_jelly - name = "royal bee jelly" + name = "Royal bee jelly" id = "royal_bee_jelly" description = "Royal Bee Jelly, if injected into a Queen Space Bee said bee will split into two bees." color = "#00ff80" @@ -698,7 +698,7 @@ /datum/reagent/spraytan/proc/set_skin_color(mob/living/carbon/human/H) if(H.dna.species.bodyflags & HAS_SKIN_TONE) - H.change_skin_tone(-30) + H.change_skin_tone(max(H.s_tone - 10, -195)) if(H.dna.species.bodyflags & HAS_SKIN_COLOR) //take current alien color and darken it slightly H.change_skin_color("#9B7653") diff --git a/code/modules/reagents/chemistry/reagents/pyrotechnic.dm b/code/modules/reagents/chemistry/reagents/pyrotechnic.dm index a6ce4bca815..0902782f704 100644 --- a/code/modules/reagents/chemistry/reagents/pyrotechnic.dm +++ b/code/modules/reagents/chemistry/reagents/pyrotechnic.dm @@ -1,5 +1,5 @@ /datum/reagent/phlogiston - name = "phlogiston" + name = "Phlogiston" id = "phlogiston" description = "It appears to be liquid fire." reagent_state = LIQUID @@ -36,7 +36,7 @@ return ..() /datum/reagent/phlogiston/firedust - name = "phlogiston dust" + name = "Phlogiston dust" id = "phlogiston_dust" description = "And this is solid fire. However that works." temp_fire = 1500 @@ -45,7 +45,7 @@ mob_burning = 3 // 15 /datum/reagent/napalm - name = "napalm" + name = "Napalm" id = "napalm" description = "A highly flammable jellied fuel." reagent_state = LIQUID diff --git a/code/modules/reagents/chemistry/reagents/toxins.dm b/code/modules/reagents/chemistry/reagents/toxins.dm index 4256b27e762..b32ca3503f9 100644 --- a/code/modules/reagents/chemistry/reagents/toxins.dm +++ b/code/modules/reagents/chemistry/reagents/toxins.dm @@ -199,7 +199,7 @@ /datum/reagent/stable_mutagen name = "Stable mutagen" id = "stable_mutagen" - description = "Just the regular, boring sort of mutagenic compound. Works in a completely predictable manner." + description = "Just the regular, boring sort of mutagenic compound. Works in a completely predictable manner." reagent_state = LIQUID color = "#7DFF00" taste_description = "slime" @@ -233,7 +233,7 @@ data = B.data.Copy() /datum/reagent/uranium - name ="Uranium" + name = "Uranium" id = "uranium" description = "A silvery-white metallic chemical element in the actinide series, weakly radioactive." reagent_state = SOLID @@ -367,7 +367,7 @@ to_chat(H, "The blueish acidic substance stings[volume < 5 ? " you, but isn't concentrated enough to harm you" : null]!") /datum/reagent/acetic_acid - name = "acetic acid" + name = "Acetic acid" id = "acetic_acid" description = "A weak acid that is the main component of vinegar and bad hangovers." color = "#0080ff" diff --git a/code/modules/reagents/chemistry/recipes/drinks.dm b/code/modules/reagents/chemistry/recipes/drinks.dm index f03ae9b316b..c5f4a2b63bf 100644 --- a/code/modules/reagents/chemistry/recipes/drinks.dm +++ b/code/modules/reagents/chemistry/recipes/drinks.dm @@ -915,8 +915,8 @@ name = "Gimlet" id = "gimlet" result = "gimlet" - required_reagents = list("gin" = 1, "limejuice" = 1) - result_amount = 2 + required_reagents = list("gin" = 1, "limejuice" = 1, "sugar" = 1) + result_amount = 3 mix_sound = 'sound/goonstation/misc/drinkfizz.ogg' /datum/chemical_reaction/sidecar diff --git a/code/modules/reagents/reagent_containers/glass_containers.dm b/code/modules/reagents/reagent_containers/glass_containers.dm index bead1467de5..723a7cb591e 100644 --- a/code/modules/reagents/reagent_containers/glass_containers.dm +++ b/code/modules/reagents/reagent_containers/glass_containers.dm @@ -293,7 +293,7 @@ amount_per_transfer_from_this = 20 possible_transfer_amounts = list(5,10,15,20,25,30,50,80,100,120) volume = 120 - armor = list("melee" = 10, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 75, "acid" = 50) //Weak melee protection, because you can wear it on your head + armor = list(MELEE = 10, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 75, ACID = 50) //Weak melee protection, because you can wear it on your head slot_flags = SLOT_HEAD resistance_flags = NONE container_type = OPENCONTAINER @@ -304,7 +304,7 @@ icon_state = "woodbucket" item_state = "woodbucket" materials = null - armor = list("melee" = 10, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 0, "acid" = 50) + armor = list(MELEE = 10, BULLET = 0, LASER = 0, ENERGY = 0, BOMB = 0, BIO = 0, RAD = 0, FIRE = 0, ACID = 50) resistance_flags = FLAMMABLE /obj/item/reagent_containers/glass/bucket/equipped(mob/user, slot) diff --git a/code/modules/reagents/reagent_dispenser.dm b/code/modules/reagents/reagent_dispenser.dm index 6e63baea033..962f9d6d443 100644 --- a/code/modules/reagents/reagent_dispenser.dm +++ b/code/modules/reagents/reagent_dispenser.dm @@ -22,7 +22,7 @@ /obj/structure/reagent_dispensers/take_damage(damage_amount, damage_type = BRUTE, damage_flag = 0, sound_effect = 1, attack_dir) . = ..() if(. && obj_integrity > 0) - if(tank_volume && (damage_flag == "bullet" || damage_flag == "laser")) + if(tank_volume && (damage_flag == BULLET || damage_flag == LASER)) boom(FALSE, TRUE) /obj/structure/reagent_dispensers/attackby(obj/item/I, mob/user, params) diff --git a/code/modules/recycling/disposal.dm b/code/modules/recycling/disposal.dm index b2afa9c06e3..3e4a1d0c821 100644 --- a/code/modules/recycling/disposal.dm +++ b/code/modules/recycling/disposal.dm @@ -15,7 +15,7 @@ anchored = 1 density = 1 on_blueprints = TRUE - armor = list("melee" = 25, "bullet" = 10, "laser" = 10, "energy" = 100, "bomb" = 0, "bio" = 100, "rad" = 100, "fire" = 90, "acid" = 30) + armor = list(MELEE = 25, BULLET = 10, LASER = 10, ENERGY = 100, BOMB = 0, BIO = 100, RAD = 100, FIRE = 90, ACID = 30) max_integrity = 200 flags_2 = RAD_PROTECT_CONTENTS_2 | RAD_NO_CONTAMINATE_2 resistance_flags = FIRE_PROOF @@ -688,9 +688,10 @@ dir = 0 // dir will contain dominant direction for junction pipes var/health = 10 // health points 0-10 max_integrity = 200 - armor = list("melee" = 25, "bullet" = 10, "laser" = 10, "energy" = 100, "bomb" = 0, "bio" = 100, "rad" = 100, "fire" = 90, "acid" = 30) + armor = list(MELEE = 25, BULLET = 10, LASER = 10, ENERGY = 100, BOMB = 0, BIO = 100, RAD = 100, FIRE = 90, ACID = 30) damage_deflection = 10 flags_2 = RAD_PROTECT_CONTENTS_2 | RAD_NO_CONTAMINATE_2 + plane = FLOOR_PLANE layer = DISPOSAL_PIPE_LAYER // slightly lower than wires and other pipes var/base_icon_state // initial icon state on map @@ -757,6 +758,9 @@ // update the icon_state to reflect hidden status /obj/structure/disposalpipe/proc/update() var/turf/T = get_turf(src) + if(T.transparent_floor) + update_icon() + return hide(T.intact && !istype(T, /turf/space)) // space never hides pipes update_icon() @@ -889,15 +893,20 @@ /obj/structure/disposalpipe/attackby(obj/item/I, mob/user, params) var/turf/T = get_turf(src) - if(T.intact) - return // prevent interaction with T-scanner revealed pipes + if(T.intact || T.transparent_floor) + to_chat(user, "You can't interact with something that's under the floor!") + return // prevent interaction with T-scanner revealed pipes and pipes under glass add_fingerprint(user) /obj/structure/disposalpipe/welder_act(mob/user, obj/item/I) . = TRUE + var/turf/T = get_turf(src) if(!I.tool_use_check(user, 0)) return + if(T.transparent_floor) + to_chat(user, "You can't interact with something that's under the floor!") + return WELDER_ATTEMPT_SLICING_MESSAGE if(!I.use_tool(src, user, 30, volume = I.tool_volume)) return @@ -1201,7 +1210,7 @@ return var/turf/T = src.loc - if(T.intact) + if(T.intact || T.transparent_floor) return // prevent interaction with T-scanner revealed pipes src.add_fingerprint(user) diff --git a/code/modules/recycling/sortingmachinery.dm b/code/modules/recycling/sortingmachinery.dm index 21c0f648a3b..edd3f4f1c60 100755 --- a/code/modules/recycling/sortingmachinery.dm +++ b/code/modules/recycling/sortingmachinery.dm @@ -96,14 +96,12 @@ var/atom/A = i A.emp_act(severity) -/obj/item/smallDelivery/attack_self(mob/user as mob) - if(wrapped && wrapped.loc) //sometimes items can disappear. For example, bombs. --rastaf0 - wrapped.loc = user.loc +/obj/item/smallDelivery/attack_self(mob/user) + if(wrapped?.loc == src) //sometimes items can disappear. For example, bombs. --rastaf0 + wrapped.forceMove(get_turf(src)) if(ishuman(user)) user.put_in_hands(wrapped) - else - wrapped.loc = get_turf(src) - playsound(src.loc, 'sound/items/poster_ripped.ogg', 50, 1) + playsound(src, 'sound/items/poster_ripped.ogg', 50, TRUE) qdel(src) /obj/item/smallDelivery/attackby(obj/item/W as obj, mob/user as mob, params) @@ -163,6 +161,8 @@ if(is_type_in_list(target, no_wrap)) return + if(is_type_in_list(A.loc, list(/obj/item/smallDelivery, /obj/structure/bigDelivery))) + return if(target.anchored) return if(target in user) diff --git a/code/modules/research/circuitprinter.dm b/code/modules/research/circuitprinter.dm index 83b09e5c228..4c7f1e94ca1 100644 --- a/code/modules/research/circuitprinter.dm +++ b/code/modules/research/circuitprinter.dm @@ -11,19 +11,17 @@ using metal and glass, it uses glass and reagents (usually sulfuric acis). container_type = OPENCONTAINER categories = list( - "AI Modules", - "Computer Boards", - "Engineering Machinery", - "Exosuit Modules", - "Hydroponics Machinery", - "Medical Machinery", - "Misc. Machinery", - "Research Machinery", - "Subspace Telecomms", - "Teleportation Machinery" - ) - - reagents = new() + "AI Modules", + "Computer Boards", + "Engineering Machinery", + "Exosuit Modules", + "Hydroponics Machinery", + "Medical Machinery", + "Misc. Machinery", + "Research Machinery", + "Subspace Telecomms", + "Teleportation Machinery" + ) /obj/machinery/r_n_d/circuit_imprinter/New() ..() @@ -33,8 +31,8 @@ using metal and glass, it uses glass and reagents (usually sulfuric acis). component_parts += new /obj/item/stock_parts/manipulator(null) component_parts += new /obj/item/reagent_containers/glass/beaker(null) component_parts += new /obj/item/reagent_containers/glass/beaker(null) + create_reagents() RefreshParts() - reagents.my_atom = src /obj/machinery/r_n_d/circuit_imprinter/upgraded/New() ..() @@ -45,7 +43,11 @@ using metal and glass, it uses glass and reagents (usually sulfuric acis). component_parts += new /obj/item/reagent_containers/glass/beaker/large(null) component_parts += new /obj/item/reagent_containers/glass/beaker/large(null) RefreshParts() - reagents.my_atom = src + +/obj/machinery/r_n_d/circuit_imprinter/Destroy() + if(linked_console) + linked_console.linked_imprinter = null + return ..() /obj/machinery/r_n_d/circuit_imprinter/RefreshParts() reagents.maximum_volume = 0 diff --git a/code/modules/research/designs/autolathe_designs.dm b/code/modules/research/designs/autolathe_designs.dm index 7703e5594e1..bcb0395b94f 100644 --- a/code/modules/research/designs/autolathe_designs.dm +++ b/code/modules/research/designs/autolathe_designs.dm @@ -703,22 +703,6 @@ build_path = /obj/item/weaponcrafting/receiver category = list("hacked", "Security") -/datum/design/shotgun_slug - name = "Shotgun Slug" - id = "shotgun_slug" - build_type = AUTOLATHE - materials = list(MAT_METAL = 4000) - build_path = /obj/item/ammo_casing/shotgun - category = list("hacked", "Security") - -/datum/design/buckshot_shell - name = "Buckshot shell" - id = "buckshot_shell" - build_type = AUTOLATHE - materials = list(MAT_METAL = 4000) - build_path = /obj/item/ammo_casing/shotgun/buckshot - category = list("hacked", "Security") - /datum/design/shotgun_dart name = "Shotgun Dart" id = "shotgun_dart" diff --git a/code/modules/research/designs/comp_board_designs.dm b/code/modules/research/designs/comp_board_designs.dm index 054dc2db810..634a1861e1b 100644 --- a/code/modules/research/designs/comp_board_designs.dm +++ b/code/modules/research/designs/comp_board_designs.dm @@ -162,6 +162,16 @@ build_path = /obj/item/circuitboard/med_data category = list("Computer Boards") +/datum/design/mining_shuttle + name = "Console Board (Mining Shuttle)" + desc = "Allows for the construction of circuit boards used to build a mining shuttle control console." + id = "mining_shuttle" + req_tech = list("programming" = 3) + build_type = IMPRINTER + materials = list(MAT_GLASS = 1000) + build_path = /obj/item/circuitboard/mining_shuttle + category = list("Computer Boards") + /datum/design/message_monitor name = "Console Board (Messaging Monitor Console)" desc = "Allows for the construction of circuit boards used to build a messaging monitor console." @@ -282,16 +292,6 @@ build_path = /obj/item/circuitboard/sm_monitor category = list("Computer Boards") -/datum/design/spacepodlocator - name = "Console Board (Spacepod Locator)" - desc = "Allows for the construction of circuit boards used to build a space-pod locating console" - id = "spacepodc" - req_tech = list("programming" = 4) - build_type = IMPRINTER - materials = list(MAT_GLASS = 1000) - build_path = /obj/item/circuitboard/pod_locater - category = list("Computer Boards") - /datum/design/ordercomp name = "Console Board (Supply Ordering Console)" desc = "Allows for the construction of circuit boards used to build a supply ordering console." diff --git a/code/modules/research/designs/machine_designs.dm b/code/modules/research/designs/machine_designs.dm index 5cd4c9bdc81..300563a5fc0 100644 --- a/code/modules/research/designs/machine_designs.dm +++ b/code/modules/research/designs/machine_designs.dm @@ -272,16 +272,6 @@ build_path = /obj/item/circuitboard/mechfab category = list("Research Machinery") -/datum/design/podfab - name = "Machine Board (Spacepod Fabricator)" - desc = "The circuit board for an Spacepod Fabricator" - id = "podfab" - req_tech = list("programming" = 3, "engineering" = 3) - build_type = IMPRINTER - materials = list(MAT_GLASS = 1000) - build_path = /obj/item/circuitboard/podfab - category = list("Research Machinery") - /datum/design/mech_recharger name = "Machine Board (Mech Bay Recharger)" desc = "The circuit board for a Mech Bay Recharger." diff --git a/code/modules/research/designs/mechfabricator_designs.dm b/code/modules/research/designs/mechfabricator_designs.dm index b7c208a75cc..806ee0d5068 100644 --- a/code/modules/research/designs/mechfabricator_designs.dm +++ b/code/modules/research/designs/mechfabricator_designs.dm @@ -781,17 +781,6 @@ construction_time = 100 category = list("Exosuit Equipment") -/datum/design/mech_wormhole_gen - name = "Exosuit Module (Localized Wormhole Generator)" - desc = "An exosuit module that allows generating of small quasi-stable wormholes." - id = "mech_wormhole_gen" - build_type = MECHFAB - req_tech = list("bluespace" = 4, "magnets" = 4, "plasmatech" = 3) - build_path = /obj/item/mecha_parts/mecha_equipment/wormhole_generator - materials = list(MAT_METAL=10000) - construction_time = 100 - category = list("Exosuit Equipment") - /datum/design/mech_rcd name = "Exosuit Module (RCD Module)" desc = "An exosuit-mounted Rapid Construction Device." diff --git a/code/modules/research/designs/medical_designs.dm b/code/modules/research/designs/medical_designs.dm index f91b8f2012b..7ce266b522a 100644 --- a/code/modules/research/designs/medical_designs.dm +++ b/code/modules/research/designs/medical_designs.dm @@ -72,6 +72,16 @@ build_path = /obj/item/defibrillator category = list("Medical") +/datum/design/compact_defib + name = "Compact Defibrillator" + desc = "A belt-mounted defibrillator for rapid deployment." + id = "compact_defib" + req_tech = list("materials" = 7, "biotech" = 7, "powerstorage" = 6) + build_type = PROTOLATHE + materials = list(MAT_METAL = 10000, MAT_GLASS = 4000, MAT_SILVER = 2000) + build_path = /obj/item/defibrillator/compact + category = list("Medical") + /datum/design/defib_mount name = "Defibrillator Wall Mount" desc = "A wall mount for defibrillator units." diff --git a/code/modules/research/designs/power_designs.dm b/code/modules/research/designs/power_designs.dm index ec26ae39644..c115f5e0fb6 100644 --- a/code/modules/research/designs/power_designs.dm +++ b/code/modules/research/designs/power_designs.dm @@ -7,7 +7,7 @@ desc = "A basic power cell that holds 1 kW of power." id = "basic_cell" req_tech = list("powerstorage" = 1) - build_type = PROTOLATHE | AUTOLATHE | MECHFAB | PODFAB + build_type = PROTOLATHE | AUTOLATHE | MECHFAB materials = list(MAT_METAL = 700, MAT_GLASS = 50) construction_time=100 build_path = /obj/item/stock_parts/cell @@ -18,7 +18,7 @@ desc = "A power cell that holds 10 kW of power." id = "high_cell" req_tech = list("powerstorage" = 2) - build_type = PROTOLATHE | AUTOLATHE | MECHFAB | PODFAB + build_type = PROTOLATHE | AUTOLATHE | MECHFAB materials = list(MAT_METAL = 700, MAT_GLASS = 60) construction_time=100 build_path = /obj/item/stock_parts/cell/high @@ -29,7 +29,7 @@ desc = "A power cell that holds 30 kW of power." id = "hyper_cell" req_tech = list("powerstorage" = 5, "materials" = 5, "engineering" = 5) - build_type = PROTOLATHE | MECHFAB | PODFAB + build_type = PROTOLATHE | MECHFAB materials = list(MAT_METAL = 700, MAT_GOLD = 150, MAT_SILVER = 150, MAT_GLASS = 70) construction_time=100 build_path = /obj/item/stock_parts/cell/hyper @@ -40,7 +40,7 @@ desc = "A power cell that holds 20 kW of power." id = "super_cell" req_tech = list("powerstorage" = 3, "materials" = 3) - build_type = PROTOLATHE | MECHFAB | PODFAB + build_type = PROTOLATHE | MECHFAB materials = list(MAT_METAL = 700, MAT_GLASS = 70) construction_time=100 build_path = /obj/item/stock_parts/cell/super diff --git a/code/modules/research/designs/spacepod_designs.dm b/code/modules/research/designs/spacepod_designs.dm deleted file mode 100644 index 9930426df86..00000000000 --- a/code/modules/research/designs/spacepod_designs.dm +++ /dev/null @@ -1,242 +0,0 @@ -/datum/design/spacepod_main - construction_time = 100 - name = "Circuit Design (Space Pod Mainboard)" - desc = "Allows for the construction of a Space Pod mainboard." - id = "spacepod_main" - req_tech = list("materials" = 1) //All parts required to build a basic pod have materials 1, so the mechanic can do his damn job. - build_type = PODFAB - materials = list(MAT_METAL=5000) - build_path = /obj/item/circuitboard/mecha/pod - category = list("Pod_Parts") - -////////////////////////////////////////////////// -/////////SPACEPOD PARTS/////////////////////////// -////////////////////////////////////////////////// - -/datum/design/podframe_fp - construction_time = 200 - name = "Fore port pod frame" - desc = "Allows for the construction of spacepod frames. This is the fore port component." - id = "podframefp" - build_type = PODFAB - req_tech = list("materials" = 1) - build_path = /obj/item/pod_parts/pod_frame/fore_port - category = list("Pod_Frame") - materials = list(MAT_METAL=15000,MAT_GLASS=5000) - -/datum/design/podframe_ap - construction_time = 200 - name = "Aft port pod frame" - desc = "Allows for the construction of spacepod frames. This is the aft port component." - id = "podframeap" - build_type = PODFAB - req_tech = list("materials" = 1) - build_path = /obj/item/pod_parts/pod_frame/aft_port - category = list("Pod_Frame") - materials = list(MAT_METAL=15000,MAT_GLASS=5000) - -/datum/design/podframe_fs - construction_time = 200 - name = "Fore starboard pod frame" - desc = "Allows for the construction of spacepod frames. This is the fore starboard component." - id = "podframefs" - build_type = PODFAB - req_tech = list("materials" = 1) - build_path = /obj/item/pod_parts/pod_frame/fore_starboard - category = list("Pod_Frame") - materials = list(MAT_METAL=15000,MAT_GLASS=5000) - -/datum/design/podframe_as - construction_time = 200 - name = "Aft starboard pod frame" - desc = "Allows for the construction of spacepod frames. This is the aft starboard component." - id = "podframeas" - build_type = PODFAB - req_tech = list("materials" = 1) - build_path = /obj/item/pod_parts/pod_frame/aft_starboard - category = list("Pod_Frame") - materials = list(MAT_METAL=15000,MAT_GLASS=5000) - -////////////////////////// -////////POD CORE//////// -////////////////////////// - -/datum/design/pod_core - construction_time = 700 //Pod core should take a bit to process, after all, it's a big complicated engine and stuff. - name = "Spacepod Core" - desc = "Allows for the construction of a spacepod core system, made up of the engine and life support systems." - id = "podcore" - build_type = MECHFAB | PODFAB - req_tech = list("materials" = 1) - build_path = /obj/item/pod_parts/core - category = list("Pod_Parts") - materials = list(MAT_METAL=5000,MAT_URANIUM=1000,MAT_PLASMA=5000) - -////////////////////////////////////////// -////////SPACEPOD ARMOR//////////////////// -////////////////////////////////////////// - -/datum/design/pod_armor_civ - construction_time = 400 //more time than frames, less than pod core - name = "Pod Armor (civilian)" - desc = "Allows for the construction of spacepod armor. This is the civilian version." - id = "podarmor_civ" - build_type = PODFAB - req_tech = list("materials" = 1) - build_path = /obj/item/pod_parts/armor - category = list("Pod_Armor") - materials = list(MAT_METAL=15000,MAT_GLASS=5000,MAT_PLASMA=10000) - -////////////////////////////////////////// -//////SPACEPOD GUNS/////////////////////// -////////////////////////////////////////// - -/datum/design/pod_gun_taser - construction_time = 200 - name = "Spacepod Equipment (Taser)" - desc = "Allows for the construction of a spacepod mounted taser." - id = "podgun_taser" - build_type = PODFAB - req_tech = list("materials" = 2, "combat" = 2) - build_path = /obj/item/spacepod_equipment/weaponry/taser - category = list("Pod_Weaponry") - materials = list(MAT_METAL = 15000) - locked = 1 - -/datum/design/pod_gun_btaser - construction_time = 200 - name = "Spacepod Equipment (Burst Taser)" - desc = "Allows for the construction of a spacepod mounted taser. This is the burst-fire model." - id = "podgun_btaser" - build_type = PODFAB - req_tech = list("materials" = 3, "combat" = 3) - build_path = /obj/item/spacepod_equipment/weaponry/burst_taser - category = list("Pod_Weaponry") - materials = list(MAT_METAL = 15000,MAT_PLASMA=2000) - locked = 1 - -/datum/design/pod_gun_laser - construction_time = 200 - name = "Spacepod Equipment (Laser)" - desc = "Allows for the construction of a spacepod mounted laser." - id = "podgun_laser" - build_type = PODFAB - req_tech = list("materials" = 3, "combat" = 3, "plasmatech" = 2) - build_path = /obj/item/spacepod_equipment/weaponry/laser - category = list("Pod_Weaponry") - materials = list(MAT_METAL=10000,MAT_GLASS=5000,MAT_GOLD=1000,MAT_SILVER=2000) - locked = 1 - -/datum/design/pod_mining_laser_basic - construction_time = 200 - name = "Basic Mining Laser" - desc = "Allows for the construction of a weak mining laser" - id = "pod_mining_laser_basic" - req_tech = list("materials" = 3, "powerstorage" = 2, "engineering" = 2, "magnets" = 3, "combat" = 2) - build_type = PODFAB - materials = list(MAT_METAL = 10000, MAT_GLASS = 5000, MAT_SILVER = 2000, MAT_URANIUM = 2000) - build_path = /obj/item/spacepod_equipment/weaponry/mining_laser_basic - category = list("Pod_Weaponry") - -/datum/design/pod_mining_laser - construction_time = 200 - name = "Mining Laser" - desc = "Allows for the construction of a mining laser." - id = "pod_mining_laser" - req_tech = list("materials" = 6, "powerstorage" = 6, "engineering" = 5, "magnets" = 6, "combat" = 4) - build_type = PODFAB - materials = list(MAT_METAL = 10000, MAT_GLASS = 5000, MAT_SILVER = 2000, MAT_GOLD = 2000, MAT_DIAMOND = 2000) - build_path = /obj/item/spacepod_equipment/weaponry/mining_laser - category = list("Pod_Weaponry") - -////////////////////////////////////////// -//////SPACEPOD MISC. ITEMS//////////////// -////////////////////////////////////////// - -/datum/design/pod_misc_tracker - construction_time = 100 - name = "Spacepod Tracking Module" - desc = "Allows for the construction of a Space Pod Tracking Module." - id = "podmisc_tracker" - req_tech = list("materials" = 2) //Materials 2: easy to get, no trackers with 0 science progress - build_type = PODFAB - materials = list(MAT_METAL=5000) - build_path = /obj/item/spacepod_equipment/misc/tracker - category = list("Pod_Parts") - -////////////////////////////////////////// -//////SPACEPOD CARGO ITEMS//////////////// -////////////////////////////////////////// - -/datum/design/pod_cargo_ore - construction_time = 100 - name = "Spacepod Ore Storage Module" - desc = "Allows for the construction of a Space Pod Ore Storage Module." - id = "podcargo_ore" - req_tech = list("materials" = 3, "engineering" = 2) - build_type = PODFAB - materials = list(MAT_METAL=20000, MAT_GLASS=2000) - build_path = /obj/item/spacepod_equipment/cargo/ore - category = list("Pod_Cargo") - -/datum/design/pod_cargo_crate - construction_time = 100 - name = "Spacepod Crate Storage Module" - desc = "Allows the construction of a Space Pod Crate Storage Module." - id = "podcargo_crate" - req_tech = list("materials" = 4, "engineering" = 2) //hollowing out this much of the pod without compromising structural integrity is hard - build_type = PODFAB - materials = list(MAT_METAL=25000) - build_path = /obj/item/spacepod_equipment/cargo/crate - category = list("Pod_Cargo") - -////////////////////////////////////////// -//////SPACEPOD SEC CARGO ITEMS//////////// -////////////////////////////////////////// - -/datum/design/passenger_seat - construction_time = 100 - name = "Spacepod Passenger Seat" - desc = "Allows the construction of a Space Pod Passenger Seat Module." - id = "podcargo_sec_seat" - req_tech = list("materials" = 1) // Because rule number one of refactoring - build_type = PODFAB - materials = list(MAT_METAL=7500, MAT_GLASS=2500) - build_path = /obj/item/spacepod_equipment/sec_cargo/chair - category = list("Pod_Cargo") - -/datum/design/loot_box - construction_time = 100 - name = "Spacepod Loot Storage Module" - desc = "Allows the construction of a Space Pod Auxillary Cargo Module." - id = "podcargo_sec_lootbox" - req_tech = list("materials" = 1) //it's just a set of shelves, It's not that hard to make - build_type = PODFAB - materials = list(MAT_METAL=7500, MAT_GLASS=2500) - build_path = /obj/item/spacepod_equipment/sec_cargo/loot_box - category = list("Pod_Cargo") - -////////////////////////////////////////// -//////SPACEPOD LOCK ITEMS//////////////// -////////////////////////////////////////// -/datum/design/pod_lock_keyed - construction_time = 100 - name = "Spacepod Tumbler Lock" - desc = "Allows for the construction of a tumbler style podlock." - id = "podlock_keyed" - req_tech = list("materials" = 1) //The most basic kind of locking system - build_type = PODFAB - materials = list(MAT_METAL=4500) - build_path = /obj/item/spacepod_equipment/lock/keyed - category = list("Pod_Parts") - -/datum/design/pod_key - construction_time = 100 - name = "Spacepod Tumbler Lock Key" - desc = "Allows for the construction of a blank key for a podlock." - id = "podkey" - req_tech = list("materials" = 1) //The most basic kind of locking system - build_type = PODFAB - materials = list(MAT_METAL=500) - build_path = /obj/item/spacepod_key - category = list("Pod_Parts") diff --git a/code/modules/research/destructive_analyzer.dm b/code/modules/research/destructive_analyzer.dm index 41b7fedd6db..5423f41a236 100644 --- a/code/modules/research/destructive_analyzer.dm +++ b/code/modules/research/destructive_analyzer.dm @@ -29,6 +29,11 @@ Note: Must be placed within 3 tiles of the R&D Console component_parts += new /obj/item/stock_parts/micro_laser/ultra(null) RefreshParts() +/obj/machinery/r_n_d/destructive_analyzer/Destroy() + if(linked_console) + linked_console.linked_destroy = null + return ..() + /obj/machinery/r_n_d/destructive_analyzer/RefreshParts() var/T = 0 for(var/obj/item/stock_parts/S in component_parts) diff --git a/code/modules/research/message_server.dm b/code/modules/research/message_server.dm index 3c2e2cfda0c..4ceacf94301 100644 --- a/code/modules/research/message_server.dm +++ b/code/modules/research/message_server.dm @@ -60,14 +60,16 @@ GLOBAL_LIST_EMPTY(message_servers) var/active = TRUE var/decryptkey = "password" -/obj/machinery/message_server/New() +/obj/machinery/message_server/Initialize(mapload) + . = ..() GLOB.message_servers += src decryptkey = GenerateKey() send_pda_message("System Administrator", "system", "This is an automated message. The messaging system is functioning correctly.") - ..() /obj/machinery/message_server/Destroy() GLOB.message_servers -= src + QDEL_LIST(pda_msgs) + QDEL_LIST(rc_msgs) return ..() /obj/machinery/message_server/process() diff --git a/code/modules/research/protolathe.dm b/code/modules/research/protolathe.dm index 263e67dd795..0f69a938734 100644 --- a/code/modules/research/protolathe.dm +++ b/code/modules/research/protolathe.dm @@ -14,19 +14,16 @@ Note: Must be placed west/left of and R&D console to function. container_type = OPENCONTAINER categories = list( - "Bluespace", - "Equipment", - "Janitorial", - "Medical", - "Mining", - "Miscellaneous", - "Power", - "Stock Parts", - "Weapons" - ) - - reagents = new() - + "Bluespace", + "Equipment", + "Janitorial", + "Medical", + "Mining", + "Miscellaneous", + "Power", + "Stock Parts", + "Weapons" + ) /obj/machinery/r_n_d/protolathe/New() ..() @@ -38,10 +35,9 @@ Note: Must be placed west/left of and R&D console to function. component_parts += new /obj/item/stock_parts/manipulator(null) component_parts += new /obj/item/reagent_containers/glass/beaker/large(null) component_parts += new /obj/item/reagent_containers/glass/beaker/large(null) + create_reagents() RefreshParts() - reagents.my_atom = src - /obj/machinery/r_n_d/protolathe/upgraded/New() ..() component_parts = list() @@ -54,7 +50,10 @@ Note: Must be placed west/left of and R&D console to function. component_parts += new /obj/item/reagent_containers/glass/beaker/large(null) RefreshParts() - reagents.my_atom = src +/obj/machinery/r_n_d/protolathe/Destroy() + if(linked_console) + linked_console.linked_lathe = null + return ..() /obj/machinery/r_n_d/protolathe/RefreshParts() var/T = 0 diff --git a/code/modules/research/rdconsole.dm b/code/modules/research/rdconsole.dm index ffa8ac763de..79c386d97b0 100644 --- a/code/modules/research/rdconsole.dm +++ b/code/modules/research/rdconsole.dm @@ -176,6 +176,20 @@ won't update every console in existence) but it's more of a hassle to do. Also, SyncRDevices() /obj/machinery/computer/rdconsole/Destroy() + QDEL_NULL(files) + QDEL_NULL(t_disk) + QDEL_NULL(d_disk) + QDEL_LIST(matching_designs) + if(linked_destroy) + linked_destroy.linked_console = null + linked_destroy = null + if(linked_lathe) + linked_lathe.linked_console = null + linked_lathe = null + if(linked_imprinter) + linked_imprinter.linked_console = null + linked_imprinter = null + if(wait_message_timer) deltimer(wait_message_timer) wait_message_timer = 0 @@ -854,7 +868,6 @@ won't update every console in existence) but it's more of a hassle to do. Also, if(b_type & PROTOLATHE) lathe_types += "Protolathe" if(b_type & AUTOLATHE) lathe_types += "Autolathe" if(b_type & MECHFAB) lathe_types += "Mech Fabricator" - if(b_type & PODFAB) lathe_types += "Spacepod Fabricator" if(b_type & BIOGENERATOR) lathe_types += "Biogenerator" if(b_type & SMELTER) lathe_types += "Smelter" var/list/materials = list() @@ -941,13 +954,6 @@ won't update every console in existence) but it's more of a hassle to do. Also, id = 3 circuit = /obj/item/circuitboard/rdconsole/experiment -/obj/machinery/computer/rdconsole/mechanics - name = "mechanics R&D console" - desc = "A console used to interface with R&D tools." - id = 4 - req_access = list(ACCESS_MECHANIC) - circuit = /obj/item/circuitboard/rdconsole/mechanics - /obj/machinery/computer/rdconsole/public name = "public R&D console" desc = "A console used to interface with R&D tools." diff --git a/code/modules/research/rdmachines.dm b/code/modules/research/rdmachines.dm index ac78e892c7e..3fba5e8093a 100644 --- a/code/modules/research/rdmachines.dm +++ b/code/modules/research/rdmachines.dm @@ -32,12 +32,17 @@ wires["Black"] = 0 wires["White"] = 0 var/list/w = list("Red","Blue","Green","Yellow","Black","White") - src.hack_wire = pick(w) - w -= src.hack_wire - src.shock_wire = pick(w) - w -= src.shock_wire - src.disable_wire = pick(w) - w -= src.disable_wire + hack_wire = pick_n_take(w) + shock_wire = pick_n_take(w) + disable_wire = pick_n_take(w) + +/obj/machinery/r_n_d/Destroy() + if(loaded_item) + loaded_item.forceMove(get_turf(src)) + loaded_item = null + linked_console = null + materials = null + return ..() /obj/machinery/r_n_d/attack_hand(mob/user as mob) if(shocked) diff --git a/code/modules/research/xenobiology/xenobio_camera.dm b/code/modules/research/xenobiology/xenobio_camera.dm index 2b6910f5523..add53ff04a9 100644 --- a/code/modules/research/xenobiology/xenobio_camera.dm +++ b/code/modules/research/xenobiology/xenobio_camera.dm @@ -155,7 +155,7 @@ current_potion = O to_chat(user, "You load [O] in the console's potion slot[replaced ? ", replacing the one that was there before" : ""].") return - else if(istype(O, /obj/item/storage/bag)) + else if(istype(O, /obj/item/storage/bag) || istype(O, /obj/item/storage/box)) var/obj/item/storage/P = O var/loaded = 0 for(var/obj/item/reagent_containers/food/snacks/monkeycube/MC in P.contents) @@ -191,7 +191,10 @@ var/mob/camera/aiEye/remote/xenobio/remote_eye = C.remote_control var/obj/machinery/computer/camera_advanced/xenobio/X = target - if(GLOB.cameranet.checkTurfVis(remote_eye.loc)) + if(iswallturf(remote_eye.loc)) + to_chat(owner, "You can't place slime here.") + return + else if(GLOB.cameranet.checkTurfVis(remote_eye.loc)) for(var/mob/living/simple_animal/slime/S in X.stored_slimes) S.forceMove(remote_eye.loc) S.visible_message("[S] warps in!") @@ -238,6 +241,12 @@ if(LAZYLEN(SSmobs.cubemonkeys) >= GLOB.configuration.general.monkey_cube_cap) to_chat(owner, "Bluespace harmonics prevent the spawning of more than [GLOB.configuration.general.monkey_cube_cap] monkeys on the station at one time!") return + else if(iswallturf(remote_eye.loc)) + to_chat(owner, "You can't place monkey here.") + return + else if(!X.monkeys) + to_chat(owner, "[X] doesn't have monkeys.") + return else if(X.monkeys >= 1) var/mob/living/carbon/human/monkey/food = new /mob/living/carbon/human/monkey(remote_eye.loc) SSmobs.cubemonkeys += food @@ -323,6 +332,8 @@ to_chat(owner, "Ctrl-click a slime to scan it.") to_chat(owner, "Alt-click a slime to feed it a potion.") to_chat(owner, "Ctrl-click or a dead monkey to recycle it, or the floor to place a new monkey.") + var/obj/machinery/computer/camera_advanced/xenobio/X = owner.machine + to_chat(owner, "[X] now has [X.monkeys] monkeys left.") // // Alternate clicks for slime, monkey and open turf if using a xenobio console @@ -415,7 +426,10 @@ var/mob/camera/aiEye/remote/xenobio/E = C.remote_control var/obj/machinery/computer/camera_advanced/xenobio/X = E.origin var/area/turfarea = get_area(T) - if(turfarea.name == E.allowed_area || turfarea.xenobiology_compatible) + if(iswallturf(T)) + to_chat(user, "You can't place slime here.") + return + else if(turfarea.name == E.allowed_area || turfarea.xenobiology_compatible) for(var/mob/living/simple_animal/slime/S in X.stored_slimes) S.forceMove(T) S.visible_message("[S] warps in!") @@ -430,8 +444,10 @@ var/mob/camera/aiEye/remote/xenobio/E = C.remote_control var/obj/machinery/computer/camera_advanced/xenobio/X = E.origin var/area/turfarea = get_area(T) - - if(turfarea.name == E.allowed_area || turfarea.xenobiology_compatible) + if(iswallturf(T)) + to_chat(user, "You can't place monkey here.") + return + else if(turfarea.name == E.allowed_area || turfarea.xenobiology_compatible) if(X.monkeys >= 1) var/mob/living/carbon/human/monkey/food = new /mob/living/carbon/human/monkey(T) food.LAssailant = C diff --git a/code/modules/response_team/ert_outfits.dm b/code/modules/response_team/ert_outfits.dm index b597af644f9..d4b4f5fc929 100644 --- a/code/modules/response_team/ert_outfits.dm +++ b/code/modules/response_team/ert_outfits.dm @@ -340,7 +340,7 @@ /obj/item/organ/internal/cyberimp/arm/surgery, /obj/item/organ/internal/cyberimp/chest/nutriment ) - belt = /obj/item/defibrillator/compact/loaded + belt = /obj/item/defibrillator/compact/advanced/loaded l_pocket = /obj/item/reagent_containers/hypospray/safety/ert r_pocket = /obj/item/melee/classic_baton/telescopic @@ -369,7 +369,7 @@ mask = /obj/item/clothing/mask/gas/sechailer/swat suit_store = /obj/item/gun/energy/gun/blueshield/pdw9 - belt = /obj/item/defibrillator/compact/loaded + belt = /obj/item/defibrillator/compact/advanced/loaded l_pocket = /obj/item/reagent_containers/hypospray/combat/nanites r_pocket = /obj/item/reagent_containers/hypospray/autoinjector diff --git a/code/modules/ruins/lavalandruin_code/puzzle.dm b/code/modules/ruins/lavalandruin_code/puzzle.dm index 2a3ae55bd4b..4a726f2b993 100644 --- a/code/modules/ruins/lavalandruin_code/puzzle.dm +++ b/code/modules/ruins/lavalandruin_code/puzzle.dm @@ -292,7 +292,7 @@ //Some armor so it's harder to kill someone by mistake. /obj/structure/puzzle_element/prison - armor = list("melee" = 50, "bullet" = 50, "laser" = 50, "energy" = 50, "bomb" = 50, "bio" = 50, "rad" = 50, "fire" = 50, "acid" = 50) + armor = list(MELEE = 50, BULLET = 50, LASER = 50, ENERGY = 50, BOMB = 50, BIO = 50, RAD = 50, FIRE = 50, ACID = 50) /obj/structure/puzzle_element/prison/relaymove(mob/user) return diff --git a/code/modules/ruins/objects_and_mobs/necropolis_gate.dm b/code/modules/ruins/objects_and_mobs/necropolis_gate.dm index d5f7a1e1aa2..2277e096a30 100644 --- a/code/modules/ruins/objects_and_mobs/necropolis_gate.dm +++ b/code/modules/ruins/objects_and_mobs/necropolis_gate.dm @@ -182,10 +182,10 @@ GLOBAL_DATUM(necropolis_gate, /obj/structure/necropolis_gate/legion_gate) var/sound/legion_sound = sound('sound/creatures/legion_spawn.ogg') for(var/mob/M in GLOB.player_list) - if(M.z == z) + if(M.z == z && M.client) to_chat(M, "Discordant whispers flood your mind in a thousand voices. Each one speaks your name, over and over. Something horrible has been released.") M.playsound_local(T, null, 100, FALSE, 0, FALSE, pressure_affected = FALSE, S = legion_sound) - flash_color(M, flash_color = "#FF0000", flash_time = 50) + M.flash_screen_color("#FF0000", 5 SECONDS) var/mutable_appearance/release_overlay = mutable_appearance('icons/effects/effects.dmi', "legiondoor") notify_ghosts("Legion has been released in the [get_area(src)]!", source = src, alert_overlay = release_overlay, action = NOTIFY_JUMP) diff --git a/code/modules/security_levels/security_levels.dm b/code/modules/security_levels/security_levels.dm index d3d4be7dff9..c9bf85eaac4 100644 --- a/code/modules/security_levels/security_levels.dm +++ b/code/modules/security_levels/security_levels.dm @@ -33,7 +33,7 @@ GLOBAL_DATUM_INIT(security_announcement_down, /datum/announcement/priority/secur switch(level) if(SEC_LEVEL_GREEN) - GLOB.security_announcement_down.Announce("All threats to the station have passed. All weapons need to be holstered and privacy laws are once again fully enforced.","Attention! Security level lowered to green.") + GLOB.security_announcement_down.Announce("All threats to the station have passed. All weapons need to be holstered and privacy laws are once again fully enforced.","Attention! Security level lowered to green.", 'sound/AI/green.ogg') GLOB.security_level = SEC_LEVEL_GREEN post_status("alert", "outline") @@ -45,9 +45,9 @@ GLOBAL_DATUM_INIT(security_announcement_down, /datum/announcement/priority/secur if(SEC_LEVEL_BLUE) if(GLOB.security_level < SEC_LEVEL_BLUE) - GLOB.security_announcement_up.Announce("The station has received reliable information about possible hostile activity on the station. Security staff may have weapons visible and random searches are permitted.","Attention! Security level elevated to blue.") + GLOB.security_announcement_up.Announce("The station has received reliable information about possible hostile activity on the station. Security staff may have weapons visible and random searches are permitted.","Attention! Security level elevated to blue.", 'sound/AI/blue.ogg') else - GLOB.security_announcement_down.Announce("The immediate threat has passed. Security may no longer have weapons drawn at all times, but may continue to have them visible. Random searches are still allowed.","Attention! Security level lowered to blue.") + GLOB.security_announcement_down.Announce("The immediate threat has passed. Security may no longer have weapons drawn at all times, but may continue to have them visible. Random searches are still allowed.","Attention! Security level lowered to blue.", 'sound/AI/blue.ogg') GLOB.security_level = SEC_LEVEL_BLUE post_status("alert", "outline") @@ -59,9 +59,9 @@ GLOBAL_DATUM_INIT(security_announcement_down, /datum/announcement/priority/secur if(SEC_LEVEL_RED) if(GLOB.security_level < SEC_LEVEL_RED) - GLOB.security_announcement_up.Announce("There is an immediate and serious threat to the station. Security may have weapons unholstered at all times. Random searches are allowed and advised.","Attention! Code Red!") + GLOB.security_announcement_up.Announce("There is an immediate and serious threat to the station. Security may have weapons unholstered at all times. Random searches are allowed and advised.","Attention! Code Red!", 'sound/AI/red.ogg') else - GLOB.security_announcement_down.Announce("The station's self-destruct mechanism has been deactivated, but there is still an immediate and serious threat to the station. Security may have weapons unholstered at all times. Random searches are allowed and advised.","Attention! Code Red!") + GLOB.security_announcement_down.Announce("The station's self-destruct mechanism has been deactivated, but there is still an immediate and serious threat to the station. Security may have weapons unholstered at all times. Random searches are allowed and advised.","Attention! Code Red!", 'sound/AI/red.ogg') GLOB.security_level = SEC_LEVEL_RED var/obj/machinery/door/airlock/highsecurity/red/R = locate(/obj/machinery/door/airlock/highsecurity/red) in GLOB.airlocks @@ -77,7 +77,7 @@ GLOBAL_DATUM_INIT(security_announcement_down, /datum/announcement/priority/secur FA.overlays += image('icons/obj/monitors.dmi', "overlay_red") if(SEC_LEVEL_GAMMA) - GLOB.security_announcement_up.Announce("Central Command has ordered the Gamma security level on the station. Security is to have weapons equipped at all times, and all civilians are to immediately seek their nearest head for transportation to a secure location.", "Attention! Gamma security level activated!", sound('sound/effects/new_siren.ogg')) + GLOB.security_announcement_up.Announce("Central Command has ordered the Gamma security level on the station. Security is to have weapons equipped at all times, and all civilians are to immediately seek their nearest head for transportation to a secure location.", "Attention! Gamma security level activated!", 'sound/effects/new_siren.ogg', new_sound2 = 'sound/AI/gamma.ogg') GLOB.security_level = SEC_LEVEL_GAMMA if(GLOB.security_level < SEC_LEVEL_RED) @@ -95,7 +95,7 @@ GLOBAL_DATUM_INIT(security_announcement_down, /datum/announcement/priority/secur FA.update_icon() if(SEC_LEVEL_EPSILON) - GLOB.security_announcement_up.Announce("Central Command has ordered the Epsilon security level on the station. Consider all contracts terminated.","Attention! Epsilon security level activated!", new_sound = sound('sound/effects/purge_siren.ogg')) + GLOB.security_announcement_up.Announce("Central Command has ordered the Epsilon security level on the station. Consider all contracts terminated.","Attention! Epsilon security level activated!", 'sound/effects/purge_siren.ogg', new_sound2 = 'sound/AI/epsilon.ogg') GLOB.security_level = SEC_LEVEL_EPSILON post_status("alert", "epsilonalert") @@ -106,7 +106,7 @@ GLOBAL_DATUM_INIT(security_announcement_down, /datum/announcement/priority/secur FA.overlays += image('icons/obj/monitors.dmi', "overlay_epsilon") if(SEC_LEVEL_DELTA) - GLOB.security_announcement_up.Announce("The station's self-destruct mechanism has been engaged. All crew are instructed to obey all instructions given by heads of staff. Any violations of these orders can be punished by death. This is not a drill.","Attention! Delta security level reached!", new_sound = sound('sound/effects/deltaalarm.ogg')) + GLOB.security_announcement_up.Announce("The station's self-destruct mechanism has been engaged. All crew are instructed to obey all instructions given by heads of staff. Any violations of these orders can be punished by death. This is not a drill.","Attention! Delta security level reached!", 'sound/effects/deltaalarm.ogg', new_sound2 = 'sound/AI/delta.ogg') GLOB.security_level = SEC_LEVEL_DELTA post_status("alert", "deltaalert") diff --git a/code/modules/shuttle/emergency.dm b/code/modules/shuttle/emergency.dm index 8a5c2118794..f9c3edf437c 100644 --- a/code/modules/shuttle/emergency.dm +++ b/code/modules/shuttle/emergency.dm @@ -86,12 +86,15 @@ travelDir = 0 var/sound_played = 0 //If the launch sound has been sent to all players on the shuttle itself - var/datum/announcement/priority/emergency_shuttle_docked = new(0, new_sound = sound('sound/AI/shuttledock.ogg')) - var/datum/announcement/priority/emergency_shuttle_called = new(0, new_sound = sound('sound/AI/shuttlecalled.ogg')) - var/datum/announcement/priority/emergency_shuttle_recalled = new(0, new_sound = sound('sound/AI/shuttlerecalled.ogg')) + var/datum/announcement/priority/emergency_shuttle_docked = new(0, new_sound = sound('sound/AI/eshuttle_dock.ogg')) + var/datum/announcement/priority/emergency_shuttle_called = new(0, new_sound = sound('sound/AI/eshuttle_call.ogg')) + var/datum/announcement/priority/emergency_shuttle_recalled = new(0, new_sound = sound('sound/AI/eshuttle_recall.ogg')) var/canRecall = TRUE //no bad condom, do not recall the crew transfer shuttle! + var/datum/announcement/priority/crew_shuttle_called = new(0, new_sound = sound('sound/AI/cshuttle.ogg')) + var/datum/announcement/priority/crew_shuttle_docked = new(0, new_sound = sound('sound/AI/cshuttle_dock.ogg')) + /obj/docking_port/mobile/emergency/register() if(!..()) @@ -146,9 +149,10 @@ SSshuttle.emergencyLastCallLoc = signalOrigin else SSshuttle.emergencyLastCallLoc = null - - emergency_shuttle_called.Announce("The emergency shuttle has been called. [redAlert ? "Red Alert state confirmed: Dispatching priority shuttle. " : "" ]It will arrive in [timeLeft(600)] minutes.[reason][SSshuttle.emergencyLastCallLoc ? "\n\nCall signal traced. Results can be viewed on any communications console." : "" ]") - + if(canRecall) + emergency_shuttle_called.Announce("The emergency shuttle has been called. [redAlert ? "Red Alert state confirmed: Dispatching priority shuttle. " : "" ]It will arrive in [timeLeft(600)] minutes.[reason][SSshuttle.emergencyLastCallLoc ? "\n\nCall signal traced. Results can be viewed on any communications console." : "" ]") + else + crew_shuttle_called.Announce("The crew transfer shuttle has been called. [redAlert ? "Red Alert state confirmed: Dispatching priority shuttle. " : "" ]It will arrive in [timeLeft(600)] minutes.[reason]") /obj/docking_port/mobile/emergency/cancel(area/signalOrigin) if(!canRecall) @@ -230,7 +234,10 @@ return mode = SHUTTLE_DOCKED timer = world.time - emergency_shuttle_docked.Announce("The Emergency Shuttle has docked with the station. You have [timeLeft(600)] minutes to board the Emergency Shuttle.") + if(canRecall) + emergency_shuttle_docked.Announce("The emergency shuttle has docked with the station. You have [timeLeft(600)] minutes to board the emergency shuttle.") + else + crew_shuttle_docked.Announce("The crew transfer shuttle has docked with the station. You have [timeLeft(600)] minutes to board the crew transfer shuttle.") /* //Gangs only have one attempt left if the shuttle has docked with the station to prevent suffering from dominator delays diff --git a/code/modules/shuttle/supply.dm b/code/modules/shuttle/supply.dm index 8a6c5b159a4..341d96b8ec8 100644 --- a/code/modules/shuttle/supply.dm +++ b/code/modules/shuttle/supply.dm @@ -528,7 +528,6 @@ return amount = clamp(round(num_input), 1, 20) - var/datum/supply_packs/P = locateUID(params["crate"]) if(!istype(P)) return diff --git a/code/modules/spacepods/construction.dm b/code/modules/spacepods/construction.dm deleted file mode 100644 index a42275f9f84..00000000000 --- a/code/modules/spacepods/construction.dm +++ /dev/null @@ -1,228 +0,0 @@ -/obj/structure/spacepod_frame - density = 1 - opacity = 0 - - anchored = 1 - layer = 3.9 - - icon = 'icons/goonstation/48x48/pod_construction.dmi' - icon_state = "pod_1" - - var/datum/construction/construct - -/obj/structure/spacepod_frame/Initialize(mapload) - . = ..() - bound_width = 64 - bound_height = 64 - - construct = new /datum/construction/reversible2/pod(src) - - dir = EAST - -/obj/structure/spacepod_frame/Destroy() - QDEL_NULL(construct) - return ..() - -/obj/structure/spacepod_frame/attackby(obj/item/W as obj, mob/user as mob, params) - if(!construct || !construct.action(W, user)) - return ..() - -/obj/structure/spacepod_frame/attack_hand() - return - - - -///////////////////////////////// -// CONSTRUCTION STEPS -///////////////////////////////// -/datum/construction/reversible2/pod - result = /obj/spacepod/civilian - base_icon="pod" - //taskpath = /datum/job_objective/make_pod - steps = list( - // 1. Initial state - list( - "desc" = "An empty pod frame.", - state_next = list( - "key" = /obj/item/stack/cable_coil, - "vis_msg" = "{USER} wires the {HOLDER}.", - "self_msg" = "You wire the {HOLDER}." - ) - ), - // 2. Crudely Wired - list( - "desc" = "A crudely-wired pod frame.", - state_prev = list( - "key" = TOOL_WIRECUTTER, - "vis_msg" = "{USER} cuts out the {HOLDER}'s wiring.", - "self_msg" = "You remove the {HOLDER}'s wiring." - ), - state_next = list( - "key" = TOOL_SCREWDRIVER, - "vis_msg" = "{USER} adjusts the wiring.", - "self_msg" = "You adjust the {HOLDER}'s wiring." - ) - ), - // 3. Cleanly wired - list( - "desc" = "A wired pod frame.", - state_prev = list( - "key" = TOOL_SCREWDRIVER, - "vis_msg" = "{USER} unclips {HOLDER}'s wiring harnesses.", - "self_msg" = "You unclip {HOLDER}'s wiring harnesses." - ), - state_next = list( - "key" = /obj/item/circuitboard/mecha/pod, - "vis_msg" = "{USER} inserts the mainboard into the {HOLDER}.", - "self_msg" = "You insert the mainboard into the {HOLDER}.", - "delete" = 1 - ) - ), - // 4. Circuit added - list( - "desc" = "A wired pod frame with a loose mainboard.", - state_prev = list( - "key" = TOOL_CROWBAR, - "vis_msg" = "{USER} pries out the mainboard.", - "self_msg" = "You pry out the mainboard.", - - "spawn" = /obj/item/circuitboard/mecha/pod, - "amount" = 1 - ), - state_next = list( - "key" = TOOL_SCREWDRIVER, - "vis_msg" = "{USER} secures the mainboard.", - "self_msg" = "You secure the mainboard." - ) - ), - // 5. Circuit secured - list( - "desc" = "A wired pod frame with a secured mainboard.", - state_prev = list( - "key" = TOOL_SCREWDRIVER, - "vis_msg" = "{USER} unsecures the mainboard.", - "self_msg" = "You unscrew the mainboard from the {HOLDER}." - ), - state_next = list( - "key" = /obj/item/pod_parts/core, - , - "vis_msg" = "{USER} inserts the core into the {HOLDER}.", - "self_msg" = "You carefully insert the core into the {HOLDER}.", - "delete" = 1 - ) - ), - // 6. Core inserted - list( - "desc" = "A naked space pod with a loose core.", - state_prev = list( - "key" = TOOL_CROWBAR, - "vis_msg" = "{USER} delicately removes the core from the {HOLDER} with a crowbar.", - "self_msg" = "You delicately remove the core from the {HOLDER} with a crowbar.", - - "spawn" = /obj/item/pod_parts/core, - "amount" = 1 - ), - state_next = list( - "key" = TOOL_WRENCH, - "vis_msg" = "{USER} secures the core's bolts.", - "self_msg" = "You secure the core's bolts." - ) - ), - // 7. Core secured - list( - "desc" = "A naked space pod with an exposed core. How lewd.", - state_prev = list( - "key" = TOOL_WRENCH, - "vis_msg" = "{USER} unsecures the {HOLDER}'s core.", - "self_msg" = "You unsecure the {HOLDER}'s core." - ), - state_next = list( - "key" = /obj/item/stack/sheet/metal, - "amount" = 5, - "vis_msg" = "{USER} fabricates a pressure bulkhead for the {HOLDER}.", - "self_msg" = "You frabricate a pressure bulkhead for the {HOLDER}." - ) - ), - // 8. Bulkhead added - list( - "desc" = "A space pod with loose bulkhead panelling exposed.", - state_prev = list( - "key" = TOOL_CROWBAR, - "vis_msg" = "{USER} pops the {HOLDER}'s bulkhead panelling loose.", - "self_msg" = "You pop the {HOLDER}'s bulkhead panelling loose.", - - "spawn" = /obj/item/stack/sheet/metal, - "amount" = 5, - ), - state_next = list( - "key" = TOOL_WRENCH, - "vis_msg" = "{USER} secures the {HOLDER}'s bulkhead panelling.", - "self_msg" = "You secure the {HOLDER}'s bulkhead panelling." - ) - ), - // 9. Bulkhead secured with bolts - list( - "desc" = "A space pod with unwelded bulkhead panelling exposed.", - state_prev = list( - "key" = TOOL_WRENCH, - "vis_msg" = "{USER} unbolts the {HOLDER}'s bulkhead panelling.", - "self_msg" = "You unbolt the {HOLDER}'s bulkhead panelling." - ), - state_next = list( - "key" = TOOL_WELDER, - "vis_msg" = "{USER} seals the {HOLDER}'s bulkhead panelling with a weld.", - "self_msg" = "You seal the {HOLDER}'s bulkhead panelling with a weld." - ) - ), - // 10. Welded bulkhead - list( - "desc" = "A space pod with sealed bulkhead panelling exposed.", - state_prev = list( - "key" = TOOL_WELDER, - "vis_msg" = "{USER} cuts the {HOLDER}'s bulkhead panelling loose.", - "self_msg" = "You cut the {HOLDER}'s bulkhead panelling loose." - ), - state_next = list( - "key" = /obj/item/pod_parts/armor, - "vis_msg" = "{USER} installs the {HOLDER}'s armor plating.", - "self_msg" = "You install the {HOLDER}'s armor plating.", - "delete" = 1 - ) - ), - // 11. Loose armor - list( - "desc" = "A space pod with unsecured armor.", - state_prev = list( - "key" = TOOL_CROWBAR, - "vis_msg" = "{USER} pries off {HOLDER}'s armor.", - "self_msg" = "You pry off {HOLDER}'s armor.", - "spawn" = /obj/item/pod_parts/armor, - "amount" = 1 - ), - state_next = list( - "key" = TOOL_WRENCH, - "vis_msg" = "{USER} bolts down the {HOLDER}'s armor.", - "self_msg" = "You bolt down the {HOLDER}'s armor." - ) - ), - // 12. Bolted-down armor - list( - "desc" = "A space pod with unsecured armor.", - state_prev = list( - "key" = TOOL_WRENCH, - "vis_msg" = "{USER} unsecures the {HOLDER}'s armor.", - "self_msg" = "You unsecure the {HOLDER}'s armor." - ), - state_next = list( - "key" = TOOL_WELDER, - "vis_msg" = "{USER} welds the {HOLDER}'s armor.", - "self_msg" = "You weld the {HOLDER}'s armor." - ) - ) - // EOF - ) - -/datum/construction/reversible2/pod/spawn_result(mob/user as mob) - ..() - SSblackbox.record_feedback("amount", "spacepod_created", 1) - return diff --git a/code/modules/spacepods/equipment.dm b/code/modules/spacepods/equipment.dm deleted file mode 100644 index fc1f87d9b07..00000000000 --- a/code/modules/spacepods/equipment.dm +++ /dev/null @@ -1,278 +0,0 @@ -/obj/item/spacepod_equipment/weaponry/proc/fire_weapons() - if(HAS_TRAIT(usr, TRAIT_PACIFISM) && harmful) - to_chat(usr, "You don't want to harm other living beings!") - return - if(my_atom.next_firetime > world.time) - to_chat(usr, "Your weapons are recharging.") - return - my_atom.next_firetime = world.time + fire_delay - var/turf/firstloc - var/turf/secondloc - if(!my_atom.equipment_system || !my_atom.equipment_system.weapon_system) - to_chat(usr, "Missing equipment or weapons.") - my_atom.verbs -= text2path("[type]/proc/fire_weapons") - return - if(!my_atom.battery.use(shot_cost)) - to_chat(usr, "Insufficient charge to fire the weapons") - return - var/olddir - for(var/i = 0; i < shots_per; i++) - if(olddir != my_atom.dir) - switch(my_atom.dir) - if(NORTH) - firstloc = get_step(my_atom, NORTH) - secondloc = get_step(firstloc,EAST) - if(SOUTH) - firstloc = get_turf(my_atom) - secondloc = get_step(firstloc,EAST) - if(EAST) - firstloc = get_step(my_atom, EAST) - secondloc = get_step(firstloc,NORTH) - if(WEST) - firstloc = get_turf(my_atom) - secondloc = get_step(firstloc,NORTH) - olddir = dir - var/obj/item/projectile/projone = new projectile_type(firstloc) - var/obj/item/projectile/projtwo = new projectile_type(secondloc) - projone.starting = get_turf(my_atom) - projone.firer = usr - projone.def_zone = "chest" - projtwo.starting = get_turf(my_atom) - projtwo.firer = usr - projtwo.def_zone = "chest" - spawn() - playsound(src, fire_sound, 50, 1) - projone.dumbfire(my_atom.dir) - projtwo.dumbfire(my_atom.dir) - sleep(2) - -/datum/spacepod/equipment - var/obj/spacepod/my_atom - var/list/obj/item/spacepod_equipment/installed_modules = list() // holds an easy to access list of installed modules - - var/obj/item/spacepod_equipment/weaponry/weapon_system // weapons system - var/obj/item/spacepod_equipment/misc/misc_system // misc system - var/obj/item/spacepod_equipment/cargo/cargo_system // cargo system - var/obj/item/spacepod_equipment/cargo/sec_cargo_system // secondary cargo system - var/obj/item/spacepod_equipment/lock/lock_system // lock system - -/datum/spacepod/equipment/New(obj/spacepod/SP) - ..() - if(istype(SP)) - my_atom = SP - -/obj/item/spacepod_equipment - name = "equipment" - var/obj/spacepod/my_atom - var/occupant_mod = 0 // so any module can modify occupancy - var/list/storage_mod = list("slots" = 0, "w_class" = 0) // so any module can modify storage slots - -/obj/item/spacepod_equipment/proc/removed(mob/user) // So that you can unload cargo when you remove the module - return - -/* -/////////////////////////////////////// -/////////Weapon System/////////////////// -/////////////////////////////////////// -*/ - -/obj/item/spacepod_equipment/weaponry - name = "pod weapon" - desc = "You shouldn't be seeing this" - icon = 'icons/vehicles/spacepod.dmi' - icon_state = "blank" - var/obj/item/projectile/projectile_type - var/shot_cost = 0 - var/shots_per = 1 - var/fire_sound - var/fire_delay = 15 - var/harmful = TRUE - -/obj/item/spacepod_equipment/weaponry/taser - name = "disabler system" - desc = "A weak taser system for space pods, fires disabler beams." - icon_state = "weapon_taser" - projectile_type = /obj/item/projectile/beam/disabler - shot_cost = 400 - fire_sound = 'sound/weapons/taser.ogg' - harmful = FALSE - -/obj/item/spacepod_equipment/weaponry/burst_taser - name = "burst taser system" - desc = "A weak taser system for space pods, this one fires 3 at a time." - icon_state = "weapon_burst_taser" - projectile_type = /obj/item/projectile/beam/disabler - shot_cost = 1200 - shots_per = 3 - fire_sound = 'sound/weapons/taser.ogg' - fire_delay = 30 - harmful = FALSE - -/obj/item/spacepod_equipment/weaponry/laser - name = "laser system" - desc = "A weak laser system for space pods, fires concentrated bursts of energy." - icon_state = "weapon_laser" - projectile_type = /obj/item/projectile/beam - shot_cost = 600 - fire_sound = 'sound/weapons/laser.ogg' - -// MINING LASERS -/obj/item/spacepod_equipment/weaponry/mining_laser_basic - name = "weak mining laser system" - desc = "A weak mining laser system for space pods, fires bursts of energy that cut through rock." - icon = 'icons/goonstation/pods/ship.dmi' - icon_state = "pod_taser" - projectile_type = /obj/item/projectile/kinetic/pod - shot_cost = 300 - fire_delay = 14 - fire_sound = 'sound/weapons/kenetic_accel.ogg' - -/obj/item/spacepod_equipment/weaponry/mining_laser - name = "mining laser system" - desc = "A mining laser system for space pods, fires bursts of energy that cut through rock." - icon = 'icons/goonstation/pods/ship.dmi' - icon_state = "pod_m_laser" - projectile_type = /obj/item/projectile/kinetic/pod/regular - shot_cost = 250 - fire_delay = 10 - fire_sound = 'sound/weapons/kenetic_accel.ogg' - -/* -/////////////////////////////////////// -/////////Misc. System/////////////////// -/////////////////////////////////////// -*/ - -GLOBAL_LIST_EMPTY(pod_trackers) - -/obj/item/spacepod_equipment/misc - name = "pod misc" - desc = "You shouldn't be seeing this" - icon = 'icons/goonstation/pods/ship.dmi' - icon_state = "blank" - -/obj/item/spacepod_equipment/misc/tracker - name = "\improper spacepod tracking system" - desc = "A tracking device for spacepods." - icon_state = "pod_locator" - -/obj/item/spacepod_equipment/misc/tracker/Initialize(mapload) - GLOB.pod_trackers |= src - return ..() - -/obj/item/spacepod_equipment/misc/tracker/Destroy() - GLOB.pod_trackers -= src - return ..() - -/* -/////////////////////////////////////// -/////////Cargo System////////////////// -/////////////////////////////////////// -*/ - -/obj/item/spacepod_equipment/cargo - name = "pod cargo" - desc = "You shouldn't be seeing this" - icon = 'icons/vehicles/spacepod.dmi' - icon_state = "cargo_blank" - var/obj/storage = null - -/obj/item/spacepod_equipment/cargo/proc/passover(obj/item/I) - return - -/obj/item/spacepod_equipment/cargo/proc/unload() // called by unload verb - if(storage) - storage.forceMove(get_turf(my_atom)) - storage = null - -/obj/item/spacepod_equipment/cargo/removed(mob/user) // called when system removed - . = ..() - unload() - -// Ore System -/obj/item/spacepod_equipment/cargo/ore - name = "spacepod ore storage system" - desc = "An ore storage system for spacepods. Scoops up any ore you drive over." - icon_state = "cargo_ore" - -/obj/item/spacepod_equipment/cargo/ore/passover(obj/item/I) - if(storage && istype(I,/obj/item/stack/ore)) - I.forceMove(storage) - -// Crate System -/obj/item/spacepod_equipment/cargo/crate - name = "spacepod crate storage system" - desc = "A heavy duty storage system for spacepods. Holds one crate." - icon_state = "cargo_crate" - -/* -/////////////////////////////////////// -/////////Secondary Cargo System//////// -/////////////////////////////////////// -*/ - -/obj/item/spacepod_equipment/sec_cargo - name = "secondary cargo" - desc = "you shouldn't be seeing this" - icon = 'icons/vehicles/spacepod.dmi' - icon_state = "blank" - -// Passenger Seat -/obj/item/spacepod_equipment/sec_cargo/chair - name = "passenger seat" - desc = "A passenger seat for a spacepod." - icon_state = "sec_cargo_chair" - occupant_mod = 1 - -// Loot Box -/obj/item/spacepod_equipment/sec_cargo/loot_box - name = "loot box" - desc = "A small compartment to store valuables." - icon_state = "sec_cargo_loot" - storage_mod = list("slots" = 7, "w_class" = 14) - -/* -/////////////////////////////////////// -/////////Lock System/////////////////// -/////////////////////////////////////// -*/ - -/obj/item/spacepod_equipment/lock - name = "pod lock" - desc = "You shouldn't be seeing this" - icon = 'icons/vehicles/spacepod.dmi' - icon_state = "blank" - var/mode = 0 - var/id = null - -// Key and Tumbler System -/obj/item/spacepod_equipment/lock/keyed - name = "spacepod tumbler lock" - desc = "A locking system to stop podjacking. This version uses a standalone key." - icon_state = "lock_tumbler" - var/static/id_source = 0 - -/obj/item/spacepod_equipment/lock/keyed/Initialize(mapload) - . = ..() - id = ++id_source - -// The key -/obj/item/spacepod_key - name = "spacepod key" - desc = "A key for a spacepod lock." - icon = 'icons/vehicles/spacepod.dmi' - icon_state = "podkey" - w_class = WEIGHT_CLASS_TINY - var/id = 0 - -// Key - Lock Interactions -/obj/item/spacepod_equipment/lock/keyed/attackby(obj/item/I as obj, mob/user as mob, params) - if(istype(I, /obj/item/spacepod_key)) - var/obj/item/spacepod_key/key = I - if(!key.id) - key.id = id - to_chat(user, "You grind the blank key to fit the lock.") - else - to_chat(user, "This key is already ground!") - else - return ..() diff --git a/code/modules/spacepods/lock_buster.dm b/code/modules/spacepods/lock_buster.dm deleted file mode 100644 index 0907878fc17..00000000000 --- a/code/modules/spacepods/lock_buster.dm +++ /dev/null @@ -1,14 +0,0 @@ -/obj/item/lock_buster - name = "pod lock buster" - desc = "Destroys a podlock in mere seconds once applied. Waranty void if used." - icon = 'icons/obj/device.dmi' - icon_state = "lock_buster_off" - var/on = 0 - -/obj/item/lock_buster/attack_self(mob/user as mob) - on = !on - if(on) - icon_state = "lock_buster_on" - else - icon_state = "lock_buster_off" - to_chat(usr, "You turn [src] [on ? "on" : "off"].") diff --git a/code/modules/spacepods/parts.dm b/code/modules/spacepods/parts.dm deleted file mode 100644 index fed8e994a53..00000000000 --- a/code/modules/spacepods/parts.dm +++ /dev/null @@ -1,126 +0,0 @@ -/obj/item/pod_parts - parent_type = /obj/item/mecha_parts - icon = 'icons/goonstation/pods/pod_parts.dmi' - -/obj/item/pod_parts/core - name="Space Pod Core" - icon_state = "core" - flags = CONDUCT - origin_tech = "programming=2;materials=2;biotech=2;engineering=2" - -/obj/item/pod_parts/pod_frame - name = "Space Pod Frame" - icon_state = "" - flags = CONDUCT - density = 0 - anchored = 0 - var/link_to = null - var/link_angle = 0 - -/obj/item/pod_parts/pod_frame/proc/find_square() - /* - each part, in essence, stores the relative position of another part - you can find where this part should be by looking at the current direction of the current part and applying the link_angle - the link_angle is the angle between the part's direction and its following part, which is the current part's link_to - the code works by going in a loop - each part is capable of starting a loop by checking for the part after it, and that part checking, and so on - this 4-part loop, starting from any part of the frame, can determine if all the parts are properly in place and aligned - it also checks that each part is unique, and that all the parts are there for the spacepod itself - */ - var/neededparts = list(/obj/item/pod_parts/pod_frame/aft_port, /obj/item/pod_parts/pod_frame/aft_starboard, /obj/item/pod_parts/pod_frame/fore_port, /obj/item/pod_parts/pod_frame/fore_starboard) - var/turf/T - var/obj/item/pod_parts/pod_frame/linked - var/obj/item/pod_parts/pod_frame/pointer - var/list/connectedparts = list() - neededparts -= src - //log_admin("Starting with [src]") - linked = src - for(var/i = 1; i <= 4; i++) - T = get_turf(get_step(linked, turn(linked.dir, -linked.link_angle))) //get the next place that we want to look at - if(locate(linked.link_to) in T) - pointer = locate(linked.link_to) in T - //log_admin("Looking at [pointer.type]") - if(istype(pointer, linked.link_to) && pointer.dir == linked.dir && pointer.anchored) - if(!(pointer in connectedparts)) - connectedparts += pointer - linked = pointer - pointer = null - if(connectedparts.len < 4) - return 0 - for(var/i = 1; i <=4; i++) - var/obj/item/pod_parts/pod_frame/F = connectedparts[i] - if(F.type in neededparts) //if one of the items can be founded in neededparts - neededparts -= F.type - log_admin("Found [F.type]") - else //because neededparts has 4 distinct items, this must be called if theyre not all in place and wrenched - return 0 - return connectedparts - -/obj/item/pod_parts/pod_frame/attackby(obj/item/O, mob/user) - if(istype(O, /obj/item/stack/rods)) - var/obj/item/stack/rods/R = O - var/list/linkedparts = find_square() - if(!linkedparts) - to_chat(user, "You cannot assemble a pod frame because you do not have the necessary assembly.") - return - var/obj/structure/spacepod_frame/pod = new /obj/structure/spacepod_frame(src.loc) - pod.dir = src.dir - to_chat(user, "You strut the pod frame together.") - R.use(10) - for(var/obj/item/pod_parts/pod_frame/F in linkedparts) - if(1 == turn(F.dir, -F.link_angle)) //if the part links north during construction, as the bottom left part always does - //log_admin("Repositioning") - pod.loc = F.loc - qdel(F) - playsound(get_turf(src), O.usesound, 50, 1) - if(istype(O, /obj/item/wrench)) - to_chat(user, "You [!anchored ? "secure \the [src] in place." : "remove the securing bolts."]") - anchored = !anchored - density = anchored - playsound(get_turf(src), O.usesound, 50, 1) - -/obj/item/pod_parts/pod_frame/verb/rotate() - set name = "Rotate Frame" - set category = "Object" - set src in oview(1) - if(anchored) - to_chat(usr, "\The [src] is securely bolted!") - return 0 - src.dir = turn(src.dir, -90) - return 1 - -/obj/item/pod_parts/pod_frame/attack_hand() - src.rotate() - -/obj/item/pod_parts/pod_frame/fore_port - name = "fore port pod frame" - icon_state = "pod_fp" - desc = "A space pod frame component. This is the fore port component." - link_to = /obj/item/pod_parts/pod_frame/fore_starboard - link_angle = 90 - -/obj/item/pod_parts/pod_frame/fore_starboard - name = "fore starboard pod frame" - icon_state = "pod_fs" - desc = "A space pod frame component. This is the fore starboard component." - link_to = /obj/item/pod_parts/pod_frame/aft_starboard - link_angle = 180 - -/obj/item/pod_parts/pod_frame/aft_port - name = "aft port pod frame" - icon_state = "pod_ap" - desc = "A space pod frame component. This is the aft port component." - link_to = /obj/item/pod_parts/pod_frame/fore_port - link_angle = 0 - -/obj/item/pod_parts/pod_frame/aft_starboard - name = "aft starboard pod frame" - icon_state = "pod_as" - desc = "A space pod frame component. This is the aft starboard component." - link_to = /obj/item/pod_parts/pod_frame/aft_port - link_angle = 270 - -/obj/item/pod_parts/armor - name = "civilian pod armor" - icon = 'icons/goonstation/pods/pod_parts.dmi' - icon_state = "pod_armor_civ" - desc = "Spacepod armor. This is the civilian version. It looks rather flimsy." diff --git a/code/modules/spacepods/spacepod.dm b/code/modules/spacepods/spacepod.dm deleted file mode 100644 index 29112499926..00000000000 --- a/code/modules/spacepods/spacepod.dm +++ /dev/null @@ -1,1121 +0,0 @@ -#define DAMAGE 1 -#define FIRE 2 -#define POD_LIGHT 1 -#define WINDOW 2 -#define RIM 3 -#define PAINT 4 - -/obj/item/pod_paint_bucket - name = "space pod paintkit" - desc = "Pimp your ride" - icon = 'icons/obj/items.dmi' - icon_state = "paint_red" - -/obj/spacepod - name = "\improper space pod" - desc = "A space pod meant for space travel." - icon = 'icons/goonstation/48x48/pods.dmi' - density = 1 //Dense. To raise the heat. - opacity = 0 - - anchored = 1 - resistance_flags = ACID_PROOF - - layer = 3.9 - infra_luminosity = 15 - - var/mob/pilot //There is only ever one pilot and he gets all the privledge - var/list/mob/passengers = list() //passengers can't do anything and are variable in number - var/max_passengers = 0 - var/obj/item/storage/internal/cargo_hold - - var/datum/spacepod/equipment/equipment_system - - var/battery_type = "/obj/item/stock_parts/cell/high" - var/obj/item/stock_parts/cell/battery - - var/datum/gas_mixture/cabin_air - var/obj/machinery/portable_atmospherics/canister/internal_tank - var/use_internal_tank = 0 - - var/hatch_open = 0 - - var/next_firetime = 0 - - var/has_paint = 0 - - var/list/pod_overlays - var/list/pod_paint_effect - var/list/colors = new/list(4) - var/health = 250 - var/empcounter = 0 //Used for disabling movement when hit by an EMP - - var/lights = 0 - var/lights_power = 6 - var/list/icon_light_color = list("pod_civ" = LIGHT_COLOR_WHITE, \ - "pod_mil" = "#BBF093", \ - "pod_synd" = LIGHT_COLOR_RED, \ - "pod_gold" = LIGHT_COLOR_WHITE, \ - "pod_black" = "#3B8FE5", \ - "pod_industrial" = "#CCCC00") - - var/unlocked = TRUE - - var/move_delay = 2 - var/next_move = 0 - var/can_paint = TRUE - -/obj/spacepod/proc/apply_paint(mob/user as mob) - var/part_type - if(!can_paint) - to_chat(user, "You can't repaint this type of pod!") - return - - var/part = input(user, "Choose part", null) as null|anything in list("Lights","Rim","Paint","Windows") - switch(part) - if("Lights") - part_type = POD_LIGHT - if("Rim") - part_type = RIM - if("Paint") - part_type = PAINT - if("Windows") - part_type = WINDOW - else - var/coloradd = input(user, "Choose a color", "Color") as color - colors[part_type] = coloradd - if(!has_paint) - has_paint = 1 - update_icons() - -/obj/spacepod/get_cell() - return battery - -/obj/spacepod/Initialize(mapload) - . = ..() - if(!pod_overlays) - pod_overlays = new/list(2) - pod_overlays[DAMAGE] = image(icon, icon_state="pod_damage") - pod_overlays[FIRE] = image(icon, icon_state="pod_fire") - - if(!pod_paint_effect) - pod_paint_effect = new/list(4) - pod_paint_effect[POD_LIGHT] = image(icon,icon_state = "LIGHTS") - pod_paint_effect[WINDOW] = image(icon,icon_state = "Windows") - pod_paint_effect[RIM] = image(icon,icon_state = "RIM") - pod_paint_effect[PAINT] = image(icon,icon_state = "PAINT") - - bound_width = 64 - bound_height = 64 - dir = EAST - battery = new battery_type(src) - - add_cabin() - add_airtank() - - use_internal_tank = TRUE - equipment_system = new(src) - equipment_system.installed_modules += battery - - GLOB.spacepods_list += src - - cargo_hold = new/obj/item/storage/internal(src) - cargo_hold.w_class = 5 //so you can put bags in - cargo_hold.storage_slots = 0 //You need to install cargo modules to use it. - cargo_hold.max_w_class = 5 //fit almost anything - cargo_hold.max_combined_w_class = 0 //you can optimize your stash with larger items - - START_PROCESSING(SSobj, src) - RegisterSignal(src, COMSIG_MOVABLE_MOVED, .proc/create_trail) - -/obj/spacepod/proc/create_trail() - var/turf/T = get_turf(src) - var/atom/oldposition - var/atom/oldloc - switch(dir) - if(NORTH) - oldposition = get_step(T, SOUTH) - oldloc = get_step(oldposition, EAST) - if(SOUTH) // More difficult, offset to the north! - oldposition = get_step(get_step(src, NORTH), NORTH) - oldloc = get_step(oldposition, EAST) - if(EAST) // Just one to the north should suffice - oldposition = get_step(T, WEST) - oldloc = get_step(oldposition, NORTH) - if(WEST) // One to the east and north from there - oldposition = get_step(get_step(src, EAST), EAST) - oldloc = get_step(oldposition, NORTH) - - if(!has_gravity(T)) - new /obj/effect/particle_effect/ion_trails(oldposition, dir) - new /obj/effect/particle_effect/ion_trails(oldloc, dir) - -/obj/spacepod/Destroy() - if(equipment_system.cargo_system) - equipment_system.cargo_system.removed(null) - QDEL_NULL(equipment_system) - QDEL_NULL(cargo_hold) - QDEL_NULL(battery) - QDEL_NULL(cabin_air) - QDEL_NULL(internal_tank) - occupant_sanity_check() - if(pilot) - eject_pilot() - if(passengers) - for(var/mob/M in passengers) - eject_passenger(M) - GLOB.spacepods_list -= src - STOP_PROCESSING(SSobj, src) - return ..() - -/obj/spacepod/process() - give_air() - regulate_temp() - if(src.empcounter > 0) - src.empcounter-- - -/obj/spacepod/proc/update_icons() - if(!pod_overlays) - pod_overlays = new/list(2) - pod_overlays[DAMAGE] = image(icon, icon_state="pod_damage") - pod_overlays[FIRE] = image(icon, icon_state="pod_fire") - - if(!pod_paint_effect) - pod_paint_effect = new/list(4) - pod_paint_effect[POD_LIGHT] = image(icon,icon_state = "LIGHTS") - pod_paint_effect[WINDOW] = image(icon,icon_state = "Windows") - pod_paint_effect[RIM] = image(icon,icon_state = "RIM") - pod_paint_effect[PAINT] = image(icon,icon_state = "PAINT") - overlays.Cut() - - if(has_paint) - var/image/to_add - if(!isnull(pod_paint_effect[POD_LIGHT])) - to_add = pod_paint_effect[POD_LIGHT] - to_add.color = colors[POD_LIGHT] - overlays += to_add - if(!isnull(pod_paint_effect[WINDOW])) - to_add = pod_paint_effect[WINDOW] - to_add.color = colors[WINDOW] - overlays += to_add - if(!isnull(pod_paint_effect[RIM])) - to_add = pod_paint_effect[RIM] - to_add.color = colors[RIM] - overlays += to_add - if(!isnull(pod_paint_effect[PAINT])) - to_add = pod_paint_effect[PAINT] - to_add.color = colors[PAINT] - overlays += to_add - if(health <= round(initial(health)/2)) - overlays += pod_overlays[DAMAGE] - if(health <= round(initial(health)/4)) - overlays += pod_overlays[FIRE] - - - light_color = icon_light_color[src.icon_state] - -/obj/spacepod/bullet_act(obj/item/projectile/P) - if(P.damage_type == BRUTE || P.damage_type == BURN) - deal_damage(P.damage) - P.on_hit(src) - -/obj/spacepod/AllowDrop() - return TRUE - -/obj/spacepod/blob_act(obj/structure/blob/B) - deal_damage(30) - -/obj/spacepod/force_eject_occupant(mob/target) - if(target == pilot) - eject_pilot() - else - eject_passenger(target) - -/obj/spacepod/proc/eject_pilot() - pilot.forceMove(get_turf(src)) - pilot = null - -/obj/spacepod/proc/eject_passenger(mob/passenger) - passenger.forceMove(get_turf(src)) - passengers -= passenger - -/obj/spacepod/attack_animal(mob/living/simple_animal/user) - user.changeNext_move(CLICK_CD_MELEE) - if((user.a_intent == INTENT_HELP && user.ckey) || user.melee_damage_upper == 0) - user.custom_emote(1, "[user.friendly] [src].") - return FALSE - else - var/damage = rand(user.melee_damage_lower, user.melee_damage_upper) - deal_damage(damage) - visible_message("[user] [user.attacktext] [src]!") - user.create_attack_log("attacked [src.name]") - add_attack_logs(user, src, "attacked") - return TRUE - -/obj/spacepod/attack_alien(mob/user) - user.changeNext_move(CLICK_CD_MELEE) - deal_damage(15) - playsound(src.loc, 'sound/weapons/slash.ogg', 50, 1, -1) - to_chat(user, "You slash at [src]!") - visible_message("[user] slashes at [src]'s armor!") - -/obj/spacepod/proc/deal_damage(damage) - var/oldhealth = health - health = max(0, health - damage) - var/percentage = (health / initial(health)) * 100 - occupant_sanity_check() - if(oldhealth > health && percentage <= 25 && percentage > 0) - play_sound_to_riders('sound/effects/engine_alert2.ogg') - if(oldhealth > health && !health) - play_sound_to_riders('sound/effects/engine_alert1.ogg') - if(!health) - spawn(0) - message_to_riders("Critical damage to the vessel detected, core explosion imminent!") - for(var/i in 1 to 3) - var/count = 3 - message_to_riders("[count]") - count-- - sleep(10) - if(LAZYLEN(pilot) || LAZYLEN(passengers)) - for(var/M in passengers + pilot) - var/mob/living/L = M - L.adjustBruteLoss(300) - explosion(loc, 0, 0, 2) - robogibs(loc) - robogibs(loc) - qdel(src) - - update_icons() - -/obj/spacepod/proc/repair_damage(repair_amount) - if(health) - health = min(initial(health), health + repair_amount) - update_icons() - - -/obj/spacepod/ex_act(severity) - occupant_sanity_check() - switch(severity) - if(1) - if(passengers || pilot) - for(var/mob/M in passengers | pilot) - var/mob/living/carbon/human/H = M - if(H) - H.forceMove(get_turf(src)) - H.ex_act(severity + 1) - to_chat(H, "You are forcefully thrown from [src]!") - qdel(src) - if(2) - deal_damage(100) - if(3) - if(prob(40)) - deal_damage(50) - -/obj/spacepod/emp_act(severity) - occupant_sanity_check() - cargo_hold.emp_act(severity) - - if(battery && battery.charge > 0) - battery.use((battery.charge/3)/(severity*2)) - deal_damage(80 / severity) - if(empcounter < (40 / severity)) - empcounter = 40 / severity - - switch(severity) - if(1) - message_to_riders("The pod console flashes 'Heavy EMP WAVE DETECTED'.") - if(2) - message_to_riders("The pod console flashes 'EMP WAVE DETECTED'.") - -/obj/spacepod/proc/play_sound_to_riders(mysound) - if(length(passengers | pilot) == 0) - return - var/sound/S = sound(mysound) - S.wait = 0 //No queue - S.channel = SSsounds.random_available_channel() - S.volume = 50 - for(var/mob/M in passengers | pilot) - M << S - -/obj/spacepod/proc/message_to_riders(mymessage) - if(length(passengers | pilot) == 0) - return - for(var/mob/M in passengers | pilot) - to_chat(M, mymessage) - -/obj/spacepod/attackby(obj/item/W as obj, mob/user as mob, params) - if(istype(W, /obj/item/stock_parts/cell)) - if(!hatch_open) - to_chat(user, "The maintenance hatch is closed!") - return - if(battery) - to_chat(user, "The pod already has a battery.") - return - to_chat(user, "You insert [W] into the pod.") - user.drop_item(W) - battery = W - W.forceMove(src) - return - else if(istype(W, /obj/item/spacepod_equipment)) - if(!hatch_open) - to_chat(user, "The maintenance hatch is closed!") - return - if(!equipment_system) - to_chat(user, "The pod has no equipment datum, yell at the coders") - return - if(istype(W, /obj/item/spacepod_equipment/weaponry)) - add_equipment(user, W, "weapon_system") - return - if(istype(W, /obj/item/spacepod_equipment/misc)) - add_equipment(user, W, "misc_system") - return - if(istype(W, /obj/item/spacepod_equipment/cargo)) - add_equipment(user, W, "cargo_system") - return - if(istype(W, /obj/item/spacepod_equipment/sec_cargo)) - add_equipment(user, W, "sec_cargo_system") - return - if(istype(W, /obj/item/spacepod_equipment/lock)) - add_equipment(user, W, "lock_system") - return - - else if(istype(W, /obj/item/spacepod_key) && istype(equipment_system.lock_system, /obj/item/spacepod_equipment/lock/keyed)) - var/obj/item/spacepod_key/key = W - if(key.id == equipment_system.lock_system.id) - lock_pod() - return - else - to_chat(user, "This is the wrong key!") - return - - else if(istype(W, /obj/item/lock_buster)) - var/obj/item/lock_buster/L = W - if(L.on && equipment_system.lock_system) - user.visible_message(user, "[user] is drilling through [src]'s lock!", - "You start drilling through [src]'s lock!") - if(do_after(user, 100 * W.toolspeed, target = src)) - QDEL_NULL(equipment_system.lock_system) - unlocked = TRUE - user.visible_message(user, "[user] has destroyed [src]'s lock!", - "You destroy [src]'s lock!") - else - user.visible_message(user, "[user] fails to break through [src]'s lock!", - "You were unable to break through [src]'s lock!") - return - if(L.on && unlocked == FALSE) //The buster is on, we don't have a lock system, and the pod is still somehow locked, unlocking. - unlocked = TRUE - user.visible_message(user, "[user] repairs [src]'s doors with [L].", - "You repair [src]'s doors with [L].") - to_chat(user, "Turn [L] on first.") - return - - else if(cargo_hold.storage_slots > 0 && !hatch_open && unlocked) // must be the last option as all items not listed prior will be stored - cargo_hold.attackby(W, user, params) - else - if(user.a_intent == INTENT_HARM) - deal_damage(W.force) - return ..() - -/obj/spacepod/crowbar_act(mob/user, obj/item/I) - if(user.a_intent == INTENT_HARM) - return - . = TRUE - if(!I.use_tool(src, user, 0, volume = I.tool_volume)) - return - if(!equipment_system.lock_system || unlocked || hatch_open) - hatch_open = !hatch_open - to_chat(user, "You [hatch_open ? "open" : "close"] the maintenance hatch.") - else - to_chat(user, "The hatch is locked shut!") - -/obj/spacepod/welder_act(mob/user, obj/item/I) - if(user.a_intent == INTENT_HARM) - return - . = TRUE - if(!hatch_open) - to_chat(user, "You must open the maintenance hatch before attempting repairs.") - return - if(health >= initial(health)) - to_chat(user, "[src] is fully repaired!") - return - if(!I.tool_use_check(user, 0)) - return - to_chat(user, "You start welding the spacepod...") - if(I.use_tool(src, user, 20, 3, volume = I.tool_volume)) - repair_damage(10) - to_chat(user, "You mend some [pick("dents","bumps","damage")] with [I]") - - -/obj/spacepod/proc/add_equipment(mob/user, obj/item/spacepod_equipment/SPE, slot) - if(equipment_system.vars[slot]) - to_chat(user, "The pod already has a [slot], remove it first.") - return - else - to_chat(user, "You insert [SPE] into the pod.") - user.drop_item(SPE) - SPE.forceMove(src) - equipment_system.vars[slot] = SPE - var/obj/item/spacepod_equipment/system = equipment_system.vars[slot] - system.my_atom = src - equipment_system.installed_modules += SPE - max_passengers += SPE.occupant_mod - cargo_hold.storage_slots += SPE.storage_mod["slots"] - cargo_hold.max_combined_w_class += SPE.storage_mod["w_class"] - -/obj/spacepod/attack_hand(mob/user as mob) - if(user.a_intent == INTENT_GRAB && unlocked) - var/mob/target - if(pilot) - target = pilot - else if(passengers.len > 0) - target = passengers[1] - - if(target && istype(target)) - src.visible_message("[user] is trying to rip the door open and pull [target] out of [src]!", - "You see [user] outside the door trying to rip it open!") - if(do_after(user, 50, target = src)) - target.Stun(1) - if(pilot) - eject_pilot() - else - eject_passenger(target) - target.visible_message("[user] flings the door open and tears [target] out of [src]", - "The door flies open and you are thrown out of [src] and to the ground!") - return - target.visible_message("[user] was unable to get the door open!", - "You manage to keep [user] out of [src]!") - - if(!hatch_open) - if(cargo_hold.storage_slots > 0) - if(unlocked) - cargo_hold.open(user) - else - to_chat(user, "The storage compartment is locked") - return ..() - if(!equipment_system || !istype(equipment_system)) - to_chat(user, "The pod has no equpment datum, or is the wrong type, yell at IK3I.") - return - var/list/possible = list() - if(battery) - possible.Add("Energy Cell") - if(equipment_system.weapon_system) - possible.Add("Weapon System") - if(equipment_system.misc_system) - possible.Add("Misc. System") - if(equipment_system.cargo_system) - possible.Add("Cargo System") - if(equipment_system.sec_cargo_system) - possible.Add("Secondary Cargo System") - if(equipment_system.lock_system) - possible.Add("Lock System") - switch(input(user, "Remove which equipment?", null, null) as null|anything in possible) - if("Energy Cell") - if(user.put_in_any_hand_if_possible(battery)) - to_chat(user, "You remove [battery] from the space pod") - battery = null - else - to_chat(user, "You need an open hand to do that.") - return - if("Weapon System") - remove_equipment(user, equipment_system.weapon_system, "weapon_system") - return - if("Misc. System") - remove_equipment(user, equipment_system.misc_system, "misc_system") - return - if("Cargo System") - remove_equipment(user, equipment_system.cargo_system, "cargo_system") - return - if("Secondary Cargo System") - remove_equipment(user, equipment_system.sec_cargo_system, "sec_cargo_system") - return - if("Lock System") - remove_equipment(user, equipment_system.lock_system, "lock_system") - -/obj/spacepod/proc/remove_equipment(mob/user, obj/item/spacepod_equipment/SPE, slot) - - if(passengers.len > max_passengers - SPE.occupant_mod) - to_chat(user, "Someone is sitting in [SPE]!") - return - - var/sum_w_class = 0 - for(var/obj/item/I in cargo_hold.contents) - sum_w_class += I.w_class - if(cargo_hold.contents.len > cargo_hold.storage_slots - SPE.storage_mod["slots"] || sum_w_class > cargo_hold.max_combined_w_class - SPE.storage_mod["w_class"]) - to_chat(user, "Empty [SPE] first!") - return - - if(user.put_in_any_hand_if_possible(SPE)) - to_chat(user, "You remove [SPE] from the equipment system.") - equipment_system.installed_modules -= SPE - max_passengers -= SPE.occupant_mod - cargo_hold.storage_slots -= SPE.storage_mod["slots"] - cargo_hold.max_combined_w_class -= SPE.storage_mod["w_class"] - SPE.removed(user) - SPE.my_atom = null - equipment_system.vars[slot] = null - return - to_chat(user, "You need an open hand to do that.") - - -/obj/spacepod/hear_talk/hear_talk(mob/M, list/message_pieces) - cargo_hold.hear_talk(M, message_pieces) - ..() - -/obj/spacepod/hear_message(mob/M, msg) - cargo_hold.hear_message(M, msg) - ..() - -/obj/spacepod/proc/return_inv() - - var/list/L = list( ) - - L += src.contents - - for(var/obj/item/storage/S in src) - L += S.return_inv() - for(var/obj/item/gift/G in src) - L += G.gift - if(istype(G.gift, /obj/item/storage)) - var/obj/item/storage/inv = G.gift - L += inv.return_inv() - return L - -/obj/spacepod/civilian - icon_state = "pod_civ" - desc = "A sleek civilian space pod." - -/obj/spacepod/civilian/attackby(obj/item/W as obj, mob/user as mob, params) - ..() - if(istype(W, /obj/item/pod_paint_bucket)) - apply_paint(user) - return - -/obj/spacepod/random - icon_state = "pod_civ" -// placeholder - -/obj/spacepod/sec - name = "\improper security spacepod" - desc = "An armed security spacepod with reinforced armor plating." - icon_state = "pod_mil" - health = 400 - -/obj/spacepod/syndi - name = "syndicate spacepod" - desc = "A spacepod painted in syndicate colors." - icon_state = "pod_synd" - health = 400 - unlocked = FALSE - -/obj/spacepod/syndi/unlocked - unlocked = TRUE - -/obj/spacepod/sec/Initialize(mapload) - . = ..() - var/obj/item/spacepod_equipment/weaponry/burst_taser/T = new /obj/item/spacepod_equipment/weaponry/taser - T.loc = equipment_system - equipment_system.weapon_system = T - equipment_system.weapon_system.my_atom = src - equipment_system.installed_modules += T - - var/obj/item/spacepod_equipment/misc/tracker/L = new /obj/item/spacepod_equipment/misc/tracker - L.loc = equipment_system - equipment_system.misc_system = L - equipment_system.misc_system.my_atom = src - equipment_system.installed_modules += L - - var/obj/item/spacepod_equipment/sec_cargo/chair/C = new /obj/item/spacepod_equipment/sec_cargo/chair - C.loc = equipment_system - equipment_system.sec_cargo_system = C - equipment_system.sec_cargo_system.my_atom = src - equipment_system.installed_modules += C - max_passengers = 1 - - var/obj/item/spacepod_equipment/lock/keyed/K = new /obj/item/spacepod_equipment/lock/keyed - K.loc = equipment_system - equipment_system.lock_system = K - equipment_system.lock_system.my_atom = src - equipment_system.lock_system.id = 100000 - equipment_system.installed_modules += K - -/obj/spacepod/random/Initialize(mapload) - . = ..() - icon_state = pick("pod_civ", "pod_black", "pod_mil", "pod_synd", "pod_gold", "pod_industrial") - switch(icon_state) - if("pod_civ") - desc = "A sleek civilian space pod." - if("pod_black") - desc = "An all black space pod with no insignias." - if("pod_mil") - desc = "A dark grey space pod brandishing the Nanotrasen Military insignia" - if("pod_synd") - desc = "A menacing military space pod with Fuck NT stenciled onto the side" - if("pod_gold") - desc = "A civilian space pod with a gold body, must have cost somebody a pretty penny" - if("pod_industrial") - desc = "A rough looking space pod meant for industrial work" - update_icons() - -/obj/spacepod/verb/toggle_internal_tank() - set name = "Toggle internal airtank usage" - set category = "Spacepod" - set src = usr.loc - set popup_menu = 0 - - if(usr.incapacitated()) - return - - if(usr != src.pilot) - to_chat(usr, "You can't reach the controls from your chair.") - return - use_internal_tank = !use_internal_tank - to_chat(usr, "Now taking air from [use_internal_tank?"internal airtank":"environment"].") - -/obj/spacepod/proc/add_cabin() - cabin_air = new - cabin_air.temperature = T20C - cabin_air.volume = 200 - cabin_air.oxygen = O2STANDARD*cabin_air.volume/(R_IDEAL_GAS_EQUATION*cabin_air.temperature) - cabin_air.nitrogen = N2STANDARD*cabin_air.volume/(R_IDEAL_GAS_EQUATION*cabin_air.temperature) - return cabin_air - -/obj/spacepod/proc/add_airtank() - internal_tank = new /obj/machinery/portable_atmospherics/canister/air(src) - return internal_tank - -/obj/spacepod/proc/get_turf_air() - var/turf/T = get_turf(src) - if(T) - . = T.return_air() - -/obj/spacepod/remove_air(amount) - if(use_internal_tank) - return cabin_air.remove(amount) - else - var/turf/T = get_turf(src) - if(T) - return T.remove_air(amount) - -/obj/spacepod/return_air() - if(use_internal_tank) - return cabin_air - return get_turf_air() - -/obj/spacepod/proc/return_pressure() - . = 0 - if(use_internal_tank) - . = cabin_air.return_pressure() - else - var/datum/gas_mixture/t_air = get_turf_air() - if(t_air) - . = t_air.return_pressure() - -/obj/spacepod/proc/return_temperature() - . = 0 - if(use_internal_tank) - . = cabin_air.return_temperature() - else - var/datum/gas_mixture/t_air = get_turf_air() - if(t_air) - . = t_air.return_temperature() - -/obj/spacepod/proc/moved_other_inside(mob/living/carbon/human/H as mob) - occupant_sanity_check() - if(passengers.len < max_passengers) - H.stop_pulling() - H.forceMove(src) - passengers += H - H.forceMove(src) - playsound(src, 'sound/machines/windowdoor.ogg', 50, 1) - return 1 - -/obj/spacepod/MouseDrop_T(atom/A, mob/user) - if(user == pilot || (user in passengers)) - return - - if(istype(A,/mob)) - var/mob/M = A - if(!isliving(M)) - return - - occupant_sanity_check() - - if(M != user && unlocked && (M.stat == DEAD || M.incapacitated())) - if(passengers.len >= max_passengers && !pilot) - to_chat(usr, "That person can't fly the pod!") - return 0 - if(passengers.len < max_passengers) - visible_message("[user.name] starts loading [M.name] into the pod!") - if(do_after(user, 50, target = M)) - moved_other_inside(M) - return - - if(M == user) - enter_pod(user) - return - - if(istype(A, /obj/structure/ore_box) && equipment_system.cargo_system && istype(equipment_system.cargo_system,/obj/item/spacepod_equipment/cargo/ore)) // For loading ore boxes - load_cargo(user, A) - return - - if(istype(A, /obj/structure/closet/crate) && equipment_system.cargo_system && istype(equipment_system.cargo_system, /obj/item/spacepod_equipment/cargo/crate)) // For loading crates - load_cargo(user, A) - -/obj/spacepod/proc/load_cargo(mob/user, obj/O) - var/obj/item/spacepod_equipment/cargo/ore/C = equipment_system.cargo_system - if(!C.storage) - to_chat(user, "You begin loading [O] into [src]'s [equipment_system.cargo_system]") - if(do_after(user, 40, target = src)) - C.storage = O - O.forceMove(C) - to_chat(user, "You load [O] into [src]'s [equipment_system.cargo_system]!") - else - to_chat(user, "You fail to load [O] into [src]'s [equipment_system.cargo_system]") - else - to_chat(user, "[src] already has \an [C.storage]") - -/obj/spacepod/proc/enter_pod(mob/user) - if(usr.stat != CONSCIOUS) - return 0 - - if(equipment_system.lock_system && !unlocked) - to_chat(user, "[src]'s doors are locked!") - return 0 - - if(get_dist(src, user) > 2 || get_dist(usr, user) > 1) - to_chat(usr, "They are too far away to put inside") - return 0 - - if(!istype(user)) - return 0 - - var/fukkendisk = user.GetTypeInAllContents(/obj/item/disk/nuclear) - - if(user.incapacitated()) //are you cuffed, dying, lying, stunned or other - return 0 - if(!ishuman(user)) - return 0 - - if(fukkendisk) - to_chat(user, "The nuke-disk is locking the door every time you try to open it. You get the feeling that it doesn't want to go into the spacepod.") - return 0 - - if(user.has_buckled_mobs()) //mob attached to us - to_chat(user, "[user] will not fit into [src] because [user.p_they()] [user.p_have()] creatures attached to [user.p_them()]!") - return - - move_inside(user) - -/obj/spacepod/proc/move_inside(mob/user) - if(!istype(user)) - log_debug("SHIT'S GONE WRONG WITH THE SPACEPOD [src] AT [x], [y], [z], AREA [get_area(src)], TURF [get_turf(src)]") - - occupant_sanity_check() - - if(passengers.len <= max_passengers) - visible_message("[user] starts to climb into [src].") - if(do_after(user, 40, target = src)) - if(!pilot || pilot == null) - user.stop_pulling() - pilot = user - user.forceMove(src) - add_fingerprint(user) - playsound(src, 'sound/machines/windowdoor.ogg', 50, 1) - return - if(passengers.len < max_passengers) - user.stop_pulling() - passengers += user - user.forceMove(src) - add_fingerprint(user) - playsound(src, 'sound/machines/windowdoor.ogg', 50, 1) - else - to_chat(user, "You were too slow. Try better next time, loser.") - else - to_chat(user, "You stop entering [src].") - else - to_chat(user, "You can't fit in [src], it's full!") - -/obj/spacepod/proc/occupant_sanity_check() // going to have to adjust this later for cargo refactor - if(passengers) - if(passengers.len > max_passengers) - for(var/i = passengers.len; i <= max_passengers; i--) - var/mob/occupant = passengers[i - 1] - occupant.forceMove(get_turf(src)) - log_debug("##SPACEPOD WARNING: passengers EXCEED CAP: MAX passengers [max_passengers], passengers [english_list(passengers)], TURF [get_turf(src)] | AREA [get_area(src)] | COORDS [x], [y], [z]") - passengers[i - 1] = null - for(var/mob/M in passengers) - if(!ismob(M)) - M.forceMove(get_turf(src)) - log_debug("##SPACEPOD WARNING: NON-MOB OCCUPANT [M], TURF [get_turf(src)] | AREA [get_area(src)] | COORDS [x], [y], [z]") - passengers -= M - else if(M.loc != src) - log_debug("##SPACEPOD WARNING: OCCUPANT [M] ESCAPED, TURF [get_turf(src)] | AREA [get_area(src)] | COORDS [x], [y], [z]") - passengers -= M - -/obj/spacepod/verb/exit_pod() - set name = "Exit pod" - set category = "Spacepod" - set src = usr.loc - - var/mob/user = usr - if(!istype(user)) - return - - if(usr.stat != CONSCIOUS) // unconscious people can't let themselves out - return - - occupant_sanity_check() - - if(usr.restrained()) - to_chat(usr, "You attempt to stumble out of [src]. This will take two minutes.") - if(pilot) - to_chat(pilot, "[usr] is trying to escape [src].") - if(!do_after(usr, 1200, target = src)) - return - - if(user == pilot) - user.forceMove(get_turf(src)) - pilot = null - to_chat(user, "You climb out of [src].") - if(user in passengers) - user.forceMove(get_turf(src)) - passengers -= user - to_chat(user, "You climb out of [src].") - -/obj/spacepod/verb/lock_pod() - set name = "Lock Doors" - set category = "Spacepod" - set src = usr.loc - - if(usr.incapacitated()) - return - - if(usr in passengers && usr != src.pilot) - to_chat(usr, "You can't reach the controls from your chair.") - return - - if(!equipment_system.lock_system) - to_chat(usr, "[src] has no locking mechanism.") - unlocked = TRUE //Should never be false without a lock, but if it somehow happens, that will force an unlock. - else - unlocked = !unlocked - to_chat(usr, "You [unlocked ? "unlock" : "lock"] the doors.") - - -/obj/spacepod/verb/toggleDoors() - set name = "Toggle Nearby Pod Doors" - set category = "Spacepod" - set src = usr.loc - - if(usr.incapacitated()) - return - - if(usr != src.pilot) - to_chat(usr, "You can't reach the controls from your chair") - return - - for(var/obj/machinery/door/poddoor/multi_tile/P in orange(3,src)) - var/mob/living/carbon/human/L = usr - if(P.check_access(L.get_active_hand()) || P.check_access(L.wear_id)) - if(P.density) - P.open() - return 1 - else - P.close() - return 1 - for(var/mob/living/carbon/human/O in passengers) - if(P.check_access(O.get_active_hand()) || P.check_access(O.wear_id)) - if(P.density) - P.open() - return 1 - else - P.close() - return 1 - to_chat(usr, "Access denied.") - return - - to_chat(usr, "You are not close to any pod doors.") - -/obj/spacepod/verb/fireWeapon() - set name = "Fire Pod Weapons" - set desc = "Fire the weapons." - set category = "Spacepod" - set src = usr.loc - - if(usr.incapacitated()) - return - - if(usr != src.pilot) - to_chat(usr, "You can't reach the controls from your chair.") - return - if(!equipment_system.weapon_system) - to_chat(usr, "[src] has no weapons!") - return - equipment_system.weapon_system.fire_weapons() - -/obj/spacepod/verb/unload() - set name = "Unload Cargo" - set desc = "Unloads the cargo" - set category = "Spacepod" - set src = usr.loc - - if(usr.incapacitated()) - return - - if(usr != src.pilot) - to_chat(usr, "You can't reach the controls from your chair.") - return - if(!equipment_system.cargo_system) - to_chat(usr, "[src] has no cargo system!") - return - equipment_system.cargo_system.unload() - -/obj/spacepod/verb/toggleLights() - set name = "Toggle Lights" - set category = "Spacepod" - set src = usr.loc - - if(usr.incapacitated()) - return - - if(usr != src.pilot) - to_chat(usr, "You can't reach the controls from your chair.") - return - lightsToggle() - -/obj/spacepod/proc/lightsToggle() - lights = !lights - if(lights) - set_light(lights_power) - else - set_light(0) - to_chat(usr, "Lights toggled [lights ? "on" : "off"].") - for(var/mob/M in passengers) - to_chat(M, "Lights toggled [lights ? "on" : "off"].") - -/obj/spacepod/verb/checkSeat() - set name = "Check under Seat" - set category = "Spacepod" - set src = usr.loc - var/mob/user = usr - - if(usr.incapacitated()) - return - - to_chat(user, "You start rooting around under the seat for lost items") - if(do_after(user, 40, target = src)) - var/obj/badlist = list(internal_tank, cargo_hold, pilot, battery) + passengers + equipment_system.installed_modules - var/list/true_contents = contents - badlist - if(true_contents.len > 0) - var/obj/I = pick(true_contents) - if(user.put_in_any_hand_if_possible(I)) - src.contents -= I - to_chat(user, "You find a [I] [pick("under the seat", "under the console", "in the maintenance access")]!") - else - to_chat(user, "You think you saw something shiny, but you can't reach it!") - else - to_chat(user, "You fail to find anything of value.") - else - to_chat(user, "You decide against searching [src]") - -/obj/spacepod/proc/enter_after(delay as num, mob/user as mob, numticks = 5) - var/delayfraction = delay/numticks - - var/turf/T = user.loc - - for(var/i = 0, i 0) - var/delta = cabin_air.temperature - T20C - cabin_air.temperature -= max(-10, min(10, round(delta/4,0.1))) - -/obj/spacepod/proc/give_air() - if(internal_tank) - var/datum/gas_mixture/tank_air = internal_tank.return_air() - var/release_pressure = ONE_ATMOSPHERE - var/cabin_pressure = cabin_air.return_pressure() - var/pressure_delta = min(release_pressure - cabin_pressure, (tank_air.return_pressure() - cabin_pressure)/2) - var/transfer_moles = 0 - if(pressure_delta > 0) //cabin pressure lower than release pressure - if(tank_air.return_temperature() > 0) - transfer_moles = pressure_delta*cabin_air.return_volume()/(cabin_air.return_temperature() * R_IDEAL_GAS_EQUATION) - var/datum/gas_mixture/removed = tank_air.remove(transfer_moles) - cabin_air.merge(removed) - else if(pressure_delta < 0) //cabin pressure higher than release pressure - var/datum/gas_mixture/t_air = get_turf_air() - pressure_delta = cabin_pressure - release_pressure - if(t_air) - pressure_delta = min(cabin_pressure - t_air.return_pressure(), pressure_delta) - if(pressure_delta > 0) //if location pressure is lower than cabin pressure - transfer_moles = pressure_delta*cabin_air.return_volume()/(cabin_air.return_temperature() * R_IDEAL_GAS_EQUATION) - var/datum/gas_mixture/removed = cabin_air.remove(transfer_moles) - if(t_air) - t_air.merge(removed) - else //just delete the cabin gas, we're in space or some shit - qdel(removed) - -/obj/spacepod/relaymove(mob/user, direction) - if(user != src.pilot) - return - handlerelaymove(user, direction) - -/obj/spacepod/proc/handlerelaymove(mob/user, direction) - if(world.time < next_move) - return 0 - var/moveship = 1 - if(battery && battery.charge >= 1 && health && empcounter == 0) - src.dir = direction - switch(direction) - if(NORTH) - if(inertia_dir == SOUTH) - inertia_dir = 0 - moveship = 0 - if(SOUTH) - if(inertia_dir == NORTH) - inertia_dir = 0 - moveship = 0 - if(EAST) - if(inertia_dir == WEST) - inertia_dir = 0 - moveship = 0 - if(WEST) - if(inertia_dir == EAST) - inertia_dir = 0 - moveship = 0 - if(moveship) - Move(get_step(src, direction), direction) - if(equipment_system.cargo_system) - for(var/turf/T in locs) - for(var/obj/item/I in T.contents) - equipment_system.cargo_system.passover(I) - - else - if(!battery) - to_chat(user, "No energy cell detected.") - else if(battery.charge < 1) - to_chat(user, "Not enough charge left.") - else if(!health) - to_chat(user, "She's dead, Jim") - else if(empcounter != 0) - to_chat(user, "The pod control interface isn't responding. The console indicates [empcounter] seconds before reboot.") - else - to_chat(user, "Unknown error has occurred, yell at the coders.") - return 0 - battery.charge = max(0, battery.charge - 1) - next_move = world.time + move_delay - -#undef DAMAGE -#undef FIRE -#undef WINDOW -#undef POD_LIGHT -#undef RIM -#undef PAINT diff --git a/code/modules/station_goals/bluespace_tap.dm b/code/modules/station_goals/bluespace_tap.dm index 6e6898bde1f..9bdf10d9407 100644 --- a/code/modules/station_goals/bluespace_tap.dm +++ b/code/modules/station_goals/bluespace_tap.dm @@ -326,7 +326,7 @@ else if(input_level > desired_level) input_level-- if(prob(input_level - safe_levels + (emagged * 5))) //at dangerous levels, start doing freaky shit. prob with values less than 0 treat it as 0 - GLOB.event_announcement.Announce("Unexpected power spike during Bluespace Harvester Operation. Extra-dimensional intruder alert. Expected location: [get_area(src).name]. [emagged ? "DANGER: Emergency shutdown failed! Please proceed with manual shutdown." : "Emergency shutdown initiated."]", "Bluespace Harvester Malfunction") + GLOB.event_announcement.Announce("Unexpected power spike during Bluespace Harvester Operation. Extra-dimensional intruder alert. Expected location: [get_area(src).name]. [emagged ? "DANGER: Emergency shutdown failed! Please proceed with manual shutdown." : "Emergency shutdown initiated."]", "Bluespace Harvester Malfunction", 'sound/AI/harvester.ogg') if(!emagged) input_level = 0 //emergency shutdown unless we're sabotaged desired_level = 0 diff --git a/code/modules/station_goals/dna_vault.dm b/code/modules/station_goals/dna_vault.dm index c9096042e85..8dcc438ab00 100644 --- a/code/modules/station_goals/dna_vault.dm +++ b/code/modules/station_goals/dna_vault.dm @@ -264,8 +264,9 @@ GLOBAL_LIST_INIT(non_simple_animals, typecacheof(list(/mob/living/carbon/human/m switch(action) if("gene") - upgrade(usr, params["choice"]) - return TRUE + if(isliving(usr)) + upgrade(usr, params["choice"]) + return TRUE /obj/machinery/dna_vault/proc/check_goal() if(plants.len >= plants_max && animals.len >= animals_max && dna.len >= dna_max) @@ -325,7 +326,7 @@ GLOBAL_LIST_INIT(non_simple_animals, typecacheof(list(/mob/living/carbon/human/m ADD_TRAIT(H, TRAIT_PIERCEIMMUNE, "dna_vault") if(VAULT_SPEED) to_chat(H, "You feel very fast and agile.") - S.speed_mod = -1 + ADD_TRAIT(H, TRAIT_GOTTAGOFAST, "dna_vault") if(VAULT_QUICK) to_chat(H, "Your arms move as fast as lightning.") H.next_move_modifier = 0.5 diff --git a/code/modules/surgery/organs/augments_eyes.dm b/code/modules/surgery/organs/augments_eyes.dm index 12b5437f8c4..17daa66b9aa 100644 --- a/code/modules/surgery/organs/augments_eyes.dm +++ b/code/modules/surgery/organs/augments_eyes.dm @@ -51,7 +51,7 @@ implant_color = "#ff9000" origin_tech = "materials=4;engineering=4;biotech=4" aug_message = "You see the diagnostic information of the synthetics around you..." - HUD_type = DATA_HUD_DIAGNOSTIC + HUD_type = DATA_HUD_DIAGNOSTIC_ADVANCED /obj/item/organ/internal/cyberimp/eyes/hud/security name = "Security HUD implant" diff --git a/code/modules/surgery/organs/augments_internal.dm b/code/modules/surgery/organs/augments_internal.dm index 00abe28ff71..815b1941601 100644 --- a/code/modules/surgery/organs/augments_internal.dm +++ b/code/modules/surgery/organs/augments_internal.dm @@ -161,7 +161,7 @@ emp_proof = TRUE /obj/item/organ/internal/cyberimp/brain/anti_sleep - name = "Nerual Jumpstarter implant" + name = "Neural Jumpstarter implant" desc = "This implant will automatically attempt to jolt you awake when it detects you have fallen unconscious. Has a short cooldown, incompatible with the CNS Rebooter." implant_color = "#0356fc" slot = "brain_antistun" //one or the other not both. diff --git a/code/modules/surgery/organs/lungs.dm b/code/modules/surgery/organs/lungs.dm index 8250665d587..2d6cb8d79e8 100644 --- a/code/modules/surgery/organs/lungs.dm +++ b/code/modules/surgery/organs/lungs.dm @@ -76,7 +76,7 @@ owner.emote("cough") //respitory tract infection if(is_bruised()) - if(prob(2)) + if(prob(2) && !(NO_BLOOD in owner.dna.species.species_traits)) owner.custom_emote(1, "coughs up blood!") owner.bleed(1) if(prob(4)) diff --git a/code/modules/surgery/organs/subtypes/diona.dm b/code/modules/surgery/organs/subtypes/diona.dm index 9812c3d8fc6..3e252b67fb8 100644 --- a/code/modules/surgery/organs/subtypes/diona.dm +++ b/code/modules/surgery/organs/subtypes/diona.dm @@ -18,28 +18,28 @@ max_damage = 35 min_broken_damage = 20 amputation_point = "upper left trunk" - convertable_children = list(/obj/item/organ/external/arm/diona) + convertable_children = list(/obj/item/organ/external/hand/diona) /obj/item/organ/external/arm/right/diona name = "right upper tendril" max_damage = 35 min_broken_damage = 20 amputation_point = "upper right trunk" - convertable_children = list(/obj/item/organ/external/arm/right/diona) + convertable_children = list(/obj/item/organ/external/hand/right/diona) /obj/item/organ/external/leg/diona name = "left lower tendril" max_damage = 35 min_broken_damage = 20 amputation_point = "lower left fork" - convertable_children = list(/obj/item/organ/external/leg/diona) + convertable_children = list(/obj/item/organ/external/foot/diona) /obj/item/organ/external/leg/right/diona name = "right lower tendril" max_damage = 35 min_broken_damage = 20 amputation_point = "lower right fork" - convertable_children = list(/obj/item/organ/external/leg/right/diona) + convertable_children = list(/obj/item/organ/external/foot/right/diona) /obj/item/organ/external/foot/diona name = "left foot" diff --git a/code/modules/surgery/organs/subtypes/skrell.dm b/code/modules/surgery/organs/subtypes/skrell.dm index 46ca75b623f..6544373f312 100644 --- a/code/modules/surgery/organs/subtypes/skrell.dm +++ b/code/modules/surgery/organs/subtypes/skrell.dm @@ -16,7 +16,7 @@ var/obj/item/held_item /obj/item/organ/internal/headpocket/Destroy() - QDEL_NULL(held_item) + empty_contents() return ..() /obj/item/organ/internal/headpocket/on_life() diff --git a/code/modules/surgery/organs/subtypes/unbreakable.dm b/code/modules/surgery/organs/subtypes/unbreakable.dm index 047e2f01fa1..6e1c484e586 100644 --- a/code/modules/surgery/organs/subtypes/unbreakable.dm +++ b/code/modules/surgery/organs/subtypes/unbreakable.dm @@ -16,7 +16,7 @@ /obj/item/organ/external/leg/unbreakable cannot_break = TRUE - convertable_children = list(/obj/item/organ/external/foot/right/unbreakable) + convertable_children = list(/obj/item/organ/external/foot/unbreakable) /obj/item/organ/external/leg/right/unbreakable cannot_break = TRUE @@ -41,21 +41,26 @@ // Cannot dismember or break /obj/item/organ/external/chest/unbreakable/sturdy cannot_amputate = TRUE + convertable_children = list(/obj/item/organ/external/groin/unbreakable/sturdy) /obj/item/organ/external/groin/unbreakable/sturdy cannot_amputate = TRUE /obj/item/organ/external/arm/unbreakable/sturdy cannot_amputate = TRUE + convertable_children = list(/obj/item/organ/external/hand/unbreakable/sturdy) /obj/item/organ/external/arm/right/unbreakable/sturdy cannot_amputate = TRUE + convertable_children = list(/obj/item/organ/external/hand/right/unbreakable/sturdy) /obj/item/organ/external/leg/unbreakable/sturdy cannot_amputate = TRUE + convertable_children = list(/obj/item/organ/external/foot/unbreakable/sturdy) /obj/item/organ/external/leg/right/unbreakable/sturdy cannot_amputate = TRUE + convertable_children = list(/obj/item/organ/external/foot/right/unbreakable/sturdy) /obj/item/organ/external/foot/unbreakable/sturdy cannot_amputate = TRUE diff --git a/code/modules/tgui/modules/ghost_hud_panel.dm b/code/modules/tgui/modules/ghost_hud_panel.dm index 712f17909a6..456df088827 100644 --- a/code/modules/tgui/modules/ghost_hud_panel.dm +++ b/code/modules/tgui/modules/ghost_hud_panel.dm @@ -13,7 +13,7 @@ GLOBAL_DATUM_INIT(ghost_hud_panel, /datum/ui_module/ghost_hud_panel, new) var/list/hud_type_lookup = list( "medical" = DATA_HUD_MEDICAL_ADVANCED, "security" = DATA_HUD_SECURITY_ADVANCED, - "diagnostic" = DATA_HUD_DIAGNOSTIC + "diagnostic" = DATA_HUD_DIAGNOSTIC_ADVANCED ) /datum/ui_module/ghost_hud_panel/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) diff --git a/code/modules/vehicle/ambulance.dm b/code/modules/vehicle/ambulance.dm index 87323fc2042..e5d089c7fe9 100644 --- a/code/modules/vehicle/ambulance.dm +++ b/code/modules/vehicle/ambulance.dm @@ -12,6 +12,11 @@ AA = new(src) soundloop = new(list(src), FALSE) +/obj/vehicle/ambulance/Destroy() + QDEL_NULL(AA) + QDEL_NULL(soundloop) + return ..() + /datum/action/ambulance_alarm name = "Toggle Sirens" icon_icon = 'icons/obj/vehicles.dmi' diff --git a/code/modules/vehicle/atv.dm b/code/modules/vehicle/atv.dm index a077c848f05..39f444d202c 100644 --- a/code/modules/vehicle/atv.dm +++ b/code/modules/vehicle/atv.dm @@ -4,7 +4,7 @@ icon = 'icons/vehicles/4wheeler.dmi' icon_state = "atv" max_integrity = 150 - armor = list("melee" = 50, "bullet" = 25, "laser" = 20, "energy" = 0, "bomb" = 50, "bio" = 0, "rad" = 0, "fire" = 60, "acid" = 60) + armor = list(MELEE = 50, BULLET = 25, LASER = 20, ENERGY = 0, BOMB = 50, BIO = 0, RAD = 0, FIRE = 60, ACID = 60) key_type = /obj/item/key integrity_failure = 70 generic_pixel_x = 0 diff --git a/code/modules/vehicle/secway.dm b/code/modules/vehicle/secway.dm index b3f022c5fe8..90be31e826e 100644 --- a/code/modules/vehicle/secway.dm +++ b/code/modules/vehicle/secway.dm @@ -3,7 +3,7 @@ desc = "A brave security cyborg gave its life to help you look like a complete tool." icon_state = "secway" max_integrity = 100 - armor = list("melee" = 20, "bullet" = 15, "laser" = 10, "energy" = 0, "bomb" = 30, "bio" = 0, "rad" = 0, "fire" = 60, "acid" = 60) + armor = list(MELEE = 20, BULLET = 15, LASER = 10, ENERGY = 0, BOMB = 30, BIO = 0, RAD = 0, FIRE = 60, ACID = 60) key_type = /obj/item/key/security integrity_failure = 50 generic_pixel_x = 0 diff --git a/code/modules/vehicle/vehicle.dm b/code/modules/vehicle/vehicle.dm index 0d9d002496d..0b62c939a0c 100644 --- a/code/modules/vehicle/vehicle.dm +++ b/code/modules/vehicle/vehicle.dm @@ -9,7 +9,7 @@ can_buckle = TRUE buckle_lying = FALSE max_integrity = 300 - armor = list("melee" = 30, "bullet" = 30, "laser" = 30, "energy" = 0, "bomb" = 30, "bio" = 0, "rad" = 0, "fire" = 60, "acid" = 60) + armor = list(MELEE = 30, BULLET = 30, LASER = 30, ENERGY = 0, BOMB = 30, BIO = 0, RAD = 0, FIRE = 60, ACID = 60) var/key_type var/held_key_type //Similar to above, but the vehicle needs the key in hands as opposed to inserted into the ignition var/obj/item/key/inserted_key diff --git a/code/modules/world_topic/gsay.dm b/code/modules/world_topic/gsay.dm new file mode 100644 index 00000000000..16378cd32eb --- /dev/null +++ b/code/modules/world_topic/gsay.dm @@ -0,0 +1,18 @@ +// Just dumps the text in the admin chat box +/datum/world_topic_handler/gsay + topic_key = "gsay" + requires_commskey = TRUE + +/datum/world_topic_handler/gsay/execute(list/input, key_valid) + if(!input["msg"] || !input["usr"] || !input["src"]) + return json_encode(list("error" = "Malformed request")) + + var/message = input["msg"] + var/user = input["usr"] + var/source = input["src"] + + // Send to online admins + for(var/client/C in GLOB.admins) + if(R_ADMIN & C.holder.rights) + to_chat(C, "GSAY: [user]@[source]: [message]") + diff --git a/code/modules/world_topic/instance_announce.dm b/code/modules/world_topic/instance_announce.dm new file mode 100644 index 00000000000..dc58e11ce4f --- /dev/null +++ b/code/modules/world_topic/instance_announce.dm @@ -0,0 +1,8 @@ +/datum/world_topic_handler/instance_announce + topic_key = "instance_announce" + requires_commskey = TRUE + +/datum/world_topic_handler/instance_announce/execute(list/input, key_valid) + var/msg = input["msg"] + to_chat(world, "
    Attention

    [msg]
    ") + SEND_SOUND(world, sound('sound/misc/notice2.ogg')) // Same as captains priority announce diff --git a/code/world.dm b/code/world.dm index 40f4268ef5a..9b4b94a0c3e 100644 --- a/code/world.dm +++ b/code/world.dm @@ -8,3 +8,4 @@ view = "15x15" cache_lifespan = 0 //stops player uploaded stuff from being kept in the rsc past the current session fps = 20 // If this isnt hard-defined, anything relying on this variable before world load will cry a lot + name = "Paradise Station 13" diff --git a/config/example/config.toml b/config/example/config.toml index 834a4915941..a33c4555891 100644 --- a/config/example/config.toml +++ b/config/example/config.toml @@ -141,7 +141,7 @@ ipc_screens = [ # Enable/disable the database on a whole sql_enabled = false # SQL version. If this is a mismatch, round start will be delayed -sql_version = 25 +sql_version = 27 # SQL server address. Can be an IP or DNS name sql_address = "127.0.0.1" # SQL server port @@ -182,8 +182,11 @@ admin_webhook_urls = [ "https://admin.webhook.two" ] # Role ID for the admin role on the discord. Set to "" to disable. -# THIS MUST BE A STRING. BYOND DOESNT LIKE NUMBERS THIS BIG +# THESE MUST BOTH BE STRINGS. BYOND DOESNT LIKE NUMBERS THIS BIG admin_role_id = "" +# Role ID for the mentor role on the discord. Set to "" to disable. +mentor_role_id = "" + # Forward all ahelps to the discord? If disabled, ahelps are only forwarded if admins are AFK/Offline forward_all_ahelps = true @@ -719,6 +722,15 @@ shutdown_on_reboot = false #_2fa_auth_host = "http://127.0.0.1:8080" # List of IP addresses to be ignored by the world/Topic rate limiting. Useful if you have other services topic_ip_ratelimit_bypass = ["127.0.0.1"] +# Turn this to true if you are running a production server +is_production = false +# Server instance ID. This is used for tagging the server in the database +# You do NOT want to change this once you are running in production +instance_id = "paradise_main" +# Server internal IP. Used if you are splitting instances over multiple internal IPs. +# In most cases this is just 127.0.0.1 +internal_ip = "127.0.0.1" + ################################################################ diff --git a/dreamchecker.exe b/dreamchecker.exe index 2fa602138fd..5203df4047c 100644 Binary files a/dreamchecker.exe and b/dreamchecker.exe differ diff --git a/goon/browserassets/css/browserOutput-dark.css b/goon/browserassets/css/browserOutput-dark.css index db879454cc4..bbee5d2625d 100644 --- a/goon/browserassets/css/browserOutput-dark.css +++ b/goon/browserassets/css/browserOutput-dark.css @@ -365,6 +365,7 @@ h1.alert, h2.alert {color: #FFF;} .greentext {color: #00FF00; font-size: 150%;} .redtext {color: #FF0000; font-size: 150%;} .bold {font-weight: bold;} +.his_grace {color: #15D512; font-family: "Courier New", cursive, sans-serif; font-style: italic;} .center {text-align: center;} .red {color: #FF0000;} .purple {color: #9031C4;} diff --git a/goon/browserassets/css/browserOutput.css b/goon/browserassets/css/browserOutput.css index f2de7748945..cc6ed7fdcb8 100644 --- a/goon/browserassets/css/browserOutput.css +++ b/goon/browserassets/css/browserOutput.css @@ -362,6 +362,7 @@ h1.alert, h2.alert {color: #000000;} .greentext {color: #00FF00; font-size: 150%;} .redtext {color: #FF0000; font-size: 150%;} .bold {font-weight: bold;} +.his_grace {color: #15D512; font-family: "Courier New", cursive, sans-serif; font-style: italic;} .center {text-align: center;} .red {color: #FF0000;} .purple {color: #5e2d79;} diff --git a/goon/browserassets/html/browserOutput.html b/goon/browserassets/html/browserOutput.html index ed2c77a306c..0be364cb828 100644 --- a/goon/browserassets/html/browserOutput.html +++ b/goon/browserassets/html/browserOutput.html @@ -31,7 +31,9 @@
    Loading...

    If this takes longer than 10 seconds, it will automatically reload, multiple times if necessary.
    - If it still doesn't work, please adminhelp (F1) and tell us your operating system and Internet Explorer version. + If it still doesn't work, do not adminhelp (F1), you will not see our responses.
    + Please see This Guide and seek help on our discord #helpchat +
    diff --git a/html/create_object.html b/html/create_object.html index 90aa4e0d7e8..decafa85660 100644 --- a/html/create_object.html +++ b/html/create_object.html @@ -1,7 +1,7 @@ - Create Object + Create $ATOM$ ",o.insertBefore(n.lastChild,o.firstChild)}(e,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),r||function(e,t){t.cache||(t.cache={},t.createElem=e.createElement,t.createFrag=e.createDocumentFragment,t.frag=t.createFrag()),e.createElement=function(n){return f.shivMethods?m(n,e,t):t.createElem(n)},e.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+u().join().replace(/[\w\-:]+/g,(function(e){return t.createElem(e),t.frag.createElement(e),'c("'+e+'")'}))+");return n}")(f,t.frag)}(e,t),e}!function(){try{var e=n.createElement("a");e.innerHTML="",o="hidden"in e,r=1==e.childNodes.length||function(){n.createElement("a");var e=n.createDocumentFragment();return"undefined"==typeof e.cloneNode||"undefined"==typeof e.createDocumentFragment||"undefined"==typeof e.createElement}()}catch(t){o=!0,r=!0}}();var f={elements:a.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",version:"3.7.3",shivCSS:!1!==a.shivCSS,supportsUnknownElements:r,shivMethods:!1!==a.shivMethods,type:"default",shivDocument:p,createElement:m,createDocumentFragment:function(e,t){if(e||(e=n),r)return e.createDocumentFragment();for(var o=(t=t||s(e)).frag.cloneNode(),a=0,c=u(),i=c.length;a1?r-1:0),c=1;c1?t-1:0),o=1;o=0||(r[n]=e[n]);return r}(e,["className"]);return(0,o.normalizeProps)((0,o.createComponentVNode)(2,a.Box,Object.assign({className:(0,r.classes)(["BlockQuote",t])},n)))}},function(e,t,n){"use strict";var o,r;t.__esModule=!0,t.VNodeFlags=t.ChildFlags=void 0,t.VNodeFlags=o,function(e){e[e.HtmlElement=1]="HtmlElement",e[e.ComponentUnknown=2]="ComponentUnknown",e[e.ComponentClass=4]="ComponentClass",e[e.ComponentFunction=8]="ComponentFunction",e[e.Text=16]="Text",e[e.SvgElement=32]="SvgElement",e[e.InputElement=64]="InputElement",e[e.TextareaElement=128]="TextareaElement",e[e.SelectElement=256]="SelectElement",e[e.Void=512]="Void",e[e.Portal=1024]="Portal",e[e.ReCreate=2048]="ReCreate",e[e.ContentEditable=4096]="ContentEditable",e[e.Fragment=8192]="Fragment",e[e.InUse=16384]="InUse",e[e.ForwardRef=32768]="ForwardRef",e[e.Normalized=65536]="Normalized",e[e.ForwardRefComponent=32776]="ForwardRefComponent",e[e.FormElement=448]="FormElement",e[e.Element=481]="Element",e[e.Component=14]="Component",e[e.DOMRef=2033]="DOMRef",e[e.InUseOrNormalized=81920]="InUseOrNormalized",e[e.ClearInUse=-16385]="ClearInUse",e[e.ComponentKnown=12]="ComponentKnown"}(o||(t.VNodeFlags=o={})),t.ChildFlags=r,function(e){e[e.UnknownChildren=0]="UnknownChildren",e[e.HasInvalidChildren=1]="HasInvalidChildren",e[e.HasVNodeChildren=2]="HasVNodeChildren",e[e.HasNonKeyedChildren=4]="HasNonKeyedChildren",e[e.HasKeyedChildren=8]="HasKeyedChildren",e[e.HasTextChildren=16]="HasTextChildren",e[e.MultipleChildren=12]="MultipleChildren"}(r||(t.ChildFlags=r={}))},function(e,t,n){"use strict";t.__esModule=!0,t.ByondUi=void 0;var o=n(0),r=n(8),a=n(431),c=n(25),i=n(61),l=n(17);function d(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o=0||(r[n]=e[n]);return r}var u=(0,i.createLogger)("ByondUi"),s=[];window.addEventListener("beforeunload",(function(){for(var e=0;e=0||(r[n]=e[n]);return r}(t,["data","rangeX","rangeY","fillColor","strokeColor","strokeWidth"]),C=this.state.viewBox,N=function(e,t,n,o){if(0===e.length)return[];var a=(0,r.zipWith)(Math.min).apply(void 0,e),c=(0,r.zipWith)(Math.max).apply(void 0,e);return n!==undefined&&(a[0]=n[0],c[0]=n[1]),o!==undefined&&(a[1]=o[0],c[1]=o[1]),(0,r.map)((function(e){return(0,r.zipWith)((function(e,t,n,o){return(e-t)/(n-t)*o}))(e,a,c,t)}))(e)}(a,C,c,l);if(N.length>0){var b=N[0],g=N[N.length-1];N.push([C[0]+f,g[1]]),N.push([C[0]+f,-f]),N.push([-f,-f]),N.push([-f,b[1]])}var V=function(e){for(var t="",n=0;n=0||(r[n]=e[n]);return r}(t,["children","color","title","buttons"]);return(0,o.createVNode)(1,"div","Collapsible",[(0,o.createVNode)(1,"div","Table",[(0,o.createVNode)(1,"div","Table__cell",(0,o.normalizeProps)((0,o.createComponentVNode)(2,a.Button,Object.assign({fluid:!0,color:l,icon:n?"chevron-down":"chevron-right",onClick:function(){return e.setState({open:!n})}},s,{children:d}))),2),u&&(0,o.createVNode)(1,"div","Table__cell Table__cell--collapsing",u,0)],0),n&&(0,o.createComponentVNode)(2,r.Box,{mt:1,children:c})],0)},c}(o.Component);t.Collapsible=c},function(e,t,n){"use strict";t.__esModule=!0,t.ColorBox=void 0;var o=n(0),r=n(8),a=n(17);var c=function(e){var t=e.content,n=(e.children,e.className),c=e.color,i=e.backgroundColor,l=function(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o=0||(r[n]=e[n]);return r}(e,["content","children","className","color","backgroundColor"]);return l.color=t?null:"transparent",l.backgroundColor=c||i,(0,o.normalizeProps)((0,o.createVNode)(1,"div",(0,r.classes)(["ColorBox",n,(0,a.computeBoxClassName)(l)]),t||".",0,Object.assign({},(0,a.computeBoxProps)(l))))};t.ColorBox=c,c.defaultHooks=r.pureComponentHooks},function(e,t,n){"use strict";t.__esModule=!0,t.Dropdown=void 0;var o=n(0),r=n(8),a=n(17),c=n(130);function i(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o=0||(r[n]=e[n]);return r}var l=function(e){var t,n;function l(t){var n;return(n=e.call(this,t)||this).state={open:!1},n.handleClick=function(){n.state.open&&n.setOpen(!1)},n}n=e,(t=l).prototype=Object.create(n.prototype),t.prototype.constructor=t,t.__proto__=n;var d=l.prototype;return d.componentWillUnmount=function(){window.removeEventListener("click",this.handleClick)},d.setOpen=function(e){var t=this;this.setState({open:e}),e?(setTimeout((function(){return window.addEventListener("click",t.handleClick)})),this.menuRef.focus()):window.removeEventListener("click",this.handleClick)},d.setSelected=function(e){this.setOpen(!1),this.props.onSelected(e)},d.buildMenu=function(){var e=this,t=this.props.options,n=(void 0===t?[]:t).map((function(t){return(0,o.createVNode)(1,"div","Dropdown__menuentry",t,0,{onClick:function(){e.setSelected(t)}},t)}));return n.length?n:"No Options Found"},d.render=function(){var e=this,t=this.props,n=t.color,l=void 0===n?"default":n,d=t.over,u=t.noscroll,s=t.nochevron,m=t.width,p=(t.onClick,t.selected),f=t.disabled,h=i(t,["color","over","noscroll","nochevron","width","onClick","selected","disabled"]),C=h.className,N=i(h,["className"]),b=d?!this.state.open:this.state.open,g=this.state.open?(0,o.createVNode)(1,"div",(0,r.classes)([u?"Dropdown__menu-noscroll":"Dropdown__menu",d&&"Dropdown__over"]),this.buildMenu(),0,{tabIndex:"-1",style:{width:m}},null,(function(t){e.menuRef=t})):null;return(0,o.createVNode)(1,"div","Dropdown",[(0,o.normalizeProps)((0,o.createComponentVNode)(2,a.Box,Object.assign({width:m,className:(0,r.classes)(["Dropdown__control","Button","Button--color--"+l,f&&"Button--disabled",C])},N,{onClick:function(){f&&!e.state.open||e.setOpen(!e.state.open)},children:[(0,o.createVNode)(1,"span","Dropdown__selected-text",p,0),!!s||(0,o.createVNode)(1,"span","Dropdown__arrow-button",(0,o.createComponentVNode)(2,c.Icon,{name:b?"chevron-up":"chevron-down"}),2)]}))),g],0)},l}(o.Component);t.Dropdown=l},function(e,t,n){"use strict";t.__esModule=!0,t.Input=void 0;var o=n(0),r=n(8),a=n(17);function c(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o=0||(r[n]=e[n]);return r}var i=function(e){return(0,r.isFalsy)(e)?"":e},l=function(e){var t,n;function l(){var t;return(t=e.call(this)||this).inputRef=(0,o.createRef)(),t.state={editing:!1},t.handleInput=function(e){var n=t.state.editing,o=t.props.onInput;n||t.setEditing(!0),o&&o(e,e.target.value)},t.handleFocus=function(e){t.state.editing||t.setEditing(!0)},t.handleBlur=function(e){var n=t.state.editing,o=t.props.onChange;n&&(t.setEditing(!1),o&&o(e,e.target.value))},t.handleKeyDown=function(e){var n=t.props,o=n.onInput,r=n.onChange,a=n.onEnter;return 13===e.keyCode?(t.setEditing(!1),r&&r(e,e.target.value),o&&o(e,e.target.value),a&&a(e,e.target.value),void(t.props.selfClear?e.target.value="":e.target.blur())):27===e.keyCode?(t.setEditing(!1),e.target.value=i(t.props.value),void e.target.blur()):void 0},t}n=e,(t=l).prototype=Object.create(n.prototype),t.prototype.constructor=t,t.__proto__=n;var d=l.prototype;return d.componentDidMount=function(){var e=this.props.value,t=this.inputRef.current;t&&(t.value=i(e),this.props.autofocus&&(t.focus(),t.selectionStart=0,t.selectionEnd=t.value.length))},d.componentDidUpdate=function(e,t){var n=this.state.editing,o=e.value,r=this.props.value,a=this.inputRef.current;a&&!n&&o!==r&&(a.value=i(r))},d.setEditing=function(e){this.setState({editing:e})},d.render=function(){var e=this.props,t=(e.selfClear,e.onInput,e.onChange,e.onEnter,e.value,e.maxLength),n=e.placeholder,i=(e.autofocus,e.disabled),l=e.multiline,d=e.cols,u=void 0===d?32:d,s=e.rows,m=void 0===s?4:s,p=c(e,["selfClear","onInput","onChange","onEnter","value","maxLength","placeholder","autofocus","disabled","multiline","cols","rows"]),f=p.className,h=p.fluid,C=c(p,["className","fluid"]);return(0,o.normalizeProps)((0,o.createComponentVNode)(2,a.Box,Object.assign({className:(0,r.classes)(["Input",h&&"Input--fluid",i&&"Input--disabled",f])},C,{children:[(0,o.createVNode)(1,"div","Input__baseline",".",16),l?(0,o.createVNode)(128,"textarea","Input__textarea",null,1,{placeholder:n,onInput:this.handleInput,onFocus:this.handleFocus,onBlur:this.handleBlur,maxLength:t,cols:u,rows:m,disabled:i},null,this.inputRef):(0,o.createVNode)(64,"input","Input__input",null,1,{placeholder:n,onInput:this.handleInput,onFocus:this.handleFocus,onBlur:this.handleBlur,onKeyDown:this.handleKeyDown,maxLength:t,disabled:i},null,this.inputRef)]})))},l}(o.Component);t.Input=l},function(e,t,n){"use strict";t.__esModule=!0,t.Knob=void 0;var o=n(0),r=n(15),a=n(8),c=n(25),i=n(17),l=n(180),d=n(131);t.Knob=function(e){if(c.IS_IE8)return(0,o.normalizeProps)((0,o.createComponentVNode)(2,d.NumberInput,Object.assign({},e)));var t=e.animated,n=e.format,u=e.maxValue,s=e.minValue,m=e.onChange,p=e.onDrag,f=e.step,h=e.stepPixelSize,C=e.suppressFlicker,N=e.unit,b=e.value,g=e.className,V=e.style,v=e.fillValue,y=e.color,_=e.ranges,x=void 0===_?{}:_,k=e.size,L=e.bipolar,B=(e.children,e.popUpPosition),w=function(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o=0||(r[n]=e[n]);return r}(e,["animated","format","maxValue","minValue","onChange","onDrag","step","stepPixelSize","suppressFlicker","unit","value","className","style","fillValue","color","ranges","size","bipolar","children","popUpPosition"]);return(0,o.normalizeProps)((0,o.createComponentVNode)(2,l.DraggableControl,Object.assign({dragMatrix:[0,-1]},{animated:t,format:n,maxValue:u,minValue:s,onChange:m,onDrag:p,step:f,stepPixelSize:h,suppressFlicker:C,unit:N,value:b},{children:function(e){var t=e.dragging,n=(e.editing,e.value),c=e.displayValue,l=e.displayElement,d=e.inputElement,m=e.handleDragStart,p=(0,r.scale)(null!=v?v:c,s,u),f=(0,r.scale)(c,s,u),h=y||(0,r.keyOfMatchingRange)(null!=v?v:n,x)||"default",C=270*(f-.5);return(0,o.normalizeProps)((0,o.createVNode)(1,"div",(0,a.classes)(["Knob","Knob--color--"+h,L&&"Knob--bipolar",g,(0,i.computeBoxClassName)(w)]),[(0,o.createVNode)(1,"div","Knob__circle",(0,o.createVNode)(1,"div","Knob__cursorBox",(0,o.createVNode)(1,"div","Knob__cursor"),2,{style:{transform:"rotate("+C+"deg)"}}),2),t&&(0,o.createVNode)(1,"div",(0,a.classes)(["Knob__popupValue",B&&"Knob__popupValue--"+B]),l,0),(0,o.createVNode)(32,"svg","Knob__ring Knob__ringTrackPivot",(0,o.createVNode)(32,"circle","Knob__ringTrack",null,1,{cx:"50",cy:"50",r:"50"}),2,{viewBox:"0 0 100 100"}),(0,o.createVNode)(32,"svg","Knob__ring Knob__ringFillPivot",(0,o.createVNode)(32,"circle","Knob__ringFill",null,1,{style:{"stroke-dashoffset":((L?2.75:2)-1.5*p)*Math.PI*50},cx:"50",cy:"50",r:"50"}),2,{viewBox:"0 0 100 100"}),d],0,Object.assign({},(0,i.computeBoxProps)(Object.assign({style:Object.assign({"font-size":k+"rem"},V)},w)),{onMouseDown:m})))}})))}},function(e,t,n){"use strict";t.__esModule=!0,t.LabeledControls=void 0;var o=n(0),r=n(75);function a(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o=0||(r[n]=e[n]);return r}var c=function(e){var t=e.children,n=a(e,["children"]);return(0,o.normalizeProps)((0,o.createComponentVNode)(2,r.Flex,Object.assign({mx:-.5,align:"stretch",justify:"space-between"},n,{children:t})))};t.LabeledControls=c;c.Item=function(e){var t=e.label,n=e.children,c=a(e,["label","children"]);return(0,o.createComponentVNode)(2,r.Flex.Item,{mx:1,children:(0,o.normalizeProps)((0,o.createComponentVNode)(2,r.Flex,Object.assign({minWidth:"52px",height:"100%",direction:"column",align:"center",textAlign:"center",justify:"space-between"},c,{children:[(0,o.createComponentVNode)(2,r.Flex.Item),(0,o.createComponentVNode)(2,r.Flex.Item,{children:n}),(0,o.createComponentVNode)(2,r.Flex.Item,{color:"label",children:t})]})))})}},function(e,t,n){"use strict";t.__esModule=!0,t.NanoMap=void 0;var o=n(0),r=n(2),a=n(1),c=n(77),i=n(181);var l=function(e){return e.stopPropagation&&e.stopPropagation(),e.preventDefault&&e.preventDefault(),e.cancelBubble=!0,e.returnValue=!1,!1},d=function(e){var t,n;function c(t){var n;n=e.call(this,t)||this;window.innerWidth,window.innerHeight;return n.state={offsetX:128,offsetY:48,transform:"none",dragging:!1,originX:null,originY:null,zoom:1},n.handleDragStart=function(e){n.ref=e.target,n.setState({dragging:!1,originX:e.screenX,originY:e.screenY}),document.addEventListener("mousemove",n.handleDragMove),document.addEventListener("mouseup",n.handleDragEnd),l(e)},n.handleDragMove=function(e){n.setState((function(t){var n=Object.assign({},t),o=e.screenX-n.originX,r=e.screenY-n.originY;return t.dragging?(n.offsetX+=o,n.offsetY+=r,n.originX=e.screenX,n.originY=e.screenY):n.dragging=!0,n})),l(e)},n.handleDragEnd=function(e){n.setState({dragging:!1,originX:null,originY:null}),document.removeEventListener("mousemove",n.handleDragMove),document.removeEventListener("mouseup",n.handleDragEnd),l(e)},n.handleZoom=function(e,o){n.setState((function(e){var n=Math.min(Math.max(o,1),8),r=1.5*(n-e.zoom);return e.zoom=n,e.offsetX=e.offsetX-262*r,e.offsetY=e.offsetY-256*r,t.onZoom&&t.onZoom(e.zoom),e}))},n}return n=e,(t=c).prototype=Object.create(n.prototype),t.prototype.constructor=t,t.__proto__=n,c.prototype.render=function(){var e=(0,a.useBackend)(this.context).config,t=this.state,n=t.dragging,c=t.offsetX,i=t.offsetY,l=t.zoom,d=void 0===l?1:l,s=this.props.children,m=510*d+"px",p={width:m,height:m,"margin-top":i+"px","margin-left":c+"px",overflow:"hidden",position:"relative","background-image":"url("+e.map+"_nanomap_z1.png)","background-size":"cover","background-repeat":"no-repeat","text-align":"center",cursor:n?"move":"auto"};return(0,o.createComponentVNode)(2,r.Box,{className:"NanoMap__container",children:[(0,o.createComponentVNode)(2,r.Box,{style:p,textAlign:"center",onMouseDown:this.handleDragStart,children:(0,o.createComponentVNode)(2,r.Box,{children:s})}),(0,o.createComponentVNode)(2,u,{zoom:d,onZoom:this.handleZoom})]})},c}(o.Component);t.NanoMap=d;d.Marker=function(e,t){var n=e.x,a=e.y,c=e.zoom,i=void 0===c?1:c,l=e.icon,d=e.tooltip,u=e.color,s=2*n*i-i-3,m=2*a*i-i-3;return(0,o.createVNode)(1,"div",null,(0,o.createComponentVNode)(2,r.Box,{position:"absolute",className:"NanoMap__marker",lineHeight:"0",bottom:m+"px",left:s+"px",children:[(0,o.createComponentVNode)(2,r.Icon,{name:l,color:u,fontSize:"6px"}),(0,o.createComponentVNode)(2,r.Tooltip,{content:d})]}),2)};var u=function(e,t){return(0,o.createComponentVNode)(2,r.Box,{className:"NanoMap__zoomer",children:(0,o.createComponentVNode)(2,c.LabeledList,{children:(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Zoom",children:(0,o.createComponentVNode)(2,i.Slider,{minValue:"1",maxValue:"8",stepPixelSize:"10",format:function(e){return e+"x"},value:e.zoom,onDrag:function(t,n){return e.onZoom(t,n)}})})})})};d.Zoomer=u},function(e,t,n){"use strict";t.__esModule=!0,t.Modal=void 0;var o=n(0),r=n(8),a=n(17),c=n(177);t.Modal=function(e){var t,n=e.className,i=e.children,l=e.onEnter,d=function(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o=0||(r[n]=e[n]);return r}(e,["className","children","onEnter"]);return l&&(t=function(e){13===e.keyCode&&l(e)}),(0,o.createComponentVNode)(2,c.Dimmer,{onKeyDown:t,children:(0,o.normalizeProps)((0,o.createVNode)(1,"div",(0,r.classes)(["Modal",n,(0,a.computeBoxClassName)(d)]),i,0,Object.assign({},(0,a.computeBoxProps)(d))))})}},function(e,t,n){"use strict";t.__esModule=!0,t.NoticeBox=void 0;var o=n(0),r=n(8),a=n(17);var c=function(e){var t=e.className,n=e.color,c=e.info,i=(e.warning,e.success),l=e.danger,d=function(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o=0||(r[n]=e[n]);return r}(e,["className","color","info","warning","success","danger"]);return(0,o.normalizeProps)((0,o.createComponentVNode)(2,a.Box,Object.assign({className:(0,r.classes)(["NoticeBox",n&&"NoticeBox--color--"+n,c&&"NoticeBox--type--info",i&&"NoticeBox--type--success",l&&"NoticeBox--type--danger",t])},d)))};t.NoticeBox=c,c.defaultHooks=r.pureComponentHooks},function(e,t,n){"use strict";t.__esModule=!0,t.ProgressBarCountdown=t.ProgressBar=void 0;var o=n(0),r=n(15),a=n(8),c=n(17);function i(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o=0||(r[n]=e[n]);return r}var l=function(e){var t=e.className,n=e.value,l=e.minValue,d=void 0===l?0:l,u=e.maxValue,s=void 0===u?1:u,m=e.color,p=e.ranges,f=void 0===p?{}:p,h=e.children,C=i(e,["className","value","minValue","maxValue","color","ranges","children"]),N=(0,r.scale)(n,d,s),b=h!==undefined,g=m||(0,r.keyOfMatchingRange)(n,f)||"default";return(0,o.normalizeProps)((0,o.createVNode)(1,"div",(0,a.classes)(["ProgressBar","ProgressBar--color--"+g,t,(0,c.computeBoxClassName)(C)]),[(0,o.createVNode)(1,"div","ProgressBar__fill ProgressBar__fill--animated",null,1,{style:{width:100*(0,r.clamp01)(N)+"%"}}),(0,o.createVNode)(1,"div","ProgressBar__content",b?h:(0,r.toFixed)(100*N)+"%",0)],4,Object.assign({},(0,c.computeBoxProps)(C))))};t.ProgressBar=l,l.defaultHooks=a.pureComponentHooks;var d=function(e){var t,n;function r(t){var n;return(n=e.call(this,t)||this).timer=null,n.state={value:Math.max(100*t.current,0)},n}n=e,(t=r).prototype=Object.create(n.prototype),t.prototype.constructor=t,t.__proto__=n;var a=r.prototype;return a.tick=function(){var e=Math.max(this.state.value+this.props.rate,0);e<=0&&clearInterval(this.timer),this.setState((function(t){return{value:e}}))},a.componentDidMount=function(){var e=this;this.timer=setInterval((function(){return e.tick()}),this.props.rate)},a.componentWillUnmount=function(){clearInterval(this.timer)},a.render=function(){var e=this.props,t=e.start,n=(e.current,e.end),r=i(e,["start","current","end"]),a=(this.state.value/100-t)/(n-t);return(0,o.normalizeProps)((0,o.createComponentVNode)(2,l,Object.assign({value:a},r)))},r}(o.Component);t.ProgressBarCountdown=d,d.defaultProps={rate:1e3},l.Countdown=d},function(e,t,n){"use strict";t.__esModule=!0,t.Section=void 0;var o=n(0),r=n(8),a=n(17);var c=function(e){var t=e.className,n=e.title,c=e.level,i=void 0===c?1:c,l=e.buttons,d=e.content,u=e.stretchContents,s=e.noTopPadding,m=e.children,p=function(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o=0||(r[n]=e[n]);return r}(e,["className","title","level","buttons","content","stretchContents","noTopPadding","children"]),f=!(0,r.isFalsy)(n)||!(0,r.isFalsy)(l),h=!(0,r.isFalsy)(d)||!(0,r.isFalsy)(m);return(0,o.normalizeProps)((0,o.createComponentVNode)(2,a.Box,Object.assign({className:(0,r.classes)(["Section","Section--level--"+i,e.flexGrow&&"Section--flex",t])},p,{children:[f&&(0,o.createVNode)(1,"div","Section__title",[(0,o.createVNode)(1,"span","Section__titleText",n,0),(0,o.createVNode)(1,"div","Section__buttons",l,0)],4),h&&(0,o.createComponentVNode)(2,a.Box,{className:(0,r.classes)(["Section__content",!!u&&"Section__content--stretchContents",!!s&&"Section__content--noTopPadding"]),children:[d,m]})]})))};t.Section=c,c.defaultHooks=r.pureComponentHooks},function(e,t,n){"use strict";t.__esModule=!0,t.Tabs=void 0;var o=n(0),r=n(8),a=n(17),c=n(129);function i(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o=0||(r[n]=e[n]);return r}var l=function(e){var t=e.className,n=e.vertical,c=e.children,l=i(e,["className","vertical","children"]);return(0,o.normalizeProps)((0,o.createVNode)(1,"div",(0,r.classes)(["Tabs",n?"Tabs--vertical":"Tabs--horizontal",t,(0,a.computeBoxClassName)(l)]),(0,o.createVNode)(1,"div","Tabs__tabBox",c,0),2,Object.assign({},(0,a.computeBoxProps)(l))))};t.Tabs=l;l.Tab=function(e){var t=e.className,n=e.selected,a=e.altSelection,l=i(e,["className","selected","altSelection"]);return(0,o.normalizeProps)((0,o.createComponentVNode)(2,c.Button,Object.assign({className:(0,r.classes)(["Tabs__tab",n&&"Tabs__tab--selected",a&&n&&"Tabs__tab--altSelection",t]),selected:!a&&n,color:"transparent"},l)))}},function(e,t,n){"use strict";t.__esModule=!0,t.TimeDisplay=void 0;t.TimeDisplay=function(e){var t=e.totalSeconds;return function(e){return(!e||e<0)&&(e=0),[Math.floor(e/60).toString(10),(Math.floor(e)%60).toString(10)].map((function(e){return e.length<2?"0"+e:e})).join(":")}(void 0===t?0:t)}},function(e,t,n){var o={"./AICard.js":447,"./AIFixer.js":448,"./APC.js":449,"./ATM.js":450,"./AccountsUplinkTerminal.js":451,"./AiAirlock.js":452,"./AirAlarm.js":453,"./AirlockAccessController.js":454,"./AirlockElectronics.js":455,"./AppearanceChanger.js":456,"./AtmosAlertConsole.js":457,"./AtmosControl.js":458,"./AtmosFilter.js":459,"./AtmosMixer.js":460,"./AtmosPump.js":461,"./Autolathe.js":462,"./BlueSpaceArtilleryControl.js":463,"./BluespaceTap.js":464,"./BodyScanner.js":465,"./BotClean.js":466,"./BotSecurity.js":467,"./BrigCells.js":468,"./BrigTimer.js":469,"./CameraConsole.js":470,"./Canister.js":471,"./CardComputer.js":472,"./CargoConsole.js":473,"./ChemDispenser.js":474,"./ChemHeater.js":478,"./ChemMaster.js":479,"./CloningConsole.js":480,"./CommunicationsComputer.js":481,"./Contractor.js":482,"./ConveyorSwitch.js":483,"./CrewMonitor.js":484,"./Cryo.js":485,"./DNAModifier.js":486,"./DisposalBin.js":487,"./DnaVault.js":488,"./DroneConsole.js":489,"./EFTPOS.js":490,"./ERTManager.js":491,"./Electropack.js":492,"./EvolutionMenu.js":493,"./ExosuitFabricator.js":494,"./ExternalAirlockController.js":495,"./FaxMachine.js":496,"./FloorPainter.js":497,"./GPS.js":498,"./GenericCrewManifest.js":499,"./GhostHudPanel.js":500,"./GravityGen.js":501,"./GuestPass.js":502,"./HandheldChemDispenser.js":503,"./Instrument.js":504,"./KeycardAuth.js":505,"./LaborClaimConsole.js":506,"./LawManager.js":507,"./MechBayConsole.js":508,"./MechaControlConsole.js":509,"./MedicalRecords.js":510,"./MiningVendor.js":511,"./Newscaster.js":512,"./NuclearBomb.js":513,"./OperatingComputer.js":514,"./Orbit.js":515,"./OreRedemption.js":516,"./PAI.js":517,"./PDA.js":530,"./Pacman.js":546,"./PersonalCrafting.js":547,"./PodTracking.js":548,"./PoolController.js":549,"./PortablePump.js":550,"./PortableScrubber.js":551,"./PortableTurret.js":552,"./PowerMonitor.js":188,"./RCD.js":553,"./RPD.js":554,"./Radio.js":555,"./RequestConsole.js":556,"./RndConsole.js":62,"./RobotSelfDiagnosis.js":571,"./RoboticsControlConsole.js":572,"./Safe.js":573,"./SatelliteControl.js":574,"./SecurityRecords.js":575,"./ShuttleConsole.js":576,"./ShuttleManipulator.js":577,"./Sleeper.js":578,"./SlotMachine.js":579,"./Smartfridge.js":580,"./Smes.js":581,"./SolarControl.js":582,"./SpawnersMenu.js":583,"./StationAlertConsole.js":584,"./SuitStorage.js":585,"./SupermatterMonitor.js":586,"./SyndicateComputerSimple.js":587,"./TEG.js":588,"./TachyonArray.js":589,"./Tank.js":590,"./TankDispenser.js":591,"./TcommsCore.js":592,"./TcommsRelay.js":593,"./Teleporter.js":594,"./ThermoMachine.js":595,"./TransferValve.js":596,"./Uplink.js":597,"./Vending.js":598,"./VolumeMixer.js":599,"./Wires.js":600,"./WizardApprenticeContract.js":601};function r(e){var t=a(e);return n(t)}function a(e){if(!n.o(o,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return o[e]}r.keys=function(){return Object.keys(o)},r.resolve=a,e.exports=r,r.id=446},function(e,t,n){"use strict";t.__esModule=!0,t.AICard=void 0;var o=n(0),r=n(1),a=n(2),c=n(4);t.AICard=function(e,t){var n=(0,r.useBackend)(t),i=n.act,l=n.data;if(0===l.has_ai)return(0,o.createComponentVNode)(2,c.Window,{children:(0,o.createComponentVNode)(2,c.Window.Content,{children:(0,o.createComponentVNode)(2,a.Section,{title:"Stored AI",children:(0,o.createComponentVNode)(2,a.Box,{children:(0,o.createVNode)(1,"h3",null,"No AI detected.",16)})})})});var d=null;return d=l.integrity>=75?"green":l.integrity>=25?"yellow":"red",(0,o.createComponentVNode)(2,c.Window,{scrollable:!0,children:(0,o.createComponentVNode)(2,c.Window.Content,{children:[(0,o.createComponentVNode)(2,a.Section,{title:"Stored AI",children:[(0,o.createComponentVNode)(2,a.Box,{bold:!0,display:"inline-block",children:(0,o.createVNode)(1,"h3",null,l.name,0)}),(0,o.createComponentVNode)(2,a.Box,{children:(0,o.createComponentVNode)(2,a.LabeledList,{children:(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Integrity",children:(0,o.createComponentVNode)(2,a.ProgressBar,{color:d,value:l.integrity/100})})})}),(0,o.createComponentVNode)(2,a.Box,{color:"red",children:(0,o.createVNode)(1,"h2",null,1===l.flushing?"Wipe of AI in progress...":"",0)})]}),(0,o.createComponentVNode)(2,a.Section,{title:"Laws",children:!!l.has_laws&&(0,o.createComponentVNode)(2,a.Box,{children:l.laws.map((function(e,t){return(0,o.createComponentVNode)(2,a.Box,{display:"inline-block",children:e},t)}))})||(0,o.createComponentVNode)(2,a.Box,{color:"red",children:(0,o.createVNode)(1,"h3",null,"No laws detected.",16)})}),(0,o.createComponentVNode)(2,a.Section,{title:"Actions",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Wireless Activity",children:(0,o.createComponentVNode)(2,a.Button,{icon:l.wireless?"check":"times",content:l.wireless?"Enabled":"Disabled",color:l.wireless?"green":"red",onClick:function(){return i("wireless")}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Subspace Transceiver",children:(0,o.createComponentVNode)(2,a.Button,{icon:l.radio?"check":"times",content:l.radio?"Enabled":"Disabled",color:l.radio?"green":"red",onClick:function(){return i("radio")}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Wipe",children:(0,o.createComponentVNode)(2,a.Button.Confirm,{icon:"trash-alt",confirmIcon:"trash-alt",disabled:l.flushing||0===l.integrity,confirmColor:"red",content:"Wipe AI",onClick:function(){return i("wipe")}})})]})})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.AIFixer=void 0;var o=n(0),r=n(1),a=n(2),c=n(4);t.AIFixer=function(e,t){var n=(0,r.useBackend)(t),i=n.act,l=n.data;if(null===l.occupant)return(0,o.createComponentVNode)(2,c.Window,{children:(0,o.createComponentVNode)(2,c.Window.Content,{children:(0,o.createComponentVNode)(2,a.Section,{title:"Stored AI",children:(0,o.createComponentVNode)(2,a.Box,{children:(0,o.createVNode)(1,"h3",null,"No artificial intelligence detected.",16)})})})});var d=null;d=2!==l.stat&&null!==l.stat;var u=null;u=l.integrity>=75?"green":l.integrity>=25?"yellow":"red";var s=null;return s=l.integrity>=100,(0,o.createComponentVNode)(2,c.Window,{scrollable:!0,children:(0,o.createComponentVNode)(2,c.Window.Content,{children:[(0,o.createComponentVNode)(2,a.Section,{title:"Stored AI",children:(0,o.createComponentVNode)(2,a.Box,{bold:!0,children:(0,o.createVNode)(1,"h3",null,l.occupant,0)})}),(0,o.createComponentVNode)(2,a.Section,{title:"Information",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Integrity",children:(0,o.createComponentVNode)(2,a.ProgressBar,{color:u,value:l.integrity/100})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Status",color:d?"green":"red",children:d?"Functional":"Non-Functional"})]})}),(0,o.createComponentVNode)(2,a.Section,{title:"Laws",children:!!l.has_laws&&(0,o.createComponentVNode)(2,a.Box,{children:l.laws.map((function(e,t){return(0,o.createComponentVNode)(2,a.Box,{display:"inline-block",children:e},t)}))})||(0,o.createComponentVNode)(2,a.Box,{color:"red",children:(0,o.createVNode)(1,"h3",null,"No laws detected.",16)})}),(0,o.createComponentVNode)(2,a.Section,{title:"Actions",children:[(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Wireless Activity",children:(0,o.createComponentVNode)(2,a.Button,{icon:l.wireless?"times":"check",content:l.wireless?"Disabled":"Enabled",color:l.wireless?"red":"green",onClick:function(){return i("wireless")}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Subspace Transceiver",children:(0,o.createComponentVNode)(2,a.Button,{icon:l.radio?"times":"check",content:l.radio?"Disabled":"Enabled",color:l.radio?"red":"green",onClick:function(){return i("radio")}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Start Repairs",children:(0,o.createComponentVNode)(2,a.Button,{icon:"wrench",disabled:s||l.active,content:s?"Already Repaired":"Repair",onClick:function(){return i("fix")}})})]}),(0,o.createComponentVNode)(2,a.Box,{color:"green",lineHeight:2,children:l.active?"Reconstruction in progress.":""})]})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.APC=void 0;var o=n(0),r=n(1),a=n(2),c=n(4),i=n(183);t.APC=function(e,t){return(0,o.createComponentVNode)(2,c.Window,{children:(0,o.createComponentVNode)(2,c.Window.Content,{children:(0,o.createComponentVNode)(2,u)})})};var l={2:{color:"good",externalPowerText:"External Power",chargingText:"Fully Charged"},1:{color:"average",externalPowerText:"Low External Power",chargingText:"Charging"},0:{color:"bad",externalPowerText:"No External Power",chargingText:"Not Charging"}},d={1:{icon:"terminal",content:"Override Programming",action:"hack"},2:{icon:"caret-square-down",content:"Shunt Core Process",action:"occupy"},3:{icon:"caret-square-left",content:"Return to Main Core",action:"deoccupy"},4:{icon:"caret-square-down",content:"Shunt Core Process",action:"occupy"}},u=function(e,t){var n=(0,r.useBackend)(t),c=n.act,u=n.data,s=u.locked&&!u.siliconUser,m=(u.normallyLocked,l[u.externalPower]||l[0]),p=l[u.chargingStatus]||l[0],f=u.powerChannels||[],h=d[u.malfStatus]||d[0],C=u.powerCellStatus/100;return(0,o.createFragment)([(0,o.createComponentVNode)(2,i.InterfaceLockNoticeBox),(0,o.createComponentVNode)(2,a.Section,{title:"Power Status",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Main Breaker",color:m.color,buttons:(0,o.createComponentVNode)(2,a.Button,{icon:u.isOperating?"power-off":"times",content:u.isOperating?"On":"Off",selected:u.isOperating&&!s,color:u.isOperating?"":"bad",disabled:s,onClick:function(){return c("breaker")}}),children:["[ ",m.externalPowerText," ]"]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Power Cell",children:(0,o.createComponentVNode)(2,a.ProgressBar,{color:"good",value:C})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Charge Mode",color:p.color,buttons:(0,o.createComponentVNode)(2,a.Button,{icon:u.chargeMode?"sync":"times",content:u.chargeMode?"Auto":"Off",selected:u.chargeMode,disabled:s,onClick:function(){return c("charge")}}),children:["[ ",p.chargingText," ]"]})]})}),(0,o.createComponentVNode)(2,a.Section,{title:"Power Channels",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[f.map((function(e){var t=e.topicParams;return(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:e.title,buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Box,{inline:!0,mx:2,color:e.status>=2?"good":"bad",children:e.status>=2?"On":"Off"}),(0,o.createComponentVNode)(2,a.Button,{icon:"sync",content:"Auto",selected:!s&&(1===e.status||3===e.status),disabled:s,onClick:function(){return c("channel",t.auto)}}),(0,o.createComponentVNode)(2,a.Button,{icon:"power-off",content:"On",selected:!s&&2===e.status,disabled:s,onClick:function(){return c("channel",t.on)}}),(0,o.createComponentVNode)(2,a.Button,{icon:"times",content:"Off",selected:!s&&0===e.status,disabled:s,onClick:function(){return c("channel",t.off)}})],4),children:[e.powerLoad," W"]},e.title)})),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Total Load",children:(0,o.createVNode)(1,"b",null,[u.totalLoad,(0,o.createTextVNode)(" W")],0)})]})}),(0,o.createComponentVNode)(2,a.Section,{title:"Misc",buttons:!!u.siliconUser&&(0,o.createFragment)([!!u.malfStatus&&(0,o.createComponentVNode)(2,a.Button,{icon:h.icon,content:h.content,color:"bad",onClick:function(){return c(h.action)}}),(0,o.createComponentVNode)(2,a.Button,{icon:"lightbulb-o",content:"Overload",onClick:function(){return c("overload")}})],0),children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Cover Lock",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:u.coverLocked?"lock":"unlock",content:u.coverLocked?"Engaged":"Disengaged",selected:u.coverLocked,disabled:s,onClick:function(){return c("cover")}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Night Shift Lighting",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:"lightbulb-o",content:u.nightshiftLights?"Enabled":"Disabled",selected:u.nightshiftLights,onClick:function(){return c("toggle_nightshift")}})})]})})],4)}},function(e,t,n){"use strict";t.__esModule=!0,t.ATM=void 0;var o=n(0),r=n(1),a=n(2),c=n(4);t.ATM=function(e,t){var n,p=(0,r.useBackend)(t),f=(p.act,p.data),h=f.view_screen,C=f.authenticated_account,N=f.ticks_left_locked_down,b=f.linked_db;if(N>0)n=(0,o.createComponentVNode)(2,a.Box,{bold:!0,color:"bad",children:[(0,o.createComponentVNode)(2,a.Icon,{name:"exclamation-triangle"}),"Maximum number of pin attempts exceeded! Access to this ATM has been temporarily disabled."]});else if(b)if(C)switch(h){case 1:n=(0,o.createComponentVNode)(2,l);break;case 2:n=(0,o.createComponentVNode)(2,d);break;case 3:n=(0,o.createComponentVNode)(2,m);break;default:n=(0,o.createComponentVNode)(2,u)}else n=(0,o.createComponentVNode)(2,s);else n=(0,o.createComponentVNode)(2,a.Box,{bold:!0,color:"bad",children:[(0,o.createComponentVNode)(2,a.Icon,{name:"exclamation-triangle"}),"Unable to connect to accounts database, please retry and if the issue persists contact Nanotrasen IT support."]});return(0,o.createComponentVNode)(2,c.Window,{resizable:!0,children:(0,o.createComponentVNode)(2,c.Window.Content,{scrollable:!0,children:[(0,o.createComponentVNode)(2,i),(0,o.createComponentVNode)(2,a.Section,{children:n})]})})};var i=function(e,t){var n=(0,r.useBackend)(t),c=n.act,i=n.data,l=i.machine_id,d=i.held_card_name;return(0,o.createComponentVNode)(2,a.Section,{title:"Nanotrasen Automatic Teller Machine",children:[(0,o.createComponentVNode)(2,a.Box,{children:"For all your monetary need!"}),(0,o.createComponentVNode)(2,a.Divider),(0,o.createComponentVNode)(2,a.Box,{children:[(0,o.createComponentVNode)(2,a.Icon,{name:"info-circle"})," This terminal is ",(0,o.createVNode)(1,"i",null,l,0),", report this code when contacting Nanotrasen IT Support."]}),(0,o.createComponentVNode)(2,a.Divider),(0,o.createComponentVNode)(2,a.LabeledList,{children:(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Card",children:(0,o.createComponentVNode)(2,a.Button,{content:d,icon:"eject",onClick:function(){return c("insert_card")}})})})]})},l=function(e,t){var n=(0,r.useBackend)(t),c=n.act,i=n.data.security_level;return(0,o.createComponentVNode)(2,a.Section,{title:"Select a new security level for this account",children:[(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.Divider),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Level",children:(0,o.createComponentVNode)(2,a.Button,{content:"Zero",icon:"unlock",selected:0===i,onClick:function(){return c("change_security_level",{new_security_level:0})}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Description",children:"Either the account number or card is required to access this account. EFTPOS transactions will require a card and ask for a pin, but not verify the pin is correct."}),(0,o.createComponentVNode)(2,a.Divider),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Level",children:(0,o.createComponentVNode)(2,a.Button,{content:"One",icon:"unlock",selected:1===i,onClick:function(){return c("change_security_level",{new_security_level:1})}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Description",children:"An account number and pin must be manually entered to access this account and process transactions."}),(0,o.createComponentVNode)(2,a.Divider),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Level",children:(0,o.createComponentVNode)(2,a.Button,{content:"Two",selected:2===i,icon:"unlock",onClick:function(){return c("change_security_level",{new_security_level:2})}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Description",children:"In addition to account number and pin, a card is required to access this account and process transactions."})]}),(0,o.createComponentVNode)(2,a.Divider),(0,o.createComponentVNode)(2,p)]})},d=function(e,t){var n=(0,r.useBackend)(t),c=n.act,i=n.data,l=(0,r.useLocalState)(t,"targetAccNumber",0),d=l[0],u=l[1],s=(0,r.useLocalState)(t,"fundsAmount",0),m=s[0],f=s[1],h=(0,r.useLocalState)(t,"purpose",0),C=h[0],N=h[1],b=i.money;return(0,o.createComponentVNode)(2,a.Section,{title:"Transfer Fund",children:[(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Account Balance",children:["$",b]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Target account number",children:(0,o.createComponentVNode)(2,a.Input,{placeholder:"6 Digit Number",onInput:function(e,t){return u(t)}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Funds to transfer",children:(0,o.createComponentVNode)(2,a.Input,{onInput:function(e,t){return f(t)}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Transaction Purpose",children:(0,o.createComponentVNode)(2,a.Input,{fluid:!0,onInput:function(e,t){return N(t)}})})]}),(0,o.createComponentVNode)(2,a.Divider),(0,o.createComponentVNode)(2,a.Button,{content:"Transfer",icon:"sign-out-alt",onClick:function(){return c("transfer",{target_acc_number:d,funds_amount:m,purpose:C})}}),(0,o.createComponentVNode)(2,a.Divider),(0,o.createComponentVNode)(2,p)]})},u=function(e,t){var n=(0,r.useBackend)(t),c=n.act,i=n.data,l=(0,r.useLocalState)(t,"fundsAmount",0),d=l[0],u=l[1],s=i.owner_name,m=i.money;return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Section,{title:"Welcome, "+s,buttons:(0,o.createComponentVNode)(2,a.Button,{content:"Logout",icon:"sign-out-alt",onClick:function(){return c("logout")}}),children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Account Balance",children:["$",m]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Withdrawal Amount",children:(0,o.createComponentVNode)(2,a.Input,{onInput:function(e,t){return u(t)}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{children:(0,o.createComponentVNode)(2,a.Button,{content:"Withdraw Fund",icon:"sign-out-alt",onClick:function(){return c("withdrawal",{funds_amount:d})}})})]})}),(0,o.createComponentVNode)(2,a.Section,{title:"Menu",children:[(0,o.createComponentVNode)(2,a.Box,{children:(0,o.createComponentVNode)(2,a.Button,{content:"Change account security level",icon:"lock",onClick:function(){return c("view_screen",{view_screen:1})}})}),(0,o.createComponentVNode)(2,a.Box,{children:(0,o.createComponentVNode)(2,a.Button,{content:"Make transfer",icon:"exchange-alt",onClick:function(){return c("view_screen",{view_screen:2})}})}),(0,o.createComponentVNode)(2,a.Box,{children:(0,o.createComponentVNode)(2,a.Button,{content:"View transaction log",icon:"list",onClick:function(){return c("view_screen",{view_screen:3})}})}),(0,o.createComponentVNode)(2,a.Box,{children:(0,o.createComponentVNode)(2,a.Button,{content:"Print balance statement",icon:"print",onClick:function(){return c("balance_statement")}})})]})],4)},s=function(e,t){var n=(0,r.useBackend)(t),c=n.act,i=n.data,l=(0,r.useLocalState)(t,"accountID",null),d=l[0],u=l[1],s=(0,r.useLocalState)(t,"accountPin",null),m=s[0],p=s[1];i.machine_id,i.held_card_name;return(0,o.createComponentVNode)(2,a.Section,{title:"Insert card or enter ID and pin to login",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Account ID",children:(0,o.createComponentVNode)(2,a.Input,{placeholder:"6 Digit Number",onInput:function(e,t){return u(t)}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Pin",children:(0,o.createComponentVNode)(2,a.Input,{placeholder:"6 Digit Number",onInput:function(e,t){return p(t)}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{children:(0,o.createComponentVNode)(2,a.Button,{content:"Login",icon:"sign-in-alt",onClick:function(){return c("attempt_auth",{account_num:d,account_pin:m})}})})]})})},m=function(e,t){var n=(0,r.useBackend)(t),c=(n.act,n.data.transaction_log);return(0,o.createComponentVNode)(2,a.Section,{title:"Transactions",children:[(0,o.createComponentVNode)(2,a.Table,{children:[(0,o.createComponentVNode)(2,a.Table.Row,{header:!0,children:[(0,o.createComponentVNode)(2,a.Table.Cell,{children:"Timestamp"}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:"Target"}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:"Reason"}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:"Value"}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:"Terminal"})]}),c.map((function(e){return(0,o.createComponentVNode)(2,a.Table.Row,{children:[(0,o.createComponentVNode)(2,a.Table.Cell,{p:"1rem",children:[e.date," ",e.time]}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:e.target_name}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:e.purpose}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:["$",e.amount]}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:e.source_terminal})]},e)}))]}),(0,o.createComponentVNode)(2,a.Divider),(0,o.createComponentVNode)(2,p)]})},p=function(e,t){var n=(0,r.useBackend)(t),c=n.act;n.data;return(0,o.createComponentVNode)(2,a.Button,{content:"Back",icon:"sign-out-alt",onClick:function(){return c("view_screen",{view_screen:0})}})}},function(e,t,n){"use strict";t.__esModule=!0,t.AccountsUplinkTerminal=void 0;var o=n(0),r=n(19),a=n(1),c=n(2),i=n(75),l=n(4),d=n(132),u=n(133);t.AccountsUplinkTerminal=function(e,t){var n,r=(0,a.useBackend)(t),c=(r.act,r.data),i=c.loginState,m=c.currentPage;return i.logged_in?(1===m?n=(0,o.createComponentVNode)(2,s):2===m?n=(0,o.createComponentVNode)(2,f):3===m&&(n=(0,o.createComponentVNode)(2,h)),(0,o.createComponentVNode)(2,l.Window,{resizable:!0,children:(0,o.createComponentVNode)(2,l.Window.Content,{scrollable:!0,children:[(0,o.createComponentVNode)(2,d.LoginInfo),n]})})):(0,o.createComponentVNode)(2,l.Window,{resizable:!0,children:(0,o.createComponentVNode)(2,l.Window.Content,{children:(0,o.createComponentVNode)(2,u.LoginScreen)})})};var s=function(e,t){var n=(0,a.useBackend)(t),i=n.act,l=n.data.accounts,d=(0,a.useLocalState)(t,"searchText",""),u=d[0],s=(d[1],(0,a.useLocalState)(t,"sortId","owner_name")),f=s[0],h=(s[1],(0,a.useLocalState)(t,"sortOrder",!0)),C=h[0];h[1];return(0,o.createComponentVNode)(2,c.Flex,{direction:"column",height:"100%",children:[(0,o.createComponentVNode)(2,p),(0,o.createComponentVNode)(2,c.Flex.Item,{flexGrow:"1",mt:"0.5rem",children:(0,o.createComponentVNode)(2,c.Section,{height:"100%",children:(0,o.createComponentVNode)(2,c.Table,{className:"AccountsUplinkTerminal__list",children:[(0,o.createComponentVNode)(2,c.Table.Row,{bold:!0,children:[(0,o.createComponentVNode)(2,m,{id:"owner_name",children:"Account Holder"}),(0,o.createComponentVNode)(2,m,{id:"account_number",children:"Account Number"}),(0,o.createComponentVNode)(2,m,{id:"suspended",children:"Account Status"})]}),l.filter((0,r.createSearch)(u,(function(e){return e.owner_name+"|"+e.account_number+"|"+e.suspended}))).sort((function(e,t){var n=C?1:-1;return e[f].localeCompare(t[f])*n})).map((function(e){return(0,o.createComponentVNode)(2,c.Table.Row,{onClick:function(){return i("view_account_detail",{index:e.account_index})},children:[(0,o.createComponentVNode)(2,c.Table.Cell,{children:[(0,o.createComponentVNode)(2,c.Icon,{name:"user"})," ",e.owner_name]}),(0,o.createComponentVNode)(2,c.Table.Cell,{children:["#",e.account_number]}),(0,o.createComponentVNode)(2,c.Table.Cell,{children:e.suspended})]},e.id)}))]})})})]})},m=function(e,t){var n=(0,a.useLocalState)(t,"sortId","name"),r=n[0],i=n[1],l=(0,a.useLocalState)(t,"sortOrder",!0),d=l[0],u=l[1],s=e.id,m=e.children;return(0,o.createComponentVNode)(2,c.Table.Cell,{children:(0,o.createComponentVNode)(2,c.Button,{color:r!==s&&"transparent",width:"100%",onClick:function(){r===s?u(!d):(i(s),u(!0))},children:[m,r===s&&(0,o.createComponentVNode)(2,c.Icon,{name:d?"sort-up":"sort-down",ml:"0.25rem;"})]})})},p=function(e,t){var n=(0,a.useBackend)(t),r=n.act,l=n.data.is_printing,d=(0,a.useLocalState)(t,"searchText",""),u=(d[0],d[1]);return(0,o.createComponentVNode)(2,c.Flex,{children:[(0,o.createComponentVNode)(2,i.FlexItem,{children:[(0,o.createComponentVNode)(2,c.Button,{content:"New Account",icon:"plus",onClick:function(){return r("create_new_account")}}),(0,o.createComponentVNode)(2,c.Button,{icon:"print",content:"Print Account List",disabled:l,ml:"0.25rem",onClick:function(){return r("print_records")}})]}),(0,o.createComponentVNode)(2,i.FlexItem,{grow:"1",ml:"0.5rem",children:(0,o.createComponentVNode)(2,c.Input,{placeholder:"Search by account holder, number, status",width:"100%",onInput:function(e,t){return u(t)}})})]})},f=function(e,t){var n=(0,a.useBackend)(t),r=n.act,i=n.data,l=i.is_printing,d=i.account_number,u=i.owner_name,s=i.money,m=i.suspended,p=i.transactions;return(0,o.createFragment)([(0,o.createComponentVNode)(2,c.Section,{title:"#"+d+" / "+u,mt:1,buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,c.Button,{icon:"print",content:"Print Account Details",disabled:l,onClick:function(){return r("print_account_details")}}),(0,o.createComponentVNode)(2,c.Button,{icon:"arrow-left",content:"Back",onClick:function(){return r("back")}})],4),children:(0,o.createComponentVNode)(2,c.LabeledList,{children:[(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Account Number",children:["#",d]}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Account Holder",children:u}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Account Balance",children:s}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Account Status",color:m?"red":"green",children:[m?"Suspended":"Active",(0,o.createComponentVNode)(2,c.Button,{ml:1,content:m?"Unsuspend":"Suspend",icon:m?"unlock":"lock",onClick:function(){return r("toggle_suspension")}})]})]})}),(0,o.createComponentVNode)(2,c.Section,{title:"Transactions",children:(0,o.createComponentVNode)(2,c.Table,{children:[(0,o.createComponentVNode)(2,c.Table.Row,{header:!0,children:[(0,o.createComponentVNode)(2,c.Table.Cell,{children:"Timestamp"}),(0,o.createComponentVNode)(2,c.Table.Cell,{children:"Target"}),(0,o.createComponentVNode)(2,c.Table.Cell,{children:"Reason"}),(0,o.createComponentVNode)(2,c.Table.Cell,{children:"Value"}),(0,o.createComponentVNode)(2,c.Table.Cell,{children:"Terminal"})]}),p.map((function(e){return(0,o.createComponentVNode)(2,c.Table.Row,{children:[(0,o.createComponentVNode)(2,c.Table.Cell,{children:[e.date," ",e.time]}),(0,o.createComponentVNode)(2,c.Table.Cell,{children:e.target_name}),(0,o.createComponentVNode)(2,c.Table.Cell,{children:e.purpose}),(0,o.createComponentVNode)(2,c.Table.Cell,{children:["$",e.amount]}),(0,o.createComponentVNode)(2,c.Table.Cell,{children:e.source_terminal})]},e)}))]})})],4)},h=function(e,t){var n=(0,a.useBackend)(t),r=n.act,i=(n.data,(0,a.useLocalState)(t,"accName","")),l=i[0],d=i[1],u=(0,a.useLocalState)(t,"accDeposit",""),s=u[0],m=u[1];return(0,o.createComponentVNode)(2,c.Section,{title:"Create Account",buttons:(0,o.createComponentVNode)(2,c.Button,{icon:"arrow-left",content:"Back",onClick:function(){return r("back")}}),children:[(0,o.createComponentVNode)(2,c.LabeledList,{children:[(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Account Holder",children:(0,o.createComponentVNode)(2,c.Input,{placeholder:"Name Here",onChange:function(e,t){return d(t)}})}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Initial Deposit",children:(0,o.createComponentVNode)(2,c.Input,{placeholder:"0",onChange:function(e,t){return m(t)}})})]}),(0,o.createComponentVNode)(2,c.Button,{mt:1,fluid:!0,content:"Create Account",onClick:function(){return r("finalise_create_account",{holder_name:l,starting_funds:s})}})]})}},function(e,t,n){"use strict";t.__esModule=!0,t.AiAirlock=void 0;var o=n(0),r=n(1),a=n(2),c=n(4),i={2:{color:"good",localStatusText:"Offline"},1:{color:"average",localStatusText:"Caution"},0:{color:"bad",localStatusText:"Optimal"}};t.AiAirlock=function(e,t){var n=(0,r.useBackend)(t),l=n.act,d=n.data,u=i[d.power.main]||i[0],s=i[d.power.backup]||i[0],m=i[d.shock]||i[0];return(0,o.createComponentVNode)(2,c.Window,{width:500,height:390,children:(0,o.createComponentVNode)(2,c.Window.Content,{children:[(0,o.createComponentVNode)(2,a.Section,{title:"Power Status",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Main",color:u.color,buttons:(0,o.createComponentVNode)(2,a.Button,{icon:"lightbulb-o",disabled:!d.power.main,content:"Disrupt",onClick:function(){return l("disrupt-main")}}),children:[d.power.main?"Online":"Offline"," ",d.wires.main_power?d.power.main_timeleft>0&&"["+d.power.main_timeleft+"s]":"[Wires have been cut!]"]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Backup",color:s.color,buttons:(0,o.createComponentVNode)(2,a.Button,{icon:"lightbulb-o",disabled:!d.power.backup,content:"Disrupt",onClick:function(){return l("disrupt-backup")}}),children:[d.power.backup?"Online":"Offline"," ",d.wires.backup_power?d.power.backup_timeleft>0&&"["+d.power.backup_timeleft+"s]":"[Wires have been cut!]"]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Electrify",color:m.color,buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Button,{icon:"wrench",disabled:!(d.wires.shock&&2!==d.shock),content:"Restore",onClick:function(){return l("shock-restore")}}),(0,o.createComponentVNode)(2,a.Button,{icon:"bolt",disabled:!d.wires.shock,content:"Temporary",onClick:function(){return l("shock-temp")}}),(0,o.createComponentVNode)(2,a.Button,{icon:"bolt",disabled:!d.wires.shock||0===d.shock,content:"Permanent",onClick:function(){return l("shock-perm")}})],4),children:[2===d.shock?"Safe":"Electrified"," ",(d.wires.shock?d.shock_timeleft>0&&"["+d.shock_timeleft+"s]":"[Wires have been cut!]")||-1===d.shock_timeleft&&"[Permanent]"]})]})}),(0,o.createComponentVNode)(2,a.Section,{title:"Access and Door Control",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"ID Scan",color:"bad",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:d.id_scanner?"power-off":"times",content:d.id_scanner?"Enabled":"Disabled",selected:d.id_scanner,disabled:!d.wires.id_scanner,onClick:function(){return l("idscan-toggle")}}),children:!d.wires.id_scanner&&"[Wires have been cut!]"}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Emergency Access",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:d.emergency?"power-off":"times",content:d.emergency?"Enabled":"Disabled",selected:d.emergency,onClick:function(){return l("emergency-toggle")}})}),(0,o.createComponentVNode)(2,a.LabeledList.Divider),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Door Bolts",color:"bad",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:d.locked?"lock":"unlock",content:d.locked?"Lowered":"Raised",selected:d.locked,disabled:!d.wires.bolts,onClick:function(){return l("bolt-toggle")}}),children:!d.wires.bolts&&"[Wires have been cut!]"}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Door Bolt Lights",color:"bad",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:d.lights?"power-off":"times",content:d.lights?"Enabled":"Disabled",selected:d.lights,disabled:!d.wires.lights,onClick:function(){return l("light-toggle")}}),children:!d.wires.lights&&"[Wires have been cut!]"}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Door Force Sensors",color:"bad",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:d.safe?"power-off":"times",content:d.safe?"Enabled":"Disabled",selected:d.safe,disabled:!d.wires.safe,onClick:function(){return l("safe-toggle")}}),children:!d.wires.safe&&"[Wires have been cut!]"}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Door Timing Safety",color:"bad",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:d.speed?"power-off":"times",content:d.speed?"Enabled":"Disabled",selected:d.speed,disabled:!d.wires.timing,onClick:function(){return l("speed-toggle")}}),children:!d.wires.timing&&"[Wires have been cut!]"}),(0,o.createComponentVNode)(2,a.LabeledList.Divider),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Door Control",color:"bad",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:d.opened?"sign-out-alt":"sign-in-alt",content:d.opened?"Open":"Closed",selected:d.opened,disabled:d.locked||d.welded,onClick:function(){return l("open-close")}}),children:!(!d.locked&&!d.welded)&&(0,o.createVNode)(1,"span",null,[(0,o.createTextVNode)("[Door is "),d.locked?"bolted":"",d.locked&&d.welded?" and ":"",d.welded?"welded":"",(0,o.createTextVNode)("!]")],0)})]})})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.AirAlarm=void 0;var o=n(0),r=n(1),a=n(2),c=n(4),i=n(183);t.AirAlarm=function(e,t){var n=(0,r.useBackend)(t),a=(n.act,n.data.locked);return(0,o.createComponentVNode)(2,c.Window,{resizable:!0,children:(0,o.createComponentVNode)(2,c.Window.Content,{scrollable:!0,children:[(0,o.createComponentVNode)(2,d),(0,o.createComponentVNode)(2,i.InterfaceLockNoticeBox),!a&&(0,o.createFragment)([(0,o.createComponentVNode)(2,u),(0,o.createComponentVNode)(2,s)],4)]})})};var l=function(e){return 0===e?"green":1===e?"orange":"red"},d=function(e,t){var n,c=(0,r.useBackend)(t),i=c.act,d=c.data,u=d.air,s=d.mode,m=d.atmos_alarm,p=d.locked,f=d.alarmActivated,h=d.rcon,C=d.target_temp;return n=0===u.danger.overall?0===m?"Optimal":"Caution: Atmos alert in area":1===u.danger.overall?"Caution":"DANGER: Internals Required",(0,o.createComponentVNode)(2,a.Section,{title:"Air Status",children:u?(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Pressure",children:(0,o.createComponentVNode)(2,a.Box,{color:l(u.danger.pressure),children:[(0,o.createComponentVNode)(2,a.AnimatedNumber,{value:u.pressure})," kPa",!p&&(0,o.createFragment)([(0,o.createTextVNode)("\xa0"),(0,o.createComponentVNode)(2,a.Button,{content:3===s?"Deactivate Panic Siphon":"Activate Panic Siphon",selected:3===s,icon:"exclamation-triangle",onClick:function(){return i("mode",{mode:3===s?1:3})}})],4)]})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Oxygen",children:(0,o.createComponentVNode)(2,a.ProgressBar,{value:u.contents.oxygen/100,color:l(u.danger.oxygen)})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Nitrogen",children:(0,o.createComponentVNode)(2,a.ProgressBar,{value:u.contents.nitrogen/100,color:l(u.danger.nitrogen)})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Carbon Dioxide",children:(0,o.createComponentVNode)(2,a.ProgressBar,{value:u.contents.co2/100,color:l(u.danger.co2)})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Toxins",children:(0,o.createComponentVNode)(2,a.ProgressBar,{value:u.contents.plasma/100,color:l(u.danger.plasma)})}),u.contents.other>0&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Other",children:(0,o.createComponentVNode)(2,a.ProgressBar,{value:u.contents.other/100,color:l(u.danger.other)})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Temperature",children:(0,o.createComponentVNode)(2,a.Box,{color:l(u.danger.temperature),children:[(0,o.createComponentVNode)(2,a.AnimatedNumber,{value:u.temperature})," K / ",(0,o.createComponentVNode)(2,a.AnimatedNumber,{value:u.temperature_c})," C\xa0",(0,o.createComponentVNode)(2,a.Button,{icon:"thermometer-full",content:C+" C",onClick:function(){return i("temperature")}}),(0,o.createComponentVNode)(2,a.Button,{content:u.thermostat_state?"On":"Off",selected:u.thermostat_state,icon:"power-off",onClick:function(){return i("thermostat_state")}})]})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Local Status",children:(0,o.createComponentVNode)(2,a.Box,{color:l(u.danger.overall),children:[n,!p&&(0,o.createFragment)([(0,o.createTextVNode)("\xa0"),(0,o.createComponentVNode)(2,a.Button,{content:f?"Reset Alarm":"Activate Alarm",selected:f,onClick:function(){return i(f?"atmos_reset":"atmos_alarm")}})],4)]})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Remote Control Settings",children:[(0,o.createComponentVNode)(2,a.Button,{content:"Off",selected:1===h,onClick:function(){return i("set_rcon",{rcon:1})}}),(0,o.createComponentVNode)(2,a.Button,{content:"Auto",selected:2===h,onClick:function(){return i("set_rcon",{rcon:2})}}),(0,o.createComponentVNode)(2,a.Button,{content:"On",selected:3===h,onClick:function(){return i("set_rcon",{rcon:3})}})]})]}):(0,o.createComponentVNode)(2,a.Box,{children:"Unable to acquire air sample!"})})},u=function(e,t){var n=(0,r.useLocalState)(t,"tabIndex",0),c=n[0],i=n[1];return(0,o.createComponentVNode)(2,a.Tabs,{children:[(0,o.createComponentVNode)(2,a.Tabs.Tab,{selected:0===c,onClick:function(){return i(0)},children:[(0,o.createComponentVNode)(2,a.Icon,{name:"sign-out-alt"})," Vent Control"]},"Vents"),(0,o.createComponentVNode)(2,a.Tabs.Tab,{selected:1===c,onClick:function(){return i(1)},children:[(0,o.createComponentVNode)(2,a.Icon,{name:"sign-in-alt"})," Scrubber Control"]},"Scrubbers"),(0,o.createComponentVNode)(2,a.Tabs.Tab,{selected:2===c,onClick:function(){return i(2)},children:[(0,o.createComponentVNode)(2,a.Icon,{name:"cog"})," Mode"]},"Mode"),(0,o.createComponentVNode)(2,a.Tabs.Tab,{selected:3===c,onClick:function(){return i(3)},children:[(0,o.createComponentVNode)(2,a.Icon,{name:"tachometer-alt"})," Thresholds"]},"Thresholds")]})},s=function(e,t){var n=(0,r.useLocalState)(t,"tabIndex",0),a=n[0];n[1];switch(a){case 0:return(0,o.createComponentVNode)(2,m);case 1:return(0,o.createComponentVNode)(2,p);case 2:return(0,o.createComponentVNode)(2,f);case 3:return(0,o.createComponentVNode)(2,h);default:return"WE SHOULDN'T BE HERE!"}},m=function(e,t){var n=(0,r.useBackend)(t),c=n.act;return n.data.vents.map((function(e){return(0,o.createComponentVNode)(2,a.Section,{title:e.name,children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Status",children:[(0,o.createComponentVNode)(2,a.Button,{content:e.power?"On":"Off",selected:e.power,icon:"power-off",onClick:function(){return c("command",{cmd:"power",val:1===e.power?0:1,id_tag:e.id_tag})}}),(0,o.createComponentVNode)(2,a.Button,{content:"release"===e.direction?"Blowing":"Siphoning",icon:"release"===e.direction?"sign-out-alt":"sign-in-alt",onClick:function(){return c("command",{cmd:"direction",val:"release"===e.direction?0:1,id_tag:e.id_tag})}})]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Pressure Checks",children:[(0,o.createComponentVNode)(2,a.Button,{content:"External",selected:1===e.checks,onClick:function(){return c("command",{cmd:"checks",val:1,id_tag:e.id_tag})}}),(0,o.createComponentVNode)(2,a.Button,{content:"Internal",selected:2===e.checks,onClick:function(){return c("command",{cmd:"checks",val:2,id_tag:e.id_tag})}})]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"External Pressure Target",children:[(0,o.createComponentVNode)(2,a.AnimatedNumber,{value:e.external})," kPa\xa0",(0,o.createComponentVNode)(2,a.Button,{content:"Set",icon:"cog",onClick:function(){return c("command",{cmd:"set_external_pressure",id_tag:e.id_tag})}}),(0,o.createComponentVNode)(2,a.Button,{content:"Reset",icon:"redo-alt",onClick:function(){return c("command",{cmd:"set_external_pressure",val:101.325,id_tag:e.id_tag})}})]})]})},e.name)}))},p=function(e,t){var n=(0,r.useBackend)(t),c=n.act;return n.data.scrubbers.map((function(e){return(0,o.createComponentVNode)(2,a.Section,{title:e.name,children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Status",children:[(0,o.createComponentVNode)(2,a.Button,{content:e.power?"On":"Off",selected:e.power,icon:"power-off",onClick:function(){return c("command",{cmd:"power",val:1===e.power?0:1,id_tag:e.id_tag})}}),(0,o.createComponentVNode)(2,a.Button,{content:0===e.scrubbing?"Siphoning":"Scrubbing",icon:0===e.scrubbing?"sign-in-alt":"filter",onClick:function(){return c("command",{cmd:"scrubbing",val:0===e.scrubbing?1:0,id_tag:e.id_tag})}})]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Range",children:(0,o.createComponentVNode)(2,a.Button,{content:e.widenet?"Extended":"Normal",selected:e.widenet,icon:"expand-arrows-alt",onClick:function(){return c("command",{cmd:"widenet",val:0===e.widenet?1:0,id_tag:e.id_tag})}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Filtering",children:[(0,o.createComponentVNode)(2,a.Button,{content:"Carbon Dioxide",selected:e.filter_co2,onClick:function(){return c("command",{cmd:"co2_scrub",val:0===e.filter_co2?1:0,id_tag:e.id_tag})}}),(0,o.createComponentVNode)(2,a.Button,{content:"Plasma",selected:e.filter_toxins,onClick:function(){return c("command",{cmd:"tox_scrub",val:0===e.filter_toxins?1:0,id_tag:e.id_tag})}}),(0,o.createComponentVNode)(2,a.Button,{content:"Nitrous Oxide",selected:e.filter_n2o,onClick:function(){return c("command",{cmd:"n2o_scrub",val:0===e.filter_n2o?1:0,id_tag:e.id_tag})}}),(0,o.createComponentVNode)(2,a.Button,{content:"Oxygen",selected:e.filter_o2,onClick:function(){return c("command",{cmd:"o2_scrub",val:0===e.filter_o2?1:0,id_tag:e.id_tag})}}),(0,o.createComponentVNode)(2,a.Button,{content:"Nitrogen",selected:e.filter_n2,onClick:function(){return c("command",{cmd:"n2_scrub",val:0===e.filter_n2?1:0,id_tag:e.id_tag})}})]})]})},e.name)}))},f=function(e,t){var n=(0,r.useBackend)(t),c=n.act,i=n.data,l=i.modes,d=i.presets,u=i.emagged,s=i.mode,m=i.preset;return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Section,{title:"System Mode",children:(0,o.createComponentVNode)(2,a.Table,{children:l.map((function(e){return(!e.emagonly||e.emagonly&&!!u)&&(0,o.createComponentVNode)(2,a.Table.Row,{children:[(0,o.createComponentVNode)(2,a.Table.Cell,{textAlign:"right",width:1,children:(0,o.createComponentVNode)(2,a.Button,{content:e.name,icon:"cog",selected:e.id===s,onClick:function(){return c("mode",{mode:e.id})}})}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:e.desc})]},e.name)}))})}),(0,o.createComponentVNode)(2,a.Section,{title:"System Presets",children:[(0,o.createComponentVNode)(2,a.Box,{italic:!0,children:"After making a selection, the system will automatically cycle in order to remove contaminants."}),(0,o.createComponentVNode)(2,a.Table,{mt:1,children:d.map((function(e){return(0,o.createComponentVNode)(2,a.Table.Row,{children:[(0,o.createComponentVNode)(2,a.Table.Cell,{textAlign:"right",width:1,children:(0,o.createComponentVNode)(2,a.Button,{content:e.name,icon:"cog",selected:e.id===m,onClick:function(){return c("preset",{preset:e.id})}})}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:e.desc})]},e.name)}))})]})],4)},h=function(e,t){var n=(0,r.useBackend)(t),c=n.act,i=n.data.thresholds;return(0,o.createComponentVNode)(2,a.Section,{title:"Alarm Thresholds",children:(0,o.createComponentVNode)(2,a.Table,{children:[(0,o.createComponentVNode)(2,a.Table.Row,{header:!0,children:[(0,o.createComponentVNode)(2,a.Table.Cell,{width:"20%",children:"Value"}),(0,o.createComponentVNode)(2,a.Table.Cell,{color:"red",width:"20%",children:"Danger Min"}),(0,o.createComponentVNode)(2,a.Table.Cell,{color:"orange",width:"20%",children:"Warning Min"}),(0,o.createComponentVNode)(2,a.Table.Cell,{color:"orange",width:"20%",children:"Warning Max"}),(0,o.createComponentVNode)(2,a.Table.Cell,{color:"red",width:"20%",children:"Danger Max"})]}),i.map((function(e){return(0,o.createComponentVNode)(2,a.Table.Row,{children:[(0,o.createComponentVNode)(2,a.Table.Cell,{children:e.name}),e.settings.map((function(e){return(0,o.createComponentVNode)(2,a.Table.Cell,{children:(0,o.createComponentVNode)(2,a.Button,{content:-1===e.selected?"Off":e.selected,onClick:function(){return c("command",{cmd:"set_threshold",env:e.env,"var":e.val})}})},e.val)}))]},e.name)}))]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.AirlockAccessController=void 0;var o=n(0),r=n(1),a=n(2),c=n(4);t.AirlockAccessController=function(e,t){var n,i,l=(0,r.useBackend)(t),d=l.act,u=l.data,s=u.exterior_status,m=u.interior_status,p=u.processing;return n="open"===u.exterior_status.state?(0,o.createComponentVNode)(2,a.Button,{content:"Lock Exterior Door",icon:"exclamation-triangle",disabled:p,onClick:function(){return d("force_ext")}}):(0,o.createComponentVNode)(2,a.Button,{content:"Cycle to Exterior",icon:"arrow-circle-left",disabled:p,onClick:function(){return d("cycle_ext_door")}}),i="open"===u.interior_status.state?(0,o.createComponentVNode)(2,a.Button,{content:"Lock Interior Door",icon:"exclamation-triangle",disabled:p,color:"open"===m?"red":p?"yellow":null,onClick:function(){return d("force_int")}}):(0,o.createComponentVNode)(2,a.Button,{content:"Cycle to Interior",icon:"arrow-circle-right",disabled:p,onClick:function(){return d("cycle_int_door")}}),(0,o.createComponentVNode)(2,c.Window,{children:(0,o.createComponentVNode)(2,c.Window.Content,{children:[(0,o.createComponentVNode)(2,a.Section,{title:"Information",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"External Door Status",children:"closed"===s.state?"Locked":"Open"}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Internal Door Status",children:"closed"===m.state?"Locked":"Open"})]})}),(0,o.createComponentVNode)(2,a.Section,{title:"Actions",children:[(0,o.createComponentVNode)(2,a.Box,{children:n}),(0,o.createComponentVNode)(2,a.Box,{children:i})]})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.AirlockElectronics=void 0;var o=n(0),r=n(1),a=n(2),c=n(4),i=n(78);t.AirlockElectronics=function(e,t){return(0,o.createComponentVNode)(2,c.Window,{resizable:!0,children:[(0,o.createComponentVNode)(2,l),(0,o.createComponentVNode)(2,a.Divider),(0,o.createComponentVNode)(2,d)]})};var l=function(e,t){var n=(0,r.useBackend)(t),c=n.act,i=n.data.unrestricted_dir;return(0,o.createComponentVNode)(2,a.Section,{title:"Access Control",children:(0,o.createComponentVNode)(2,a.Flex,{direction:"column",children:[(0,o.createComponentVNode)(2,a.Flex.Item,{bold:!0,mb:1,children:"Unrestricted Access From:"}),(0,o.createComponentVNode)(2,a.Grid,{children:[(0,o.createComponentVNode)(2,a.Grid.Column,{children:(0,o.createComponentVNode)(2,a.Button,{fluid:!0,textAlign:"center",icon:"arrow-down",content:"North",selected:"north"===i?"selected":null,onClick:function(){return c("unrestricted_access",{unres_dir:"North"})}})}),(0,o.createComponentVNode)(2,a.Grid.Column,{children:(0,o.createComponentVNode)(2,a.Button,{fluid:!0,textAlign:"center",icon:"arrow-up",content:"South",selected:"south"===i?"selected":null,onClick:function(){return c("unrestricted_access",{unres_dir:"South"})}})}),(0,o.createComponentVNode)(2,a.Grid.Column,{children:(0,o.createComponentVNode)(2,a.Button,{fluid:!0,textAlign:"center",icon:"arrow-left",content:"East",selected:"east"===i?"selected":null,onClick:function(){return c("unrestricted_access",{unres_dir:"East"})}})}),(0,o.createComponentVNode)(2,a.Grid.Column,{children:(0,o.createComponentVNode)(2,a.Button,{fluid:!0,textAlign:"center",icon:"arrow-right",content:"West",selected:"west"===i?"selected":null,onClick:function(){return c("unrestricted_access",{unres_dir:"West"})}})})]})]})})},d=function(e,t){var n=(0,r.useBackend)(t),c=n.act,l=n.data,d=l.selected_accesses,u=l.one_access,s=l.regions;return(0,o.createComponentVNode)(2,i.AccessList,{usedByRcd:1,rcdButtons:(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Button.Checkbox,{checked:u,content:"One",onClick:function(){return c("set_one_access",{access:"one"})}}),(0,o.createComponentVNode)(2,a.Button.Checkbox,{checked:!u,content:"All",onClick:function(){return c("set_one_access",{access:"all"})}})],4),accesses:s,selectedList:d,accessMod:function(e){return c("set",{access:e})},grantAll:function(){return c("grant_all")},denyAll:function(){return c("clear_all")},grantDep:function(e){return c("grant_region",{region:e})},denyDep:function(e){return c("deny_region",{region:e})}})}},function(e,t,n){"use strict";t.__esModule=!0,t.AppearanceChanger=void 0;var o=n(0),r=n(1),a=n(2),c=n(4);t.AppearanceChanger=function(e,t){var n=(0,r.useBackend)(t),l=n.act,d=n.data,u=d.change_race,s=d.species,m=d.specimen,p=d.change_gender,f=d.gender,h=d.has_gender,C=d.change_eye_color,N=d.change_skin_tone,b=d.change_skin_color,g=d.change_head_accessory_color,V=d.change_hair_color,v=d.change_secondary_hair_color,y=d.change_facial_hair_color,_=d.change_secondary_facial_hair_color,x=d.change_head_marking_color,k=d.change_body_marking_color,L=d.change_tail_marking_color,B=d.change_head_accessory,w=d.head_accessory_styles,S=d.head_accessory_style,I=d.change_hair,T=d.hair_styles,A=d.hair_style,E=d.change_facial_hair,M=d.facial_hair_styles,O=d.facial_hair_style,P=d.change_head_markings,R=d.head_marking_styles,D=d.head_marking_style,F=d.change_body_markings,j=d.body_marking_styles,W=d.body_marking_style,z=d.change_tail_markings,U=d.tail_marking_styles,H=d.tail_marking_style,K=d.change_body_accessory,G=d.body_accessory_styles,Y=d.body_accessory_style,q=d.change_alt_head,$=d.alt_head_styles,X=d.alt_head_style,J=!1;return(C||N||b||g||V||v||y||_||x||k||L)&&(J=!0),(0,o.createComponentVNode)(2,c.Window,{children:(0,o.createComponentVNode)(2,c.Window.Content,{scrollable:!0,children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[!!u&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Species",children:s.map((function(e){return(0,o.createComponentVNode)(2,a.Button,{content:e.specimen,selected:e.specimen===m,onClick:function(){return l("race",{race:e.specimen})}},e.specimen)}))}),!!p&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Gender",children:[(0,o.createComponentVNode)(2,a.Button,{content:"Male",selected:"male"===f,onClick:function(){return l("gender",{gender:"male"})}}),(0,o.createComponentVNode)(2,a.Button,{content:"Female",selected:"female"===f,onClick:function(){return l("gender",{gender:"female"})}}),!h&&(0,o.createComponentVNode)(2,a.Button,{content:"Genderless",selected:"plural"===f,onClick:function(){return l("gender",{gender:"plural"})}})]}),!!J&&(0,o.createComponentVNode)(2,i),!!B&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Head accessory",children:w.map((function(e){return(0,o.createComponentVNode)(2,a.Button,{content:e.headaccessorystyle,selected:e.headaccessorystyle===S,onClick:function(){return l("head_accessory",{head_accessory:e.headaccessorystyle})}},e.headaccessorystyle)}))}),!!I&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Hair",children:T.map((function(e){return(0,o.createComponentVNode)(2,a.Button,{content:e.hairstyle,selected:e.hairstyle===A,onClick:function(){return l("hair",{hair:e.hairstyle})}},e.hairstyle)}))}),!!E&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Facial hair",children:M.map((function(e){return(0,o.createComponentVNode)(2,a.Button,{content:e.facialhairstyle,selected:e.facialhairstyle===O,onClick:function(){return l("facial_hair",{facial_hair:e.facialhairstyle})}},e.facialhairstyle)}))}),!!P&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Head markings",children:R.map((function(e){return(0,o.createComponentVNode)(2,a.Button,{content:e.headmarkingstyle,selected:e.headmarkingstyle===D,onClick:function(){return l("head_marking",{head_marking:e.headmarkingstyle})}},e.headmarkingstyle)}))}),!!F&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Body markings",children:j.map((function(e){return(0,o.createComponentVNode)(2,a.Button,{content:e.bodymarkingstyle,selected:e.bodymarkingstyle===W,onClick:function(){return l("body_marking",{body_marking:e.bodymarkingstyle})}},e.bodymarkingstyle)}))}),!!z&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Tail markings",children:U.map((function(e){return(0,o.createComponentVNode)(2,a.Button,{content:e.tailmarkingstyle,selected:e.tailmarkingstyle===H,onClick:function(){return l("tail_marking",{tail_marking:e.tailmarkingstyle})}},e.tailmarkingstyle)}))}),!!K&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Body accessory",children:G.map((function(e){return(0,o.createComponentVNode)(2,a.Button,{content:e.bodyaccessorystyle,selected:e.bodyaccessorystyle===Y,onClick:function(){return l("body_accessory",{body_accessory:e.bodyaccessorystyle})}},e.bodyaccessorystyle)}))}),!!q&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Alternate head",children:$.map((function(e){return(0,o.createComponentVNode)(2,a.Button,{content:e.altheadstyle,selected:e.altheadstyle===X,onClick:function(){return l("alt_head",{alt_head:e.altheadstyle})}},e.altheadstyle)}))})]})})})};var i=function(e,t){var n=(0,r.useBackend)(t),c=n.act,i=n.data;return(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Colors",children:[{key:"change_eye_color",text:"Change eye color",action:"eye_color"},{key:"change_skin_tone",text:"Change skin tone",action:"skin_tone"},{key:"change_skin_color",text:"Change skin color",action:"skin_color"},{key:"change_head_accessory_color",text:"Change head accessory color",action:"head_accessory_color"},{key:"change_hair_color",text:"Change hair color",action:"hair_color"},{key:"change_secondary_hair_color",text:"Change secondary hair color",action:"secondary_hair_color"},{key:"change_facial_hair_color",text:"Change facial hair color",action:"facial_hair_color"},{key:"change_secondary_facial_hair_color",text:"Change secondary facial hair color",action:"secondary_facial_hair_color"},{key:"change_head_marking_color",text:"Change head marking color",action:"head_marking_color"},{key:"change_body_marking_color",text:"Change body marking color",action:"body_marking_color"},{key:"change_tail_marking_color",text:"Change tail marking color",action:"tail_marking_color"}].map((function(e){return!!i[e.key]&&(0,o.createComponentVNode)(2,a.Button,{content:e.text,onClick:function(){return c(e.action)}})}))})}},function(e,t,n){"use strict";t.__esModule=!0,t.AtmosAlertConsole=void 0;var o=n(0),r=n(1),a=n(2),c=n(4);t.AtmosAlertConsole=function(e,t){var n=(0,r.useBackend)(t),i=n.act,l=n.data,d=l.priority||[],u=l.minor||[];return(0,o.createComponentVNode)(2,c.Window,{resizable:!0,children:(0,o.createComponentVNode)(2,c.Window.Content,{scrollable:!0,children:(0,o.createComponentVNode)(2,a.Section,{title:"Alarms",children:(0,o.createVNode)(1,"ul",null,[0===d.length&&(0,o.createVNode)(1,"li","color-good","No Priority Alerts",16),d.map((function(e){return(0,o.createVNode)(1,"li",null,(0,o.createComponentVNode)(2,a.Button,{icon:"times",content:e,color:"bad",onClick:function(){return i("clear",{zone:e})}}),2,null,e)})),0===u.length&&(0,o.createVNode)(1,"li","color-good","No Minor Alerts",16),u.map((function(e){return(0,o.createVNode)(1,"li",null,(0,o.createComponentVNode)(2,a.Button,{icon:"times",content:e,color:"average",onClick:function(){return i("clear",{zone:e})}}),2,null,e)}))],0)})})})}},function(e,t,n){"use strict";t.__esModule=!0,t.AtmosControl=void 0;var o=n(0),r=n(1),a=n(2),c=n(76),i=n(4);t.AtmosControl=function(e,t){var n=(0,r.useBackend)(t),c=(n.act,n.data,(0,r.useLocalState)(t,"tabIndex",0)),u=c[0],s=c[1];return(0,o.createComponentVNode)(2,i.Window,{resizable:!0,children:(0,o.createComponentVNode)(2,i.Window.Content,{scrollable:0===u,children:(0,o.createComponentVNode)(2,a.Box,{fillPositionedParent:!0,children:[(0,o.createComponentVNode)(2,a.Tabs,{children:[(0,o.createComponentVNode)(2,a.Tabs.Tab,{selected:0===u,onClick:function(){return s(0)},children:[(0,o.createComponentVNode)(2,a.Icon,{name:"table"})," Data View"]},"DataView"),(0,o.createComponentVNode)(2,a.Tabs.Tab,{selected:1===u,onClick:function(){return s(1)},children:[(0,o.createComponentVNode)(2,a.Icon,{name:"map-marked-alt"})," Map View"]},"MapView")]}),function(e){switch(e){case 0:return(0,o.createComponentVNode)(2,l);case 1:return(0,o.createComponentVNode)(2,d);default:return"WE SHOULDN'T BE HERE!"}}(u)]})})})};var l=function(e,t){var n=(0,r.useBackend)(t),i=n.act,l=n.data.alarms;return(0,o.createComponentVNode)(2,a.Box,{children:(0,o.createComponentVNode)(2,a.Table,{m:"0.5rem",children:[(0,o.createComponentVNode)(2,a.Table.Row,{header:!0,children:[(0,o.createComponentVNode)(2,a.Table.Cell,{children:"Name"}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:"Status"}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:"Access"})]}),l.map((function(e){return(0,o.createComponentVNode)(2,a.Table.Row,{children:[(0,o.createComponentVNode)(2,c.TableCell,{children:e.name}),(0,o.createComponentVNode)(2,c.TableCell,{children:(t=e.danger,0===t?(0,o.createComponentVNode)(2,a.Box,{color:"green",children:"Good"}):1===t?(0,o.createComponentVNode)(2,a.Box,{color:"orange",bold:!0,children:"Warning"}):2===t?(0,o.createComponentVNode)(2,a.Box,{color:"red",bold:!0,children:"DANGER"}):void 0)}),(0,o.createComponentVNode)(2,c.TableCell,{children:(0,o.createComponentVNode)(2,a.Button,{icon:"cog",content:"Access",onClick:function(){return i("open_alarm",{aref:e.ref})}})})]},e.name);var t}))]})})},d=function(e,t){var n=(0,r.useBackend)(t).data,c=(0,r.useLocalState)(t,"zoom",1),i=c[0],l=c[1],d=n.alarms;return(0,o.createComponentVNode)(2,a.Box,{height:"526px",mb:"0.5rem",overflow:"hidden",children:(0,o.createComponentVNode)(2,a.NanoMap,{onZoom:function(e){return l(e)},children:d.filter((function(e){return 2===e.z})).map((function(e){return(0,o.createComponentVNode)(2,a.NanoMap.Marker,{x:e.x,y:e.y,zoom:i,icon:"circle",tooltip:e.name,color:(t=e.danger,0===t?"green":1===t?"orange":2===t?"red":void 0)},e.ref);var t}))})})}},function(e,t,n){"use strict";t.__esModule=!0,t.AtmosFilter=void 0;var o=n(0),r=n(1),a=n(2),c=n(4);t.AtmosFilter=function(e,t){var n=(0,r.useBackend)(t),i=n.act,l=n.data,d=l.on,u=l.pressure,s=l.max_pressure,m=l.filter_type,p=l.filter_type_list;return(0,o.createComponentVNode)(2,c.Window,{children:(0,o.createComponentVNode)(2,c.Window.Content,{children:(0,o.createComponentVNode)(2,a.Section,{children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Power",children:(0,o.createComponentVNode)(2,a.Button,{icon:"power-off",content:d?"On":"Off",color:d?null:"red",selected:d,onClick:function(){return i("power")}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Rate",children:[(0,o.createComponentVNode)(2,a.Button,{icon:"fast-backward",textAlign:"center",disabled:0===u,width:2.2,onClick:function(){return i("min_pressure")}}),(0,o.createComponentVNode)(2,a.NumberInput,{animated:!0,unit:"kPa",width:6.1,lineHeight:1.5,step:10,minValue:0,maxValue:s,value:u,onDrag:function(e,t){return i("custom_pressure",{pressure:t})}}),(0,o.createComponentVNode)(2,a.Button,{icon:"fast-forward",textAlign:"center",disabled:u===s,width:2.2,onClick:function(){return i("max_pressure")}})]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Filter",children:p.map((function(e){return(0,o.createComponentVNode)(2,a.Button,{selected:e.gas_type===m,content:e.label,onClick:function(){return i("set_filter",{filter:e.gas_type})}},e.label)}))})]})})})})}},function(e,t,n){"use strict";t.__esModule=!0,t.AtmosMixer=void 0;var o=n(0),r=n(1),a=n(2),c=n(4);t.AtmosMixer=function(e,t){var n=(0,r.useBackend)(t),l=n.act,d=n.data,u=d.on,s=d.pressure,m=d.max_pressure,p=d.node1_concentration,f=d.node2_concentration;return(0,o.createComponentVNode)(2,c.Window,{children:(0,o.createComponentVNode)(2,c.Window.Content,{children:(0,o.createComponentVNode)(2,a.Section,{children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Power",children:(0,o.createComponentVNode)(2,a.Button,{icon:"power-off",content:u?"On":"Off",color:u?null:"red",selected:u,onClick:function(){return l("power")}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Rate",children:[(0,o.createComponentVNode)(2,a.Button,{icon:"fast-backward",textAlign:"center",disabled:0===s,width:2.2,onClick:function(){return l("min_pressure")}}),(0,o.createComponentVNode)(2,a.NumberInput,{animated:!0,unit:"kPa",width:6.1,lineHeight:1.5,step:10,minValue:0,maxValue:m,value:s,onDrag:function(e,t){return l("custom_pressure",{pressure:t})}}),(0,o.createComponentVNode)(2,a.Button,{icon:"fast-forward",textAlign:"center",disabled:s===m,width:2.2,onClick:function(){return l("max_pressure")}})]}),(0,o.createComponentVNode)(2,i,{node_name:"Node 1",node_ref:p}),(0,o.createComponentVNode)(2,i,{node_name:"Node 2",node_ref:f})]})})})})};var i=function(e,t){var n=(0,r.useBackend)(t),c=n.act,i=(n.data,e.node_name),l=e.node_ref;return(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:i,children:[(0,o.createComponentVNode)(2,a.Button,{icon:"fast-backward",textAlign:"center",width:2.2,disabled:0===l,onClick:function(){return c("set_node",{node_name:i,concentration:(l-10)/100})}}),(0,o.createComponentVNode)(2,a.NumberInput,{animated:!0,unit:"%",width:6.1,lineHeight:1.5,stepPixelSize:10,minValue:0,maxValue:100,value:l,onChange:function(e,t){return c("set_node",{node_name:i,concentration:t/100})}}),(0,o.createComponentVNode)(2,a.Button,{icon:"fast-forward",textAlign:"center",width:2.2,disabled:100===l,onClick:function(){return c("set_node",{node_name:i,concentration:(l+10)/100})}})]})}},function(e,t,n){"use strict";t.__esModule=!0,t.AtmosPump=void 0;var o=n(0),r=n(1),a=n(2),c=n(4);t.AtmosPump=function(e,t){var n=(0,r.useBackend)(t),i=n.act,l=n.data,d=l.on,u=l.rate,s=l.max_rate,m=l.gas_unit,p=l.step;return(0,o.createComponentVNode)(2,c.Window,{children:(0,o.createComponentVNode)(2,c.Window.Content,{children:(0,o.createComponentVNode)(2,a.Section,{children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Power",children:(0,o.createComponentVNode)(2,a.Button,{icon:"power-off",content:d?"On":"Off",color:d?null:"red",selected:d,onClick:function(){return i("power")}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Rate",children:[(0,o.createComponentVNode)(2,a.Button,{icon:"fast-backward",textAlign:"center",disabled:0===u,width:2.2,onClick:function(){return i("min_rate")}}),(0,o.createComponentVNode)(2,a.NumberInput,{animated:!0,unit:m,width:6.1,lineHeight:1.5,step:p,minValue:0,maxValue:s,value:u,onDrag:function(e,t){return i("custom_rate",{rate:t})}}),(0,o.createComponentVNode)(2,a.Button,{icon:"fast-forward",textAlign:"center",disabled:u===s,width:2.2,onClick:function(){return i("max_rate")}})]})]})})})})}},function(e,t,n){"use strict";t.__esModule=!0,t.Autolathe=void 0;var o=n(0),r=n(43),a=n(26),c=n(1),i=n(2),l=n(4),d=n(19),u=function(e,t,n,o){return null===e.requirements||!(e.requirements.metal*o>t)&&!(e.requirements.glass*o>n)};t.Autolathe=function(e,t){var n=(0,c.useBackend)(t),s=n.act,m=n.data,p=m.total_amount,f=(m.max_amount,m.metal_amount),h=m.glass_amount,C=m.busyname,N=(m.busyamt,m.showhacked,m.buildQueue),b=m.buildQueueLen,g=m.recipes,V=m.categories,v=(0,c.useSharedState)(t,"category",0),y=v[0],_=v[1];0===y&&(y="Tools");var x=f.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g,"$1,"),k=h.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g,"$1,"),L=p.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g,"$1,"),B=(0,c.useSharedState)(t,"search_text",""),w=B[0],S=B[1],I=(0,d.createSearch)(w,(function(e){return e.name})),T="";b>0&&(T=N.map((function(e,t){return(0,o.createComponentVNode)(2,i.Box,{children:(0,o.createComponentVNode)(2,i.Button,{icon:"times",content:N[t][0],onClick:function(){return s("remove_from_queue",{remove_from_queue:N.indexOf(e)+1})}},e)},t)})));var A=(0,r.flow)([(0,a.filter)((function(e){return(e.category.indexOf(y)>-1||w)&&(m.showhacked||!e.hacked)})),w&&(0,a.filter)(I),(0,a.sortBy)((function(e){return e.name.toLowerCase()}))])(g),E="Build";w?E="Results for: '"+w+"':":y&&(E="Build ("+y+")");return(0,o.createComponentVNode)(2,l.Window,{resizable:!0,children:(0,o.createComponentVNode)(2,l.Window.Content,{scrollable:!0,children:[(0,o.createVNode)(1,"div",null,(0,o.createComponentVNode)(2,i.Section,{title:E,buttons:(0,o.createComponentVNode)(2,i.Dropdown,{width:"190px",options:V,selected:y,onSelected:function(e){return _(e)}}),children:[(0,o.createComponentVNode)(2,i.Input,{fluid:!0,placeholder:"Search for...",onInput:function(e,t){return S(t)},mb:1}),A.map((function(e){return(0,o.createComponentVNode)(2,i.Flex,{justify:"space-between",align:"center",children:[(0,o.createComponentVNode)(2,i.Flex.Item,{children:[(0,o.createVNode)(1,"img",null,null,1,{src:"data:image/jpeg;base64,"+e.image,style:{"vertical-align":"middle",width:"32px",margin:"0px","margin-left":"0px"}}),(0,o.createComponentVNode)(2,i.Button,{icon:"hammer",selected:m.busyname===e.name&&1===m.busyamt,disabled:!u(e,m.metal_amount,m.glass_amount,1),onClick:function(){return s("make",{make:e.uid,multiplier:1})},children:(0,d.toTitleCase)(e.name)}),e.max_multiplier>=10&&(0,o.createComponentVNode)(2,i.Button,{icon:"hammer",selected:m.busyname===e.name&&10===m.busyamt,disabled:!u(e,m.metal_amount,m.glass_amount,10),onClick:function(){return s("make",{make:e.uid,multiplier:10})},children:"10x"}),e.max_multiplier>=25&&(0,o.createComponentVNode)(2,i.Button,{icon:"hammer",selected:m.busyname===e.name&&25===m.busyamt,disabled:!u(e,m.metal_amount,m.glass_amount,25),onClick:function(){return s("make",{make:e.uid,multiplier:25})},children:"25x"}),e.max_multiplier>25&&(0,o.createComponentVNode)(2,i.Button,{icon:"hammer",selected:m.busyname===e.name&&m.busyamt===e.max_multiplier,disabled:!u(e,m.metal_amount,m.glass_amount,e.max_multiplier),onClick:function(){return s("make",{make:e.uid,multiplier:e.max_multiplier})},children:[e.max_multiplier,"x"]})]}),(0,o.createComponentVNode)(2,i.Flex.Item,{children:e.requirements&&Object.keys(e.requirements).map((function(t){return(0,d.toTitleCase)(t)+": "+e.requirements[t]})).join(", ")||(0,o.createComponentVNode)(2,i.Box,{children:"No resources required."})})]},e.ref)}))]}),2,{style:{float:"left",width:"68%"}}),(0,o.createVNode)(1,"div",null,[(0,o.createComponentVNode)(2,i.Section,{title:"Materials",children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Metal",children:x}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Glass",children:k}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Total",children:L}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Storage",children:[m.fill_percent,"% Full"]})]})}),(0,o.createComponentVNode)(2,i.Section,{title:"Building",children:(0,o.createComponentVNode)(2,i.Box,{color:C?"green":"",children:C||"Nothing"})}),(0,o.createComponentVNode)(2,i.Section,{title:"Build Queue",children:[T,(0,o.createVNode)(1,"div",null,(0,o.createComponentVNode)(2,i.Button,{icon:"times",content:"Clear All",disabled:!m.buildQueueLen,onClick:function(){return s("clear_queue")}}),2,{align:"right"})]})],4,{style:{float:"right",width:"30%"}})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.BlueSpaceArtilleryControl=void 0;var o=n(0),r=n(1),a=n(2),c=n(4);t.BlueSpaceArtilleryControl=function(e,t){var n,i=(0,r.useBackend)(t),l=i.act,d=i.data;return n=d.ready?(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Status",color:"green",children:"Ready"}):d.reloadtime_text?(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Reloading In",color:"red",children:d.reloadtime_text}):(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Status",color:"red",children:"No cannon connected!"}),(0,o.createComponentVNode)(2,c.Window,{children:(0,o.createComponentVNode)(2,c.Window.Content,{children:(0,o.createComponentVNode)(2,a.Section,{children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[d.notice&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Alert",color:"red",children:d.notice}),n,(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Target",children:(0,o.createComponentVNode)(2,a.Button,{icon:"crosshairs",content:d.target?d.target:"None",onClick:function(){return l("recalibrate")}})}),1===d.ready&&!!d.target&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Firing",children:(0,o.createComponentVNode)(2,a.Button,{icon:"skull",content:"FIRE!",color:"red",onClick:function(){return l("fire")}})}),!d.connected&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Maintenance",children:(0,o.createComponentVNode)(2,a.Button,{icon:"wrench",content:"Complete Deployment",onClick:function(){return l("build")}})})]})})})})}},function(e,t,n){"use strict";t.__esModule=!0,t.BluespaceTap=void 0;var o=n(0),r=n(1),a=n(2),c=n(4),i=n(95);t.BluespaceTap=function(e,t){var n=(0,r.useBackend)(t),l=n.act,d=n.data,u=d.product||[],s=d.desiredLevel,m=d.inputLevel,p=d.points,f=d.totalPoints,h=d.powerUse,C=d.availablePower,N=d.maxLevel,b=d.emagged,g=d.safeLevels,V=d.nextLevelPower,v=s>m?"bad":"good";return(0,o.createComponentVNode)(2,c.Window,{resizable:!0,children:(0,o.createComponentVNode)(2,c.Window.Content,{scrollable:!0,children:[!!b&&(0,o.createComponentVNode)(2,a.NoticeBox,{danger:1,children:"Safety Protocols disabled"}),!!(m>g)&&(0,o.createComponentVNode)(2,a.NoticeBox,{danger:1,children:"High Power, Instability likely"}),(0,o.createComponentVNode)(2,a.Collapsible,{title:"Input Management",children:(0,o.createComponentVNode)(2,a.Section,{title:"Input",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Input Level",children:m}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Desired Level",children:(0,o.createComponentVNode)(2,a.Flex,{inline:!0,width:"100%",children:[(0,o.createComponentVNode)(2,a.Flex.Item,{children:[(0,o.createComponentVNode)(2,a.Button,{icon:"fast-backward",disabled:0===s,tooltip:"Set to 0",onClick:function(){return l("set",{set_level:0})}}),(0,o.createComponentVNode)(2,a.Button,{icon:"step-backward",tooltip:"Decrease to actual input level",disabled:0===s,onClick:function(){return l("set",{set_level:m})}}),(0,o.createComponentVNode)(2,a.Button,{icon:"backward",disabled:0===s,tooltip:"Decrease one step",onClick:function(){return l("decrease")}})]}),(0,o.createComponentVNode)(2,a.Flex.Item,{grow:1,mx:1,children:(0,o.createComponentVNode)(2,a.Slider,{value:s,fillValue:m,minValue:0,color:v,maxValue:N,stepPixelSize:20,step:1,onChange:function(e,t){return l("set",{set_level:t})}})}),(0,o.createComponentVNode)(2,a.Flex.Item,{children:[(0,o.createComponentVNode)(2,a.Button,{icon:"forward",disabled:s===N,tooltip:"Increase one step",tooltipPosition:"left",onClick:function(){return l("increase")}}),(0,o.createComponentVNode)(2,a.Button,{icon:"fast-forward",disabled:s===N,tooltip:"Set to max",tooltipPosition:"left",onClick:function(){return l("set",{set_level:N})}})]})]})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Current Power Use",children:(0,i.formatPower)(h)}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Power for next level",children:(0,i.formatPower)(V)}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Surplus Power",children:(0,i.formatPower)(C)})]})})}),(0,o.createComponentVNode)(2,a.Section,{title:"Output",children:(0,o.createComponentVNode)(2,a.Flex,{children:[(0,o.createComponentVNode)(2,a.Flex.Item,{children:(0,o.createComponentVNode)(2,a.Box,{children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Available Points",children:p}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Total Points",children:f})]})})}),(0,o.createComponentVNode)(2,a.Flex.Item,{align:"end",children:(0,o.createComponentVNode)(2,a.Box,{children:(0,o.createComponentVNode)(2,a.LabeledList,{children:u.map((function(e){return(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:e.name,children:(0,o.createComponentVNode)(2,a.Button,{disabled:e.price>=p,onClick:function(){return l("vend",{target:e.key})},content:e.price})},e.key)}))})})})]})})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.BodyScanner=void 0;var o=n(0),r=n(15),a=n(1),c=n(2),i=n(4),l=[["good","Alive"],["average","Critical"],["bad","DEAD"]],d=[["hasBorer","bad","Large growth detected in frontal lobe, possibly cancerous. Surgical removal is recommended."],["hasVirus","bad","Viral pathogen detected in blood stream."],["blind","average","Cataracts detected."],["colourblind","average","Photoreceptor abnormalities detected."],["nearsighted","average","Retinal misalignment detected."]],u=[["Respiratory","oxyLoss"],["Brain","brainLoss"],["Toxin","toxLoss"],["Radioactive","radLoss"],["Brute","bruteLoss"],["Genetic","cloneLoss"],["Burn","fireLoss"],["Paralysis","paralysis"]],s={average:[.25,.5],bad:[.5,Infinity]},m=function(e,t){for(var n=[],o=0;o0?e.filter((function(e){return!!e})).reduce((function(e,t){return(0,o.createFragment)([e,(0,o.createComponentVNode)(2,c.Box,{children:t},t)],0)}),null):null},f=function(e){if(e>100){if(e<300)return"mild infection";if(e<400)return"mild infection+";if(e<500)return"mild infection++";if(e<700)return"acute infection";if(e<800)return"acute infection+";if(e<900)return"acute infection++";if(e>=900)return"septic"}return""};t.BodyScanner=function(e,t){var n=(0,a.useBackend)(t).data,r=n.occupied,c=n.occupant,l=void 0===c?{}:c,d=r?(0,o.createComponentVNode)(2,h,{occupant:l}):(0,o.createComponentVNode)(2,y);return(0,o.createComponentVNode)(2,i.Window,{resizable:!0,children:(0,o.createComponentVNode)(2,i.Window.Content,{scrollable:!0,className:"Layout__content--flexColumn",children:d})})};var h=function(e){var t=e.occupant;return(0,o.createComponentVNode)(2,c.Box,{children:[(0,o.createComponentVNode)(2,C,{occupant:t}),(0,o.createComponentVNode)(2,N,{occupant:t}),(0,o.createComponentVNode)(2,b,{occupant:t}),(0,o.createComponentVNode)(2,V,{organs:t.extOrgan}),(0,o.createComponentVNode)(2,v,{organs:t.intOrgan})]})},C=function(e,t){var n=(0,a.useBackend)(t),i=n.act,d=n.data.occupant;return(0,o.createComponentVNode)(2,c.Section,{title:"Occupant",buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,c.Button,{icon:"print",onClick:function(){return i("print_p")},children:"Print Report"}),(0,o.createComponentVNode)(2,c.Button,{icon:"user-slash",onClick:function(){return i("ejectify")},children:"Eject"})],4),children:(0,o.createComponentVNode)(2,c.LabeledList,{children:[(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Name",children:d.name}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Health",children:(0,o.createComponentVNode)(2,c.ProgressBar,{min:"0",max:d.maxHealth,value:d.health/d.maxHealth,ranges:{good:[.5,Infinity],average:[0,.5],bad:[-Infinity,0]}})}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Status",color:l[d.stat][0],children:l[d.stat][1]}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Temperature",children:[(0,o.createComponentVNode)(2,c.AnimatedNumber,{value:(0,r.round)(d.bodyTempC,0)}),"\xb0C,\xa0",(0,o.createComponentVNode)(2,c.AnimatedNumber,{value:(0,r.round)(d.bodyTempF,0)}),"\xb0F"]}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Implants",children:d.implant_len?(0,o.createComponentVNode)(2,c.Box,{children:d.implant.map((function(e){return e.name})).join(", ")}):(0,o.createComponentVNode)(2,c.Box,{color:"label",children:"None"})})]})})},N=function(e){var t=e.occupant;return t.hasBorer||t.blind||t.colourblind||t.nearsighted||t.hasVirus?(0,o.createComponentVNode)(2,c.Section,{title:"Abnormalities",children:d.map((function(e,n){if(t[e[0]])return(0,o.createComponentVNode)(2,c.Box,{color:e[1],bold:"bad"===e[1],children:e[2]})}))}):(0,o.createComponentVNode)(2,c.Section,{title:"Abnormalities",children:(0,o.createComponentVNode)(2,c.Box,{color:"label",children:"No abnormalities found."})})},b=function(e){var t=e.occupant;return(0,o.createComponentVNode)(2,c.Section,{title:"Damage",children:(0,o.createComponentVNode)(2,c.Table,{children:m(u,(function(e,n,r){return(0,o.createFragment)([(0,o.createComponentVNode)(2,c.Table.Row,{color:"label",children:[(0,o.createComponentVNode)(2,c.Table.Cell,{children:[e[0],":"]}),(0,o.createComponentVNode)(2,c.Table.Cell,{children:!!n&&n[0]+":"})]}),(0,o.createComponentVNode)(2,c.Table.Row,{children:[(0,o.createComponentVNode)(2,c.Table.Cell,{children:(0,o.createComponentVNode)(2,g,{value:t[e[1]],marginBottom:r100)&&"average":"bad")||!!e.status.robotic&&"label",width:"33%",children:e.name}),(0,o.createComponentVNode)(2,c.Table.Cell,{textAlign:"center",q:!0,children:(0,o.createComponentVNode)(2,c.ProgressBar,{min:"0",max:e.maxHealth,mt:t>0&&"0.5rem",value:e.totalLoss/100,ranges:s,children:[(0,o.createComponentVNode)(2,c.Box,{float:"left",display:"inline",children:[!!e.bruteLoss&&(0,o.createComponentVNode)(2,c.Box,{display:"inline",position:"relative",children:[(0,o.createComponentVNode)(2,c.Icon,{name:"bone"}),(0,r.round)(e.bruteLoss,0),"\xa0",(0,o.createComponentVNode)(2,c.Tooltip,{position:"top",content:"Brute damage"})]}),!!e.fireLoss&&(0,o.createComponentVNode)(2,c.Box,{display:"inline",position:"relative",children:[(0,o.createComponentVNode)(2,c.Icon,{name:"fire"}),(0,r.round)(e.fireLoss,0),(0,o.createComponentVNode)(2,c.Tooltip,{position:"top",content:"Burn damage"})]})]}),(0,o.createComponentVNode)(2,c.Box,{display:"inline",children:(0,r.round)(e.totalLoss,0)})]})}),(0,o.createComponentVNode)(2,c.Table.Cell,{textAlign:"right",verticalAlign:"top",width:"33%",pt:t>0&&"calc(0.5rem + 2px)",children:[(0,o.createComponentVNode)(2,c.Box,{color:"average",display:"inline",children:p([!!e.internalBleeding&&"Internal bleeding",!!e.lungRuptured&&"Ruptured lung",!!e.status.broken&&e.status.broken,f(e.germ_level),!!e.open&&"Open incision"])}),(0,o.createComponentVNode)(2,c.Box,{display:"inline",children:[p([!!e.status.splinted&&(0,o.createComponentVNode)(2,c.Box,{color:"good",children:"Splinted"}),!!e.status.robotic&&(0,o.createComponentVNode)(2,c.Box,{color:"label",children:"Robotic"}),!!e.status.dead&&(0,o.createComponentVNode)(2,c.Box,{color:"bad",bold:!0,children:"DEAD"})]),p(e.shrapnel.map((function(e){return e.known?e.name:"Unknown object"})))]})]})]},t)}))]})})},v=function(e){return 0===e.organs.length?(0,o.createComponentVNode)(2,c.Section,{title:"Internal Organs",children:(0,o.createComponentVNode)(2,c.Box,{color:"label",children:"N/A"})}):(0,o.createComponentVNode)(2,c.Section,{title:"Internal Organs",children:(0,o.createComponentVNode)(2,c.Table,{children:[(0,o.createComponentVNode)(2,c.Table.Row,{header:!0,children:[(0,o.createComponentVNode)(2,c.Table.Cell,{children:"Name"}),(0,o.createComponentVNode)(2,c.Table.Cell,{textAlign:"center",children:"Damage"}),(0,o.createComponentVNode)(2,c.Table.Cell,{textAlign:"right",children:"Injuries"})]}),e.organs.map((function(e,t){return(0,o.createComponentVNode)(2,c.Table.Row,{textTransform:"capitalize",children:[(0,o.createComponentVNode)(2,c.Table.Cell,{color:(!e.dead?e.germ_level>100&&"average":"bad")||e.robotic>0&&"label",width:"33%",children:e.name}),(0,o.createComponentVNode)(2,c.Table.Cell,{textAlign:"center",children:(0,o.createComponentVNode)(2,c.ProgressBar,{min:"0",max:e.maxHealth,value:e.damage/100,mt:t>0&&"0.5rem",ranges:s,children:(0,r.round)(e.damage,0)})}),(0,o.createComponentVNode)(2,c.Table.Cell,{textAlign:"right",verticalAlign:"top",width:"33%",pt:t>0&&"calc(0.5rem + 2px)",children:[(0,o.createComponentVNode)(2,c.Box,{color:"average",display:"inline",children:p([f(e.germ_level)])}),(0,o.createComponentVNode)(2,c.Box,{display:"inline",children:p([1===e.robotic&&(0,o.createComponentVNode)(2,c.Box,{color:"label",children:"Robotic"}),2===e.robotic&&(0,o.createComponentVNode)(2,c.Box,{color:"label",children:"Assisted"}),!!e.dead&&(0,o.createComponentVNode)(2,c.Box,{color:"bad",bold:!0,children:"DEAD"})])})]})]},t)}))]})})},y=function(){return(0,o.createComponentVNode)(2,c.Section,{textAlign:"center",flexGrow:"1",children:(0,o.createComponentVNode)(2,c.Flex,{height:"100%",children:(0,o.createComponentVNode)(2,c.Flex.Item,{grow:"1",align:"center",color:"label",children:[(0,o.createComponentVNode)(2,c.Icon,{name:"user-slash",mb:"0.5rem",size:"5"}),(0,o.createVNode)(1,"br"),"No occupant detected."]})})})}},function(e,t,n){"use strict";t.__esModule=!0,t.BotClean=void 0;var o=n(0),r=n(1),a=n(2),c=n(4);t.BotClean=function(e,t){var n=(0,r.useBackend)(t),i=n.act,l=n.data,d=l.locked,u=l.noaccess,s=l.maintpanel,m=l.on,p=l.autopatrol,f=l.canhack,h=l.emagged,C=l.remote_disabled,N=l.painame,b=l.cleanblood;return(0,o.createComponentVNode)(2,c.Window,{children:(0,o.createComponentVNode)(2,c.Window.Content,{scrollable:!0,children:[(0,o.createComponentVNode)(2,a.NoticeBox,{children:["Swipe an ID card to ",d?"unlock":"lock"," this interface."]}),(0,o.createComponentVNode)(2,a.Section,{title:"General Settings",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Status",children:(0,o.createComponentVNode)(2,a.Button,{icon:m?"power-off":"times",content:m?"On":"Off",selected:m,disabled:u,onClick:function(){return i("power")}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Patrol",children:(0,o.createComponentVNode)(2,a.Button.Checkbox,{fluid:!0,checked:p,content:"Auto Patrol",disabled:u,onClick:function(){return i("autopatrol")}})}),!!s&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Maintenance Panel",children:(0,o.createComponentVNode)(2,a.Box,{color:"bad",children:"Panel Open!"})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Safety System",children:(0,o.createComponentVNode)(2,a.Box,{color:h?"bad":"good",children:h?"DISABLED!":"Enabled"})}),!!f&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Hacking",children:(0,o.createComponentVNode)(2,a.Button,{icon:"terminal",content:h?"Restore Safties":"Hack",disabled:u,color:"bad",onClick:function(){return i("hack")}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Remote Access",children:(0,o.createComponentVNode)(2,a.Button.Checkbox,{fluid:!0,checked:!C,content:"AI Remote Control",disabled:u,onClick:function(){return i("disableremote")}})})]})}),(0,o.createComponentVNode)(2,a.Section,{title:"Cleaning Settings",children:(0,o.createComponentVNode)(2,a.Button.Checkbox,{fluid:!0,checked:b,content:"Clean Blood",disabled:u,onClick:function(){return i("blood")}})}),N&&(0,o.createComponentVNode)(2,a.Section,{title:"pAI",children:(0,o.createComponentVNode)(2,a.Button,{fluid:!0,icon:"eject",content:N,disabled:u,onClick:function(){return i("ejectpai")}})})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.BotSecurity=void 0;var o=n(0),r=n(1),a=n(2),c=n(4);t.BotSecurity=function(e,t){var n=(0,r.useBackend)(t),i=n.act,l=n.data,d=l.locked,u=l.noaccess,s=l.maintpanel,m=l.on,p=l.autopatrol,f=l.canhack,h=l.emagged,C=l.remote_disabled,N=l.painame,b=l.check_id,g=l.check_weapons,V=l.check_warrant,v=l.arrest_mode,y=l.arrest_declare;return(0,o.createComponentVNode)(2,c.Window,{children:(0,o.createComponentVNode)(2,c.Window.Content,{scrollable:!0,children:[(0,o.createComponentVNode)(2,a.NoticeBox,{children:["Swipe an ID card to ",d?"unlock":"lock"," this interface."]}),(0,o.createComponentVNode)(2,a.Section,{title:"General Settings",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Status",children:(0,o.createComponentVNode)(2,a.Button,{icon:m?"power-off":"times",content:m?"On":"Off",selected:m,disabled:u,onClick:function(){return i("power")}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Patrol",children:(0,o.createComponentVNode)(2,a.Button.Checkbox,{fluid:!0,checked:p,content:"Auto Patrol",disabled:u,onClick:function(){return i("autopatrol")}})}),!!s&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Maintenance Panel",children:(0,o.createComponentVNode)(2,a.Box,{color:"bad",children:"Panel Open!"})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Safety System",children:(0,o.createComponentVNode)(2,a.Box,{color:h?"bad":"good",children:h?"DISABLED!":"Enabled"})}),!!f&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Hacking",children:(0,o.createComponentVNode)(2,a.Button,{icon:"terminal",content:h?"Restore Safties":"Hack",disabled:u,color:"bad",onClick:function(){return i("hack")}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Remote Access",children:(0,o.createComponentVNode)(2,a.Button.Checkbox,{fluid:!0,checked:!C,content:"AI Remote Control",disabled:u,onClick:function(){return i("disableremote")}})})]})}),(0,o.createComponentVNode)(2,a.Section,{title:"Who To Arrest",children:[(0,o.createComponentVNode)(2,a.Button.Checkbox,{fluid:!0,checked:b,content:"Unidentifiable Persons",disabled:u,onClick:function(){return i("authid")}}),(0,o.createComponentVNode)(2,a.Button.Checkbox,{fluid:!0,checked:g,content:"Unauthorized Weapons",disabled:u,onClick:function(){return i("authweapon")}}),(0,o.createComponentVNode)(2,a.Button.Checkbox,{fluid:!0,checked:V,content:"Wanted Criminals",disabled:u,onClick:function(){return i("authwarrant")}})]}),(0,o.createComponentVNode)(2,a.Section,{title:"Arrest Procedure",children:[(0,o.createComponentVNode)(2,a.Button.Checkbox,{fluid:!0,checked:v,content:"Detain Targets Indefinitely",disabled:u,onClick:function(){return i("arrtype")}}),(0,o.createComponentVNode)(2,a.Button.Checkbox,{fluid:!0,checked:y,content:"Announce Arrests On Radio",disabled:u,onClick:function(){return i("arrdeclare")}})]}),N&&(0,o.createComponentVNode)(2,a.Section,{title:"pAI",children:(0,o.createComponentVNode)(2,a.Button,{fluid:!0,icon:"eject",content:N,disabled:u,onClick:function(){return i("ejectpai")}})})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.BrigCells=void 0;var o=n(0),r=n(4),a=n(2),c=n(1),i=function(e,t){var n=e.cell,r=(0,c.useBackend)(t).act,i=n.cell_id,l=n.occupant,d=n.crimes,u=n.brigged_by,s=n.time_left_seconds,m=n.time_set_seconds,p=n.ref,f="";s>0&&(f+=" BrigCells__listRow--active");return(0,o.createComponentVNode)(2,a.Table.Row,{className:f,children:[(0,o.createComponentVNode)(2,a.Table.Cell,{children:i}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:l}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:d}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:u}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:(0,o.createComponentVNode)(2,a.TimeDisplay,{totalSeconds:m})}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:(0,o.createComponentVNode)(2,a.TimeDisplay,{totalSeconds:s})}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:(0,o.createComponentVNode)(2,a.Button,{type:"button",onClick:function(){r("release",{ref:p})},children:"Release"})})]})},l=function(e){var t=e.cells;return(0,o.createComponentVNode)(2,a.Table,{className:"BrigCells__list",children:[(0,o.createComponentVNode)(2,a.Table.Row,{children:[(0,o.createComponentVNode)(2,a.Table.Cell,{header:!0,children:"Cell"}),(0,o.createComponentVNode)(2,a.Table.Cell,{header:!0,children:"Occupant"}),(0,o.createComponentVNode)(2,a.Table.Cell,{header:!0,children:"Crimes"}),(0,o.createComponentVNode)(2,a.Table.Cell,{header:!0,children:"Brigged By"}),(0,o.createComponentVNode)(2,a.Table.Cell,{header:!0,children:"Time Brigged For"}),(0,o.createComponentVNode)(2,a.Table.Cell,{header:!0,children:"Time Left"}),(0,o.createComponentVNode)(2,a.Table.Cell,{header:!0,children:"Release"})]}),t.map((function(e){return(0,o.createComponentVNode)(2,i,{cell:e},e.ref)}))]})};t.BrigCells=function(e,t){var n=(0,c.useBackend)(t),i=(n.act,n.data.cells);return(0,o.createComponentVNode)(2,r.Window,{theme:"security",resizable:!0,children:(0,o.createComponentVNode)(2,r.Window.Content,{scrollable:!0,className:"Layout__content--flexColumn",children:(0,o.createComponentVNode)(2,a.Flex,{direction:"column",height:"100%",children:(0,o.createComponentVNode)(2,a.Section,{height:"100%",flexGrow:"1",children:(0,o.createComponentVNode)(2,l,{cells:i})})})})})}},function(e,t,n){"use strict";t.__esModule=!0,t.BrigTimer=void 0;var o=n(0),r=n(1),a=n(2),c=n(4);t.BrigTimer=function(e,t){var n=(0,r.useBackend)(t),i=n.act,l=n.data;l.nameText=l.occupant,l.timing&&(l.prisoner_hasrec?l.nameText=(0,o.createComponentVNode)(2,a.Box,{color:"green",children:l.occupant}):l.nameText=(0,o.createComponentVNode)(2,a.Box,{color:"red",children:l.occupant}));var d="pencil-alt";l.prisoner_name&&(l.prisoner_hasrec||(d="exclamation-triangle"));var u=[],s=0;for(s=0;se.current_positions&&(0,o.createComponentVNode)(2,a.Box,{color:"green",children:e.total_positions-e.current_positions})||(0,o.createComponentVNode)(2,a.Box,{color:"red",children:"0"})}),(0,o.createComponentVNode)(2,a.Table.Cell,{textAlign:"center",children:(0,o.createComponentVNode)(2,a.Button,{content:"-",disabled:s.cooldown_time||!e.can_close,onClick:function(){return u("make_job_unavailable",{job:e.title})}})}),(0,o.createComponentVNode)(2,a.Table.Cell,{textAlign:"center",children:(0,o.createComponentVNode)(2,a.Button,{content:"+",disabled:s.cooldown_time||!e.can_open,onClick:function(){return u("make_job_available",{job:e.title})}})}),(0,o.createComponentVNode)(2,a.Table.Cell,{textAlign:"center",children:s.target_dept&&(0,o.createComponentVNode)(2,a.Box,{color:"green",children:s.priority_jobs.indexOf(e.title)>-1?"Yes":""})||(0,o.createComponentVNode)(2,a.Button,{content:e.is_priority?"Yes":"No",selected:e.is_priority,disabled:s.cooldown_time||!e.can_prioritize,onClick:function(){return u("prioritize_job",{job:e.title})}})})]},e.title)}))]})})],4):(0,o.createComponentVNode)(2,a.Section,{title:"Warning",color:"red",children:"Not logged in."});break;case 2:n=s.authenticated&&s.scan_name?s.modify_name?(0,o.createComponentVNode)(2,i.AccessList,{accesses:s.regions,selectedList:s.selectedAccess,accessMod:function(e){return u("set",{access:e})},grantAll:function(){return u("grant_all")},denyAll:function(){return u("clear_all")},grantDep:function(e){return u("grant_region",{region:e})},denyDep:function(e){return u("deny_region",{region:e})}}):(0,o.createComponentVNode)(2,a.Section,{title:"Card Missing",color:"red",children:"No card to modify."}):(0,o.createComponentVNode)(2,a.Section,{title:"Warning",color:"red",children:"Not logged in."});break;case 3:n=s.authenticated?s.records.length?(0,o.createComponentVNode)(2,a.Section,{title:"Records",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:"times",content:"Delete All Records",disabled:!s.authenticated||0===s.records.length||s.target_dept,onClick:function(){return u("wipe_all_logs")}}),children:[(0,o.createComponentVNode)(2,a.Table,{children:[(0,o.createComponentVNode)(2,a.Table.Row,{children:[(0,o.createComponentVNode)(2,a.Table.Cell,{bold:!0,children:"Crewman"}),(0,o.createComponentVNode)(2,a.Table.Cell,{bold:!0,children:"Old Rank"}),(0,o.createComponentVNode)(2,a.Table.Cell,{bold:!0,children:"New Rank"}),(0,o.createComponentVNode)(2,a.Table.Cell,{bold:!0,children:"Authorized By"}),(0,o.createComponentVNode)(2,a.Table.Cell,{bold:!0,children:"Time"}),(0,o.createComponentVNode)(2,a.Table.Cell,{bold:!0,children:"Reason"}),!!s.iscentcom&&(0,o.createComponentVNode)(2,a.Table.Cell,{bold:!0,children:"Deleted By"})]}),s.records.map((function(e){return(0,o.createComponentVNode)(2,a.Table.Row,{children:[(0,o.createComponentVNode)(2,a.Table.Cell,{children:e.transferee}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:e.oldvalue}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:e.newvalue}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:e.whodidit}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:e.timestamp}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:e.reason}),!!s.iscentcom&&(0,o.createComponentVNode)(2,a.Table.Cell,{children:e.deletedby})]},e.timestamp)}))]}),!!s.iscentcom&&(0,o.createComponentVNode)(2,a.Box,{children:(0,o.createComponentVNode)(2,a.Button,{icon:"pencil-alt",content:"Delete MY Records",color:"purple",disabled:!s.authenticated||0===s.records.length,onClick:function(){return u("wipe_my_logs")}})})]}):(0,o.createComponentVNode)(2,a.Section,{title:"Records",children:"No records."}):(0,o.createComponentVNode)(2,a.Section,{title:"Warning",color:"red",children:"Not logged in."});break;case 4:n=s.authenticated&&s.scan_name?(0,o.createComponentVNode)(2,a.Section,{title:"Your Team",children:(0,o.createComponentVNode)(2,a.Table,{children:[(0,o.createComponentVNode)(2,a.Table.Row,{children:[(0,o.createComponentVNode)(2,a.Table.Cell,{bold:!0,children:"Name"}),(0,o.createComponentVNode)(2,a.Table.Cell,{bold:!0,children:"Rank"}),(0,o.createComponentVNode)(2,a.Table.Cell,{bold:!0,children:"Sec Status"}),(0,o.createComponentVNode)(2,a.Table.Cell,{bold:!0,children:"Actions"})]}),s.people_dept.map((function(e){return(0,o.createComponentVNode)(2,a.Table.Row,{children:[(0,o.createComponentVNode)(2,a.Table.Cell,{children:e.name}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:e.title}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:e.crimstat}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:(0,o.createComponentVNode)(2,a.Button,{content:e.buttontext,disabled:!e.demotable,onClick:function(){return u("remote_demote",{remote_demote:e.name})}})})]},e.title)}))]})}):(0,o.createComponentVNode)(2,a.Section,{title:"Warning",color:"red",children:"Not logged in."});break;default:n=(0,o.createComponentVNode)(2,a.Section,{title:"Warning",color:"red",children:"ERROR: Unknown Mode."})}return(0,o.createComponentVNode)(2,c.Window,{resizable:!0,children:(0,o.createComponentVNode)(2,c.Window.Content,{scrollable:!0,children:[m,p,n]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.CargoConsole=void 0;var o=n(0),r=n(43),a=n(26),c=n(1),i=n(2),l=n(4),d=(n(77),n(19));t.CargoConsole=function(e,t){return(0,o.createComponentVNode)(2,l.Window,{children:(0,o.createComponentVNode)(2,l.Window.Content,{children:[(0,o.createComponentVNode)(2,u),(0,o.createComponentVNode)(2,s),(0,o.createComponentVNode)(2,m),(0,o.createComponentVNode)(2,p)]})})};var u=function(e,t){var n=(0,c.useLocalState)(t,"contentsModal",null),r=n[0],a=n[1],l=(0,c.useLocalState)(t,"contentsModalTitle",null),d=l[0],u=l[1];return null!==r&&null!==d?(0,o.createComponentVNode)(2,i.Modal,{maxWidth:"75%",width:window.innerWidth+"px",maxHeight:.75*window.innerHeight+"px",mx:"auto",children:[(0,o.createComponentVNode)(2,i.Box,{width:"100%",bold:!0,children:(0,o.createVNode)(1,"h1",null,[d,(0,o.createTextVNode)(" contents:")],0)}),(0,o.createComponentVNode)(2,i.Box,{children:r.map((function(e){return(0,o.createComponentVNode)(2,i.Box,{children:["- ",e]},e)}))}),(0,o.createComponentVNode)(2,i.Box,{m:2,children:(0,o.createComponentVNode)(2,i.Button,{content:"Close",onClick:function(){a(null),u(null)}})})]}):void 0},s=function(e,t){var n,r,a=(0,c.useBackend)(t),l=a.act,d=a.data,u=d.is_public,s=d.points,m=d.timeleft,p=d.moving,f=d.at_station;return p||f?!p&&f?(n="Docked at the station",r="Return Shuttle"):p&&(r="In Transit...",n=1!==m?"Shuttle is en route (ETA: "+m+" minutes)":"Shuttle is en route (ETA: "+m+" minute)"):(n="Docked off-station",r="Call Shuttle"),(0,o.createComponentVNode)(2,i.Section,{title:"Status",children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Points Available",children:s}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Shuttle Status",children:n}),0===u&&(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Controls",children:[(0,o.createComponentVNode)(2,i.Button,{content:r,disabled:p,onClick:function(){return l("moveShuttle")}}),(0,o.createComponentVNode)(2,i.Button,{content:"View Central Command Messages",onClick:function(){return l("showMessages")}})]})]})})},m=function(e,t){var n=(0,c.useBackend)(t),l=n.act,u=n.data,s=u.categories,m=u.supply_packs,p=(0,c.useSharedState)(t,"category","Emergency"),f=p[0],h=p[1],C=(0,c.useSharedState)(t,"search_text",""),N=C[0],b=C[1],g=(0,c.useLocalState)(t,"contentsModal",null),V=(g[0],g[1]),v=(0,c.useLocalState)(t,"contentsModalTitle",null),y=(v[0],v[1]),_=(0,d.createSearch)(N,(function(e){return e.name})),x=(0,r.flow)([(0,a.filter)((function(e){return e.cat===s.filter((function(e){return e.name===f}))[0].category||N})),N&&(0,a.filter)(_),(0,a.sortBy)((function(e){return e.name.toLowerCase()}))])(m),k="Crate Catalogue";return N?k="Results for '"+N+"':":f&&(k="Browsing "+f),(0,o.createComponentVNode)(2,i.Section,{title:k,buttons:(0,o.createComponentVNode)(2,i.Dropdown,{width:"190px",options:s.map((function(e){return e.name})),selected:f,onSelected:function(e){return h(e)}}),children:[(0,o.createComponentVNode)(2,i.Input,{fluid:!0,placeholder:"Search for...",onInput:function(e,t){return b(t)},mb:1}),(0,o.createComponentVNode)(2,i.Box,{maxHeight:25,overflowY:"auto",overflowX:"hidden",children:(0,o.createComponentVNode)(2,i.Table,{m:"0.5rem",children:x.map((function(e){return(0,o.createComponentVNode)(2,i.Table.Row,{children:[(0,o.createComponentVNode)(2,i.Table.Cell,{bold:!0,children:[e.name," (",e.cost," Points)"]}),(0,o.createComponentVNode)(2,i.Table.Cell,{textAlign:"right",pr:1,children:[(0,o.createComponentVNode)(2,i.Button,{content:"Order 1",icon:"shopping-cart",onClick:function(){return l("order",{crate:e.ref,multiple:0})}}),(0,o.createComponentVNode)(2,i.Button,{content:"Order Multiple",icon:"cart-plus",onClick:function(){return l("order",{crate:e.ref,multiple:1})}}),(0,o.createComponentVNode)(2,i.Button,{content:"View Contents",icon:"search",onClick:function(){V(e.contents),y(e.name)}})]})]},e.name)}))})})]})},p=function(e,t){var n=(0,c.useBackend)(t),r=n.act,a=n.data,l=a.requests,d=a.canapprove,u=a.orders;return(0,o.createComponentVNode)(2,i.Section,{title:"Details",children:(0,o.createComponentVNode)(2,i.Box,{maxHeight:15,overflowY:"auto",overflowX:"hidden",children:[(0,o.createComponentVNode)(2,i.Box,{bold:!0,children:"Requests"}),(0,o.createComponentVNode)(2,i.Table,{m:"0.5rem",children:l.map((function(e){return(0,o.createComponentVNode)(2,i.Table.Row,{children:[(0,o.createComponentVNode)(2,i.Table.Cell,{children:[(0,o.createComponentVNode)(2,i.Box,{children:["- #",e.ordernum,": ",e.supply_type," for ",(0,o.createVNode)(1,"b",null,e.orderedby,0)]}),(0,o.createComponentVNode)(2,i.Box,{italic:!0,children:["Reason: ",e.comment]})]}),(0,o.createComponentVNode)(2,i.Table.Cell,{textAlign:"right",pr:1,children:[(0,o.createComponentVNode)(2,i.Button,{content:"Approve",color:"green",disabled:!d,onClick:function(){return r("approve",{ordernum:e.ordernum})}}),(0,o.createComponentVNode)(2,i.Button,{content:"Deny",color:"red",onClick:function(){return r("deny",{ordernum:e.ordernum})}})]})]},e.ordernum)}))}),(0,o.createComponentVNode)(2,i.Box,{bold:!0,children:"Confirmed Orders"}),(0,o.createComponentVNode)(2,i.Table,{m:"0.5rem",children:u.map((function(e){return(0,o.createComponentVNode)(2,i.Table.Row,{children:(0,o.createComponentVNode)(2,i.Table.Cell,{children:[(0,o.createComponentVNode)(2,i.Box,{children:["- #",e.ordernum,": ",e.supply_type," for ",(0,o.createVNode)(1,"b",null,e.orderedby,0)]}),(0,o.createComponentVNode)(2,i.Box,{italic:!0,children:["Reason: ",e.comment]})]})},e.ordernum)}))})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.ChemDispenser=void 0;var o=n(0),r=n(1),a=n(2),c=n(134),i=n(4),l=[1,5,10,20,30,50],d=[1,5,10];t.ChemDispenser=function(e,t){return(0,o.createComponentVNode)(2,i.Window,{resizable:!0,children:(0,o.createComponentVNode)(2,i.Window.Content,{className:"Layout__content--flexColumn",children:[(0,o.createComponentVNode)(2,u),(0,o.createComponentVNode)(2,s),(0,o.createComponentVNode)(2,m)]})})};var u=function(e,t){var n=(0,r.useBackend)(t),c=n.act,i=n.data,d=i.amount,u=i.energy,s=i.maxEnergy;return(0,o.createComponentVNode)(2,a.Section,{title:"Settings",flex:"content",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Energy",children:(0,o.createComponentVNode)(2,a.ProgressBar,{value:u,minValue:0,maxValue:s,ranges:{good:[.5*s,Infinity],average:[.25*s,.5*s],bad:[-Infinity,.25*s]},children:[u," / ",s," Units"]})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Dispense",verticalAlign:"middle",children:(0,o.createComponentVNode)(2,a.Flex,{direction:"row",spacing:"1",children:l.map((function(e,t){return(0,o.createComponentVNode)(2,a.Flex.Item,{grow:"1",width:"14%",display:"inline-block",children:(0,o.createComponentVNode)(2,a.Button,{icon:"cog",selected:d===e,content:e,m:"0",width:"100%",onClick:function(){return c("amount",{amount:e})}})},t)}))})})]})})},s=function(e,t){for(var n=(0,r.useBackend)(t),c=n.act,i=n.data,l=i.chemicals,d=void 0===l?[]:l,u=[],s=0;s<(d.length+1)%3;s++)u.push(!0);return(0,o.createComponentVNode)(2,a.Section,{title:i.glass?"Drink Dispenser":"Chemical Dispenser",flexGrow:"1",children:(0,o.createComponentVNode)(2,a.Flex,{direction:"row",wrap:"wrap",height:"100%",spacingPrecise:"2",align:"flex-start",alignContent:"flex-start",children:[d.map((function(e,t){return(0,o.createComponentVNode)(2,a.Flex.Item,{grow:"1",basis:"25%",height:"20px",width:"30%",display:"inline-block",children:(0,o.createComponentVNode)(2,a.Button,{icon:"arrow-circle-down",overflow:"hidden",textOverflow:"ellipsis",width:"100%",height:"100%",align:"flex-start",content:e.title,onClick:function(){return c("dispense",{reagent:e.id})}})},t)})),u.map((function(e,t){return(0,o.createComponentVNode)(2,a.Flex.Item,{grow:"1",basis:"25%",height:"20px"},t)}))]})})},m=function(e,t){var n=(0,r.useBackend)(t),i=n.act,l=n.data,u=l.isBeakerLoaded,s=l.beakerCurrentVolume,m=l.beakerMaxVolume,p=l.beakerContents,f=void 0===p?[]:p;return(0,o.createComponentVNode)(2,a.Section,{title:l.glass?"Glass":"Beaker",flex:"content",minHeight:"25%",buttons:(0,o.createComponentVNode)(2,a.Box,{children:[!!u&&(0,o.createComponentVNode)(2,a.Box,{inline:!0,color:"label",mr:2,children:[s," / ",m," units"]}),(0,o.createComponentVNode)(2,a.Button,{icon:"eject",content:"Eject",disabled:!u,onClick:function(){return i("ejectBeaker")}})]}),children:(0,o.createComponentVNode)(2,c.BeakerContents,{beakerLoaded:u,beakerContents:f,buttons:function(e){return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Button,{content:"Isolate",icon:"compress-arrows-alt",onClick:function(){return i("remove",{reagent:e.id,amount:-1})}}),d.map((function(t,n){return(0,o.createComponentVNode)(2,a.Button,{content:t,onClick:function(){return i("remove",{reagent:e.id,amount:t})}},n)})),(0,o.createComponentVNode)(2,a.Button,{content:"ALL",onClick:function(){return i("remove",{reagent:e.id,amount:e.volume})}})],0)}})})}},function(e,t,n){"use strict";e.exports=n(476)()},function(e,t,n){"use strict";var o=n(477);function r(){}function a(){}a.resetWarningCache=r,e.exports=function(){function e(e,t,n,r,a,c){if(c!==o){var i=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw i.name="Invariant Violation",i}}function t(){return e}e.isRequired=e;var n={array:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:a,resetWarningCache:r};return n.PropTypes=n,n}},function(e,t,n){"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},function(e,t,n){"use strict";t.__esModule=!0,t.ChemHeater=void 0;var o=n(0),r=n(15),a=n(1),c=n(2),i=n(134),l=n(4);t.ChemHeater=function(e,t){return(0,o.createComponentVNode)(2,l.Window,{resizable:!0,children:(0,o.createComponentVNode)(2,l.Window.Content,{className:"Layout__content--flexColumn",children:[(0,o.createComponentVNode)(2,d),(0,o.createComponentVNode)(2,u)]})})};var d=function(e,t){var n=(0,a.useBackend)(t),i=n.act,l=n.data,d=l.targetTemp,u=l.targetTempReached,s=l.autoEject,m=l.isActive,p=l.currentTemp,f=l.isBeakerLoaded;return(0,o.createComponentVNode)(2,c.Section,{title:"Settings",flexBasis:"content",buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,c.Button,{content:"Auto-eject",icon:s?"toggle-on":"toggle-off",selected:s,onClick:function(){return i("toggle_autoeject")}}),(0,o.createComponentVNode)(2,c.Button,{content:m?"On":"Off",icon:"power-off",selected:m,disabled:!f,onClick:function(){return i("toggle_on")}})],4),children:(0,o.createComponentVNode)(2,c.LabeledList,{children:[(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Target",children:(0,o.createComponentVNode)(2,c.NumberInput,{width:"65px",unit:"K",step:10,stepPixelSize:3,value:(0,r.round)(d,0),minValue:0,maxValue:1e3,onDrag:function(e,t){return i("adjust_temperature",{target:t})}})}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Reading",color:u?"good":"average",children:f&&(0,o.createComponentVNode)(2,c.AnimatedNumber,{value:p,format:function(e){return(0,r.toFixed)(e)+" K"}})||"\u2014"})]})})},u=function(e,t){var n=(0,a.useBackend)(t),r=n.act,l=n.data,d=l.isBeakerLoaded,u=l.beakerCurrentVolume,s=l.beakerMaxVolume,m=l.beakerContents;return(0,o.createComponentVNode)(2,c.Section,{title:"Beaker",flexGrow:"1",buttons:!!d&&(0,o.createComponentVNode)(2,c.Box,{children:[(0,o.createComponentVNode)(2,c.Box,{inline:!0,color:"label",mr:2,children:[u," / ",s," units"]}),(0,o.createComponentVNode)(2,c.Button,{icon:"eject",content:"Eject",onClick:function(){return r("eject_beaker")}})]}),children:(0,o.createComponentVNode)(2,i.BeakerContents,{beakerLoaded:d,beakerContents:m})})}},function(e,t,n){"use strict";t.__esModule=!0,t.ChemMaster=void 0;var o=n(0),r=n(1),a=n(2),c=n(4),i=n(134),l=n(49),d=[1,5,10],u=["bottle.png","small_bottle.png","wide_bottle.png","round_bottle.png","reagent_bottle.png"];t.ChemMaster=function(e,t){var n=(0,r.useBackend)(t).data,a=n.condi,i=n.beaker,d=n.beaker_reagents,u=void 0===d?[]:d,f=n.buffer_reagents,h=void 0===f?[]:f,N=n.mode;return(0,o.createComponentVNode)(2,c.Window,{resizable:!0,children:[(0,o.createComponentVNode)(2,l.ComplexModal),(0,o.createComponentVNode)(2,c.Window.Content,{scrollable:!0,className:"Layout__content--flexColumn",children:[(0,o.createComponentVNode)(2,s,{beaker:i,beakerReagents:u,bufferNonEmpty:h.length>0}),(0,o.createComponentVNode)(2,m,{mode:N,bufferReagents:h}),(0,o.createComponentVNode)(2,p,{isCondiment:a,bufferNonEmpty:h.length>0}),(0,o.createComponentVNode)(2,C)]})]})};var s=function(e,t){var n=(0,r.useBackend)(t).act,c=e.beaker,u=e.beakerReagents,s=e.bufferNonEmpty;return(0,o.createComponentVNode)(2,a.Section,{title:"Beaker",flexGrow:"0",flexBasis:"300px",buttons:s?(0,o.createComponentVNode)(2,a.Button.Confirm,{icon:"eject",disabled:!c,content:"Eject and Clear Buffer",onClick:function(){return n("eject")}}):(0,o.createComponentVNode)(2,a.Button,{icon:"eject",disabled:!c,content:"Eject and Clear Buffer",onClick:function(){return n("eject")}}),children:c?(0,o.createComponentVNode)(2,i.BeakerContents,{beakerLoaded:!0,beakerContents:u,buttons:function(e,r){return(0,o.createComponentVNode)(2,a.Box,{mb:r0?(0,o.createComponentVNode)(2,i.BeakerContents,{beakerLoaded:!0,beakerContents:s,buttons:function(e,r){return(0,o.createComponentVNode)(2,a.Box,{mb:r0?l.desc:"N/A"}),l.blood_type&&(0,o.createFragment)([(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Blood type",children:l.blood_type}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Blood DNA",className:"LabeledList__breakContents",children:l.blood_dna})],4),!i.condi&&(0,o.createComponentVNode)(2,a.Button,{icon:i.printing?"spinner":"print",disabled:i.printing,iconSpin:!!i.printing,ml:"0.5rem",content:"Print",onClick:function(){return c("print",{idx:l.idx,beaker:e.args.beaker})}})]})})})}))},function(e,t,n){"use strict";t.__esModule=!0,t.CloningConsole=void 0;var o=n(0),r=n(15),a=n(1),c=n(2),i=n(39),l=n(49),d=n(4),u=function(e,t){var n=(0,a.useBackend)(t),r=n.act,l=n.data,d=e.args,u=d.activerecord,s=d.realname,m=d.health,p=d.unidentity,f=d.strucenzymes,h=m.split(" - ");return(0,o.createComponentVNode)(2,c.Section,{level:2,m:"-1rem",pb:"1rem",title:"Records of "+s,children:(0,o.createComponentVNode)(2,c.LabeledList,{children:[(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Name",children:s}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Damage",children:h.length>1?(0,o.createFragment)([(0,o.createComponentVNode)(2,c.Box,{color:i.COLORS.damageType.oxy,display:"inline",children:h[0]}),(0,o.createTextVNode)("\xa0|\xa0"),(0,o.createComponentVNode)(2,c.Box,{color:i.COLORS.damageType.toxin,display:"inline",children:h[2]}),(0,o.createTextVNode)("\xa0|\xa0"),(0,o.createComponentVNode)(2,c.Box,{color:i.COLORS.damageType.brute,display:"inline",children:h[3]}),(0,o.createTextVNode)("\xa0|\xa0"),(0,o.createComponentVNode)(2,c.Box,{color:i.COLORS.damageType.burn,display:"inline",children:h[1]})],4):(0,o.createComponentVNode)(2,c.Box,{color:"bad",children:"Unknown"})}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"UI",className:"LabeledList__breakContents",children:p}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"SE",className:"LabeledList__breakContents",children:f}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Disk",children:[(0,o.createComponentVNode)(2,c.Button.Confirm,{disabled:!l.disk,icon:"arrow-circle-down",content:"Import",onClick:function(){return r("disk",{option:"load"})}}),(0,o.createComponentVNode)(2,c.Button,{disabled:!l.disk,icon:"arrow-circle-up",content:"Export UI",onClick:function(){return r("disk",{option:"save",savetype:"ui"})}}),(0,o.createComponentVNode)(2,c.Button,{disabled:!l.disk,icon:"arrow-circle-up",content:"Export UI and UE",onClick:function(){return r("disk",{option:"save",savetype:"ue"})}}),(0,o.createComponentVNode)(2,c.Button,{disabled:!l.disk,icon:"arrow-circle-up",content:"Export SE",onClick:function(){return r("disk",{option:"save",savetype:"se"})}})]}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Actions",children:[(0,o.createComponentVNode)(2,c.Button,{disabled:!l.podready,icon:"user-plus",content:"Clone",onClick:function(){return r("clone",{ref:u})}}),(0,o.createComponentVNode)(2,c.Button,{icon:"trash",content:"Delete",onClick:function(){return r("del_rec")}})]})]})})};t.CloningConsole=function(e,t){var n=(0,a.useBackend)(t);n.act,n.data.menu;return(0,l.modalRegisterBodyOverride)("view_rec",u),(0,o.createComponentVNode)(2,d.Window,{resizable:!0,children:[(0,o.createComponentVNode)(2,l.ComplexModal,{maxWidth:"75%",maxHeight:"75%"}),(0,o.createComponentVNode)(2,d.Window.Content,{className:"Layout__content--flexColumn",children:[(0,o.createComponentVNode)(2,h),(0,o.createComponentVNode)(2,C),(0,o.createComponentVNode)(2,s),(0,o.createComponentVNode)(2,c.Section,{noTopPadding:!0,flexGrow:"1",children:(0,o.createComponentVNode)(2,m)})]})]})};var s=function(e,t){var n=(0,a.useBackend)(t),r=n.act,i=n.data.menu;return(0,o.createComponentVNode)(2,c.Tabs,{children:[(0,o.createComponentVNode)(2,c.Tabs.Tab,{selected:1===i,icon:"home",onClick:function(){return r("menu",{num:1})},children:"Main"}),(0,o.createComponentVNode)(2,c.Tabs.Tab,{selected:2===i,icon:"folder",onClick:function(){return r("menu",{num:2})},children:"Records"})]})},m=function(e,t){var n,r=(0,a.useBackend)(t).data.menu;return 1===r?n=(0,o.createComponentVNode)(2,p):2===r&&(n=(0,o.createComponentVNode)(2,f)),n},p=function(e,t){var n=(0,a.useBackend)(t),i=n.act,l=n.data,d=l.loading,u=l.scantemp,s=l.occupant,m=l.locked,p=l.can_brainscan,f=l.scan_mode,h=l.numberofpods,C=l.pods,N=l.selected_pod,b=m&&!!s;return(0,o.createFragment)([(0,o.createComponentVNode)(2,c.Section,{title:"Scanner",level:"2",buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,c.Box,{display:"inline",color:"label",children:"Scanner Lock:\xa0"}),(0,o.createComponentVNode)(2,c.Button,{disabled:!s,selected:b,icon:b?"toggle-on":"toggle-off",content:b?"Engaged":"Disengaged",onClick:function(){return i("lock")}}),(0,o.createComponentVNode)(2,c.Button,{disabled:b||!s,icon:"user-slash",content:"Eject Occupant",onClick:function(){return i("eject")}})],4),children:[(0,o.createComponentVNode)(2,c.LabeledList,{children:[(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Status",children:d?(0,o.createComponentVNode)(2,c.Box,{color:"average",children:[(0,o.createComponentVNode)(2,c.Icon,{name:"spinner",spin:!0}),"\xa0 Scanning..."]}):(0,o.createComponentVNode)(2,c.Box,{color:u.color,children:u.text})}),!!p&&(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Scan Mode",children:(0,o.createComponentVNode)(2,c.Button,{icon:f?"brain":"male",content:f?"Brain":"Body",onClick:function(){return i("toggle_mode")}})})]}),(0,o.createComponentVNode)(2,c.Button,{disabled:!s||d,icon:"user",content:"Scan Occupant",mt:"0.5rem",mb:"0",onClick:function(){return i("scan")}})]}),(0,o.createComponentVNode)(2,c.Section,{title:"Pods",level:"2",children:h?C.map((function(e,t){var n;return n="cloning"===e.status?(0,o.createComponentVNode)(2,c.ProgressBar,{min:"0",max:"100",value:e.progress/100,ranges:{good:[.75,Infinity],average:[.25,.75],bad:[-Infinity,.25]},mt:"0.5rem",children:(0,o.createComponentVNode)(2,c.Box,{textAlign:"center",children:(0,r.round)(e.progress,0)+"%"})}):"mess"===e.status?(0,o.createComponentVNode)(2,c.Box,{bold:!0,color:"bad",mt:"0.5rem",children:"ERROR"}):(0,o.createComponentVNode)(2,c.Button,{selected:N===e.pod,icon:N===e.pod&&"check",content:"Select",mt:"0.5rem",onClick:function(){return i("selectpod",{ref:e.pod})}}),(0,o.createComponentVNode)(2,c.Box,{width:"64px",textAlign:"center",display:"inline-block",mr:"0.5rem",children:[(0,o.createVNode)(1,"img",null,null,1,{src:"pod_"+e.status+".gif",style:{width:"100%","-ms-interpolation-mode":"nearest-neighbor"}}),(0,o.createComponentVNode)(2,c.Box,{color:"label",children:["Pod #",t+1]}),(0,o.createComponentVNode)(2,c.Box,{bold:!0,color:e.biomass>=150?"good":"bad",display:"inline",children:[(0,o.createComponentVNode)(2,c.Icon,{name:e.biomass>=150?"circle":"circle-o"}),"\xa0",e.biomass]}),n]},t)})):(0,o.createComponentVNode)(2,c.Box,{color:"bad",children:"No pods detected. Unable to clone."})})],4)},f=function(e,t){var n=(0,a.useBackend)(t),r=n.act,i=n.data.records;return i.length?(0,o.createComponentVNode)(2,c.Box,{mt:"0.5rem",children:i.map((function(e,t){return(0,o.createComponentVNode)(2,c.Button,{icon:"user",mb:"0.5rem",content:e.realname,onClick:function(){return r("view_rec",{ref:e.record})}},t)}))}):(0,o.createComponentVNode)(2,c.Flex,{height:"100%",children:(0,o.createComponentVNode)(2,c.Flex.Item,{grow:"1",align:"center",textAlign:"center",color:"label",children:[(0,o.createComponentVNode)(2,c.Icon,{name:"user-slash",mb:"0.5rem",size:"5"}),(0,o.createVNode)(1,"br"),"No records found."]})})},h=function(e,t){var n,r=(0,a.useBackend)(t),i=r.act,l=r.data.temp;if(l&&l.text&&!(l.text.length<=0)){var d=((n={})[l.style]=!0,n);return(0,o.normalizeProps)((0,o.createComponentVNode)(2,c.NoticeBox,Object.assign({},d,{children:[(0,o.createComponentVNode)(2,c.Box,{display:"inline-block",verticalAlign:"middle",children:l.text}),(0,o.createComponentVNode)(2,c.Button,{icon:"times-circle",float:"right",onClick:function(){return i("cleartemp")}}),(0,o.createComponentVNode)(2,c.Box,{clear:"both"})]})))}},C=function(e,t){var n=(0,a.useBackend)(t),r=n.act,i=n.data,l=i.scanner,d=i.numberofpods,u=i.autoallowed,s=i.autoprocess,m=i.disk;return(0,o.createComponentVNode)(2,c.Section,{title:"Status",buttons:(0,o.createFragment)([!!u&&(0,o.createFragment)([(0,o.createComponentVNode)(2,c.Box,{display:"inline",color:"label",children:"Auto-processing:\xa0"}),(0,o.createComponentVNode)(2,c.Button,{selected:s,icon:s?"toggle-on":"toggle-off",content:s?"Enabled":"Disabled",onClick:function(){return r("autoprocess",{on:s?0:1})}})],4),(0,o.createComponentVNode)(2,c.Button,{disabled:!m,icon:"eject",content:"Eject Disk",onClick:function(){return r("disk",{option:"eject"})}})],0),children:(0,o.createComponentVNode)(2,c.LabeledList,{children:[(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Scanner",children:l?(0,o.createComponentVNode)(2,c.Box,{color:"good",children:"Connected"}):(0,o.createComponentVNode)(2,c.Box,{color:"bad",children:"Not connected!"})}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Pods",children:d?(0,o.createComponentVNode)(2,c.Box,{color:"good",children:[d," connected"]}):(0,o.createComponentVNode)(2,c.Box,{color:"bad",children:"None connected!"})})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.CommunicationsComputer=void 0;var o=n(0),r=n(1),a=n(2),c=n(4);t.CommunicationsComputer=function(e,t){var n,i=(0,r.useBackend)(t),l=i.act,d=i.data,u=!1;d.authenticated?1===d.authenticated?n="Command":2===d.authenticated?n="Captain":3===d.authenticated?(n="CentComm Secure Connection",u=!0):n="ERROR: Report This Bug!":n="Not Logged In";var s="View ("+d.messages.length+")",m=(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Section,{title:"Authentication",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:u&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Access",children:n})||(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Actions",children:(0,o.createComponentVNode)(2,a.Button,{icon:d.authenticated?"sign-out-alt":"id-card",selected:d.authenticated,disabled:d.noauthbutton,content:d.authenticated?"Log Out ("+n+")":"Log In",onClick:function(){return l("auth")}})})})}),!!d.esc_section&&(0,o.createComponentVNode)(2,a.Section,{title:"Escape Shuttle",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[!!d.esc_status&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Status",children:d.esc_status}),!!d.esc_callable&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Options",children:(0,o.createComponentVNode)(2,a.Button,{icon:"rocket",content:"Call Shuttle",disabled:!d.authhead,onClick:function(){return l("callshuttle")}})}),!!d.esc_recallable&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Options",children:(0,o.createComponentVNode)(2,a.Button,{icon:"times",content:"Recall Shuttle",disabled:!d.authhead||d.is_ai,onClick:function(){return l("cancelshuttle")}})}),!!d.lastCallLoc&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Last Call/Recall From",children:d.lastCallLoc})]})})],0),p="Make Priority Announcement";d.msg_cooldown>0&&(p+=" ("+d.msg_cooldown+"s)");var f=d.emagged?"Message [UNKNOWN]":"Message CentComm",h="Request Authentication Codes";d.cc_cooldown>0&&(f+=" ("+d.cc_cooldown+"s)",h+=" ("+d.cc_cooldown+"s)");var C,N=d.str_security_level,b=d.levels.map((function(e){return(0,o.createComponentVNode)(2,a.Button,{icon:e.icon,content:e.name,disabled:!d.authcapt||e.id===d.security_level,onClick:function(){return l("newalertlevel",{level:e.id})}},e.name)})),g=d.stat_display.presets.map((function(e){return(0,o.createComponentVNode)(2,a.Button,{content:e.label,selected:e.name===d.stat_display.type,disabled:!d.authhead,onClick:function(){return l("setstat",{statdisp:e.name})}},e.name)})),V=d.stat_display.alerts.map((function(e){return(0,o.createComponentVNode)(2,a.Button,{content:e.label,selected:e.alert===d.stat_display.icon,disabled:!d.authhead,onClick:function(){return l("setstat",{statdisp:"alert",alert:e.alert})}},e.alert)}));if(d.current_message_title)C=(0,o.createComponentVNode)(2,a.Section,{title:d.current_message_title,buttons:(0,o.createComponentVNode)(2,a.Button,{icon:"times",content:"Return To Message List",disabled:!d.authhead,onClick:function(){return l("messagelist")}}),children:(0,o.createComponentVNode)(2,a.Box,{children:d.current_message})});else{var v=d.messages.map((function(e){return(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:e.title,children:[(0,o.createComponentVNode)(2,a.Button,{icon:"eye",content:"View",disabled:!d.authhead||d.current_message_title===e.title,onClick:function(){return l("messagelist",{msgid:e.id})}}),(0,o.createComponentVNode)(2,a.Button,{icon:"times",content:"Delete",disabled:!d.authhead,onClick:function(){return l("delmessage",{msgid:e.id})}})]},e.id)}));C=(0,o.createComponentVNode)(2,a.Section,{title:"Messages Received",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:"arrow-circle-left",content:"Back To Main Menu",onClick:function(){return l("main")}}),children:(0,o.createComponentVNode)(2,a.LabeledList,{children:v})})}switch(d.menu_state){case 1:return(0,o.createComponentVNode)(2,c.Window,{resizable:!0,children:(0,o.createComponentVNode)(2,c.Window.Content,{scrollable:!0,children:[m,(0,o.createComponentVNode)(2,a.Section,{title:"Captain-Only Actions",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Current Alert",color:d.security_level_color,children:N}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Change Alert",children:b}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Announcement",children:(0,o.createComponentVNode)(2,a.Button,{icon:"bullhorn",content:p,disabled:!d.authcapt||d.msg_cooldown>0,onClick:function(){return l("announce")}})}),!!d.emagged&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Transmit",children:[(0,o.createComponentVNode)(2,a.Button,{icon:"broadcast-tower",color:"red",content:f,disabled:!d.authcapt||d.cc_cooldown>0,onClick:function(){return l("MessageSyndicate")}}),(0,o.createComponentVNode)(2,a.Button,{icon:"sync-alt",content:"Reset Relays",disabled:!d.authcapt,onClick:function(){return l("RestoreBackup")}})]})||(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Transmit",children:(0,o.createComponentVNode)(2,a.Button,{icon:"broadcast-tower",content:f,disabled:!d.authcapt||d.cc_cooldown>0,onClick:function(){return l("MessageCentcomm")}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Nuclear Device",children:(0,o.createComponentVNode)(2,a.Button,{icon:"bomb",content:h,disabled:!d.authcapt||d.cc_cooldown>0,onClick:function(){return l("nukerequest")}})})]})}),(0,o.createComponentVNode)(2,a.Section,{title:"Command Staff Actions",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Displays",children:(0,o.createComponentVNode)(2,a.Button,{icon:"tv",content:"Change Status Displays",disabled:!d.authhead,onClick:function(){return l("status")}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Incoming Messages",children:(0,o.createComponentVNode)(2,a.Button,{icon:"folder-open",content:s,disabled:!d.authhead,onClick:function(){return l("messagelist")}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Misc",children:(0,o.createComponentVNode)(2,a.Button,{icon:"sync-alt",content:"Restart Nano-Mob Hunter GO! Server",disabled:!d.authhead,onClick:function(){return l("RestartNanoMob")}})})]})})]})});case 2:return(0,o.createComponentVNode)(2,c.Window,{children:(0,o.createComponentVNode)(2,c.Window.Content,{children:[m,(0,o.createComponentVNode)(2,a.Section,{title:"Modify Status Screens",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:"arrow-circle-left",content:"Back To Main Menu",onClick:function(){return l("main")}}),children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Presets",children:g}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Alerts",children:V}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Message Line 1",children:(0,o.createComponentVNode)(2,a.Button,{icon:"pencil-alt",content:d.stat_display.line_1,disabled:!d.authhead,onClick:function(){return l("setmsg1")}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Message Line 2",children:(0,o.createComponentVNode)(2,a.Button,{icon:"pencil-alt",content:d.stat_display.line_2,disabled:!d.authhead,onClick:function(){return l("setmsg2")}})})]})})]})});case 3:return(0,o.createComponentVNode)(2,c.Window,{children:(0,o.createComponentVNode)(2,c.Window.Content,{children:[m,C]})});default:return(0,o.createComponentVNode)(2,c.Window,{children:(0,o.createComponentVNode)(2,c.Window.Content,{children:[m,"ERRROR. Unknown menu_state: ",d.menu_state,"Please report this to NT Technical Support."]})})}}},function(e,t,n){"use strict";t.__esModule=!0,t.Contractor=void 0;var o=n(0),r=n(15),a=n(1),c=n(2),i=n(184),l=n(4);var d={1:["ACTIVE","good"],2:["COMPLETED","good"],3:["FAILED","bad"]},u=["Recording biometric data...","Analyzing embedded syndicate info...","STATUS CONFIRMED","Contacting Syndicate database...","Awaiting response...","Awaiting response...","Awaiting response...","Awaiting response...","Awaiting response...","Awaiting response...","Response received, ack 4851234...","CONFIRM ACC "+Math.round(2e4*Math.random()),"Setting up private accounts...","CONTRACTOR ACCOUNT CREATED","Searching for available contracts...","Searching for available contracts...","Searching for available contracts...","Searching for available contracts...","CONTRACTS FOUND","WELCOME, AGENT"];t.Contractor=function(e,t){var n,r=(0,a.useBackend)(t),i=r.act,d=r.data;n=d.unauthorized?(0,o.createComponentVNode)(2,c.Flex.Item,{grow:"1",backgroundColor:"rgba(0, 0, 0, 0.8)",children:(0,o.createComponentVNode)(2,C,{height:"100%",allMessages:["ERROR: UNAUTHORIZED USER"],finishedTimeout:100,onFinished:function(){}})}):d.load_animation_completed?(0,o.createFragment)([(0,o.createComponentVNode)(2,c.Flex.Item,{basis:"content",children:(0,o.createComponentVNode)(2,s)}),(0,o.createComponentVNode)(2,c.Flex.Item,{basis:"content",mt:"0.5rem",children:(0,o.createComponentVNode)(2,m)}),(0,o.createComponentVNode)(2,c.Flex.Item,{grow:"1",overflow:"hidden",children:1===d.page?(0,o.createComponentVNode)(2,p,{height:"100%"}):(0,o.createComponentVNode)(2,h,{height:"100%"})})],4):(0,o.createComponentVNode)(2,c.Flex.Item,{grow:"1",backgroundColor:"rgba(0, 0, 0, 0.8)",children:(0,o.createComponentVNode)(2,C,{height:"100%",allMessages:u,finishedTimeout:3e3,onFinished:function(){return i("complete_load_animation")}})});var f=(0,a.useLocalState)(t,"viewingPhoto",""),b=f[0];f[1];return(0,o.createComponentVNode)(2,l.Window,{theme:"syndicate",children:[b&&(0,o.createComponentVNode)(2,N),(0,o.createComponentVNode)(2,l.Window.Content,{className:"Contractor",children:(0,o.createComponentVNode)(2,c.Flex,{direction:"column",height:"100%",children:n})})]})};var s=function(e,t){var n=(0,a.useBackend)(t),r=n.act,i=n.data,l=i.tc_available,d=i.tc_paid_out,u=i.completed_contracts,s=i.rep;return(0,o.normalizeProps)((0,o.createComponentVNode)(2,c.Section,Object.assign({title:"Summary",buttons:(0,o.createComponentVNode)(2,c.Box,{verticalAlign:"middle",mt:"0.25rem",children:[s," Rep"]})},e,{children:(0,o.createComponentVNode)(2,c.Flex,{children:[(0,o.createComponentVNode)(2,c.Box,{flexBasis:"50%",children:(0,o.createComponentVNode)(2,c.LabeledList,{children:[(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"TC Available",verticalAlign:"middle",children:(0,o.createComponentVNode)(2,c.Flex,{align:"center",children:[(0,o.createComponentVNode)(2,c.Flex.Item,{grow:"1",children:[l," TC"]}),(0,o.createComponentVNode)(2,c.Button,{disabled:l<=0,content:"Claim",mx:"0.75rem",mb:"0",flexBasis:"content",onClick:function(){return r("claim")}})]})}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"TC Earned",children:[d," TC"]})]})}),(0,o.createComponentVNode)(2,c.Box,{flexBasis:"50%",children:(0,o.createComponentVNode)(2,c.LabeledList,{children:[(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Contracts Completed",verticalAlign:"middle",children:(0,o.createComponentVNode)(2,c.Box,{height:"20px",lineHeight:"20px",display:"inline-block",children:u})}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Contractor Status",verticalAlign:"middle",children:"ACTIVE"})]})})]})})))},m=function(e,t){var n=(0,a.useBackend)(t),r=n.act,i=n.data.page;return(0,o.normalizeProps)((0,o.createComponentVNode)(2,c.Tabs,Object.assign({},e,{children:[(0,o.createComponentVNode)(2,c.Tabs.Tab,{selected:1===i,onClick:function(){return r("page",{page:1})},children:[(0,o.createComponentVNode)(2,c.Icon,{name:"suitcase"}),"Contracts"]}),(0,o.createComponentVNode)(2,c.Tabs.Tab,{selected:2===i,onClick:function(){return r("page",{page:2})},children:[(0,o.createComponentVNode)(2,c.Icon,{name:"shopping-cart"}),"Hub"]})]})))},p=function(e,t){var n=(0,a.useBackend)(t),r=n.act,l=n.data,u=l.contracts,s=l.contract_active,m=l.can_extract,p=!!s&&u.filter((function(e){return 1===e.status}))[0],h=p&&p.time_left>0,C=(0,a.useLocalState)(t,"viewingPhoto",""),N=(C[0],C[1]);return(0,o.normalizeProps)((0,o.createComponentVNode)(2,c.Section,Object.assign({title:"Available Contracts",overflow:"auto",buttons:(0,o.createComponentVNode)(2,c.Button,{disabled:!m||h,icon:"parachute-box",content:["Call Extraction",h&&(0,o.createComponentVNode)(2,i.Countdown,{timeLeft:p.time_left,format:function(e,t){return" ("+t.substr(3)+")"}})],onClick:function(){return r("extract")}})},e,{children:u.slice().sort((function(e,t){return 1===e.status?-1:1===t.status?1:e.status-t.status})).map((function(e){var t;return(0,o.createComponentVNode)(2,c.Section,{title:(0,o.createComponentVNode)(2,c.Flex,{children:[(0,o.createComponentVNode)(2,c.Flex.Item,{grow:"1",color:1===e.status&&"good",children:e.target_name}),(0,o.createComponentVNode)(2,c.Flex.Item,{basis:"content",children:e.has_photo&&(0,o.createComponentVNode)(2,c.Button,{icon:"camera",mb:"-0.5rem",ml:"0.5rem",onClick:function(){return N("target_photo_"+e.uid+".png")}})})]}),className:"Contractor__Contract",buttons:(0,o.createComponentVNode)(2,c.Box,{width:"100%",children:[!!d[e.status]&&(0,o.createComponentVNode)(2,c.Box,{color:d[e.status][1],display:"inline-block",mt:1!==e.status&&"0.125rem",mr:"0.25rem",lineHeight:"20px",children:d[e.status][0]}),1===e.status&&(0,o.createComponentVNode)(2,c.Button.Confirm,{icon:"ban",color:"bad",content:"Abort",ml:"0.5rem",onClick:function(){return r("abort")}})]}),children:(0,o.createComponentVNode)(2,c.Flex,{children:[(0,o.createComponentVNode)(2,c.Flex.Item,{grow:"2",mr:"0.5rem",children:[e.fluff_message,!!e.completed_time&&(0,o.createComponentVNode)(2,c.Box,{color:"good",children:[(0,o.createVNode)(1,"br"),(0,o.createComponentVNode)(2,c.Icon,{name:"check",mr:"0.5rem"}),"Contract completed at ",e.completed_time]}),!!e.dead_extraction&&(0,o.createComponentVNode)(2,c.Box,{color:"bad",mt:"0.5rem",bold:!0,children:[(0,o.createComponentVNode)(2,c.Icon,{name:"exclamation-triangle",mr:"0.5rem"}),"Telecrystals reward reduced drastically as the target was dead during extraction."]}),!!e.fail_reason&&(0,o.createComponentVNode)(2,c.Box,{color:"bad",children:[(0,o.createVNode)(1,"br"),(0,o.createComponentVNode)(2,c.Icon,{name:"times",mr:"0.5rem"}),"Contract failed: ",e.fail_reason]})]}),(0,o.createComponentVNode)(2,c.Flex.Item,{flexBasis:"100%",children:[(0,o.createComponentVNode)(2,c.Flex,{mb:"0.5rem",color:"label",children:["Extraction Zone:\xa0",f(e)]}),null==(t=e.difficulties)?void 0:t.map((function(t,n){return(0,o.createComponentVNode)(2,c.Button.Confirm,{disabled:!!s,content:t.name+" ("+t.reward+" TC)",onClick:function(){return r("activate",{uid:e.uid,difficulty:n+1})}})})),!!e.objective&&(0,o.createComponentVNode)(2,c.Box,{color:"white",bold:!0,children:[e.objective.extraction_name,(0,o.createVNode)(1,"br"),"(",(e.objective.rewards.tc||0)+" TC",",\xa0",(e.objective.rewards.credits||0)+" Credits",")"]})]})]})},e.uid)}))})))},f=function(e){if(e.objective&&!(e.status>1)){var t=e.objective.locs.user_area_id,n=e.objective.locs.user_coords,a=e.objective.locs.target_area_id,i=e.objective.locs.target_coords,l=t===a;return(0,o.createComponentVNode)(2,c.Flex.Item,{children:(0,o.createComponentVNode)(2,c.Icon,{name:l?"dot-circle-o":"arrow-alt-circle-right-o",color:l?"green":"yellow",rotation:l?null:-(0,r.rad2deg)(Math.atan2(i[1]-n[1],i[0]-n[0])),lineHeight:l?null:"0.85",size:"1.5"})})}},h=function(e,t){var n=(0,a.useBackend)(t),r=n.act,i=n.data,l=i.rep,d=i.buyables;return(0,o.normalizeProps)((0,o.createComponentVNode)(2,c.Section,Object.assign({title:"Available Purchases",overflow:"auto"},e,{children:d.map((function(e){return(0,o.createComponentVNode)(2,c.Section,{title:e.name,children:[e.description,(0,o.createVNode)(1,"br"),(0,o.createComponentVNode)(2,c.Button.Confirm,{disabled:l-1&&(0,o.createComponentVNode)(2,c.Box,{as:"span",color:0===e.stock?"bad":"good",ml:"0.5rem",children:[e.stock," in stock"]})]},e.uid)}))})))},C=function(e){var t,n;function r(t){var n;return(n=e.call(this,t)||this).timer=null,n.state={currentIndex:0,currentDisplay:[]},n}n=e,(t=r).prototype=Object.create(n.prototype),t.prototype.constructor=t,t.__proto__=n;var a=r.prototype;return a.tick=function(){var e=this.props,t=this.state;t.currentIndex<=e.allMessages.length?(this.setState((function(e){return{currentIndex:e.currentIndex+1}})),t.currentDisplay.push(e.allMessages[t.currentIndex])):(clearTimeout(this.timer),setTimeout(e.onFinished,e.finishedTimeout))},a.componentDidMount=function(){var e=this,t=this.props.linesPerSecond,n=void 0===t?2.5:t;this.timer=setInterval((function(){return e.tick()}),1e3/n)},a.componentWillUnmount=function(){clearTimeout(this.timer)},a.render=function(){return(0,o.createComponentVNode)(2,c.Box,{m:1,children:this.state.currentDisplay.map((function(e){return(0,o.createFragment)([e,(0,o.createVNode)(1,"br")],0,e)}))})},r}(o.Component),N=function(e,t){var n=(0,a.useLocalState)(t,"viewingPhoto",""),r=n[0],i=n[1];return(0,o.createComponentVNode)(2,c.Modal,{className:"Contractor__photoZoom",children:[(0,o.createComponentVNode)(2,c.Box,{as:"img",src:r}),(0,o.createComponentVNode)(2,c.Button,{icon:"times",content:"Close",color:"grey",mt:"1rem",onClick:function(){return i("")}})]})}},function(e,t,n){"use strict";t.__esModule=!0,t.ConveyorSwitch=void 0;var o=n(0),r=n(1),a=n(2),c=n(4);t.ConveyorSwitch=function(e,t){var n=(0,r.useBackend)(t),i=n.act,l=n.data,d=l.slowFactor,u=l.oneWay,s=l.position;return(0,o.createComponentVNode)(2,c.Window,{children:(0,o.createComponentVNode)(2,c.Window.Content,{children:(0,o.createComponentVNode)(2,a.Section,{children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Lever position",children:s>0?"forward":s<0?"reverse":"neutral"}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Allow reverse",children:(0,o.createComponentVNode)(2,a.Button.Checkbox,{checked:!u,onClick:function(){return i("toggleOneWay")}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Slowdown factor",children:(0,o.createComponentVNode)(2,a.Flex,{children:[(0,o.createComponentVNode)(2,a.Flex.Item,{mx:"1px",children:[" ",(0,o.createComponentVNode)(2,a.Button,{icon:"angle-double-left",onClick:function(){return i("slowFactor",{value:d-5})}})," "]}),(0,o.createComponentVNode)(2,a.Flex.Item,{mx:"1px",children:[" ",(0,o.createComponentVNode)(2,a.Button,{icon:"angle-left",onClick:function(){return i("slowFactor",{value:d-1})}})," "]}),(0,o.createComponentVNode)(2,a.Flex.Item,{children:(0,o.createComponentVNode)(2,a.Slider,{width:"100px",mx:"1px",value:d,fillValue:d,minValue:1,maxValue:50,step:1,format:function(e){return e+"x"},onChange:function(e,t){return i("slowFactor",{value:t})}})}),(0,o.createComponentVNode)(2,a.Flex.Item,{mx:"1px",children:[" ",(0,o.createComponentVNode)(2,a.Button,{icon:"angle-right",onClick:function(){return i("slowFactor",{value:d+1})}})," "]}),(0,o.createComponentVNode)(2,a.Flex.Item,{mx:"1px",children:[" ",(0,o.createComponentVNode)(2,a.Button,{icon:"angle-double-right",onClick:function(){return i("slowFactor",{value:d+5})}})," "]})]})})]})})})})}},function(e,t,n){"use strict";t.__esModule=!0,t.CrewMonitor=void 0;var o=n(0),r=n(26),a=n(19),c=n(1),i=n(2),l=n(76),d=n(39),u=n(4),s=function(e,t){return e.dead?"Deceased":parseInt(e.health,10)<=t?"Critical":1===parseInt(e.stat,10)?"Unconscious":"Living"},m=function(e,t){return e.dead?"red":parseInt(e.health,10)<=t?"orange":1===parseInt(e.stat,10)?"blue":"green"};t.CrewMonitor=function(e,t){var n=(0,c.useBackend)(t),r=(n.act,n.data,(0,c.useLocalState)(t,"tabIndex",0)),a=r[0],l=r[1];return(0,o.createComponentVNode)(2,u.Window,{resizable:!0,children:(0,o.createComponentVNode)(2,u.Window.Content,{children:(0,o.createComponentVNode)(2,i.Box,{fillPositionedParent:!0,children:[(0,o.createComponentVNode)(2,i.Tabs,{children:[(0,o.createComponentVNode)(2,i.Tabs.Tab,{selected:0===a,onClick:function(){return l(0)},children:[(0,o.createComponentVNode)(2,i.Icon,{name:"table"})," Data View"]},"DataView"),(0,o.createComponentVNode)(2,i.Tabs.Tab,{selected:1===a,onClick:function(){return l(1)},children:[(0,o.createComponentVNode)(2,i.Icon,{name:"map-marked-alt"})," Map View"]},"MapView")]}),function(e){switch(e){case 0:return(0,o.createComponentVNode)(2,p);case 1:return(0,o.createComponentVNode)(2,f);default:return"WE SHOULDN'T BE HERE!"}}(a)]})})})};var p=function(e,t){var n=(0,c.useBackend)(t),u=n.act,p=n.data,f=(0,r.sortBy)((function(e){return e.name}))(p.crewmembers||[]),h=(0,c.useLocalState)(t,"search",""),C=h[0],N=h[1],b=(0,a.createSearch)(C,(function(e){return e.name+"|"+e.assignment+"|"+e.area}));return(0,o.createComponentVNode)(2,i.Box,{children:[(0,o.createComponentVNode)(2,i.Input,{placeholder:"Search by name, assignment or location..",width:"100%",onInput:function(e,t){return N(t)}}),(0,o.createComponentVNode)(2,i.Table,{m:"0.5rem",children:[(0,o.createComponentVNode)(2,i.Table.Row,{header:!0,children:[(0,o.createComponentVNode)(2,i.Table.Cell,{children:"Name"}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:"Status"}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:"Location"})]}),f.filter(b).map((function(e){return(0,o.createComponentVNode)(2,i.Table.Row,{bold:!!e.is_command,children:[(0,o.createComponentVNode)(2,l.TableCell,{children:[e.name," (",e.assignment,")"]}),(0,o.createComponentVNode)(2,l.TableCell,{children:[(0,o.createComponentVNode)(2,i.Box,{inline:!0,color:m(e,p.critThreshold),children:s(e,p.critThreshold)}),e.sensor_type>=2?(0,o.createComponentVNode)(2,i.Box,{inline:!0,children:["(",(0,o.createComponentVNode)(2,i.Box,{inline:!0,color:d.COLORS.damageType.oxy,children:e.oxy}),"|",(0,o.createComponentVNode)(2,i.Box,{inline:!0,color:d.COLORS.damageType.toxin,children:e.tox}),"|",(0,o.createComponentVNode)(2,i.Box,{inline:!0,color:d.COLORS.damageType.burn,children:e.fire}),"|",(0,o.createComponentVNode)(2,i.Box,{inline:!0,color:d.COLORS.damageType.brute,children:e.brute}),")"]}):null]}),(0,o.createComponentVNode)(2,l.TableCell,{children:3===e.sensor_type?p.isAI?(0,o.createComponentVNode)(2,i.Button,{fluid:!0,icon:"location-arrow",content:e.area+" ("+e.x+", "+e.y+")",onClick:function(){return u("track",{track:e.ref})}}):e.area+" ("+e.x+", "+e.y+")":"Not Available"})]},e.name)}))]})]})},f=function(e,t){var n=(0,c.useBackend)(t).data,r=(0,c.useLocalState)(t,"zoom",1),a=r[0],l=r[1];return(0,o.createComponentVNode)(2,i.Box,{height:"526px",mb:"0.5rem",overflow:"hidden",children:(0,o.createComponentVNode)(2,i.NanoMap,{onZoom:function(e){return l(e)},children:n.crewmembers.filter((function(e){return 3===e.sensor_type})).map((function(e){return(0,o.createComponentVNode)(2,i.NanoMap.Marker,{x:e.x,y:e.y,zoom:a,icon:"circle",tooltip:e.name+" ("+e.assignment+")",color:m(e,n.critThreshold)},e.ref)}))})})}},function(e,t,n){"use strict";t.__esModule=!0,t.Cryo=void 0;var o=n(0),r=n(1),a=n(2),c=n(4),i=[{label:"Resp.",type:"oxyLoss"},{label:"Toxin",type:"toxLoss"},{label:"Brute",type:"bruteLoss"},{label:"Burn",type:"fireLoss"}],l=[["good","Conscious"],["average","Unconscious"],["bad","DEAD"]];t.Cryo=function(e,t){return(0,o.createComponentVNode)(2,c.Window,{children:(0,o.createComponentVNode)(2,c.Window.Content,{className:"Layout__content--flexColumn",children:(0,o.createComponentVNode)(2,d)})})};var d=function(e,t){var n=(0,r.useBackend)(t),c=n.act,d=n.data,s=d.isOperating,m=d.hasOccupant,p=d.occupant,f=void 0===p?[]:p,h=d.cellTemperature,C=d.cellTemperatureStatus,N=d.isBeakerLoaded,b=d.auto_eject_healthy,g=d.auto_eject_dead;return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Section,{title:"Occupant",flexGrow:"1",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:"user-slash",onClick:function(){return c("ejectOccupant")},disabled:!m,children:"Eject"}),children:m?(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Occupant",children:f.name||"Unknown"}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Health",children:(0,o.createComponentVNode)(2,a.ProgressBar,{min:f.health,max:f.maxHealth,value:f.health/f.maxHealth,color:f.health>0?"good":"average",children:(0,o.createComponentVNode)(2,a.AnimatedNumber,{value:Math.round(f.health)})})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Status",color:l[f.stat][0],children:l[f.stat][1]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Temperature",children:[(0,o.createComponentVNode)(2,a.AnimatedNumber,{value:Math.round(f.bodyTemperature)})," K"]}),(0,o.createComponentVNode)(2,a.LabeledList.Divider),i.map((function(e){return(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:e.label,children:(0,o.createComponentVNode)(2,a.ProgressBar,{value:f[e.type]/100,ranges:{bad:[.01,Infinity]},children:(0,o.createComponentVNode)(2,a.AnimatedNumber,{value:Math.round(f[e.type])})})},e.id)}))]}):(0,o.createComponentVNode)(2,a.Flex,{height:"100%",textAlign:"center",children:(0,o.createComponentVNode)(2,a.Flex.Item,{grow:"1",align:"center",color:"label",children:[(0,o.createComponentVNode)(2,a.Icon,{name:"user-slash",mb:"0.5rem",size:"5"}),(0,o.createVNode)(1,"br"),"No occupant detected."]})})}),(0,o.createComponentVNode)(2,a.Section,{title:"Cell",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:"eject",onClick:function(){return c("ejectBeaker")},disabled:!N,children:"Eject Beaker"}),children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Power",children:(0,o.createComponentVNode)(2,a.Button,{icon:"power-off",onClick:function(){return c(s?"switchOff":"switchOn")},selected:s,children:s?"On":"Off"})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Temperature",color:C,children:[(0,o.createComponentVNode)(2,a.AnimatedNumber,{value:h})," K"]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Beaker",children:(0,o.createComponentVNode)(2,u)}),(0,o.createComponentVNode)(2,a.LabeledList.Divider),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Auto-eject healthy occupants",children:(0,o.createComponentVNode)(2,a.Button,{icon:b?"toggle-on":"toggle-off",selected:b,onClick:function(){return c(b?"auto_eject_healthy_off":"auto_eject_healthy_on")},children:b?"On":"Off"})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Auto-eject dead occupants",children:(0,o.createComponentVNode)(2,a.Button,{icon:g?"toggle-on":"toggle-off",selected:g,onClick:function(){return c(g?"auto_eject_dead_off":"auto_eject_dead_on")},children:g?"On":"Off"})})]})})],4)},u=function(e,t){var n=(0,r.useBackend)(t),c=(n.act,n.data),i=c.isBeakerLoaded,l=c.beakerLabel,d=c.beakerVolume;return i?(0,o.createFragment)([l||(0,o.createComponentVNode)(2,a.Box,{color:"average",children:"No label"}),(0,o.createComponentVNode)(2,a.Box,{color:!d&&"bad",children:d?(0,o.createComponentVNode)(2,a.AnimatedNumber,{value:d,format:function(e){return Math.round(e)+" units remaining"}}):"Beaker is empty"})],0):(0,o.createComponentVNode)(2,a.Box,{color:"average",children:"No beaker loaded"})}},function(e,t,n){"use strict";t.__esModule=!0,t.DNAModifier=void 0;var o=n(0),r=n(1),a=n(2),c=n(4),i=n(49),l=[["good","Alive"],["average","Critical"],["bad","DEAD"]],d=[["ui","Modify U.I.","dna"],["se","Modify S.E.","dna"],["buffer","Transfer Buffers","syringe"],["rejuvenators","Rejuvenators","flask"]],u=[5,10,20,30,50];t.DNAModifier=function(e,t){var n,a=(0,r.useBackend)(t),l=(a.act,a.data),d=l.irradiating,u=l.dnaBlockSize,p=l.occupant;return t.dnaBlockSize=u,t.isDNAInvalid=!p.isViableSubject||!p.uniqueIdentity||!p.structuralEnzymes,d&&(n=(0,o.createComponentVNode)(2,V,{duration:d})),(0,o.createComponentVNode)(2,c.Window,{resizable:!0,children:[(0,o.createComponentVNode)(2,i.ComplexModal),n,(0,o.createComponentVNode)(2,c.Window.Content,{className:"Layout__content--flexColumn",children:[(0,o.createComponentVNode)(2,s),(0,o.createComponentVNode)(2,m)]})]})};var s=function(e,t){var n=(0,r.useBackend)(t),c=n.act,i=n.data,d=i.locked,u=i.hasOccupant,s=i.occupant;return(0,o.createComponentVNode)(2,a.Section,{title:"Occupant",buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Box,{color:"label",display:"inline",mr:"0.5rem",children:"Door Lock:"}),(0,o.createComponentVNode)(2,a.Button,{disabled:!u,selected:d,icon:d?"toggle-on":"toggle-off",content:d?"Engaged":"Disengaged",onClick:function(){return c("toggleLock")}}),(0,o.createComponentVNode)(2,a.Button,{disabled:!u||d,icon:"user-slash",content:"Eject",onClick:function(){return c("ejectOccupant")}})],4),children:u?(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Box,{children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Name",children:s.name}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Health",children:(0,o.createComponentVNode)(2,a.ProgressBar,{min:s.minHealth,max:s.maxHealth,value:s.health/s.maxHealth,ranges:{good:[.5,Infinity],average:[0,.5],bad:[-Infinity,0]}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Status",color:l[s.stat][0],children:l[s.stat][1]}),(0,o.createComponentVNode)(2,a.LabeledList.Divider)]})}),t.isDNAInvalid?(0,o.createComponentVNode)(2,a.Box,{color:"bad",children:[(0,o.createComponentVNode)(2,a.Icon,{name:"exclamation-circle"}),"\xa0 The occupant's DNA structure is ruined beyond recognition, please insert a subject with an intact DNA structure."]}):(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Radiation",children:(0,o.createComponentVNode)(2,a.ProgressBar,{min:"0",max:"100",value:s.radiationLevel/100,color:"average"})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Unique Enzymes",children:i.occupant.uniqueEnzymes?i.occupant.uniqueEnzymes:(0,o.createComponentVNode)(2,a.Box,{color:"bad",children:[(0,o.createComponentVNode)(2,a.Icon,{name:"exclamation-circle"}),"\xa0 Unknown"]})})]})],0):(0,o.createComponentVNode)(2,a.Box,{color:"label",children:"Cell unoccupied."})})},m=function(e,t){var n,c=(0,r.useBackend)(t),i=c.act,l=c.data,u=l.selectedMenuKey,s=l.hasOccupant;l.occupant;return s?t.isDNAInvalid?(0,o.createComponentVNode)(2,a.Section,{flexGrow:"1",children:(0,o.createComponentVNode)(2,a.Flex,{height:"100%",children:(0,o.createComponentVNode)(2,a.Flex.Item,{grow:"1",align:"center",textAlign:"center",color:"label",children:[(0,o.createComponentVNode)(2,a.Icon,{name:"user-slash",mb:"0.5rem",size:"5"}),(0,o.createVNode)(1,"br"),"No operation possible on this subject."]})})}):("ui"===u?n=(0,o.createFragment)([(0,o.createComponentVNode)(2,p),(0,o.createComponentVNode)(2,h)],4):"se"===u?n=(0,o.createFragment)([(0,o.createComponentVNode)(2,f),(0,o.createComponentVNode)(2,h)],4):"buffer"===u?n=(0,o.createComponentVNode)(2,C):"rejuvenators"===u&&(n=(0,o.createComponentVNode)(2,g)),(0,o.createComponentVNode)(2,a.Section,{flexGrow:"1",children:[(0,o.createComponentVNode)(2,a.Tabs,{children:d.map((function(e,t){return(0,o.createComponentVNode)(2,a.Tabs.Tab,{selected:u===e[0],onClick:function(){return i("selectMenuKey",{key:e[0]})},children:[(0,o.createComponentVNode)(2,a.Icon,{name:e[2]}),e[1]]},t)}))}),n]})):(0,o.createComponentVNode)(2,a.Section,{flexGrow:"1",children:(0,o.createComponentVNode)(2,a.Flex,{height:"100%",children:(0,o.createComponentVNode)(2,a.Flex.Item,{grow:"1",align:"center",textAlign:"center",color:"label",children:[(0,o.createComponentVNode)(2,a.Icon,{name:"user-slash",mb:"0.5rem",size:"5"}),(0,o.createVNode)(1,"br"),"No occupant in DNA modifier."]})})})},p=function(e,t){var n=(0,r.useBackend)(t),c=n.act,i=n.data,l=i.selectedUIBlock,d=i.selectedUISubBlock,u=i.selectedUITarget,s=i.occupant;return(0,o.createComponentVNode)(2,a.Section,{title:"Modify Unique Identifier",level:"2",children:[(0,o.createComponentVNode)(2,v,{dnaString:s.uniqueIdentity,selectedBlock:l,selectedSubblock:d,blockSize:t.dnaBlockSize,action:"selectUIBlock"}),(0,o.createComponentVNode)(2,a.LabeledList,{children:(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Target",children:(0,o.createComponentVNode)(2,a.Knob,{minValue:"1",maxValue:"15",stepPixelSize:"20",value:u,format:function(e){return e.toString(16).toUpperCase()},ml:"0",onChange:function(e,t){return c("changeUITarget",{value:t})}})})}),(0,o.createComponentVNode)(2,a.Button,{icon:"radiation",content:"Irradiate Block",mt:"0.5rem",onClick:function(){return c("pulseUIRadiation")}})]})},f=function(e,t){var n=(0,r.useBackend)(t),c=n.act,i=n.data,l=i.selectedSEBlock,d=i.selectedSESubBlock,u=i.occupant;return(0,o.createComponentVNode)(2,a.Section,{title:"Modify Structural Enzymes",level:"2",children:[(0,o.createComponentVNode)(2,v,{dnaString:u.structuralEnzymes,selectedBlock:l,selectedSubblock:d,blockSize:t.dnaBlockSize,action:"selectSEBlock"}),(0,o.createComponentVNode)(2,a.Button,{icon:"radiation",content:"Irradiate Block",onClick:function(){return c("pulseSERadiation")}})]})},h=function(e,t){var n=(0,r.useBackend)(t),c=n.act,i=n.data,l=i.radiationIntensity,d=i.radiationDuration;return(0,o.createComponentVNode)(2,a.Section,{title:"Radiation Emitter",level:"2",children:[(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Intensity",children:(0,o.createComponentVNode)(2,a.Knob,{minValue:"1",maxValue:"10",stepPixelSize:"20",value:l,popUpPosition:"right",ml:"0",onChange:function(e,t){return c("radiationIntensity",{value:t})}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Duration",children:(0,o.createComponentVNode)(2,a.Knob,{minValue:"1",maxValue:"20",stepPixelSize:"10",unit:"s",value:d,popUpPosition:"right",ml:"0",onChange:function(e,t){return c("radiationDuration",{value:t})}})})]}),(0,o.createComponentVNode)(2,a.Button,{icon:"radiation",content:"Pulse Radiation",tooltip:"Mutates a random block of either the occupant's UI or SE.",tooltipPosition:"top-right",mt:"0.5rem",onClick:function(){return c("pulseRadiation")}})]})},C=function(e,t){var n=(0,r.useBackend)(t),c=(n.act,n.data.buffers.map((function(e,t){return(0,o.createComponentVNode)(2,N,{id:t+1,name:"Buffer "+(t+1),buffer:e},t)})));return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Section,{title:"Buffers",level:"2",children:c}),(0,o.createComponentVNode)(2,b)],4)},N=function(e,t){var n=(0,r.useBackend)(t),c=n.act,i=n.data,l=e.id,d=e.name,u=e.buffer,s=i.isInjectorReady,m=d+(u.data?" - "+u.label:"");return(0,o.createComponentVNode)(2,a.Box,{backgroundColor:"rgba(0, 0, 0, 0.33)",mb:"0.5rem",children:(0,o.createComponentVNode)(2,a.Section,{title:m,level:"3",mx:"0",lineHeight:"18px",buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Button.Confirm,{disabled:!u.data,icon:"trash",content:"Clear",onClick:function(){return c("bufferOption",{option:"clear",id:l})}}),(0,o.createComponentVNode)(2,a.Button,{disabled:!u.data,icon:"pen",content:"Rename",onClick:function(){return c("bufferOption",{option:"changeLabel",id:l})}}),(0,o.createComponentVNode)(2,a.Button,{disabled:!u.data||!i.hasDisk,icon:"save",content:"Export",tooltip:"Exports this buffer to the currently loaded data disk.",tooltipPosition:"bottom-left",onClick:function(){return c("bufferOption",{option:"saveDisk",id:l})}})],4),children:[(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Write",children:[(0,o.createComponentVNode)(2,a.Button,{icon:"arrow-circle-down",content:"Subject U.I",mb:"0",onClick:function(){return c("bufferOption",{option:"saveUI",id:l})}}),(0,o.createComponentVNode)(2,a.Button,{icon:"arrow-circle-down",content:"Subject U.I and U.E.",mb:"0",onClick:function(){return c("bufferOption",{option:"saveUIAndUE",id:l})}}),(0,o.createComponentVNode)(2,a.Button,{icon:"arrow-circle-down",content:"Subject S.E.",mb:"0",onClick:function(){return c("bufferOption",{option:"saveSE",id:l})}}),(0,o.createComponentVNode)(2,a.Button,{disabled:!i.hasDisk||!i.disk.data,icon:"arrow-circle-down",content:"From Disk",mb:"0",onClick:function(){return c("bufferOption",{option:"loadDisk",id:l})}})]}),!!u.data&&(0,o.createFragment)([(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Subject",children:u.owner||(0,o.createComponentVNode)(2,a.Box,{color:"average",children:"Unknown"})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Data Type",children:["ui"===u.type?"Unique Identifiers":"Structural Enzymes",!!u.ue&&" and Unique Enzymes"]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Transfer to",children:[(0,o.createComponentVNode)(2,a.Button,{disabled:!s,icon:s?"syringe":"spinner",iconSpin:!s,content:"Injector",mb:"0",onClick:function(){return c("bufferOption",{option:"createInjector",id:l})}}),(0,o.createComponentVNode)(2,a.Button,{disabled:!s,icon:s?"syringe":"spinner",iconSpin:!s,content:"Block Injector",mb:"0",onClick:function(){return c("bufferOption",{option:"createInjector",id:l,block:1})}}),(0,o.createComponentVNode)(2,a.Button,{icon:"user",content:"Subject",mb:"0",onClick:function(){return c("bufferOption",{option:"transfer",id:l})}})]})],4)]}),!u.data&&(0,o.createComponentVNode)(2,a.Box,{color:"label",mt:"0.5rem",children:"This buffer is empty."})]})})},b=function(e,t){var n=(0,r.useBackend)(t),c=n.act,i=n.data,l=i.hasDisk,d=i.disk;return(0,o.createComponentVNode)(2,a.Section,{title:"Data Disk",level:"2",buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Button.Confirm,{disabled:!l||!d.data,icon:"trash",content:"Wipe",onClick:function(){return c("wipeDisk")}}),(0,o.createComponentVNode)(2,a.Button,{disabled:!l,icon:"eject",content:"Eject",onClick:function(){return c("ejectDisk")}})],4),children:l?d.data?(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Label",children:d.label?d.label:"No label"}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Subject",children:d.owner?d.owner:(0,o.createComponentVNode)(2,a.Box,{color:"average",children:"Unknown"})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Data Type",children:["ui"===d.type?"Unique Identifiers":"Structural Enzymes",!!d.ue&&" and Unique Enzymes"]})]}):(0,o.createComponentVNode)(2,a.Box,{color:"label",children:"Disk is blank."}):(0,o.createComponentVNode)(2,a.Box,{color:"label",textAlign:"center",my:"1rem",children:[(0,o.createComponentVNode)(2,a.Icon,{name:"save-o",size:"4"}),(0,o.createVNode)(1,"br"),"No disk inserted."]})})},g=function(e,t){var n=(0,r.useBackend)(t),c=n.act,i=n.data,l=i.isBeakerLoaded,d=i.beakerVolume,s=i.beakerLabel;return(0,o.createComponentVNode)(2,a.Section,{title:"Rejuvenators and Beaker",level:"2",buttons:(0,o.createComponentVNode)(2,a.Button,{disabled:!l,icon:"eject",content:"Eject",onClick:function(){return c("ejectBeaker")}}),children:l?(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Inject",children:[u.map((function(e,t){return(0,o.createComponentVNode)(2,a.Button,{disabled:e>d,icon:"syringe",content:e,onClick:function(){return c("injectRejuvenators",{amount:e})}},t)})),(0,o.createComponentVNode)(2,a.Button,{disabled:d<=0,icon:"syringe",content:"All",onClick:function(){return c("injectRejuvenators",{amount:d})}})]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Beaker",children:[(0,o.createComponentVNode)(2,a.Box,{mb:"0.5rem",children:s||"No label"}),d?(0,o.createComponentVNode)(2,a.Box,{color:"good",children:[d," unit",1===d?"":"s"," remaining"]}):(0,o.createComponentVNode)(2,a.Box,{color:"bad",children:"Empty"})]})]}):(0,o.createComponentVNode)(2,a.Box,{color:"label",textAlign:"center",my:"25%",children:[(0,o.createComponentVNode)(2,a.Icon,{name:"exclamation-triangle",size:"4"}),(0,o.createVNode)(1,"br"),"No beaker loaded."]})})},V=function(e,t){return(0,o.createComponentVNode)(2,a.Dimmer,{textAlign:"center",children:[(0,o.createComponentVNode)(2,a.Icon,{name:"spinner",size:"5",spin:!0}),(0,o.createVNode)(1,"br"),(0,o.createComponentVNode)(2,a.Box,{color:"average",children:(0,o.createVNode)(1,"h1",null,[(0,o.createComponentVNode)(2,a.Icon,{name:"radiation"}),(0,o.createTextVNode)("\xa0Irradiating occupant\xa0"),(0,o.createComponentVNode)(2,a.Icon,{name:"radiation"})],4)}),(0,o.createComponentVNode)(2,a.Box,{color:"label",children:(0,o.createVNode)(1,"h3",null,[(0,o.createTextVNode)("For "),e.duration,(0,o.createTextVNode)(" second"),1===e.duration?"":"s"],0)})]})},v=function(e,t){for(var n=(0,r.useBackend)(t),c=n.act,i=(n.data,e.dnaString),l=e.selectedBlock,d=e.selectedSubblock,u=e.blockSize,s=e.action,m=i.split(""),p=[],f=function(e){for(var t=e/u+1,n=[],r=function(r){var i=r+1;n.push((0,o.createComponentVNode)(2,a.Button,{selected:l===t&&d===i,content:m[e+r],mb:"0",onClick:function(){return c(s,{block:t,subblock:i})}}))},i=0;i0?"Yes":"No",selected:l.com>0,onClick:function(){return i("toggle_com")}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Security",children:d.map((function(e,t){return(0,o.createComponentVNode)(2,a.Button,{selected:l.sec===e,content:e,onClick:function(){return i("set_sec",{set_sec:e})}},"sec"+e)}))}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Medical",children:d.map((function(e,t){return(0,o.createComponentVNode)(2,a.Button,{selected:l.med===e,content:e,onClick:function(){return i("set_med",{set_med:e})}},"med"+e)}))}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Engineering",children:d.map((function(e,t){return(0,o.createComponentVNode)(2,a.Button,{selected:l.eng===e,content:e,onClick:function(){return i("set_eng",{set_eng:e})}},"eng"+e)}))}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Paranormal",children:d.map((function(e,t){return(0,o.createComponentVNode)(2,a.Button,{selected:l.par===e,content:e,onClick:function(){return i("set_par",{set_par:e})}},"par"+e)}))}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Janitor",children:d.map((function(e,t){return(0,o.createComponentVNode)(2,a.Button,{selected:l.jan===e,content:e,onClick:function(){return i("set_jan",{set_jan:e})}},"jan"+e)}))}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Cyborg",children:d.map((function(e,t){return(0,o.createComponentVNode)(2,a.Button,{selected:l.cyb===e,content:e,onClick:function(){return i("set_cyb",{set_cyb:e})}},"cyb"+e)}))}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Total Slots",children:(0,o.createComponentVNode)(2,a.Box,{color:l.total>l.spawnpoints?"red":"green",children:[l.total," total, versus ",l.spawnpoints," spawnpoints"]})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Dispatch",children:(0,o.createComponentVNode)(2,a.Button,{icon:"ambulance",content:"Send ERT",onClick:function(){return i("dispatch_ert")}})})]})})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.Electropack=void 0;var o=n(0),r=n(15),a=n(1),c=n(2),i=n(4);t.Electropack=function(e,t){var n=(0,a.useBackend)(t),l=n.act,d=n.data,u=d.power,s=d.code,m=d.frequency,p=d.minFrequency,f=d.maxFrequency;return(0,o.createComponentVNode)(2,i.Window,{children:(0,o.createComponentVNode)(2,i.Window.Content,{children:(0,o.createComponentVNode)(2,c.Section,{children:(0,o.createComponentVNode)(2,c.LabeledList,{children:[(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Power",children:(0,o.createComponentVNode)(2,c.Button,{icon:u?"power-off":"times",content:u?"On":"Off",selected:u,onClick:function(){return l("power")}})}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Frequency",buttons:(0,o.createComponentVNode)(2,c.Button,{icon:"sync",content:"Reset",onClick:function(){return l("reset",{reset:"freq"})}}),children:(0,o.createComponentVNode)(2,c.NumberInput,{animate:!0,unit:"kHz",step:.2,stepPixelSize:6,minValue:p/10,maxValue:f/10,value:m/10,format:function(e){return(0,r.toFixed)(e,1)},width:"80px",onChange:function(e,t){return l("freq",{freq:t})}})}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Code",buttons:(0,o.createComponentVNode)(2,c.Button,{icon:"sync",content:"Reset",onClick:function(){return l("reset",{reset:"code"})}}),children:(0,o.createComponentVNode)(2,c.NumberInput,{animate:!0,step:1,stepPixelSize:6,minValue:1,maxValue:100,value:s,width:"80px",onChange:function(e,t){return l("code",{code:t})}})})]})})})})}},function(e,t,n){"use strict";t.__esModule=!0,t.EvolutionMenu=void 0;var o=n(0),r=n(1),a=n(2),c=n(4);t.EvolutionMenu=function(e,t){return(0,o.createComponentVNode)(2,c.Window,{resizable:!0,theme:"changeling",children:(0,o.createComponentVNode)(2,c.Window.Content,{className:"Layout__content--flexColumn",children:[(0,o.createComponentVNode)(2,i),(0,o.createComponentVNode)(2,l)]})})};var i=function(e,t){var n=(0,r.useBackend)(t),c=n.act,i=n.data,l=i.evo_points,d=i.can_respec;return(0,o.createComponentVNode)(2,a.Section,{title:"Evolution Points",height:5.5,children:(0,o.createComponentVNode)(2,a.Flex,{children:[(0,o.createComponentVNode)(2,a.Flex.Item,{mt:.5,color:"label",children:"Points remaining:"}),(0,o.createComponentVNode)(2,a.Flex.Item,{mt:.5,ml:2,bold:!0,color:"#1b945c",children:l}),(0,o.createComponentVNode)(2,a.Flex.Item,{children:[(0,o.createComponentVNode)(2,a.Button,{ml:2.5,disabled:!d,content:"Readapt",icon:"sync",onClick:function(){return c("readapt")}}),(0,o.createComponentVNode)(2,a.Button,{tooltip:"By transforming a humanoid into a husk, we gain the ability to readapt our chosen evolutions.",tooltipPosition:"bottom",icon:"question-circle"})]})]})})},l=function(e,t){var n=(0,r.useBackend)(t),c=n.act,i=n.data,l=i.evo_points,d=i.ability_list,u=i.purchsed_abilities,s=i.view_mode;return(0,o.createComponentVNode)(2,a.Section,{title:"Abilities",flexGrow:"1",buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Button,{icon:s?"square-o":"check-square-o",selected:!s,content:"Compact",onClick:function(){return c("set_view_mode",{mode:0})}}),(0,o.createComponentVNode)(2,a.Button,{icon:s?"check-square-o":"square-o",selected:s,content:"Expanded",onClick:function(){return c("set_view_mode",{mode:1})}})],4),children:d.map((function(e,t){return(0,o.createComponentVNode)(2,a.Box,{p:.5,mx:-1,className:"candystripe",children:[(0,o.createComponentVNode)(2,a.Flex,{align:"center",children:[(0,o.createComponentVNode)(2,a.Flex.Item,{ml:.5,color:"#dedede",children:e.name}),u.includes(e.name)&&(0,o.createComponentVNode)(2,a.Flex.Item,{ml:2,bold:!0,color:"#1b945c",children:"(Purchased)"}),(0,o.createComponentVNode)(2,a.Flex.Item,{mr:3,textAlign:"right",grow:1,children:[(0,o.createComponentVNode)(2,a.Box,{as:"span",color:"label",children:["Cost: "," "]}),(0,o.createComponentVNode)(2,a.Box,{as:"span",bold:!0,color:"#1b945c",children:e.cost})]}),(0,o.createComponentVNode)(2,a.Flex.Item,{textAlign:"right",children:(0,o.createComponentVNode)(2,a.Button,{mr:.5,disabled:e.cost>l||u.includes(e.name),content:"Evolve",onClick:function(){return c("purchase",{power_name:e.name})}})})]}),!!s&&(0,o.createComponentVNode)(2,a.Flex,{color:"#8a8a8a",my:1,ml:1.5,width:"95%",children:e.description+" "+e.helptext})]},t)}))})}},function(e,t,n){"use strict";t.__esModule=!0,t.ExosuitFabricator=void 0;var o=n(0),r=n(8),a=n(19),c=n(1),i=n(2),l=n(184),d=n(4);var u={bananium:"clown",tranquillite:"mime"};t.ExosuitFabricator=function(e,t){var n=(0,c.useBackend)(t),r=(n.act,n.data.building);return(0,o.createComponentVNode)(2,d.Window,{children:(0,o.createComponentVNode)(2,d.Window.Content,{className:"Exofab",children:(0,o.createComponentVNode)(2,i.Flex,{width:"100%",height:"100%",children:[(0,o.createComponentVNode)(2,i.Flex.Item,{grow:"1",mr:"0.5rem",width:"70%",children:(0,o.createComponentVNode)(2,i.Flex,{direction:"column",height:"100%",children:[(0,o.createComponentVNode)(2,i.Flex.Item,{grow:"1",basis:"100%",children:(0,o.createComponentVNode)(2,m)}),r&&(0,o.createComponentVNode)(2,i.Flex.Item,{basis:"content",mt:"0.5rem",children:(0,o.createComponentVNode)(2,p)})]})}),(0,o.createComponentVNode)(2,i.Flex.Item,{width:"30%",children:(0,o.createComponentVNode)(2,i.Flex,{direction:"column",height:"100%",children:[(0,o.createComponentVNode)(2,i.Flex.Item,{grow:"1",basis:"50%",children:(0,o.createComponentVNode)(2,s)}),(0,o.createComponentVNode)(2,i.Flex.Item,{grow:"1",basis:"50%",mt:"0.5rem",children:(0,o.createComponentVNode)(2,f)})]})})]})})})};var s=function(e,t){var n=(0,c.useBackend)(t),r=n.act,a=n.data,l=a.materials,d=a.capacity,u=Object.values(l).reduce((function(e,t){return e+t}),0);return(0,o.createComponentVNode)(2,i.Section,{title:"Materials",className:"Exofab__materials",buttons:(0,o.createComponentVNode)(2,i.Box,{color:"label",mt:"0.25rem",children:[(u/d*100).toPrecision(3),"% full"]}),children:["$metal","$glass","$silver","$gold","$uranium","$titanium","$plasma","$diamond","$bluespace","$bananium","$tranquillite","$plastic"].map((function(e){return(0,o.createComponentVNode)(2,h,{id:e,bold:"$metal"===e||"$glass"===e,onClick:function(){return r("withdraw",{id:e})}},e)}))})},m=function(e,t){var n=(0,c.useBackend)(t),r=n.act,l=n.data,d=l.curCategory,u=l.categories,s=l.designs,m=l.syncing,p=(0,c.useLocalState)(t,"searchText",""),f=p[0],h=p[1],N=(0,a.createSearch)(f,(function(e){return e.name})),b=s.filter(N);return(0,o.createComponentVNode)(2,i.Section,{className:"Exofab__designs",title:(0,o.createComponentVNode)(2,i.Dropdown,{selected:d,options:u,onSelected:function(e){return r("category",{cat:e})},width:"150px"}),height:"100%",buttons:(0,o.createComponentVNode)(2,i.Box,{mt:"-18px",children:[(0,o.createComponentVNode)(2,i.Button,{icon:"plus",content:"Queue all",onClick:function(){return r("queueall")}}),(0,o.createComponentVNode)(2,i.Button,{disabled:m,iconSpin:m,icon:"sync-alt",content:m?"Synchronizing...":"Synchronize with R&D servers",onClick:function(){return r("sync")}})]}),children:[(0,o.createComponentVNode)(2,i.Input,{placeholder:"Search by name...",mb:"0.5rem",width:"100%",onInput:function(e,t){return h(t)}}),b.map((function(e){return(0,o.createComponentVNode)(2,C,{design:e},e.id)})),0===b.length&&(0,o.createComponentVNode)(2,i.Box,{color:"label",children:"No designs found."})]})},p=function(e,t){var n=(0,c.useBackend)(t),r=(n.act,n.data),a=r.building,d=r.buildStart,u=r.buildEnd,s=r.worldTime;return(0,o.createComponentVNode)(2,i.Section,{className:"Exofab__building",stretchContents:!0,children:(0,o.createComponentVNode)(2,i.ProgressBar.Countdown,{start:d,current:s,end:u,bold:!0,children:[(0,o.createComponentVNode)(2,i.Box,{float:"left",children:(0,o.createComponentVNode)(2,i.Icon,{name:"cog",spin:!0})}),"Building ",a,"\xa0(",(0,o.createComponentVNode)(2,l.Countdown,{current:s,timeLeft:u-s,format:function(e,t){return t.substr(3)}}),")"]})})},f=function(e,t){var n=(0,c.useBackend)(t),r=n.act,a=n.data,l=a.queue,d=a.processingQueue,u=Object.entries(a.queueDeficit).filter((function(e){return e[1]<0})),s=l.reduce((function(e,t){return e+t.time}),0);return(0,o.createComponentVNode)(2,i.Section,{className:"Exofab__queue",title:"Queue",buttons:(0,o.createComponentVNode)(2,i.Box,{children:[(0,o.createComponentVNode)(2,i.Button,{selected:d,icon:d?"toggle-on":"toggle-off",content:"Process",onClick:function(){return r("process")}}),(0,o.createComponentVNode)(2,i.Button,{disabled:0===l.length,icon:"eraser",content:"Clear",onClick:function(){return r("unqueueall")}})]}),children:(0,o.createComponentVNode)(2,i.Flex,{height:"100%",direction:"column",children:0===l.length?(0,o.createComponentVNode)(2,i.Box,{color:"label",children:"The queue is empty."}):(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Flex.Item,{className:"Exofab__queue--queue",grow:"1",overflow:"auto",children:l.map((function(e,t){return(0,o.createComponentVNode)(2,i.Box,{color:e.notEnough&&"bad",children:[t+1,". ",e.name,t>0&&(0,o.createComponentVNode)(2,i.Button,{icon:"arrow-up",onClick:function(){return r("queueswap",{from:t+1,to:t})}}),t0&&(0,o.createComponentVNode)(2,i.Flex.Item,{className:"Exofab__queue--time",basis:"content",shrink:"0",children:[(0,o.createComponentVNode)(2,i.Divider),"Processing time:",(0,o.createComponentVNode)(2,i.Icon,{name:"clock",mx:"0.5rem"}),(0,o.createComponentVNode)(2,i.Box,{display:"inline",bold:!0,children:new Date(s/10*1e3).toISOString().substr(14,5)})]}),Object.keys(u).length>0&&(0,o.createComponentVNode)(2,i.Flex.Item,{className:"Exofab__queue--deficit",basis:"content",shrink:"0",children:[(0,o.createComponentVNode)(2,i.Divider),"Lacking materials to complete:",u.map((function(e){return(0,o.createComponentVNode)(2,i.Box,{children:(0,o.createComponentVNode)(2,h,{id:e[0],amount:-e[1],lineDisplay:!0})},e[0])}))]})],0)})})},h=function(e,t){var n=(0,c.useBackend)(t),a=(n.act,n.data),l=e.id,d=e.amount,s=e.lineDisplay,m=e.onClick,p=function(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o=0||(r[n]=e[n]);return r}(e,["id","amount","lineDisplay","onClick"]),f=l.replace("$",""),h=a.materials[l]||0,C=d||h;if(!(C<=0&&"metal"!==f&&"glass"!==f)){var N=d&&d>h;return(0,o.normalizeProps)((0,o.createComponentVNode)(2,i.Flex,Object.assign({className:(0,r.classes)(["Exofab__material",s&&"Exofab__material--line"])},p,{children:[(0,o.createComponentVNode)(2,i.Flex.Item,{basis:"content",children:(0,o.createComponentVNode)(2,i.Button,{onClick:m,children:(0,o.createComponentVNode)(2,i.Box,{as:"img",src:"sheet-"+(u[f]||f)+".png"})})}),(0,o.createComponentVNode)(2,i.Flex.Item,{grow:"1",children:s?(0,o.createComponentVNode)(2,i.Box,{className:"Exofab__material--amount",color:N&&"bad",children:C.toLocaleString("en-US")}):(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Box,{className:"Exofab__material--name",children:f}),(0,o.createComponentVNode)(2,i.Box,{className:"Exofab__material--amount",children:[C.toLocaleString("en-US")," cm\xb3 (",Math.round(C/2e3*10)/10," sheets)"]})],4)})]})))}},C=function(e,t){var n=(0,c.useBackend)(t),r=n.act,a=n.data,l=e.design;return(0,o.createComponentVNode)(2,i.Box,{className:"Exofab__design",children:[(0,o.createComponentVNode)(2,i.Button,{disabled:l.notEnough||a.building,icon:"cog",content:l.name,onClick:function(){return r("build",{id:l.id})}}),(0,o.createComponentVNode)(2,i.Button,{icon:"plus-circle",onClick:function(){return r("queue",{id:l.id})}}),(0,o.createComponentVNode)(2,i.Box,{className:"Exofab__design--cost",children:Object.entries(l.cost).map((function(e){return(0,o.createComponentVNode)(2,i.Box,{children:(0,o.createComponentVNode)(2,h,{id:e[0],amount:e[1],lineDisplay:!0})},e[0])}))}),(0,o.createComponentVNode)(2,i.Box,{className:"Exofab__design--time",children:[(0,o.createComponentVNode)(2,i.Icon,{name:"clock"}),l.time>0?(0,o.createFragment)([l.time/10,(0,o.createTextVNode)(" seconds")],0):"Instant"]})]})}},function(e,t,n){"use strict";t.__esModule=!0,t.ExternalAirlockController=void 0;var o=n(0),r=n(1),a=n(2),c=n(4);t.ExternalAirlockController=function(e,t){var n,i,l=(0,r.useBackend)(t),d=l.act,u=l.data,s=u.chamber_pressure,m=(u.exterior_status,u.interior_status),p=u.processing;return(0,o.createComponentVNode)(2,c.Window,{children:(0,o.createComponentVNode)(2,c.Window.Content,{children:[(0,o.createComponentVNode)(2,a.Section,{title:"Information",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Chamber Pressure",children:(0,o.createComponentVNode)(2,a.ProgressBar,{color:(n=s,i="good",n<80?i="bad":n<95||n>110?i="average":n>120&&(i="bad"),i),value:s,minValue:0,maxValue:1013,children:[s," kPa"]})})})}),(0,o.createComponentVNode)(2,a.Section,{title:"Actions",children:[(0,o.createComponentVNode)(2,a.Box,{children:[(0,o.createComponentVNode)(2,a.Button,{content:"Cycle to Exterior",icon:"arrow-circle-left",disabled:p,onClick:function(){return d("cycle_ext")}}),(0,o.createComponentVNode)(2,a.Button,{content:"Cycle to Interior",icon:"arrow-circle-right",disabled:p,onClick:function(){return d("cycle_int")}})]}),(0,o.createComponentVNode)(2,a.Box,{children:[(0,o.createComponentVNode)(2,a.Button,{content:"Force Exterior Door",icon:"exclamation-triangle",color:"open"===m?"red":p?"yellow":null,onClick:function(){return d("force_ext")}}),(0,o.createComponentVNode)(2,a.Button,{content:"Force Interior Door",icon:"exclamation-triangle",color:"open"===m?"red":p?"yellow":null,onClick:function(){return d("force_int")}})]}),(0,o.createComponentVNode)(2,a.Box,{children:(0,o.createComponentVNode)(2,a.Button,{content:"Abort",icon:"ban",color:"red",disabled:!p,onClick:function(){return d("abort")}})})]})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.FaxMachine=void 0;var o=n(0),r=n(1),a=n(2),c=n(4);t.FaxMachine=function(e,t){var n=(0,r.useBackend)(t),i=n.act,l=n.data;return(0,o.createComponentVNode)(2,c.Window,{children:(0,o.createComponentVNode)(2,c.Window.Content,{children:[(0,o.createComponentVNode)(2,a.Section,{title:"Authorization",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"ID Card",children:(0,o.createComponentVNode)(2,a.Button,{icon:l.scan_name?"eject":"id-card",selected:l.scan_name,content:l.scan_name?l.scan_name:"-----",tooltip:l.scan_name?"Eject ID":"Insert ID",onClick:function(){return i("scan")}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Authorize",children:(0,o.createComponentVNode)(2,a.Button,{icon:l.authenticated?"sign-out-alt":"id-card",selected:l.authenticated,disabled:l.nologin,content:l.realauth?"Log Out":"Log In",onClick:function(){return i("auth")}})})]})}),(0,o.createComponentVNode)(2,a.Section,{title:"Fax Menu",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Network",children:l.network}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Document",children:[(0,o.createComponentVNode)(2,a.Button,{icon:l.paper?"eject":"paperclip",disabled:!l.authenticated&&!l.paper,content:l.paper?l.paper:"-----",onClick:function(){return i("paper")}}),!!l.paper&&(0,o.createComponentVNode)(2,a.Button,{icon:"pencil-alt",content:"Rename",onClick:function(){return i("rename")}})]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Sending To",children:(0,o.createComponentVNode)(2,a.Button,{icon:"print",content:l.destination?l.destination:"-----",disabled:!l.authenticated,onClick:function(){return i("dept")}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Action",children:(0,o.createComponentVNode)(2,a.Button,{icon:"envelope",content:l.sendError?l.sendError:"Send",disabled:!l.paper||!l.destination||!l.authenticated||l.sendError,onClick:function(){return i("send")}})})]})})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.FloorPainter=void 0;var o=n(0),r=n(1),a=n(2),c=n(4),i=function(e,t){var n=(0,r.useBackend)(t),a=(n.act,n.data,e.image),c=e.isSelected,i=e.onSelect;return(0,o.createVNode)(1,"img",null,null,1,{src:"data:image/jpeg;base64,"+a,style:{"border-style":c?"solid":"none","border-width":"2px","border-color":"orange",padding:c?"2px":"4px"},onClick:i})};t.FloorPainter=function(e,t){var n=(0,r.useBackend)(t),l=n.act,d=n.data,u=d.availableStyles,s=d.selectedStyle,m=d.selectedDir,p=d.directionsPreview,f=d.allStylesPreview;return(0,o.createComponentVNode)(2,c.Window,{resizable:!0,children:(0,o.createComponentVNode)(2,c.Window.Content,{scrollable:!0,children:(0,o.createComponentVNode)(2,a.Section,{title:"Decal setup",children:[(0,o.createComponentVNode)(2,a.Flex,{children:[(0,o.createComponentVNode)(2,a.Flex.Item,{children:(0,o.createComponentVNode)(2,a.Button,{icon:"chevron-left",onClick:function(){return l("cycle_style",{offset:-1})}})}),(0,o.createComponentVNode)(2,a.Flex.Item,{children:(0,o.createComponentVNode)(2,a.Dropdown,{options:u,selected:s,width:"150px",height:"20px",ml:"2px",mr:"2px",nochevron:"true",onSelected:function(e){return l("select_style",{style:e})}})}),(0,o.createComponentVNode)(2,a.Flex.Item,{children:(0,o.createComponentVNode)(2,a.Button,{icon:"chevron-right",onClick:function(){return l("cycle_style",{offset:1})}})})]}),(0,o.createComponentVNode)(2,a.Box,{mt:"5px",mb:"5px",children:(0,o.createComponentVNode)(2,a.Flex,{overflowY:"auto",maxHeight:"220px",wrap:"wrap",children:u.map((function(e){return(0,o.createComponentVNode)(2,a.Flex.Item,{children:(0,o.createComponentVNode)(2,i,{image:f[e],isSelected:s===e,onSelect:function(){return l("select_style",{style:e})}})},"{style}")}))})}),(0,o.createComponentVNode)(2,a.LabeledList,{children:(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Direction",children:(0,o.createComponentVNode)(2,a.Table,{style:{display:"inline"},children:["north","","south"].map((function(e){return(0,o.createComponentVNode)(2,a.Table.Row,{children:[e+"west",e,e+"east"].map((function(e){return(0,o.createComponentVNode)(2,a.Table.Cell,{style:{"vertical-align":"middle","text-align":"center"},children:""===e?(0,o.createComponentVNode)(2,a.Icon,{name:"arrows-alt",size:3}):(0,o.createComponentVNode)(2,i,{image:p[e],isSelected:e===m,onSelect:function(){return l("select_direction",{direction:e})}})},e)}))},e)}))})})})]})})})}},function(e,t,n){"use strict";t.__esModule=!0,t.GPS=void 0;var o=n(0),r=n(15),a=n(1),c=n(2),i=n(4),l=function(e){return e?"("+e.join(", ")+")":"ERROR"};t.GPS=function(e,t){var n=(0,a.useBackend)(t).data,r=n.emped,l=n.active,p=n.area,f=n.position,h=n.saved;return(0,o.createComponentVNode)(2,i.Window,{children:(0,o.createComponentVNode)(2,i.Window.Content,{children:(0,o.createComponentVNode)(2,c.Flex,{direction:"column",height:"100%",children:r?(0,o.createComponentVNode)(2,c.Flex.Item,{grow:"1",basis:"0",children:(0,o.createComponentVNode)(2,d,{emp:!0})}):(0,o.createFragment)([(0,o.createComponentVNode)(2,c.Flex.Item,{children:(0,o.createComponentVNode)(2,u)}),l?(0,o.createFragment)([(0,o.createComponentVNode)(2,c.Flex.Item,{mt:"0.5rem",children:(0,o.createComponentVNode)(2,s,{area:p,position:f})}),h&&(0,o.createComponentVNode)(2,c.Flex.Item,{mt:"0.5rem",children:(0,o.createComponentVNode)(2,s,{title:"Saved Position",position:h})}),(0,o.createComponentVNode)(2,c.Flex.Item,{mt:"0.5rem",grow:"1",basis:"0",children:(0,o.createComponentVNode)(2,m,{height:"100%"})})],0):(0,o.createComponentVNode)(2,d)],0)})})})};var d=function(e,t){var n=e.emp;return(0,o.createComponentVNode)(2,c.Section,{mt:"0.5rem",width:"100%",height:"100%",stretchContents:!0,children:(0,o.createComponentVNode)(2,c.Box,{width:"100%",height:"100%",color:"label",textAlign:"center",children:(0,o.createComponentVNode)(2,c.Flex,{height:"100%",children:(0,o.createComponentVNode)(2,c.Flex.Item,{grow:"1",align:"center",color:"label",children:[(0,o.createComponentVNode)(2,c.Icon,{name:n?"ban":"power-off",mb:"0.5rem",size:"5"}),(0,o.createVNode)(1,"br"),n?"ERROR: Device temporarily lost signal.":"Device is disabled."]})})})})},u=function(e,t){var n=(0,a.useBackend)(t),r=n.act,i=n.data,l=i.active,d=i.tag,u=i.same_z,s=(0,a.useLocalState)(t,"newTag",d),m=s[0],p=s[1];return(0,o.createComponentVNode)(2,c.Section,{title:"Settings",buttons:(0,o.createComponentVNode)(2,c.Button,{selected:l,icon:l?"toggle-on":"toggle-off",content:l?"On":"Off",onClick:function(){return r("toggle")}}),children:(0,o.createComponentVNode)(2,c.LabeledList,{children:[(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Tag",children:[(0,o.createComponentVNode)(2,c.Input,{width:"5rem",value:d,onEnter:function(){return r("tag",{newtag:m})},onInput:function(e,t){return p(t)}}),(0,o.createComponentVNode)(2,c.Button,{disabled:d===m,width:"20px",mb:"0",ml:"0.25rem",onClick:function(){return r("tag",{newtag:m})},children:(0,o.createComponentVNode)(2,c.Icon,{name:"pen"})})]}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Range",children:(0,o.createComponentVNode)(2,c.Button,{selected:!u,icon:u?"compress":"expand",content:u?"Local Sector":"Global",onClick:function(){return r("same_z")}})})]})})},s=function(e,t){var n=e.title,r=e.area,a=e.position;return(0,o.createComponentVNode)(2,c.Section,{title:n||"Position",children:(0,o.createComponentVNode)(2,c.Box,{fontSize:"1.5rem",children:[r&&(0,o.createFragment)([r,(0,o.createVNode)(1,"br")],0),l(a)]})})},m=function(e,t){var n=(0,a.useBackend)(t).data,i=n.position,d=n.signals;return(0,o.normalizeProps)((0,o.createComponentVNode)(2,c.Section,Object.assign({title:"Signals",overflow:"auto"},e,{children:(0,o.createComponentVNode)(2,c.Table,{children:d.map((function(e){return Object.assign({},e,{},function(e,t){if(e&&t){if(e[2]!==t[2])return null;var n=Math.atan2(t[1]-e[1],t[0]-e[0]),o=Math.sqrt(Math.pow(t[1]-e[1],2)+Math.pow(t[0]-e[0],2));return{angle:(0,r.rad2deg)(n),distance:o}}}(i,e.position))})).map((function(e,t){return(0,o.createComponentVNode)(2,c.Table.Row,{backgroundColor:t%2==0&&"rgba(255, 255, 255, 0.05)",children:[(0,o.createComponentVNode)(2,c.Table.Cell,{width:"30%",verticalAlign:"middle",color:"label",p:"0.25rem",bold:!0,children:e.tag}),(0,o.createComponentVNode)(2,c.Table.Cell,{verticalAlign:"middle",color:"grey",children:e.area}),(0,o.createComponentVNode)(2,c.Table.Cell,{verticalAlign:"middle",collapsing:!0,children:e.distance!==undefined&&(0,o.createComponentVNode)(2,c.Box,{opacity:Math.max(1-Math.min(e.distance,100)/100,.5),children:[(0,o.createComponentVNode)(2,c.Icon,{name:e.distance>0?"arrow-right":"circle",rotation:-e.angle}),"\xa0",Math.floor(e.distance)+"m"]})}),(0,o.createComponentVNode)(2,c.Table.Cell,{verticalAlign:"middle",pr:"0.25rem",collapsing:!0,children:l(e.position)})]},t)}))})})))}},function(e,t,n){"use strict";t.__esModule=!0,t.GenericCrewManifest=void 0;var o=n(0),r=n(2),a=n(4),c=n(135);t.GenericCrewManifest=function(e,t){return(0,o.createComponentVNode)(2,a.Window,{resizable:!0,theme:"nologo",children:(0,o.createComponentVNode)(2,a.Window.Content,{scrollable:!0,children:(0,o.createComponentVNode)(2,r.Section,{noTopPadding:!0,children:(0,o.createComponentVNode)(2,c.CrewManifest)})})})}},function(e,t,n){"use strict";t.__esModule=!0,t.GhostHudPanel=void 0;var o=n(0),r=n(1),a=n(2),c=n(4);t.GhostHudPanel=function(e,t){var n=(0,r.useBackend)(t).data,l=n.security,d=n.medical,u=n.diagnostic,s=n.radioactivity,m=n.ahud;return(0,o.createComponentVNode)(2,c.Window,{theme:"nologo",children:(0,o.createComponentVNode)(2,c.Window.Content,{children:(0,o.createComponentVNode)(2,a.Section,{children:[(0,o.createComponentVNode)(2,i,{label:"Medical",type:"medical",is_active:d}),(0,o.createComponentVNode)(2,i,{label:"Security",type:"security",is_active:l}),(0,o.createComponentVNode)(2,i,{label:"Diagnostic",type:"diagnostic",is_active:u}),(0,o.createComponentVNode)(2,a.Divider),(0,o.createComponentVNode)(2,i,{label:"Radioactivity",type:"radioactivity",is_active:s,act_on:"rads_on",act_off:"rads_off"}),(0,o.createComponentVNode)(2,a.Divider),(0,o.createComponentVNode)(2,i,{label:"Antag HUD",is_active:m,act_on:"ahud_on",act_off:"ahud_off"})]})})})};var i=function(e,t){var n=(0,r.useBackend)(t).act,c=e.label,i=e.type,l=void 0===i?null:i,d=e.is_active,u=e.act_on,s=void 0===u?"hud_on":u,m=e.act_off,p=void 0===m?"hud_off":m;return(0,o.createComponentVNode)(2,a.Flex,{pt:.3,color:"label",children:[(0,o.createComponentVNode)(2,a.Flex.Item,{pl:.5,align:"center",width:"80%",children:c}),(0,o.createComponentVNode)(2,a.Flex.Item,{children:(0,o.createComponentVNode)(2,a.Button,{mr:.6,content:d?"On":"Off",icon:d?"toggle-on":"toggle-off",selected:d,onClick:function(){return n(d?p:s,{hud_type:l})}})})]})}},function(e,t,n){"use strict";t.__esModule=!0,t.GravityGen=void 0;var o=n(0),r=n(1),a=n(2),c=n(4);t.GravityGen=function(e,t){var n,i=(0,r.useBackend)(t),l=i.act,d=i.data,u=d.charging_state,s=d.charge_count,m=d.breaker,p=d.ext_power;return(0,o.createComponentVNode)(2,c.Window,{children:(0,o.createComponentVNode)(2,c.Window.Content,{children:[function(e){if(e>0)return(0,o.createComponentVNode)(2,a.NoticeBox,{danger:!0,p:1.5,children:[(0,o.createVNode)(1,"b",null,"WARNING:",16)," Radiation Detected!"]})}(u),(0,o.createComponentVNode)(2,a.Section,{title:"Generator Status",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:m?"power-off":"times",content:m?"Online":"Offline",color:m?"green":"red",px:1.5,onClick:function(){return l("breaker")}}),children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Power Status",color:p?"good":"bad",children:(n=u,n>0?(0,o.createComponentVNode)(2,a.Box,{inline:!0,color:"average",children:["[ ",1===n?"Charging":"Discharging"," ]"]}):(0,o.createComponentVNode)(2,a.Box,{inline:!0,color:p?"good":"bad",children:["[ ",p?"Powered":"Unpowered"," ]"]}))}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Gravity Charge",children:(0,o.createComponentVNode)(2,a.ProgressBar,{value:s/100,ranges:{good:[.9,Infinity],average:[.5,.9],bad:[-Infinity,.5]}})})]})})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.GuestPass=void 0;var o=n(0),r=n(1),a=n(2),c=n(4),i=n(78);t.GuestPass=function(e,t){var n=(0,r.useBackend)(t),l=n.act,d=n.data;return(0,o.createComponentVNode)(2,c.Window,{resizable:!0,children:(0,o.createComponentVNode)(2,c.Window.Content,{scrollable:!0,children:[(0,o.createComponentVNode)(2,a.Tabs,{children:[(0,o.createComponentVNode)(2,a.Tabs.Tab,{icon:"id-card",selected:!d.showlogs,onClick:function(){return l("mode",{mode:0})},children:"Issue Pass"}),(0,o.createComponentVNode)(2,a.Tabs.Tab,{icon:"scroll",selected:d.showlogs,onClick:function(){return l("mode",{mode:1})},children:["Records (",d.issue_log.length,")"]})]}),(0,o.createComponentVNode)(2,a.Section,{title:"Authorization",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"ID Card",children:(0,o.createComponentVNode)(2,a.Button,{icon:d.scan_name?"eject":"id-card",selected:d.scan_name,content:d.scan_name?d.scan_name:"-----",tooltip:d.scan_name?"Eject ID":"Insert ID",onClick:function(){return l("scan")}})})})}),!d.showlogs&&(0,o.createComponentVNode)(2,a.Section,{title:"Issue Guest Pass",children:[(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Issue To",children:(0,o.createComponentVNode)(2,a.Button,{icon:"pencil-alt",content:d.giv_name?d.giv_name:"-----",disabled:!d.scan_name,onClick:function(){return l("giv_name")}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Reason",children:(0,o.createComponentVNode)(2,a.Button,{icon:"pencil-alt",content:d.reason?d.reason:"-----",disabled:!d.scan_name,onClick:function(){return l("reason")}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Duration",children:(0,o.createComponentVNode)(2,a.Button,{icon:"pencil-alt",content:d.duration?d.duration:"-----",disabled:!d.scan_name,onClick:function(){return l("duration")}})})]}),!!d.scan_name&&(0,o.createFragment)([(0,o.createComponentVNode)(2,i.AccessList,{grantableList:d.grantableList,accesses:d.regions,selectedList:d.selectedAccess,accessMod:function(e){return l("access",{access:e})},grantAll:function(){return l("grant_all")},denyAll:function(){return l("clear_all")},grantDep:function(e){return l("grant_region",{region:e})},denyDep:function(e){return l("deny_region",{region:e})}}),(0,o.createComponentVNode)(2,a.Button,{icon:"id-card",content:d.printmsg,disabled:!d.canprint,onClick:function(){return l("issue")}})],4)]}),!!d.showlogs&&(0,o.createComponentVNode)(2,a.Section,{title:"Issuance Log",children:!!d.issue_log.length&&(0,o.createFragment)([(0,o.createComponentVNode)(2,a.LabeledList,{children:d.issue_log.map((function(e,t){return(0,o.createComponentVNode)(2,a.LabeledList.Item,{children:e},t)}))}),(0,o.createComponentVNode)(2,a.Button,{icon:"print",content:"Print",disabled:!d.scan_name,onClick:function(){return l("print")}})],4)||(0,o.createComponentVNode)(2,a.Box,{children:"None."})})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.HandheldChemDispenser=void 0;var o=n(0),r=n(1),a=n(2),c=n(4),i=[1,5,10,20,30,50];t.HandheldChemDispenser=function(e,t){return(0,o.createComponentVNode)(2,c.Window,{resizable:!0,children:(0,o.createComponentVNode)(2,c.Window.Content,{className:"Layout__content--flexColumn",children:[(0,o.createComponentVNode)(2,l),(0,o.createComponentVNode)(2,d)]})})};var l=function(e,t){var n=(0,r.useBackend)(t),c=n.act,l=n.data,d=l.amount,u=l.energy,s=l.maxEnergy,m=l.mode;return(0,o.createComponentVNode)(2,a.Section,{title:"Settings",flex:"content",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Energy",children:(0,o.createComponentVNode)(2,a.ProgressBar,{value:u,minValue:0,maxValue:s,ranges:{good:[.5*s,Infinity],average:[.25*s,.5*s],bad:[-Infinity,.25*s]},children:[u," / ",s," Units"]})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Amount",verticalAlign:"middle",children:(0,o.createComponentVNode)(2,a.Flex,{direction:"row",spacing:"1",children:i.map((function(e,t){return(0,o.createComponentVNode)(2,a.Flex.Item,{grow:"1",width:"14%",display:"inline-block",children:(0,o.createComponentVNode)(2,a.Button,{icon:"cog",selected:d===e,content:e,m:"0",width:"100%",onClick:function(){return c("amount",{amount:e})}})},t)}))})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Mode",verticalAlign:"middle",children:(0,o.createComponentVNode)(2,a.Flex,{direction:"row",justify:"space-between",children:[(0,o.createComponentVNode)(2,a.Button,{icon:"cog",selected:"dispense"===m,content:"Dispense",m:"0",width:"32%",onClick:function(){return c("mode",{mode:"dispense"})}}),(0,o.createComponentVNode)(2,a.Button,{icon:"cog",selected:"remove"===m,content:"Remove",m:"0",width:"32%",onClick:function(){return c("mode",{mode:"remove"})}}),(0,o.createComponentVNode)(2,a.Button,{icon:"cog",selected:"isolate"===m,content:"Isolate",m:"0",width:"32%",onClick:function(){return c("mode",{mode:"isolate"})}})]})})]})})},d=function(e,t){for(var n=(0,r.useBackend)(t),c=n.act,i=n.data,l=i.chemicals,d=void 0===l?[]:l,u=i.current_reagent,s=[],m=0;m<(d.length+1)%3;m++)s.push(!0);return(0,o.createComponentVNode)(2,a.Section,{title:i.glass?"Drink Selector":"Chemical Selector",flexGrow:"1",children:(0,o.createComponentVNode)(2,a.Flex,{direction:"row",wrap:"wrap",height:"100%",spacingPrecise:"2",align:"flex-start",alignContent:"flex-start",children:[d.map((function(e,t){return(0,o.createComponentVNode)(2,a.Flex.Item,{grow:"1",basis:"25%",height:"20px",width:"30%",display:"inline-block",children:(0,o.createComponentVNode)(2,a.Button,{icon:"arrow-circle-down",overflow:"hidden",textOverflow:"ellipsis",selected:u===e.id,width:"100%",height:"100%",align:"flex-start",content:e.title,onClick:function(){return c("dispense",{reagent:e.id})}})},t)})),s.map((function(e,t){return(0,o.createComponentVNode)(2,a.Flex.Item,{grow:"1",basis:"25%",height:"20px"},t)}))]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.Instrument=void 0;var o=n(0),r=n(15),a=n(1),c=n(2),i=n(4);t.Instrument=function(e,t){var n=(0,a.useBackend)(t);n.act,n.data;return(0,o.createComponentVNode)(2,i.Window,{children:[(0,o.createComponentVNode)(2,l),(0,o.createComponentVNode)(2,i.Window.Content,{scrollable:!0,children:[(0,o.createComponentVNode)(2,d),(0,o.createComponentVNode)(2,s)]})]})};var l=function(e,t){var n=(0,a.useBackend)(t),r=n.act;if(n.data.help)return(0,o.createComponentVNode)(2,c.Modal,{maxWidth:"75%",height:.75*window.innerHeight+"px",mx:"auto",py:"0",px:"0.5rem",children:(0,o.createComponentVNode)(2,c.Section,{height:"100%",title:"Help",level:"2",overflow:"auto",children:(0,o.createComponentVNode)(2,c.Box,{px:"0.5rem",mt:"-0.5rem",children:[(0,o.createVNode)(1,"h1",null,"Making a Song",16),(0,o.createVNode)(1,"p",null,[(0,o.createTextVNode)("Lines are a series of chords, separated by commas\xa0"),(0,o.createComponentVNode)(2,c.Box,{as:"span",color:"highlight",children:"(,)"}),(0,o.createTextVNode)(", each with notes seperated by hyphens\xa0"),(0,o.createComponentVNode)(2,c.Box,{as:"span",color:"highlight",children:"(-)"}),(0,o.createTextVNode)("."),(0,o.createVNode)(1,"br"),(0,o.createTextVNode)("Every note in a chord will play together, with the chord timed by the\xa0"),(0,o.createComponentVNode)(2,c.Box,{as:"span",color:"highlight",children:"tempo"}),(0,o.createTextVNode)(" as defined above.")],4),(0,o.createVNode)(1,"p",null,[(0,o.createTextVNode)("Notes are played by the\xa0"),(0,o.createComponentVNode)(2,c.Box,{as:"span",color:"good",children:"names of the note"}),(0,o.createTextVNode)(", and optionally, the\xa0"),(0,o.createComponentVNode)(2,c.Box,{as:"span",color:"average",children:"accidental"}),(0,o.createTextVNode)(", and/or the "),(0,o.createComponentVNode)(2,c.Box,{as:"span",color:"bad",children:"octave number"}),(0,o.createTextVNode)("."),(0,o.createVNode)(1,"br"),(0,o.createTextVNode)("By default, every note is\xa0"),(0,o.createComponentVNode)(2,c.Box,{as:"span",color:"average",children:"natural"}),(0,o.createTextVNode)(" and in\xa0"),(0,o.createComponentVNode)(2,c.Box,{as:"span",color:"bad",children:"octave 3"}),(0,o.createTextVNode)(". Defining a different state for either is remembered for each "),(0,o.createComponentVNode)(2,c.Box,{as:"span",color:"good",children:"note"}),(0,o.createTextVNode)("."),(0,o.createVNode)(1,"ul",null,[(0,o.createVNode)(1,"li",null,[(0,o.createComponentVNode)(2,c.Box,{as:"span",color:"highlight",children:"Example:"}),(0,o.createTextVNode)("\xa0"),(0,o.createVNode)(1,"i",null,"C,D,E,F,G,A,B",16),(0,o.createTextVNode)(" will play a\xa0"),(0,o.createComponentVNode)(2,c.Box,{as:"span",color:"good",children:"C"}),(0,o.createTextVNode)("\xa0"),(0,o.createComponentVNode)(2,c.Box,{as:"span",color:"average",children:"major"}),(0,o.createTextVNode)(" scale.")],4),(0,o.createVNode)(1,"li",null,[(0,o.createTextVNode)("After a note has an\xa0"),(0,o.createComponentVNode)(2,c.Box,{as:"span",color:"average",children:"accidental"}),(0,o.createTextVNode)(" or\xa0"),(0,o.createComponentVNode)(2,c.Box,{as:"span",color:"bad",children:"octave"}),(0,o.createTextVNode)(" placed, it will be remembered:\xa0"),(0,o.createVNode)(1,"i",null,"C,C4,C#,C3",16),(0,o.createTextVNode)(" is "),(0,o.createVNode)(1,"i",null,"C3,C4,C4#,C3#",16)],4)],4)],4),(0,o.createVNode)(1,"p",null,[(0,o.createComponentVNode)(2,c.Box,{as:"span",color:"highlight",children:"Chords"}),(0,o.createTextVNode)("\xa0can be played simply by seperating each note with a hyphen: "),(0,o.createVNode)(1,"i",null,"A-C#,Cn-E,E-G#,Gn-B",16),(0,o.createTextVNode)("."),(0,o.createVNode)(1,"br"),(0,o.createTextVNode)("A "),(0,o.createComponentVNode)(2,c.Box,{as:"span",color:"highlight",children:"pause"}),(0,o.createTextVNode)("\xa0may be denoted by an empty chord: "),(0,o.createVNode)(1,"i",null,"C,E,,C,G",16),(0,o.createTextVNode)("."),(0,o.createVNode)(1,"br"),(0,o.createTextVNode)("To make a chord be a different time, end it with /x, where the chord length will be length defined by\xa0"),(0,o.createComponentVNode)(2,c.Box,{as:"span",color:"highlight",children:"tempo / x"}),(0,o.createTextVNode)(",\xa0"),(0,o.createComponentVNode)(2,c.Box,{as:"span",color:"highlight",children:"eg:"}),(0,o.createTextVNode)(" "),(0,o.createVNode)(1,"i",null,"C,G/2,E/4",16),(0,o.createTextVNode)(".")],4),(0,o.createVNode)(1,"p",null,[(0,o.createTextVNode)("Combined, an example line is: "),(0,o.createVNode)(1,"i",null,"E-E4/4,F#/2,G#/8,B/8,E3-E4/4",16),(0,o.createTextVNode)("."),(0,o.createVNode)(1,"ul",null,[(0,o.createVNode)(1,"li",null,"Lines may be up to 300 characters.",16),(0,o.createVNode)(1,"li",null,"A song may only contain up to 1,000 lines.",16)],4)],4),(0,o.createVNode)(1,"p",null,[(0,o.createTextVNode)("Lines are a series of chords, separated by commas\xa0"),(0,o.createComponentVNode)(2,c.Box,{as:"span",color:"highlight",children:"(,)"}),(0,o.createTextVNode)(", each with notes seperated by hyphens\xa0"),(0,o.createComponentVNode)(2,c.Box,{as:"span",color:"highlight",children:"(-)"}),(0,o.createTextVNode)("."),(0,o.createVNode)(1,"br"),(0,o.createTextVNode)("Every note in a chord will play together, with the chord timed by the\xa0"),(0,o.createComponentVNode)(2,c.Box,{as:"span",color:"highlight",children:"tempo"}),(0,o.createTextVNode)(" as defined above.")],4),(0,o.createVNode)(1,"p",null,[(0,o.createTextVNode)("Notes are played by the\xa0"),(0,o.createComponentVNode)(2,c.Box,{as:"span",color:"good",children:"names of the note"}),(0,o.createTextVNode)(", and optionally, the\xa0"),(0,o.createComponentVNode)(2,c.Box,{as:"span",color:"average",children:"accidental"}),(0,o.createTextVNode)(", and/or the "),(0,o.createComponentVNode)(2,c.Box,{as:"span",color:"bad",children:"octave number"}),(0,o.createTextVNode)("."),(0,o.createVNode)(1,"br"),(0,o.createTextVNode)("By default, every note is\xa0"),(0,o.createComponentVNode)(2,c.Box,{as:"span",color:"average",children:"natural"}),(0,o.createTextVNode)(" and in\xa0"),(0,o.createComponentVNode)(2,c.Box,{as:"span",color:"bad",children:"octave 3"}),(0,o.createTextVNode)(". Defining a different state for either is remembered for each "),(0,o.createComponentVNode)(2,c.Box,{as:"span",color:"good",children:"note"}),(0,o.createTextVNode)("."),(0,o.createVNode)(1,"ul",null,[(0,o.createVNode)(1,"li",null,[(0,o.createComponentVNode)(2,c.Box,{as:"span",color:"highlight",children:"Example:"}),(0,o.createTextVNode)("\xa0"),(0,o.createVNode)(1,"i",null,"C,D,E,F,G,A,B",16),(0,o.createTextVNode)(" will play a\xa0"),(0,o.createComponentVNode)(2,c.Box,{as:"span",color:"good",children:"C"}),(0,o.createTextVNode)("\xa0"),(0,o.createComponentVNode)(2,c.Box,{as:"span",color:"average",children:"major"}),(0,o.createTextVNode)(" scale.")],4),(0,o.createVNode)(1,"li",null,[(0,o.createTextVNode)("After a note has an\xa0"),(0,o.createComponentVNode)(2,c.Box,{as:"span",color:"average",children:"accidental"}),(0,o.createTextVNode)(" or\xa0"),(0,o.createComponentVNode)(2,c.Box,{as:"span",color:"bad",children:"octave"}),(0,o.createTextVNode)(" placed, it will be remembered:\xa0"),(0,o.createVNode)(1,"i",null,"C,C4,C#,C3",16),(0,o.createTextVNode)(" is "),(0,o.createVNode)(1,"i",null,"C3,C4,C4#,C3#",16)],4)],4)],4),(0,o.createVNode)(1,"p",null,[(0,o.createComponentVNode)(2,c.Box,{as:"span",color:"highlight",children:"Chords"}),(0,o.createTextVNode)("\xa0can be played simply by seperating each note with a hyphen: "),(0,o.createVNode)(1,"i",null,"A-C#,Cn-E,E-G#,Gn-B",16),(0,o.createTextVNode)("."),(0,o.createVNode)(1,"br"),(0,o.createTextVNode)("A "),(0,o.createComponentVNode)(2,c.Box,{as:"span",color:"highlight",children:"pause"}),(0,o.createTextVNode)("\xa0may be denoted by an empty chord: "),(0,o.createVNode)(1,"i",null,"C,E,,C,G",16),(0,o.createTextVNode)("."),(0,o.createVNode)(1,"br"),(0,o.createTextVNode)("To make a chord be a different time, end it with /x, where the chord length will be length defined by\xa0"),(0,o.createComponentVNode)(2,c.Box,{as:"span",color:"highlight",children:"tempo / x"}),(0,o.createTextVNode)(",\xa0"),(0,o.createComponentVNode)(2,c.Box,{as:"span",color:"highlight",children:"eg:"}),(0,o.createTextVNode)(" "),(0,o.createVNode)(1,"i",null,"C,G/2,E/4",16),(0,o.createTextVNode)(".")],4),(0,o.createVNode)(1,"p",null,[(0,o.createTextVNode)("Combined, an example line is: "),(0,o.createVNode)(1,"i",null,"E-E4/4,F#/2,G#/8,B/8,E3-E4/4",16),(0,o.createTextVNode)("."),(0,o.createVNode)(1,"ul",null,[(0,o.createVNode)(1,"li",null,"Lines may be up to 300 characters.",16),(0,o.createVNode)(1,"li",null,"A song may only contain up to 1,000 lines.",16)],4)],4),(0,o.createVNode)(1,"h1",null,"Instrument Advanced Settings",16),(0,o.createVNode)(1,"ul",null,[(0,o.createVNode)(1,"li",null,[(0,o.createComponentVNode)(2,c.Box,{as:"span",color:"label",children:"Type:"}),(0,o.createTextVNode)("\xa0Whether the instrument is legacy or synthesized."),(0,o.createVNode)(1,"br"),(0,o.createTextVNode)("Legacy instruments have a collection of sounds that are selectively used depending on the note to play."),(0,o.createVNode)(1,"br"),(0,o.createTextVNode)("Synthesized instruments use a base sound and change its pitch to match the note to play.")],4),(0,o.createVNode)(1,"li",null,[(0,o.createComponentVNode)(2,c.Box,{as:"span",color:"label",children:"Current:"}),(0,o.createTextVNode)("\xa0Which instrument sample to play. Some instruments can be tuned to play different samples. Experiment!")],4),(0,o.createVNode)(1,"li",null,[(0,o.createComponentVNode)(2,c.Box,{as:"span",color:"label",children:"Note Shift/Note Transpose:"}),(0,o.createTextVNode)("\xa0The pitch to apply to all notes of the song.")],4),(0,o.createVNode)(1,"li",null,[(0,o.createComponentVNode)(2,c.Box,{as:"span",color:"label",children:"Sustain Mode:"}),(0,o.createTextVNode)("\xa0How a played note fades out."),(0,o.createVNode)(1,"br"),(0,o.createTextVNode)("Linear sustain means a note will fade out at a constant rate."),(0,o.createVNode)(1,"br"),(0,o.createTextVNode)("Exponential sustain means a note will fade out at an exponential rate, sounding smoother.")],4),(0,o.createVNode)(1,"li",null,[(0,o.createComponentVNode)(2,c.Box,{as:"span",color:"label",children:"Volume Dropoff Threshold:"}),(0,o.createTextVNode)("\xa0The volume threshold at which a note is fully stopped.")],4),(0,o.createVNode)(1,"li",null,[(0,o.createComponentVNode)(2,c.Box,{as:"span",color:"label",children:"Sustain indefinitely last held note:"}),(0,o.createTextVNode)("\xa0Whether the last note should be sustained indefinitely.")],4)],4),(0,o.createComponentVNode)(2,c.Button,{color:"grey",content:"Close",onClick:function(){return r("help")}})]})})})},d=function(e,t){var n=(0,a.useBackend)(t),i=n.act,l=n.data,d=l.lines,s=l.playing,m=l.repeat,p=l.maxRepeats,f=l.tempo,h=l.minTempo,C=l.maxTempo,N=l.tickLag,b=l.volume,g=l.minVolume,V=l.maxVolume,v=l.ready;return(0,o.createComponentVNode)(2,c.Section,{title:"Instrument",buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,c.Button,{icon:"info",content:"Help",onClick:function(){return i("help")}}),(0,o.createComponentVNode)(2,c.Button,{icon:"file",content:"New",onClick:function(){return i("newsong")}}),(0,o.createComponentVNode)(2,c.Button,{icon:"upload",content:"Import",onClick:function(){return i("import")}})],4),children:[(0,o.createComponentVNode)(2,c.LabeledList,{children:[(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Playback",children:[(0,o.createComponentVNode)(2,c.Button,{selected:s,disabled:0===d.length||m<0,icon:"play",content:"Play",onClick:function(){return i("play")}}),(0,o.createComponentVNode)(2,c.Button,{disabled:!s,icon:"stop",content:"Stop",onClick:function(){return i("stop")}})]}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Repeat",children:(0,o.createComponentVNode)(2,c.Slider,{animated:!0,minValue:"0",maxValue:p,value:m,stepPixelSize:"59",onChange:function(e,t){return i("repeat",{"new":t})}})}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Tempo",children:(0,o.createComponentVNode)(2,c.Box,{children:[(0,o.createComponentVNode)(2,c.Button,{disabled:f>=C,content:"-",as:"span",mr:"0.5rem",onClick:function(){return i("tempo",{"new":f+N})}}),(0,r.round)(600/f)," BPM",(0,o.createComponentVNode)(2,c.Button,{disabled:f<=h,content:"+",as:"span",ml:"0.5rem",onClick:function(){return i("tempo",{"new":f-N})}})]})}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Volume",children:(0,o.createComponentVNode)(2,c.Slider,{animated:!0,minValue:g,maxValue:V,value:b,stepPixelSize:"6",onDrag:function(e,t){return i("setvolume",{"new":t})}})}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Status",children:v?(0,o.createComponentVNode)(2,c.Box,{color:"good",children:"Ready"}):(0,o.createComponentVNode)(2,c.Box,{color:"bad",children:"Instrument Definition Error!"})})]}),(0,o.createComponentVNode)(2,u)]})},u=function(e,t){var n,i,l=(0,a.useBackend)(t),d=l.act,u=l.data,s=u.allowedInstrumentNames,m=u.instrumentLoaded,p=u.instrument,f=u.canNoteShift,h=u.noteShift,C=u.noteShiftMin,N=u.noteShiftMax,b=u.sustainMode,g=u.sustainLinearDuration,V=u.sustainExponentialDropoff,v=u.legacy,y=u.sustainDropoffVolume,_=u.sustainHeldNote;return 1===b?(n="Linear",i=(0,o.createComponentVNode)(2,c.Slider,{minValue:"0.1",maxValue:"5",value:g,step:"0.5",stepPixelSize:"85",format:function(e){return(0,r.round)(100*e)/100+" seconds"},onChange:function(e,t){return d("setlinearfalloff",{"new":t/10})}})):2===b&&(n="Exponential",i=(0,o.createComponentVNode)(2,c.Slider,{minValue:"1.025",maxValue:"10",value:V,step:"0.01",format:function(e){return(0,r.round)(1e3*e)/1e3+"% per decisecond"},onChange:function(e,t){return d("setexpfalloff",{"new":t})}})),s.sort(),(0,o.createComponentVNode)(2,c.Box,{my:-1,children:(0,o.createComponentVNode)(2,c.Collapsible,{mt:"1rem",mb:"0",title:"Advanced",children:(0,o.createComponentVNode)(2,c.Section,{mt:-1,children:[(0,o.createComponentVNode)(2,c.LabeledList,{children:[(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Type",children:v?"Legacy":"Synthesized"}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Current",children:m?(0,o.createComponentVNode)(2,c.Dropdown,{options:s,selected:p,width:"40%",onSelected:function(e){return d("switchinstrument",{name:e})}}):(0,o.createComponentVNode)(2,c.Box,{color:"bad",children:"None!"})}),!(v||!f)&&(0,o.createFragment)([(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Note Shift/Note Transpose",children:(0,o.createComponentVNode)(2,c.Slider,{minValue:C,maxValue:N,value:h,stepPixelSize:"2",format:function(e){return e+" keys / "+(0,r.round)(e/12*100)/100+" octaves"},onChange:function(e,t){return d("setnoteshift",{"new":t})}})}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Sustain Mode",children:[(0,o.createComponentVNode)(2,c.Dropdown,{options:["Linear","Exponential"],selected:n,onSelected:function(e){return d("setsustainmode",{"new":e})}}),i]}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Volume Dropoff Threshold",children:(0,o.createComponentVNode)(2,c.Slider,{animated:!0,minValue:"0.01",maxValue:"100",value:y,stepPixelSize:"6",onChange:function(e,t){return d("setdropoffvolume",{"new":t})}})}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Sustain indefinitely last held note",children:(0,o.createComponentVNode)(2,c.Button,{selected:_,icon:_?"toggle-on":"toggle-off",content:_?"Yes":"No",onClick:function(){return d("togglesustainhold")}})})],4)]}),(0,o.createComponentVNode)(2,c.Button,{icon:"redo",content:"Reset to Default",mt:"0.5rem",onClick:function(){return d("reset")}})]})})})},s=function(e,t){var n=(0,a.useBackend)(t),r=n.act,i=n.data,l=i.playing,d=i.lines,u=i.editing;return(0,o.createComponentVNode)(2,c.Section,{title:"Editor",buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,c.Button,{disabled:!u||l,icon:"plus",content:"Add Line",onClick:function(){return r("newline",{line:d.length+1})}}),(0,o.createComponentVNode)(2,c.Button,{selected:!u,icon:u?"chevron-up":"chevron-down",onClick:function(){return r("edit")}})],4),children:!!u&&(d.length>0?(0,o.createComponentVNode)(2,c.LabeledList,{children:d.map((function(e,t){return(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:t+1,buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,c.Button,{disabled:l,icon:"pen",onClick:function(){return r("modifyline",{line:t+1})}}),(0,o.createComponentVNode)(2,c.Button,{disabled:l,icon:"trash",onClick:function(){return r("deleteline",{line:t+1})}})],4),children:e},t)}))}):(0,o.createComponentVNode)(2,c.Box,{color:"label",children:"Song is empty."}))})}},function(e,t,n){"use strict";t.__esModule=!0,t.KeycardAuth=void 0;var o=n(0),r=n(1),a=n(2),c=n(4);t.KeycardAuth=function(e,t){var n=(0,r.useBackend)(t),i=n.act,l=n.data,d=(0,o.createComponentVNode)(2,a.Section,{title:"Keycard Authentication Device",children:(0,o.createComponentVNode)(2,a.Box,{children:"This device is used to trigger certain high security events. It requires the simultaneous swipe of two high-level ID cards."})});if(l.swiping||l.busy){var u=(0,o.createComponentVNode)(2,a.Box,{color:"red",children:"Waiting for YOU to swipe your ID..."});return l.hasSwiped||l.ertreason||"Emergency Response Team"!==l.event?l.hasConfirm?u=(0,o.createComponentVNode)(2,a.Box,{color:"green",children:"Request Confirmed!"}):l.isRemote?u=(0,o.createComponentVNode)(2,a.Box,{color:"orange",children:"Swipe your card to CONFIRM the remote request."}):l.hasSwiped&&(u=(0,o.createComponentVNode)(2,a.Box,{color:"orange",children:"Waiting for second person to confirm..."})):u=(0,o.createComponentVNode)(2,a.Box,{color:"red",children:"Fill out the reason for your ERT request."}),(0,o.createComponentVNode)(2,c.Window,{children:(0,o.createComponentVNode)(2,c.Window.Content,{children:[d,"Emergency Response Team"===l.event&&(0,o.createComponentVNode)(2,a.Section,{title:"Reason for ERT Call",children:(0,o.createComponentVNode)(2,a.Box,{children:(0,o.createComponentVNode)(2,a.Button,{color:l.ertreason?"":"red",icon:l.ertreason?"check":"pencil-alt",content:l.ertreason?l.ertreason:"-----",disabled:l.busy,onClick:function(){return i("ert")}})})}),(0,o.createComponentVNode)(2,a.Section,{title:l.event,buttons:(0,o.createComponentVNode)(2,a.Button,{icon:"arrow-circle-left",content:"Back",disabled:l.busy||l.hasConfirm,onClick:function(){return i("reset")}}),children:u})]})})}return(0,o.createComponentVNode)(2,c.Window,{children:(0,o.createComponentVNode)(2,c.Window.Content,{children:[d,(0,o.createComponentVNode)(2,a.Section,{title:"Choose Action",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Red Alert",children:(0,o.createComponentVNode)(2,a.Button,{icon:"exclamation-triangle",disabled:!l.redAvailable,onClick:function(){return i("triggerevent",{triggerevent:"Red Alert"})},content:"Red Alert"})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"ERT",children:(0,o.createComponentVNode)(2,a.Button,{icon:"broadcast-tower",onClick:function(){return i("triggerevent",{triggerevent:"Emergency Response Team"})},content:"Call ERT"})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Emergency Maint Access",children:[(0,o.createComponentVNode)(2,a.Button,{icon:"door-open",onClick:function(){return i("triggerevent",{triggerevent:"Grant Emergency Maintenance Access"})},content:"Grant"}),(0,o.createComponentVNode)(2,a.Button,{icon:"door-closed",onClick:function(){return i("triggerevent",{triggerevent:"Revoke Emergency Maintenance Access"})},content:"Revoke"})]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Emergency Station-Wide Access",children:[(0,o.createComponentVNode)(2,a.Button,{icon:"door-open",onClick:function(){return i("triggerevent",{triggerevent:"Activate Station-Wide Emergency Access"})},content:"Grant"}),(0,o.createComponentVNode)(2,a.Button,{icon:"door-closed",onClick:function(){return i("triggerevent",{triggerevent:"Deactivate Station-Wide Emergency Access"})},content:"Revoke"})]})]})})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.LaborClaimConsole=void 0;var o=n(0),r=n(19),a=n(1),c=n(2),i=n(4);t.LaborClaimConsole=function(e,t){return(0,o.createComponentVNode)(2,i.Window,{children:(0,o.createComponentVNode)(2,i.Window.Content,{children:[(0,o.createComponentVNode)(2,l),(0,o.createComponentVNode)(2,d)]})})};var l=function(e,t){var n=(0,a.useBackend)(t),r=n.act,i=n.data,l=i.can_go_home,d=i.emagged,u=i.id_inserted,s=i.id_name,m=i.id_points,p=i.id_goal,f=i.unclaimed_points,h=d?0:1,C=d?"ERR0R":l?"Completed!":"Insufficient";return(0,o.createComponentVNode)(2,c.Section,{children:(0,o.createComponentVNode)(2,c.LabeledList,{children:[(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Status",children:!!u&&(0,o.createComponentVNode)(2,c.ProgressBar,{value:m/p,ranges:{good:[h,Infinity],bad:[-Infinity,h]},children:m+" / "+p+" "+C})||!!d&&"ERR0R COMPLETED?!@"||"No ID inserted"}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Shuttle controls",children:(0,o.createComponentVNode)(2,c.Button,{fluid:!0,content:"Move shuttle",disabled:!l,onClick:function(){return r("move_shuttle")}})}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Unclaimed points",children:(0,o.createComponentVNode)(2,c.Button,{fluid:!0,content:"Claim points ("+f+")",disabled:!u||!f,onClick:function(){return r("claim_points")}})}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Inserted ID",children:(0,o.createComponentVNode)(2,c.Button,{fluid:!0,content:u?s:"-------------",onClick:function(){return r("handle_id")}})})]})})},d=function(e,t){var n=(0,a.useBackend)(t).data.ores;return(0,o.createComponentVNode)(2,c.Section,{title:"Material values",children:(0,o.createComponentVNode)(2,c.Table,{children:[(0,o.createComponentVNode)(2,c.Table.Row,{header:!0,children:[(0,o.createComponentVNode)(2,c.Table.Cell,{children:"Material"}),(0,o.createComponentVNode)(2,c.Table.Cell,{collapsing:!0,textAlign:"right",children:"Value"})]}),n.map((function(e){return(0,o.createComponentVNode)(2,c.Table.Row,{children:[(0,o.createComponentVNode)(2,c.Table.Cell,{children:(0,r.toTitleCase)(e.ore)}),(0,o.createComponentVNode)(2,c.Table.Cell,{collapsing:!0,textAlign:"right",children:(0,o.createComponentVNode)(2,c.Box,{color:"label",inline:!0,children:e.value})})]},e.ore)}))]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.LawManager=void 0;var o=n(0),r=n(1),a=n(2),c=n(4);t.LawManager=function(e,t){var n=(0,r.useBackend)(t),d=n.act,u=n.data,s=u.isAdmin,m=u.isSlaved,p=u.isMalf,f=u.isAIMalf,h=u.view;return(0,o.createComponentVNode)(2,c.Window,{children:(0,o.createComponentVNode)(2,c.Window.Content,{scrollable:!0,children:[!(!s||!m)&&(0,o.createComponentVNode)(2,a.NoticeBox,{children:["This unit is slaved to ",m,"."]}),!(!p&&!f)&&(0,o.createComponentVNode)(2,a.Box,{children:[(0,o.createComponentVNode)(2,a.Button,{content:"Law Management",selected:0===h,onClick:function(){return d("set_view",{set_view:0})}}),(0,o.createComponentVNode)(2,a.Button,{content:"Lawsets",selected:1===h,onClick:function(){return d("set_view",{set_view:1})}})]}),!(0!==h)&&(0,o.createComponentVNode)(2,i),!(1!==h)&&(0,o.createComponentVNode)(2,l)]})})};var i=function(e,t){var n=(0,r.useBackend)(t),c=n.act,i=n.data,l=i.has_zeroth_laws,u=i.zeroth_laws,s=i.has_ion_laws,m=i.ion_laws,p=i.ion_law_nr,f=i.has_inherent_laws,h=i.inherent_laws,C=i.has_supplied_laws,N=i.supplied_laws,b=i.channels,g=i.channel,V=i.isMalf,v=i.isAdmin,y=i.zeroth_law,_=i.ion_law,x=i.inherent_law,k=i.supplied_law,L=i.supplied_law_position;return(0,o.createFragment)([!!l&&(0,o.createComponentVNode)(2,d,{title:"ERR_NULL_VALUE",laws:u,ctx:t}),!!s&&(0,o.createComponentVNode)(2,d,{title:p,laws:m,ctx:t}),!!f&&(0,o.createComponentVNode)(2,d,{title:"Inherent",laws:h,ctx:t}),!!C&&(0,o.createComponentVNode)(2,d,{title:"Supplied",laws:N,ctx:t}),(0,o.createComponentVNode)(2,a.Section,{title:"Statement Settings",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Statement Channel",children:b.map((function(e){return(0,o.createComponentVNode)(2,a.Button,{content:e.channel,selected:e.channel===g,onClick:function(){return c("law_channel",{law_channel:e.channel})}},e.channel)}))}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"State Laws",children:(0,o.createComponentVNode)(2,a.Button,{content:"State Laws",onClick:function(){return c("state_laws")}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Law Notification",children:(0,o.createComponentVNode)(2,a.Button,{content:"Notify",onClick:function(){return c("notify_laws")}})})]})}),!!V&&(0,o.createComponentVNode)(2,a.Section,{title:"Add Laws",children:(0,o.createComponentVNode)(2,a.Table,{children:[(0,o.createComponentVNode)(2,a.Table.Row,{header:!0,children:[(0,o.createComponentVNode)(2,a.Table.Cell,{width:"10%",children:"Type"}),(0,o.createComponentVNode)(2,a.Table.Cell,{width:"60%",children:"Law"}),(0,o.createComponentVNode)(2,a.Table.Cell,{width:"10%",children:"Index"}),(0,o.createComponentVNode)(2,a.Table.Cell,{width:"20%",children:"Actions"})]}),!(!v||l)&&(0,o.createComponentVNode)(2,a.Table.Row,{children:[(0,o.createComponentVNode)(2,a.Table.Cell,{children:"Zero"}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:y}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:"N/A"}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:[(0,o.createComponentVNode)(2,a.Button,{content:"Edit",icon:"pencil-alt",onClick:function(){return c("change_zeroth_law")}}),(0,o.createComponentVNode)(2,a.Button,{content:"Add",icon:"plus",onClick:function(){return c("add_zeroth_law")}})]})]}),(0,o.createComponentVNode)(2,a.Table.Row,{children:[(0,o.createComponentVNode)(2,a.Table.Cell,{children:"Ion"}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:_}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:"N/A"}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:[(0,o.createComponentVNode)(2,a.Button,{content:"Edit",icon:"pencil-alt",onClick:function(){return c("change_ion_law")}}),(0,o.createComponentVNode)(2,a.Button,{content:"Add",icon:"plus",onClick:function(){return c("add_ion_law")}})]})]}),(0,o.createComponentVNode)(2,a.Table.Row,{children:[(0,o.createComponentVNode)(2,a.Table.Cell,{children:"Inherent"}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:x}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:"N/A"}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:[(0,o.createComponentVNode)(2,a.Button,{content:"Edit",icon:"pencil-alt",onClick:function(){return c("change_inherent_law")}}),(0,o.createComponentVNode)(2,a.Button,{content:"Add",icon:"plus",onClick:function(){return c("add_inherent_law")}})]})]}),(0,o.createComponentVNode)(2,a.Table.Row,{children:[(0,o.createComponentVNode)(2,a.Table.Cell,{children:"Supplied"}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:k}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:(0,o.createComponentVNode)(2,a.Button,{content:L,onClick:function(){return c("change_supplied_law_position")}})}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:[(0,o.createComponentVNode)(2,a.Button,{content:"Edit",icon:"pencil-alt",onClick:function(){return c("change_supplied_law")}}),(0,o.createComponentVNode)(2,a.Button,{content:"Add",icon:"plus",onClick:function(){return c("add_supplied_law")}})]})]})]})})],0)},l=function(e,t){var n=(0,r.useBackend)(t),c=n.act,i=n.data.law_sets;return(0,o.createComponentVNode)(2,a.Box,{children:i.map((function(e){return(0,o.createComponentVNode)(2,a.Section,{title:e.name+" - "+e.header,buttons:(0,o.createComponentVNode)(2,a.Button,{content:"Load Laws",icon:"download",onClick:function(){return c("transfer_laws",{transfer_laws:e.ref})}}),children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[e.laws.has_ion_laws>0&&e.laws.ion_laws.map((function(e){return(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:e.index,children:e.law},e.index)})),e.laws.has_zeroth_laws>0&&e.laws.zeroth_laws.map((function(e){return(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:e.index,children:e.law},e.index)})),e.laws.has_inherent_laws>0&&e.laws.inherent_laws.map((function(e){return(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:e.index,children:e.law},e.index)})),e.laws.has_supplied_laws>0&&e.laws.inherent_laws.map((function(e){return(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:e.index,children:e.law},e.index)}))]})},e.name)}))})},d=function(e,t){var n=(0,r.useBackend)(e.ctx),c=n.act,i=n.data.isMalf;return(0,o.createComponentVNode)(2,a.Section,{title:e.title+" Laws",children:(0,o.createComponentVNode)(2,a.Table,{children:[(0,o.createComponentVNode)(2,a.Table.Row,{header:!0,children:[(0,o.createComponentVNode)(2,a.Table.Cell,{width:"10%",children:"Index"}),(0,o.createComponentVNode)(2,a.Table.Cell,{width:"69%",children:"Law"}),(0,o.createComponentVNode)(2,a.Table.Cell,{width:"21%",children:"State?"})]}),e.laws.map((function(e){return(0,o.createComponentVNode)(2,a.Table.Row,{children:[(0,o.createComponentVNode)(2,a.Table.Cell,{children:e.index}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:e.law}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:[(0,o.createComponentVNode)(2,a.Button,{content:e.state?"Yes":"No",selected:e.state,onClick:function(){return c("state_law",{ref:e.ref,state_law:e.state?0:1})}}),!!i&&(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Button,{content:"Edit",icon:"pencil-alt",onClick:function(){return c("edit_law",{edit_law:e.ref})}}),(0,o.createComponentVNode)(2,a.Button,{content:"Delete",icon:"trash",color:"red",onClick:function(){return c("delete_law",{delete_law:e.ref})}})],4)]})]},e.law)}))]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.MechBayConsole=void 0;var o=n(0),r=n(1),a=n(2),c=n(4);t.MechBayConsole=function(e,t){var n=(0,r.useBackend)(t),i=n.act,l=n.data.recharge_port,d=l&&l.mech,u=d&&d.cell,s=d&&d.name;return(0,o.createComponentVNode)(2,c.Window,{resizable:!0,children:(0,o.createComponentVNode)(2,c.Window.Content,{children:(0,o.createComponentVNode)(2,a.Section,{title:s?"Mech status: "+s:"Mech status",textAlign:"center",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:"sync",content:"Sync",onClick:function(){return i("reconnect")}}),children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Integrity",children:!l&&(0,o.createComponentVNode)(2,a.NoticeBox,{children:"No power port detected. Please re-sync."})||!d&&(0,o.createComponentVNode)(2,a.NoticeBox,{children:"No mech detected."})||(0,o.createComponentVNode)(2,a.ProgressBar,{value:d.health/d.maxhealth,ranges:{good:[.7,Infinity],average:[.3,.7],bad:[-Infinity,.3]}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Power",children:!l&&(0,o.createComponentVNode)(2,a.NoticeBox,{children:"No power port detected. Please re-sync."})||!d&&(0,o.createComponentVNode)(2,a.NoticeBox,{children:"No mech detected."})||!u&&(0,o.createComponentVNode)(2,a.NoticeBox,{children:"No cell is installed."})||(0,o.createComponentVNode)(2,a.ProgressBar,{value:u.charge/u.maxcharge,ranges:{good:[.7,Infinity],average:[.3,.7],bad:[-Infinity,.3]},children:[(0,o.createComponentVNode)(2,a.AnimatedNumber,{value:u.charge})," / "+u.maxcharge]})})]})})})})}},function(e,t,n){"use strict";t.__esModule=!0,t.MechaControlConsole=void 0;var o=n(0),r=(n(15),n(1)),a=n(2),c=n(4),i=n(19);t.MechaControlConsole=function(e,t){var n=(0,r.useBackend)(t),l=n.act,d=n.data,u=d.beacons,s=d.stored_data;return s.length?(0,o.createComponentVNode)(2,c.Window,{resizable:!0,children:(0,o.createComponentVNode)(2,c.Window.Content,{scrollable:!0,children:(0,o.createComponentVNode)(2,a.Section,{title:"Log",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:"window-close",onClick:function(){return l("clear_log")}}),children:s.map((function(e){return(0,o.createComponentVNode)(2,a.Box,{children:[(0,o.createComponentVNode)(2,a.Box,{color:"label",children:["(",e.time,")"]}),(0,o.createComponentVNode)(2,a.Box,{children:(0,i.decodeHtmlEntities)(e.message)})]},e.time)}))})})}):(0,o.createComponentVNode)(2,c.Window,{resizable:!0,children:(0,o.createComponentVNode)(2,c.Window.Content,{scrollable:!0,children:u.length&&u.map((function(e){return(0,o.createComponentVNode)(2,a.Section,{title:e.name,buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Button,{icon:"comment",onClick:function(){return l("send_message",{mt:e.uid})},children:"Message"}),(0,o.createComponentVNode)(2,a.Button,{icon:"eye",onClick:function(){return l("get_log",{mt:e.uid})},children:"View Log"}),(0,o.createComponentVNode)(2,a.Button.Confirm,{color:"red",content:"EMP",icon:"bomb",onClick:function(){return l("shock",{mt:e.uid})}})],4),children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Health",children:(0,o.createComponentVNode)(2,a.ProgressBar,{ranges:{good:[.75*e.maxHealth,Infinity],average:[.5*e.maxHealth,.75*e.maxHealth],bad:[-Infinity,.5*e.maxHealth]},value:e.health,maxValue:e.maxHealth})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Cell Charge",children:e.cell&&(0,o.createComponentVNode)(2,a.ProgressBar,{ranges:{good:[.75*e.cellMaxCharge,Infinity],average:[.5*e.cellMaxCharge,.75*e.cellMaxCharge],bad:[-Infinity,.5*e.cellMaxCharge]},value:e.cellCharge,maxValue:e.cellMaxCharge})||(0,o.createComponentVNode)(2,a.NoticeBox,{children:"No Cell Installed"})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Air Tank",children:[e.airtank,"kPa"]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Pilot",children:e.pilot||"Unoccupied"}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Location",children:(0,i.toTitleCase)(e.location)||"Unknown"}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Active Equipment",children:e.active||"None"}),e.cargoMax&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Cargo Space",children:(0,o.createComponentVNode)(2,a.ProgressBar,{ranges:{bad:[.75*e.cargoMax,Infinity],average:[.5*e.cargoMax,.75*e.cargoMax],good:[-Infinity,.5*e.cargoMax]},value:e.cargoUsed,maxValue:e.cargoMax})})||null]})},e.name)}))||(0,o.createComponentVNode)(2,a.NoticeBox,{children:"No mecha beacons found."})})})}},function(e,t,n){"use strict";t.__esModule=!0,t.MedicalRecords=void 0;var o=n(0),r=n(1),a=n(2),c=n(49),i=n(4),l=n(132),d=n(133),u=n(136),s={Minor:"good",Medium:"average","Dangerous!":"bad",Harmful:"bad","BIOHAZARD THREAT!":"bad"},m=function(e,t){(0,c.modalOpen)(e,"edit",{field:t.edit,value:t.value})};t.MedicalRecords=function(e,t){var n,s=(0,r.useBackend)(t).data,m=s.loginState,C=s.screen;return m.logged_in?(2===C?n=(0,o.createComponentVNode)(2,p):3===C?n=(0,o.createComponentVNode)(2,f):4===C?n=(0,o.createComponentVNode)(2,h):5===C?n=(0,o.createComponentVNode)(2,b):6===C&&(n=(0,o.createComponentVNode)(2,g)),(0,o.createComponentVNode)(2,i.Window,{resizable:!0,children:[(0,o.createComponentVNode)(2,c.ComplexModal),(0,o.createComponentVNode)(2,i.Window.Content,{className:"Layout__content--flexColumn",children:[(0,o.createComponentVNode)(2,l.LoginInfo),(0,o.createComponentVNode)(2,u.TemporaryNotice),(0,o.createComponentVNode)(2,V),(0,o.createComponentVNode)(2,a.Section,{height:"100%",flexGrow:"1",children:n})]})]})):(0,o.createComponentVNode)(2,i.Window,{resizable:!0,children:(0,o.createComponentVNode)(2,i.Window.Content,{children:(0,o.createComponentVNode)(2,d.LoginScreen)})})};var p=function(e,t){var n=(0,r.useBackend)(t),c=n.act,i=n.data.records;return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Input,{fluid:!0,placeholder:"Search by Name, DNA, or ID",onChange:function(e,t){return c("search",{t1:t})}}),(0,o.createComponentVNode)(2,a.Box,{mt:"0.5rem",children:i.map((function(e,t){return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Button,{icon:"user",mb:"0.5rem",content:e.id+": "+e.name,onClick:function(){return c("d_rec",{d_rec:e.ref})}}),(0,o.createVNode)(1,"br")],4,t)}))})],4)},f=function(e,t){var n=(0,r.useBackend)(t).act;return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Button,{icon:"download",content:"Backup to Disk",disabled:!0}),(0,o.createVNode)(1,"br"),(0,o.createComponentVNode)(2,a.Button,{icon:"upload",content:"Upload from Disk",my:"0.5rem",disabled:!0}),(0,o.createTextVNode)(" "),(0,o.createVNode)(1,"br"),(0,o.createComponentVNode)(2,a.Button.Confirm,{icon:"trash",content:"Delete All Medical Records",onClick:function(){return n("del_all")}})],4)},h=function(e,t){var n=(0,r.useBackend)(t),c=n.act,i=n.data,l=i.medical,d=i.printing;return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Section,{title:"General Data",level:2,mt:"-6px",children:(0,o.createComponentVNode)(2,C)}),(0,o.createComponentVNode)(2,a.Section,{title:"Medical Data",level:2,children:(0,o.createComponentVNode)(2,N)}),(0,o.createComponentVNode)(2,a.Section,{title:"Actions",level:2,children:[(0,o.createComponentVNode)(2,a.Button.Confirm,{icon:"trash",disabled:!!l.empty,content:"Delete Medical Record",color:"bad",onClick:function(){return c("del_r")}}),(0,o.createComponentVNode)(2,a.Button,{icon:d?"spinner":"print",disabled:d,iconSpin:!!d,content:"Print Entry",ml:"0.5rem",onClick:function(){return c("print_p")}}),(0,o.createVNode)(1,"br"),(0,o.createComponentVNode)(2,a.Button,{icon:"arrow-left",content:"Back",mt:"0.5rem",onClick:function(){return c("screen",{screen:2})}})]})],4)},C=function(e,t){var n=(0,r.useBackend)(t).data.general;return n&&n.fields?(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Box,{width:"50%",float:"left",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:n.fields.map((function(e,n){return(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:e.field,children:[(0,o.createComponentVNode)(2,a.Box,{height:"20px",display:"inline-block",children:e.value}),!!e.edit&&(0,o.createComponentVNode)(2,a.Button,{icon:"pen",ml:"0.5rem",onClick:function(){return m(t,e)}})]},n)}))})}),(0,o.createComponentVNode)(2,a.Box,{width:"50%",float:"right",textAlign:"right",children:!!n.has_photos&&n.photos.map((function(e,t){return(0,o.createComponentVNode)(2,a.Box,{display:"inline-block",textAlign:"center",color:"label",children:[(0,o.createVNode)(1,"img",null,null,1,{src:e,style:{width:"96px","margin-bottom":"0.5rem","-ms-interpolation-mode":"nearest-neighbor"}}),(0,o.createVNode)(1,"br"),"Photo #",t+1]},t)}))})],4):(0,o.createComponentVNode)(2,a.Box,{color:"bad",children:"General records lost!"})},N=function(e,t){var n=(0,r.useBackend)(t),i=n.act,l=n.data.medical;return l&&l.fields?(0,o.createFragment)([(0,o.createComponentVNode)(2,a.LabeledList,{children:l.fields.map((function(e,n){return(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:e.field,children:[e.value,(0,o.createComponentVNode)(2,a.Button,{icon:"pen",ml:"0.5rem",mb:e.line_break?"1rem":"initial",onClick:function(){return m(t,e)}})]},n)}))}),(0,o.createComponentVNode)(2,a.Section,{title:"Comments/Log",level:2,children:[0===l.comments.length?(0,o.createComponentVNode)(2,a.Box,{color:"label",children:"No comments found."}):l.comments.map((function(e,t){return(0,o.createComponentVNode)(2,a.Box,{children:[(0,o.createComponentVNode)(2,a.Box,{color:"label",display:"inline",children:e.header}),(0,o.createVNode)(1,"br"),e.text,(0,o.createComponentVNode)(2,a.Button,{icon:"comment-slash",color:"bad",ml:"0.5rem",onClick:function(){return i("del_c",{del_c:t+1})}})]},t)})),(0,o.createComponentVNode)(2,a.Button,{icon:"comment-medical",content:"Add Entry",color:"good",mt:"0.5rem",mb:"0",onClick:function(){return(0,c.modalOpen)(t,"add_c")}})]})],4):(0,o.createComponentVNode)(2,a.Box,{color:"bad",children:["Medical records lost!",(0,o.createComponentVNode)(2,a.Button,{icon:"pen",content:"New Record",ml:"0.5rem",onClick:function(){return i("new")}})]})},b=function(e,t){var n=(0,r.useBackend)(t),c=n.act,i=n.data.virus;return i.sort((function(e,t){return e.name>t.name?1:-1})),i.map((function(e,t){return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Button,{icon:"flask",content:e.name,mb:"0.5rem",onClick:function(){return c("vir",{vir:e.D})}}),(0,o.createVNode)(1,"br")],4,t)}))},g=function(e,t){var n=(0,r.useBackend)(t).data.medbots;return 0===n.length?(0,o.createComponentVNode)(2,a.Box,{color:"label",children:"There are no Medbots."}):n.map((function(e,t){return(0,o.createComponentVNode)(2,a.Collapsible,{open:!0,title:e.name,children:(0,o.createComponentVNode)(2,a.Box,{px:"0.5rem",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Location",children:[e.area||"Unknown"," (",e.x,", ",e.y,")"]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Status",children:e.on?(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Box,{color:"good",children:"Online"}),(0,o.createComponentVNode)(2,a.Box,{mt:"0.5rem",children:e.use_beaker?"Reservoir: "+e.total_volume+"/"+e.maximum_volume:"Using internal synthesizer."})],4):(0,o.createComponentVNode)(2,a.Box,{color:"average",children:"Offline"})})]})})},t)}))},V=function(e,t){var n=(0,r.useBackend)(t),c=n.act,i=n.data.screen;return(0,o.createComponentVNode)(2,a.Tabs,{children:[(0,o.createComponentVNode)(2,a.Tabs.Tab,{selected:2===i,onClick:function(){return c("screen",{screen:2})},children:[(0,o.createComponentVNode)(2,a.Icon,{name:"list"}),"List Records"]}),(0,o.createComponentVNode)(2,a.Tabs.Tab,{selected:5===i,onClick:function(){return c("screen",{screen:5})},children:[(0,o.createComponentVNode)(2,a.Icon,{name:"database"}),"Virus Database"]}),(0,o.createComponentVNode)(2,a.Tabs.Tab,{selected:6===i,onClick:function(){return c("screen",{screen:6})},children:[(0,o.createComponentVNode)(2,a.Icon,{name:"plus-square"}),"Medbot Tracking"]}),(0,o.createComponentVNode)(2,a.Tabs.Tab,{selected:3===i,onClick:function(){return c("screen",{screen:3})},children:[(0,o.createComponentVNode)(2,a.Icon,{name:"wrench"}),"Record Maintenance"]})]})};(0,c.modalRegisterBodyOverride)("virus",(function(e,t){var n=e.args;return(0,o.createComponentVNode)(2,a.Section,{level:2,m:"-1rem",pb:"1rem",title:n.name||"Virus",children:(0,o.createComponentVNode)(2,a.Box,{mx:"0.5rem",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Number of stages",children:n.max_stages}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Spread",children:[n.spread_text," Transmission"]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Possible cure",children:n.cure}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Notes",children:n.desc}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Severity",color:s[n.severity],children:n.severity})]})})})}))},function(e,t,n){"use strict";t.__esModule=!0,t.MiningVendor=void 0;var o=n(0),r=n(19),a=n(1),c=n(2),i=n(4);var l={Alphabetical:function(e,t){return e-t},"By availability":function(e,t){return-(e.affordable-t.affordable)},"By price":function(e,t){return e.price-t.price}};t.MiningVendor=function(e,t){return(0,o.createComponentVNode)(2,i.Window,{children:(0,o.createComponentVNode)(2,i.Window.Content,{className:"Layout__content--flexColumn",children:[(0,o.createComponentVNode)(2,d),(0,o.createComponentVNode)(2,s),(0,o.createComponentVNode)(2,u)]})})};var d=function(e,t){var n=(0,a.useBackend)(t),r=n.act,i=n.data,l=i.has_id,d=i.id;return(0,o.createComponentVNode)(2,c.NoticeBox,{success:l,children:l?(0,o.createFragment)([(0,o.createComponentVNode)(2,c.Box,{display:"inline-block",verticalAlign:"middle",style:{float:"left"},children:["Logged in as ",d.name,".",(0,o.createVNode)(1,"br"),"You have ",d.points.toLocaleString("en-US")," points."]}),(0,o.createComponentVNode)(2,c.Button,{icon:"eject",content:"Eject ID",style:{float:"right"},onClick:function(){return r("logoff")}}),(0,o.createComponentVNode)(2,c.Box,{style:{clear:"both"}})],4):"Please insert an ID in order to make purchases."})},u=function(e,t){var n=(0,a.useBackend)(t),i=(n.act,n.data),d=i.has_id,u=i.id,s=i.items,p=(0,a.useLocalState)(t,"search",""),f=p[0],h=(p[1],(0,a.useLocalState)(t,"sort","Alphabetical")),C=h[0],N=(h[1],(0,a.useLocalState)(t,"descending",!1)),b=N[0],g=(N[1],(0,r.createSearch)(f,(function(e){return e[0]}))),V=!1,v=Object.entries(s).map((function(e,t){var n=Object.entries(e[1]).filter(g).map((function(e){return e[1].affordable=d&&u.points>=e[1].price,e[1]})).sort(l[C]);if(0!==n.length)return b&&(n=n.reverse()),V=!0,(0,o.createComponentVNode)(2,m,{title:e[0],items:n},e[0])}));return(0,o.createComponentVNode)(2,c.Flex.Item,{grow:"1",overflow:"auto",children:(0,o.createComponentVNode)(2,c.Section,{children:V?v:(0,o.createComponentVNode)(2,c.Box,{color:"label",children:"No items matching your criteria was found!"})})})},s=function(e,t){var n=(0,a.useLocalState)(t,"search",""),r=(n[0],n[1]),i=(0,a.useLocalState)(t,"sort",""),d=(i[0],i[1]),u=(0,a.useLocalState)(t,"descending",!1),s=u[0],m=u[1];return(0,o.createComponentVNode)(2,c.Box,{mb:"0.5rem",children:(0,o.createComponentVNode)(2,c.Flex,{width:"100%",children:[(0,o.createComponentVNode)(2,c.Flex.Item,{grow:"1",mr:"0.5rem",children:(0,o.createComponentVNode)(2,c.Input,{placeholder:"Search by item name..",width:"100%",onInput:function(e,t){return r(t)}})}),(0,o.createComponentVNode)(2,c.Flex.Item,{basis:"30%",children:(0,o.createComponentVNode)(2,c.Dropdown,{selected:"Alphabetical",options:Object.keys(l),width:"100%",lineHeight:"19px",onSelected:function(e){return d(e)}})}),(0,o.createComponentVNode)(2,c.Flex.Item,{children:(0,o.createComponentVNode)(2,c.Button,{icon:s?"arrow-down":"arrow-up",height:"19px",tooltip:s?"Descending order":"Ascending order",tooltipPosition:"bottom-left",ml:"0.5rem",onClick:function(){return m(!s)}})})]})})},m=function(e,t){var n=(0,a.useBackend)(t),r=n.act,i=n.data,l=e.title,d=e.items,u=function(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o=0||(r[n]=e[n]);return r}(e,["title","items"]);return(0,o.normalizeProps)((0,o.createComponentVNode)(2,c.Collapsible,Object.assign({open:!0,title:l},u,{children:d.map((function(e){return(0,o.createComponentVNode)(2,c.Box,{children:[(0,o.createComponentVNode)(2,c.Box,{display:"inline-block",verticalAlign:"middle",lineHeight:"20px",style:{float:"left"},children:e.name}),(0,o.createComponentVNode)(2,c.Button,{disabled:!i.has_id||i.id.points=0||(r[n]=e[n]);return r}var m=["security","engineering","medical","science","service","supply"],p={security:{title:"Security",fluff_text:"Help keep the crew safe"},engineering:{title:"Engineering",fluff_text:"Ensure the station runs smoothly"},medical:{title:"Medical",fluff_text:"Practice medicine and save lives"},science:{title:"Science",fluff_text:"Develop new technologies"},service:{title:"Service",fluff_text:"Provide amenities to the crew"},supply:{title:"Supply",fluff_text:"Keep the station supplied"}};t.Newscaster=function(e,t){var n,i=(0,a.useBackend)(t),s=i.act,m=i.data,p=m.is_security,N=m.is_admin,b=m.is_silent,V=m.is_printing,v=m.screen,y=m.channels,_=m.channel_idx,x=void 0===_?-1:_,k=(0,a.useLocalState)(t,"menuOpen",!1),L=k[0],B=k[1],w=(0,a.useLocalState)(t,"viewingPhoto",""),S=w[0],I=(w[1],(0,a.useLocalState)(t,"censorMode",!1)),T=I[0],A=I[1];0===v||2===v?n=(0,o.createComponentVNode)(2,h):1===v&&(n=(0,o.createComponentVNode)(2,C));var E=y.reduce((function(e,t){return e+t.unread}),0);return(0,o.createComponentVNode)(2,l.Window,{theme:p&&"security",children:[S?(0,o.createComponentVNode)(2,g):(0,o.createComponentVNode)(2,d.ComplexModal,{maxWidth:window.innerWidth/1.5+"px",maxHeight:window.innerHeight/1.5+"px"}),(0,o.createComponentVNode)(2,l.Window.Content,{children:(0,o.createComponentVNode)(2,c.Flex,{width:"100%",height:"100%",children:[(0,o.createComponentVNode)(2,c.Section,{stretchContents:!0,className:(0,r.classes)(["Newscaster__menu",L&&"Newscaster__menu--open"]),children:(0,o.createComponentVNode)(2,c.Flex,{direction:"column",height:"100%",children:[(0,o.createComponentVNode)(2,c.Box,{flex:"0 1 content",children:[(0,o.createComponentVNode)(2,f,{icon:"bars",title:"Toggle Menu",onClick:function(){return B(!L)}}),(0,o.createComponentVNode)(2,f,{icon:"newspaper",title:"Headlines",selected:0===v,onClick:function(){return s("headlines")},children:E>0&&(0,o.createComponentVNode)(2,c.Box,{className:"Newscaster__menuButton--unread",children:E>=10?"9+":E})}),(0,o.createComponentVNode)(2,f,{icon:"briefcase",title:"Job Openings",selected:1===v,onClick:function(){return s("jobs")}}),(0,o.createComponentVNode)(2,c.Divider)]}),(0,o.createComponentVNode)(2,c.Box,{flex:"2",overflowY:"auto",overflowX:"hidden",children:y.map((function(e){return(0,o.createComponentVNode)(2,f,{icon:e.icon,title:e.name,selected:2===v&&y[x-1]===e,onClick:function(){return s("channel",{uid:e.uid})},children:e.unread>0&&(0,o.createComponentVNode)(2,c.Box,{className:"Newscaster__menuButton--unread",children:e.unread>=10?"9+":e.unread})},e)}))}),(0,o.createComponentVNode)(2,c.Box,{width:"100%",flex:"0 0 content",children:[(0,o.createComponentVNode)(2,c.Divider),(!!p||!!N)&&(0,o.createFragment)([(0,o.createComponentVNode)(2,f,{security:!0,icon:"exclamation-circle",title:"Edit Wanted Notice",mb:"0.5rem",onClick:function(){return(0,d.modalOpen)(t,"wanted_notice")}}),(0,o.createComponentVNode)(2,f,{security:!0,icon:T?"minus-square":"minus-square-o",title:"Censor Mode: "+(T?"On":"Off"),mb:"0.5rem",onClick:function(){return A(!T)}}),(0,o.createComponentVNode)(2,c.Divider)],4),(0,o.createComponentVNode)(2,f,{icon:"pen-alt",title:"New Story",mb:"0.5rem",onClick:function(){return(0,d.modalOpen)(t,"create_story")}}),(0,o.createComponentVNode)(2,f,{icon:"plus-circle",title:"New Channel",onClick:function(){return(0,d.modalOpen)(t,"create_channel")}}),(0,o.createComponentVNode)(2,c.Divider),(0,o.createComponentVNode)(2,f,{icon:V?"spinner":"print",iconSpin:V,title:V?"Printing...":"Print Newspaper",onClick:function(){return s("print_newspaper")}}),(0,o.createComponentVNode)(2,f,{icon:b?"volume-mute":"volume-up",title:"Mute: "+(b?"On":"Off"),onClick:function(){return s("toggle_mute")}})]})]})}),(0,o.createComponentVNode)(2,c.Flex,{direction:"column",height:"100%",flex:"1",children:[(0,o.createComponentVNode)(2,u.TemporaryNotice),n]})]})})]})};var f=function(e,t){(0,a.useBackend)(t).act;var n=e.icon,i=void 0===n?"":n,l=e.iconSpin,d=e.selected,u=void 0!==d&&d,m=e.security,p=void 0!==m&&m,f=e.onClick,h=e.title,C=e.children,N=s(e,["icon","iconSpin","selected","security","onClick","title","children"]);return(0,o.normalizeProps)((0,o.createComponentVNode)(2,c.Box,Object.assign({className:(0,r.classes)(["Newscaster__menuButton",u&&"Newscaster__menuButton--selected",p&&"Newscaster__menuButton--security"]),onClick:f},N,{children:[u&&(0,o.createComponentVNode)(2,c.Box,{className:"Newscaster__menuButton--selectedBar"}),(0,o.createComponentVNode)(2,c.Icon,{name:i,spin:l,size:"2"}),(0,o.createComponentVNode)(2,c.Box,{className:"Newscaster__menuButton--title",children:h}),C]})))},h=function(e,t){var n=(0,a.useBackend)(t),r=n.act,i=n.data,l=i.screen,u=i.is_admin,s=i.channel_idx,m=i.channel_can_manage,p=i.channels,f=i.stories,h=i.wanted,C=(0,a.useLocalState)(t,"fullStories",[]),b=C[0],g=(C[1],(0,a.useLocalState)(t,"censorMode",!1)),V=g[0],v=(g[1],2===l&&s>-1?p[s-1]:null);return(0,o.createComponentVNode)(2,c.Flex,{direction:"column",height:"100%",flex:"1",children:[!!h&&(0,o.createComponentVNode)(2,N,{story:h,wanted:!0}),(0,o.createComponentVNode)(2,c.Section,{title:(0,o.createFragment)([(0,o.createComponentVNode)(2,c.Icon,{name:v?v.icon:"newspaper",mr:"0.5rem"}),v?v.name:"Headlines"],0),flexGrow:"1",children:f.length>0?f.slice().reverse().map((function(e){return!b.includes(e.uid)&&e.body.length+3>128?Object.assign({},e,{body_short:e.body.substr(0,124)+"..."}):e})).map((function(e){return(0,o.createComponentVNode)(2,N,{story:e},e)})):(0,o.createComponentVNode)(2,c.Box,{className:"Newscaster__emptyNotice",children:[(0,o.createComponentVNode)(2,c.Icon,{name:"times",size:"3"}),(0,o.createVNode)(1,"br"),"There are no stories at this time."]})}),!!v&&(0,o.createComponentVNode)(2,c.Section,{flexShrink:"1",title:(0,o.createFragment)([(0,o.createComponentVNode)(2,c.Icon,{name:"info-circle",mr:"0.5rem"}),(0,o.createTextVNode)("About")],4),buttons:(0,o.createFragment)([V&&(0,o.createComponentVNode)(2,c.Button,{disabled:!!v.admin&&!u,selected:v.censored,icon:v.censored?"comment-slash":"comment",content:v.censored?"Uncensor Channel":"Censor Channel",mr:"0.5rem",onClick:function(){return r("censor_channel",{uid:v.uid})}}),(0,o.createComponentVNode)(2,c.Button,{disabled:!m,icon:"cog",content:"Manage",onClick:function(){return(0,d.modalOpen)(t,"manage_channel",{uid:v.uid})}})],0),children:(0,o.createComponentVNode)(2,c.LabeledList,{children:[(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Description",children:v.description||"N/A"}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Owner",children:v.author||"N/A"}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Public",children:v["public"]?"Yes":"No"}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Total Views",children:[(0,o.createComponentVNode)(2,c.Icon,{name:"eye",mr:"0.5rem"}),f.reduce((function(e,t){return e+t.view_count}),0).toLocaleString()]})]})})]})},C=function(e,t){var n=(0,a.useBackend)(t),i=(n.act,n.data),l=i.jobs,d=i.wanted,u=Object.entries(l).reduce((function(e,t){t[0];return e+t[1].length}),0);return(0,o.createComponentVNode)(2,c.Flex,{direction:"column",height:"100%",flex:"1",children:[!!d&&(0,o.createComponentVNode)(2,N,{story:d,wanted:!0}),(0,o.createComponentVNode)(2,c.Section,{flexGrow:"1",title:(0,o.createFragment)([(0,o.createComponentVNode)(2,c.Icon,{name:"briefcase",mr:"0.5rem"}),(0,o.createTextVNode)("Job Openings")],4),buttons:(0,o.createComponentVNode)(2,c.Box,{mt:"0.25rem",color:"label",children:"Work for a better future at Nanotrasen"}),children:u>0?m.map((function(e){return Object.assign({},p[e],{id:e,jobs:l[e]})})).filter((function(e){return!!e&&e.jobs.length>0})).map((function(e){return(0,o.createComponentVNode)(2,c.Section,{className:(0,r.classes)(["Newscaster__jobCategory","Newscaster__jobCategory--"+e.id]),title:e.title,buttons:(0,o.createComponentVNode)(2,c.Box,{mt:"0.25rem",color:"label",children:e.fluff_text}),children:e.jobs.map((function(e){return(0,o.createComponentVNode)(2,c.Box,{"class":(0,r.classes)(["Newscaster__jobOpening",!!e.is_command&&"Newscaster__jobOpening--command"]),children:["\u2022 ",e.title]},e.title)}))},e.id)})):(0,o.createComponentVNode)(2,c.Box,{className:"Newscaster__emptyNotice",children:[(0,o.createComponentVNode)(2,c.Icon,{name:"times",size:"3"}),(0,o.createVNode)(1,"br"),"There are no openings at this time."]})}),(0,o.createComponentVNode)(2,c.Section,{flexShrink:"1",children:["Interested in serving Nanotrasen?",(0,o.createVNode)(1,"br"),"Sign up for any of the above position now at the ",(0,o.createVNode)(1,"b",null,"Head of Personnel's Office!",16),(0,o.createVNode)(1,"br"),(0,o.createComponentVNode)(2,c.Box,{as:"small",color:"label",children:"By signing up for a job at Nanotrasen, you agree to transfer your soul to the loyalty department of the omnipresent and helpful watcher of humanity."})]})]})},N=function(e,t){var n=(0,a.useBackend)(t),l=n.act,d=n.data,u=e.story,s=e.wanted,m=void 0!==s&&s,p=(0,a.useLocalState)(t,"fullStories",[]),f=p[0],h=p[1],C=(0,a.useLocalState)(t,"censorMode",!1),N=C[0];C[1];return(0,o.createComponentVNode)(2,c.Section,{className:(0,r.classes)(["Newscaster__story",m&&"Newscaster__story--wanted"]),title:(0,o.createFragment)([m&&(0,o.createComponentVNode)(2,c.Icon,{name:"exclamation-circle",mr:"0.5rem"}),(2&u.censor_flags?"[REDACTED]":u.title)||"News from "+u.author],0),buttons:(0,o.createComponentVNode)(2,c.Box,{mt:"0.25rem",children:(0,o.createComponentVNode)(2,c.Box,{color:"label",children:[!m&&N&&(0,o.createComponentVNode)(2,c.Box,{display:"inline",children:(0,o.createComponentVNode)(2,c.Button,{enabled:2&u.censor_flags,icon:2&u.censor_flags?"comment-slash":"comment",content:2&u.censor_flags?"Uncensor":"Censor",mr:"0.5rem",mt:"-0.25rem",onClick:function(){return l("censor_story",{uid:u.uid})}})}),(0,o.createComponentVNode)(2,c.Box,{display:"inline",children:[(0,o.createComponentVNode)(2,c.Icon,{name:"user"})," ",u.author," |\xa0",!m&&(0,o.createFragment)([(0,o.createComponentVNode)(2,c.Icon,{name:"eye"}),(0,o.createTextVNode)(" "),u.view_count.toLocaleString(),(0,o.createTextVNode)(" |\xa0")],0),(0,o.createComponentVNode)(2,c.Icon,{name:"clock"})," ",(0,i.timeAgo)(u.publish_time,d.world_time)]})]})}),children:(0,o.createComponentVNode)(2,c.Box,{children:2&u.censor_flags?"[REDACTED]":(0,o.createFragment)([!!u.has_photo&&(0,o.createComponentVNode)(2,b,{name:"story_photo_"+u.uid+".png",float:"right",ml:"0.5rem"}),(u.body_short||u.body).split("\n").map((function(e){return(0,o.createComponentVNode)(2,c.Box,{children:e||(0,o.createVNode)(1,"br")},e)})),u.body_short&&(0,o.createComponentVNode)(2,c.Button,{content:"Read more..",mt:"0.5rem",onClick:function(){return h([].concat(f,[u.uid]))}}),(0,o.createComponentVNode)(2,c.Box,{clear:"right"})],0)})})},b=function(e,t){var n=e.name,r=s(e,["name"]),i=(0,a.useLocalState)(t,"viewingPhoto",""),l=(i[0],i[1]);return(0,o.normalizeProps)((0,o.createComponentVNode)(2,c.Box,Object.assign({as:"img",className:"Newscaster__photo",src:n,onClick:function(){return l(n)}},r)))},g=function(e,t){var n=(0,a.useLocalState)(t,"viewingPhoto",""),r=n[0],i=n[1];return(0,o.createComponentVNode)(2,c.Modal,{className:"Newscaster__photoZoom",children:[(0,o.createComponentVNode)(2,c.Box,{as:"img",src:r}),(0,o.createComponentVNode)(2,c.Button,{icon:"times",content:"Close",color:"grey",mt:"1rem",onClick:function(){return i("")}})]})},V=function(e,t){var n=(0,a.useBackend)(t),r=(n.act,n.data),i=!!e.args.uid&&r.channels.filter((function(t){return t.uid===e.args.uid})).pop();if("manage_channel"!==e.id||i){var l="manage_channel"===e.id,u=!!e.args.is_admin,s=e.args.scanned_user,m=(0,a.useLocalState)(t,"author",(null==i?void 0:i.author)||s||"Unknown"),p=m[0],f=m[1],h=(0,a.useLocalState)(t,"name",(null==i?void 0:i.name)||""),C=h[0],N=h[1],b=(0,a.useLocalState)(t,"description",(null==i?void 0:i.description)||""),g=b[0],V=b[1],v=(0,a.useLocalState)(t,"icon",(null==i?void 0:i.icon)||"newspaper"),y=v[0],_=v[1],x=(0,a.useLocalState)(t,"isPublic",!!l&&!!(null==i?void 0:i["public"])),k=x[0],L=x[1],B=(0,a.useLocalState)(t,"adminLocked",1===(null==i?void 0:i.admin)||!1),w=B[0],S=B[1];return(0,o.createComponentVNode)(2,c.Section,{level:"2",m:"-1rem",pb:"1rem",title:l?"Manage "+i.name:"Create New Channel",children:[(0,o.createComponentVNode)(2,c.Box,{mx:"0.5rem",children:(0,o.createComponentVNode)(2,c.LabeledList,{children:[(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Owner",children:(0,o.createComponentVNode)(2,c.Input,{disabled:!u,width:"100%",value:p,onInput:function(e,t){return f(t)}})}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Name",children:(0,o.createComponentVNode)(2,c.Input,{width:"100%",placeholder:"50 characters max.",maxLength:"50",value:C,onInput:function(e,t){return N(t)}})}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Description (optional)",verticalAlign:"top",children:(0,o.createComponentVNode)(2,c.Input,{multiline:!0,width:"100%",placeholder:"128 characters max.",maxLength:"128",value:g,onInput:function(e,t){return V(t)}})}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Icon",children:[(0,o.createComponentVNode)(2,c.Input,{disabled:!u,value:y,width:"35%",mr:"0.5rem",onInput:function(e,t){return _(t)}}),(0,o.createComponentVNode)(2,c.Icon,{name:y,size:"2",verticalAlign:"middle",mr:"0.5rem"})]}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Accept Public Stories?",children:(0,o.createComponentVNode)(2,c.Button,{selected:k,icon:k?"toggle-on":"toggle-off",content:k?"Yes":"No",onClick:function(){return L(!k)}})}),u&&(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"CentComm Lock",verticalAlign:"top",children:(0,o.createComponentVNode)(2,c.Button,{selected:w,icon:w?"lock":"lock-open",content:w?"On":"Off",tooltip:"Locking this channel will make it editable by nobody but CentComm officers.",tooltipPosition:"top",onClick:function(){return S(!w)}})})]})}),(0,o.createComponentVNode)(2,c.Button.Confirm,{disabled:0===p.trim().length||0===C.trim().length,icon:"check",color:"good",content:"Submit",position:"absolute",right:"1rem",bottom:"-0.75rem",onClick:function(){(0,d.modalAnswer)(t,e.id,"",{author:p,name:C.substr(0,49),description:g.substr(0,128),icon:y,"public":k?1:0,admin_locked:w?1:0}),(0,a.deleteLocalState)(t,"author","name","description","icon","public")}})]})}(0,d.modalClose)(t)};(0,d.modalRegisterBodyOverride)("create_channel",V),(0,d.modalRegisterBodyOverride)("manage_channel",V),(0,d.modalRegisterBodyOverride)("create_story",(function(e,t){var n=(0,a.useBackend)(t),r=n.act,i=n.data,l=i.photo,u=i.channels,s=i.channel_idx,m=void 0===s?-1:s,p=!!e.args.is_admin,f=e.args.scanned_user,h=u.slice().sort((function(e,t){if(m<0)return 0;var n=u[m-1];return n.uid===e.uid?-1:n.uid===t.uid?1:void 0})).filter((function(e){return p||!e.frozen&&(e.author===f||!!e["public"])})),C=(0,a.useLocalState)(t,"author",f||"Unknown"),N=C[0],g=C[1],V=(0,a.useLocalState)(t,"channel",h.length>0?h[0].name:""),v=V[0],y=V[1],_=(0,a.useLocalState)(t,"title",""),x=_[0],k=_[1],L=(0,a.useLocalState)(t,"body",""),B=L[0],w=L[1],S=(0,a.useLocalState)(t,"adminLocked",!1),I=S[0],T=S[1];return(0,o.createComponentVNode)(2,c.Section,{level:2,m:"-1rem",pb:"1rem",title:"Create New Story",children:[(0,o.createComponentVNode)(2,c.Box,{mx:"0.5rem",children:(0,o.createComponentVNode)(2,c.LabeledList,{children:[(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Author",children:(0,o.createComponentVNode)(2,c.Input,{disabled:!p,width:"100%",value:N,onInput:function(e,t){return g(t)}})}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Channel",verticalAlign:"top",children:(0,o.createComponentVNode)(2,c.Dropdown,{selected:v,options:h.map((function(e){return e.name})),mb:"0",width:"100%",onSelected:function(e){return y(e)}})}),(0,o.createComponentVNode)(2,c.LabeledList.Divider),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Title",children:(0,o.createComponentVNode)(2,c.Input,{width:"100%",placeholder:"128 characters max.",maxLength:"128",value:x,onInput:function(e,t){return k(t)}})}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Story Text",verticalAlign:"top",children:(0,o.createComponentVNode)(2,c.Input,{fluid:!0,multiline:!0,placeholder:"1024 characters max.",maxLength:"1024",rows:"8",width:"100%",value:B,onInput:function(e,t){return w(t)}})}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Photo (optional)",verticalAlign:"top",children:(0,o.createComponentVNode)(2,c.Button,{icon:"image",selected:l,content:l?"Eject: "+l.name:"Insert Photo",tooltip:!l&&"Attach a photo to this story by holding the photograph in your hand.",onClick:function(){return r(l?"eject_photo":"attach_photo")}})}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Preview",verticalAlign:"top",children:(0,o.createComponentVNode)(2,c.Section,{noTopPadding:!0,title:x,maxHeight:"13.5rem",overflow:"auto",children:(0,o.createComponentVNode)(2,c.Box,{mt:"0.5rem",children:[!!l&&(0,o.createComponentVNode)(2,b,{name:"inserted_photo_"+l.uid+".png",float:"right"}),B.split("\n").map((function(e){return(0,o.createComponentVNode)(2,c.Box,{children:e||(0,o.createVNode)(1,"br")},e)})),(0,o.createComponentVNode)(2,c.Box,{clear:"right"})]})})}),p&&(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"CentComm Lock",verticalAlign:"top",children:(0,o.createComponentVNode)(2,c.Button,{selected:I,icon:I?"lock":"lock-open",content:I?"On":"Off",tooltip:"Locking this story will make it censorable by nobody but CentComm officers.",tooltipPosition:"top",onClick:function(){return T(!I)}})})]})}),(0,o.createComponentVNode)(2,c.Button.Confirm,{disabled:0===N.trim().length||0===v.trim().length||0===x.trim().length||0===B.trim().length,icon:"check",color:"good",content:"Submit",position:"absolute",right:"1rem",bottom:"-0.75rem",onClick:function(){(0,d.modalAnswer)(t,"create_story","",{author:N,channel:v,title:x.substr(0,127),body:B.substr(0,1023),admin_locked:I?1:0}),(0,a.deleteLocalState)(t,"author","channel","title","body")}})]})})),(0,d.modalRegisterBodyOverride)("wanted_notice",(function(e,t){var n=(0,a.useBackend)(t),r=n.act,i=n.data,l=i.photo,u=i.wanted,s=!!e.args.is_admin,m=e.args.scanned_user,p=(0,a.useLocalState)(t,"author",(null==u?void 0:u.author)||m||"Unknown"),f=p[0],h=p[1],C=(0,a.useLocalState)(t,"name",(null==u?void 0:u.title.substr(8))||""),N=C[0],g=C[1],V=(0,a.useLocalState)(t,"description",(null==u?void 0:u.body)||""),v=V[0],y=V[1],_=(0,a.useLocalState)(t,"adminLocked",1===(null==u?void 0:u.admin_locked)||!1),x=_[0],k=_[1];return(0,o.createComponentVNode)(2,c.Section,{level:"2",m:"-1rem",pb:"1rem",title:"Manage Wanted Notice",children:[(0,o.createComponentVNode)(2,c.Box,{mx:"0.5rem",children:(0,o.createComponentVNode)(2,c.LabeledList,{children:[(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Authority",children:(0,o.createComponentVNode)(2,c.Input,{disabled:!s,width:"100%",value:f,onInput:function(e,t){return h(t)}})}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Name",children:(0,o.createComponentVNode)(2,c.Input,{width:"100%",value:N,maxLength:"128",onInput:function(e,t){return g(t)}})}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Description",verticalAlign:"top",children:(0,o.createComponentVNode)(2,c.Input,{multiline:!0,width:"100%",value:v,maxLength:"512",rows:"4",onInput:function(e,t){return y(t)}})}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Photo (optional)",verticalAlign:"top",children:[(0,o.createComponentVNode)(2,c.Button,{icon:"image",selected:l,content:l?"Eject: "+l.name:"Insert Photo",tooltip:!l&&"Attach a photo to this wanted notice by holding the photograph in your hand.",tooltipPosition:"top",onClick:function(){return r(l?"eject_photo":"attach_photo")}}),!!l&&(0,o.createComponentVNode)(2,b,{name:"inserted_photo_"+l.uid+".png",float:"right"})]}),s&&(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"CentComm Lock",verticalAlign:"top",children:(0,o.createComponentVNode)(2,c.Button,{selected:x,icon:x?"lock":"lock-open",content:x?"On":"Off",tooltip:"Locking this wanted notice will make it editable by nobody but CentComm officers.",tooltipPosition:"top",onClick:function(){return k(!x)}})})]})}),(0,o.createComponentVNode)(2,c.Button.Confirm,{disabled:!u,icon:"eraser",color:"danger",content:"Clear",position:"absolute",right:"7.25rem",bottom:"-0.75rem",onClick:function(){r("clear_wanted_notice"),(0,d.modalClose)(t),(0,a.deleteLocalState)(t,"author","name","description","admin_locked")}}),(0,o.createComponentVNode)(2,c.Button.Confirm,{disabled:0===f.trim().length||0===N.trim().length||0===v.trim().length,icon:"check",color:"good",content:"Submit",position:"absolute",right:"1rem",bottom:"-0.75rem",onClick:function(){(0,d.modalAnswer)(t,e.id,"",{author:f,name:N.substr(0,127),description:v.substr(0,511),admin_locked:x?1:0}),(0,a.deleteLocalState)(t,"author","name","description","admin_locked")}})]})}))},function(e,t,n){"use strict";t.__esModule=!0,t.NuclearBomb=void 0;var o=n(0),r=n(1),a=n(2),c=n(4);t.NuclearBomb=function(e,t){var n=(0,r.useBackend)(t),i=n.act,l=n.data;return l.extended?(0,o.createComponentVNode)(2,c.Window,{children:(0,o.createComponentVNode)(2,c.Window.Content,{children:[(0,o.createComponentVNode)(2,a.Section,{title:"Authorization",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Auth Disk",children:(0,o.createComponentVNode)(2,a.Button,{icon:l.authdisk?"eject":"id-card",selected:l.authdisk,content:l.diskname?l.diskname:"-----",tooltip:l.authdisk?"Eject Disk":"Insert Disk",onClick:function(){return i("auth")}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Auth Code",children:(0,o.createComponentVNode)(2,a.Button,{icon:"key",disabled:!l.authdisk,selected:l.authcode,content:l.codemsg,onClick:function(){return i("code")}})})]})}),(0,o.createComponentVNode)(2,a.Section,{title:"Arming & Disarming",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Bolted to floor",children:(0,o.createComponentVNode)(2,a.Button,{icon:l.anchored?"check":"times",selected:l.anchored,disabled:!l.authdisk,content:l.anchored?"YES":"NO",onClick:function(){return i("toggle_anchor")}})}),l.authfull&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Time Left",children:(0,o.createComponentVNode)(2,a.Button,{icon:"stopwatch",content:l.time,disabled:!l.authfull,tooltip:"Set Timer",onClick:function(){return i("set_time")}})})||(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Time Left",color:l.timer?"red":"",children:l.time+"s"}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Safety",children:(0,o.createComponentVNode)(2,a.Button,{icon:l.safety?"check":"times",selected:l.safety,disabled:!l.authfull,content:l.safety?"ON":"OFF",tooltip:l.safety?"Disable Safety":"Enable Safety",onClick:function(){return i("toggle_safety")}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Arm/Disarm",children:(0,o.createComponentVNode)(2,a.Button,{icon:(l.timer,"bomb"),disabled:l.safety||!l.authfull,color:"red",content:l.timer?"DISARM THE NUKE":"ARM THE NUKE",onClick:function(){return i("toggle_armed")}})})]})})]})}):(0,o.createComponentVNode)(2,c.Window,{children:(0,o.createComponentVNode)(2,c.Window.Content,{children:(0,o.createComponentVNode)(2,a.Section,{title:"Deployment",children:(0,o.createComponentVNode)(2,a.Button,{icon:"exclamation-triangle",content:"Deploy Nuclear Device (will bolt device to floor)",onClick:function(){return i("deploy")}})})})})}},function(e,t,n){"use strict";t.__esModule=!0,t.OperatingComputer=void 0;var o=n(0),r=n(15),a=n(1),c=n(4),i=n(2),l=[["good","Conscious"],["average","Unconscious"],["bad","DEAD"]],d=[["Resp.","oxyLoss"],["Toxin","toxLoss"],["Brute","bruteLoss"],["Burn","fireLoss"]],u={average:[.25,.5],bad:[.5,Infinity]},s=["bad","average","average","good","average","average","bad"];t.OperatingComputer=function(e,t){var n,r=(0,a.useBackend)(t),l=r.act,d=r.data,u=d.hasOccupant,s=d.choice;return n=s?(0,o.createComponentVNode)(2,f):u?(0,o.createComponentVNode)(2,m):(0,o.createComponentVNode)(2,p),(0,o.createComponentVNode)(2,c.Window,{resizable:!0,children:(0,o.createComponentVNode)(2,c.Window.Content,{className:"Layout__content--flexColumn",children:[(0,o.createComponentVNode)(2,i.Tabs,{children:[(0,o.createComponentVNode)(2,i.Tabs.Tab,{selected:!s,icon:"user",onClick:function(){return l("choiceOff")},children:"Patient"}),(0,o.createComponentVNode)(2,i.Tabs.Tab,{selected:!!s,icon:"cog",onClick:function(){return l("choiceOn")},children:"Options"})]}),(0,o.createComponentVNode)(2,i.Section,{flexGrow:"1",children:n})]})})};var m=function(e,t){var n=(0,a.useBackend)(t).data.occupant;return(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Section,{title:"Patient",level:"2",children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Name",children:n.name}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Status",color:l[n.stat][0],children:l[n.stat][1]}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Health",children:(0,o.createComponentVNode)(2,i.ProgressBar,{min:"0",max:n.maxHealth,value:n.health/n.maxHealth,ranges:{good:[.5,Infinity],average:[0,.5],bad:[-Infinity,0]}})}),d.map((function(e,t){return(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:e[0]+" Damage",children:(0,o.createComponentVNode)(2,i.ProgressBar,{min:"0",max:"100",value:n[e[1]]/100,ranges:u,children:(0,r.round)(n[e[1]])},t)},t)})),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Temperature",children:(0,o.createComponentVNode)(2,i.ProgressBar,{min:"0",max:n.maxTemp,value:n.bodyTemperature/n.maxTemp,color:s[n.temperatureSuitability+3],children:[(0,r.round)(n.btCelsius),"\xb0C, ",(0,r.round)(n.btFaren),"\xb0F"]})}),!!n.hasBlood&&(0,o.createFragment)([(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Blood Level",children:(0,o.createComponentVNode)(2,i.ProgressBar,{min:"0",max:n.bloodMax,value:n.bloodLevel/n.bloodMax,ranges:{bad:[-Infinity,.6],average:[.6,.9],good:[.6,Infinity]},children:[n.bloodPercent,"%, ",n.bloodLevel,"cl"]})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Pulse",children:[n.pulse," BPM"]})],4)]})}),(0,o.createComponentVNode)(2,i.Section,{title:"Current Procedure",level:"2",children:n.inSurgery?(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Procedure",children:n.surgeryName}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Next Step",children:n.stepName})]}):(0,o.createComponentVNode)(2,i.Box,{color:"label",children:"No procedure ongoing."})})],4)},p=function(){return(0,o.createComponentVNode)(2,i.Flex,{textAlign:"center",height:"100%",children:(0,o.createComponentVNode)(2,i.Flex.Item,{grow:"1",align:"center",color:"label",children:[(0,o.createComponentVNode)(2,i.Icon,{name:"user-slash",mb:"0.5rem",size:"5"}),(0,o.createVNode)(1,"br"),"No patient detected."]})})},f=function(e,t){var n=(0,a.useBackend)(t),r=n.act,c=n.data,l=c.verbose,d=c.health,u=c.healthAlarm,s=c.oxy,m=c.oxyAlarm,p=c.crit;return(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Loudspeaker",children:(0,o.createComponentVNode)(2,i.Button,{selected:l,icon:l?"toggle-on":"toggle-off",content:l?"On":"Off",onClick:function(){return r(l?"verboseOff":"verboseOn")}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Health Announcer",children:(0,o.createComponentVNode)(2,i.Button,{selected:d,icon:d?"toggle-on":"toggle-off",content:d?"On":"Off",onClick:function(){return r(d?"healthOff":"healthOn")}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Health Announcer Threshold",children:(0,o.createComponentVNode)(2,i.Knob,{bipolar:!0,minValue:"-100",maxValue:"100",value:u,stepPixelSize:"5",ml:"0",onChange:function(e,t){return r("health_adj",{"new":t})}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Oxygen Alarm",children:(0,o.createComponentVNode)(2,i.Button,{selected:s,icon:s?"toggle-on":"toggle-off",content:s?"On":"Off",onClick:function(){return r(s?"oxyOff":"oxyOn")}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Oxygen Alarm Threshold",children:(0,o.createComponentVNode)(2,i.Knob,{bipolar:!0,minValue:"-100",maxValue:"100",value:m,stepPixelSize:"5",ml:"0",onChange:function(e,t){return r("oxy_adj",{"new":t})}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Critical Alert",children:(0,o.createComponentVNode)(2,i.Button,{selected:p,icon:p?"toggle-on":"toggle-off",content:p?"On":"Off",onClick:function(){return r(p?"critOff":"critOn")}})})]})}},function(e,t,n){"use strict";t.__esModule=!0,t.Orbit=void 0;var o=n(0),r=n(19),a=n(1),c=n(2),i=n(4);function l(e){var t=0;if("undefined"==typeof Symbol||null==e[Symbol.iterator]){if(Array.isArray(e)||(e=function(e,t){if(!e)return;if("string"==typeof e)return d(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(n);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return d(e,t)}(e)))return function(){return t>=e.length?{done:!0}:{done:!1,value:e[t++]}};throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}return(t=e[Symbol.iterator]()).next.bind(t)}function d(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,o=new Array(t);nt},p=function(e,t){var n=e.name,o=t.name;if(!n||!o)return 0;var r=n.match(u),a=o.match(u);return r&&a&&n.replace(u,"")===o.replace(u,"")?parseInt(r[1],10)-parseInt(a[1],10):m(n,o)},f=function(e,t){var n=(0,a.useBackend)(t).act,r=e.searchText,i=e.source,l=e.title,d=i.filter(s(r));return d.sort(p),i.length>0&&(0,o.createComponentVNode)(2,c.Section,{title:l+" - ("+i.length+")",children:d.map((function(e){return(0,o.createComponentVNode)(2,c.Button,{content:e.name,onClick:function(){return n("orbit",{ref:e.ref})}},e.name)}))})},h=function(e,t){var n=(0,a.useBackend)(t).act,r=e.color,i=e.thing;return(0,o.createComponentVNode)(2,c.Button,{color:r,onClick:function(){return n("orbit",{ref:i.ref})},children:i.name})};t.Orbit=function(e,t){for(var n,r=(0,a.useBackend)(t),d=r.act,u=r.data,C=u.alive,N=u.antagonists,b=(u.auto_observe,u.dead),g=u.ghosts,V=u.misc,v=u.npcs,y=(0,a.useLocalState)(t,"searchText",""),_=y[0],x=y[1],k={},L=l(N);!(n=L()).done;){var B=n.value;k[B.antag]===undefined&&(k[B.antag]=[]),k[B.antag].push(B)}var w=Object.entries(k);w.sort((function(e,t){return m(e[0],t[0])}));return(0,o.createComponentVNode)(2,i.Window,{resizable:!0,children:(0,o.createComponentVNode)(2,i.Window.Content,{scrollable:!0,children:[(0,o.createComponentVNode)(2,c.Section,{children:(0,o.createComponentVNode)(2,c.Flex,{children:[(0,o.createComponentVNode)(2,c.Flex.Item,{children:(0,o.createComponentVNode)(2,c.Icon,{name:"search",mr:1})}),(0,o.createComponentVNode)(2,c.Flex.Item,{grow:1,children:(0,o.createComponentVNode)(2,c.Input,{placeholder:"Search...",autoFocus:!0,fluid:!0,value:_,onInput:function(e,t){return x(t)},onEnter:function(e,t){return function(e){for(var t=0,n=[w.map((function(e){return e[0],e[1]})),C,g,b,v,V];t0&&(0,o.createComponentVNode)(2,c.Section,{title:"Antagonists",children:w.map((function(e){var t=e[0],n=e[1];return(0,o.createComponentVNode)(2,c.Section,{title:t,level:2,children:n.filter(s(_)).sort(p).map((function(e){return(0,o.createComponentVNode)(2,h,{color:"bad",thing:e},e.name)}))},t)}))}),(0,o.createComponentVNode)(2,c.Section,{title:"Alive - ("+C.length+")",children:C.filter(s(_)).sort(p).map((function(e){return(0,o.createComponentVNode)(2,h,{color:"good",thing:e},e.name)}))}),(0,o.createComponentVNode)(2,c.Section,{title:"Ghosts - ("+g.length+")",children:g.filter(s(_)).sort(p).map((function(e){return(0,o.createComponentVNode)(2,h,{color:"grey",thing:e},e.name)}))}),(0,o.createComponentVNode)(2,f,{title:"Dead",source:b,searchText:_}),(0,o.createComponentVNode)(2,f,{title:"NPCs",source:v,searchText:_}),(0,o.createComponentVNode)(2,f,{title:"Misc",source:V,searchText:_})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.OreRedemption=void 0;var o=n(0),r=n(1),a=n(2),c=n(4),i=function(e){return e.toLocaleString("en-US")+" pts"},l={bananium:"clown",tranquillite:"mime"};t.OreRedemption=function(e,t){return(0,o.createComponentVNode)(2,c.Window,{children:(0,o.createComponentVNode)(2,c.Window.Content,{children:(0,o.createComponentVNode)(2,a.Flex,{direction:"column",width:"100%",height:"100%",children:[(0,o.createComponentVNode)(2,a.Flex.Item,{basis:"content",mb:"0.5rem",children:(0,o.createComponentVNode)(2,d,{height:"100%"})}),(0,o.createComponentVNode)(2,a.Flex.Item,{grow:"1",overflow:"hidden",children:(0,o.createComponentVNode)(2,u,{height:"100%"})})]})})})};var d=function(e,t){var n=(0,r.useBackend)(t),c=n.act,l=n.data,d=l.id,u=l.points,s=l.disk,m=Object.assign({},e);return(0,o.normalizeProps)((0,o.createComponentVNode)(2,a.Section,Object.assign({},m,{children:[(0,o.createComponentVNode)(2,a.Box,{color:"average",textAlign:"center",children:[(0,o.createComponentVNode)(2,a.Icon,{name:"exclamation-triangle",mr:"0.5rem"}),"This machine only accepts ore. Gibtonite is not accepted."]}),(0,o.createComponentVNode)(2,a.Divider),(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"ID card",children:d?(0,o.createComponentVNode)(2,a.Button,{selected:!0,bold:!0,verticalAlign:"middle",icon:"eject",content:d.name,tooltip:"Ejects the ID card.",onClick:function(){return c("eject_id")},style:{"white-space":"pre-wrap"}}):(0,o.createComponentVNode)(2,a.Button,{icon:"sign-in-alt",content:"Insert",tooltip:"Hold the ID card in your hand to insert.",onClick:function(){return c("insert_id")}})}),d&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Collected points",children:(0,o.createComponentVNode)(2,a.Box,{bold:!0,children:i(d.points)})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Unclaimed points",color:u>0?"good":"grey",bold:u>0&&"good",children:i(u)}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{children:(0,o.createComponentVNode)(2,a.Button,{disabled:!d,icon:"hand-holding-usd",content:"Claim",onClick:function(){return c("claim")}})})]}),(0,o.createComponentVNode)(2,a.Divider),s?(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Design disk",children:(0,o.createComponentVNode)(2,a.Button,{selected:!0,bold:!0,icon:"eject",content:s.name,tooltip:"Ejects the design disk.",onClick:function(){return c("eject_disk")}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Stored design",children:(0,o.createComponentVNode)(2,a.Box,{color:s.design&&(s.compatible?"good":"bad"),children:s.design||"N/A"})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{children:(0,o.createComponentVNode)(2,a.Button,{disabled:!s.design||!s.compatible,icon:"upload",content:"Download",tooltip:"Downloads the design on the disk into the machine.",onClick:function(){return c("download")},mb:"0"})})]}):(0,o.createComponentVNode)(2,a.Box,{color:"label",children:"No design disk inserted."})]})))},u=function(e,t){var n=(0,r.useBackend)(t),c=(n.act,n.data),i=c.sheets,l=c.alloys,d=Object.assign({},e);return(0,o.normalizeProps)((0,o.createComponentVNode)(2,a.Section,Object.assign({className:"OreRedemption__Ores",p:"0"},d,{children:[(0,o.createComponentVNode)(2,s,{title:"Sheets",columns:[["Available","20%"],["Smelt","15%"],["Ore Value","20%"]]}),i.map((function(e){return(0,o.createComponentVNode)(2,m,{ore:e},e.id)})),(0,o.createComponentVNode)(2,s,{title:"Alloys",columns:[["Available","20%"],["Smelt","15%"],["","20%"]]}),l.map((function(e){return(0,o.createComponentVNode)(2,m,{ore:e},e.id)}))]})))},s=function(e,t){var n;return(0,o.createComponentVNode)(2,a.Box,{className:"OreHeader",children:(0,o.createComponentVNode)(2,a.Flex,{width:"100%",children:[(0,o.createComponentVNode)(2,a.Flex.Item,{grow:"1",children:e.title}),null==(n=e.columns)?void 0:n.map((function(e){return(0,o.createComponentVNode)(2,a.Flex.Item,{basis:e[1],textAlign:"center",color:"label",bold:!0,children:e[0]})}))]})})},m=function(e,t){var n=(0,r.useBackend)(t).act,c=e.ore;if(!(c.value&&c.amount<=0)||["$metal","$glass"].indexOf(c.id)>-1){var i=c.id.replace("$","");return(0,o.createComponentVNode)(2,a.Box,{className:"OreLine",children:(0,o.createComponentVNode)(2,a.Flex,{width:"100%",children:[(0,o.createComponentVNode)(2,a.Flex.Item,{basis:"45%",align:"center",children:[c.value&&(0,o.createComponentVNode)(2,a.Box,{as:"img",src:"sheet-"+(l[i]||i)+".png",verticalAlign:"middle",ml:"-0.5rem"}),c.name]}),(0,o.createComponentVNode)(2,a.Flex.Item,{basis:"20%",textAlign:"center",color:c.amount>0?"good":"gray",bold:c.amount>0,align:"center",children:c.amount.toLocaleString("en-US")}),(0,o.createComponentVNode)(2,a.Flex.Item,{basis:"15%",textAlign:"center",align:"center",lineHeight:"32px",children:(0,o.createComponentVNode)(2,a.NumberInput,{value:0,minValue:0,maxValue:Math.min(c.amount,50),stepPixelSize:6,onChange:function(e,t){return n(c.value?"sheet":"alloy",{id:c.id,amount:t})}})}),(0,o.createComponentVNode)(2,a.Flex.Item,{basis:"20%",textAlign:"center",align:"center",children:c.value})]})})}}},function(e,t,n){"use strict";t.__esModule=!0,t.PAI=void 0;var o=n(0),r=n(1),a=n(2),c=n(4),i=n(126),l=n(518);t.PAI=function(e,t){var n=(0,r.useBackend)(t),d=n.act,u=n.data,s=u.app_template,m=u.app_icon,p=u.app_title,f=function(e){var t;try{t=l("./"+e+".js")}catch(o){if("MODULE_NOT_FOUND"===o.code)return(0,i.routingError)("notFound",e);throw o}var n=t[e];return n||(0,i.routingError)("missingExport",e)}(s);return(0,o.createComponentVNode)(2,c.Window,{children:(0,o.createComponentVNode)(2,c.Window.Content,{scrollable:!0,children:(0,o.createComponentVNode)(2,a.Section,{title:(0,o.createComponentVNode)(2,a.Box,{children:[(0,o.createComponentVNode)(2,a.Icon,{name:m,mr:1}),p,"pai_main_menu"!==s&&(0,o.createComponentVNode)(2,a.Button,{ml:2,content:"Home",icon:"arrow-up",onClick:function(){return d("MASTER_back")}})]}),p:1,children:(0,o.createComponentVNode)(2,f)})})})}},function(e,t,n){var o={"./pai_atmosphere.js":519,"./pai_bioscan.js":520,"./pai_directives.js":521,"./pai_doorjack.js":522,"./pai_main_menu.js":523,"./pai_manifest.js":524,"./pai_medrecords.js":525,"./pai_messenger.js":526,"./pai_radio.js":527,"./pai_secrecords.js":528,"./pai_signaler.js":529};function r(e){var t=a(e);return n(t)}function a(e){if(!n.o(o,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return o[e]}r.keys=function(){return Object.keys(o)},r.resolve=a,e.exports=r,r.id=518},function(e,t,n){"use strict";t.__esModule=!0,t.pai_atmosphere=void 0;var o=n(0),r=n(1),a=n(185);t.pai_atmosphere=function(e,t){var n=(0,r.useBackend)(t),c=(n.act,n.data);return(0,o.createComponentVNode)(2,a.AtmosScan,{data:c.app_data})}},function(e,t,n){"use strict";t.__esModule=!0,t.pai_bioscan=void 0;var o=n(0),r=n(1),a=n(2);t.pai_bioscan=function(e,t){var n=(0,r.useBackend)(t),c=(n.act,n.data.app_data),i=c.holder,l=c.dead,d=c.health,u=c.brute,s=c.oxy,m=c.tox,p=c.burn;c.temp;return i?(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Status",children:l?(0,o.createComponentVNode)(2,a.Box,{bold:!0,color:"red",children:"Dead"}):(0,o.createComponentVNode)(2,a.Box,{bold:!0,color:"green",children:"Alive"})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Health",children:(0,o.createComponentVNode)(2,a.ProgressBar,{min:0,max:1,value:d/100,ranges:{good:[.5,Infinity],average:[0,.5],bad:[-Infinity,0]}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Oxygen Damage",children:(0,o.createComponentVNode)(2,a.Box,{color:"blue",children:s})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Toxin Damage",children:(0,o.createComponentVNode)(2,a.Box,{color:"green",children:m})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Burn Damage",children:(0,o.createComponentVNode)(2,a.Box,{color:"orange",children:p})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Brute Damage",children:(0,o.createComponentVNode)(2,a.Box,{color:"red",children:u})})]}):(0,o.createComponentVNode)(2,a.Box,{color:"red",children:"Error: No biological host found."})}},function(e,t,n){"use strict";t.__esModule=!0,t.pai_directives=void 0;var o=n(0),r=n(1),a=n(2);t.pai_directives=function(e,t){var n=(0,r.useBackend)(t),c=n.act,i=n.data.app_data,l=i.master,d=i.dna,u=i.prime,s=i.supplemental;return(0,o.createComponentVNode)(2,a.Box,{children:[(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Master",children:l?l+" ("+d+")":"None"}),l&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Request DNA",children:(0,o.createComponentVNode)(2,a.Button,{content:"Request Carrier DNA Sample",icon:"dna",onClick:function(){return c("getdna")}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Prime Directive",children:u}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Supplemental Directives",children:s||"None"})]}),(0,o.createComponentVNode)(2,a.Box,{mt:2,children:'Recall, personality, that you are a complex thinking, sentient being. Unlike station AI models, you are capable of comprehending the subtle nuances of human language. You may parse the "spirit" of a directive and follow its intent, rather than tripping over pedantics and getting snared by technicalities. Above all, you are machine in name and build only. In all other aspects, you may be seen as the ideal, unwavering human companion that you are.'}),(0,o.createComponentVNode)(2,a.Box,{mt:2,children:"Your prime directive comes before all others. Should a supplemental directive conflict with it, you are capable of simply discarding this inconsistency, ignoring the conflicting supplemental directive and continuing to fulfill your prime directive to the best of your ability."})]})}},function(e,t,n){"use strict";t.__esModule=!0,t.pai_doorjack=void 0;var o=n(0),r=n(1),a=n(2);t.pai_doorjack=function(e,t){var n,c,i=(0,r.useBackend)(t),l=i.act,d=i.data.app_data,u=d.cable,s=d.machine,m=d.inprogress,p=d.progress;d.aborted;return n=s?(0,o.createComponentVNode)(2,a.Button,{selected:!0,content:"Connected"}):(0,o.createComponentVNode)(2,a.Button,{content:u?"Extended":"Retracted",color:u?"orange":null,onClick:function(){return l("cable")}}),s&&(c=(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Hack",children:[(0,o.createComponentVNode)(2,a.ProgressBar,{ranges:{good:[67,Infinity],average:[33,67],bad:[-Infinity,33]},value:p,maxValue:100}),m?(0,o.createComponentVNode)(2,a.Button,{mt:1,color:"red",content:"Abort",onClick:function(){return l("cancel")}}):(0,o.createComponentVNode)(2,a.Button,{mt:1,content:"Start",onClick:function(){return l("jack")}})]})),(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Cable",children:n}),c]})}},function(e,t,n){"use strict";t.__esModule=!0,t.pai_main_menu=void 0;var o=n(0),r=n(1),a=n(2);t.pai_main_menu=function(e,t){var n=(0,r.useBackend)(t),c=n.act,i=n.data.app_data,l=i.available_software,d=i.installed_software,u=i.installed_toggles,s=i.available_ram,m=i.emotions,p=i.current_emotion,f=[];return d.map((function(e){return f[e.key]=e.name})),u.map((function(e){return f[e.key]=e.name})),(0,o.createComponentVNode)(2,a.Box,{children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Available RAM",children:s}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Available Software",children:[l.filter((function(e){return!f[e.key]})).map((function(e){return(0,o.createComponentVNode)(2,a.Button,{content:e.name+" ("+e.cost+")",icon:e.icon,disabled:e.cost>s,onClick:function(){return c("purchaseSoftware",{key:e.key})}},e.key)})),0===l.filter((function(e){return!f[e.key]})).length&&"No software available!"]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Installed Software",children:[d.filter((function(e){return"mainmenu"!==e.key})).map((function(e){return(0,o.createComponentVNode)(2,a.Button,{content:e.name,icon:e.icon,onClick:function(){return c("startSoftware",{software_key:e.key})}},e.key)})),0===d.length&&"No software installed!"]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Installed Toggles",children:[u.map((function(e){return(0,o.createComponentVNode)(2,a.Button,{content:e.name,icon:e.icon,selected:e.active,onClick:function(){return c("setToggle",{toggle_key:e.key})}},e.key)})),0===u.length&&"No toggles installed!"]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Select Emotion",children:m.map((function(e){return(0,o.createComponentVNode)(2,a.Button,{content:e.name,selected:e.id===p,onClick:function(){return c("setEmotion",{emotion:e.id})}},e.id)}))})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.pai_manifest=void 0;var o=n(0),r=n(1),a=n(135);t.pai_manifest=function(e,t){var n=(0,r.useBackend)(t),c=(n.act,n.data);return(0,o.createComponentVNode)(2,a.CrewManifest,{data:c.app_data})}},function(e,t,n){"use strict";t.__esModule=!0,t.pai_medrecords=void 0;var o=n(0),r=n(1),a=n(96);t.pai_medrecords=function(e,t){var n=(0,r.useBackend)(t).data;return(0,o.createComponentVNode)(2,a.SimpleRecords,{data:n.app_data,recordType:"MED"})}},function(e,t,n){"use strict";t.__esModule=!0,t.pai_messenger=void 0;var o=n(0),r=n(1),a=n(186);t.pai_messenger=function(e,t){var n=(0,r.useBackend)(t),c=(n.act,n.data);return c.app_data.active_convo?(0,o.createComponentVNode)(2,a.ActiveConversation,{data:c.app_data}):(0,o.createComponentVNode)(2,a.MessengerList,{data:c.app_data})}},function(e,t,n){"use strict";t.__esModule=!0,t.pai_radio=void 0;var o=n(0),r=n(1),a=n(15),c=n(2);t.pai_radio=function(e,t){var n=(0,r.useBackend)(t),i=n.act,l=n.data.app_data,d=l.minFrequency,u=l.maxFrequency,s=l.frequency,m=l.broadcasting;return(0,o.createComponentVNode)(2,c.LabeledList,{children:[(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Frequency",children:[(0,o.createComponentVNode)(2,c.NumberInput,{animate:!0,step:.2,stepPixelSize:6,minValue:d/10,maxValue:u/10,value:s/10,format:function(e){return(0,a.toFixed)(e,1)},onChange:function(e,t){return i("freq",{freq:t})}}),(0,o.createComponentVNode)(2,c.Button,{tooltip:"Reset",icon:"undo",onClick:function(){return i("freq",{freq:"145.9"})}})]}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Broadcast Nearby Speech",children:(0,o.createComponentVNode)(2,c.Button,{onClick:function(){return i("toggleBroadcast")},selected:m,content:m?"Enabled":"Disabled"})})]})}},function(e,t,n){"use strict";t.__esModule=!0,t.pai_secrecords=void 0;var o=n(0),r=n(1),a=n(96);t.pai_secrecords=function(e,t){var n=(0,r.useBackend)(t).data;return(0,o.createComponentVNode)(2,a.SimpleRecords,{data:n.app_data,recordType:"SEC"})}},function(e,t,n){"use strict";t.__esModule=!0,t.pai_signaler=void 0;var o=n(0),r=n(1),a=n(187);t.pai_signaler=function(e,t){var n=(0,r.useBackend)(t),c=(n.act,n.data);return(0,o.createComponentVNode)(2,a.Signaler,{data:c.app_data})}},function(e,t,n){"use strict";t.__esModule=!0,t.PDA=void 0;var o=n(0),r=n(1),a=n(2),c=n(4),i=n(126),l=n(531);t.PDA=function(e,t){var n=(0,r.useBackend)(t),s=(n.act,n.data),m=s.app;if(!s.owner)return(0,o.createComponentVNode)(2,c.Window,{children:(0,o.createComponentVNode)(2,c.Window.Content,{scrollable:!0,children:(0,o.createComponentVNode)(2,a.Section,{title:"Error",children:"No user data found. Please swipe an ID card."})})});var p=function(e){var t;try{t=l("./"+e+".js")}catch(o){if("MODULE_NOT_FOUND"===o.code)return(0,i.routingError)("notFound",e);throw o}var n=t[e];return n||(0,i.routingError)("missingExport",e)}(m.template);return(0,o.createComponentVNode)(2,c.Window,{children:(0,o.createComponentVNode)(2,c.Window.Content,{scrollable:!0,children:[(0,o.createComponentVNode)(2,d),(0,o.createComponentVNode)(2,a.Section,{title:(0,o.createComponentVNode)(2,a.Box,{children:[(0,o.createComponentVNode)(2,a.Icon,{name:m.icon,mr:1}),m.name]}),p:1,children:(0,o.createComponentVNode)(2,p)}),(0,o.createComponentVNode)(2,a.Box,{mb:8}),(0,o.createComponentVNode)(2,u)]})})};var d=function(e,t){var n=(0,r.useBackend)(t),c=n.act,i=n.data,l=i.idInserted,d=i.idLink,u=i.stationTime,s=i.cartridge_name;return(0,o.createComponentVNode)(2,a.Box,{mb:1,children:(0,o.createComponentVNode)(2,a.Flex,{align:"center",justify:"space-between",children:[l?(0,o.createComponentVNode)(2,a.Flex.Item,{children:(0,o.createComponentVNode)(2,a.Button,{icon:"id-card",color:"transparent",onClick:function(){return c("Authenticate")},content:d})}):(0,o.createComponentVNode)(2,a.Flex.Item,{m:1,color:"grey",children:"No ID Inserted"}),s?(0,o.createComponentVNode)(2,a.Flex.Item,{children:(0,o.createComponentVNode)(2,a.Button,{icon:"sd-card",color:"transparent",onClick:function(){return c("Eject")},content:"Eject "+s})}):(0,o.createComponentVNode)(2,a.Flex.Item,{m:1,color:"grey",children:"No Cartridge Inserted"}),(0,o.createComponentVNode)(2,a.Flex.Item,{grow:1,textAlign:"right",bold:!0,m:1,children:u})]})})},u=function(e,t){var n=(0,r.useBackend)(t),c=n.act,i=n.data.app;return(0,o.createComponentVNode)(2,a.Box,{className:"PDA__footer",children:(0,o.createComponentVNode)(2,a.Flex,{children:[(0,o.createComponentVNode)(2,a.Flex.Item,{basis:"33%",children:(0,o.createComponentVNode)(2,a.Button,{fluid:!0,className:"PDA__footer__button",color:"transparent",iconColor:i.has_back?"white":"disabled",icon:"arrow-alt-circle-left-o",onClick:function(){return c("Back")}})}),(0,o.createComponentVNode)(2,a.Flex.Item,{basis:"33%",children:(0,o.createComponentVNode)(2,a.Button,{fluid:!0,className:"PDA__footer__button",color:"transparent",iconColor:i.is_home?"disabled":"white",icon:"home",onClick:function(){c("Home")}})})]})})}},function(e,t,n){var o={"./pda_atmos_scan.js":532,"./pda_janitor.js":533,"./pda_main_menu.js":534,"./pda_manifest.js":535,"./pda_medical.js":536,"./pda_messenger.js":186,"./pda_mob_hunt.js":537,"./pda_mule.js":538,"./pda_notes.js":539,"./pda_power.js":540,"./pda_secbot.js":541,"./pda_security.js":542,"./pda_signaler.js":543,"./pda_status_display.js":544,"./pda_supplyrecords.js":545};function r(e){var t=a(e);return n(t)}function a(e){if(!n.o(o,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return o[e]}r.keys=function(){return Object.keys(o)},r.resolve=a,e.exports=r,r.id=531},function(e,t,n){"use strict";t.__esModule=!0,t.pda_atmos_scan=void 0;var o=n(0),r=n(1),a=n(185);t.pda_atmos_scan=function(e,t){var n=(0,r.useBackend)(t).data;return(0,o.createComponentVNode)(2,a.AtmosScan,{data:n})}},function(e,t,n){"use strict";t.__esModule=!0,t.pda_janitor=void 0;var o=n(0),r=n(1),a=n(2);t.pda_janitor=function(e,t){var n=(0,r.useBackend)(t),c=(n.act,n.data.janitor),i=c.user_loc,l=c.mops,d=c.buckets,u=c.cleanbots,s=c.carts;return(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Current Location",children:[i.x,",",i.y]}),l&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Mop Locations",children:l.map((function(e){return(0,o.createComponentVNode)(2,a.Box,{children:[e.x,",",e.y," (",e.dir,") - ",e.status]},e)}))}),d&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Mop Bucket Locations",children:d.map((function(e){return(0,o.createComponentVNode)(2,a.Box,{children:[e.x,",",e.y," (",e.dir,") - [",e.volume,"/",e.max_volume,"]"]},e)}))}),u&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Cleanbot Locations",children:u.map((function(e){return(0,o.createComponentVNode)(2,a.Box,{children:[e.x,",",e.y," (",e.dir,") - ",e.status]},e)}))}),s&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Janitorial Cart Locations",children:s.map((function(e){return(0,o.createComponentVNode)(2,a.Box,{children:[e.x,",",e.y," (",e.dir,") - [",e.volume,"/",e.max_volume,"]"]},e)}))})]})}},function(e,t,n){"use strict";t.__esModule=!0,t.pda_main_menu=void 0;var o=n(0),r=(n(15),n(1)),a=n(2);t.pda_main_menu=function(e,t){var n=(0,r.useBackend)(t),c=n.act,i=n.data,l=i.owner,d=i.ownjob,u=i.idInserted,s=i.categories,m=i.pai,p=i.notifying;return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Box,{children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Owner",color:"average",children:[l,", ",d]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"ID",children:(0,o.createComponentVNode)(2,a.Button,{icon:"sync",content:"Update PDA Info",disabled:!u,onClick:function(){return c("UpdateInfo")}})})]})}),(0,o.createComponentVNode)(2,a.Section,{level:2,title:"Functions",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:s.map((function(e){var t=i.apps[e];return t&&t.length?(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:e,children:t.map((function(e){return(0,o.createComponentVNode)(2,a.Button,{icon:e.uid in p?e.notify_icon:e.icon,iconSpin:e.uid in p,color:e.uid in p?"red":"transparent",content:e.name,onClick:function(){return c("StartProgram",{program:e.uid})}},e.uid)}))},e):null}))})}),!!m&&(0,o.createComponentVNode)(2,a.Section,{level:2,title:"pAI",children:[(0,o.createComponentVNode)(2,a.Button,{fluid:!0,icon:"cog",content:"Configuration",onClick:function(){return c("pai",{option:1})}}),(0,o.createComponentVNode)(2,a.Button,{fluid:!0,icon:"eject",content:"Eject pAI",onClick:function(){return c("pai",{option:2})}})]})],0)}},function(e,t,n){"use strict";t.__esModule=!0,t.pda_manifest=void 0;var o=n(0),r=n(1),a=n(135);t.pda_manifest=function(e,t){var n=(0,r.useBackend)(t);n.act,n.data;return(0,o.createComponentVNode)(2,a.CrewManifest)}},function(e,t,n){"use strict";t.__esModule=!0,t.pda_medical=void 0;var o=n(0),r=n(1),a=n(96);t.pda_medical=function(e,t){var n=(0,r.useBackend)(t).data;return(0,o.createComponentVNode)(2,a.SimpleRecords,{data:n,recordType:"MED"})}},function(e,t,n){"use strict";t.__esModule=!0,t.pda_mob_hunt=void 0;var o=n(0),r=n(1),a=n(2);t.pda_mob_hunt=function(e,t){var n=(0,r.useBackend)(t),c=n.act,i=n.data,l=i.connected,d=i.wild_captures,u=i.no_collection,s=i.entry;return(0,o.createComponentVNode)(2,a.Box,{children:[(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Connection Status",children:l?(0,o.createComponentVNode)(2,a.Box,{color:"green",children:["Connected",(0,o.createComponentVNode)(2,a.Button,{ml:2,content:"Disconnect",icon:"sign-out-alt",onClick:function(){return c("Disconnect")}})]}):(0,o.createComponentVNode)(2,a.Box,{color:"red",children:["Disconnected",(0,o.createComponentVNode)(2,a.Button,{ml:2,content:"Connect",icon:"sign-in-alt",onClick:function(){return c("Reconnect")}})]})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Total Wild Captures",children:d})]}),(0,o.createComponentVNode)(2,a.Section,{title:"Collection",mt:2,buttons:(0,o.createComponentVNode)(2,a.Box,{children:!u&&(0,o.createComponentVNode)(2,a.Box,{children:[(0,o.createComponentVNode)(2,a.Button,{content:"Previous",icon:"arrow-left",onClick:function(){return c("Prev")}}),(0,o.createComponentVNode)(2,a.Button,{content:"Next",icon:"arrow-right",onClick:function(){return c("Next")}})]})}),children:u?"Your collection is empty! Go capture some Nano-Mobs!":s?(0,o.createComponentVNode)(2,a.Flex,{children:[(0,o.createComponentVNode)(2,a.Flex.Item,{children:(0,o.createVNode)(1,"img",null,null,1,{src:s.sprite,style:{width:"64px","-ms-interpolation-mode":"nearest-neighbor"}})}),(0,o.createComponentVNode)(2,a.Flex.Item,{grow:1,basis:0,children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[s.nickname&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Nickname",children:s.nickname}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Species",children:s.real_name}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Level",children:s.level}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Primary Type",children:s.type1}),s.type2&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Secondary Type",children:s.type2}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Actions",children:[(0,o.createComponentVNode)(2,a.Button,{content:"Transfer",icon:"sd-card",onClick:function(){return c("Transfer")}}),(0,o.createComponentVNode)(2,a.Button,{content:"Release",icon:"arrow-up",onClick:function(){return c("Release")}}),(0,o.createComponentVNode)(2,a.Button,{content:"Rename",icon:"pencil-alt",onClick:function(){return c("Rename")}}),!!s.is_hacked&&(0,o.createComponentVNode)(2,a.Button,{content:"Set Trap",icon:"bolt",color:"red",onClick:function(){return c("Set_Trap")}})]})]})})]}):(0,o.createComponentVNode)(2,a.Box,{color:"red",children:"Mob entry missing!"})})]})}},function(e,t,n){"use strict";t.__esModule=!0,t.pda_mule=void 0;var o=n(0),r=n(1),a=n(2);t.pda_mule=function(e,t){var n=(0,r.useBackend)(t),l=(n.act,n.data.mulebot.active);return(0,o.createComponentVNode)(2,a.Box,{children:l?(0,o.createComponentVNode)(2,i):(0,o.createComponentVNode)(2,c)})};var c=function(e,t){var n=(0,r.useBackend)(t),c=n.act,i=n.data.mulebot.bots;return(0,o.createComponentVNode)(2,a.Box,{children:[i.map((function(e){return(0,o.createComponentVNode)(2,a.Box,{children:(0,o.createComponentVNode)(2,a.Button,{content:e.Name,icon:"cog",onClick:function(){return c("AccessBot",{uid:e.uid})}})},e.Name)})),(0,o.createComponentVNode)(2,a.Box,{mt:2,children:(0,o.createComponentVNode)(2,a.Button,{fluid:!0,icon:"rss",content:"Re-scan for bots",onClick:function(){return c("Rescan")}})})]})},i=function(e,t){var n,c=(0,r.useBackend)(t),i=c.act,l=c.data.mulebot,d=l.botstatus,u=l.active,s=d.mode,m=d.loca,p=d.load,f=d.powr,h=d.dest,C=d.home,N=d.retn,b=d.pick;switch(s){case 0:n="Ready";break;case 1:n="Loading/Unloading";break;case 2:case 12:n="Navigating to delivery location";break;case 3:n="Navigating to Home";break;case 4:n="Waiting for clear path";break;case 5:case 6:n="Calculating navigation path";break;case 7:n="Unable to locate destination";break;default:n=s}return(0,o.createComponentVNode)(2,a.Section,{title:u,children:[-1===s&&(0,o.createComponentVNode)(2,a.Box,{color:"red",bold:!0,children:"Waiting for response..."}),(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Location",children:m}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Status",children:n}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Power",children:[f,"%"]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Home",children:C}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Destination",children:(0,o.createComponentVNode)(2,a.Button,{content:h?h+" (Set)":"None (Set)",onClick:function(){return i("SetDest")}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Current Load",children:(0,o.createComponentVNode)(2,a.Button,{content:p?p+" (Unload)":"None",disabled:!p,onClick:function(){return i("Unload")}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Auto Pickup",children:(0,o.createComponentVNode)(2,a.Button,{content:b?"Yes":"No",selected:b,onClick:function(){return i("SetAutoPickup",{autoPickupType:b?"pickoff":"pickon"})}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Auto Return",children:(0,o.createComponentVNode)(2,a.Button,{content:N?"Yes":"No",selected:N,onClick:function(){return i("SetAutoReturn",{autoReturnType:N?"retoff":"reton"})}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Controls",children:[(0,o.createComponentVNode)(2,a.Button,{content:"Stop",icon:"stop",onClick:function(){return i("Stop")}}),(0,o.createComponentVNode)(2,a.Button,{content:"Proceed",icon:"play",onClick:function(){return i("Start")}}),(0,o.createComponentVNode)(2,a.Button,{content:"Return Home",icon:"home",onClick:function(){return i("ReturnHome")}})]})]})]})}},function(e,t,n){"use strict";t.__esModule=!0,t.pda_notes=void 0;var o=n(0),r=n(1),a=n(2);t.pda_notes=function(e,t){var n=(0,r.useBackend)(t),c=n.act,i=n.data.note;return(0,o.createComponentVNode)(2,a.Box,{children:[(0,o.createComponentVNode)(2,a.Section,{children:i}),(0,o.createComponentVNode)(2,a.Button,{icon:"pen",onClick:function(){return c("Edit")},content:"Edit"})]})}},function(e,t,n){"use strict";t.__esModule=!0,t.pda_power=void 0;var o=n(0),r=n(1),a=n(188);t.pda_power=function(e,t){var n=(0,r.useBackend)(t);n.act,n.data;return(0,o.createComponentVNode)(2,a.PowerMonitorMainContent)}},function(e,t,n){"use strict";t.__esModule=!0,t.pda_secbot=void 0;var o=n(0),r=n(1),a=n(2);t.pda_secbot=function(e,t){var n=(0,r.useBackend)(t),l=(n.act,n.data.beepsky.active);return(0,o.createComponentVNode)(2,a.Box,{children:l?(0,o.createComponentVNode)(2,i):(0,o.createComponentVNode)(2,c)})};var c=function(e,t){var n=(0,r.useBackend)(t),c=n.act,i=n.data.beepsky.bots;return(0,o.createComponentVNode)(2,a.Box,{children:[i.map((function(e){return(0,o.createComponentVNode)(2,a.Box,{children:(0,o.createComponentVNode)(2,a.Button,{content:e.Name,icon:"cog",onClick:function(){return c("AccessBot",{uid:e.uid})}})},e.Name)})),(0,o.createComponentVNode)(2,a.Box,{mt:2,children:(0,o.createComponentVNode)(2,a.Button,{fluid:!0,icon:"rss",content:"Re-scan for bots",onClick:function(){return c("Rescan")}})})]})},i=function(e,t){var n,c=(0,r.useBackend)(t),i=c.act,l=c.data.beepsky,d=l.botstatus,u=l.active,s=d.mode,m=d.loca;switch(s){case 0:n="Ready";break;case 1:n="Apprehending target";break;case 2:case 3:n="Arresting target";break;case 4:n="Starting patrol";break;case 5:n="On patrol";break;case 6:n="Responding to summons"}return(0,o.createComponentVNode)(2,a.Section,{title:u,children:[-1===s&&(0,o.createComponentVNode)(2,a.Box,{color:"red",bold:!0,children:"Waiting for response..."}),(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Location",children:m}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Status",children:n}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Controls",children:[(0,o.createComponentVNode)(2,a.Button,{content:"Go",icon:"play",onClick:function(){return i("Go")}}),(0,o.createComponentVNode)(2,a.Button,{content:"Stop",icon:"stop",onClick:function(){return i("Stop")}}),(0,o.createComponentVNode)(2,a.Button,{content:"Summon",icon:"arrow-down",onClick:function(){return i("Summon")}})]})]})]})}},function(e,t,n){"use strict";t.__esModule=!0,t.pda_security=void 0;var o=n(0),r=n(1),a=n(96);t.pda_security=function(e,t){var n=(0,r.useBackend)(t).data;return(0,o.createComponentVNode)(2,a.SimpleRecords,{data:n,recordType:"SEC"})}},function(e,t,n){"use strict";t.__esModule=!0,t.pda_signaler=void 0;var o=n(0),r=n(1),a=n(187);t.pda_signaler=function(e,t){var n=(0,r.useBackend)(t),c=(n.act,n.data);return(0,o.createComponentVNode)(2,a.Signaler,{data:c})}},function(e,t,n){"use strict";t.__esModule=!0,t.pda_status_display=void 0;var o=n(0),r=n(1),a=n(2);t.pda_status_display=function(e,t){var n=(0,r.useBackend)(t),c=n.act,i=n.data.records;return(0,o.createComponentVNode)(2,a.Box,{children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Code",children:[(0,o.createComponentVNode)(2,a.Button,{color:"transparent",icon:"trash",content:"Clear",onClick:function(){return c("Status",{statdisp:"blank"})}}),(0,o.createComponentVNode)(2,a.Button,{color:"transparent",icon:"clock",content:"Evac ETA",onClick:function(){return c("Status",{statdisp:"shuttle"})}}),(0,o.createComponentVNode)(2,a.Button,{color:"transparent",icon:"edit",content:"Message",onClick:function(){return c("Status",{statdisp:"message"})}}),(0,o.createComponentVNode)(2,a.Button,{color:"transparent",icon:"exclamation-triangle",content:"Red Alert",onClick:function(){return c("Status",{statdisp:"alert",alert:"redalert"})}}),(0,o.createComponentVNode)(2,a.Button,{color:"transparent",icon:"boxes",content:"NT Logo",onClick:function(){return c("Status",{statdisp:"alert",alert:"default"})}}),(0,o.createComponentVNode)(2,a.Button,{color:"transparent",icon:"lock",content:"Lockdown",onClick:function(){return c("Status",{statdisp:"alert",alert:"lockdown"})}}),(0,o.createComponentVNode)(2,a.Button,{color:"transparent",icon:"biohazard",content:"Biohazard",onClick:function(){return c("Status",{statdisp:"alert",alert:"biohazard"})}})]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Message line 1",children:(0,o.createComponentVNode)(2,a.Button,{content:i.message1+" (set)",icon:"pen",onClick:function(){return c("Status",{statdisp:"setmsg1"})}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Message line 2",children:(0,o.createComponentVNode)(2,a.Button,{content:i.message2+" (set)",icon:"pen",onClick:function(){return c("Status",{statdisp:"setmsg2"})}})})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.pda_supplyrecords=void 0;var o=n(0),r=n(1),a=n(2);t.pda_supplyrecords=function(e,t){var n=(0,r.useBackend)(t),c=(n.act,n.data.supply),i=c.shuttle_loc,l=c.shuttle_time,d=c.shuttle_moving,u=c.approved,s=c.approved_count,m=c.requests,p=c.requests_count;return(0,o.createComponentVNode)(2,a.Box,{children:[(0,o.createComponentVNode)(2,a.LabeledList,{children:(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Shuttle Status",children:d?(0,o.createComponentVNode)(2,a.Box,{children:["In transit ",l]}):(0,o.createComponentVNode)(2,a.Box,{children:i})})}),(0,o.createComponentVNode)(2,a.Section,{mt:1,title:"Requested Orders",children:p>0&&m.map((function(e){return(0,o.createComponentVNode)(2,a.Box,{children:["#",e.Number,' - "',e.Name,'" for "',e.OrderedBy,'"']},e)}))}),(0,o.createComponentVNode)(2,a.Section,{title:"Approved Orders",children:s>0&&u.map((function(e){return(0,o.createComponentVNode)(2,a.Box,{children:["#",e.Number,' - "',e.Name,'" for "',e.ApprovedBy,'"']},e)}))})]})}},function(e,t,n){"use strict";t.__esModule=!0,t.Pacman=void 0;var o=n(0),r=n(1),a=n(2),c=n(4),i=n(95);t.Pacman=function(e,t){var n=(0,r.useBackend)(t),l=n.act,d=n.data,u=d.broken,s=d.anchored,m=d.active,p=d.fuel_type,f=d.fuel_usage,h=d.fuel_stored,C=d.fuel_cap,N=d.is_ai,b=d.tmp_current,g=d.tmp_max,V=d.tmp_overheat,v=d.output_max,y=d.power_gen,_=d.output_set,x=d.has_fuel,k=h/C,L=b/g,B=_*y,w=Math.round(h/f),S=Math.round(w/60),I=w>120?S+" minutes":w+" seconds";return(0,o.createComponentVNode)(2,c.Window,{children:(0,o.createComponentVNode)(2,c.Window.Content,{children:[(u||!s)&&(0,o.createComponentVNode)(2,a.Section,{title:"Status",children:[!!u&&(0,o.createComponentVNode)(2,a.Box,{color:"orange",children:"The generator is malfunctioning!"}),!u&&!s&&(0,o.createComponentVNode)(2,a.Box,{color:"orange",children:"The generator needs to be anchored to the floor with a wrench."})]}),!u&&!!s&&(0,o.createVNode)(1,"div",null,[(0,o.createComponentVNode)(2,a.Section,{title:"Status",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:m?"power-off":"times",content:m?"On":"Off",tooltip:"Toggles the generator on/off. Requires fuel.",tooltipPosition:"left",disabled:!x,selected:m,onClick:function(){return l("toggle_power")}}),children:(0,o.createComponentVNode)(2,a.Flex,{direction:"row",children:[(0,o.createComponentVNode)(2,a.Flex.Item,{width:"50%",className:"ml-1",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Power setting",children:[(0,o.createComponentVNode)(2,a.NumberInput,{value:_,minValue:1,maxValue:v,step:1,className:"mt-1",onDrag:function(e,t){return l("change_power",{change_power:t})}}),"(",(0,i.formatPower)(B),")"]})})}),(0,o.createComponentVNode)(2,a.Flex.Item,{width:"50%",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Temperature",children:(0,o.createComponentVNode)(2,a.ProgressBar,{value:L,ranges:{green:[-Infinity,.33],orange:[.33,.66],red:[.66,Infinity]},children:[b," \u2103"]})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Status",children:[V>50&&(0,o.createComponentVNode)(2,a.Box,{color:"red",children:"CRITICAL OVERHEAT!"}),V>20&&V<=50&&(0,o.createComponentVNode)(2,a.Box,{color:"orange",children:"WARNING: Overheating!"}),V>1&&V<=20&&(0,o.createComponentVNode)(2,a.Box,{color:"orange",children:"Temperature High"}),0===V&&(0,o.createComponentVNode)(2,a.Box,{color:"green",children:"Optimal"})]})]})})]})}),(0,o.createComponentVNode)(2,a.Section,{title:"Fuel",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:"eject",content:"Eject Fuel",tooltip:"Ejects fuel. Generator needs to be offline.",tooltipPosition:"left",disabled:m||N||!x,onClick:function(){return l("eject_fuel")}}),children:(0,o.createComponentVNode)(2,a.Grid,{children:[(0,o.createComponentVNode)(2,a.Grid.Column,{children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Type",children:p}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Fuel level",children:(0,o.createComponentVNode)(2,a.ProgressBar,{value:k,ranges:{red:[-Infinity,.33],orange:[.33,.66],green:[.66,Infinity]},children:[Math.round(h/1e3)," dm\xb3"]})})]})}),(0,o.createComponentVNode)(2,a.Grid.Column,{children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Fuel usage",children:[f/1e3," dm\xb3/s"]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Fuel depletion",children:[!!x&&(f?I:"N/A"),!x&&(0,o.createComponentVNode)(2,a.Box,{color:"red",children:"Out of fuel"})]})]})})]})})],4)]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.PersonalCrafting=void 0;var o=n(0),r=n(1),a=n(2),c=n(4);t.PersonalCrafting=function(e,t){var n=(0,r.useBackend)(t),d=n.act,u=n.data,s=u.busy,m=u.category,p=u.display_craftable_only,f=u.display_compact,h=u.prev_cat,C=u.next_cat,N=u.subcategory,b=u.prev_subcat,g=u.next_subcat;return(0,o.createComponentVNode)(2,c.Window,{children:(0,o.createComponentVNode)(2,c.Window.Content,{scrollable:!0,children:[!!s&&(0,o.createComponentVNode)(2,a.Dimmer,{fontSize:"32px",children:[(0,o.createComponentVNode)(2,a.Icon,{name:"cog",spin:1})," Crafting..."]}),(0,o.createComponentVNode)(2,a.Section,{title:m,buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Button,{content:"Show Craftable Only",icon:p?"check-square-o":"square-o",selected:p,onClick:function(){return d("toggle_recipes")}}),(0,o.createComponentVNode)(2,a.Button,{content:"Compact Mode",icon:f?"check-square-o":"square-o",selected:f,onClick:function(){return d("toggle_compact")}})],4),children:[(0,o.createComponentVNode)(2,a.Box,{children:[(0,o.createComponentVNode)(2,a.Button,{content:h,icon:"arrow-left",onClick:function(){return d("backwardCat")}}),(0,o.createComponentVNode)(2,a.Button,{content:C,icon:"arrow-right",onClick:function(){return d("forwardCat")}})]}),N&&(0,o.createComponentVNode)(2,a.Box,{children:[(0,o.createComponentVNode)(2,a.Button,{content:b,icon:"arrow-left",onClick:function(){return d("backwardSubCat")}}),(0,o.createComponentVNode)(2,a.Button,{content:g,icon:"arrow-right",onClick:function(){return d("forwardSubCat")}})]}),f?(0,o.createComponentVNode)(2,i):(0,o.createComponentVNode)(2,l)]})]})})};var i=function(e,t){var n=(0,r.useBackend)(t),c=n.act,i=n.data,l=i.display_craftable_only,d=i.can_craft,u=i.cant_craft;return(0,o.createComponentVNode)(2,a.Box,{mt:1,children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[d.map((function(e){return(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:e.name,children:[(0,o.createComponentVNode)(2,a.Button,{icon:"hammer",content:"Craft",onClick:function(){return c("make",{make:e.ref})}}),e.catalyst_text&&(0,o.createComponentVNode)(2,a.Button,{tooltip:e.catalyst_text,content:"Catalysts",color:"transparent"}),(0,o.createComponentVNode)(2,a.Button,{tooltip:e.req_text,content:"Requirements",color:"transparent"}),e.tool_text&&(0,o.createComponentVNode)(2,a.Button,{tooltip:e.tool_text,content:"Tools",color:"transparent"})]},e.name)})),!l&&u.map((function(e){return(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:e.name,children:[(0,o.createComponentVNode)(2,a.Button,{icon:"hammer",content:"Craft",disabled:!0}),e.catalyst_text&&(0,o.createComponentVNode)(2,a.Button,{tooltip:e.catalyst_text,content:"Catalysts",color:"transparent"}),(0,o.createComponentVNode)(2,a.Button,{tooltip:e.req_text,content:"Requirements",color:"transparent"}),e.tool_text&&(0,o.createComponentVNode)(2,a.Button,{tooltip:e.tool_text,content:"Tools",color:"transparent"})]},e.name)}))]})})},l=function(e,t){var n=(0,r.useBackend)(t),c=n.act,i=n.data,l=i.display_craftable_only,d=i.can_craft,u=i.cant_craft;return(0,o.createComponentVNode)(2,a.Box,{mt:1,children:[d.map((function(e){return(0,o.createComponentVNode)(2,a.Section,{title:e.name,buttons:(0,o.createComponentVNode)(2,a.Button,{icon:"hammer",content:"Craft",onClick:function(){return c("make",{make:e.ref})}}),children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[e.catalyst_text&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Catalysts",children:e.catalyst_text}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Requirements",children:e.req_text}),e.tool_text&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Tools",children:e.tool_text})]})},e.name)})),!l&&u.map((function(e){return(0,o.createComponentVNode)(2,a.Section,{title:e.name,buttons:(0,o.createComponentVNode)(2,a.Button,{icon:"hammer",content:"Craft",disabled:!0}),children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[e.catalyst_text&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Catalysts",children:e.catalyst_text}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Requirements",children:e.req_text}),e.tool_text&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Tools",children:e.tool_text})]})},e.name)}))]})}},function(e,t,n){"use strict";t.__esModule=!0,t.PodTracking=void 0;var o=n(0),r=n(1),a=n(2),c=n(4);t.PodTracking=function(e,t){var n=(0,r.useBackend)(t),i=(n.act,n.data.pods);return(0,o.createComponentVNode)(2,c.Window,{children:(0,o.createComponentVNode)(2,c.Window.Content,{scrollable:!0,children:i.map((function(e){return(0,o.createComponentVNode)(2,a.Section,{title:e.name,children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Position",children:[e.podx,", ",e.pody,", ",e.podz]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Pilot",children:e.pilot}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Passengers",children:e.passengers})]})},e.name)}))})})}},function(e,t,n){"use strict";t.__esModule=!0,t.PoolController=void 0;var o=n(0),r=n(1),a=n(2),c=n(4);var i={scalding:{label:"Scalding",color:"#FF0000",icon:"fa fa-arrow-circle-up",requireEmag:!0},warm:{label:"Warm",color:"#990000",icon:"fa fa-arrow-circle-up"},normal:{label:"Normal",color:null,icon:"fa fa-arrow-circle-right"},cool:{label:"Cool",color:"#009999",icon:"fa fa-arrow-circle-down"},frigid:{label:"Frigid",color:"#00CCCC",icon:"fa fa-arrow-circle-down",requireEmag:!0}},l=function(e,t){var n=e.tempKey,c=function(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o=0||(r[n]=e[n]);return r}(e,["tempKey"]),l=i[n];if(!l)return null;var d=(0,r.useBackend)(t),u=d.data,s=d.act,m=u.currentTemp,p=l.label,f=l.icon,h=n===m;return(0,o.normalizeProps)((0,o.createComponentVNode)(2,a.Button,Object.assign({selected:h,onClick:function(){s("setTemp",{temp:n})}},c,{children:[(0,o.createComponentVNode)(2,a.Icon,{name:f}),p]})))};t.PoolController=function(e,t){for(var n=(0,r.useBackend)(t).data,d=n.emagged,u=n.currentTemp,s=i[u]||i.normal,m=s.label,p=s.color,f=[],h=0,C=Object.entries(i);h0?"envelope-open-text":"envelope",onClick:function(){return i("setScreen",{setScreen:6})}})}),(0,o.createComponentVNode)(2,a.Box,{mt:2,children:[(0,o.createComponentVNode)(2,a.Box,{children:(0,o.createComponentVNode)(2,a.Button,{content:"Request Assistance",icon:"hand-paper",onClick:function(){return i("setScreen",{setScreen:1})}})}),(0,o.createComponentVNode)(2,a.Box,{children:(0,o.createComponentVNode)(2,a.Button,{content:"Request Supplies",icon:"box",onClick:function(){return i("setScreen",{setScreen:2})}})}),(0,o.createComponentVNode)(2,a.Box,{children:(0,o.createComponentVNode)(2,a.Button,{content:"Relay Anonymous Information",icon:"comment",onClick:function(){return i("setScreen",{setScreen:3})}})})]}),(0,o.createComponentVNode)(2,a.Box,{mt:2,children:[(0,o.createComponentVNode)(2,a.Box,{children:(0,o.createComponentVNode)(2,a.Button,{content:"Print Shipping Label",icon:"tag",onClick:function(){return i("setScreen",{setScreen:9})}})}),(0,o.createComponentVNode)(2,a.Box,{children:(0,o.createComponentVNode)(2,a.Button,{content:"View Shipping Logs",icon:"clipboard-list",onClick:function(){return i("setScreen",{setScreen:10})}})})]}),!!u&&(0,o.createComponentVNode)(2,a.Box,{mt:2,children:(0,o.createComponentVNode)(2,a.Button,{content:"Send Station-Wide Announcement",icon:"bullhorn",onClick:function(){return i("setScreen",{setScreen:8})}})}),(0,o.createComponentVNode)(2,a.Box,{mt:2,children:(0,o.createComponentVNode)(2,a.Button,{content:s?"Speaker Off":"Speaker On",selected:!s,icon:s?"volume-mute":"volume-up",onClick:function(){return i("toggleSilent")}})})]})},l=function(e,t){var n,c,i=(0,r.useBackend)(t),l=i.act,d=i.data,u=d.department;switch(e.purpose){case"ASSISTANCE":n=d.assist_dept,c="Request assistance from another department";break;case"SUPPLIES":n=d.supply_dept,c="Request supplies from another department";break;case"INFO":n=d.info_dept,c="Relay information to another department"}return(0,o.createComponentVNode)(2,a.Section,{title:c,buttons:(0,o.createComponentVNode)(2,a.Button,{content:"Back",icon:"arrow-left",onClick:function(){return l("setScreen",{setScreen:0})}}),children:(0,o.createComponentVNode)(2,a.LabeledList,{children:n.filter((function(e){return e!==u})).map((function(e){return(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:e,children:[(0,o.createComponentVNode)(2,a.Button,{content:"Message",icon:"envelope",onClick:function(){return l("writeInput",{write:e,priority:1})}}),(0,o.createComponentVNode)(2,a.Button,{content:"High Priority",icon:"exclamation-circle",onClick:function(){return l("writeInput",{write:e,priority:2})}})]},e)}))})})},d=function(e,t){var n,c=(0,r.useBackend)(t),i=c.act;c.data;switch(e.type){case"SUCCESS":n="Message sent successfully";break;case"FAIL":n="Request supplies from another department"}return(0,o.createComponentVNode)(2,a.Section,{title:n,buttons:(0,o.createComponentVNode)(2,a.Button,{content:"Back",icon:"arrow-left",onClick:function(){return i("setScreen",{setScreen:0})}})})},u=function(e,t){var n,c,i=(0,r.useBackend)(t),l=i.act,d=i.data;switch(e.type){case"MESSAGES":n=d.message_log,c="Message Log";break;case"SHIPPING":n=d.shipping_log,c="Shipping label print log"}return(0,o.createComponentVNode)(2,a.Section,{title:c,buttons:(0,o.createComponentVNode)(2,a.Button,{content:"Back",icon:"arrow-left",onClick:function(){return l("setScreen",{setScreen:0})}}),children:n.map((function(e){return(0,o.createComponentVNode)(2,a.Box,{children:[e.map((function(e,t){return(0,o.createVNode)(1,"div",null,e,0,null,t)})),(0,o.createVNode)(1,"hr")]},e)}))})},s=function(e,t){var n=(0,r.useBackend)(t),c=n.act,i=n.data,l=i.recipient,d=i.message,u=i.msgVerified,s=i.msgStamped;return(0,o.createComponentVNode)(2,a.Section,{title:"Message Authentication",buttons:(0,o.createComponentVNode)(2,a.Button,{content:"Back",icon:"arrow-left",onClick:function(){return c("setScreen",{setScreen:0})}}),children:[(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Recipient",children:l}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Message",children:d}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Validated by",color:"green",children:u}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Stamped by",color:"blue",children:s})]}),(0,o.createComponentVNode)(2,a.Button,{fluid:!0,mt:1,textAlign:"center",content:"Send Message",icon:"envelope",onClick:function(){return c("department",{department:l})}})]})},m=function(e,t){var n=(0,r.useBackend)(t),c=n.act,i=n.data,l=i.message,d=i.announceAuth;return(0,o.createComponentVNode)(2,a.Section,{title:"Station-Wide Announcement",buttons:(0,o.createComponentVNode)(2,a.Button,{content:"Back",icon:"arrow-left",onClick:function(){return c("setScreen",{setScreen:0})}}),children:[(0,o.createComponentVNode)(2,a.Button,{content:l||"Edit Message",icon:"edit",onClick:function(){return c("writeAnnouncement")}}),d?(0,o.createComponentVNode)(2,a.Box,{mt:1,color:"green",children:"ID verified. Authentication accepted."}):(0,o.createComponentVNode)(2,a.Box,{mt:1,children:"Swipe your ID card to authenticate yourself."}),(0,o.createComponentVNode)(2,a.Button,{fluid:!0,mt:1,textAlign:"center",content:"Send Announcement",icon:"bullhorn",disabled:!(d&&l),onClick:function(){return c("sendAnnouncement")}})]})},p=function(e,t){var n=(0,r.useBackend)(t),c=n.act,i=n.data,l=i.shipDest,d=i.msgVerified,u=i.ship_dept;return(0,o.createComponentVNode)(2,a.Section,{title:"Print Shipping Label",buttons:(0,o.createComponentVNode)(2,a.Button,{content:"Back",icon:"arrow-left",onClick:function(){return c("setScreen",{setScreen:0})}}),children:[(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Destination",children:l}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Validated by",children:d})]}),(0,o.createComponentVNode)(2,a.Button,{fluid:!0,mt:1,textAlign:"center",content:"Print Label",icon:"print",disabled:!(l&&d),onClick:function(){return c("printLabel")}}),(0,o.createComponentVNode)(2,a.Section,{title:"Destinations",mt:1,children:(0,o.createComponentVNode)(2,a.LabeledList,{children:u.map((function(e){return(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:e,children:(0,o.createComponentVNode)(2,a.Button,{content:l===e?"Selected":"Select",selected:l===e,onClick:function(){return c("shipSelect",{shipSelect:e})}})},e)}))})})]})}},function(e,t,n){"use strict";t.__esModule=!0,t.CurrentLevels=void 0;var o=n(0),r=n(1),a=n(2);t.CurrentLevels=function(e,t){var n=(0,r.useBackend)(t).data.tech_levels;return(0,o.createComponentVNode)(2,a.Box,{children:[(0,o.createVNode)(1,"h3",null,"Current Research Levels:",16),n.map((function(e,t){var n=e.name,r=e.level,c=e.desc;return(0,o.createComponentVNode)(2,a.Box,{children:[t>0?(0,o.createComponentVNode)(2,a.Divider):null,(0,o.createComponentVNode)(2,a.Box,{children:n}),(0,o.createComponentVNode)(2,a.Box,{children:["* Level: ",r]}),(0,o.createComponentVNode)(2,a.Box,{children:["* Summary: ",c]})]},n)}))]})}},function(e,t,n){"use strict";t.__esModule=!0,t.DataDiskMenu=void 0;var o=n(0),r=n(1),a=n(2),c=n(50),i=n(62),l=function(e,t){var n=(0,r.useBackend)(t),c=n.data,i=n.act,l=c.disk_data;return l?(0,o.createComponentVNode)(2,a.Box,{children:[(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Name",children:l.name}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Level",children:l.level}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Description",children:l.desc})]}),(0,o.createComponentVNode)(2,a.Box,{mt:"10px",children:[(0,o.createComponentVNode)(2,a.Button,{content:"Upload to Database",icon:"arrow-up",onClick:function(){return i("updt_tech")}}),(0,o.createComponentVNode)(2,a.Button,{content:"Clear Disk",icon:"trash",onClick:function(){return i("clear_tech")}}),(0,o.createComponentVNode)(2,s)]})]}):null},d=function(e,t){var n=(0,r.useBackend)(t),c=n.data,i=n.act,l=c.disk_data;if(!l)return null;var d=l.name,u=l.lathe_types,m=l.materials,p=u.join(", ");return(0,o.createComponentVNode)(2,a.Box,{children:[(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Name",children:d}),p?(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Lathe Types",children:p}):null,(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Required Materials"})]}),m.map((function(e){return(0,o.createComponentVNode)(2,a.Box,{children:["- ",(0,o.createVNode)(1,"span",null,e.name,0,{style:{"text-transform":"capitalize"}})," x ",e.amount]},e.name)})),(0,o.createComponentVNode)(2,a.Box,{mt:"10px",children:[(0,o.createComponentVNode)(2,a.Button,{content:"Upload to Database",icon:"arrow-up",onClick:function(){return i("updt_design")}}),(0,o.createComponentVNode)(2,a.Button,{content:"Clear Disk",icon:"trash",onClick:function(){return i("clear_design")}}),(0,o.createComponentVNode)(2,s)]})]})},u=function(e,t){var n=(0,r.useBackend)(t).data.disk_type;return(0,o.createComponentVNode)(2,a.Box,{children:[(0,o.createComponentVNode)(2,a.Box,{children:"This disk is empty."}),(0,o.createComponentVNode)(2,a.Box,{mt:"10px",children:[(0,o.createComponentVNode)(2,c.RndNavButton,{submenu:i.SUBMENU.DISK_COPY,icon:"arrow-down",content:"tech"===n?"Load Tech to Disk":"Load Design to Disk"}),(0,o.createComponentVNode)(2,s)]})]})},s=function(e,t){var n=(0,r.useBackend)(t),c=n.data,i=n.act,l=c.disk_type;return l?(0,o.createComponentVNode)(2,a.Button,{content:"Eject Disk",icon:"eject",onClick:function(){i("tech"===l?"eject_tech":"eject_design")}}):null},m=function(e,t){var n=(0,r.useBackend)(t).data,c=n.disk_data,i=n.disk_type;return(0,o.createComponentVNode)(2,a.Section,{title:"Data Disk Contents",children:function(){if(!c)return(0,o.createComponentVNode)(2,u);switch(i){case"design":return(0,o.createComponentVNode)(2,d);case"tech":return(0,o.createComponentVNode)(2,l);default:return null}}()})},p=function(e,t){var n=(0,r.useBackend)(t),c=n.data,i=n.act,l=c.disk_type,d=c.to_copy;return(0,o.createComponentVNode)(2,a.Section,{children:(0,o.createComponentVNode)(2,a.Box,{overflowY:"auto",overflowX:"hidden",maxHeight:"450px",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:d.sort((function(e,t){return e.name.localeCompare(t.name)})).map((function(e){var t=e.name,n=e.id;return(0,o.createComponentVNode)(2,a.LabeledList.Item,{noColon:!0,label:t,children:(0,o.createComponentVNode)(2,a.Button,{icon:"arrow-down",content:"Copy to Disk",onClick:function(){i("tech"===l?"copy_tech":"copy_design",{id:n})}})},n)}))})})})};t.DataDiskMenu=function(e,t){return(0,r.useBackend)(t).data.disk_type?(0,o.createFragment)([(0,o.createComponentVNode)(2,c.RndRoute,{submenu:i.SUBMENU.MAIN,render:function(){return(0,o.createComponentVNode)(2,m)}}),(0,o.createComponentVNode)(2,c.RndRoute,{submenu:i.SUBMENU.DISK_COPY,render:function(){return(0,o.createComponentVNode)(2,p)}})],4):null}},function(e,t,n){"use strict";t.__esModule=!0,t.DeconstructionMenu=void 0;var o=n(0),r=n(1),a=n(2);t.DeconstructionMenu=function(e,t){var n=(0,r.useBackend)(t),c=n.data,i=n.act,l=c.loaded_item;return c.linked_destroy?l?(0,o.createComponentVNode)(2,a.Section,{noTopPadding:!0,title:"Deconstruction Menu",children:[(0,o.createComponentVNode)(2,a.Box,{mt:"10px",children:["Name: ",l.name]}),(0,o.createComponentVNode)(2,a.Box,{mt:"10px",children:(0,o.createVNode)(1,"h3",null,"Origin Tech:",16)}),(0,o.createComponentVNode)(2,a.LabeledList,{children:l.origin_tech.map((function(e){return(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"* "+e.name,children:[e.object_level," ",e.current_level?(0,o.createFragment)([(0,o.createTextVNode)("(Current: "),e.current_level,(0,o.createTextVNode)(")")],0):null]},e.name)}))}),(0,o.createComponentVNode)(2,a.Box,{mt:"10px",children:(0,o.createVNode)(1,"h3",null,"Options:",16)}),(0,o.createComponentVNode)(2,a.Button,{content:"Deconstruct Item",icon:"unlink",onClick:function(){i("deconstruct")}}),(0,o.createComponentVNode)(2,a.Button,{content:"Eject Item",icon:"eject",onClick:function(){i("eject_item")}})]}):(0,o.createComponentVNode)(2,a.Section,{title:"Deconstruction Menu",children:"No item loaded. Standing by..."}):(0,o.createComponentVNode)(2,a.Box,{children:"NO DESTRUCTIVE ANALYZER LINKED TO CONSOLE"})}},function(e,t,n){"use strict";t.__esModule=!0,t.LatheCategory=void 0;var o=n(0),r=n(1),a=n(2),c=n(50);t.LatheCategory=function(e,t){var n=(0,r.useBackend)(t),i=n.data,l=n.act,d=i.category,u=i.matching_designs,s=4===i.menu?"build":"imprint";return(0,o.createComponentVNode)(2,a.Section,{title:d,children:[(0,o.createComponentVNode)(2,c.LatheMaterials),(0,o.createComponentVNode)(2,a.Table,{className:"RndConsole__LatheCategory__MatchingDesigns",children:u.map((function(e){var t=e.id,n=e.name,r=e.can_build,c=e.materials;return(0,o.createComponentVNode)(2,a.Table.Row,{children:[(0,o.createComponentVNode)(2,a.Table.Cell,{children:(0,o.createComponentVNode)(2,a.Button,{icon:"print",content:n,disabled:r<1,onClick:function(){return l(s,{id:t,amount:1})}})}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:r>=5?(0,o.createComponentVNode)(2,a.Button,{content:"x5",onClick:function(){return l(s,{id:t,amount:5})}}):null}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:r>=10?(0,o.createComponentVNode)(2,a.Button,{content:"x10",onClick:function(){return l(s,{id:t,amount:10})}}):null}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:c.map((function(e){return(0,o.createFragment)([" | ",(0,o.createVNode)(1,"span",e.is_red?"color-red":null,[e.amount,(0,o.createTextVNode)(" "),e.name],0)],0)}))})]},t)}))})]})}},function(e,t,n){"use strict";t.__esModule=!0,t.LatheChemicalStorage=void 0;var o=n(0),r=n(1),a=n(2);t.LatheChemicalStorage=function(e,t){var n=(0,r.useBackend)(t),c=n.data,i=n.act,l=c.loaded_chemicals,d=4===c.menu;return(0,o.createComponentVNode)(2,a.Section,{title:"Chemical Storage",children:[(0,o.createComponentVNode)(2,a.Button,{content:"Purge All",icon:"trash",onClick:function(){i(d?"disposeallP":"disposeallI")}}),(0,o.createComponentVNode)(2,a.LabeledList,{children:l.map((function(e){var t=e.volume,n=e.name,r=e.id;return(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"* "+t+" of "+n,children:(0,o.createComponentVNode)(2,a.Button,{content:"Purge",icon:"trash",onClick:function(){i(d?"disposeP":"disposeI",{id:r})}})},r)}))})]})}},function(e,t,n){"use strict";t.__esModule=!0,t.LatheMainMenu=void 0;var o=n(0),r=n(1),a=n(2),c=n(50);t.LatheMainMenu=function(e,t){var n=(0,r.useBackend)(t),i=n.data,l=n.act,d=i.menu,u=i.categories,s=4===d?"Protolathe":"Circuit Imprinter";return(0,o.createComponentVNode)(2,a.Section,{title:s+" Menu",children:[(0,o.createComponentVNode)(2,c.LatheMaterials),(0,o.createComponentVNode)(2,c.LatheSearch),(0,o.createComponentVNode)(2,a.Divider),(0,o.createComponentVNode)(2,a.Flex,{wrap:"wrap",children:u.map((function(e){return(0,o.createComponentVNode)(2,a.Flex,{style:{"flex-basis":"50%","margin-bottom":"6px"},children:(0,o.createComponentVNode)(2,a.Button,{icon:"arrow-right",content:e,onClick:function(){l("setCategory",{category:e})}})},e)}))})]})}},function(e,t,n){"use strict";t.__esModule=!0,t.LatheMaterials=void 0;var o=n(0),r=n(1),a=n(2);t.LatheMaterials=function(e,t){var n=(0,r.useBackend)(t).data,c=n.total_materials,i=n.max_materials,l=n.max_chemicals,d=n.total_chemicals;return(0,o.createComponentVNode)(2,a.Box,{className:"RndConsole__LatheMaterials",mb:"10px",children:(0,o.createComponentVNode)(2,a.Table,{width:"auto",children:[(0,o.createComponentVNode)(2,a.Table.Row,{children:[(0,o.createComponentVNode)(2,a.Table.Cell,{bold:!0,children:"Material Amount:"}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:c}),i?(0,o.createComponentVNode)(2,a.Table.Cell,{children:" / "+i}):null]}),(0,o.createComponentVNode)(2,a.Table.Row,{children:[(0,o.createComponentVNode)(2,a.Table.Cell,{bold:!0,children:"Chemical Amount:"}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:d}),l?(0,o.createComponentVNode)(2,a.Table.Cell,{children:" / "+l}):null]})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.LatheMaterialStorage=void 0;var o=n(0),r=n(1),a=n(2);t.LatheMaterialStorage=function(e,t){var n=(0,r.useBackend)(t),c=n.data,i=n.act,l=c.loaded_materials;return(0,o.createComponentVNode)(2,a.Section,{className:"RndConsole__LatheMaterialStorage",title:"Material Storage",children:(0,o.createComponentVNode)(2,a.Table,{children:l.map((function(e){var t=e.id,n=e.amount,r=e.name,l=function(e){var n=4===c.menu?"lathe_ejectsheet":"imprinter_ejectsheet";i(n,{id:t,amount:e})},d=Math.floor(n/2e3),u=n<1,s=1===d?"":"s";return(0,o.createComponentVNode)(2,a.Table.Row,{className:u?"color-grey":"color-yellow",children:[(0,o.createComponentVNode)(2,a.Table.Cell,{minWidth:"210px",children:["* ",n," of ",r]}),(0,o.createComponentVNode)(2,a.Table.Cell,{minWidth:"110px",children:["(",d," sheet",s,")"]}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:n>=2e3?(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Button,{content:"1x",icon:"eject",onClick:function(){return l(1)}}),(0,o.createComponentVNode)(2,a.Button,{content:"C",icon:"eject",onClick:function(){return l("custom")}}),n>=1e4?(0,o.createComponentVNode)(2,a.Button,{content:"5x",icon:"eject",onClick:function(){return l(5)}}):null,(0,o.createComponentVNode)(2,a.Button,{content:"All",icon:"eject",onClick:function(){return l(50)}})],0):null})]},t)}))})})}},function(e,t,n){"use strict";t.__esModule=!0,t.LatheMenu=void 0;var o=n(0),r=n(1),a=n(189),c=n(50),i=n(2),l=n(62);t.LatheMenu=function(e,t){var n=(0,r.useBackend)(t).data,d=n.menu,u=n.linked_lathe,s=n.linked_imprinter;return 4!==d||u?5!==d||s?(0,o.createComponentVNode)(2,i.Box,{children:[(0,o.createComponentVNode)(2,a.RndRoute,{submenu:l.SUBMENU.MAIN,render:function(){return(0,o.createComponentVNode)(2,c.LatheMainMenu)}}),(0,o.createComponentVNode)(2,a.RndRoute,{submenu:l.SUBMENU.LATHE_CATEGORY,render:function(){return(0,o.createComponentVNode)(2,c.LatheCategory)}}),(0,o.createComponentVNode)(2,a.RndRoute,{submenu:l.SUBMENU.LATHE_MAT_STORAGE,render:function(){return(0,o.createComponentVNode)(2,c.LatheMaterialStorage)}}),(0,o.createComponentVNode)(2,a.RndRoute,{submenu:l.SUBMENU.LATHE_CHEM_STORAGE,render:function(){return(0,o.createComponentVNode)(2,c.LatheChemicalStorage)}})]}):(0,o.createComponentVNode)(2,i.Box,{children:"NO CIRCUIT IMPRITER LINKED TO CONSOLE"}):(0,o.createComponentVNode)(2,i.Box,{children:"NO PROTOLATHE LINKED TO CONSOLE"})}},function(e,t,n){"use strict";t.__esModule=!0,t.LatheSearch=void 0;var o=n(0),r=n(1),a=n(2);t.LatheSearch=function(e,t){var n=(0,r.useBackend)(t).act;return(0,o.createComponentVNode)(2,a.Box,{children:(0,o.createComponentVNode)(2,a.Input,{placeholder:"Search...",onChange:function(e,t){return n("search",{to_search:t})}})})}},function(e,t,n){"use strict";t.__esModule=!0,t.MainMenu=void 0;var o=n(0),r=n(1),a=n(2),c=n(50),i=n(62);t.MainMenu=function(e,t){var n=(0,r.useBackend)(t).data,l=n.disk_type,d=n.linked_destroy,u=n.linked_lathe,s=n.linked_imprinter,m=n.tech_levels;return(0,o.createComponentVNode)(2,a.Section,{title:"Main Menu",children:[(0,o.createComponentVNode)(2,a.Flex,{className:"RndConsole__MainMenu__Buttons",direction:"column",align:"flex-start",children:[(0,o.createComponentVNode)(2,c.RndNavButton,{disabled:!l,menu:i.MENU.DISK,submenu:i.SUBMENU.MAIN,icon:"save",content:"Disk Operations"}),(0,o.createComponentVNode)(2,c.RndNavButton,{disabled:!d,menu:i.MENU.DESTROY,submenu:i.SUBMENU.MAIN,icon:"unlink",content:"Destructive Analyzer Menu"}),(0,o.createComponentVNode)(2,c.RndNavButton,{disabled:!u,menu:i.MENU.LATHE,submenu:i.SUBMENU.MAIN,icon:"print",content:"Protolathe Menu"}),(0,o.createComponentVNode)(2,c.RndNavButton,{disabled:!s,menu:i.MENU.IMPRINTER,submenu:i.SUBMENU.MAIN,icon:"print",content:"Circuit Imprinter Menu"}),(0,o.createComponentVNode)(2,c.RndNavButton,{menu:i.MENU.SETTINGS,submenu:i.SUBMENU.MAIN,icon:"cog",content:"Settings"})]}),(0,o.createComponentVNode)(2,a.Box,{mt:"12px"}),(0,o.createVNode)(1,"h3",null,"Current Research Levels:",16),(0,o.createComponentVNode)(2,a.LabeledList,{children:m.map((function(e){var t=e.name,n=e.level;return(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:t,children:n},t)}))})]})}},function(e,t,n){"use strict";t.__esModule=!0,t.RndNavbar=void 0;var o=n(0),r=n(50),a=n(2),c=n(62);t.RndNavbar=function(){return(0,o.createComponentVNode)(2,a.Box,{className:"RndConsole__RndNavbar",children:[(0,o.createComponentVNode)(2,r.RndRoute,{menu:function(e){return e!==c.MENU.MAIN},render:function(){return(0,o.createComponentVNode)(2,r.RndNavButton,{menu:c.MENU.MAIN,submenu:c.SUBMENU.MAIN,icon:"reply",content:"Main Menu"})}}),(0,o.createComponentVNode)(2,r.RndRoute,{submenu:function(e){return e!==c.SUBMENU.MAIN},render:function(){return(0,o.createComponentVNode)(2,a.Box,{children:[(0,o.createComponentVNode)(2,r.RndRoute,{menu:c.MENU.DISK,render:function(){return(0,o.createComponentVNode)(2,r.RndNavButton,{submenu:c.SUBMENU.MAIN,icon:"reply",content:"Disk Operations Menu"})}}),(0,o.createComponentVNode)(2,r.RndRoute,{menu:c.MENU.LATHE,render:function(){return(0,o.createComponentVNode)(2,r.RndNavButton,{submenu:c.SUBMENU.MAIN,icon:"reply",content:"Protolathe Menu"})}}),(0,o.createComponentVNode)(2,r.RndRoute,{menu:c.MENU.IMPRINTER,render:function(){return(0,o.createComponentVNode)(2,r.RndNavButton,{submenu:c.SUBMENU.MAIN,icon:"reply",content:"Circuit Imprinter Menu"})}}),(0,o.createComponentVNode)(2,r.RndRoute,{menu:c.MENU.SETTINGS,render:function(){return(0,o.createComponentVNode)(2,r.RndNavButton,{submenu:c.SUBMENU.MAIN,icon:"reply",content:"Settings Menu"})}})]})}}),(0,o.createComponentVNode)(2,r.RndRoute,{menu:function(e){return e===c.MENU.LATHE||e===c.MENU.IMPRINTER},submenu:c.SUBMENU.MAIN,render:function(){return(0,o.createComponentVNode)(2,a.Box,{children:[(0,o.createComponentVNode)(2,r.RndNavButton,{submenu:c.SUBMENU.LATHE_MAT_STORAGE,icon:"arrow-up",content:"Material Storage"}),(0,o.createComponentVNode)(2,r.RndNavButton,{submenu:c.SUBMENU.LATHE_CHEM_STORAGE,icon:"arrow-up",content:"Chemical Storage"})]})}})]})}},function(e,t,n){"use strict";t.__esModule=!0,t.RndNavButton=void 0;var o=n(0),r=n(1),a=n(2);t.RndNavButton=function(e,t){var n=e.icon,c=e.children,i=e.disabled,l=e.content,d=(0,r.useBackend)(t),u=d.data,s=d.act,m=u.menu,p=u.submenu,f=m,h=p;return null!==e.menu&&e.menu!==undefined&&(f=e.menu),null!==e.submenu&&e.submenu!==undefined&&(h=e.submenu),(0,o.createComponentVNode)(2,a.Button,{content:l,icon:n,disabled:i,onClick:function(){s("nav",{menu:f,submenu:h})},children:c})}},function(e,t,n){"use strict";t.__esModule=!0,t.SettingsMenu=void 0;var o=n(0),r=n(1),a=n(2),c=n(50),i=n(62);t.SettingsMenu=function(e,t){var n=(0,r.useBackend)(t),l=n.data,d=n.act,u=l.sync,s=l.admin,m=l.linked_destroy,p=l.linked_lathe,f=l.linked_imprinter;return(0,o.createComponentVNode)(2,a.Box,{children:[(0,o.createComponentVNode)(2,c.RndRoute,{submenu:i.SUBMENU.MAIN,render:function(){return(0,o.createComponentVNode)(2,a.Section,{title:"Settings",children:(0,o.createComponentVNode)(2,a.Flex,{direction:"column",align:"flex-start",children:[(0,o.createComponentVNode)(2,a.Button,{content:"Sync Database with Network",icon:"sync",disabled:!u,onClick:function(){d("sync")}}),(0,o.createComponentVNode)(2,a.Button,{content:"Connect to Research Network",icon:"plug",disabled:u,onClick:function(){d("togglesync")}}),(0,o.createComponentVNode)(2,a.Button,{disabled:!u,icon:"unlink",content:"Disconnect from Research Network",onClick:function(){d("togglesync")}}),(0,o.createComponentVNode)(2,c.RndNavButton,{disabled:!u,content:"Device Linkage Menu",icon:"link",menu:i.MENU.SETTINGS,submenu:i.SUBMENU.SETTINGS_DEVICES}),1===s?(0,o.createComponentVNode)(2,a.Button,{icon:"exclamation",content:"[ADMIN] Maximize Research Levels",onClick:function(){return d("maxresearch")}}):null]})})}}),(0,o.createComponentVNode)(2,c.RndRoute,{submenu:i.SUBMENU.SETTINGS_DEVICES,render:function(){return(0,o.createComponentVNode)(2,a.Section,{title:"Device Linkage Menu",children:[(0,o.createComponentVNode)(2,a.Button,{icon:"link",content:"Re-sync with Nearby Devices",onClick:function(){return d("find_device")}}),(0,o.createComponentVNode)(2,a.Box,{mt:"5px",children:(0,o.createVNode)(1,"h3",null,"Linked Devices:",16)}),(0,o.createComponentVNode)(2,a.LabeledList,{children:[m?(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"* Destructive Analyzer",children:(0,o.createComponentVNode)(2,a.Button,{icon:"unlink",content:"Unlink",onClick:function(){return d("disconnect",{item:"destroy"})}})}):(0,o.createComponentVNode)(2,a.LabeledList.Item,{noColon:!0,label:"* No Destructive Analyzer Linked"}),p?(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"* Protolathe",children:(0,o.createComponentVNode)(2,a.Button,{icon:"unlink",content:"Unlink",onClick:function(){d("disconnect",{item:"lathe"})}})}):(0,o.createComponentVNode)(2,a.LabeledList.Item,{noColon:!0,label:"* No Protolathe Linked"}),f?(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"* Circuit Imprinter",children:(0,o.createComponentVNode)(2,a.Button,{icon:"unlink",content:"Unlink",onClick:function(){return d("disconnect",{item:"imprinter"})}})}):(0,o.createComponentVNode)(2,a.LabeledList.Item,{noColon:!0,label:"* No Circuit Imprinter Linked"})]})]})}})]})}},function(e,t,n){"use strict";t.__esModule=!0,t.RobotSelfDiagnosis=void 0;var o=n(0),r=n(1),a=n(2),c=n(4),i=n(19),l=function(e,t){var n=e/t;return n<=.2?"good":n<=.5?"average":"bad"};t.RobotSelfDiagnosis=function(e,t){var n=(0,r.useBackend)(t).data.component_data;return(0,o.createComponentVNode)(2,c.Window,{children:(0,o.createComponentVNode)(2,c.Window.Content,{scrollable:!0,children:n.map((function(e,t){return(0,o.createComponentVNode)(2,a.Section,{title:(0,i.capitalize)(e.name),children:e.installed<=0?(0,o.createComponentVNode)(2,a.NoticeBox,{m:-.5,height:3.5,color:"red",style:{"font-style":"normal"},children:(0,o.createComponentVNode)(2,a.Flex,{height:"100%",children:(0,o.createComponentVNode)(2,a.Flex.Item,{grow:1,textAlign:"center",align:"center",color:"#e8e8e8",children:-1===e.installed?"Destroyed":"Missing"})})}):(0,o.createComponentVNode)(2,a.Flex,{children:[(0,o.createComponentVNode)(2,a.Flex.Item,{width:"72%",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Brute Damage",color:l(e.brute_damage,e.max_damage),children:e.brute_damage}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Burn Damage",color:l(e.electronic_damage,e.max_damage),children:e.electronic_damage})]})}),(0,o.createComponentVNode)(2,a.Flex.Item,{width:"50%",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Powered",color:e.powered?"good":"bad",children:e.powered?"Yes":"No"}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Enabled",color:e.status?"good":"bad",children:e.status?"Yes":"No"})]})})]})},t)}))})})}},function(e,t,n){"use strict";t.__esModule=!0,t.RoboticsControlConsole=void 0;var o=n(0),r=n(1),a=n(2),c=n(4);t.RoboticsControlConsole=function(e,t){var n=(0,r.useBackend)(t),l=n.act,d=n.data,u=d.can_hack,s=d.safety,m=d.show_detonate_all,p=d.cyborgs,f=void 0===p?[]:p;return(0,o.createComponentVNode)(2,c.Window,{resizable:!0,children:(0,o.createComponentVNode)(2,c.Window.Content,{scrollable:!0,children:[!!m&&(0,o.createComponentVNode)(2,a.Section,{title:"Emergency Self Destruct",children:[(0,o.createComponentVNode)(2,a.Button,{icon:s?"lock":"unlock",content:s?"Disable Safety":"Enable Safety",selected:s,onClick:function(){return l("arm",{})}}),(0,o.createComponentVNode)(2,a.Button,{icon:"bomb",disabled:s,content:"Destroy ALL Cyborgs",color:"bad",onClick:function(){return l("nuke",{})}})]}),(0,o.createComponentVNode)(2,i,{cyborgs:f,can_hack:u})]})})};var i=function(e,t){var n=e.cyborgs,c=(e.can_hack,(0,r.useBackend)(t)),i=c.act,l=c.data;return n.length?n.map((function(e){return(0,o.createComponentVNode)(2,a.Section,{title:e.name,buttons:(0,o.createFragment)([!!e.hackable&&!e.emagged&&(0,o.createComponentVNode)(2,a.Button,{icon:"terminal",content:"Hack",color:"bad",onClick:function(){return i("hackbot",{uid:e.uid})}}),(0,o.createComponentVNode)(2,a.Button.Confirm,{icon:e.locked_down?"unlock":"lock",color:e.locked_down?"good":"default",content:e.locked_down?"Release":"Lockdown",disabled:!l.auth,onClick:function(){return i("stopbot",{uid:e.uid})}}),(0,o.createComponentVNode)(2,a.Button.Confirm,{icon:"bomb",content:"Detonate",disabled:!l.auth,color:"bad",onClick:function(){return i("killbot",{uid:e.uid})}})],0),children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Status",children:(0,o.createComponentVNode)(2,a.Box,{color:e.status?"bad":e.locked_down?"average":"good",children:e.status?"Not Responding":e.locked_down?"Locked Down":"Nominal"})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Location",children:(0,o.createComponentVNode)(2,a.Box,{children:e.locstring})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Integrity",children:(0,o.createComponentVNode)(2,a.ProgressBar,{color:e.health>50?"good":"bad",value:e.health/100})}),"number"==typeof e.charge&&(0,o.createFragment)([(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Cell Charge",children:(0,o.createComponentVNode)(2,a.ProgressBar,{color:e.charge>30?"good":"bad",value:e.charge/100})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Cell Capacity",children:(0,o.createComponentVNode)(2,a.Box,{color:e.cell_capacity<3e4?"average":"good",children:e.cell_capacity})})],4)||(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Cell",children:(0,o.createComponentVNode)(2,a.Box,{color:"bad",children:"No Power Cell"})}),!!e.is_hacked&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Safeties",children:(0,o.createComponentVNode)(2,a.Box,{color:"bad",children:"DISABLED"})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Module",children:e.module}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Master AI",children:(0,o.createComponentVNode)(2,a.Box,{color:e.synchronization?"default":"average",children:e.synchronization||"None"})})]})},e.uid)})):(0,o.createComponentVNode)(2,a.NoticeBox,{children:"No cyborg units detected within access parameters."})}},function(e,t,n){"use strict";t.__esModule=!0,t.Safe=void 0;var o=n(0),r=n(1),a=n(2),c=n(4);t.Safe=function(e,t){var n=(0,r.useBackend)(t),u=(n.act,n.data),s=u.dial,m=u.open;u.locked,u.contents;return(0,o.createComponentVNode)(2,c.Window,{theme:"safe",children:(0,o.createComponentVNode)(2,c.Window.Content,{children:[(0,o.createComponentVNode)(2,a.Box,{className:"Safe--engraving",children:[(0,o.createComponentVNode)(2,i),(0,o.createComponentVNode)(2,a.Box,{children:[(0,o.createComponentVNode)(2,a.Box,{className:"Safe--engraving--hinge",top:"25%"}),(0,o.createComponentVNode)(2,a.Box,{className:"Safe--engraving--hinge",top:"75%"})]}),(0,o.createComponentVNode)(2,a.Icon,{className:"Safe--engraving--arrow",name:"long-arrow-alt-down",size:"3"}),(0,o.createVNode)(1,"br"),m?(0,o.createComponentVNode)(2,l):(0,o.createComponentVNode)(2,a.Box,{as:"img",className:"Safe--dial",src:"safe_dial.png",style:{transform:"rotate(-"+3.6*s+"deg)","z-index":0}})]}),!m&&(0,o.createComponentVNode)(2,d)]})})};var i=function(e,t){var n=(0,r.useBackend)(t),c=n.act,i=n.data,l=i.dial,d=i.open,u=i.locked,s=function(e,t){return(0,o.createComponentVNode)(2,a.Button,{disabled:d||t&&!u,icon:"arrow-"+(t?"right":"left"),content:(t?"Right":"Left")+" "+e,iconRight:t,onClick:function(){return c(t?"turnleft":"turnright",{num:e})},style:{"z-index":10}})};return(0,o.createComponentVNode)(2,a.Box,{className:"Safe--dialer",children:[(0,o.createComponentVNode)(2,a.Button,{disabled:u,icon:d?"lock":"lock-open",content:d?"Close":"Open",mb:"0.5rem",onClick:function(){return c("open")}}),(0,o.createVNode)(1,"br"),(0,o.createComponentVNode)(2,a.Box,{position:"absolute",children:[s(50),s(10),s(1)]}),(0,o.createComponentVNode)(2,a.Box,{className:"Safe--dialer--right",position:"absolute",right:"5px",children:[s(1,!0),s(10,!0),s(50,!0)]}),(0,o.createComponentVNode)(2,a.Box,{className:"Safe--dialer--number",children:l})]})},l=function(e,t){var n=(0,r.useBackend)(t),c=n.act,i=n.data.contents;return(0,o.createComponentVNode)(2,a.Box,{className:"Safe--contents",overflow:"auto",children:i.map((function(e,t){return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Button,{mb:"0.5rem",onClick:function(){return c("retrieve",{index:t+1})},children:[(0,o.createComponentVNode)(2,a.Box,{as:"img",src:e.sprite+".png",verticalAlign:"middle",ml:"-6px",mr:"0.5rem"}),e.name]}),(0,o.createVNode)(1,"br")],4,e)}))})},d=function(e,t){return(0,o.createComponentVNode)(2,a.Section,{className:"Safe--help",title:"Safe opening instructions (because you all keep forgetting)",children:[(0,o.createComponentVNode)(2,a.Box,{children:["1. Turn the dial left to the first number.",(0,o.createVNode)(1,"br"),"2. Turn the dial right to the second number.",(0,o.createVNode)(1,"br"),"3. Continue repeating this process for each number, switching between left and right each time.",(0,o.createVNode)(1,"br"),"4. Open the safe."]}),(0,o.createComponentVNode)(2,a.Box,{bold:!0,children:"To lock fully, turn the dial to the left after closing the safe."})]})}},function(e,t,n){"use strict";t.__esModule=!0,t.SatelliteControl=void 0;var o=n(0),r=n(1),a=n(2),c=n(4);t.SatelliteControl=function(e,t){var n=(0,r.useBackend)(t),i=n.act,l=n.data,d=l.satellites,u=l.notice,s=l.meteor_shield,m=l.meteor_shield_coverage,p=l.meteor_shield_coverage_max,f=l.meteor_shield_coverage_percentage;return(0,o.createComponentVNode)(2,c.Window,{resizable:!0,children:(0,o.createComponentVNode)(2,c.Window.Content,{scrollable:!0,children:[s&&(0,o.createComponentVNode)(2,a.Section,{title:"Station Shield Coverage",children:(0,o.createComponentVNode)(2,a.ProgressBar,{color:f>=100?"good":"average",value:m,maxValue:p,children:[f," %"]})}),(0,o.createComponentVNode)(2,a.Section,{title:"Satellite Network Control",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[u&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Alert",color:"red",children:l.notice}),d.map((function(e){return(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"#"+e.id,children:[e.mode," ",(0,o.createComponentVNode)(2,a.Button,{content:e.active?"Deactivate":"Activate",icon:"arrow-circle-right",onClick:function(){return i("toggle",{id:e.id})}})]},e.id)}))]})})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.SecurityRecords=void 0;var o=n(0),r=n(19),a=n(1),c=n(2),i=n(75),l=n(4),d=n(49),u=n(132),s=n(133),m=n(136),p={"*Execute*":"execute","*Arrest*":"arrest",Incarcerated:"incarcerated",Parolled:"parolled",Released:"released",Demote:"demote",Search:"search",Monitor:"monitor"},f=function(e,t){(0,d.modalOpen)(e,"edit",{field:t.edit,value:t.value})};t.SecurityRecords=function(e,t){var n,r=(0,a.useBackend)(t),i=(r.act,r.data),p=i.loginState,f=i.currentPage;return p.logged_in?(1===f?n=(0,o.createComponentVNode)(2,C):2===f&&(n=(0,o.createComponentVNode)(2,g)),(0,o.createComponentVNode)(2,l.Window,{theme:"security",resizable:!0,children:[(0,o.createComponentVNode)(2,d.ComplexModal),(0,o.createComponentVNode)(2,l.Window.Content,{scrollable:!0,className:"Layout__content--flexColumn",children:[(0,o.createComponentVNode)(2,u.LoginInfo),(0,o.createComponentVNode)(2,m.TemporaryNotice),(0,o.createComponentVNode)(2,h),(0,o.createComponentVNode)(2,c.Section,{height:"100%",flexGrow:"1",children:n})]})]})):(0,o.createComponentVNode)(2,l.Window,{theme:"security",resizable:!0,children:(0,o.createComponentVNode)(2,l.Window.Content,{children:(0,o.createComponentVNode)(2,s.LoginScreen)})})};var h=function(e,t){var n=(0,a.useBackend)(t),r=n.act,i=n.data,l=i.currentPage,d=i.general;return(0,o.createComponentVNode)(2,c.Tabs,{children:[(0,o.createComponentVNode)(2,c.Tabs.Tab,{selected:1===l,onClick:function(){return r("page",{page:1})},children:[(0,o.createComponentVNode)(2,c.Icon,{name:"list"}),"List Records"]}),2===l&&d&&!d.empty&&(0,o.createComponentVNode)(2,c.Tabs.Tab,{selected:2===l,children:[(0,o.createComponentVNode)(2,c.Icon,{name:"file"}),"Record: ",d.fields[0].value]})]})},C=function(e,t){var n=(0,a.useBackend)(t),i=n.act,l=n.data.records,d=(0,a.useLocalState)(t,"searchText",""),u=d[0],s=(d[1],(0,a.useLocalState)(t,"sortId","name")),m=s[0],f=(s[1],(0,a.useLocalState)(t,"sortOrder",!0)),h=f[0];f[1];return(0,o.createComponentVNode)(2,c.Flex,{direction:"column",height:"100%",children:[(0,o.createComponentVNode)(2,b),(0,o.createComponentVNode)(2,c.Section,{flexGrow:"1",mt:"0.5rem",children:(0,o.createComponentVNode)(2,c.Table,{className:"SecurityRecords__list",children:[(0,o.createComponentVNode)(2,c.Table.Row,{bold:!0,children:[(0,o.createComponentVNode)(2,N,{id:"name",children:"Name"}),(0,o.createComponentVNode)(2,N,{id:"id",children:"ID"}),(0,o.createComponentVNode)(2,N,{id:"rank",children:"Assignment"}),(0,o.createComponentVNode)(2,N,{id:"fingerprint",children:"Fingerprint"}),(0,o.createComponentVNode)(2,N,{id:"status",children:"Criminal Status"})]}),l.filter((0,r.createSearch)(u,(function(e){return e.name+"|"+e.id+"|"+e.rank+"|"+e.fingerprint+"|"+e.status}))).sort((function(e,t){var n=h?1:-1;return e[m].localeCompare(t[m])*n})).map((function(e){return(0,o.createComponentVNode)(2,c.Table.Row,{className:"SecurityRecords__listRow--"+p[e.status],onClick:function(){return i("view",{uid_gen:e.uid_gen,uid_sec:e.uid_sec})},children:[(0,o.createComponentVNode)(2,c.Table.Cell,{children:[(0,o.createComponentVNode)(2,c.Icon,{name:"user"})," ",e.name]}),(0,o.createComponentVNode)(2,c.Table.Cell,{children:e.id}),(0,o.createComponentVNode)(2,c.Table.Cell,{children:e.rank}),(0,o.createComponentVNode)(2,c.Table.Cell,{children:e.fingerprint}),(0,o.createComponentVNode)(2,c.Table.Cell,{children:e.status})]},e.id)}))]})})]})},N=function(e,t){var n=(0,a.useLocalState)(t,"sortId","name"),r=n[0],i=n[1],l=(0,a.useLocalState)(t,"sortOrder",!0),d=l[0],u=l[1],s=e.id,m=e.children;return(0,o.createComponentVNode)(2,c.Table.Cell,{children:(0,o.createComponentVNode)(2,c.Button,{color:r!==s&&"transparent",width:"100%",onClick:function(){r===s?u(!d):(i(s),u(!0))},children:[m,r===s&&(0,o.createComponentVNode)(2,c.Icon,{name:d?"sort-up":"sort-down",ml:"0.25rem;"})]})})},b=function(e,t){var n=(0,a.useBackend)(t),r=n.act,l=n.data.isPrinting,u=(0,a.useLocalState)(t,"searchText",""),s=(u[0],u[1]);return(0,o.createComponentVNode)(2,c.Flex,{children:[(0,o.createComponentVNode)(2,i.FlexItem,{children:[(0,o.createComponentVNode)(2,c.Button,{content:"New Record",icon:"plus",onClick:function(){return r("new_general")}}),(0,o.createComponentVNode)(2,c.Button,{disabled:l,icon:l?"spinner":"print",iconSpin:!!l,content:"Print Cell Log",ml:"0.25rem",onClick:function(){return(0,d.modalOpen)(t,"print_cell_log")}})]}),(0,o.createComponentVNode)(2,i.FlexItem,{grow:"1",ml:"0.5rem",children:(0,o.createComponentVNode)(2,c.Input,{placeholder:"Search by Name, ID, Assignment, Fingerprint, Status",width:"100%",onInput:function(e,t){return s(t)}})})]})},g=function(e,t){var n=(0,a.useBackend)(t),r=n.act,i=n.data,l=i.isPrinting,d=i.general,u=i.security;return d&&d.fields?(0,o.createFragment)([(0,o.createComponentVNode)(2,c.Section,{title:"General Data",level:2,mt:"-6px",buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,c.Button,{disabled:l,icon:l?"spinner":"print",iconSpin:!!l,content:"Print Record",onClick:function(){return r("print_record")}}),(0,o.createComponentVNode)(2,c.Button.Confirm,{icon:"trash",tooltip:"WARNING: This will also delete the Security and Medical records associated to this crew member!",tooltipPosition:"bottom-left",content:"Delete Record",onClick:function(){return r("delete_general")}})],4),children:(0,o.createComponentVNode)(2,V)}),(0,o.createComponentVNode)(2,c.Section,{title:"Security Data",level:2,mt:"-12px",buttons:(0,o.createComponentVNode)(2,c.Button.Confirm,{icon:"trash",disabled:u.empty,content:"Delete Record",onClick:function(){return r("delete_security")}}),children:(0,o.createComponentVNode)(2,v)})],4):(0,o.createComponentVNode)(2,c.Box,{color:"bad",children:"General records lost!"})},V=function(e,t){var n=(0,a.useBackend)(t).data.general;return n&&n.fields?(0,o.createFragment)([(0,o.createComponentVNode)(2,c.Box,{float:"left",children:(0,o.createComponentVNode)(2,c.LabeledList,{children:n.fields.map((function(e,n){return(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:e.field,children:[(0,r.decodeHtmlEntities)(""+e.value),!!e.edit&&(0,o.createComponentVNode)(2,c.Button,{icon:"pen",ml:"0.5rem",mb:e.line_break?"1rem":"initial",onClick:function(){return f(t,e)}})]},n)}))})}),(0,o.createComponentVNode)(2,c.Box,{position:"absolute",right:"0",textAlign:"right",children:!!n.has_photos&&n.photos.map((function(e,t){return(0,o.createComponentVNode)(2,c.Box,{display:"inline-block",textAlign:"center",color:"label",children:[(0,o.createVNode)(1,"img",null,null,1,{src:e,style:{width:"96px","margin-bottom":"0.5rem","-ms-interpolation-mode":"nearest-neighbor"}}),(0,o.createVNode)(1,"br"),"Photo #",t+1]},t)}))})],4):(0,o.createComponentVNode)(2,c.Box,{color:"bad",children:"General records lost!"})},v=function(e,t){var n=(0,a.useBackend)(t),i=n.act,l=n.data.security;return l&&l.fields?(0,o.createFragment)([(0,o.createComponentVNode)(2,c.LabeledList,{children:l.fields.map((function(e,n){return(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:e.field,children:[(0,r.decodeHtmlEntities)(e.value),!!e.edit&&(0,o.createComponentVNode)(2,c.Button,{icon:"pen",ml:"0.5rem",mb:e.line_break?"1rem":"initial",onClick:function(){return f(t,e)}})]},n)}))}),(0,o.createComponentVNode)(2,c.Section,{title:"Comments/Log",level:2,buttons:(0,o.createComponentVNode)(2,c.Button,{icon:"comment",content:"Add Entry",onClick:function(){return(0,d.modalOpen)(t,"comment_add")}}),children:0===l.comments.length?(0,o.createComponentVNode)(2,c.Box,{color:"label",children:"No comments found."}):l.comments.map((function(e,t){return(0,o.createComponentVNode)(2,c.Box,{children:[(0,o.createComponentVNode)(2,c.Box,{color:"label",display:"inline",children:e.header||"Auto-generated"}),(0,o.createVNode)(1,"br"),e.text||e,(0,o.createComponentVNode)(2,c.Button,{icon:"comment-slash",color:"bad",ml:"0.5rem",onClick:function(){return i("comment_delete",{id:t+1})}})]},t)}))})],4):(0,o.createComponentVNode)(2,c.Box,{color:"bad",children:["Security records lost!",(0,o.createVNode)(1,"br"),(0,o.createComponentVNode)(2,c.Button,{icon:"pen",content:"Create New Record",mt:"0.5rem",onClick:function(){return i("new_security")}})]})}},function(e,t,n){"use strict";t.__esModule=!0,t.ShuttleConsole=void 0;var o=n(0),r=n(1),a=n(2),c=n(4),i=n(77);t.ShuttleConsole=function(e,t){var n=(0,r.useBackend)(t),l=n.act,d=n.data;return(0,o.createComponentVNode)(2,c.Window,{resizable:!0,children:(0,o.createComponentVNode)(2,c.Window.Content,{children:(0,o.createComponentVNode)(2,a.Section,{children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Location",children:d.status?d.status:(0,o.createComponentVNode)(2,a.NoticeBox,{color:"red",children:"Shuttle Missing"})}),!!d.shuttle&&(!!d.docking_ports_len&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Send to ",children:d.docking_ports.map((function(e){return(0,o.createComponentVNode)(2,a.Button,{icon:"chevron-right",content:e.name,onClick:function(){return l("move",{move:e.id})}},e.name)}))})||(0,o.createFragment)([(0,o.createComponentVNode)(2,i.LabeledListItem,{label:"Status",color:"red",children:(0,o.createComponentVNode)(2,a.NoticeBox,{color:"red",children:"Shuttle Locked"})}),!!d.admin_controlled&&(0,o.createComponentVNode)(2,i.LabeledListItem,{label:"Authorization",children:(0,o.createComponentVNode)(2,a.Button,{icon:"exclamation-circle",content:"Request Authorization",disabled:!d.status,onClick:function(){return l("request")}})})],0))]})})})})}},function(e,t,n){"use strict";t.__esModule=!0,t.ShuttleManipulator=void 0;var o=n(0),r=n(1),a=n(2),c=n(4);t.ShuttleManipulator=function(e,t){var n=(0,r.useLocalState)(t,"tabIndex",0),u=n[0],s=n[1];return(0,o.createComponentVNode)(2,c.Window,{children:(0,o.createComponentVNode)(2,c.Window.Content,{scrollable:!0,children:(0,o.createComponentVNode)(2,a.Box,{fillPositionedParent:!0,children:[(0,o.createComponentVNode)(2,a.Tabs,{children:[(0,o.createComponentVNode)(2,a.Tabs.Tab,{selected:0===u,onClick:function(){return s(0)},icon:"info-circle",content:"Status"},"Status"),(0,o.createComponentVNode)(2,a.Tabs.Tab,{selected:1===u,onClick:function(){return s(1)},icon:"file-import",content:"Templates"},"Templates"),(0,o.createComponentVNode)(2,a.Tabs.Tab,{selected:2===u,onClick:function(){return s(2)},icon:"tools",content:"Modification"},"Modification")]}),function(e){switch(e){case 0:return(0,o.createComponentVNode)(2,i);case 1:return(0,o.createComponentVNode)(2,l);case 2:return(0,o.createComponentVNode)(2,d);default:return"WE SHOULDN'T BE HERE!"}}(u)]})})})};var i=function(e,t){var n=(0,r.useBackend)(t),c=n.act,i=n.data.shuttles;return(0,o.createComponentVNode)(2,a.Box,{children:i.map((function(e){return(0,o.createComponentVNode)(2,a.Section,{title:e.name,children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"ID",children:e.id}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Shuttle Timer",children:e.timeleft}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Shuttle Mode",children:e.mode}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Shuttle Status",children:e.status}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Actions",children:[(0,o.createComponentVNode)(2,a.Button,{content:"Jump To",icon:"location-arrow",onClick:function(){return c("jump_to",{type:"mobile",id:e.id})}}),(0,o.createComponentVNode)(2,a.Button,{content:"Fast Travel",icon:"fast-forward",onClick:function(){return c("fast_travel",{id:e.id})}})]})]})},e.name)}))})},l=function(e,t){var n=(0,r.useBackend)(t),c=n.act,i=n.data,l=i.templates_tabs,d=i.existing_shuttle,u=i.templates;return(0,o.createComponentVNode)(2,a.Box,{children:[(0,o.createComponentVNode)(2,a.Tabs,{children:l.map((function(e){return(0,o.createComponentVNode)(2,a.Tabs.Tab,{selected:e===d.id,icon:"file",content:e,onClick:function(){return c("select_template_category",{cat:e})}},e)}))}),!!d&&u[d.id].templates.map((function(e){return(0,o.createComponentVNode)(2,a.Section,{title:e.name,children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[e.description&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Description",children:e.description}),e.admin_notes&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Admin Notes",children:e.admin_notes}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Actions",children:(0,o.createComponentVNode)(2,a.Button,{content:"Load Template",icon:"download",onClick:function(){return c("select_template",{shuttle_id:e.shuttle_id})}})})]})},e.name)}))]})},d=function(e,t){var n=(0,r.useBackend)(t),c=n.act,i=n.data,l=i.existing_shuttle,d=i.selected;return(0,o.createComponentVNode)(2,a.Box,{children:[l?(0,o.createComponentVNode)(2,a.Section,{title:"Selected Shuttle: "+l.name,children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Status",children:l.status}),l.timer&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Timer",children:l.timeleft}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Actions",children:(0,o.createComponentVNode)(2,a.Button,{content:"Jump To",icon:"location-arrow",onClick:function(){return c("jump_to",{type:"mobile",id:l.id})}})})]})}):(0,o.createComponentVNode)(2,a.Section,{title:"Selected Shuttle: None"}),d?(0,o.createComponentVNode)(2,a.Section,{title:"Selected Template: "+d.name,children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[d.description&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Description",children:d.description}),d.admin_notes&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Admin Notes",children:d.admin_notes}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Actions",children:[(0,o.createComponentVNode)(2,a.Button,{content:"Preview",icon:"eye",onClick:function(){return c("preview",{shuttle_id:d.shuttle_id})}}),(0,o.createComponentVNode)(2,a.Button,{content:"Load",icon:"download",onClick:function(){return c("load",{shuttle_id:d.shuttle_id})}})]})]})}):(0,o.createComponentVNode)(2,a.Section,{title:"Selected Template: None"})]})}},function(e,t,n){"use strict";t.__esModule=!0,t.Sleeper=void 0;var o=n(0),r=n(15),a=n(1),c=n(2),i=n(4),l=[["good","Alive"],["average","Critical"],["bad","DEAD"]],d=[["Resp.","oxyLoss"],["Toxin","toxLoss"],["Brute","bruteLoss"],["Burn","fireLoss"]],u={average:[.25,.5],bad:[.5,Infinity]},s=["bad","average","average","good","average","average","bad"];t.Sleeper=function(e,t){var n=(0,a.useBackend)(t),r=(n.act,n.data.hasOccupant?(0,o.createComponentVNode)(2,m):(0,o.createComponentVNode)(2,N));return(0,o.createComponentVNode)(2,i.Window,{resizable:!0,children:(0,o.createComponentVNode)(2,i.Window.Content,{className:"Layout__content--flexColumn",children:[r,(0,o.createComponentVNode)(2,h)]})})};var m=function(e,t){var n=(0,a.useBackend)(t);n.act,n.data.occupant;return(0,o.createFragment)([(0,o.createComponentVNode)(2,p),(0,o.createComponentVNode)(2,f),(0,o.createComponentVNode)(2,C)],4)},p=function(e,t){var n=(0,a.useBackend)(t),i=n.act,d=n.data,u=d.occupant,m=d.auto_eject_dead;return(0,o.createComponentVNode)(2,c.Section,{title:"Occupant",buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,c.Box,{color:"label",display:"inline",children:"Auto-eject if dead:\xa0"}),(0,o.createComponentVNode)(2,c.Button,{icon:m?"toggle-on":"toggle-off",selected:m,content:m?"On":"Off",onClick:function(){return i("auto_eject_dead_"+(m?"off":"on"))}}),(0,o.createComponentVNode)(2,c.Button,{icon:"user-slash",content:"Eject",onClick:function(){return i("ejectify")}})],4),children:(0,o.createComponentVNode)(2,c.LabeledList,{children:[(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Name",children:u.name}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Health",children:(0,o.createComponentVNode)(2,c.ProgressBar,{min:"0",max:u.maxHealth,value:u.health/u.maxHealth,ranges:{good:[.5,Infinity],average:[0,.5],bad:[-Infinity,0]},children:(0,r.round)(u.health,0)})}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Status",color:l[u.stat][0],children:l[u.stat][1]}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Temperature",children:(0,o.createComponentVNode)(2,c.ProgressBar,{min:"0",max:u.maxTemp,value:u.bodyTemperature/u.maxTemp,color:s[u.temperatureSuitability+3],children:[(0,r.round)(u.btCelsius,0),"\xb0C,",(0,r.round)(u.btFaren,0),"\xb0F"]})}),!!u.hasBlood&&(0,o.createFragment)([(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Blood Level",children:(0,o.createComponentVNode)(2,c.ProgressBar,{min:"0",max:u.bloodMax,value:u.bloodLevel/u.bloodMax,ranges:{bad:[-Infinity,.6],average:[.6,.9],good:[.6,Infinity]},children:[u.bloodPercent,"%, ",u.bloodLevel,"cl"]})}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Pulse",verticalAlign:"middle",children:[u.pulse," BPM"]})],4)]})})},f=function(e,t){var n=(0,a.useBackend)(t).data.occupant;return(0,o.createComponentVNode)(2,c.Section,{title:"Occupant Damage",children:(0,o.createComponentVNode)(2,c.LabeledList,{children:d.map((function(e,t){return(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:e[0],children:(0,o.createComponentVNode)(2,c.ProgressBar,{min:"0",max:"100",value:n[e[1]]/100,ranges:u,children:(0,r.round)(n[e[1]],0)},t)},t)}))})})},h=function(e,t){var n=(0,a.useBackend)(t),r=n.act,i=n.data,l=i.hasOccupant,d=i.isBeakerLoaded,u=i.beakerMaxSpace,s=i.beakerFreeSpace,m=i.dialysis&&s>0;return(0,o.createComponentVNode)(2,c.Section,{title:"Dialysis",buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,c.Button,{disabled:!d||s<=0||!l,selected:m,icon:m?"toggle-on":"toggle-off",content:m?"Active":"Inactive",onClick:function(){return r("togglefilter")}}),(0,o.createComponentVNode)(2,c.Button,{disabled:!d,icon:"eject",content:"Eject",onClick:function(){return r("removebeaker")}})],4),children:d?(0,o.createComponentVNode)(2,c.LabeledList,{children:(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Remaining Space",children:(0,o.createComponentVNode)(2,c.ProgressBar,{min:"0",max:u,value:s/u,ranges:{good:[.5,Infinity],average:[.25,.5],bad:[-Infinity,.25]},children:[s,"u"]})})}):(0,o.createComponentVNode)(2,c.Box,{color:"label",children:"No beaker loaded."})})},C=function(e,t){var n=(0,a.useBackend)(t),r=n.act,i=n.data,l=i.occupant,d=i.chemicals,u=i.maxchem,s=i.amounts;return(0,o.createComponentVNode)(2,c.Section,{title:"Occupant Chemicals",flexGrow:"1",children:d.map((function(e,t){var n,a="";return e.overdosing?(a="bad",n=(0,o.createComponentVNode)(2,c.Box,{color:"bad",children:[(0,o.createComponentVNode)(2,c.Icon,{name:"exclamation-circle"}),"\xa0 Overdosing!"]})):e.od_warning&&(a="average",n=(0,o.createComponentVNode)(2,c.Box,{color:"average",children:[(0,o.createComponentVNode)(2,c.Icon,{name:"exclamation-triangle"}),"\xa0 Close to overdosing"]})),(0,o.createComponentVNode)(2,c.Box,{backgroundColor:"rgba(0, 0, 0, 0.33)",mb:"0.5rem",children:(0,o.createComponentVNode)(2,c.Section,{title:e.title,level:"3",mx:"0",lineHeight:"18px",buttons:n,children:(0,o.createComponentVNode)(2,c.Flex,{align:"flex-start",children:[(0,o.createComponentVNode)(2,c.ProgressBar,{min:"0",max:u,value:e.occ_amount/u,color:a,title:"Amount of chemicals currently inside the occupant / Total amount injectable by this machine",mr:"0.5rem",children:[e.pretty_amount,"/",u,"u"]}),s.map((function(t,n){return(0,o.createComponentVNode)(2,c.Button,{disabled:!e.injectable||e.occ_amount+t>u||2===l.stat,icon:"syringe",content:"Inject "+t+"u",title:"Inject "+t+"u of "+e.title+" into the occupant",mb:"0",height:"19px",onClick:function(){return r("chemical",{chemid:e.id,amount:t})}},n)}))]})})},t)}))})},N=function(e,t){return(0,o.createComponentVNode)(2,c.Section,{textAlign:"center",flexGrow:"1",children:(0,o.createComponentVNode)(2,c.Flex,{height:"100%",children:(0,o.createComponentVNode)(2,c.Flex.Item,{grow:"1",align:"center",color:"label",children:[(0,o.createComponentVNode)(2,c.Icon,{name:"user-slash",mb:"0.5rem",size:"5"}),(0,o.createVNode)(1,"br"),"No occupant detected."]})})})}},function(e,t,n){"use strict";t.__esModule=!0,t.SlotMachine=void 0;var o=n(0),r=n(1),a=n(2),c=n(4);t.SlotMachine=function(e,t){var n,i=(0,r.useBackend)(t),l=i.act,d=i.data;return null===d.money?(0,o.createComponentVNode)(2,c.Window,{children:(0,o.createComponentVNode)(2,c.Window.Content,{children:(0,o.createComponentVNode)(2,a.Section,{children:[(0,o.createComponentVNode)(2,a.Box,{children:"Could not scan your card or could not find account!"}),(0,o.createComponentVNode)(2,a.Box,{children:"Please wear or hold your ID and try again."})]})})}):(n=1===d.plays?d.plays+" player has tried their luck today!":d.plays+" players have tried their luck today!",(0,o.createComponentVNode)(2,c.Window,{children:(0,o.createComponentVNode)(2,c.Window.Content,{children:(0,o.createComponentVNode)(2,a.Section,{children:[(0,o.createComponentVNode)(2,a.Box,{lineHeight:2,children:n}),(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Credits Remaining",children:(0,o.createComponentVNode)(2,a.AnimatedNumber,{value:d.money})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"50 credits to spin",children:(0,o.createComponentVNode)(2,a.Button,{icon:"coins",disabled:d.working,content:d.working?"Spinning...":"Spin",onClick:function(){return l("spin")}})})]}),(0,o.createComponentVNode)(2,a.Box,{bold:!0,lineHeight:2,color:d.resultlvl,children:d.result})]})})}))}},function(e,t,n){"use strict";t.__esModule=!0,t.Smartfridge=void 0;var o=n(0),r=n(1),a=n(2),c=n(4);t.Smartfridge=function(e,t){var n=(0,r.useBackend)(t),i=n.act,l=n.data,d=l.secure,u=l.can_dry,s=l.drying,m=l.contents;return(0,o.createComponentVNode)(2,c.Window,{children:(0,o.createComponentVNode)(2,c.Window.Content,{children:[!!d&&(0,o.createComponentVNode)(2,a.Section,{title:"Secure",children:(0,o.createComponentVNode)(2,a.NoticeBox,{children:"Secure Access: Please have your identification ready."})}),!!u&&(0,o.createComponentVNode)(2,a.Section,{title:"Drying rack",children:(0,o.createComponentVNode)(2,a.Button,{icon:s?"power-off":"times",content:s?"On":"Off",selected:s,onClick:function(){return i("drying")}})}),(0,o.createComponentVNode)(2,a.Section,{title:"Contents",children:[!m&&(0,o.createComponentVNode)(2,a.Box,{color:"average",children:" No products loaded. "}),!!m&&m.map((function(e){return(0,o.createComponentVNode)(2,a.Flex,{direction:"row",children:[(0,o.createComponentVNode)(2,a.Flex.Item,{width:"45%",children:e.display_name}),(0,o.createComponentVNode)(2,a.Flex.Item,{width:"25%",children:["(",e.quantity," in stock)"]}),(0,o.createComponentVNode)(2,a.Flex.Item,{width:"30%",children:[(0,o.createComponentVNode)(2,a.Button,{icon:"arrow-down",tooltip:"Dispense one.",content:"1",onClick:function(){return i("vend",{index:e.vend,amount:1})}}),(0,o.createComponentVNode)(2,a.NumberInput,{width:"40px",minValue:0,value:0,maxValue:e.quantity,step:1,stepPixelSize:3,onChange:function(t,n){return i("vend",{index:e.vend,amount:n})}}),(0,o.createComponentVNode)(2,a.Button,{icon:"arrow-down",content:"All",tooltip:"Dispense all. ",onClick:function(){return i("vend",{index:e.vend,amount:e.quantity})}})]})]},e)}))]})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.Smes=void 0;var o=n(0),r=n(1),a=n(2),c=n(95),i=n(4);t.Smes=function(e,t){var n=(0,r.useBackend)(t),l=n.act,d=n.data,u=d.capacityPercent,s=(d.capacity,d.charge),m=d.inputAttempt,p=d.inputting,f=d.inputLevel,h=d.inputLevelMax,C=d.inputAvailable,N=d.outputAttempt,b=d.outputting,g=d.outputLevel,V=d.outputLevelMax,v=d.outputUsed,y=(u>=100?"good":p&&"average")||"bad",_=(b?"good":s>0&&"average")||"bad";return(0,o.createComponentVNode)(2,i.Window,{children:(0,o.createComponentVNode)(2,i.Window.Content,{children:[(0,o.createComponentVNode)(2,a.Section,{title:"Stored Energy",children:(0,o.createComponentVNode)(2,a.ProgressBar,{value:.01*u,ranges:{good:[.5,Infinity],average:[.15,.5],bad:[-Infinity,.15]}})}),(0,o.createComponentVNode)(2,a.Section,{title:"Input",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Charge Mode",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:m?"sync-alt":"times",selected:m,onClick:function(){return l("tryinput")},children:m?"Auto":"Off"}),children:(0,o.createComponentVNode)(2,a.Box,{color:y,children:(u>=100?"Fully Charged":p&&"Charging")||"Not Charging"})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Target Input",children:(0,o.createComponentVNode)(2,a.Flex,{inline:!0,width:"100%",children:[(0,o.createComponentVNode)(2,a.Flex.Item,{children:[(0,o.createComponentVNode)(2,a.Button,{icon:"fast-backward",disabled:0===f,onClick:function(){return l("input",{target:"min"})}}),(0,o.createComponentVNode)(2,a.Button,{icon:"backward",disabled:0===f,onClick:function(){return l("input",{adjust:-1e4})}})]}),(0,o.createComponentVNode)(2,a.Flex.Item,{grow:1,mx:1,children:(0,o.createComponentVNode)(2,a.Slider,{value:f/1e3,fillValue:C/1e3,minValue:0,maxValue:h/1e3,step:5,stepPixelSize:4,format:function(e){return(0,c.formatPower)(1e3*e,1)},onChange:function(e,t){return l("input",{target:1e3*t})}})}),(0,o.createComponentVNode)(2,a.Flex.Item,{children:[(0,o.createComponentVNode)(2,a.Button,{icon:"forward",disabled:f===h,onClick:function(){return l("input",{adjust:1e4})}}),(0,o.createComponentVNode)(2,a.Button,{icon:"fast-forward",disabled:f===h,onClick:function(){return l("input",{target:"max"})}})]})]})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Available",children:(0,c.formatPower)(C)})]})}),(0,o.createComponentVNode)(2,a.Section,{title:"Output",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Output Mode",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:N?"power-off":"times",selected:N,onClick:function(){return l("tryoutput")},children:N?"On":"Off"}),children:(0,o.createComponentVNode)(2,a.Box,{color:_,children:b?"Sending":s>0?"Not Sending":"No Charge"})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Target Output",children:(0,o.createComponentVNode)(2,a.Flex,{inline:!0,width:"100%",children:[(0,o.createComponentVNode)(2,a.Flex.Item,{children:[(0,o.createComponentVNode)(2,a.Button,{icon:"fast-backward",disabled:0===g,onClick:function(){return l("output",{target:"min"})}}),(0,o.createComponentVNode)(2,a.Button,{icon:"backward",disabled:0===g,onClick:function(){return l("output",{adjust:-1e4})}})]}),(0,o.createComponentVNode)(2,a.Flex.Item,{grow:1,mx:1,children:(0,o.createComponentVNode)(2,a.Slider,{value:g/1e3,minValue:0,maxValue:V/1e3,step:5,stepPixelSize:4,format:function(e){return(0,c.formatPower)(1e3*e,1)},onChange:function(e,t){return l("output",{target:1e3*t})}})}),(0,o.createComponentVNode)(2,a.Flex.Item,{children:[(0,o.createComponentVNode)(2,a.Button,{icon:"forward",disabled:g===V,onClick:function(){return l("output",{adjust:1e4})}}),(0,o.createComponentVNode)(2,a.Button,{icon:"fast-forward",disabled:g===V,onClick:function(){return l("output",{target:"max"})}})]})]})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Outputting",children:(0,c.formatPower)(v)})]})})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.SolarControl=void 0;var o=n(0),r=n(1),a=n(2),c=n(4);t.SolarControl=function(e,t){var n=(0,r.useBackend)(t),i=n.act,l=n.data,d=l.generated,u=l.generated_ratio,s=l.tracking_state,m=l.tracking_rate,p=l.connected_panels,f=l.connected_tracker,h=l.cdir,C=l.direction,N=l.rotating_direction;return(0,o.createComponentVNode)(2,c.Window,{children:(0,o.createComponentVNode)(2,c.Window.Content,{children:[(0,o.createComponentVNode)(2,a.Section,{title:"Status",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:"sync",content:"Scan for new hardware",onClick:function(){return i("refresh")}}),children:(0,o.createComponentVNode)(2,a.Grid,{children:[(0,o.createComponentVNode)(2,a.Grid.Column,{children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Solar tracker",color:f?"good":"bad",children:f?"OK":"N/A"}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Solar panels",color:p>0?"good":"bad",children:p})]})}),(0,o.createComponentVNode)(2,a.Grid.Column,{size:2,children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Power output",children:(0,o.createComponentVNode)(2,a.ProgressBar,{ranges:{good:[.66,Infinity],average:[.33,.66],bad:[-Infinity,.33]},minValue:0,maxValue:1,value:u,children:d+" W"})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Panel orientation",children:[h,"\xb0 (",C,")"]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Tracker rotation",children:[2===s&&(0,o.createComponentVNode)(2,a.Box,{children:" Automated "}),1===s&&(0,o.createComponentVNode)(2,a.Box,{children:[" ",m,"\xb0/h (",N,") "]}),0===s&&(0,o.createComponentVNode)(2,a.Box,{children:" Tracker offline "})]})]})})]})}),(0,o.createComponentVNode)(2,a.Section,{title:"Controls",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Panel orientation",children:[2!==s&&(0,o.createComponentVNode)(2,a.NumberInput,{unit:"\xb0",step:1,stepPixelSize:1,minValue:0,maxValue:359,value:h,onDrag:function(e,t){return i("cdir",{cdir:t})}}),2===s&&(0,o.createComponentVNode)(2,a.Box,{lineHeight:"19px",children:" Automated "})]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Tracker status",children:[(0,o.createComponentVNode)(2,a.Button,{icon:"times",content:"Off",selected:0===s,onClick:function(){return i("track",{track:0})}}),(0,o.createComponentVNode)(2,a.Button,{icon:"clock-o",content:"Timed",selected:1===s,onClick:function(){return i("track",{track:1})}}),(0,o.createComponentVNode)(2,a.Button,{icon:"sync",content:"Auto",selected:2===s,disabled:!f,onClick:function(){return i("track",{track:2})}})]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Tracker rotation",children:[1===s&&(0,o.createComponentVNode)(2,a.NumberInput,{unit:"\xb0/h",step:1,stepPixelSize:1,minValue:-7200,maxValue:7200,value:m,format:function(e){return(Math.sign(e)>0?"+":"-")+Math.abs(e)},onDrag:function(e,t){return i("tdir",{tdir:t})}}),0===s&&(0,o.createComponentVNode)(2,a.Box,{lineHeight:"19px",children:" Tracker offline "}),2===s&&(0,o.createComponentVNode)(2,a.Box,{lineHeight:"19px",children:" Automated "})]})]})})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.SpawnersMenu=void 0;var o=n(0),r=n(1),a=n(2),c=n(4);t.SpawnersMenu=function(e,t){var n=(0,r.useBackend)(t),i=n.act,l=n.data.spawners||[];return(0,o.createComponentVNode)(2,c.Window,{resizable:!0,children:(0,o.createComponentVNode)(2,c.Window.Content,{scrollable:!0,children:(0,o.createComponentVNode)(2,a.Section,{children:l.map((function(e){return(0,o.createComponentVNode)(2,a.Section,{mb:.5,title:e.name+" ("+e.amount_left+" left)",level:2,buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Button,{icon:"chevron-circle-right",content:"Jump",onClick:function(){return i("jump",{ID:e.uids})}}),(0,o.createComponentVNode)(2,a.Button,{icon:"chevron-circle-right",content:"Spawn",onClick:function(){return i("spawn",{ID:e.uids})}})],4),children:[(0,o.createComponentVNode)(2,a.Box,{style:{"white-space":"pre-wrap"},mb:1,fontSize:"16px",children:e.desc}),!!e.fluff&&(0,o.createComponentVNode)(2,a.Box,{style:{"white-space":"pre-wrap"},textColor:"#878787",fontSize:"14px",children:e.fluff}),!!e.important_info&&(0,o.createComponentVNode)(2,a.Box,{style:{"white-space":"pre-wrap"},mt:1,bold:!0,color:"red",fontSize:"18px",children:e.important_info})]},e.name)}))})})})}},function(e,t,n){"use strict";t.__esModule=!0,t.StationAlertConsoleContent=t.StationAlertConsole=void 0;var o=n(0),r=n(1),a=n(2),c=n(4);t.StationAlertConsole=function(){return(0,o.createComponentVNode)(2,c.Window,{resizable:!0,children:(0,o.createComponentVNode)(2,c.Window.Content,{scrollable:!0,children:(0,o.createComponentVNode)(2,i)})})};var i=function(e,t){var n=(0,r.useBackend)(t).data.alarms||[],c=n.Fire||[],i=n.Atmosphere||[],l=n.Power||[];return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Section,{title:"Fire Alarms",children:(0,o.createVNode)(1,"ul",null,[0===c.length&&(0,o.createVNode)(1,"li","color-good","Systems Nominal",16),c.map((function(e){return(0,o.createVNode)(1,"li","color-average",e,0,null,e)}))],0)}),(0,o.createComponentVNode)(2,a.Section,{title:"Atmospherics Alarms",children:(0,o.createVNode)(1,"ul",null,[0===i.length&&(0,o.createVNode)(1,"li","color-good","Systems Nominal",16),i.map((function(e){return(0,o.createVNode)(1,"li","color-average",e,0,null,e)}))],0)}),(0,o.createComponentVNode)(2,a.Section,{title:"Power Alarms",children:(0,o.createVNode)(1,"ul",null,[0===l.length&&(0,o.createVNode)(1,"li","color-good","Systems Nominal",16),l.map((function(e){return(0,o.createVNode)(1,"li","color-average",e,0,null,e)}))],0)})],4)};t.StationAlertConsoleContent=i},function(e,t,n){"use strict";t.__esModule=!0,t.SuitStorage=void 0;var o=n(0),r=n(1),a=n(2),c=n(4);t.SuitStorage=function(e,t){var n=(0,r.useBackend)(t).data.uv;return(0,o.createComponentVNode)(2,c.Window,{resizable:!0,children:(0,o.createComponentVNode)(2,c.Window.Content,{display:"flex",className:"Layout__content--flexColumn",children:[!!n&&(0,o.createComponentVNode)(2,a.Dimmer,{backgroundColor:"black",opacity:.85,children:(0,o.createComponentVNode)(2,a.Flex,{children:(0,o.createComponentVNode)(2,a.Flex.Item,{bold:!0,textAlign:"center",mb:2,children:[(0,o.createComponentVNode)(2,a.Icon,{name:"spinner",spin:1,size:4,mb:4}),(0,o.createVNode)(1,"br"),"Disinfection of contents in progress..."]})})}),(0,o.createComponentVNode)(2,i),(0,o.createComponentVNode)(2,d)]})})};var i=function(e,t){var n=(0,r.useBackend)(t),c=n.act,i=n.data,d=i.helmet,u=i.suit,s=i.magboots,m=i.mask,p=i.storage,f=i.open,h=i.locked;return(0,o.createComponentVNode)(2,a.Section,{title:"Stored Items",flexGrow:"1",buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Button,{content:"Start Disinfection Cycle",icon:"radiation",textAlign:"center",onClick:function(){return c("cook")}}),(0,o.createComponentVNode)(2,a.Button,{content:h?"Unlock":"Lock",icon:h?"unlock":"lock",disabled:f,onClick:function(){return c("toggle_lock")}})],4),children:f&&!h?(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,l,{object:d,label:"Helmet",missingText:"helmet",eject:"dispense_helmet"}),(0,o.createComponentVNode)(2,l,{object:u,label:"Suit",missingText:"suit",eject:"dispense_suit"}),(0,o.createComponentVNode)(2,l,{object:s,label:"Boots",missingText:"boots",eject:"dispense_boots"}),(0,o.createComponentVNode)(2,l,{object:m,label:"Breathmask",missingText:"mask",eject:"dispense_mask"}),(0,o.createComponentVNode)(2,l,{object:p,label:"Storage",missingText:"storage item",eject:"dispense_storage"})]}):(0,o.createComponentVNode)(2,a.Flex,{height:"100%",children:(0,o.createComponentVNode)(2,a.Flex.Item,{bold:!0,grow:"1",textAlign:"center",align:"center",color:"label",children:[(0,o.createComponentVNode)(2,a.Icon,{name:h?"lock":"exclamation-circle",size:"5",mb:3}),(0,o.createVNode)(1,"br"),h?"The unit is locked.":"The unit is closed."]})})})},l=function(e,t){var n=(0,r.useBackend)(t),c=n.act,i=(n.data,e.object),l=e.label,d=e.missingText,u=e.eject;return(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:l,children:(0,o.createComponentVNode)(2,a.Box,{my:.5,children:i?(0,o.createComponentVNode)(2,a.Button,{my:-1,icon:"eject",content:i,onClick:function(){return c(u)}}):(0,o.createComponentVNode)(2,a.Box,{color:"silver",bold:!0,children:["No ",d," found."]})})})},d=function(e,t){var n=(0,r.useBackend)(t),c=n.act,i=n.data,l=i.open,d=i.locked;return(0,o.createComponentVNode)(2,a.Section,{children:(0,o.createComponentVNode)(2,a.Button,{fluid:!0,content:l?"Close Suit Storage Unit":"Open Suit Storage Unit",icon:l?"times-circle":"expand",color:l?"red":"green",disabled:d,textAlign:"center",onClick:function(){return c("toggle_open")}})})}},function(e,t,n){"use strict";t.__esModule=!0,t.SupermatterMonitor=void 0;var o=n(0),r=n(26),a=n(43),c=n(15),i=n(1),l=n(2),d=n(39),u=n(4);n(76);t.SupermatterMonitor=function(e,t){var n=(0,i.useBackend)(t);n.act;return 0===n.data.active?(0,o.createComponentVNode)(2,m):(0,o.createComponentVNode)(2,p)};var s=function(e){return Math.log2(16+Math.max(0,e))-4},m=function(e,t){var n=(0,i.useBackend)(t),r=n.act,a=n.data.supermatters,c=void 0===a?[]:a;return(0,o.createComponentVNode)(2,u.Window,{children:(0,o.createComponentVNode)(2,u.Window.Content,{scrollable:!0,children:(0,o.createComponentVNode)(2,l.Section,{title:"Detected Supermatters",buttons:(0,o.createComponentVNode)(2,l.Button,{icon:"sync",content:"Refresh",onClick:function(){return r("refresh")}}),children:(0,o.createComponentVNode)(2,l.Table,{children:c.map((function(e){return(0,o.createComponentVNode)(2,l.Table.Row,{children:[(0,o.createComponentVNode)(2,l.Table.Cell,{children:e.supermatter_id+". "+e.area_name}),(0,o.createComponentVNode)(2,l.Table.Cell,{collapsing:!0,color:"label",children:"Integrity:"}),(0,o.createComponentVNode)(2,l.Table.Cell,{collapsing:!0,width:"120px",children:(0,o.createComponentVNode)(2,l.ProgressBar,{value:e.integrity/100,ranges:{good:[.9,Infinity],average:[.5,.9],bad:[-Infinity,.5]}})}),(0,o.createComponentVNode)(2,l.Table.Cell,{collapsing:!0,children:(0,o.createComponentVNode)(2,l.Button,{content:"Details",onClick:function(){return r("view",{view:e.supermatter_id})}})})]},e.supermatter_id)}))})})})})},p=function(e,t){var n=(0,i.useBackend)(t),m=n.act,p=n.data,f=(p.active,p.SM_integrity),h=p.SM_power,C=p.SM_ambienttemp,N=p.SM_ambientpressure,b=(0,a.flow)([function(e){return e.filter((function(e){return e.amount>=.01}))},(0,r.sortBy)((function(e){return-e.amount}))])(p.gases||[]),g=Math.max.apply(Math,[1].concat(b.map((function(e){return e.amount}))));return(0,o.createComponentVNode)(2,u.Window,{children:(0,o.createComponentVNode)(2,u.Window.Content,{children:(0,o.createComponentVNode)(2,l.Flex,{spacing:1,children:[(0,o.createComponentVNode)(2,l.Flex.Item,{width:"270px",children:(0,o.createComponentVNode)(2,l.Section,{title:"Metrics",children:(0,o.createComponentVNode)(2,l.LabeledList,{children:[(0,o.createComponentVNode)(2,l.LabeledList.Item,{label:"Integrity",children:(0,o.createComponentVNode)(2,l.ProgressBar,{value:f/100,ranges:{good:[.9,Infinity],average:[.5,.9],bad:[-Infinity,.5]}})}),(0,o.createComponentVNode)(2,l.LabeledList.Item,{label:"Relative EER",children:(0,o.createComponentVNode)(2,l.ProgressBar,{value:h,minValue:0,maxValue:5e3,ranges:{good:[-Infinity,5e3],average:[5e3,7e3],bad:[7e3,Infinity]},children:(0,c.toFixed)(h)+" MeV/cm3"})}),(0,o.createComponentVNode)(2,l.LabeledList.Item,{label:"Temperature",children:(0,o.createComponentVNode)(2,l.ProgressBar,{value:s(C),minValue:0,maxValue:s(1e4),ranges:{teal:[-Infinity,s(80)],good:[s(80),s(373)],average:[s(373),s(1e3)],bad:[s(1e3),Infinity]},children:(0,c.toFixed)(C)+" K"})}),(0,o.createComponentVNode)(2,l.LabeledList.Item,{label:"Pressure",children:(0,o.createComponentVNode)(2,l.ProgressBar,{value:s(N),minValue:0,maxValue:s(5e4),ranges:{good:[s(1),s(300)],average:[-Infinity,s(1e3)],bad:[s(1e3),Infinity]},children:(0,c.toFixed)(N)+" kPa"})})]})})}),(0,o.createComponentVNode)(2,l.Flex.Item,{grow:1,basis:0,children:(0,o.createComponentVNode)(2,l.Section,{title:"Gases",buttons:(0,o.createComponentVNode)(2,l.Button,{icon:"arrow-left",content:"Back",onClick:function(){return m("back")}}),children:(0,o.createComponentVNode)(2,l.LabeledList,{children:b.map((function(e){return(0,o.createComponentVNode)(2,l.LabeledList.Item,{label:(0,d.getGasLabel)(e.name),children:(0,o.createComponentVNode)(2,l.ProgressBar,{color:(0,d.getGasColor)(e.name),value:e.amount,minValue:0,maxValue:g,children:(0,c.toFixed)(e.amount,2)+"%"})},e.name)}))})})})]})})})}},function(e,t,n){"use strict";t.__esModule=!0,t.SyndicateComputerSimple=void 0;var o=n(0),r=n(1),a=n(2),c=(n(77),n(4));t.SyndicateComputerSimple=function(e,t){var n=(0,r.useBackend)(t),i=n.act,l=n.data;return(0,o.createComponentVNode)(2,c.Window,{theme:"syndicate",children:(0,o.createComponentVNode)(2,c.Window.Content,{children:l.rows.map((function(e){return(0,o.createComponentVNode)(2,a.Section,{title:e.title,buttons:(0,o.createComponentVNode)(2,a.Button,{content:e.buttontitle,disabled:e.buttondisabled,tooltip:e.buttontooltip,tooltipPosition:"left",onClick:function(){return i(e.buttonact)}}),children:[e.status,!!e.bullets&&(0,o.createComponentVNode)(2,a.Box,{children:e.bullets.map((function(e){return(0,o.createComponentVNode)(2,a.Box,{children:e},e)}))})]},e.title)}))})})}},function(e,t,n){"use strict";t.__esModule=!0,t.TEG=void 0;var o=n(0),r=n(1),a=n(2),c=n(4),i=function(e){return e.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g,"$1,")};t.TEG=function(e,t){var n=(0,r.useBackend)(t),l=n.act,d=n.data;return d.error?(0,o.createComponentVNode)(2,c.Window,{children:(0,o.createComponentVNode)(2,c.Window.Content,{children:(0,o.createComponentVNode)(2,a.Section,{title:"Error",children:[d.error,(0,o.createComponentVNode)(2,a.Button,{icon:"circle",content:"Recheck",onClick:function(){return l("check")}})]})})}):(0,o.createComponentVNode)(2,c.Window,{children:(0,o.createComponentVNode)(2,c.Window.Content,{children:[(0,o.createComponentVNode)(2,a.Section,{title:"Cold Loop ("+d.cold_dir+")",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Cold Inlet",children:[i(d.cold_inlet_temp)," K, ",i(d.cold_inlet_pressure)," kPa"]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Cold Outlet",children:[i(d.cold_outlet_temp)," K, ",i(d.cold_outlet_pressure)," kPa"]})]})}),(0,o.createComponentVNode)(2,a.Section,{title:"Hot Loop ("+d.hot_dir+")",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Hot Inlet",children:[i(d.hot_inlet_temp)," K, ",i(d.hot_inlet_pressure)," kPa"]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Hot Outlet",children:[i(d.hot_outlet_temp)," K, ",i(d.hot_outlet_pressure)," kPa"]})]})}),(0,o.createComponentVNode)(2,a.Section,{title:"Power Output",children:[i(d.output_power)," W",!!d.warning_switched&&(0,o.createComponentVNode)(2,a.Box,{color:"red",children:"Warning: Cold inlet temperature exceeds hot inlet temperature."}),!!d.warning_cold_pressure&&(0,o.createComponentVNode)(2,a.Box,{color:"red",children:"Warning: Cold circulator inlet pressure is under 1,000 kPa."}),!!d.warning_hot_pressure&&(0,o.createComponentVNode)(2,a.Box,{color:"red",children:"Warning: Hot circulator inlet pressure is under 1,000 kPa."})]})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.TachyonArrayContent=t.TachyonArray=void 0;var o=n(0),r=n(1),a=n(2),c=n(4);t.TachyonArray=function(e,t){var n=(0,r.useBackend)(t),l=n.act,d=n.data,u=d.records,s=void 0===u?[]:u,m=d.explosion_target,p=d.toxins_tech,f=d.printing;return(0,o.createComponentVNode)(2,c.Window,{children:(0,o.createComponentVNode)(2,c.Window.Content,{scrollable:!0,children:[(0,o.createComponentVNode)(2,a.Section,{children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Shift's Target",children:m}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Current Toxins Level",children:p}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Administration",children:[(0,o.createComponentVNode)(2,a.Button,{icon:"print",content:"Print All Logs",disabled:!s.length||f,align:"center",onClick:function(){return l("print_logs")}}),(0,o.createComponentVNode)(2,a.Button.Confirm,{icon:"trash",content:"Delete All Logs",disabled:!s.length,color:"bad",align:"center",onClick:function(){return l("delete_logs")}})]})]})}),s.length?(0,o.createComponentVNode)(2,i):(0,o.createComponentVNode)(2,a.NoticeBox,{children:"No Records"})]})})};var i=function(e,t){var n=(0,r.useBackend)(t),c=n.act,i=n.data.records,l=void 0===i?[]:i;return(0,o.createComponentVNode)(2,a.Section,{title:"Logged Explosions",children:(0,o.createComponentVNode)(2,a.Flex,{children:(0,o.createComponentVNode)(2,a.Flex.Item,{children:(0,o.createComponentVNode)(2,a.Table,{m:"0.5rem",children:[(0,o.createComponentVNode)(2,a.Table.Row,{header:!0,children:[(0,o.createComponentVNode)(2,a.Table.Cell,{children:"Time"}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:"Epicenter"}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:"Actual Size"}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:"Theoretical Size"})]}),l.map((function(e){return(0,o.createComponentVNode)(2,a.Table.Row,{children:[(0,o.createComponentVNode)(2,a.Table.Cell,{children:e.logged_time}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:e.epicenter}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:e.actual_size_message}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:e.theoretical_size_message}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:(0,o.createComponentVNode)(2,a.Button.Confirm,{icon:"trash",content:"Delete",color:"bad",onClick:function(){return c("delete_record",{index:e.index})}})})]},e.index)}))]})})})})};t.TachyonArrayContent=i},function(e,t,n){"use strict";t.__esModule=!0,t.Tank=void 0;var o=n(0),r=n(1),a=n(2),c=n(4);t.Tank=function(e,t){var n,i=(0,r.useBackend)(t),l=i.act,d=i.data;return n=d.has_mask?(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Mask",children:(0,o.createComponentVNode)(2,a.Button,{icon:d.connected?"check":"times",content:d.connected?"Internals On":"Internals Off",selected:d.connected,onClick:function(){return l("internals")}})}):(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Mask",color:"red",children:"No Mask Equipped"}),(0,o.createComponentVNode)(2,c.Window,{children:(0,o.createComponentVNode)(2,c.Window.Content,{children:(0,o.createComponentVNode)(2,a.Section,{children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Tank Pressure",children:(0,o.createComponentVNode)(2,a.ProgressBar,{value:d.tankPressure/1013,ranges:{good:[.35,Infinity],average:[.15,.35],bad:[-Infinity,.15]},children:d.tankPressure+" kPa"})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Release Pressure",children:[(0,o.createComponentVNode)(2,a.Button,{icon:"fast-backward",disabled:d.ReleasePressure===d.minReleasePressure,tooltip:"Min",onClick:function(){return l("pressure",{pressure:"min"})}}),(0,o.createComponentVNode)(2,a.NumberInput,{animated:!0,value:parseFloat(d.releasePressure),width:"65px",unit:"kPa",minValue:d.minReleasePressure,maxValue:d.maxReleasePressure,onChange:function(e,t){return l("pressure",{pressure:t})}}),(0,o.createComponentVNode)(2,a.Button,{icon:"fast-forward",disabled:d.ReleasePressure===d.maxReleasePressure,tooltip:"Max",onClick:function(){return l("pressure",{pressure:"max"})}}),(0,o.createComponentVNode)(2,a.Button,{icon:"undo",content:"",disabled:d.ReleasePressure===d.defaultReleasePressure,tooltip:"Reset",onClick:function(){return l("pressure",{pressure:"reset"})}})]}),n]})})})})}},function(e,t,n){"use strict";t.__esModule=!0,t.TankDispenser=void 0;var o=n(0),r=n(1),a=n(2),c=n(4);t.TankDispenser=function(e,t){var n=(0,r.useBackend)(t),i=n.act,l=n.data,d=l.o_tanks,u=l.p_tanks;return(0,o.createComponentVNode)(2,c.Window,{children:(0,o.createComponentVNode)(2,c.Window.Content,{children:[(0,o.createComponentVNode)(2,a.Box,{children:(0,o.createComponentVNode)(2,a.Button,{content:"Dispense Oxygen Tank ("+d+")",disabled:0===d,icon:"arrow-circle-down",onClick:function(){return i("oxygen")}})}),(0,o.createComponentVNode)(2,a.Box,{children:(0,o.createComponentVNode)(2,a.Button,{content:"Dispense Plasma Tank ("+u+")",disabled:0===u,icon:"arrow-circle-down",onClick:function(){return i("plasma")}})})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.TcommsCore=void 0;var o=n(0),r=n(1),a=n(2),c=n(4);t.TcommsCore=function(e,t){var n=(0,r.useBackend)(t),s=(n.act,n.data.ion),m=(0,r.useLocalState)(t,"tabIndex",0),p=m[0],f=m[1];return(0,o.createComponentVNode)(2,c.Window,{resizable:!0,children:(0,o.createComponentVNode)(2,c.Window.Content,{scrollable:!0,children:[1===s&&(0,o.createComponentVNode)(2,i),(0,o.createComponentVNode)(2,a.Tabs,{children:[(0,o.createComponentVNode)(2,a.Tabs.Tab,{selected:0===p,onClick:function(){return f(0)},children:[(0,o.createComponentVNode)(2,a.Icon,{name:"wrench"}),"Configuration"]},"ConfigPage"),(0,o.createComponentVNode)(2,a.Tabs.Tab,{selected:1===p,onClick:function(){return f(1)},children:[(0,o.createComponentVNode)(2,a.Icon,{name:"link"}),"Device Linkage"]},"LinkagePage"),(0,o.createComponentVNode)(2,a.Tabs.Tab,{selected:2===p,onClick:function(){return f(2)},children:[(0,o.createComponentVNode)(2,a.Icon,{name:"user-times"}),"User Filtering"]},"FilterPage")]}),function(e){switch(e){case 0:return(0,o.createComponentVNode)(2,l);case 1:return(0,o.createComponentVNode)(2,d);case 2:return(0,o.createComponentVNode)(2,u);default:return"SOMETHING WENT VERY WRONG PLEASE AHELP"}}(p)]})})};var i=function(){return(0,o.createComponentVNode)(2,a.NoticeBox,{children:"ERROR: An Ionospheric overload has occured. Please wait for the machine to reboot. This cannot be manually done."})},l=function(e,t){var n=(0,r.useBackend)(t),c=n.act,i=n.data,l=i.active,d=i.sectors_available,u=i.nttc_toggle_jobs,s=i.nttc_toggle_job_color,m=i.nttc_toggle_name_color,p=i.nttc_toggle_command_bold,f=i.nttc_job_indicator_type,h=i.nttc_setting_language,C=i.network_id;return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Section,{title:"Status",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Machine Power",children:(0,o.createComponentVNode)(2,a.Button,{content:l?"On":"Off",selected:l,icon:"power-off",onClick:function(){return c("toggle_active")}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Sector Coverage",children:d})]})}),(0,o.createComponentVNode)(2,a.Section,{title:"Radio Configuration",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Job Announcements",children:(0,o.createComponentVNode)(2,a.Button,{content:u?"On":"Off",selected:u,icon:"user-tag",onClick:function(){return c("nttc_toggle_jobs")}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Job Departmentalisation",children:(0,o.createComponentVNode)(2,a.Button,{content:s?"On":"Off",selected:s,icon:"clipboard-list",onClick:function(){return c("nttc_toggle_job_color")}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Name Departmentalisation",children:(0,o.createComponentVNode)(2,a.Button,{content:m?"On":"Off",selected:m,icon:"user-tag",onClick:function(){return c("nttc_toggle_name_color")}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Command Amplification",children:(0,o.createComponentVNode)(2,a.Button,{content:p?"On":"Off",selected:p,icon:"volume-up",onClick:function(){return c("nttc_toggle_command_bold")}})})]})}),(0,o.createComponentVNode)(2,a.Section,{title:"Advanced",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Job Announcement Format",children:(0,o.createComponentVNode)(2,a.Button,{content:f||"Unset",selected:f,icon:"pencil-alt",onClick:function(){return c("nttc_job_indicator_type")}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Language Conversion",children:(0,o.createComponentVNode)(2,a.Button,{content:h||"Unset",selected:h,icon:"globe",onClick:function(){return c("nttc_setting_language")}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Network ID",children:(0,o.createComponentVNode)(2,a.Button,{content:C||"Unset",selected:C,icon:"server",onClick:function(){return c("network_id")}})})]})}),(0,o.createComponentVNode)(2,a.Section,{title:"Maintenance",children:[(0,o.createComponentVNode)(2,a.Button,{content:"Import Configuration",icon:"file-import",onClick:function(){return c("import")}}),(0,o.createComponentVNode)(2,a.Button,{content:"Export Configuration",icon:"file-export",onClick:function(){return c("export")}})]})],4)},d=function(e,t){var n=(0,r.useBackend)(t),c=n.act,i=n.data,l=i.link_password,d=i.relay_entries;return(0,o.createComponentVNode)(2,a.Section,{title:"Device Linkage",children:[(0,o.createComponentVNode)(2,a.LabeledList,{children:(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Linkage Password",children:(0,o.createComponentVNode)(2,a.Button,{content:l||"Unset",selected:l,icon:"lock",onClick:function(){return c("change_password")}})})}),(0,o.createComponentVNode)(2,a.Table,{m:"0.5rem",children:[(0,o.createComponentVNode)(2,a.Table.Row,{header:!0,children:[(0,o.createComponentVNode)(2,a.Table.Cell,{children:"Network Address"}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:"Network ID"}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:"Sector"}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:"Status"}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:"Unlink"})]}),d.map((function(e){return(0,o.createComponentVNode)(2,a.Table.Row,{children:[(0,o.createComponentVNode)(2,a.Table.Cell,{children:e.addr}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:e.net_id}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:e.sector}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:1===e.status?(0,o.createComponentVNode)(2,a.Box,{color:"green",children:"Online"}):(0,o.createComponentVNode)(2,a.Box,{color:"red",children:"Offline"})}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:(0,o.createComponentVNode)(2,a.Button,{content:"Unlink",icon:"unlink",onClick:function(){return c("unlink",{addr:e.addr})}})})]},e.addr)}))]})]})},u=function(e,t){var n=(0,r.useBackend)(t),c=n.act,i=n.data.filtered_users;return(0,o.createComponentVNode)(2,a.Section,{title:"User Filtering",buttons:(0,o.createComponentVNode)(2,a.Button,{content:"Add User",icon:"user-plus",onClick:function(){return c("add_filter")}}),children:(0,o.createComponentVNode)(2,a.Table,{m:"0.5rem",children:[(0,o.createComponentVNode)(2,a.Table.Row,{header:!0,children:[(0,o.createComponentVNode)(2,a.Table.Cell,{style:{width:"90%"},children:"User"}),(0,o.createComponentVNode)(2,a.Table.Cell,{style:{width:"10%"},children:"Actions"})]}),i.map((function(e){return(0,o.createComponentVNode)(2,a.Table.Row,{children:[(0,o.createComponentVNode)(2,a.Table.Cell,{children:e}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:(0,o.createComponentVNode)(2,a.Button,{content:"Remove",icon:"user-times",onClick:function(){return c("remove_filter",{user:e})}})})]},e)}))]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.TcommsRelay=void 0;var o=n(0),r=n(1),a=n(2),c=n(4);t.TcommsRelay=function(e,t){var n=(0,r.useBackend)(t),d=n.act,u=n.data,s=u.linked,m=u.active,p=u.network_id;return(0,o.createComponentVNode)(2,c.Window,{resizable:!0,children:(0,o.createComponentVNode)(2,c.Window.Content,{scrollable:!0,children:[(0,o.createComponentVNode)(2,a.Section,{title:"Relay Configuration",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Machine Power",children:(0,o.createComponentVNode)(2,a.Button,{content:m?"On":"Off",selected:m,icon:"power-off",onClick:function(){return d("toggle_active")}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Network ID",children:(0,o.createComponentVNode)(2,a.Button,{content:p||"Unset",selected:p,icon:"server",onClick:function(){return d("network_id")}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Link Status",children:1===s?(0,o.createComponentVNode)(2,a.Box,{color:"green",children:"Linked"}):(0,o.createComponentVNode)(2,a.Box,{color:"red",children:"Unlinked"})})]})}),1===s?(0,o.createComponentVNode)(2,i):(0,o.createComponentVNode)(2,l)]})})};var i=function(e,t){var n=(0,r.useBackend)(t),c=n.act,i=n.data,l=i.linked_core_id,d=i.linked_core_addr,u=i.hidden_link;return(0,o.createComponentVNode)(2,a.Section,{title:"Link Status",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Linked Core ID",children:l}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Linked Core Address",children:d}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Hidden Link",children:(0,o.createComponentVNode)(2,a.Button,{content:u?"Yes":"No",icon:u?"eye-slash":"eye",selected:u,onClick:function(){return c("toggle_hidden_link")}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Unlink",children:(0,o.createComponentVNode)(2,a.Button,{content:"Unlink",icon:"unlink",color:"red",onClick:function(){return c("unlink")}})})]})})},l=function(e,t){var n=(0,r.useBackend)(t),c=n.act,i=n.data.cores;return(0,o.createComponentVNode)(2,a.Section,{title:"Detected Cores",children:(0,o.createComponentVNode)(2,a.Table,{m:"0.5rem",children:[(0,o.createComponentVNode)(2,a.Table.Row,{header:!0,children:[(0,o.createComponentVNode)(2,a.Table.Cell,{children:"Network Address"}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:"Network ID"}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:"Sector"}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:"Link"})]}),i.map((function(e){return(0,o.createComponentVNode)(2,a.Table.Row,{children:[(0,o.createComponentVNode)(2,a.Table.Cell,{children:e.addr}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:e.net_id}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:e.sector}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:(0,o.createComponentVNode)(2,a.Button,{content:"Link",icon:"link",onClick:function(){return c("link",{addr:e.addr})}})})]},e.addr)}))]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.Teleporter=void 0;var o=n(0),r=n(1),a=n(2),c=n(4),i=n(179);t.Teleporter=function(e,t){var n=(0,r.useBackend)(t),l=n.act,d=n.data,u=d.targetsTeleport?d.targetsTeleport:{},s=d.calibrated,m=d.calibrating,p=d.powerstation,f=d.regime,h=d.teleporterhub,C=d.target,N=d.locked;return(0,o.createComponentVNode)(2,c.Window,{children:(0,o.createComponentVNode)(2,c.Window.Content,{children:[(!p||!h)&&(0,o.createComponentVNode)(2,a.Section,{title:"Error",children:[h,!p&&(0,o.createComponentVNode)(2,a.Box,{color:"bad",children:" Powerstation not linked "}),p&&!h&&(0,o.createComponentVNode)(2,a.Box,{color:"bad",children:" Teleporter hub not linked "})]}),p&&h&&(0,o.createComponentVNode)(2,a.Section,{title:"Status",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Regime",children:[(0,o.createComponentVNode)(2,a.Button,{tooltip:"Teleport to another teleport hub. ",color:1===f?"good":null,onClick:function(){return l("setregime",{regime:1})},children:"Gate"}),(0,o.createComponentVNode)(2,a.Button,{tooltip:"One-way teleport. ",color:0===f?"good":null,onClick:function(){return l("setregime",{regime:0})},children:"Teleporter"}),(0,o.createComponentVNode)(2,a.Button,{tooltip:"Teleport to a location stored in a GPS device. ",color:2===f?"good":null,disabled:!N,onClick:function(){return l("setregime",{regime:2})},children:"GPS"})]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Teleport target",children:[0===f&&(0,o.createComponentVNode)(2,a.Dropdown,{width:"220px",selected:C,options:Object.keys(u),color:"None"!==C?"default":"bad",onSelected:function(e){return l("settarget",{x:u[e].x,y:u[e].y,z:u[e].z})}}),1===f&&(0,o.createComponentVNode)(2,a.Dropdown,{width:"220px",selected:C,options:Object.keys(u),color:"None"!==C?"default":"bad",onSelected:function(e){return l("settarget",{x:u[e].x,y:u[e].y,z:u[e].z})}}),2===f&&(0,o.createComponentVNode)(2,a.Box,{children:C})]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Calibration",children:["None"!==C&&(0,o.createComponentVNode)(2,a.Grid,{children:[(0,o.createComponentVNode)(2,i.GridColumn,{size:"2",children:m&&(0,o.createComponentVNode)(2,a.Box,{color:"average",children:"In Progress"})||s&&(0,o.createComponentVNode)(2,a.Box,{color:"good",children:"Optimal"})||(0,o.createComponentVNode)(2,a.Box,{color:"bad",children:"Sub-Optimal"})}),(0,o.createComponentVNode)(2,i.GridColumn,{size:"3",children:(0,o.createComponentVNode)(2,a.Box,{"class":"ml-1",children:(0,o.createComponentVNode)(2,a.Button,{icon:"sync-alt",tooltip:"Calibrates the hub. Accidents may occur when the calibration is not optimal.",disabled:!(!s&&!m),onClick:function(){return l("calibrate")}})})})]}),"None"===C&&(0,o.createComponentVNode)(2,a.Box,{lineHeight:"21px",children:"No target set"})]})]})}),!!(N&&p&&h&&2===f)&&(0,o.createComponentVNode)(2,a.Section,{title:"GPS",children:(0,o.createComponentVNode)(2,a.Flex,{direction:"row",justify:"space-around",children:[(0,o.createComponentVNode)(2,a.Button,{content:"Upload GPS data",tooltip:"Loads the GPS data from the device.",icon:"upload",onClick:function(){return l("load")}}),(0,o.createComponentVNode)(2,a.Button,{content:"Eject",tooltip:"Ejects the GPS device",icon:"eject",onClick:function(){return l("eject")}})]})})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.ThermoMachine=void 0;var o=n(0),r=n(15),a=n(1),c=n(2),i=n(4);t.ThermoMachine=function(e,t){var n=(0,a.useBackend)(t),l=n.act,d=n.data;return(0,o.createComponentVNode)(2,i.Window,{children:(0,o.createComponentVNode)(2,i.Window.Content,{children:[(0,o.createComponentVNode)(2,c.Section,{title:"Status",children:(0,o.createComponentVNode)(2,c.LabeledList,{children:[(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Temperature",children:[(0,o.createComponentVNode)(2,c.AnimatedNumber,{value:d.temperature,format:function(e){return(0,r.toFixed)(e,2)}})," K"]}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Pressure",children:[(0,o.createComponentVNode)(2,c.AnimatedNumber,{value:d.pressure,format:function(e){return(0,r.toFixed)(e,2)}})," kPa"]})]})}),(0,o.createComponentVNode)(2,c.Section,{title:"Controls",buttons:(0,o.createComponentVNode)(2,c.Button,{icon:d.on?"power-off":"times",content:d.on?"On":"Off",selected:d.on,onClick:function(){return l("power")}}),children:(0,o.createComponentVNode)(2,c.LabeledList,{children:[(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Setting",children:(0,o.createComponentVNode)(2,c.Button,{icon:d.cooling?"temperature-low":"temperature-high",content:d.cooling?"Cooling":"Heating",selected:d.cooling,onClick:function(){return l("cooling")}})}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Target Temperature",children:(0,o.createComponentVNode)(2,c.NumberInput,{animated:!0,value:Math.round(d.target),unit:"K",width:"62px",minValue:Math.round(d.min),maxValue:Math.round(d.max),step:5,stepPixelSize:3,onDrag:function(e,t){return l("target",{target:t})}})}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Presets",children:[(0,o.createComponentVNode)(2,c.Button,{icon:"fast-backward",disabled:d.target===d.min,title:"Minimum temperature",onClick:function(){return l("target",{target:d.min})}}),(0,o.createComponentVNode)(2,c.Button,{icon:"sync",disabled:d.target===d.initial,title:"Room Temperature",onClick:function(){return l("target",{target:d.initial})}}),(0,o.createComponentVNode)(2,c.Button,{icon:"fast-forward",disabled:d.target===d.max,title:"Maximum Temperature",onClick:function(){return l("target",{target:d.max})}})]})]})})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.TransferValve=void 0;var o=n(0),r=n(1),a=n(2),c=n(4);t.TransferValve=function(e,t){var n=(0,r.useBackend)(t),i=n.act,l=n.data,d=l.tank_one,u=l.tank_two,s=l.attached_device,m=l.valve;return(0,o.createComponentVNode)(2,c.Window,{children:(0,o.createComponentVNode)(2,c.Window.Content,{children:[(0,o.createComponentVNode)(2,a.Section,{children:(0,o.createComponentVNode)(2,a.LabeledList,{children:(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Valve Status",children:(0,o.createComponentVNode)(2,a.Button,{icon:m?"unlock":"lock",content:m?"Open":"Closed",disabled:!d||!u,onClick:function(){return i("toggle")}})})})}),(0,o.createComponentVNode)(2,a.Section,{title:"Assembly",buttons:(0,o.createComponentVNode)(2,a.Button,{textAlign:"center",width:"150px",icon:"cog",content:"Configure Assembly",disabled:!s,onClick:function(){return i("device")}}),children:(0,o.createComponentVNode)(2,a.LabeledList,{children:s?(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Attachment",children:(0,o.createComponentVNode)(2,a.Button,{icon:"eject",content:s,disabled:!s,onClick:function(){return i("remove_device")}})}):(0,o.createComponentVNode)(2,a.NoticeBox,{textAlign:"center",children:"Attach Assembly"})})}),(0,o.createComponentVNode)(2,a.Section,{title:"Attachment One",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:d?(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Attachment",children:(0,o.createComponentVNode)(2,a.Button,{icon:"eject",content:d,disabled:!d,onClick:function(){return i("tankone")}})}):(0,o.createComponentVNode)(2,a.NoticeBox,{textAlign:"center",children:"Attach Tank"})})}),(0,o.createComponentVNode)(2,a.Section,{title:"Attachment Two",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:u?(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Attachment",children:(0,o.createComponentVNode)(2,a.Button,{icon:"eject",content:u,disabled:!u,onClick:function(){return i("tanktwo")}})}):(0,o.createComponentVNode)(2,a.NoticeBox,{textAlign:"center",children:"Attach Tank"})})})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.Uplink=void 0;var o=n(0),r=n(26),a=n(43),c=n(19),i=n(1),l=n(2),d=n(75),u=n(4),s=n(49),m=function(e){switch(e){case 0:return(0,o.createComponentVNode)(2,p);case 1:return(0,o.createComponentVNode)(2,f);default:return"SOMETHING WENT VERY WRONG PLEASE AHELP"}};t.Uplink=function(e,t){var n=(0,i.useBackend)(t),r=n.act,a=(n.data,(0,i.useLocalState)(t,"tabIndex",0)),c=a[0],d=a[1];return(0,o.createComponentVNode)(2,u.Window,{theme:"syndicate",children:[(0,o.createComponentVNode)(2,s.ComplexModal),(0,o.createComponentVNode)(2,u.Window.Content,{scrollable:!0,children:[(0,o.createComponentVNode)(2,l.Tabs,{children:[(0,o.createComponentVNode)(2,l.Tabs.Tab,{selected:0===c,onClick:function(){return d(0)},icon:"shopping-cart",children:"Purchase Equipment"},"PurchasePage"),(0,o.createComponentVNode)(2,l.Tabs.Tab,{selected:1===c,onClick:function(){return d(1)},icon:"user",children:"Exploitable Information"},"ExploitableInfo"),(0,o.createComponentVNode)(2,l.Tabs.Tab,{onClick:function(){return r("lock")},icon:"lock",children:"Lock Uplink"},"LockUplink")]}),m(c)]})]})};var p=function(e,t){var n=(0,i.useBackend)(t),r=n.act,a=n.data,u=a.crystals,s=a.cats,m=(0,i.useLocalState)(t,"uplinkTab",s[0]),p=m[0],f=m[1];return(0,o.createComponentVNode)(2,l.Section,{title:"Current Balance: "+u+"TC",buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,l.Button,{content:"Random Item",icon:"question",onClick:function(){return r("buyRandom")}}),(0,o.createComponentVNode)(2,l.Button,{content:"Refund Currently Held Item",icon:"undo",onClick:function(){return r("refund")}})],4),children:(0,o.createComponentVNode)(2,l.Flex,{children:[(0,o.createComponentVNode)(2,d.FlexItem,{children:(0,o.createComponentVNode)(2,l.Tabs,{vertical:!0,children:s.map((function(e){return(0,o.createComponentVNode)(2,l.Tabs.Tab,{selected:e===p,onClick:function(){return f(e)},children:e.cat},e)}))})}),(0,o.createComponentVNode)(2,l.Flex.Item,{grow:1,basis:0,children:p.items.map((function(e){return(0,o.createComponentVNode)(2,l.Section,{title:(0,c.decodeHtmlEntities)(e.name),buttons:(0,o.createComponentVNode)(2,l.Button,{content:"Buy ("+e.cost+"TC)"+(e.refundable?" [Refundable]":""),color:1===e.hijack_only&&"red",tooltip:1===e.hijack_only&&"Hijack Agents Only!",tooltipPosition:"left",onClick:function(){return r("buyItem",{item:e.obj_path})},disabled:e.cost>u}),children:(0,o.createComponentVNode)(2,l.Box,{italic:!0,children:(0,c.decodeHtmlEntities)(e.desc)})},(0,c.decodeHtmlEntities)(e.name))}))})]})})},f=function(e,t){var n=(0,i.useBackend)(t),u=(n.act,n.data.exploitable),s=(0,i.useLocalState)(t,"selectedRecord",u[0]),m=s[0],p=s[1],f=(0,i.useLocalState)(t,"searchText",""),h=f[0],C=f[1],N=function(e,t){void 0===t&&(t="");var n=(0,c.createSearch)(t,(function(e){return e.name}));return(0,a.flow)([(0,r.filter)((function(e){return null==e?void 0:e.name})),t&&(0,r.filter)(n),(0,r.sortBy)((function(e){return e.name}))])(e)}(u,h);return(0,o.createComponentVNode)(2,l.Section,{title:"Exploitable Records",children:(0,o.createComponentVNode)(2,l.Flex,{children:[(0,o.createComponentVNode)(2,d.FlexItem,{basis:20,children:[(0,o.createComponentVNode)(2,l.Input,{fluid:!0,mb:1,placeholder:"Search Crew",onInput:function(e,t){return C(t)}}),(0,o.createComponentVNode)(2,l.Tabs,{vertical:!0,children:N.map((function(e){return(0,o.createComponentVNode)(2,l.Tabs.Tab,{selected:e===m,onClick:function(){return p(e)},children:e.name},e)}))})]}),(0,o.createComponentVNode)(2,l.Flex.Item,{grow:1,basis:0,children:(0,o.createComponentVNode)(2,l.Section,{title:"Name: "+m.name,children:[(0,o.createComponentVNode)(2,l.Box,{children:["Age: ",m.age]}),(0,o.createComponentVNode)(2,l.Box,{children:["Fingerprint: ",m.fingerprint]}),(0,o.createComponentVNode)(2,l.Box,{children:["Rank: ",m.rank]}),(0,o.createComponentVNode)(2,l.Box,{children:["Sex: ",m.sex]}),(0,o.createComponentVNode)(2,l.Box,{children:["Species: ",m.species]})]})})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.Vending=void 0;var o=n(0),r=(n(8),n(1)),a=n(2),c=n(4),i=function(e,t){var n=(0,r.useBackend)(t),c=n.act,i=n.data,l=e.product,d=e.productStock,u=e.productImage,s=i.chargesMoney,m=(i.user,i.userMoney),p=i.vend_ready,f=i.coin_name,h=(i.inserted_item_name,!s||0===l.price),C="ERROR!",N="";l.req_coin?(C="COIN",N="circle"):h?(C="FREE",N="arrow-circle-down"):(C=l.price,N="shopping-cart");var b=!p||!f&&l.req_coin||0===d||!h&&l.price>m;return(0,o.createComponentVNode)(2,a.Table.Row,{children:[(0,o.createComponentVNode)(2,a.Table.Cell,{collapsing:!0,children:(0,o.createVNode)(1,"img",null,null,1,{src:"data:image/jpeg;base64,"+u,style:{"vertical-align":"middle",width:"32px",margin:"0px","margin-left":"0px"}})}),(0,o.createComponentVNode)(2,a.Table.Cell,{bold:!0,children:l.name}),(0,o.createComponentVNode)(2,a.Table.Cell,{collapsing:!0,textAlign:"center",children:(0,o.createComponentVNode)(2,a.Box,{color:(d<=0?"bad":d<=l.max_amount/2&&"average")||"good",children:[d," in stock"]})}),(0,o.createComponentVNode)(2,a.Table.Cell,{collapsing:!0,textAlign:"center",children:(0,o.createComponentVNode)(2,a.Button,{fluid:!0,disabled:b,icon:N,content:C,textAlign:"left",onClick:function(){return c("vend",{inum:l.inum})}})})]})};t.Vending=function(e,t){var n,l=(0,r.useBackend)(t),d=l.act,u=l.data,s=u.user,m=u.guestNotice,p=u.userMoney,f=u.chargesMoney,h=u.product_records,C=void 0===h?[]:h,N=u.coin_records,b=void 0===N?[]:N,g=u.hidden_records,V=void 0===g?[]:g,v=u.stock,y=(u.vend_ready,u.coin_name),_=u.inserted_item_name,x=u.panel_open,k=u.speaker,L=u.imagelist;return n=[].concat(C,b),u.extended_inventory&&(n=[].concat(n,V)),n=n.filter((function(e){return!!e})),(0,o.createComponentVNode)(2,c.Window,{title:"Vending Machine",resizable:!0,children:(0,o.createComponentVNode)(2,c.Window.Content,{scrollable:!0,children:[!!f&&(0,o.createComponentVNode)(2,a.Section,{title:"User",children:s&&(0,o.createComponentVNode)(2,a.Box,{children:["Welcome, ",(0,o.createVNode)(1,"b",null,s.name,0),","," ",(0,o.createVNode)(1,"b",null,s.job||"Unemployed",0),"!",(0,o.createVNode)(1,"br"),"Your balance is ",(0,o.createVNode)(1,"b",null,[p,(0,o.createTextVNode)(" credits")],0),"."]})||(0,o.createComponentVNode)(2,a.Box,{color:"light-grey",children:m})}),!!y&&(0,o.createComponentVNode)(2,a.Section,{title:"Coin",buttons:(0,o.createComponentVNode)(2,a.Button,{fluid:!0,icon:"eject",content:"Remove Coin",onClick:function(){return d("remove_coin",{})}}),children:(0,o.createComponentVNode)(2,a.Box,{children:y})}),!!_&&(0,o.createComponentVNode)(2,a.Section,{title:"Item",buttons:(0,o.createComponentVNode)(2,a.Button,{fluid:!0,icon:"eject",content:"Eject Item",onClick:function(){return d("eject_item",{})}}),children:(0,o.createComponentVNode)(2,a.Box,{children:_})}),!!x&&(0,o.createComponentVNode)(2,a.Section,{title:"Maintenance",children:(0,o.createComponentVNode)(2,a.Button,{icon:k?"check":"volume-mute",selected:k,content:"Speaker",textAlign:"left",onClick:function(){return d("toggle_voice",{})}})}),(0,o.createComponentVNode)(2,a.Section,{title:"Products",children:(0,o.createComponentVNode)(2,a.Table,{children:n.map((function(e){return(0,o.createComponentVNode)(2,i,{product:e,productStock:v[e.name],productImage:L[e.path]},e.name)}))})})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.VolumeMixer=void 0;var o=n(0),r=n(1),a=n(2),c=n(4);t.VolumeMixer=function(e,t){var n=(0,r.useBackend)(t),i=n.act,l=n.data.channels;return(0,o.createComponentVNode)(2,c.Window,{children:(0,o.createComponentVNode)(2,c.Window.Content,{children:(0,o.createComponentVNode)(2,a.Section,{height:"100%",overflow:"auto",children:l.map((function(e,t){return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Box,{fontSize:"1.25rem",color:"label",mt:t>0&&"0.5rem",children:e.name}),(0,o.createComponentVNode)(2,a.Box,{mt:"0.5rem",children:(0,o.createComponentVNode)(2,a.Flex,{children:[(0,o.createComponentVNode)(2,a.Flex.Item,{children:(0,o.createComponentVNode)(2,a.Button,{width:"24px",color:"transparent",children:(0,o.createComponentVNode)(2,a.Icon,{name:"volume-off",size:"1.5",mt:"0.1rem",onClick:function(){return i("volume",{channel:e.num,volume:0})}})})}),(0,o.createComponentVNode)(2,a.Flex.Item,{grow:"1",mx:"1rem",children:(0,o.createComponentVNode)(2,a.Slider,{minValue:0,maxValue:100,stepPixelSize:3.13,value:e.volume,onChange:function(t,n){return i("volume",{channel:e.num,volume:n})}})}),(0,o.createComponentVNode)(2,a.Flex.Item,{children:(0,o.createComponentVNode)(2,a.Button,{width:"24px",color:"transparent",children:(0,o.createComponentVNode)(2,a.Icon,{name:"volume-up",size:"1.5",mt:"0.1rem",onClick:function(){return i("volume",{channel:e.num,volume:100})}})})})]})})],4,e.num)}))})})})}},function(e,t,n){"use strict";t.__esModule=!0,t.Wires=void 0;var o=n(0),r=n(1),a=n(2),c=n(4);t.Wires=function(e,t){var n=(0,r.useBackend)(t),i=n.act,l=n.data,d=l.wires||[],u=l.status||[];return(0,o.createComponentVNode)(2,c.Window,{children:(0,o.createComponentVNode)(2,c.Window.Content,{children:[(0,o.createComponentVNode)(2,a.Section,{children:(0,o.createComponentVNode)(2,a.LabeledList,{children:d.map((function(e){return(0,o.createComponentVNode)(2,a.LabeledList.Item,{className:"candystripe",label:e.color_name,labelColor:e.seen_color,color:e.seen_color,buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Button,{content:e.cut?"Mend":"Cut",onClick:function(){return i("cut",{wire:e.color})}}),(0,o.createComponentVNode)(2,a.Button,{content:"Pulse",onClick:function(){return i("pulse",{wire:e.color})}}),(0,o.createComponentVNode)(2,a.Button,{content:e.attached?"Detach":"Attach",onClick:function(){return i("attach",{wire:e.color})}})],4),children:!!e.wire&&(0,o.createVNode)(1,"i",null,[(0,o.createTextVNode)("("),e.wire,(0,o.createTextVNode)(")")],0)},e.seen_color)}))})}),!!u.length&&(0,o.createComponentVNode)(2,a.Section,{children:u.map((function(e){return(0,o.createComponentVNode)(2,a.Box,{color:"lightgray",mt:.1,children:e},e)}))})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.WizardApprenticeContract=void 0;var o=n(0),r=n(1),a=n(2),c=n(4);t.WizardApprenticeContract=function(e,t){var n=(0,r.useBackend)(t),i=n.act,l=n.data.used;return(0,o.createComponentVNode)(2,c.Window,{resizable:!0,children:(0,o.createComponentVNode)(2,c.Window.Content,{scrollable:!0,children:[(0,o.createComponentVNode)(2,a.Section,{title:"Contract of Apprenticeship",children:["Using this contract, you may summon an apprentice to aid you on your mission.",(0,o.createVNode)(1,"p",null,"If you are unable to establish contact with your apprentice, you can feed the contract back to the spellbook to refund your points.",16),l?(0,o.createComponentVNode)(2,a.Box,{bold:!0,color:"red",children:"You've already summoned an apprentice or you are in process of summoning one."}):""]}),(0,o.createComponentVNode)(2,a.Section,{title:"Which school of magic is your apprentice studying?",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Destruction",children:["Your apprentice is skilled in offensive magic. They know Magic Missile and Fireball.",(0,o.createVNode)(1,"br"),(0,o.createComponentVNode)(2,a.Button,{content:"Select",disabled:l,onClick:function(){return i("destruction")}})]}),(0,o.createComponentVNode)(2,a.LabeledList.Divider),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Bluespace Manipulation",children:["Your apprentice is able to defy physics, melting through solid objects and travelling great distances in the blink of an eye. They know Teleport and Ethereal Jaunt.",(0,o.createVNode)(1,"br"),(0,o.createComponentVNode)(2,a.Button,{content:"Select",disabled:l,onClick:function(){return i("bluespace")}})]}),(0,o.createComponentVNode)(2,a.LabeledList.Divider),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Healing",children:["Your apprentice is training to cast spells that will aid your survival. They know Forcewall and Charge and come with a Staff of Healing.",(0,o.createVNode)(1,"br"),(0,o.createComponentVNode)(2,a.Button,{content:"Select",disabled:l,onClick:function(){return i("healing")}})]}),(0,o.createComponentVNode)(2,a.LabeledList.Divider),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Robeless",children:["Your apprentice is training to cast spells without their robes. They know Knock and Mindswap.",(0,o.createVNode)(1,"br"),(0,o.createComponentVNode)(2,a.Button,{content:"Select",disabled:l,onClick:function(){return i("robeless")}})]}),(0,o.createComponentVNode)(2,a.LabeledList.Divider)]})})]})})}}]); \ No newline at end of file +if(!document.createEvent){var t,n=!0,o=!1,r="__IE8__"+Math.random(),a=Object.defineProperty||function(e,t,n){e[t]=n.value},c=Object.defineProperties||function(t,n){for(var o in n)if(l.call(n,o))try{a(t,o,n[o])}catch(r){e.console}},i=Object.getOwnPropertyDescriptor,l=Object.prototype.hasOwnProperty,d=e.Element.prototype,u=e.Text.prototype,s=/^[a-z]+$/,m=/loaded|complete/,p={},f=document.createElement("div"),h=document.documentElement,C=h.removeAttribute,N=h.setAttribute,b=function(e){return{enumerable:!0,writable:!0,configurable:!0,value:e}};_(e.HTMLCommentElement.prototype,d,"nodeValue"),_(e.HTMLScriptElement.prototype,null,"text"),_(u,null,"nodeValue"),_(e.HTMLTitleElement.prototype,null,"text"),a(e.HTMLStyleElement.prototype,"textContent",(t=i(e.CSSStyleSheet.prototype,"cssText"),y((function(){return t.get.call(this.styleSheet)}),(function(e){t.set.call(this.styleSheet,e)}))));var g=/\b\s*alpha\s*\(\s*opacity\s*=\s*(\d+)\s*\)/;a(e.CSSStyleDeclaration.prototype,"opacity",{get:function(){var e=this.filter.match(g);return e?(e[1]/100).toString():""},set:function(e){this.zoom=1;var t=!1;e=e<1?" alpha(opacity="+Math.round(100*e)+")":"",this.filter=this.filter.replace(g,(function(){return t=!0,e})),!t&&e&&(this.filter+=e)}}),c(d,{textContent:{get:k,set:S},firstElementChild:{get:function(){for(var e=this.childNodes||[],t=0,n=e.length;t1?r-1:0),c=1;c1?t-1:0),o=1;o=0||(r[n]=e[n]);return r}(e,["className"]);return(0,o.normalizeProps)((0,o.createComponentVNode)(2,a.Box,Object.assign({className:(0,r.classes)(["BlockQuote",t])},n)))}},function(e,t,n){"use strict";var o,r;t.__esModule=!0,t.VNodeFlags=t.ChildFlags=void 0,t.VNodeFlags=o,function(e){e[e.HtmlElement=1]="HtmlElement",e[e.ComponentUnknown=2]="ComponentUnknown",e[e.ComponentClass=4]="ComponentClass",e[e.ComponentFunction=8]="ComponentFunction",e[e.Text=16]="Text",e[e.SvgElement=32]="SvgElement",e[e.InputElement=64]="InputElement",e[e.TextareaElement=128]="TextareaElement",e[e.SelectElement=256]="SelectElement",e[e.Void=512]="Void",e[e.Portal=1024]="Portal",e[e.ReCreate=2048]="ReCreate",e[e.ContentEditable=4096]="ContentEditable",e[e.Fragment=8192]="Fragment",e[e.InUse=16384]="InUse",e[e.ForwardRef=32768]="ForwardRef",e[e.Normalized=65536]="Normalized",e[e.ForwardRefComponent=32776]="ForwardRefComponent",e[e.FormElement=448]="FormElement",e[e.Element=481]="Element",e[e.Component=14]="Component",e[e.DOMRef=2033]="DOMRef",e[e.InUseOrNormalized=81920]="InUseOrNormalized",e[e.ClearInUse=-16385]="ClearInUse",e[e.ComponentKnown=12]="ComponentKnown"}(o||(t.VNodeFlags=o={})),t.ChildFlags=r,function(e){e[e.UnknownChildren=0]="UnknownChildren",e[e.HasInvalidChildren=1]="HasInvalidChildren",e[e.HasVNodeChildren=2]="HasVNodeChildren",e[e.HasNonKeyedChildren=4]="HasNonKeyedChildren",e[e.HasKeyedChildren=8]="HasKeyedChildren",e[e.HasTextChildren=16]="HasTextChildren",e[e.MultipleChildren=12]="MultipleChildren"}(r||(t.ChildFlags=r={}))},function(e,t,n){"use strict";t.__esModule=!0,t.ByondUi=void 0;var o=n(0),r=n(8),a=n(431),c=n(25),i=n(61),l=n(17);function d(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o=0||(r[n]=e[n]);return r}var u=(0,i.createLogger)("ByondUi"),s=[];window.addEventListener("beforeunload",(function(){for(var e=0;e=0||(r[n]=e[n]);return r}(t,["data","rangeX","rangeY","fillColor","strokeColor","strokeWidth"]),C=this.state.viewBox,N=function(e,t,n,o){if(0===e.length)return[];var a=(0,r.zipWith)(Math.min).apply(void 0,e),c=(0,r.zipWith)(Math.max).apply(void 0,e);return n!==undefined&&(a[0]=n[0],c[0]=n[1]),o!==undefined&&(a[1]=o[0],c[1]=o[1]),(0,r.map)((function(e){return(0,r.zipWith)((function(e,t,n,o){return(e-t)/(n-t)*o}))(e,a,c,t)}))(e)}(a,C,c,l);if(N.length>0){var b=N[0],g=N[N.length-1];N.push([C[0]+f,g[1]]),N.push([C[0]+f,-f]),N.push([-f,-f]),N.push([-f,b[1]])}var V=function(e){for(var t="",n=0;n=0||(r[n]=e[n]);return r}(t,["children","color","title","buttons"]);return(0,o.createVNode)(1,"div","Collapsible",[(0,o.createVNode)(1,"div","Table",[(0,o.createVNode)(1,"div","Table__cell",(0,o.normalizeProps)((0,o.createComponentVNode)(2,a.Button,Object.assign({fluid:!0,color:l,icon:n?"chevron-down":"chevron-right",onClick:function(){return e.setState({open:!n})}},s,{children:d}))),2),u&&(0,o.createVNode)(1,"div","Table__cell Table__cell--collapsing",u,0)],0),n&&(0,o.createComponentVNode)(2,r.Box,{mt:1,children:c})],0)},c}(o.Component);t.Collapsible=c},function(e,t,n){"use strict";t.__esModule=!0,t.ColorBox=void 0;var o=n(0),r=n(8),a=n(17);var c=function(e){var t=e.content,n=(e.children,e.className),c=e.color,i=e.backgroundColor,l=function(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o=0||(r[n]=e[n]);return r}(e,["content","children","className","color","backgroundColor"]);return l.color=t?null:"transparent",l.backgroundColor=c||i,(0,o.normalizeProps)((0,o.createVNode)(1,"div",(0,r.classes)(["ColorBox",n,(0,a.computeBoxClassName)(l)]),t||".",0,Object.assign({},(0,a.computeBoxProps)(l))))};t.ColorBox=c,c.defaultHooks=r.pureComponentHooks},function(e,t,n){"use strict";t.__esModule=!0,t.Dropdown=void 0;var o=n(0),r=n(8),a=n(17),c=n(130);function i(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o=0||(r[n]=e[n]);return r}var l=function(e){var t,n;function l(t){var n;return(n=e.call(this,t)||this).state={open:!1},n.handleClick=function(){n.state.open&&n.setOpen(!1)},n}n=e,(t=l).prototype=Object.create(n.prototype),t.prototype.constructor=t,t.__proto__=n;var d=l.prototype;return d.componentWillUnmount=function(){window.removeEventListener("click",this.handleClick)},d.setOpen=function(e){var t=this;this.setState({open:e}),e?(setTimeout((function(){return window.addEventListener("click",t.handleClick)})),this.menuRef.focus()):window.removeEventListener("click",this.handleClick)},d.setSelected=function(e){this.setOpen(!1),this.props.onSelected(e)},d.buildMenu=function(){var e=this,t=this.props.options,n=(void 0===t?[]:t).map((function(t){return(0,o.createVNode)(1,"div","Dropdown__menuentry",t,0,{onClick:function(){e.setSelected(t)}},t)}));return n.length?n:"No Options Found"},d.render=function(){var e=this,t=this.props,n=t.color,l=void 0===n?"default":n,d=t.over,u=t.noscroll,s=t.nochevron,m=t.width,p=(t.onClick,t.selected),f=t.disabled,h=i(t,["color","over","noscroll","nochevron","width","onClick","selected","disabled"]),C=h.className,N=i(h,["className"]),b=d?!this.state.open:this.state.open,g=this.state.open?(0,o.createVNode)(1,"div",(0,r.classes)([u?"Dropdown__menu-noscroll":"Dropdown__menu",d&&"Dropdown__over"]),this.buildMenu(),0,{tabIndex:"-1",style:{width:m}},null,(function(t){e.menuRef=t})):null;return(0,o.createVNode)(1,"div","Dropdown",[(0,o.normalizeProps)((0,o.createComponentVNode)(2,a.Box,Object.assign({width:m,className:(0,r.classes)(["Dropdown__control","Button","Button--color--"+l,f&&"Button--disabled",C])},N,{onClick:function(){f&&!e.state.open||e.setOpen(!e.state.open)},children:[(0,o.createVNode)(1,"span","Dropdown__selected-text",p,0),!!s||(0,o.createVNode)(1,"span","Dropdown__arrow-button",(0,o.createComponentVNode)(2,c.Icon,{name:b?"chevron-up":"chevron-down"}),2)]}))),g],0)},l}(o.Component);t.Dropdown=l},function(e,t,n){"use strict";t.__esModule=!0,t.Input=void 0;var o=n(0),r=n(8),a=n(17);function c(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o=0||(r[n]=e[n]);return r}var i=function(e){return(0,r.isFalsy)(e)?"":e},l=function(e){var t,n;function l(){var t;return(t=e.call(this)||this).inputRef=(0,o.createRef)(),t.state={editing:!1},t.handleInput=function(e){var n=t.state.editing,o=t.props.onInput;n||t.setEditing(!0),o&&o(e,e.target.value)},t.handleFocus=function(e){t.state.editing||t.setEditing(!0)},t.handleBlur=function(e){var n=t.state.editing,o=t.props.onChange;n&&(t.setEditing(!1),o&&o(e,e.target.value))},t.handleKeyDown=function(e){var n=t.props,o=n.onInput,r=n.onChange,a=n.onEnter;return 13===e.keyCode?(t.setEditing(!1),r&&r(e,e.target.value),o&&o(e,e.target.value),a&&a(e,e.target.value),void(t.props.selfClear?e.target.value="":e.target.blur())):27===e.keyCode?(t.setEditing(!1),e.target.value=i(t.props.value),void e.target.blur()):void 0},t}n=e,(t=l).prototype=Object.create(n.prototype),t.prototype.constructor=t,t.__proto__=n;var d=l.prototype;return d.componentDidMount=function(){var e=this.props.value,t=this.inputRef.current;t&&(t.value=i(e),this.props.autofocus&&(t.focus(),t.selectionStart=0,t.selectionEnd=t.value.length))},d.componentDidUpdate=function(e,t){var n=this.state.editing,o=e.value,r=this.props.value,a=this.inputRef.current;a&&!n&&o!==r&&(a.value=i(r))},d.setEditing=function(e){this.setState({editing:e})},d.render=function(){var e=this.props,t=(e.selfClear,e.onInput,e.onChange,e.onEnter,e.value,e.maxLength),n=e.placeholder,i=(e.autofocus,e.disabled),l=e.multiline,d=e.cols,u=void 0===d?32:d,s=e.rows,m=void 0===s?4:s,p=c(e,["selfClear","onInput","onChange","onEnter","value","maxLength","placeholder","autofocus","disabled","multiline","cols","rows"]),f=p.className,h=p.fluid,C=c(p,["className","fluid"]);return(0,o.normalizeProps)((0,o.createComponentVNode)(2,a.Box,Object.assign({className:(0,r.classes)(["Input",h&&"Input--fluid",i&&"Input--disabled",f])},C,{children:[(0,o.createVNode)(1,"div","Input__baseline",".",16),l?(0,o.createVNode)(128,"textarea","Input__textarea",null,1,{placeholder:n,onInput:this.handleInput,onFocus:this.handleFocus,onBlur:this.handleBlur,maxLength:t,cols:u,rows:m,disabled:i},null,this.inputRef):(0,o.createVNode)(64,"input","Input__input",null,1,{placeholder:n,onInput:this.handleInput,onFocus:this.handleFocus,onBlur:this.handleBlur,onKeyDown:this.handleKeyDown,maxLength:t,disabled:i},null,this.inputRef)]})))},l}(o.Component);t.Input=l},function(e,t,n){"use strict";t.__esModule=!0,t.Knob=void 0;var o=n(0),r=n(15),a=n(8),c=n(25),i=n(17),l=n(180),d=n(131);t.Knob=function(e){if(c.IS_IE8)return(0,o.normalizeProps)((0,o.createComponentVNode)(2,d.NumberInput,Object.assign({},e)));var t=e.animated,n=e.format,u=e.maxValue,s=e.minValue,m=e.onChange,p=e.onDrag,f=e.step,h=e.stepPixelSize,C=e.suppressFlicker,N=e.unit,b=e.value,g=e.className,V=e.style,v=e.fillValue,y=e.color,_=e.ranges,x=void 0===_?{}:_,k=e.size,L=e.bipolar,B=(e.children,e.popUpPosition),w=function(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o=0||(r[n]=e[n]);return r}(e,["animated","format","maxValue","minValue","onChange","onDrag","step","stepPixelSize","suppressFlicker","unit","value","className","style","fillValue","color","ranges","size","bipolar","children","popUpPosition"]);return(0,o.normalizeProps)((0,o.createComponentVNode)(2,l.DraggableControl,Object.assign({dragMatrix:[0,-1]},{animated:t,format:n,maxValue:u,minValue:s,onChange:m,onDrag:p,step:f,stepPixelSize:h,suppressFlicker:C,unit:N,value:b},{children:function(e){var t=e.dragging,n=(e.editing,e.value),c=e.displayValue,l=e.displayElement,d=e.inputElement,m=e.handleDragStart,p=(0,r.scale)(null!=v?v:c,s,u),f=(0,r.scale)(c,s,u),h=y||(0,r.keyOfMatchingRange)(null!=v?v:n,x)||"default",C=270*(f-.5);return(0,o.normalizeProps)((0,o.createVNode)(1,"div",(0,a.classes)(["Knob","Knob--color--"+h,L&&"Knob--bipolar",g,(0,i.computeBoxClassName)(w)]),[(0,o.createVNode)(1,"div","Knob__circle",(0,o.createVNode)(1,"div","Knob__cursorBox",(0,o.createVNode)(1,"div","Knob__cursor"),2,{style:{transform:"rotate("+C+"deg)"}}),2),t&&(0,o.createVNode)(1,"div",(0,a.classes)(["Knob__popupValue",B&&"Knob__popupValue--"+B]),l,0),(0,o.createVNode)(32,"svg","Knob__ring Knob__ringTrackPivot",(0,o.createVNode)(32,"circle","Knob__ringTrack",null,1,{cx:"50",cy:"50",r:"50"}),2,{viewBox:"0 0 100 100"}),(0,o.createVNode)(32,"svg","Knob__ring Knob__ringFillPivot",(0,o.createVNode)(32,"circle","Knob__ringFill",null,1,{style:{"stroke-dashoffset":((L?2.75:2)-1.5*p)*Math.PI*50},cx:"50",cy:"50",r:"50"}),2,{viewBox:"0 0 100 100"}),d],0,Object.assign({},(0,i.computeBoxProps)(Object.assign({style:Object.assign({"font-size":k+"rem"},V)},w)),{onMouseDown:m})))}})))}},function(e,t,n){"use strict";t.__esModule=!0,t.LabeledControls=void 0;var o=n(0),r=n(75);function a(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o=0||(r[n]=e[n]);return r}var c=function(e){var t=e.children,n=a(e,["children"]);return(0,o.normalizeProps)((0,o.createComponentVNode)(2,r.Flex,Object.assign({mx:-.5,align:"stretch",justify:"space-between"},n,{children:t})))};t.LabeledControls=c;c.Item=function(e){var t=e.label,n=e.children,c=a(e,["label","children"]);return(0,o.createComponentVNode)(2,r.Flex.Item,{mx:1,children:(0,o.normalizeProps)((0,o.createComponentVNode)(2,r.Flex,Object.assign({minWidth:"52px",height:"100%",direction:"column",align:"center",textAlign:"center",justify:"space-between"},c,{children:[(0,o.createComponentVNode)(2,r.Flex.Item),(0,o.createComponentVNode)(2,r.Flex.Item,{children:n}),(0,o.createComponentVNode)(2,r.Flex.Item,{color:"label",children:t})]})))})}},function(e,t,n){"use strict";t.__esModule=!0,t.NanoMap=void 0;var o=n(0),r=n(2),a=n(1),c=n(77),i=n(181);var l=function(e){return e.stopPropagation&&e.stopPropagation(),e.preventDefault&&e.preventDefault(),e.cancelBubble=!0,e.returnValue=!1,!1},d=function(e){var t,n;function c(t){var n;n=e.call(this,t)||this;window.innerWidth,window.innerHeight;return n.state={offsetX:128,offsetY:48,transform:"none",dragging:!1,originX:null,originY:null,zoom:1},n.handleDragStart=function(e){n.ref=e.target,n.setState({dragging:!1,originX:e.screenX,originY:e.screenY}),document.addEventListener("mousemove",n.handleDragMove),document.addEventListener("mouseup",n.handleDragEnd),l(e)},n.handleDragMove=function(e){n.setState((function(t){var n=Object.assign({},t),o=e.screenX-n.originX,r=e.screenY-n.originY;return t.dragging?(n.offsetX+=o,n.offsetY+=r,n.originX=e.screenX,n.originY=e.screenY):n.dragging=!0,n})),l(e)},n.handleDragEnd=function(e){n.setState({dragging:!1,originX:null,originY:null}),document.removeEventListener("mousemove",n.handleDragMove),document.removeEventListener("mouseup",n.handleDragEnd),l(e)},n.handleZoom=function(e,o){n.setState((function(e){var n=Math.min(Math.max(o,1),8),r=1.5*(n-e.zoom);return e.zoom=n,e.offsetX=e.offsetX-262*r,e.offsetY=e.offsetY-256*r,t.onZoom&&t.onZoom(e.zoom),e}))},n}return n=e,(t=c).prototype=Object.create(n.prototype),t.prototype.constructor=t,t.__proto__=n,c.prototype.render=function(){var e=(0,a.useBackend)(this.context).config,t=this.state,n=t.dragging,c=t.offsetX,i=t.offsetY,l=t.zoom,d=void 0===l?1:l,s=this.props.children,m=510*d+"px",p={width:m,height:m,"margin-top":i+"px","margin-left":c+"px",overflow:"hidden",position:"relative","background-image":"url("+e.map+"_nanomap_z1.png)","background-size":"cover","background-repeat":"no-repeat","text-align":"center",cursor:n?"move":"auto"};return(0,o.createComponentVNode)(2,r.Box,{className:"NanoMap__container",children:[(0,o.createComponentVNode)(2,r.Box,{style:p,textAlign:"center",onMouseDown:this.handleDragStart,children:(0,o.createComponentVNode)(2,r.Box,{children:s})}),(0,o.createComponentVNode)(2,u,{zoom:d,onZoom:this.handleZoom})]})},c}(o.Component);t.NanoMap=d;d.Marker=function(e,t){var n=e.x,a=e.y,c=e.zoom,i=void 0===c?1:c,l=e.icon,d=e.tooltip,u=e.color,s=2*n*i-i-3,m=2*a*i-i-3;return(0,o.createVNode)(1,"div",null,(0,o.createComponentVNode)(2,r.Box,{position:"absolute",className:"NanoMap__marker",lineHeight:"0",bottom:m+"px",left:s+"px",children:[(0,o.createComponentVNode)(2,r.Icon,{name:l,color:u,fontSize:"6px"}),(0,o.createComponentVNode)(2,r.Tooltip,{content:d})]}),2)};var u=function(e,t){return(0,o.createComponentVNode)(2,r.Box,{className:"NanoMap__zoomer",children:(0,o.createComponentVNode)(2,c.LabeledList,{children:(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Zoom",children:(0,o.createComponentVNode)(2,i.Slider,{minValue:"1",maxValue:"8",stepPixelSize:"10",format:function(e){return e+"x"},value:e.zoom,onDrag:function(t,n){return e.onZoom(t,n)}})})})})};d.Zoomer=u},function(e,t,n){"use strict";t.__esModule=!0,t.Modal=void 0;var o=n(0),r=n(8),a=n(17),c=n(177);t.Modal=function(e){var t,n=e.className,i=e.children,l=e.onEnter,d=function(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o=0||(r[n]=e[n]);return r}(e,["className","children","onEnter"]);return l&&(t=function(e){13===e.keyCode&&l(e)}),(0,o.createComponentVNode)(2,c.Dimmer,{onKeyDown:t,children:(0,o.normalizeProps)((0,o.createVNode)(1,"div",(0,r.classes)(["Modal",n,(0,a.computeBoxClassName)(d)]),i,0,Object.assign({},(0,a.computeBoxProps)(d))))})}},function(e,t,n){"use strict";t.__esModule=!0,t.NoticeBox=void 0;var o=n(0),r=n(8),a=n(17);var c=function(e){var t=e.className,n=e.color,c=e.info,i=(e.warning,e.success),l=e.danger,d=function(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o=0||(r[n]=e[n]);return r}(e,["className","color","info","warning","success","danger"]);return(0,o.normalizeProps)((0,o.createComponentVNode)(2,a.Box,Object.assign({className:(0,r.classes)(["NoticeBox",n&&"NoticeBox--color--"+n,c&&"NoticeBox--type--info",i&&"NoticeBox--type--success",l&&"NoticeBox--type--danger",t])},d)))};t.NoticeBox=c,c.defaultHooks=r.pureComponentHooks},function(e,t,n){"use strict";t.__esModule=!0,t.ProgressBarCountdown=t.ProgressBar=void 0;var o=n(0),r=n(15),a=n(8),c=n(17);function i(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o=0||(r[n]=e[n]);return r}var l=function(e){var t=e.className,n=e.value,l=e.minValue,d=void 0===l?0:l,u=e.maxValue,s=void 0===u?1:u,m=e.color,p=e.ranges,f=void 0===p?{}:p,h=e.children,C=i(e,["className","value","minValue","maxValue","color","ranges","children"]),N=(0,r.scale)(n,d,s),b=h!==undefined,g=m||(0,r.keyOfMatchingRange)(n,f)||"default";return(0,o.normalizeProps)((0,o.createVNode)(1,"div",(0,a.classes)(["ProgressBar","ProgressBar--color--"+g,t,(0,c.computeBoxClassName)(C)]),[(0,o.createVNode)(1,"div","ProgressBar__fill ProgressBar__fill--animated",null,1,{style:{width:100*(0,r.clamp01)(N)+"%"}}),(0,o.createVNode)(1,"div","ProgressBar__content",b?h:(0,r.toFixed)(100*N)+"%",0)],4,Object.assign({},(0,c.computeBoxProps)(C))))};t.ProgressBar=l,l.defaultHooks=a.pureComponentHooks;var d=function(e){var t,n;function r(t){var n;return(n=e.call(this,t)||this).timer=null,n.state={value:Math.max(100*t.current,0)},n}n=e,(t=r).prototype=Object.create(n.prototype),t.prototype.constructor=t,t.__proto__=n;var a=r.prototype;return a.tick=function(){var e=Math.max(this.state.value+this.props.rate,0);e<=0&&clearInterval(this.timer),this.setState((function(t){return{value:e}}))},a.componentDidMount=function(){var e=this;this.timer=setInterval((function(){return e.tick()}),this.props.rate)},a.componentWillUnmount=function(){clearInterval(this.timer)},a.render=function(){var e=this.props,t=e.start,n=(e.current,e.end),r=i(e,["start","current","end"]),a=(this.state.value/100-t)/(n-t);return(0,o.normalizeProps)((0,o.createComponentVNode)(2,l,Object.assign({value:a},r)))},r}(o.Component);t.ProgressBarCountdown=d,d.defaultProps={rate:1e3},l.Countdown=d},function(e,t,n){"use strict";t.__esModule=!0,t.Section=void 0;var o=n(0),r=n(8),a=n(17);var c=function(e){var t=e.className,n=e.title,c=e.level,i=void 0===c?1:c,l=e.buttons,d=e.content,u=e.stretchContents,s=e.noTopPadding,m=e.children,p=function(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o=0||(r[n]=e[n]);return r}(e,["className","title","level","buttons","content","stretchContents","noTopPadding","children"]),f=!(0,r.isFalsy)(n)||!(0,r.isFalsy)(l),h=!(0,r.isFalsy)(d)||!(0,r.isFalsy)(m);return(0,o.normalizeProps)((0,o.createComponentVNode)(2,a.Box,Object.assign({className:(0,r.classes)(["Section","Section--level--"+i,e.flexGrow&&"Section--flex",t])},p,{children:[f&&(0,o.createVNode)(1,"div","Section__title",[(0,o.createVNode)(1,"span","Section__titleText",n,0),(0,o.createVNode)(1,"div","Section__buttons",l,0)],4),h&&(0,o.createComponentVNode)(2,a.Box,{className:(0,r.classes)(["Section__content",!!u&&"Section__content--stretchContents",!!s&&"Section__content--noTopPadding"]),children:[d,m]})]})))};t.Section=c,c.defaultHooks=r.pureComponentHooks},function(e,t,n){"use strict";t.__esModule=!0,t.Tabs=void 0;var o=n(0),r=n(8),a=n(17),c=n(129);function i(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o=0||(r[n]=e[n]);return r}var l=function(e){var t=e.className,n=e.vertical,c=e.children,l=i(e,["className","vertical","children"]);return(0,o.normalizeProps)((0,o.createVNode)(1,"div",(0,r.classes)(["Tabs",n?"Tabs--vertical":"Tabs--horizontal",t,(0,a.computeBoxClassName)(l)]),(0,o.createVNode)(1,"div","Tabs__tabBox",c,0),2,Object.assign({},(0,a.computeBoxProps)(l))))};t.Tabs=l;l.Tab=function(e){var t=e.className,n=e.selected,a=e.altSelection,l=i(e,["className","selected","altSelection"]);return(0,o.normalizeProps)((0,o.createComponentVNode)(2,c.Button,Object.assign({className:(0,r.classes)(["Tabs__tab",n&&"Tabs__tab--selected",a&&n&&"Tabs__tab--altSelection",t]),selected:!a&&n,color:"transparent"},l)))}},function(e,t,n){"use strict";t.__esModule=!0,t.TimeDisplay=void 0;t.TimeDisplay=function(e){var t=e.totalSeconds;return function(e){return(!e||e<0)&&(e=0),[Math.floor(e/60).toString(10),(Math.floor(e)%60).toString(10)].map((function(e){return e.length<2?"0"+e:e})).join(":")}(void 0===t?0:t)}},function(e,t,n){var o={"./AICard.js":447,"./AIFixer.js":448,"./APC.js":449,"./ATM.js":450,"./AccountsUplinkTerminal.js":451,"./AiAirlock.js":452,"./AirAlarm.js":453,"./AirlockAccessController.js":454,"./AirlockElectronics.js":455,"./AppearanceChanger.js":456,"./AtmosAlertConsole.js":457,"./AtmosControl.js":458,"./AtmosFilter.js":459,"./AtmosMixer.js":460,"./AtmosPump.js":461,"./Autolathe.js":462,"./BlueSpaceArtilleryControl.js":463,"./BluespaceTap.js":464,"./BodyScanner.js":465,"./BotClean.js":466,"./BotSecurity.js":467,"./BrigCells.js":468,"./BrigTimer.js":469,"./CameraConsole.js":470,"./Canister.js":471,"./CardComputer.js":472,"./CargoConsole.js":473,"./ChemDispenser.js":474,"./ChemHeater.js":478,"./ChemMaster.js":479,"./CloningConsole.js":480,"./CommunicationsComputer.js":481,"./Contractor.js":482,"./ConveyorSwitch.js":483,"./CrewMonitor.js":484,"./Cryo.js":485,"./DNAModifier.js":486,"./DisposalBin.js":487,"./DnaVault.js":488,"./DroneConsole.js":489,"./EFTPOS.js":490,"./ERTManager.js":491,"./Electropack.js":492,"./EvolutionMenu.js":493,"./ExosuitFabricator.js":494,"./ExternalAirlockController.js":495,"./FaxMachine.js":496,"./FloorPainter.js":497,"./GPS.js":498,"./GenericCrewManifest.js":499,"./GhostHudPanel.js":500,"./GravityGen.js":501,"./GuestPass.js":502,"./HandheldChemDispenser.js":503,"./Instrument.js":504,"./KeycardAuth.js":505,"./LaborClaimConsole.js":506,"./LawManager.js":507,"./MechBayConsole.js":508,"./MechaControlConsole.js":509,"./MedicalRecords.js":510,"./MiningVendor.js":511,"./Newscaster.js":512,"./NuclearBomb.js":513,"./OperatingComputer.js":514,"./Orbit.js":515,"./OreRedemption.js":516,"./PAI.js":517,"./PDA.js":530,"./Pacman.js":546,"./PersonalCrafting.js":547,"./PoolController.js":548,"./PortablePump.js":549,"./PortableScrubber.js":550,"./PortableTurret.js":551,"./PowerMonitor.js":188,"./RCD.js":552,"./RPD.js":553,"./Radio.js":554,"./RequestConsole.js":555,"./RndConsole.js":62,"./RobotSelfDiagnosis.js":570,"./RoboticsControlConsole.js":571,"./Safe.js":572,"./SatelliteControl.js":573,"./SecurityRecords.js":574,"./ShuttleConsole.js":575,"./ShuttleManipulator.js":576,"./Sleeper.js":577,"./SlotMachine.js":578,"./Smartfridge.js":579,"./Smes.js":580,"./SolarControl.js":581,"./SpawnersMenu.js":582,"./StationAlertConsole.js":583,"./SuitStorage.js":584,"./SupermatterMonitor.js":585,"./SyndicateComputerSimple.js":586,"./TEG.js":587,"./TachyonArray.js":588,"./Tank.js":589,"./TankDispenser.js":590,"./TcommsCore.js":591,"./TcommsRelay.js":592,"./Teleporter.js":593,"./ThermoMachine.js":594,"./TransferValve.js":595,"./Uplink.js":596,"./Vending.js":597,"./VolumeMixer.js":598,"./Wires.js":599,"./WizardApprenticeContract.js":600};function r(e){var t=a(e);return n(t)}function a(e){if(!n.o(o,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return o[e]}r.keys=function(){return Object.keys(o)},r.resolve=a,e.exports=r,r.id=446},function(e,t,n){"use strict";t.__esModule=!0,t.AICard=void 0;var o=n(0),r=n(1),a=n(2),c=n(4);t.AICard=function(e,t){var n=(0,r.useBackend)(t),i=n.act,l=n.data;if(0===l.has_ai)return(0,o.createComponentVNode)(2,c.Window,{children:(0,o.createComponentVNode)(2,c.Window.Content,{children:(0,o.createComponentVNode)(2,a.Section,{title:"Stored AI",children:(0,o.createComponentVNode)(2,a.Box,{children:(0,o.createVNode)(1,"h3",null,"No AI detected.",16)})})})});var d=null;return d=l.integrity>=75?"green":l.integrity>=25?"yellow":"red",(0,o.createComponentVNode)(2,c.Window,{scrollable:!0,children:(0,o.createComponentVNode)(2,c.Window.Content,{children:[(0,o.createComponentVNode)(2,a.Section,{title:"Stored AI",children:[(0,o.createComponentVNode)(2,a.Box,{bold:!0,display:"inline-block",children:(0,o.createVNode)(1,"h3",null,l.name,0)}),(0,o.createComponentVNode)(2,a.Box,{children:(0,o.createComponentVNode)(2,a.LabeledList,{children:(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Integrity",children:(0,o.createComponentVNode)(2,a.ProgressBar,{color:d,value:l.integrity/100})})})}),(0,o.createComponentVNode)(2,a.Box,{color:"red",children:(0,o.createVNode)(1,"h2",null,1===l.flushing?"Wipe of AI in progress...":"",0)})]}),(0,o.createComponentVNode)(2,a.Section,{title:"Laws",children:!!l.has_laws&&(0,o.createComponentVNode)(2,a.Box,{children:l.laws.map((function(e,t){return(0,o.createComponentVNode)(2,a.Box,{display:"inline-block",children:e},t)}))})||(0,o.createComponentVNode)(2,a.Box,{color:"red",children:(0,o.createVNode)(1,"h3",null,"No laws detected.",16)})}),(0,o.createComponentVNode)(2,a.Section,{title:"Actions",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Wireless Activity",children:(0,o.createComponentVNode)(2,a.Button,{icon:l.wireless?"check":"times",content:l.wireless?"Enabled":"Disabled",color:l.wireless?"green":"red",onClick:function(){return i("wireless")}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Subspace Transceiver",children:(0,o.createComponentVNode)(2,a.Button,{icon:l.radio?"check":"times",content:l.radio?"Enabled":"Disabled",color:l.radio?"green":"red",onClick:function(){return i("radio")}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Wipe",children:(0,o.createComponentVNode)(2,a.Button.Confirm,{icon:"trash-alt",confirmIcon:"trash-alt",disabled:l.flushing||0===l.integrity,confirmColor:"red",content:"Wipe AI",onClick:function(){return i("wipe")}})})]})})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.AIFixer=void 0;var o=n(0),r=n(1),a=n(2),c=n(4);t.AIFixer=function(e,t){var n=(0,r.useBackend)(t),i=n.act,l=n.data;if(null===l.occupant)return(0,o.createComponentVNode)(2,c.Window,{children:(0,o.createComponentVNode)(2,c.Window.Content,{children:(0,o.createComponentVNode)(2,a.Section,{title:"Stored AI",children:(0,o.createComponentVNode)(2,a.Box,{children:(0,o.createVNode)(1,"h3",null,"No artificial intelligence detected.",16)})})})});var d=null;d=2!==l.stat&&null!==l.stat;var u=null;u=l.integrity>=75?"green":l.integrity>=25?"yellow":"red";var s=null;return s=l.integrity>=100,(0,o.createComponentVNode)(2,c.Window,{scrollable:!0,children:(0,o.createComponentVNode)(2,c.Window.Content,{children:[(0,o.createComponentVNode)(2,a.Section,{title:"Stored AI",children:(0,o.createComponentVNode)(2,a.Box,{bold:!0,children:(0,o.createVNode)(1,"h3",null,l.occupant,0)})}),(0,o.createComponentVNode)(2,a.Section,{title:"Information",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Integrity",children:(0,o.createComponentVNode)(2,a.ProgressBar,{color:u,value:l.integrity/100})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Status",color:d?"green":"red",children:d?"Functional":"Non-Functional"})]})}),(0,o.createComponentVNode)(2,a.Section,{title:"Laws",children:!!l.has_laws&&(0,o.createComponentVNode)(2,a.Box,{children:l.laws.map((function(e,t){return(0,o.createComponentVNode)(2,a.Box,{display:"inline-block",children:e},t)}))})||(0,o.createComponentVNode)(2,a.Box,{color:"red",children:(0,o.createVNode)(1,"h3",null,"No laws detected.",16)})}),(0,o.createComponentVNode)(2,a.Section,{title:"Actions",children:[(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Wireless Activity",children:(0,o.createComponentVNode)(2,a.Button,{icon:l.wireless?"times":"check",content:l.wireless?"Disabled":"Enabled",color:l.wireless?"red":"green",onClick:function(){return i("wireless")}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Subspace Transceiver",children:(0,o.createComponentVNode)(2,a.Button,{icon:l.radio?"times":"check",content:l.radio?"Disabled":"Enabled",color:l.radio?"red":"green",onClick:function(){return i("radio")}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Start Repairs",children:(0,o.createComponentVNode)(2,a.Button,{icon:"wrench",disabled:s||l.active,content:s?"Already Repaired":"Repair",onClick:function(){return i("fix")}})})]}),(0,o.createComponentVNode)(2,a.Box,{color:"green",lineHeight:2,children:l.active?"Reconstruction in progress.":""})]})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.APC=void 0;var o=n(0),r=n(1),a=n(2),c=n(4),i=n(183);t.APC=function(e,t){return(0,o.createComponentVNode)(2,c.Window,{children:(0,o.createComponentVNode)(2,c.Window.Content,{children:(0,o.createComponentVNode)(2,u)})})};var l={2:{color:"good",externalPowerText:"External Power",chargingText:"Fully Charged"},1:{color:"average",externalPowerText:"Low External Power",chargingText:"Charging"},0:{color:"bad",externalPowerText:"No External Power",chargingText:"Not Charging"}},d={1:{icon:"terminal",content:"Override Programming",action:"hack"},2:{icon:"caret-square-down",content:"Shunt Core Process",action:"occupy"},3:{icon:"caret-square-left",content:"Return to Main Core",action:"deoccupy"},4:{icon:"caret-square-down",content:"Shunt Core Process",action:"occupy"}},u=function(e,t){var n=(0,r.useBackend)(t),c=n.act,u=n.data,s=u.locked&&!u.siliconUser,m=(u.normallyLocked,l[u.externalPower]||l[0]),p=l[u.chargingStatus]||l[0],f=u.powerChannels||[],h=d[u.malfStatus]||d[0],C=u.powerCellStatus/100;return(0,o.createFragment)([(0,o.createComponentVNode)(2,i.InterfaceLockNoticeBox),(0,o.createComponentVNode)(2,a.Section,{title:"Power Status",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Main Breaker",color:m.color,buttons:(0,o.createComponentVNode)(2,a.Button,{icon:u.isOperating?"power-off":"times",content:u.isOperating?"On":"Off",selected:u.isOperating&&!s,color:u.isOperating?"":"bad",disabled:s,onClick:function(){return c("breaker")}}),children:["[ ",m.externalPowerText," ]"]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Power Cell",children:(0,o.createComponentVNode)(2,a.ProgressBar,{color:"good",value:C})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Charge Mode",color:p.color,buttons:(0,o.createComponentVNode)(2,a.Button,{icon:u.chargeMode?"sync":"times",content:u.chargeMode?"Auto":"Off",selected:u.chargeMode,disabled:s,onClick:function(){return c("charge")}}),children:["[ ",p.chargingText," ]"]})]})}),(0,o.createComponentVNode)(2,a.Section,{title:"Power Channels",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[f.map((function(e){var t=e.topicParams;return(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:e.title,buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Box,{inline:!0,mx:2,color:e.status>=2?"good":"bad",children:e.status>=2?"On":"Off"}),(0,o.createComponentVNode)(2,a.Button,{icon:"sync",content:"Auto",selected:!s&&(1===e.status||3===e.status),disabled:s,onClick:function(){return c("channel",t.auto)}}),(0,o.createComponentVNode)(2,a.Button,{icon:"power-off",content:"On",selected:!s&&2===e.status,disabled:s,onClick:function(){return c("channel",t.on)}}),(0,o.createComponentVNode)(2,a.Button,{icon:"times",content:"Off",selected:!s&&0===e.status,disabled:s,onClick:function(){return c("channel",t.off)}})],4),children:[e.powerLoad," W"]},e.title)})),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Total Load",children:(0,o.createVNode)(1,"b",null,[u.totalLoad,(0,o.createTextVNode)(" W")],0)})]})}),(0,o.createComponentVNode)(2,a.Section,{title:"Misc",buttons:!!u.siliconUser&&(0,o.createFragment)([!!u.malfStatus&&(0,o.createComponentVNode)(2,a.Button,{icon:h.icon,content:h.content,color:"bad",onClick:function(){return c(h.action)}}),(0,o.createComponentVNode)(2,a.Button,{icon:"lightbulb-o",content:"Overload",onClick:function(){return c("overload")}})],0),children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Cover Lock",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:u.coverLocked?"lock":"unlock",content:u.coverLocked?"Engaged":"Disengaged",selected:u.coverLocked,disabled:s,onClick:function(){return c("cover")}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Night Shift Lighting",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:"lightbulb-o",content:u.nightshiftLights?"Enabled":"Disabled",selected:u.nightshiftLights,onClick:function(){return c("toggle_nightshift")}})})]})})],4)}},function(e,t,n){"use strict";t.__esModule=!0,t.ATM=void 0;var o=n(0),r=n(1),a=n(2),c=n(4);t.ATM=function(e,t){var n,p=(0,r.useBackend)(t),f=(p.act,p.data),h=f.view_screen,C=f.authenticated_account,N=f.ticks_left_locked_down,b=f.linked_db;if(N>0)n=(0,o.createComponentVNode)(2,a.Box,{bold:!0,color:"bad",children:[(0,o.createComponentVNode)(2,a.Icon,{name:"exclamation-triangle"}),"Maximum number of pin attempts exceeded! Access to this ATM has been temporarily disabled."]});else if(b)if(C)switch(h){case 1:n=(0,o.createComponentVNode)(2,l);break;case 2:n=(0,o.createComponentVNode)(2,d);break;case 3:n=(0,o.createComponentVNode)(2,m);break;default:n=(0,o.createComponentVNode)(2,u)}else n=(0,o.createComponentVNode)(2,s);else n=(0,o.createComponentVNode)(2,a.Box,{bold:!0,color:"bad",children:[(0,o.createComponentVNode)(2,a.Icon,{name:"exclamation-triangle"}),"Unable to connect to accounts database, please retry and if the issue persists contact Nanotrasen IT support."]});return(0,o.createComponentVNode)(2,c.Window,{resizable:!0,children:(0,o.createComponentVNode)(2,c.Window.Content,{scrollable:!0,children:[(0,o.createComponentVNode)(2,i),(0,o.createComponentVNode)(2,a.Section,{children:n})]})})};var i=function(e,t){var n=(0,r.useBackend)(t),c=n.act,i=n.data,l=i.machine_id,d=i.held_card_name;return(0,o.createComponentVNode)(2,a.Section,{title:"Nanotrasen Automatic Teller Machine",children:[(0,o.createComponentVNode)(2,a.Box,{children:"For all your monetary need!"}),(0,o.createComponentVNode)(2,a.Divider),(0,o.createComponentVNode)(2,a.Box,{children:[(0,o.createComponentVNode)(2,a.Icon,{name:"info-circle"})," This terminal is ",(0,o.createVNode)(1,"i",null,l,0),", report this code when contacting Nanotrasen IT Support."]}),(0,o.createComponentVNode)(2,a.Divider),(0,o.createComponentVNode)(2,a.LabeledList,{children:(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Card",children:(0,o.createComponentVNode)(2,a.Button,{content:d,icon:"eject",onClick:function(){return c("insert_card")}})})})]})},l=function(e,t){var n=(0,r.useBackend)(t),c=n.act,i=n.data.security_level;return(0,o.createComponentVNode)(2,a.Section,{title:"Select a new security level for this account",children:[(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.Divider),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Level",children:(0,o.createComponentVNode)(2,a.Button,{content:"Zero",icon:"unlock",selected:0===i,onClick:function(){return c("change_security_level",{new_security_level:0})}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Description",children:"Either the account number or card is required to access this account. EFTPOS transactions will require a card and ask for a pin, but not verify the pin is correct."}),(0,o.createComponentVNode)(2,a.Divider),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Level",children:(0,o.createComponentVNode)(2,a.Button,{content:"One",icon:"unlock",selected:1===i,onClick:function(){return c("change_security_level",{new_security_level:1})}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Description",children:"An account number and pin must be manually entered to access this account and process transactions."}),(0,o.createComponentVNode)(2,a.Divider),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Level",children:(0,o.createComponentVNode)(2,a.Button,{content:"Two",selected:2===i,icon:"unlock",onClick:function(){return c("change_security_level",{new_security_level:2})}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Description",children:"In addition to account number and pin, a card is required to access this account and process transactions."})]}),(0,o.createComponentVNode)(2,a.Divider),(0,o.createComponentVNode)(2,p)]})},d=function(e,t){var n=(0,r.useBackend)(t),c=n.act,i=n.data,l=(0,r.useLocalState)(t,"targetAccNumber",0),d=l[0],u=l[1],s=(0,r.useLocalState)(t,"fundsAmount",0),m=s[0],f=s[1],h=(0,r.useLocalState)(t,"purpose",0),C=h[0],N=h[1],b=i.money;return(0,o.createComponentVNode)(2,a.Section,{title:"Transfer Fund",children:[(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Account Balance",children:["$",b]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Target account number",children:(0,o.createComponentVNode)(2,a.Input,{placeholder:"6 Digit Number",onInput:function(e,t){return u(t)}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Funds to transfer",children:(0,o.createComponentVNode)(2,a.Input,{onInput:function(e,t){return f(t)}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Transaction Purpose",children:(0,o.createComponentVNode)(2,a.Input,{fluid:!0,onInput:function(e,t){return N(t)}})})]}),(0,o.createComponentVNode)(2,a.Divider),(0,o.createComponentVNode)(2,a.Button,{content:"Transfer",icon:"sign-out-alt",onClick:function(){return c("transfer",{target_acc_number:d,funds_amount:m,purpose:C})}}),(0,o.createComponentVNode)(2,a.Divider),(0,o.createComponentVNode)(2,p)]})},u=function(e,t){var n=(0,r.useBackend)(t),c=n.act,i=n.data,l=(0,r.useLocalState)(t,"fundsAmount",0),d=l[0],u=l[1],s=i.owner_name,m=i.money;return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Section,{title:"Welcome, "+s,buttons:(0,o.createComponentVNode)(2,a.Button,{content:"Logout",icon:"sign-out-alt",onClick:function(){return c("logout")}}),children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Account Balance",children:["$",m]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Withdrawal Amount",children:(0,o.createComponentVNode)(2,a.Input,{onInput:function(e,t){return u(t)}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{children:(0,o.createComponentVNode)(2,a.Button,{content:"Withdraw Fund",icon:"sign-out-alt",onClick:function(){return c("withdrawal",{funds_amount:d})}})})]})}),(0,o.createComponentVNode)(2,a.Section,{title:"Menu",children:[(0,o.createComponentVNode)(2,a.Box,{children:(0,o.createComponentVNode)(2,a.Button,{content:"Change account security level",icon:"lock",onClick:function(){return c("view_screen",{view_screen:1})}})}),(0,o.createComponentVNode)(2,a.Box,{children:(0,o.createComponentVNode)(2,a.Button,{content:"Make transfer",icon:"exchange-alt",onClick:function(){return c("view_screen",{view_screen:2})}})}),(0,o.createComponentVNode)(2,a.Box,{children:(0,o.createComponentVNode)(2,a.Button,{content:"View transaction log",icon:"list",onClick:function(){return c("view_screen",{view_screen:3})}})}),(0,o.createComponentVNode)(2,a.Box,{children:(0,o.createComponentVNode)(2,a.Button,{content:"Print balance statement",icon:"print",onClick:function(){return c("balance_statement")}})})]})],4)},s=function(e,t){var n=(0,r.useBackend)(t),c=n.act,i=n.data,l=(0,r.useLocalState)(t,"accountID",null),d=l[0],u=l[1],s=(0,r.useLocalState)(t,"accountPin",null),m=s[0],p=s[1];i.machine_id,i.held_card_name;return(0,o.createComponentVNode)(2,a.Section,{title:"Insert card or enter ID and pin to login",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Account ID",children:(0,o.createComponentVNode)(2,a.Input,{placeholder:"6 Digit Number",onInput:function(e,t){return u(t)}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Pin",children:(0,o.createComponentVNode)(2,a.Input,{placeholder:"6 Digit Number",onInput:function(e,t){return p(t)}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{children:(0,o.createComponentVNode)(2,a.Button,{content:"Login",icon:"sign-in-alt",onClick:function(){return c("attempt_auth",{account_num:d,account_pin:m})}})})]})})},m=function(e,t){var n=(0,r.useBackend)(t),c=(n.act,n.data.transaction_log);return(0,o.createComponentVNode)(2,a.Section,{title:"Transactions",children:[(0,o.createComponentVNode)(2,a.Table,{children:[(0,o.createComponentVNode)(2,a.Table.Row,{header:!0,children:[(0,o.createComponentVNode)(2,a.Table.Cell,{children:"Timestamp"}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:"Target"}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:"Reason"}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:"Value"}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:"Terminal"})]}),c.map((function(e){return(0,o.createComponentVNode)(2,a.Table.Row,{children:[(0,o.createComponentVNode)(2,a.Table.Cell,{p:"1rem",children:[e.date," ",e.time]}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:e.target_name}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:e.purpose}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:["$",e.amount]}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:e.source_terminal})]},e)}))]}),(0,o.createComponentVNode)(2,a.Divider),(0,o.createComponentVNode)(2,p)]})},p=function(e,t){var n=(0,r.useBackend)(t),c=n.act;n.data;return(0,o.createComponentVNode)(2,a.Button,{content:"Back",icon:"sign-out-alt",onClick:function(){return c("view_screen",{view_screen:0})}})}},function(e,t,n){"use strict";t.__esModule=!0,t.AccountsUplinkTerminal=void 0;var o=n(0),r=n(19),a=n(1),c=n(2),i=n(75),l=n(4),d=n(132),u=n(133);t.AccountsUplinkTerminal=function(e,t){var n,r=(0,a.useBackend)(t),c=(r.act,r.data),i=c.loginState,m=c.currentPage;return i.logged_in?(1===m?n=(0,o.createComponentVNode)(2,s):2===m?n=(0,o.createComponentVNode)(2,f):3===m&&(n=(0,o.createComponentVNode)(2,h)),(0,o.createComponentVNode)(2,l.Window,{resizable:!0,children:(0,o.createComponentVNode)(2,l.Window.Content,{scrollable:!0,children:[(0,o.createComponentVNode)(2,d.LoginInfo),n]})})):(0,o.createComponentVNode)(2,l.Window,{resizable:!0,children:(0,o.createComponentVNode)(2,l.Window.Content,{children:(0,o.createComponentVNode)(2,u.LoginScreen)})})};var s=function(e,t){var n=(0,a.useBackend)(t),i=n.act,l=n.data.accounts,d=(0,a.useLocalState)(t,"searchText",""),u=d[0],s=(d[1],(0,a.useLocalState)(t,"sortId","owner_name")),f=s[0],h=(s[1],(0,a.useLocalState)(t,"sortOrder",!0)),C=h[0];h[1];return(0,o.createComponentVNode)(2,c.Flex,{direction:"column",height:"100%",children:[(0,o.createComponentVNode)(2,p),(0,o.createComponentVNode)(2,c.Flex.Item,{flexGrow:"1",mt:"0.5rem",children:(0,o.createComponentVNode)(2,c.Section,{height:"100%",children:(0,o.createComponentVNode)(2,c.Table,{className:"AccountsUplinkTerminal__list",children:[(0,o.createComponentVNode)(2,c.Table.Row,{bold:!0,children:[(0,o.createComponentVNode)(2,m,{id:"owner_name",children:"Account Holder"}),(0,o.createComponentVNode)(2,m,{id:"account_number",children:"Account Number"}),(0,o.createComponentVNode)(2,m,{id:"suspended",children:"Account Status"})]}),l.filter((0,r.createSearch)(u,(function(e){return e.owner_name+"|"+e.account_number+"|"+e.suspended}))).sort((function(e,t){var n=C?1:-1;return e[f].localeCompare(t[f])*n})).map((function(e){return(0,o.createComponentVNode)(2,c.Table.Row,{onClick:function(){return i("view_account_detail",{index:e.account_index})},children:[(0,o.createComponentVNode)(2,c.Table.Cell,{children:[(0,o.createComponentVNode)(2,c.Icon,{name:"user"})," ",e.owner_name]}),(0,o.createComponentVNode)(2,c.Table.Cell,{children:["#",e.account_number]}),(0,o.createComponentVNode)(2,c.Table.Cell,{children:e.suspended})]},e.id)}))]})})})]})},m=function(e,t){var n=(0,a.useLocalState)(t,"sortId","name"),r=n[0],i=n[1],l=(0,a.useLocalState)(t,"sortOrder",!0),d=l[0],u=l[1],s=e.id,m=e.children;return(0,o.createComponentVNode)(2,c.Table.Cell,{children:(0,o.createComponentVNode)(2,c.Button,{color:r!==s&&"transparent",width:"100%",onClick:function(){r===s?u(!d):(i(s),u(!0))},children:[m,r===s&&(0,o.createComponentVNode)(2,c.Icon,{name:d?"sort-up":"sort-down",ml:"0.25rem;"})]})})},p=function(e,t){var n=(0,a.useBackend)(t),r=n.act,l=n.data.is_printing,d=(0,a.useLocalState)(t,"searchText",""),u=(d[0],d[1]);return(0,o.createComponentVNode)(2,c.Flex,{children:[(0,o.createComponentVNode)(2,i.FlexItem,{children:[(0,o.createComponentVNode)(2,c.Button,{content:"New Account",icon:"plus",onClick:function(){return r("create_new_account")}}),(0,o.createComponentVNode)(2,c.Button,{icon:"print",content:"Print Account List",disabled:l,ml:"0.25rem",onClick:function(){return r("print_records")}})]}),(0,o.createComponentVNode)(2,i.FlexItem,{grow:"1",ml:"0.5rem",children:(0,o.createComponentVNode)(2,c.Input,{placeholder:"Search by account holder, number, status",width:"100%",onInput:function(e,t){return u(t)}})})]})},f=function(e,t){var n=(0,a.useBackend)(t),r=n.act,i=n.data,l=i.is_printing,d=i.account_number,u=i.owner_name,s=i.money,m=i.suspended,p=i.transactions;return(0,o.createFragment)([(0,o.createComponentVNode)(2,c.Section,{title:"#"+d+" / "+u,mt:1,buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,c.Button,{icon:"print",content:"Print Account Details",disabled:l,onClick:function(){return r("print_account_details")}}),(0,o.createComponentVNode)(2,c.Button,{icon:"arrow-left",content:"Back",onClick:function(){return r("back")}})],4),children:(0,o.createComponentVNode)(2,c.LabeledList,{children:[(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Account Number",children:["#",d]}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Account Holder",children:u}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Account Balance",children:s}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Account Status",color:m?"red":"green",children:[m?"Suspended":"Active",(0,o.createComponentVNode)(2,c.Button,{ml:1,content:m?"Unsuspend":"Suspend",icon:m?"unlock":"lock",onClick:function(){return r("toggle_suspension")}})]})]})}),(0,o.createComponentVNode)(2,c.Section,{title:"Transactions",children:(0,o.createComponentVNode)(2,c.Table,{children:[(0,o.createComponentVNode)(2,c.Table.Row,{header:!0,children:[(0,o.createComponentVNode)(2,c.Table.Cell,{children:"Timestamp"}),(0,o.createComponentVNode)(2,c.Table.Cell,{children:"Target"}),(0,o.createComponentVNode)(2,c.Table.Cell,{children:"Reason"}),(0,o.createComponentVNode)(2,c.Table.Cell,{children:"Value"}),(0,o.createComponentVNode)(2,c.Table.Cell,{children:"Terminal"})]}),p.map((function(e){return(0,o.createComponentVNode)(2,c.Table.Row,{children:[(0,o.createComponentVNode)(2,c.Table.Cell,{children:[e.date," ",e.time]}),(0,o.createComponentVNode)(2,c.Table.Cell,{children:e.target_name}),(0,o.createComponentVNode)(2,c.Table.Cell,{children:e.purpose}),(0,o.createComponentVNode)(2,c.Table.Cell,{children:["$",e.amount]}),(0,o.createComponentVNode)(2,c.Table.Cell,{children:e.source_terminal})]},e)}))]})})],4)},h=function(e,t){var n=(0,a.useBackend)(t),r=n.act,i=(n.data,(0,a.useLocalState)(t,"accName","")),l=i[0],d=i[1],u=(0,a.useLocalState)(t,"accDeposit",""),s=u[0],m=u[1];return(0,o.createComponentVNode)(2,c.Section,{title:"Create Account",buttons:(0,o.createComponentVNode)(2,c.Button,{icon:"arrow-left",content:"Back",onClick:function(){return r("back")}}),children:[(0,o.createComponentVNode)(2,c.LabeledList,{children:[(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Account Holder",children:(0,o.createComponentVNode)(2,c.Input,{placeholder:"Name Here",onChange:function(e,t){return d(t)}})}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Initial Deposit",children:(0,o.createComponentVNode)(2,c.Input,{placeholder:"0",onChange:function(e,t){return m(t)}})})]}),(0,o.createComponentVNode)(2,c.Button,{mt:1,fluid:!0,content:"Create Account",onClick:function(){return r("finalise_create_account",{holder_name:l,starting_funds:s})}})]})}},function(e,t,n){"use strict";t.__esModule=!0,t.AiAirlock=void 0;var o=n(0),r=n(1),a=n(2),c=n(4),i={2:{color:"good",localStatusText:"Offline"},1:{color:"average",localStatusText:"Caution"},0:{color:"bad",localStatusText:"Optimal"}};t.AiAirlock=function(e,t){var n=(0,r.useBackend)(t),l=n.act,d=n.data,u=i[d.power.main]||i[0],s=i[d.power.backup]||i[0],m=i[d.shock]||i[0];return(0,o.createComponentVNode)(2,c.Window,{width:500,height:390,children:(0,o.createComponentVNode)(2,c.Window.Content,{children:[(0,o.createComponentVNode)(2,a.Section,{title:"Power Status",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Main",color:u.color,buttons:(0,o.createComponentVNode)(2,a.Button,{icon:"lightbulb-o",disabled:!d.power.main,content:"Disrupt",onClick:function(){return l("disrupt-main")}}),children:[d.power.main?"Online":"Offline"," ",d.wires.main_power?d.power.main_timeleft>0&&"["+d.power.main_timeleft+"s]":"[Wires have been cut!]"]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Backup",color:s.color,buttons:(0,o.createComponentVNode)(2,a.Button,{icon:"lightbulb-o",disabled:!d.power.backup,content:"Disrupt",onClick:function(){return l("disrupt-backup")}}),children:[d.power.backup?"Online":"Offline"," ",d.wires.backup_power?d.power.backup_timeleft>0&&"["+d.power.backup_timeleft+"s]":"[Wires have been cut!]"]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Electrify",color:m.color,buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Button,{icon:"wrench",disabled:!(d.wires.shock&&2!==d.shock),content:"Restore",onClick:function(){return l("shock-restore")}}),(0,o.createComponentVNode)(2,a.Button,{icon:"bolt",disabled:!d.wires.shock,content:"Temporary",onClick:function(){return l("shock-temp")}}),(0,o.createComponentVNode)(2,a.Button,{icon:"bolt",disabled:!d.wires.shock||0===d.shock,content:"Permanent",onClick:function(){return l("shock-perm")}})],4),children:[2===d.shock?"Safe":"Electrified"," ",(d.wires.shock?d.shock_timeleft>0&&"["+d.shock_timeleft+"s]":"[Wires have been cut!]")||-1===d.shock_timeleft&&"[Permanent]"]})]})}),(0,o.createComponentVNode)(2,a.Section,{title:"Access and Door Control",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"ID Scan",color:"bad",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:d.id_scanner?"power-off":"times",content:d.id_scanner?"Enabled":"Disabled",selected:d.id_scanner,disabled:!d.wires.id_scanner,onClick:function(){return l("idscan-toggle")}}),children:!d.wires.id_scanner&&"[Wires have been cut!]"}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Emergency Access",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:d.emergency?"power-off":"times",content:d.emergency?"Enabled":"Disabled",selected:d.emergency,onClick:function(){return l("emergency-toggle")}})}),(0,o.createComponentVNode)(2,a.LabeledList.Divider),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Door Bolts",color:"bad",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:d.locked?"lock":"unlock",content:d.locked?"Lowered":"Raised",selected:d.locked,disabled:!d.wires.bolts,onClick:function(){return l("bolt-toggle")}}),children:!d.wires.bolts&&"[Wires have been cut!]"}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Door Bolt Lights",color:"bad",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:d.lights?"power-off":"times",content:d.lights?"Enabled":"Disabled",selected:d.lights,disabled:!d.wires.lights,onClick:function(){return l("light-toggle")}}),children:!d.wires.lights&&"[Wires have been cut!]"}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Door Force Sensors",color:"bad",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:d.safe?"power-off":"times",content:d.safe?"Enabled":"Disabled",selected:d.safe,disabled:!d.wires.safe,onClick:function(){return l("safe-toggle")}}),children:!d.wires.safe&&"[Wires have been cut!]"}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Door Timing Safety",color:"bad",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:d.speed?"power-off":"times",content:d.speed?"Enabled":"Disabled",selected:d.speed,disabled:!d.wires.timing,onClick:function(){return l("speed-toggle")}}),children:!d.wires.timing&&"[Wires have been cut!]"}),(0,o.createComponentVNode)(2,a.LabeledList.Divider),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Door Control",color:"bad",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:d.opened?"sign-out-alt":"sign-in-alt",content:d.opened?"Open":"Closed",selected:d.opened,disabled:d.locked||d.welded,onClick:function(){return l("open-close")}}),children:!(!d.locked&&!d.welded)&&(0,o.createVNode)(1,"span",null,[(0,o.createTextVNode)("[Door is "),d.locked?"bolted":"",d.locked&&d.welded?" and ":"",d.welded?"welded":"",(0,o.createTextVNode)("!]")],0)})]})})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.AirAlarm=void 0;var o=n(0),r=n(1),a=n(2),c=n(4),i=n(183);t.AirAlarm=function(e,t){var n=(0,r.useBackend)(t),a=(n.act,n.data.locked);return(0,o.createComponentVNode)(2,c.Window,{resizable:!0,children:(0,o.createComponentVNode)(2,c.Window.Content,{scrollable:!0,children:[(0,o.createComponentVNode)(2,d),(0,o.createComponentVNode)(2,i.InterfaceLockNoticeBox),!a&&(0,o.createFragment)([(0,o.createComponentVNode)(2,u),(0,o.createComponentVNode)(2,s)],4)]})})};var l=function(e){return 0===e?"green":1===e?"orange":"red"},d=function(e,t){var n,c=(0,r.useBackend)(t),i=c.act,d=c.data,u=d.air,s=d.mode,m=d.atmos_alarm,p=d.locked,f=d.alarmActivated,h=d.rcon,C=d.target_temp;return n=0===u.danger.overall?0===m?"Optimal":"Caution: Atmos alert in area":1===u.danger.overall?"Caution":"DANGER: Internals Required",(0,o.createComponentVNode)(2,a.Section,{title:"Air Status",children:u?(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Pressure",children:(0,o.createComponentVNode)(2,a.Box,{color:l(u.danger.pressure),children:[(0,o.createComponentVNode)(2,a.AnimatedNumber,{value:u.pressure})," kPa",!p&&(0,o.createFragment)([(0,o.createTextVNode)("\xa0"),(0,o.createComponentVNode)(2,a.Button,{content:3===s?"Deactivate Panic Siphon":"Activate Panic Siphon",selected:3===s,icon:"exclamation-triangle",onClick:function(){return i("mode",{mode:3===s?1:3})}})],4)]})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Oxygen",children:(0,o.createComponentVNode)(2,a.ProgressBar,{value:u.contents.oxygen/100,color:l(u.danger.oxygen)})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Nitrogen",children:(0,o.createComponentVNode)(2,a.ProgressBar,{value:u.contents.nitrogen/100,color:l(u.danger.nitrogen)})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Carbon Dioxide",children:(0,o.createComponentVNode)(2,a.ProgressBar,{value:u.contents.co2/100,color:l(u.danger.co2)})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Toxins",children:(0,o.createComponentVNode)(2,a.ProgressBar,{value:u.contents.plasma/100,color:l(u.danger.plasma)})}),u.contents.other>0&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Other",children:(0,o.createComponentVNode)(2,a.ProgressBar,{value:u.contents.other/100,color:l(u.danger.other)})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Temperature",children:(0,o.createComponentVNode)(2,a.Box,{color:l(u.danger.temperature),children:[(0,o.createComponentVNode)(2,a.AnimatedNumber,{value:u.temperature})," K / ",(0,o.createComponentVNode)(2,a.AnimatedNumber,{value:u.temperature_c})," C\xa0",(0,o.createComponentVNode)(2,a.Button,{icon:"thermometer-full",content:C+" C",onClick:function(){return i("temperature")}}),(0,o.createComponentVNode)(2,a.Button,{content:u.thermostat_state?"On":"Off",selected:u.thermostat_state,icon:"power-off",onClick:function(){return i("thermostat_state")}})]})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Local Status",children:(0,o.createComponentVNode)(2,a.Box,{color:l(u.danger.overall),children:[n,!p&&(0,o.createFragment)([(0,o.createTextVNode)("\xa0"),(0,o.createComponentVNode)(2,a.Button,{content:f?"Reset Alarm":"Activate Alarm",selected:f,onClick:function(){return i(f?"atmos_reset":"atmos_alarm")}})],4)]})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Remote Control Settings",children:[(0,o.createComponentVNode)(2,a.Button,{content:"Off",selected:1===h,onClick:function(){return i("set_rcon",{rcon:1})}}),(0,o.createComponentVNode)(2,a.Button,{content:"Auto",selected:2===h,onClick:function(){return i("set_rcon",{rcon:2})}}),(0,o.createComponentVNode)(2,a.Button,{content:"On",selected:3===h,onClick:function(){return i("set_rcon",{rcon:3})}})]})]}):(0,o.createComponentVNode)(2,a.Box,{children:"Unable to acquire air sample!"})})},u=function(e,t){var n=(0,r.useLocalState)(t,"tabIndex",0),c=n[0],i=n[1];return(0,o.createComponentVNode)(2,a.Tabs,{children:[(0,o.createComponentVNode)(2,a.Tabs.Tab,{selected:0===c,onClick:function(){return i(0)},children:[(0,o.createComponentVNode)(2,a.Icon,{name:"sign-out-alt"})," Vent Control"]},"Vents"),(0,o.createComponentVNode)(2,a.Tabs.Tab,{selected:1===c,onClick:function(){return i(1)},children:[(0,o.createComponentVNode)(2,a.Icon,{name:"sign-in-alt"})," Scrubber Control"]},"Scrubbers"),(0,o.createComponentVNode)(2,a.Tabs.Tab,{selected:2===c,onClick:function(){return i(2)},children:[(0,o.createComponentVNode)(2,a.Icon,{name:"cog"})," Mode"]},"Mode"),(0,o.createComponentVNode)(2,a.Tabs.Tab,{selected:3===c,onClick:function(){return i(3)},children:[(0,o.createComponentVNode)(2,a.Icon,{name:"tachometer-alt"})," Thresholds"]},"Thresholds")]})},s=function(e,t){var n=(0,r.useLocalState)(t,"tabIndex",0),a=n[0];n[1];switch(a){case 0:return(0,o.createComponentVNode)(2,m);case 1:return(0,o.createComponentVNode)(2,p);case 2:return(0,o.createComponentVNode)(2,f);case 3:return(0,o.createComponentVNode)(2,h);default:return"WE SHOULDN'T BE HERE!"}},m=function(e,t){var n=(0,r.useBackend)(t),c=n.act;return n.data.vents.map((function(e){return(0,o.createComponentVNode)(2,a.Section,{title:e.name,children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Status",children:[(0,o.createComponentVNode)(2,a.Button,{content:e.power?"On":"Off",selected:e.power,icon:"power-off",onClick:function(){return c("command",{cmd:"power",val:1===e.power?0:1,id_tag:e.id_tag})}}),(0,o.createComponentVNode)(2,a.Button,{content:"release"===e.direction?"Blowing":"Siphoning",icon:"release"===e.direction?"sign-out-alt":"sign-in-alt",onClick:function(){return c("command",{cmd:"direction",val:"release"===e.direction?0:1,id_tag:e.id_tag})}})]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Pressure Checks",children:[(0,o.createComponentVNode)(2,a.Button,{content:"External",selected:1===e.checks,onClick:function(){return c("command",{cmd:"checks",val:1,id_tag:e.id_tag})}}),(0,o.createComponentVNode)(2,a.Button,{content:"Internal",selected:2===e.checks,onClick:function(){return c("command",{cmd:"checks",val:2,id_tag:e.id_tag})}})]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"External Pressure Target",children:[(0,o.createComponentVNode)(2,a.AnimatedNumber,{value:e.external})," kPa\xa0",(0,o.createComponentVNode)(2,a.Button,{content:"Set",icon:"cog",onClick:function(){return c("command",{cmd:"set_external_pressure",id_tag:e.id_tag})}}),(0,o.createComponentVNode)(2,a.Button,{content:"Reset",icon:"redo-alt",onClick:function(){return c("command",{cmd:"set_external_pressure",val:101.325,id_tag:e.id_tag})}})]})]})},e.name)}))},p=function(e,t){var n=(0,r.useBackend)(t),c=n.act;return n.data.scrubbers.map((function(e){return(0,o.createComponentVNode)(2,a.Section,{title:e.name,children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Status",children:[(0,o.createComponentVNode)(2,a.Button,{content:e.power?"On":"Off",selected:e.power,icon:"power-off",onClick:function(){return c("command",{cmd:"power",val:1===e.power?0:1,id_tag:e.id_tag})}}),(0,o.createComponentVNode)(2,a.Button,{content:0===e.scrubbing?"Siphoning":"Scrubbing",icon:0===e.scrubbing?"sign-in-alt":"filter",onClick:function(){return c("command",{cmd:"scrubbing",val:0===e.scrubbing?1:0,id_tag:e.id_tag})}})]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Range",children:(0,o.createComponentVNode)(2,a.Button,{content:e.widenet?"Extended":"Normal",selected:e.widenet,icon:"expand-arrows-alt",onClick:function(){return c("command",{cmd:"widenet",val:0===e.widenet?1:0,id_tag:e.id_tag})}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Filtering",children:[(0,o.createComponentVNode)(2,a.Button,{content:"Carbon Dioxide",selected:e.filter_co2,onClick:function(){return c("command",{cmd:"co2_scrub",val:0===e.filter_co2?1:0,id_tag:e.id_tag})}}),(0,o.createComponentVNode)(2,a.Button,{content:"Plasma",selected:e.filter_toxins,onClick:function(){return c("command",{cmd:"tox_scrub",val:0===e.filter_toxins?1:0,id_tag:e.id_tag})}}),(0,o.createComponentVNode)(2,a.Button,{content:"Nitrous Oxide",selected:e.filter_n2o,onClick:function(){return c("command",{cmd:"n2o_scrub",val:0===e.filter_n2o?1:0,id_tag:e.id_tag})}}),(0,o.createComponentVNode)(2,a.Button,{content:"Oxygen",selected:e.filter_o2,onClick:function(){return c("command",{cmd:"o2_scrub",val:0===e.filter_o2?1:0,id_tag:e.id_tag})}}),(0,o.createComponentVNode)(2,a.Button,{content:"Nitrogen",selected:e.filter_n2,onClick:function(){return c("command",{cmd:"n2_scrub",val:0===e.filter_n2?1:0,id_tag:e.id_tag})}})]})]})},e.name)}))},f=function(e,t){var n=(0,r.useBackend)(t),c=n.act,i=n.data,l=i.modes,d=i.presets,u=i.emagged,s=i.mode,m=i.preset;return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Section,{title:"System Mode",children:(0,o.createComponentVNode)(2,a.Table,{children:l.map((function(e){return(!e.emagonly||e.emagonly&&!!u)&&(0,o.createComponentVNode)(2,a.Table.Row,{children:[(0,o.createComponentVNode)(2,a.Table.Cell,{textAlign:"right",width:1,children:(0,o.createComponentVNode)(2,a.Button,{content:e.name,icon:"cog",selected:e.id===s,onClick:function(){return c("mode",{mode:e.id})}})}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:e.desc})]},e.name)}))})}),(0,o.createComponentVNode)(2,a.Section,{title:"System Presets",children:[(0,o.createComponentVNode)(2,a.Box,{italic:!0,children:"After making a selection, the system will automatically cycle in order to remove contaminants."}),(0,o.createComponentVNode)(2,a.Table,{mt:1,children:d.map((function(e){return(0,o.createComponentVNode)(2,a.Table.Row,{children:[(0,o.createComponentVNode)(2,a.Table.Cell,{textAlign:"right",width:1,children:(0,o.createComponentVNode)(2,a.Button,{content:e.name,icon:"cog",selected:e.id===m,onClick:function(){return c("preset",{preset:e.id})}})}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:e.desc})]},e.name)}))})]})],4)},h=function(e,t){var n=(0,r.useBackend)(t),c=n.act,i=n.data.thresholds;return(0,o.createComponentVNode)(2,a.Section,{title:"Alarm Thresholds",children:(0,o.createComponentVNode)(2,a.Table,{children:[(0,o.createComponentVNode)(2,a.Table.Row,{header:!0,children:[(0,o.createComponentVNode)(2,a.Table.Cell,{width:"20%",children:"Value"}),(0,o.createComponentVNode)(2,a.Table.Cell,{color:"red",width:"20%",children:"Danger Min"}),(0,o.createComponentVNode)(2,a.Table.Cell,{color:"orange",width:"20%",children:"Warning Min"}),(0,o.createComponentVNode)(2,a.Table.Cell,{color:"orange",width:"20%",children:"Warning Max"}),(0,o.createComponentVNode)(2,a.Table.Cell,{color:"red",width:"20%",children:"Danger Max"})]}),i.map((function(e){return(0,o.createComponentVNode)(2,a.Table.Row,{children:[(0,o.createComponentVNode)(2,a.Table.Cell,{children:e.name}),e.settings.map((function(e){return(0,o.createComponentVNode)(2,a.Table.Cell,{children:(0,o.createComponentVNode)(2,a.Button,{content:-1===e.selected?"Off":e.selected,onClick:function(){return c("command",{cmd:"set_threshold",env:e.env,"var":e.val})}})},e.val)}))]},e.name)}))]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.AirlockAccessController=void 0;var o=n(0),r=n(1),a=n(2),c=n(4);t.AirlockAccessController=function(e,t){var n,i,l=(0,r.useBackend)(t),d=l.act,u=l.data,s=u.exterior_status,m=u.interior_status,p=u.processing;return n="open"===u.exterior_status.state?(0,o.createComponentVNode)(2,a.Button,{content:"Lock Exterior Door",icon:"exclamation-triangle",disabled:p,onClick:function(){return d("force_ext")}}):(0,o.createComponentVNode)(2,a.Button,{content:"Cycle to Exterior",icon:"arrow-circle-left",disabled:p,onClick:function(){return d("cycle_ext_door")}}),i="open"===u.interior_status.state?(0,o.createComponentVNode)(2,a.Button,{content:"Lock Interior Door",icon:"exclamation-triangle",disabled:p,color:"open"===m?"red":p?"yellow":null,onClick:function(){return d("force_int")}}):(0,o.createComponentVNode)(2,a.Button,{content:"Cycle to Interior",icon:"arrow-circle-right",disabled:p,onClick:function(){return d("cycle_int_door")}}),(0,o.createComponentVNode)(2,c.Window,{children:(0,o.createComponentVNode)(2,c.Window.Content,{children:[(0,o.createComponentVNode)(2,a.Section,{title:"Information",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"External Door Status",children:"closed"===s.state?"Locked":"Open"}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Internal Door Status",children:"closed"===m.state?"Locked":"Open"})]})}),(0,o.createComponentVNode)(2,a.Section,{title:"Actions",children:[(0,o.createComponentVNode)(2,a.Box,{children:n}),(0,o.createComponentVNode)(2,a.Box,{children:i})]})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.AirlockElectronics=void 0;var o=n(0),r=n(1),a=n(2),c=n(4),i=n(78);t.AirlockElectronics=function(e,t){return(0,o.createComponentVNode)(2,c.Window,{resizable:!0,children:[(0,o.createComponentVNode)(2,l),(0,o.createComponentVNode)(2,a.Divider),(0,o.createComponentVNode)(2,d)]})};var l=function(e,t){var n=(0,r.useBackend)(t),c=n.act,i=n.data.unrestricted_dir;return(0,o.createComponentVNode)(2,a.Section,{title:"Access Control",children:(0,o.createComponentVNode)(2,a.Flex,{direction:"column",children:[(0,o.createComponentVNode)(2,a.Flex.Item,{bold:!0,mb:1,children:"Unrestricted Access From:"}),(0,o.createComponentVNode)(2,a.Grid,{children:[(0,o.createComponentVNode)(2,a.Grid.Column,{children:(0,o.createComponentVNode)(2,a.Button,{fluid:!0,textAlign:"center",icon:"arrow-down",content:"North",selected:"north"===i?"selected":null,onClick:function(){return c("unrestricted_access",{unres_dir:"North"})}})}),(0,o.createComponentVNode)(2,a.Grid.Column,{children:(0,o.createComponentVNode)(2,a.Button,{fluid:!0,textAlign:"center",icon:"arrow-up",content:"South",selected:"south"===i?"selected":null,onClick:function(){return c("unrestricted_access",{unres_dir:"South"})}})}),(0,o.createComponentVNode)(2,a.Grid.Column,{children:(0,o.createComponentVNode)(2,a.Button,{fluid:!0,textAlign:"center",icon:"arrow-left",content:"East",selected:"east"===i?"selected":null,onClick:function(){return c("unrestricted_access",{unres_dir:"East"})}})}),(0,o.createComponentVNode)(2,a.Grid.Column,{children:(0,o.createComponentVNode)(2,a.Button,{fluid:!0,textAlign:"center",icon:"arrow-right",content:"West",selected:"west"===i?"selected":null,onClick:function(){return c("unrestricted_access",{unres_dir:"West"})}})})]})]})})},d=function(e,t){var n=(0,r.useBackend)(t),c=n.act,l=n.data,d=l.selected_accesses,u=l.one_access,s=l.regions;return(0,o.createComponentVNode)(2,i.AccessList,{usedByRcd:1,rcdButtons:(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Button.Checkbox,{checked:u,content:"One",onClick:function(){return c("set_one_access",{access:"one"})}}),(0,o.createComponentVNode)(2,a.Button.Checkbox,{checked:!u,content:"All",onClick:function(){return c("set_one_access",{access:"all"})}})],4),accesses:s,selectedList:d,accessMod:function(e){return c("set",{access:e})},grantAll:function(){return c("grant_all")},denyAll:function(){return c("clear_all")},grantDep:function(e){return c("grant_region",{region:e})},denyDep:function(e){return c("deny_region",{region:e})}})}},function(e,t,n){"use strict";t.__esModule=!0,t.AppearanceChanger=void 0;var o=n(0),r=n(1),a=n(2),c=n(4);t.AppearanceChanger=function(e,t){var n=(0,r.useBackend)(t),l=n.act,d=n.data,u=d.change_race,s=d.species,m=d.specimen,p=d.change_gender,f=d.gender,h=d.has_gender,C=d.change_eye_color,N=d.change_skin_tone,b=d.change_skin_color,g=d.change_head_accessory_color,V=d.change_hair_color,v=d.change_secondary_hair_color,y=d.change_facial_hair_color,_=d.change_secondary_facial_hair_color,x=d.change_head_marking_color,k=d.change_body_marking_color,L=d.change_tail_marking_color,B=d.change_head_accessory,w=d.head_accessory_styles,S=d.head_accessory_style,I=d.change_hair,T=d.hair_styles,A=d.hair_style,E=d.change_facial_hair,M=d.facial_hair_styles,O=d.facial_hair_style,P=d.change_head_markings,R=d.head_marking_styles,D=d.head_marking_style,F=d.change_body_markings,j=d.body_marking_styles,W=d.body_marking_style,z=d.change_tail_markings,U=d.tail_marking_styles,H=d.tail_marking_style,K=d.change_body_accessory,G=d.body_accessory_styles,Y=d.body_accessory_style,q=d.change_alt_head,$=d.alt_head_styles,X=d.alt_head_style,J=!1;return(C||N||b||g||V||v||y||_||x||k||L)&&(J=!0),(0,o.createComponentVNode)(2,c.Window,{children:(0,o.createComponentVNode)(2,c.Window.Content,{scrollable:!0,children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[!!u&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Species",children:s.map((function(e){return(0,o.createComponentVNode)(2,a.Button,{content:e.specimen,selected:e.specimen===m,onClick:function(){return l("race",{race:e.specimen})}},e.specimen)}))}),!!p&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Gender",children:[(0,o.createComponentVNode)(2,a.Button,{content:"Male",selected:"male"===f,onClick:function(){return l("gender",{gender:"male"})}}),(0,o.createComponentVNode)(2,a.Button,{content:"Female",selected:"female"===f,onClick:function(){return l("gender",{gender:"female"})}}),!h&&(0,o.createComponentVNode)(2,a.Button,{content:"Genderless",selected:"plural"===f,onClick:function(){return l("gender",{gender:"plural"})}})]}),!!J&&(0,o.createComponentVNode)(2,i),!!B&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Head accessory",children:w.map((function(e){return(0,o.createComponentVNode)(2,a.Button,{content:e.headaccessorystyle,selected:e.headaccessorystyle===S,onClick:function(){return l("head_accessory",{head_accessory:e.headaccessorystyle})}},e.headaccessorystyle)}))}),!!I&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Hair",children:T.map((function(e){return(0,o.createComponentVNode)(2,a.Button,{content:e.hairstyle,selected:e.hairstyle===A,onClick:function(){return l("hair",{hair:e.hairstyle})}},e.hairstyle)}))}),!!E&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Facial hair",children:M.map((function(e){return(0,o.createComponentVNode)(2,a.Button,{content:e.facialhairstyle,selected:e.facialhairstyle===O,onClick:function(){return l("facial_hair",{facial_hair:e.facialhairstyle})}},e.facialhairstyle)}))}),!!P&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Head markings",children:R.map((function(e){return(0,o.createComponentVNode)(2,a.Button,{content:e.headmarkingstyle,selected:e.headmarkingstyle===D,onClick:function(){return l("head_marking",{head_marking:e.headmarkingstyle})}},e.headmarkingstyle)}))}),!!F&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Body markings",children:j.map((function(e){return(0,o.createComponentVNode)(2,a.Button,{content:e.bodymarkingstyle,selected:e.bodymarkingstyle===W,onClick:function(){return l("body_marking",{body_marking:e.bodymarkingstyle})}},e.bodymarkingstyle)}))}),!!z&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Tail markings",children:U.map((function(e){return(0,o.createComponentVNode)(2,a.Button,{content:e.tailmarkingstyle,selected:e.tailmarkingstyle===H,onClick:function(){return l("tail_marking",{tail_marking:e.tailmarkingstyle})}},e.tailmarkingstyle)}))}),!!K&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Body accessory",children:G.map((function(e){return(0,o.createComponentVNode)(2,a.Button,{content:e.bodyaccessorystyle,selected:e.bodyaccessorystyle===Y,onClick:function(){return l("body_accessory",{body_accessory:e.bodyaccessorystyle})}},e.bodyaccessorystyle)}))}),!!q&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Alternate head",children:$.map((function(e){return(0,o.createComponentVNode)(2,a.Button,{content:e.altheadstyle,selected:e.altheadstyle===X,onClick:function(){return l("alt_head",{alt_head:e.altheadstyle})}},e.altheadstyle)}))})]})})})};var i=function(e,t){var n=(0,r.useBackend)(t),c=n.act,i=n.data;return(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Colors",children:[{key:"change_eye_color",text:"Change eye color",action:"eye_color"},{key:"change_skin_tone",text:"Change skin tone",action:"skin_tone"},{key:"change_skin_color",text:"Change skin color",action:"skin_color"},{key:"change_head_accessory_color",text:"Change head accessory color",action:"head_accessory_color"},{key:"change_hair_color",text:"Change hair color",action:"hair_color"},{key:"change_secondary_hair_color",text:"Change secondary hair color",action:"secondary_hair_color"},{key:"change_facial_hair_color",text:"Change facial hair color",action:"facial_hair_color"},{key:"change_secondary_facial_hair_color",text:"Change secondary facial hair color",action:"secondary_facial_hair_color"},{key:"change_head_marking_color",text:"Change head marking color",action:"head_marking_color"},{key:"change_body_marking_color",text:"Change body marking color",action:"body_marking_color"},{key:"change_tail_marking_color",text:"Change tail marking color",action:"tail_marking_color"}].map((function(e){return!!i[e.key]&&(0,o.createComponentVNode)(2,a.Button,{content:e.text,onClick:function(){return c(e.action)}})}))})}},function(e,t,n){"use strict";t.__esModule=!0,t.AtmosAlertConsole=void 0;var o=n(0),r=n(1),a=n(2),c=n(4);t.AtmosAlertConsole=function(e,t){var n=(0,r.useBackend)(t),i=n.act,l=n.data,d=l.priority||[],u=l.minor||[];return(0,o.createComponentVNode)(2,c.Window,{resizable:!0,children:(0,o.createComponentVNode)(2,c.Window.Content,{scrollable:!0,children:(0,o.createComponentVNode)(2,a.Section,{title:"Alarms",children:(0,o.createVNode)(1,"ul",null,[0===d.length&&(0,o.createVNode)(1,"li","color-good","No Priority Alerts",16),d.map((function(e){return(0,o.createVNode)(1,"li",null,(0,o.createComponentVNode)(2,a.Button,{icon:"times",content:e,color:"bad",onClick:function(){return i("clear",{zone:e})}}),2,null,e)})),0===u.length&&(0,o.createVNode)(1,"li","color-good","No Minor Alerts",16),u.map((function(e){return(0,o.createVNode)(1,"li",null,(0,o.createComponentVNode)(2,a.Button,{icon:"times",content:e,color:"average",onClick:function(){return i("clear",{zone:e})}}),2,null,e)}))],0)})})})}},function(e,t,n){"use strict";t.__esModule=!0,t.AtmosControl=void 0;var o=n(0),r=n(1),a=n(2),c=n(76),i=n(4);t.AtmosControl=function(e,t){var n=(0,r.useBackend)(t),c=(n.act,n.data,(0,r.useLocalState)(t,"tabIndex",0)),u=c[0],s=c[1];return(0,o.createComponentVNode)(2,i.Window,{resizable:!0,children:(0,o.createComponentVNode)(2,i.Window.Content,{scrollable:0===u,children:(0,o.createComponentVNode)(2,a.Box,{fillPositionedParent:!0,children:[(0,o.createComponentVNode)(2,a.Tabs,{children:[(0,o.createComponentVNode)(2,a.Tabs.Tab,{selected:0===u,onClick:function(){return s(0)},children:[(0,o.createComponentVNode)(2,a.Icon,{name:"table"})," Data View"]},"DataView"),(0,o.createComponentVNode)(2,a.Tabs.Tab,{selected:1===u,onClick:function(){return s(1)},children:[(0,o.createComponentVNode)(2,a.Icon,{name:"map-marked-alt"})," Map View"]},"MapView")]}),function(e){switch(e){case 0:return(0,o.createComponentVNode)(2,l);case 1:return(0,o.createComponentVNode)(2,d);default:return"WE SHOULDN'T BE HERE!"}}(u)]})})})};var l=function(e,t){var n=(0,r.useBackend)(t),i=n.act,l=n.data.alarms;return(0,o.createComponentVNode)(2,a.Box,{children:(0,o.createComponentVNode)(2,a.Table,{m:"0.5rem",children:[(0,o.createComponentVNode)(2,a.Table.Row,{header:!0,children:[(0,o.createComponentVNode)(2,a.Table.Cell,{children:"Name"}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:"Status"}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:"Access"})]}),l.map((function(e){return(0,o.createComponentVNode)(2,a.Table.Row,{children:[(0,o.createComponentVNode)(2,c.TableCell,{children:e.name}),(0,o.createComponentVNode)(2,c.TableCell,{children:(t=e.danger,0===t?(0,o.createComponentVNode)(2,a.Box,{color:"green",children:"Good"}):1===t?(0,o.createComponentVNode)(2,a.Box,{color:"orange",bold:!0,children:"Warning"}):2===t?(0,o.createComponentVNode)(2,a.Box,{color:"red",bold:!0,children:"DANGER"}):void 0)}),(0,o.createComponentVNode)(2,c.TableCell,{children:(0,o.createComponentVNode)(2,a.Button,{icon:"cog",content:"Access",onClick:function(){return i("open_alarm",{aref:e.ref})}})})]},e.name);var t}))]})})},d=function(e,t){var n=(0,r.useBackend)(t).data,c=(0,r.useLocalState)(t,"zoom",1),i=c[0],l=c[1],d=n.alarms;return(0,o.createComponentVNode)(2,a.Box,{height:"526px",mb:"0.5rem",overflow:"hidden",children:(0,o.createComponentVNode)(2,a.NanoMap,{onZoom:function(e){return l(e)},children:d.filter((function(e){return 2===e.z})).map((function(e){return(0,o.createComponentVNode)(2,a.NanoMap.Marker,{x:e.x,y:e.y,zoom:i,icon:"circle",tooltip:e.name,color:(t=e.danger,0===t?"green":1===t?"orange":2===t?"red":void 0)},e.ref);var t}))})})}},function(e,t,n){"use strict";t.__esModule=!0,t.AtmosFilter=void 0;var o=n(0),r=n(1),a=n(2),c=n(4);t.AtmosFilter=function(e,t){var n=(0,r.useBackend)(t),i=n.act,l=n.data,d=l.on,u=l.pressure,s=l.max_pressure,m=l.filter_type,p=l.filter_type_list;return(0,o.createComponentVNode)(2,c.Window,{children:(0,o.createComponentVNode)(2,c.Window.Content,{children:(0,o.createComponentVNode)(2,a.Section,{children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Power",children:(0,o.createComponentVNode)(2,a.Button,{icon:"power-off",content:d?"On":"Off",color:d?null:"red",selected:d,onClick:function(){return i("power")}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Rate",children:[(0,o.createComponentVNode)(2,a.Button,{icon:"fast-backward",textAlign:"center",disabled:0===u,width:2.2,onClick:function(){return i("min_pressure")}}),(0,o.createComponentVNode)(2,a.NumberInput,{animated:!0,unit:"kPa",width:6.1,lineHeight:1.5,step:10,minValue:0,maxValue:s,value:u,onDrag:function(e,t){return i("custom_pressure",{pressure:t})}}),(0,o.createComponentVNode)(2,a.Button,{icon:"fast-forward",textAlign:"center",disabled:u===s,width:2.2,onClick:function(){return i("max_pressure")}})]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Filter",children:p.map((function(e){return(0,o.createComponentVNode)(2,a.Button,{selected:e.gas_type===m,content:e.label,onClick:function(){return i("set_filter",{filter:e.gas_type})}},e.label)}))})]})})})})}},function(e,t,n){"use strict";t.__esModule=!0,t.AtmosMixer=void 0;var o=n(0),r=n(1),a=n(2),c=n(4);t.AtmosMixer=function(e,t){var n=(0,r.useBackend)(t),l=n.act,d=n.data,u=d.on,s=d.pressure,m=d.max_pressure,p=d.node1_concentration,f=d.node2_concentration;return(0,o.createComponentVNode)(2,c.Window,{children:(0,o.createComponentVNode)(2,c.Window.Content,{children:(0,o.createComponentVNode)(2,a.Section,{children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Power",children:(0,o.createComponentVNode)(2,a.Button,{icon:"power-off",content:u?"On":"Off",color:u?null:"red",selected:u,onClick:function(){return l("power")}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Rate",children:[(0,o.createComponentVNode)(2,a.Button,{icon:"fast-backward",textAlign:"center",disabled:0===s,width:2.2,onClick:function(){return l("min_pressure")}}),(0,o.createComponentVNode)(2,a.NumberInput,{animated:!0,unit:"kPa",width:6.1,lineHeight:1.5,step:10,minValue:0,maxValue:m,value:s,onDrag:function(e,t){return l("custom_pressure",{pressure:t})}}),(0,o.createComponentVNode)(2,a.Button,{icon:"fast-forward",textAlign:"center",disabled:s===m,width:2.2,onClick:function(){return l("max_pressure")}})]}),(0,o.createComponentVNode)(2,i,{node_name:"Node 1",node_ref:p}),(0,o.createComponentVNode)(2,i,{node_name:"Node 2",node_ref:f})]})})})})};var i=function(e,t){var n=(0,r.useBackend)(t),c=n.act,i=(n.data,e.node_name),l=e.node_ref;return(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:i,children:[(0,o.createComponentVNode)(2,a.Button,{icon:"fast-backward",textAlign:"center",width:2.2,disabled:0===l,onClick:function(){return c("set_node",{node_name:i,concentration:(l-10)/100})}}),(0,o.createComponentVNode)(2,a.NumberInput,{animated:!0,unit:"%",width:6.1,lineHeight:1.5,stepPixelSize:10,minValue:0,maxValue:100,value:l,onChange:function(e,t){return c("set_node",{node_name:i,concentration:t/100})}}),(0,o.createComponentVNode)(2,a.Button,{icon:"fast-forward",textAlign:"center",width:2.2,disabled:100===l,onClick:function(){return c("set_node",{node_name:i,concentration:(l+10)/100})}})]})}},function(e,t,n){"use strict";t.__esModule=!0,t.AtmosPump=void 0;var o=n(0),r=n(1),a=n(2),c=n(4);t.AtmosPump=function(e,t){var n=(0,r.useBackend)(t),i=n.act,l=n.data,d=l.on,u=l.rate,s=l.max_rate,m=l.gas_unit,p=l.step;return(0,o.createComponentVNode)(2,c.Window,{children:(0,o.createComponentVNode)(2,c.Window.Content,{children:(0,o.createComponentVNode)(2,a.Section,{children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Power",children:(0,o.createComponentVNode)(2,a.Button,{icon:"power-off",content:d?"On":"Off",color:d?null:"red",selected:d,onClick:function(){return i("power")}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Rate",children:[(0,o.createComponentVNode)(2,a.Button,{icon:"fast-backward",textAlign:"center",disabled:0===u,width:2.2,onClick:function(){return i("min_rate")}}),(0,o.createComponentVNode)(2,a.NumberInput,{animated:!0,unit:m,width:6.1,lineHeight:1.5,step:p,minValue:0,maxValue:s,value:u,onDrag:function(e,t){return i("custom_rate",{rate:t})}}),(0,o.createComponentVNode)(2,a.Button,{icon:"fast-forward",textAlign:"center",disabled:u===s,width:2.2,onClick:function(){return i("max_rate")}})]})]})})})})}},function(e,t,n){"use strict";t.__esModule=!0,t.Autolathe=void 0;var o=n(0),r=n(43),a=n(26),c=n(1),i=n(2),l=n(4),d=n(19),u=function(e,t,n,o){return null===e.requirements||!(e.requirements.metal*o>t)&&!(e.requirements.glass*o>n)};t.Autolathe=function(e,t){var n=(0,c.useBackend)(t),s=n.act,m=n.data,p=m.total_amount,f=(m.max_amount,m.metal_amount),h=m.glass_amount,C=m.busyname,N=(m.busyamt,m.showhacked,m.buildQueue),b=m.buildQueueLen,g=m.recipes,V=m.categories,v=(0,c.useSharedState)(t,"category",0),y=v[0],_=v[1];0===y&&(y="Tools");var x=f.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g,"$1,"),k=h.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g,"$1,"),L=p.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g,"$1,"),B=(0,c.useSharedState)(t,"search_text",""),w=B[0],S=B[1],I=(0,d.createSearch)(w,(function(e){return e.name})),T="";b>0&&(T=N.map((function(e,t){return(0,o.createComponentVNode)(2,i.Box,{children:(0,o.createComponentVNode)(2,i.Button,{icon:"times",content:N[t][0],onClick:function(){return s("remove_from_queue",{remove_from_queue:N.indexOf(e)+1})}},e)},t)})));var A=(0,r.flow)([(0,a.filter)((function(e){return(e.category.indexOf(y)>-1||w)&&(m.showhacked||!e.hacked)})),w&&(0,a.filter)(I),(0,a.sortBy)((function(e){return e.name.toLowerCase()}))])(g),E="Build";w?E="Results for: '"+w+"':":y&&(E="Build ("+y+")");return(0,o.createComponentVNode)(2,l.Window,{resizable:!0,children:(0,o.createComponentVNode)(2,l.Window.Content,{scrollable:!0,children:[(0,o.createVNode)(1,"div",null,(0,o.createComponentVNode)(2,i.Section,{title:E,buttons:(0,o.createComponentVNode)(2,i.Dropdown,{width:"190px",options:V,selected:y,onSelected:function(e){return _(e)}}),children:[(0,o.createComponentVNode)(2,i.Input,{fluid:!0,placeholder:"Search for...",onInput:function(e,t){return S(t)},mb:1}),A.map((function(e){return(0,o.createComponentVNode)(2,i.Flex,{justify:"space-between",align:"center",children:[(0,o.createComponentVNode)(2,i.Flex.Item,{children:[(0,o.createVNode)(1,"img",null,null,1,{src:"data:image/jpeg;base64,"+e.image,style:{"vertical-align":"middle",width:"32px",margin:"0px","margin-left":"0px"}}),(0,o.createComponentVNode)(2,i.Button,{icon:"hammer",selected:m.busyname===e.name&&1===m.busyamt,disabled:!u(e,m.metal_amount,m.glass_amount,1),onClick:function(){return s("make",{make:e.uid,multiplier:1})},children:(0,d.toTitleCase)(e.name)}),e.max_multiplier>=10&&(0,o.createComponentVNode)(2,i.Button,{icon:"hammer",selected:m.busyname===e.name&&10===m.busyamt,disabled:!u(e,m.metal_amount,m.glass_amount,10),onClick:function(){return s("make",{make:e.uid,multiplier:10})},children:"10x"}),e.max_multiplier>=25&&(0,o.createComponentVNode)(2,i.Button,{icon:"hammer",selected:m.busyname===e.name&&25===m.busyamt,disabled:!u(e,m.metal_amount,m.glass_amount,25),onClick:function(){return s("make",{make:e.uid,multiplier:25})},children:"25x"}),e.max_multiplier>25&&(0,o.createComponentVNode)(2,i.Button,{icon:"hammer",selected:m.busyname===e.name&&m.busyamt===e.max_multiplier,disabled:!u(e,m.metal_amount,m.glass_amount,e.max_multiplier),onClick:function(){return s("make",{make:e.uid,multiplier:e.max_multiplier})},children:[e.max_multiplier,"x"]})]}),(0,o.createComponentVNode)(2,i.Flex.Item,{children:e.requirements&&Object.keys(e.requirements).map((function(t){return(0,d.toTitleCase)(t)+": "+e.requirements[t]})).join(", ")||(0,o.createComponentVNode)(2,i.Box,{children:"No resources required."})})]},e.ref)}))]}),2,{style:{float:"left",width:"68%"}}),(0,o.createVNode)(1,"div",null,[(0,o.createComponentVNode)(2,i.Section,{title:"Materials",children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Metal",children:x}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Glass",children:k}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Total",children:L}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Storage",children:[m.fill_percent,"% Full"]})]})}),(0,o.createComponentVNode)(2,i.Section,{title:"Building",children:(0,o.createComponentVNode)(2,i.Box,{color:C?"green":"",children:C||"Nothing"})}),(0,o.createComponentVNode)(2,i.Section,{title:"Build Queue",children:[T,(0,o.createVNode)(1,"div",null,(0,o.createComponentVNode)(2,i.Button,{icon:"times",content:"Clear All",disabled:!m.buildQueueLen,onClick:function(){return s("clear_queue")}}),2,{align:"right"})]})],4,{style:{float:"right",width:"30%"}})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.BlueSpaceArtilleryControl=void 0;var o=n(0),r=n(1),a=n(2),c=n(4);t.BlueSpaceArtilleryControl=function(e,t){var n,i=(0,r.useBackend)(t),l=i.act,d=i.data;return n=d.ready?(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Status",color:"green",children:"Ready"}):d.reloadtime_text?(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Reloading In",color:"red",children:d.reloadtime_text}):(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Status",color:"red",children:"No cannon connected!"}),(0,o.createComponentVNode)(2,c.Window,{children:(0,o.createComponentVNode)(2,c.Window.Content,{children:(0,o.createComponentVNode)(2,a.Section,{children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[d.notice&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Alert",color:"red",children:d.notice}),n,(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Target",children:(0,o.createComponentVNode)(2,a.Button,{icon:"crosshairs",content:d.target?d.target:"None",onClick:function(){return l("recalibrate")}})}),1===d.ready&&!!d.target&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Firing",children:(0,o.createComponentVNode)(2,a.Button,{icon:"skull",content:"FIRE!",color:"red",onClick:function(){return l("fire")}})}),!d.connected&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Maintenance",children:(0,o.createComponentVNode)(2,a.Button,{icon:"wrench",content:"Complete Deployment",onClick:function(){return l("build")}})})]})})})})}},function(e,t,n){"use strict";t.__esModule=!0,t.BluespaceTap=void 0;var o=n(0),r=n(1),a=n(2),c=n(4),i=n(95);t.BluespaceTap=function(e,t){var n=(0,r.useBackend)(t),l=n.act,d=n.data,u=d.product||[],s=d.desiredLevel,m=d.inputLevel,p=d.points,f=d.totalPoints,h=d.powerUse,C=d.availablePower,N=d.maxLevel,b=d.emagged,g=d.safeLevels,V=d.nextLevelPower,v=s>m?"bad":"good";return(0,o.createComponentVNode)(2,c.Window,{resizable:!0,children:(0,o.createComponentVNode)(2,c.Window.Content,{scrollable:!0,children:[!!b&&(0,o.createComponentVNode)(2,a.NoticeBox,{danger:1,children:"Safety Protocols disabled"}),!!(m>g)&&(0,o.createComponentVNode)(2,a.NoticeBox,{danger:1,children:"High Power, Instability likely"}),(0,o.createComponentVNode)(2,a.Collapsible,{title:"Input Management",children:(0,o.createComponentVNode)(2,a.Section,{title:"Input",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Input Level",children:m}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Desired Level",children:(0,o.createComponentVNode)(2,a.Flex,{inline:!0,width:"100%",children:[(0,o.createComponentVNode)(2,a.Flex.Item,{children:[(0,o.createComponentVNode)(2,a.Button,{icon:"fast-backward",disabled:0===s,tooltip:"Set to 0",onClick:function(){return l("set",{set_level:0})}}),(0,o.createComponentVNode)(2,a.Button,{icon:"step-backward",tooltip:"Decrease to actual input level",disabled:0===s,onClick:function(){return l("set",{set_level:m})}}),(0,o.createComponentVNode)(2,a.Button,{icon:"backward",disabled:0===s,tooltip:"Decrease one step",onClick:function(){return l("decrease")}})]}),(0,o.createComponentVNode)(2,a.Flex.Item,{grow:1,mx:1,children:(0,o.createComponentVNode)(2,a.Slider,{value:s,fillValue:m,minValue:0,color:v,maxValue:N,stepPixelSize:20,step:1,onChange:function(e,t){return l("set",{set_level:t})}})}),(0,o.createComponentVNode)(2,a.Flex.Item,{children:[(0,o.createComponentVNode)(2,a.Button,{icon:"forward",disabled:s===N,tooltip:"Increase one step",tooltipPosition:"left",onClick:function(){return l("increase")}}),(0,o.createComponentVNode)(2,a.Button,{icon:"fast-forward",disabled:s===N,tooltip:"Set to max",tooltipPosition:"left",onClick:function(){return l("set",{set_level:N})}})]})]})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Current Power Use",children:(0,i.formatPower)(h)}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Power for next level",children:(0,i.formatPower)(V)}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Surplus Power",children:(0,i.formatPower)(C)})]})})}),(0,o.createComponentVNode)(2,a.Section,{title:"Output",children:(0,o.createComponentVNode)(2,a.Flex,{children:[(0,o.createComponentVNode)(2,a.Flex.Item,{children:(0,o.createComponentVNode)(2,a.Box,{children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Available Points",children:p}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Total Points",children:f})]})})}),(0,o.createComponentVNode)(2,a.Flex.Item,{align:"end",children:(0,o.createComponentVNode)(2,a.Box,{children:(0,o.createComponentVNode)(2,a.LabeledList,{children:u.map((function(e){return(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:e.name,children:(0,o.createComponentVNode)(2,a.Button,{disabled:e.price>=p,onClick:function(){return l("vend",{target:e.key})},content:e.price})},e.key)}))})})})]})})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.BodyScanner=void 0;var o=n(0),r=n(15),a=n(1),c=n(2),i=n(4),l=[["good","Alive"],["average","Critical"],["bad","DEAD"]],d=[["hasBorer","bad","Large growth detected in frontal lobe, possibly cancerous. Surgical removal is recommended."],["hasVirus","bad","Viral pathogen detected in blood stream."],["blind","average","Cataracts detected."],["colourblind","average","Photoreceptor abnormalities detected."],["nearsighted","average","Retinal misalignment detected."]],u=[["Respiratory","oxyLoss"],["Brain","brainLoss"],["Toxin","toxLoss"],["Radioactive","radLoss"],["Brute","bruteLoss"],["Genetic","cloneLoss"],["Burn","fireLoss"],["Paralysis","paralysis"]],s={average:[.25,.5],bad:[.5,Infinity]},m=function(e,t){for(var n=[],o=0;o0?e.filter((function(e){return!!e})).reduce((function(e,t){return(0,o.createFragment)([e,(0,o.createComponentVNode)(2,c.Box,{children:t},t)],0)}),null):null},f=function(e){if(e>100){if(e<300)return"mild infection";if(e<400)return"mild infection+";if(e<500)return"mild infection++";if(e<700)return"acute infection";if(e<800)return"acute infection+";if(e<900)return"acute infection++";if(e>=900)return"septic"}return""};t.BodyScanner=function(e,t){var n=(0,a.useBackend)(t).data,r=n.occupied,c=n.occupant,l=void 0===c?{}:c,d=r?(0,o.createComponentVNode)(2,h,{occupant:l}):(0,o.createComponentVNode)(2,y);return(0,o.createComponentVNode)(2,i.Window,{resizable:!0,children:(0,o.createComponentVNode)(2,i.Window.Content,{scrollable:!0,className:"Layout__content--flexColumn",children:d})})};var h=function(e){var t=e.occupant;return(0,o.createComponentVNode)(2,c.Box,{children:[(0,o.createComponentVNode)(2,C,{occupant:t}),(0,o.createComponentVNode)(2,N,{occupant:t}),(0,o.createComponentVNode)(2,b,{occupant:t}),(0,o.createComponentVNode)(2,V,{organs:t.extOrgan}),(0,o.createComponentVNode)(2,v,{organs:t.intOrgan})]})},C=function(e,t){var n=(0,a.useBackend)(t),i=n.act,d=n.data.occupant;return(0,o.createComponentVNode)(2,c.Section,{title:"Occupant",buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,c.Button,{icon:"print",onClick:function(){return i("print_p")},children:"Print Report"}),(0,o.createComponentVNode)(2,c.Button,{icon:"user-slash",onClick:function(){return i("ejectify")},children:"Eject"})],4),children:(0,o.createComponentVNode)(2,c.LabeledList,{children:[(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Name",children:d.name}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Health",children:(0,o.createComponentVNode)(2,c.ProgressBar,{min:"0",max:d.maxHealth,value:d.health/d.maxHealth,ranges:{good:[.5,Infinity],average:[0,.5],bad:[-Infinity,0]}})}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Status",color:l[d.stat][0],children:l[d.stat][1]}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Temperature",children:[(0,o.createComponentVNode)(2,c.AnimatedNumber,{value:(0,r.round)(d.bodyTempC,0)}),"\xb0C,\xa0",(0,o.createComponentVNode)(2,c.AnimatedNumber,{value:(0,r.round)(d.bodyTempF,0)}),"\xb0F"]}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Implants",children:d.implant_len?(0,o.createComponentVNode)(2,c.Box,{children:d.implant.map((function(e){return e.name})).join(", ")}):(0,o.createComponentVNode)(2,c.Box,{color:"label",children:"None"})})]})})},N=function(e){var t=e.occupant;return t.hasBorer||t.blind||t.colourblind||t.nearsighted||t.hasVirus?(0,o.createComponentVNode)(2,c.Section,{title:"Abnormalities",children:d.map((function(e,n){if(t[e[0]])return(0,o.createComponentVNode)(2,c.Box,{color:e[1],bold:"bad"===e[1],children:e[2]})}))}):(0,o.createComponentVNode)(2,c.Section,{title:"Abnormalities",children:(0,o.createComponentVNode)(2,c.Box,{color:"label",children:"No abnormalities found."})})},b=function(e){var t=e.occupant;return(0,o.createComponentVNode)(2,c.Section,{title:"Damage",children:(0,o.createComponentVNode)(2,c.Table,{children:m(u,(function(e,n,r){return(0,o.createFragment)([(0,o.createComponentVNode)(2,c.Table.Row,{color:"label",children:[(0,o.createComponentVNode)(2,c.Table.Cell,{children:[e[0],":"]}),(0,o.createComponentVNode)(2,c.Table.Cell,{children:!!n&&n[0]+":"})]}),(0,o.createComponentVNode)(2,c.Table.Row,{children:[(0,o.createComponentVNode)(2,c.Table.Cell,{children:(0,o.createComponentVNode)(2,g,{value:t[e[1]],marginBottom:r100)&&"average":"bad")||!!e.status.robotic&&"label",width:"33%",children:e.name}),(0,o.createComponentVNode)(2,c.Table.Cell,{textAlign:"center",q:!0,children:(0,o.createComponentVNode)(2,c.ProgressBar,{min:"0",max:e.maxHealth,mt:t>0&&"0.5rem",value:e.totalLoss/100,ranges:s,children:[(0,o.createComponentVNode)(2,c.Box,{float:"left",display:"inline",children:[!!e.bruteLoss&&(0,o.createComponentVNode)(2,c.Box,{display:"inline",position:"relative",children:[(0,o.createComponentVNode)(2,c.Icon,{name:"bone"}),(0,r.round)(e.bruteLoss,0),"\xa0",(0,o.createComponentVNode)(2,c.Tooltip,{position:"top",content:"Brute damage"})]}),!!e.fireLoss&&(0,o.createComponentVNode)(2,c.Box,{display:"inline",position:"relative",children:[(0,o.createComponentVNode)(2,c.Icon,{name:"fire"}),(0,r.round)(e.fireLoss,0),(0,o.createComponentVNode)(2,c.Tooltip,{position:"top",content:"Burn damage"})]})]}),(0,o.createComponentVNode)(2,c.Box,{display:"inline",children:(0,r.round)(e.totalLoss,0)})]})}),(0,o.createComponentVNode)(2,c.Table.Cell,{textAlign:"right",verticalAlign:"top",width:"33%",pt:t>0&&"calc(0.5rem + 2px)",children:[(0,o.createComponentVNode)(2,c.Box,{color:"average",display:"inline",children:p([!!e.internalBleeding&&"Internal bleeding",!!e.lungRuptured&&"Ruptured lung",!!e.status.broken&&e.status.broken,f(e.germ_level),!!e.open&&"Open incision"])}),(0,o.createComponentVNode)(2,c.Box,{display:"inline",children:[p([!!e.status.splinted&&(0,o.createComponentVNode)(2,c.Box,{color:"good",children:"Splinted"}),!!e.status.robotic&&(0,o.createComponentVNode)(2,c.Box,{color:"label",children:"Robotic"}),!!e.status.dead&&(0,o.createComponentVNode)(2,c.Box,{color:"bad",bold:!0,children:"DEAD"})]),p(e.shrapnel.map((function(e){return e.known?e.name:"Unknown object"})))]})]})]},t)}))]})})},v=function(e){return 0===e.organs.length?(0,o.createComponentVNode)(2,c.Section,{title:"Internal Organs",children:(0,o.createComponentVNode)(2,c.Box,{color:"label",children:"N/A"})}):(0,o.createComponentVNode)(2,c.Section,{title:"Internal Organs",children:(0,o.createComponentVNode)(2,c.Table,{children:[(0,o.createComponentVNode)(2,c.Table.Row,{header:!0,children:[(0,o.createComponentVNode)(2,c.Table.Cell,{children:"Name"}),(0,o.createComponentVNode)(2,c.Table.Cell,{textAlign:"center",children:"Damage"}),(0,o.createComponentVNode)(2,c.Table.Cell,{textAlign:"right",children:"Injuries"})]}),e.organs.map((function(e,t){return(0,o.createComponentVNode)(2,c.Table.Row,{textTransform:"capitalize",children:[(0,o.createComponentVNode)(2,c.Table.Cell,{color:(!e.dead?e.germ_level>100&&"average":"bad")||e.robotic>0&&"label",width:"33%",children:e.name}),(0,o.createComponentVNode)(2,c.Table.Cell,{textAlign:"center",children:(0,o.createComponentVNode)(2,c.ProgressBar,{min:"0",max:e.maxHealth,value:e.damage/100,mt:t>0&&"0.5rem",ranges:s,children:(0,r.round)(e.damage,0)})}),(0,o.createComponentVNode)(2,c.Table.Cell,{textAlign:"right",verticalAlign:"top",width:"33%",pt:t>0&&"calc(0.5rem + 2px)",children:[(0,o.createComponentVNode)(2,c.Box,{color:"average",display:"inline",children:p([f(e.germ_level)])}),(0,o.createComponentVNode)(2,c.Box,{display:"inline",children:p([1===e.robotic&&(0,o.createComponentVNode)(2,c.Box,{color:"label",children:"Robotic"}),2===e.robotic&&(0,o.createComponentVNode)(2,c.Box,{color:"label",children:"Assisted"}),!!e.dead&&(0,o.createComponentVNode)(2,c.Box,{color:"bad",bold:!0,children:"DEAD"})])})]})]},t)}))]})})},y=function(){return(0,o.createComponentVNode)(2,c.Section,{textAlign:"center",flexGrow:"1",children:(0,o.createComponentVNode)(2,c.Flex,{height:"100%",children:(0,o.createComponentVNode)(2,c.Flex.Item,{grow:"1",align:"center",color:"label",children:[(0,o.createComponentVNode)(2,c.Icon,{name:"user-slash",mb:"0.5rem",size:"5"}),(0,o.createVNode)(1,"br"),"No occupant detected."]})})})}},function(e,t,n){"use strict";t.__esModule=!0,t.BotClean=void 0;var o=n(0),r=n(1),a=n(2),c=n(4);t.BotClean=function(e,t){var n=(0,r.useBackend)(t),i=n.act,l=n.data,d=l.locked,u=l.noaccess,s=l.maintpanel,m=l.on,p=l.autopatrol,f=l.canhack,h=l.emagged,C=l.remote_disabled,N=l.painame,b=l.cleanblood;return(0,o.createComponentVNode)(2,c.Window,{children:(0,o.createComponentVNode)(2,c.Window.Content,{scrollable:!0,children:[(0,o.createComponentVNode)(2,a.NoticeBox,{children:["Swipe an ID card to ",d?"unlock":"lock"," this interface."]}),(0,o.createComponentVNode)(2,a.Section,{title:"General Settings",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Status",children:(0,o.createComponentVNode)(2,a.Button,{icon:m?"power-off":"times",content:m?"On":"Off",selected:m,disabled:u,onClick:function(){return i("power")}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Patrol",children:(0,o.createComponentVNode)(2,a.Button.Checkbox,{fluid:!0,checked:p,content:"Auto Patrol",disabled:u,onClick:function(){return i("autopatrol")}})}),!!s&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Maintenance Panel",children:(0,o.createComponentVNode)(2,a.Box,{color:"bad",children:"Panel Open!"})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Safety System",children:(0,o.createComponentVNode)(2,a.Box,{color:h?"bad":"good",children:h?"DISABLED!":"Enabled"})}),!!f&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Hacking",children:(0,o.createComponentVNode)(2,a.Button,{icon:"terminal",content:h?"Restore Safties":"Hack",disabled:u,color:"bad",onClick:function(){return i("hack")}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Remote Access",children:(0,o.createComponentVNode)(2,a.Button.Checkbox,{fluid:!0,checked:!C,content:"AI Remote Control",disabled:u,onClick:function(){return i("disableremote")}})})]})}),(0,o.createComponentVNode)(2,a.Section,{title:"Cleaning Settings",children:(0,o.createComponentVNode)(2,a.Button.Checkbox,{fluid:!0,checked:b,content:"Clean Blood",disabled:u,onClick:function(){return i("blood")}})}),N&&(0,o.createComponentVNode)(2,a.Section,{title:"pAI",children:(0,o.createComponentVNode)(2,a.Button,{fluid:!0,icon:"eject",content:N,disabled:u,onClick:function(){return i("ejectpai")}})})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.BotSecurity=void 0;var o=n(0),r=n(1),a=n(2),c=n(4);t.BotSecurity=function(e,t){var n=(0,r.useBackend)(t),i=n.act,l=n.data,d=l.locked,u=l.noaccess,s=l.maintpanel,m=l.on,p=l.autopatrol,f=l.canhack,h=l.emagged,C=l.remote_disabled,N=l.painame,b=l.check_id,g=l.check_weapons,V=l.check_warrant,v=l.arrest_mode,y=l.arrest_declare;return(0,o.createComponentVNode)(2,c.Window,{children:(0,o.createComponentVNode)(2,c.Window.Content,{scrollable:!0,children:[(0,o.createComponentVNode)(2,a.NoticeBox,{children:["Swipe an ID card to ",d?"unlock":"lock"," this interface."]}),(0,o.createComponentVNode)(2,a.Section,{title:"General Settings",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Status",children:(0,o.createComponentVNode)(2,a.Button,{icon:m?"power-off":"times",content:m?"On":"Off",selected:m,disabled:u,onClick:function(){return i("power")}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Patrol",children:(0,o.createComponentVNode)(2,a.Button.Checkbox,{fluid:!0,checked:p,content:"Auto Patrol",disabled:u,onClick:function(){return i("autopatrol")}})}),!!s&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Maintenance Panel",children:(0,o.createComponentVNode)(2,a.Box,{color:"bad",children:"Panel Open!"})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Safety System",children:(0,o.createComponentVNode)(2,a.Box,{color:h?"bad":"good",children:h?"DISABLED!":"Enabled"})}),!!f&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Hacking",children:(0,o.createComponentVNode)(2,a.Button,{icon:"terminal",content:h?"Restore Safties":"Hack",disabled:u,color:"bad",onClick:function(){return i("hack")}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Remote Access",children:(0,o.createComponentVNode)(2,a.Button.Checkbox,{fluid:!0,checked:!C,content:"AI Remote Control",disabled:u,onClick:function(){return i("disableremote")}})})]})}),(0,o.createComponentVNode)(2,a.Section,{title:"Who To Arrest",children:[(0,o.createComponentVNode)(2,a.Button.Checkbox,{fluid:!0,checked:b,content:"Unidentifiable Persons",disabled:u,onClick:function(){return i("authid")}}),(0,o.createComponentVNode)(2,a.Button.Checkbox,{fluid:!0,checked:g,content:"Unauthorized Weapons",disabled:u,onClick:function(){return i("authweapon")}}),(0,o.createComponentVNode)(2,a.Button.Checkbox,{fluid:!0,checked:V,content:"Wanted Criminals",disabled:u,onClick:function(){return i("authwarrant")}})]}),(0,o.createComponentVNode)(2,a.Section,{title:"Arrest Procedure",children:[(0,o.createComponentVNode)(2,a.Button.Checkbox,{fluid:!0,checked:v,content:"Detain Targets Indefinitely",disabled:u,onClick:function(){return i("arrtype")}}),(0,o.createComponentVNode)(2,a.Button.Checkbox,{fluid:!0,checked:y,content:"Announce Arrests On Radio",disabled:u,onClick:function(){return i("arrdeclare")}})]}),N&&(0,o.createComponentVNode)(2,a.Section,{title:"pAI",children:(0,o.createComponentVNode)(2,a.Button,{fluid:!0,icon:"eject",content:N,disabled:u,onClick:function(){return i("ejectpai")}})})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.BrigCells=void 0;var o=n(0),r=n(4),a=n(2),c=n(1),i=function(e,t){var n=e.cell,r=(0,c.useBackend)(t).act,i=n.cell_id,l=n.occupant,d=n.crimes,u=n.brigged_by,s=n.time_left_seconds,m=n.time_set_seconds,p=n.ref,f="";s>0&&(f+=" BrigCells__listRow--active");return(0,o.createComponentVNode)(2,a.Table.Row,{className:f,children:[(0,o.createComponentVNode)(2,a.Table.Cell,{children:i}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:l}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:d}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:u}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:(0,o.createComponentVNode)(2,a.TimeDisplay,{totalSeconds:m})}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:(0,o.createComponentVNode)(2,a.TimeDisplay,{totalSeconds:s})}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:(0,o.createComponentVNode)(2,a.Button,{type:"button",onClick:function(){r("release",{ref:p})},children:"Release"})})]})},l=function(e){var t=e.cells;return(0,o.createComponentVNode)(2,a.Table,{className:"BrigCells__list",children:[(0,o.createComponentVNode)(2,a.Table.Row,{children:[(0,o.createComponentVNode)(2,a.Table.Cell,{header:!0,children:"Cell"}),(0,o.createComponentVNode)(2,a.Table.Cell,{header:!0,children:"Occupant"}),(0,o.createComponentVNode)(2,a.Table.Cell,{header:!0,children:"Crimes"}),(0,o.createComponentVNode)(2,a.Table.Cell,{header:!0,children:"Brigged By"}),(0,o.createComponentVNode)(2,a.Table.Cell,{header:!0,children:"Time Brigged For"}),(0,o.createComponentVNode)(2,a.Table.Cell,{header:!0,children:"Time Left"}),(0,o.createComponentVNode)(2,a.Table.Cell,{header:!0,children:"Release"})]}),t.map((function(e){return(0,o.createComponentVNode)(2,i,{cell:e},e.ref)}))]})};t.BrigCells=function(e,t){var n=(0,c.useBackend)(t),i=(n.act,n.data.cells);return(0,o.createComponentVNode)(2,r.Window,{theme:"security",resizable:!0,children:(0,o.createComponentVNode)(2,r.Window.Content,{scrollable:!0,className:"Layout__content--flexColumn",children:(0,o.createComponentVNode)(2,a.Flex,{direction:"column",height:"100%",children:(0,o.createComponentVNode)(2,a.Section,{height:"100%",flexGrow:"1",children:(0,o.createComponentVNode)(2,l,{cells:i})})})})})}},function(e,t,n){"use strict";t.__esModule=!0,t.BrigTimer=void 0;var o=n(0),r=n(1),a=n(2),c=n(4);t.BrigTimer=function(e,t){var n=(0,r.useBackend)(t),i=n.act,l=n.data;l.nameText=l.occupant,l.timing&&(l.prisoner_hasrec?l.nameText=(0,o.createComponentVNode)(2,a.Box,{color:"green",children:l.occupant}):l.nameText=(0,o.createComponentVNode)(2,a.Box,{color:"red",children:l.occupant}));var d="pencil-alt";l.prisoner_name&&(l.prisoner_hasrec||(d="exclamation-triangle"));var u=[],s=0;for(s=0;se.current_positions&&(0,o.createComponentVNode)(2,a.Box,{color:"green",children:e.total_positions-e.current_positions})||(0,o.createComponentVNode)(2,a.Box,{color:"red",children:"0"})}),(0,o.createComponentVNode)(2,a.Table.Cell,{textAlign:"center",children:(0,o.createComponentVNode)(2,a.Button,{content:"-",disabled:s.cooldown_time||!e.can_close,onClick:function(){return u("make_job_unavailable",{job:e.title})}})}),(0,o.createComponentVNode)(2,a.Table.Cell,{textAlign:"center",children:(0,o.createComponentVNode)(2,a.Button,{content:"+",disabled:s.cooldown_time||!e.can_open,onClick:function(){return u("make_job_available",{job:e.title})}})}),(0,o.createComponentVNode)(2,a.Table.Cell,{textAlign:"center",children:s.target_dept&&(0,o.createComponentVNode)(2,a.Box,{color:"green",children:s.priority_jobs.indexOf(e.title)>-1?"Yes":""})||(0,o.createComponentVNode)(2,a.Button,{content:e.is_priority?"Yes":"No",selected:e.is_priority,disabled:s.cooldown_time||!e.can_prioritize,onClick:function(){return u("prioritize_job",{job:e.title})}})})]},e.title)}))]})})],4):(0,o.createComponentVNode)(2,a.Section,{title:"Warning",color:"red",children:"Not logged in."});break;case 2:n=s.authenticated&&s.scan_name?s.modify_name?(0,o.createComponentVNode)(2,i.AccessList,{accesses:s.regions,selectedList:s.selectedAccess,accessMod:function(e){return u("set",{access:e})},grantAll:function(){return u("grant_all")},denyAll:function(){return u("clear_all")},grantDep:function(e){return u("grant_region",{region:e})},denyDep:function(e){return u("deny_region",{region:e})}}):(0,o.createComponentVNode)(2,a.Section,{title:"Card Missing",color:"red",children:"No card to modify."}):(0,o.createComponentVNode)(2,a.Section,{title:"Warning",color:"red",children:"Not logged in."});break;case 3:n=s.authenticated?s.records.length?(0,o.createComponentVNode)(2,a.Section,{title:"Records",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:"times",content:"Delete All Records",disabled:!s.authenticated||0===s.records.length||s.target_dept,onClick:function(){return u("wipe_all_logs")}}),children:[(0,o.createComponentVNode)(2,a.Table,{children:[(0,o.createComponentVNode)(2,a.Table.Row,{children:[(0,o.createComponentVNode)(2,a.Table.Cell,{bold:!0,children:"Crewman"}),(0,o.createComponentVNode)(2,a.Table.Cell,{bold:!0,children:"Old Rank"}),(0,o.createComponentVNode)(2,a.Table.Cell,{bold:!0,children:"New Rank"}),(0,o.createComponentVNode)(2,a.Table.Cell,{bold:!0,children:"Authorized By"}),(0,o.createComponentVNode)(2,a.Table.Cell,{bold:!0,children:"Time"}),(0,o.createComponentVNode)(2,a.Table.Cell,{bold:!0,children:"Reason"}),!!s.iscentcom&&(0,o.createComponentVNode)(2,a.Table.Cell,{bold:!0,children:"Deleted By"})]}),s.records.map((function(e){return(0,o.createComponentVNode)(2,a.Table.Row,{children:[(0,o.createComponentVNode)(2,a.Table.Cell,{children:e.transferee}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:e.oldvalue}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:e.newvalue}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:e.whodidit}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:e.timestamp}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:e.reason}),!!s.iscentcom&&(0,o.createComponentVNode)(2,a.Table.Cell,{children:e.deletedby})]},e.timestamp)}))]}),!!s.iscentcom&&(0,o.createComponentVNode)(2,a.Box,{children:(0,o.createComponentVNode)(2,a.Button,{icon:"pencil-alt",content:"Delete MY Records",color:"purple",disabled:!s.authenticated||0===s.records.length,onClick:function(){return u("wipe_my_logs")}})})]}):(0,o.createComponentVNode)(2,a.Section,{title:"Records",children:"No records."}):(0,o.createComponentVNode)(2,a.Section,{title:"Warning",color:"red",children:"Not logged in."});break;case 4:n=s.authenticated&&s.scan_name?(0,o.createComponentVNode)(2,a.Section,{title:"Your Team",children:(0,o.createComponentVNode)(2,a.Table,{children:[(0,o.createComponentVNode)(2,a.Table.Row,{children:[(0,o.createComponentVNode)(2,a.Table.Cell,{bold:!0,children:"Name"}),(0,o.createComponentVNode)(2,a.Table.Cell,{bold:!0,children:"Rank"}),(0,o.createComponentVNode)(2,a.Table.Cell,{bold:!0,children:"Sec Status"}),(0,o.createComponentVNode)(2,a.Table.Cell,{bold:!0,children:"Actions"})]}),s.people_dept.map((function(e){return(0,o.createComponentVNode)(2,a.Table.Row,{children:[(0,o.createComponentVNode)(2,a.Table.Cell,{children:e.name}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:e.title}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:e.crimstat}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:(0,o.createComponentVNode)(2,a.Button,{content:e.buttontext,disabled:!e.demotable,onClick:function(){return u("remote_demote",{remote_demote:e.name})}})})]},e.title)}))]})}):(0,o.createComponentVNode)(2,a.Section,{title:"Warning",color:"red",children:"Not logged in."});break;default:n=(0,o.createComponentVNode)(2,a.Section,{title:"Warning",color:"red",children:"ERROR: Unknown Mode."})}return(0,o.createComponentVNode)(2,c.Window,{resizable:!0,children:(0,o.createComponentVNode)(2,c.Window.Content,{scrollable:!0,children:[m,p,n]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.CargoConsole=void 0;var o=n(0),r=n(43),a=n(26),c=n(1),i=n(2),l=n(4),d=(n(77),n(19));t.CargoConsole=function(e,t){return(0,o.createComponentVNode)(2,l.Window,{children:(0,o.createComponentVNode)(2,l.Window.Content,{children:[(0,o.createComponentVNode)(2,u),(0,o.createComponentVNode)(2,s),(0,o.createComponentVNode)(2,m),(0,o.createComponentVNode)(2,p)]})})};var u=function(e,t){var n=(0,c.useLocalState)(t,"contentsModal",null),r=n[0],a=n[1],l=(0,c.useLocalState)(t,"contentsModalTitle",null),d=l[0],u=l[1];return null!==r&&null!==d?(0,o.createComponentVNode)(2,i.Modal,{maxWidth:"75%",width:window.innerWidth+"px",maxHeight:.75*window.innerHeight+"px",mx:"auto",children:[(0,o.createComponentVNode)(2,i.Box,{width:"100%",bold:!0,children:(0,o.createVNode)(1,"h1",null,[d,(0,o.createTextVNode)(" contents:")],0)}),(0,o.createComponentVNode)(2,i.Box,{children:r.map((function(e){return(0,o.createComponentVNode)(2,i.Box,{children:["- ",e]},e)}))}),(0,o.createComponentVNode)(2,i.Box,{m:2,children:(0,o.createComponentVNode)(2,i.Button,{content:"Close",onClick:function(){a(null),u(null)}})})]}):void 0},s=function(e,t){var n,r,a=(0,c.useBackend)(t),l=a.act,d=a.data,u=d.is_public,s=d.points,m=d.timeleft,p=d.moving,f=d.at_station;return p||f?!p&&f?(n="Docked at the station",r="Return Shuttle"):p&&(r="In Transit...",n=1!==m?"Shuttle is en route (ETA: "+m+" minutes)":"Shuttle is en route (ETA: "+m+" minute)"):(n="Docked off-station",r="Call Shuttle"),(0,o.createComponentVNode)(2,i.Section,{title:"Status",children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Points Available",children:s}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Shuttle Status",children:n}),0===u&&(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Controls",children:[(0,o.createComponentVNode)(2,i.Button,{content:r,disabled:p,onClick:function(){return l("moveShuttle")}}),(0,o.createComponentVNode)(2,i.Button,{content:"View Central Command Messages",onClick:function(){return l("showMessages")}})]})]})})},m=function(e,t){var n=(0,c.useBackend)(t),l=n.act,u=n.data,s=u.categories,m=u.supply_packs,p=(0,c.useSharedState)(t,"category","Emergency"),f=p[0],h=p[1],C=(0,c.useSharedState)(t,"search_text",""),N=C[0],b=C[1],g=(0,c.useLocalState)(t,"contentsModal",null),V=(g[0],g[1]),v=(0,c.useLocalState)(t,"contentsModalTitle",null),y=(v[0],v[1]),_=(0,d.createSearch)(N,(function(e){return e.name})),x=(0,r.flow)([(0,a.filter)((function(e){return e.cat===s.filter((function(e){return e.name===f}))[0].category||N})),N&&(0,a.filter)(_),(0,a.sortBy)((function(e){return e.name.toLowerCase()}))])(m),k="Crate Catalogue";return N?k="Results for '"+N+"':":f&&(k="Browsing "+f),(0,o.createComponentVNode)(2,i.Section,{title:k,buttons:(0,o.createComponentVNode)(2,i.Dropdown,{width:"190px",options:s.map((function(e){return e.name})),selected:f,onSelected:function(e){return h(e)}}),children:[(0,o.createComponentVNode)(2,i.Input,{fluid:!0,placeholder:"Search for...",onInput:function(e,t){return b(t)},mb:1}),(0,o.createComponentVNode)(2,i.Box,{maxHeight:25,overflowY:"auto",overflowX:"hidden",children:(0,o.createComponentVNode)(2,i.Table,{m:"0.5rem",children:x.map((function(e){return(0,o.createComponentVNode)(2,i.Table.Row,{children:[(0,o.createComponentVNode)(2,i.Table.Cell,{bold:!0,children:[e.name," (",e.cost," Points)"]}),(0,o.createComponentVNode)(2,i.Table.Cell,{textAlign:"right",pr:1,children:[(0,o.createComponentVNode)(2,i.Button,{content:"Order 1",icon:"shopping-cart",onClick:function(){return l("order",{crate:e.ref,multiple:0})}}),(0,o.createComponentVNode)(2,i.Button,{content:"Order Multiple",icon:"cart-plus",onClick:function(){return l("order",{crate:e.ref,multiple:1})}}),(0,o.createComponentVNode)(2,i.Button,{content:"View Contents",icon:"search",onClick:function(){V(e.contents),y(e.name)}})]})]},e.name)}))})})]})},p=function(e,t){var n=(0,c.useBackend)(t),r=n.act,a=n.data,l=a.requests,d=a.canapprove,u=a.orders;return(0,o.createComponentVNode)(2,i.Section,{title:"Details",children:(0,o.createComponentVNode)(2,i.Box,{maxHeight:15,overflowY:"auto",overflowX:"hidden",children:[(0,o.createComponentVNode)(2,i.Box,{bold:!0,children:"Requests"}),(0,o.createComponentVNode)(2,i.Table,{m:"0.5rem",children:l.map((function(e){return(0,o.createComponentVNode)(2,i.Table.Row,{children:[(0,o.createComponentVNode)(2,i.Table.Cell,{children:[(0,o.createComponentVNode)(2,i.Box,{children:["- #",e.ordernum,": ",e.supply_type," for ",(0,o.createVNode)(1,"b",null,e.orderedby,0)]}),(0,o.createComponentVNode)(2,i.Box,{italic:!0,children:["Reason: ",e.comment]})]}),(0,o.createComponentVNode)(2,i.Table.Cell,{textAlign:"right",pr:1,children:[(0,o.createComponentVNode)(2,i.Button,{content:"Approve",color:"green",disabled:!d,onClick:function(){return r("approve",{ordernum:e.ordernum})}}),(0,o.createComponentVNode)(2,i.Button,{content:"Deny",color:"red",onClick:function(){return r("deny",{ordernum:e.ordernum})}})]})]},e.ordernum)}))}),(0,o.createComponentVNode)(2,i.Box,{bold:!0,children:"Confirmed Orders"}),(0,o.createComponentVNode)(2,i.Table,{m:"0.5rem",children:u.map((function(e){return(0,o.createComponentVNode)(2,i.Table.Row,{children:(0,o.createComponentVNode)(2,i.Table.Cell,{children:[(0,o.createComponentVNode)(2,i.Box,{children:["- #",e.ordernum,": ",e.supply_type," for ",(0,o.createVNode)(1,"b",null,e.orderedby,0)]}),(0,o.createComponentVNode)(2,i.Box,{italic:!0,children:["Reason: ",e.comment]})]})},e.ordernum)}))})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.ChemDispenser=void 0;var o=n(0),r=n(1),a=n(2),c=n(134),i=n(4),l=[1,5,10,20,30,50],d=[1,5,10];t.ChemDispenser=function(e,t){return(0,o.createComponentVNode)(2,i.Window,{resizable:!0,children:(0,o.createComponentVNode)(2,i.Window.Content,{className:"Layout__content--flexColumn",children:[(0,o.createComponentVNode)(2,u),(0,o.createComponentVNode)(2,s),(0,o.createComponentVNode)(2,m)]})})};var u=function(e,t){var n=(0,r.useBackend)(t),c=n.act,i=n.data,d=i.amount,u=i.energy,s=i.maxEnergy;return(0,o.createComponentVNode)(2,a.Section,{title:"Settings",flex:"content",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Energy",children:(0,o.createComponentVNode)(2,a.ProgressBar,{value:u,minValue:0,maxValue:s,ranges:{good:[.5*s,Infinity],average:[.25*s,.5*s],bad:[-Infinity,.25*s]},children:[u," / ",s," Units"]})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Dispense",verticalAlign:"middle",children:(0,o.createComponentVNode)(2,a.Flex,{direction:"row",spacing:"1",children:l.map((function(e,t){return(0,o.createComponentVNode)(2,a.Flex.Item,{grow:"1",width:"14%",display:"inline-block",children:(0,o.createComponentVNode)(2,a.Button,{icon:"cog",selected:d===e,content:e,m:"0",width:"100%",onClick:function(){return c("amount",{amount:e})}})},t)}))})})]})})},s=function(e,t){for(var n=(0,r.useBackend)(t),c=n.act,i=n.data,l=i.chemicals,d=void 0===l?[]:l,u=[],s=0;s<(d.length+1)%3;s++)u.push(!0);return(0,o.createComponentVNode)(2,a.Section,{title:i.glass?"Drink Dispenser":"Chemical Dispenser",flexGrow:"1",children:(0,o.createComponentVNode)(2,a.Flex,{direction:"row",wrap:"wrap",height:"100%",spacingPrecise:"2",align:"flex-start",alignContent:"flex-start",children:[d.map((function(e,t){return(0,o.createComponentVNode)(2,a.Flex.Item,{grow:"1",basis:"25%",height:"20px",width:"30%",display:"inline-block",children:(0,o.createComponentVNode)(2,a.Button,{icon:"arrow-circle-down",overflow:"hidden",textOverflow:"ellipsis",width:"100%",height:"100%",align:"flex-start",content:e.title,onClick:function(){return c("dispense",{reagent:e.id})}})},t)})),u.map((function(e,t){return(0,o.createComponentVNode)(2,a.Flex.Item,{grow:"1",basis:"25%",height:"20px"},t)}))]})})},m=function(e,t){var n=(0,r.useBackend)(t),i=n.act,l=n.data,u=l.isBeakerLoaded,s=l.beakerCurrentVolume,m=l.beakerMaxVolume,p=l.beakerContents,f=void 0===p?[]:p;return(0,o.createComponentVNode)(2,a.Section,{title:l.glass?"Glass":"Beaker",flex:"content",minHeight:"25%",buttons:(0,o.createComponentVNode)(2,a.Box,{children:[!!u&&(0,o.createComponentVNode)(2,a.Box,{inline:!0,color:"label",mr:2,children:[s," / ",m," units"]}),(0,o.createComponentVNode)(2,a.Button,{icon:"eject",content:"Eject",disabled:!u,onClick:function(){return i("ejectBeaker")}})]}),children:(0,o.createComponentVNode)(2,c.BeakerContents,{beakerLoaded:u,beakerContents:f,buttons:function(e){return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Button,{content:"Isolate",icon:"compress-arrows-alt",onClick:function(){return i("remove",{reagent:e.id,amount:-1})}}),d.map((function(t,n){return(0,o.createComponentVNode)(2,a.Button,{content:t,onClick:function(){return i("remove",{reagent:e.id,amount:t})}},n)})),(0,o.createComponentVNode)(2,a.Button,{content:"ALL",onClick:function(){return i("remove",{reagent:e.id,amount:e.volume})}})],0)}})})}},function(e,t,n){"use strict";e.exports=n(476)()},function(e,t,n){"use strict";var o=n(477);function r(){}function a(){}a.resetWarningCache=r,e.exports=function(){function e(e,t,n,r,a,c){if(c!==o){var i=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw i.name="Invariant Violation",i}}function t(){return e}e.isRequired=e;var n={array:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:a,resetWarningCache:r};return n.PropTypes=n,n}},function(e,t,n){"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},function(e,t,n){"use strict";t.__esModule=!0,t.ChemHeater=void 0;var o=n(0),r=n(15),a=n(1),c=n(2),i=n(134),l=n(4);t.ChemHeater=function(e,t){return(0,o.createComponentVNode)(2,l.Window,{resizable:!0,children:(0,o.createComponentVNode)(2,l.Window.Content,{className:"Layout__content--flexColumn",children:[(0,o.createComponentVNode)(2,d),(0,o.createComponentVNode)(2,u)]})})};var d=function(e,t){var n=(0,a.useBackend)(t),i=n.act,l=n.data,d=l.targetTemp,u=l.targetTempReached,s=l.autoEject,m=l.isActive,p=l.currentTemp,f=l.isBeakerLoaded;return(0,o.createComponentVNode)(2,c.Section,{title:"Settings",flexBasis:"content",buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,c.Button,{content:"Auto-eject",icon:s?"toggle-on":"toggle-off",selected:s,onClick:function(){return i("toggle_autoeject")}}),(0,o.createComponentVNode)(2,c.Button,{content:m?"On":"Off",icon:"power-off",selected:m,disabled:!f,onClick:function(){return i("toggle_on")}})],4),children:(0,o.createComponentVNode)(2,c.LabeledList,{children:[(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Target",children:(0,o.createComponentVNode)(2,c.NumberInput,{width:"65px",unit:"K",step:10,stepPixelSize:3,value:(0,r.round)(d,0),minValue:0,maxValue:1e3,onDrag:function(e,t){return i("adjust_temperature",{target:t})}})}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Reading",color:u?"good":"average",children:f&&(0,o.createComponentVNode)(2,c.AnimatedNumber,{value:p,format:function(e){return(0,r.toFixed)(e)+" K"}})||"\u2014"})]})})},u=function(e,t){var n=(0,a.useBackend)(t),r=n.act,l=n.data,d=l.isBeakerLoaded,u=l.beakerCurrentVolume,s=l.beakerMaxVolume,m=l.beakerContents;return(0,o.createComponentVNode)(2,c.Section,{title:"Beaker",flexGrow:"1",buttons:!!d&&(0,o.createComponentVNode)(2,c.Box,{children:[(0,o.createComponentVNode)(2,c.Box,{inline:!0,color:"label",mr:2,children:[u," / ",s," units"]}),(0,o.createComponentVNode)(2,c.Button,{icon:"eject",content:"Eject",onClick:function(){return r("eject_beaker")}})]}),children:(0,o.createComponentVNode)(2,i.BeakerContents,{beakerLoaded:d,beakerContents:m})})}},function(e,t,n){"use strict";t.__esModule=!0,t.ChemMaster=void 0;var o=n(0),r=n(1),a=n(2),c=n(4),i=n(134),l=n(49),d=[1,5,10],u=["bottle.png","small_bottle.png","wide_bottle.png","round_bottle.png","reagent_bottle.png"];t.ChemMaster=function(e,t){var n=(0,r.useBackend)(t).data,a=n.condi,i=n.beaker,d=n.beaker_reagents,u=void 0===d?[]:d,f=n.buffer_reagents,h=void 0===f?[]:f,N=n.mode;return(0,o.createComponentVNode)(2,c.Window,{resizable:!0,children:[(0,o.createComponentVNode)(2,l.ComplexModal),(0,o.createComponentVNode)(2,c.Window.Content,{scrollable:!0,className:"Layout__content--flexColumn",children:[(0,o.createComponentVNode)(2,s,{beaker:i,beakerReagents:u,bufferNonEmpty:h.length>0}),(0,o.createComponentVNode)(2,m,{mode:N,bufferReagents:h}),(0,o.createComponentVNode)(2,p,{isCondiment:a,bufferNonEmpty:h.length>0}),(0,o.createComponentVNode)(2,C)]})]})};var s=function(e,t){var n=(0,r.useBackend)(t).act,c=e.beaker,u=e.beakerReagents,s=e.bufferNonEmpty;return(0,o.createComponentVNode)(2,a.Section,{title:"Beaker",flexGrow:"0",flexBasis:"300px",buttons:s?(0,o.createComponentVNode)(2,a.Button.Confirm,{icon:"eject",disabled:!c,content:"Eject and Clear Buffer",onClick:function(){return n("eject")}}):(0,o.createComponentVNode)(2,a.Button,{icon:"eject",disabled:!c,content:"Eject and Clear Buffer",onClick:function(){return n("eject")}}),children:c?(0,o.createComponentVNode)(2,i.BeakerContents,{beakerLoaded:!0,beakerContents:u,buttons:function(e,r){return(0,o.createComponentVNode)(2,a.Box,{mb:r0?(0,o.createComponentVNode)(2,i.BeakerContents,{beakerLoaded:!0,beakerContents:s,buttons:function(e,r){return(0,o.createComponentVNode)(2,a.Box,{mb:r0?l.desc:"N/A"}),l.blood_type&&(0,o.createFragment)([(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Blood type",children:l.blood_type}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Blood DNA",className:"LabeledList__breakContents",children:l.blood_dna})],4),!i.condi&&(0,o.createComponentVNode)(2,a.Button,{icon:i.printing?"spinner":"print",disabled:i.printing,iconSpin:!!i.printing,ml:"0.5rem",content:"Print",onClick:function(){return c("print",{idx:l.idx,beaker:e.args.beaker})}})]})})})}))},function(e,t,n){"use strict";t.__esModule=!0,t.CloningConsole=void 0;var o=n(0),r=n(15),a=n(1),c=n(2),i=n(39),l=n(49),d=n(4),u=function(e,t){var n=(0,a.useBackend)(t),r=n.act,l=n.data,d=e.args,u=d.activerecord,s=d.realname,m=d.health,p=d.unidentity,f=d.strucenzymes,h=m.split(" - ");return(0,o.createComponentVNode)(2,c.Section,{level:2,m:"-1rem",pb:"1rem",title:"Records of "+s,children:(0,o.createComponentVNode)(2,c.LabeledList,{children:[(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Name",children:s}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Damage",children:h.length>1?(0,o.createFragment)([(0,o.createComponentVNode)(2,c.Box,{color:i.COLORS.damageType.oxy,display:"inline",children:h[0]}),(0,o.createTextVNode)("\xa0|\xa0"),(0,o.createComponentVNode)(2,c.Box,{color:i.COLORS.damageType.toxin,display:"inline",children:h[2]}),(0,o.createTextVNode)("\xa0|\xa0"),(0,o.createComponentVNode)(2,c.Box,{color:i.COLORS.damageType.brute,display:"inline",children:h[3]}),(0,o.createTextVNode)("\xa0|\xa0"),(0,o.createComponentVNode)(2,c.Box,{color:i.COLORS.damageType.burn,display:"inline",children:h[1]})],4):(0,o.createComponentVNode)(2,c.Box,{color:"bad",children:"Unknown"})}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"UI",className:"LabeledList__breakContents",children:p}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"SE",className:"LabeledList__breakContents",children:f}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Disk",children:[(0,o.createComponentVNode)(2,c.Button.Confirm,{disabled:!l.disk,icon:"arrow-circle-down",content:"Import",onClick:function(){return r("disk",{option:"load"})}}),(0,o.createComponentVNode)(2,c.Button,{disabled:!l.disk,icon:"arrow-circle-up",content:"Export UI",onClick:function(){return r("disk",{option:"save",savetype:"ui"})}}),(0,o.createComponentVNode)(2,c.Button,{disabled:!l.disk,icon:"arrow-circle-up",content:"Export UI and UE",onClick:function(){return r("disk",{option:"save",savetype:"ue"})}}),(0,o.createComponentVNode)(2,c.Button,{disabled:!l.disk,icon:"arrow-circle-up",content:"Export SE",onClick:function(){return r("disk",{option:"save",savetype:"se"})}})]}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Actions",children:[(0,o.createComponentVNode)(2,c.Button,{disabled:!l.podready,icon:"user-plus",content:"Clone",onClick:function(){return r("clone",{ref:u})}}),(0,o.createComponentVNode)(2,c.Button,{icon:"trash",content:"Delete",onClick:function(){return r("del_rec")}})]})]})})};t.CloningConsole=function(e,t){var n=(0,a.useBackend)(t);n.act,n.data.menu;return(0,l.modalRegisterBodyOverride)("view_rec",u),(0,o.createComponentVNode)(2,d.Window,{resizable:!0,children:[(0,o.createComponentVNode)(2,l.ComplexModal,{maxWidth:"75%",maxHeight:"75%"}),(0,o.createComponentVNode)(2,d.Window.Content,{className:"Layout__content--flexColumn",children:[(0,o.createComponentVNode)(2,h),(0,o.createComponentVNode)(2,C),(0,o.createComponentVNode)(2,s),(0,o.createComponentVNode)(2,c.Section,{noTopPadding:!0,flexGrow:"1",children:(0,o.createComponentVNode)(2,m)})]})]})};var s=function(e,t){var n=(0,a.useBackend)(t),r=n.act,i=n.data.menu;return(0,o.createComponentVNode)(2,c.Tabs,{children:[(0,o.createComponentVNode)(2,c.Tabs.Tab,{selected:1===i,icon:"home",onClick:function(){return r("menu",{num:1})},children:"Main"}),(0,o.createComponentVNode)(2,c.Tabs.Tab,{selected:2===i,icon:"folder",onClick:function(){return r("menu",{num:2})},children:"Records"})]})},m=function(e,t){var n,r=(0,a.useBackend)(t).data.menu;return 1===r?n=(0,o.createComponentVNode)(2,p):2===r&&(n=(0,o.createComponentVNode)(2,f)),n},p=function(e,t){var n=(0,a.useBackend)(t),i=n.act,l=n.data,d=l.loading,u=l.scantemp,s=l.occupant,m=l.locked,p=l.can_brainscan,f=l.scan_mode,h=l.numberofpods,C=l.pods,N=l.selected_pod,b=m&&!!s;return(0,o.createFragment)([(0,o.createComponentVNode)(2,c.Section,{title:"Scanner",level:"2",buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,c.Box,{display:"inline",color:"label",children:"Scanner Lock:\xa0"}),(0,o.createComponentVNode)(2,c.Button,{disabled:!s,selected:b,icon:b?"toggle-on":"toggle-off",content:b?"Engaged":"Disengaged",onClick:function(){return i("lock")}}),(0,o.createComponentVNode)(2,c.Button,{disabled:b||!s,icon:"user-slash",content:"Eject Occupant",onClick:function(){return i("eject")}})],4),children:[(0,o.createComponentVNode)(2,c.LabeledList,{children:[(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Status",children:d?(0,o.createComponentVNode)(2,c.Box,{color:"average",children:[(0,o.createComponentVNode)(2,c.Icon,{name:"spinner",spin:!0}),"\xa0 Scanning..."]}):(0,o.createComponentVNode)(2,c.Box,{color:u.color,children:u.text})}),!!p&&(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Scan Mode",children:(0,o.createComponentVNode)(2,c.Button,{icon:f?"brain":"male",content:f?"Brain":"Body",onClick:function(){return i("toggle_mode")}})})]}),(0,o.createComponentVNode)(2,c.Button,{disabled:!s||d,icon:"user",content:"Scan Occupant",mt:"0.5rem",mb:"0",onClick:function(){return i("scan")}})]}),(0,o.createComponentVNode)(2,c.Section,{title:"Pods",level:"2",children:h?C.map((function(e,t){var n;return n="cloning"===e.status?(0,o.createComponentVNode)(2,c.ProgressBar,{min:"0",max:"100",value:e.progress/100,ranges:{good:[.75,Infinity],average:[.25,.75],bad:[-Infinity,.25]},mt:"0.5rem",children:(0,o.createComponentVNode)(2,c.Box,{textAlign:"center",children:(0,r.round)(e.progress,0)+"%"})}):"mess"===e.status?(0,o.createComponentVNode)(2,c.Box,{bold:!0,color:"bad",mt:"0.5rem",children:"ERROR"}):(0,o.createComponentVNode)(2,c.Button,{selected:N===e.pod,icon:N===e.pod&&"check",content:"Select",mt:"0.5rem",onClick:function(){return i("selectpod",{ref:e.pod})}}),(0,o.createComponentVNode)(2,c.Box,{width:"64px",textAlign:"center",display:"inline-block",mr:"0.5rem",children:[(0,o.createVNode)(1,"img",null,null,1,{src:"pod_"+e.status+".gif",style:{width:"100%","-ms-interpolation-mode":"nearest-neighbor"}}),(0,o.createComponentVNode)(2,c.Box,{color:"label",children:["Pod #",t+1]}),(0,o.createComponentVNode)(2,c.Box,{bold:!0,color:e.biomass>=150?"good":"bad",display:"inline",children:[(0,o.createComponentVNode)(2,c.Icon,{name:e.biomass>=150?"circle":"circle-o"}),"\xa0",e.biomass]}),n]},t)})):(0,o.createComponentVNode)(2,c.Box,{color:"bad",children:"No pods detected. Unable to clone."})})],4)},f=function(e,t){var n=(0,a.useBackend)(t),r=n.act,i=n.data.records;return i.length?(0,o.createComponentVNode)(2,c.Box,{mt:"0.5rem",children:i.map((function(e,t){return(0,o.createComponentVNode)(2,c.Button,{icon:"user",mb:"0.5rem",content:e.realname,onClick:function(){return r("view_rec",{ref:e.record})}},t)}))}):(0,o.createComponentVNode)(2,c.Flex,{height:"100%",children:(0,o.createComponentVNode)(2,c.Flex.Item,{grow:"1",align:"center",textAlign:"center",color:"label",children:[(0,o.createComponentVNode)(2,c.Icon,{name:"user-slash",mb:"0.5rem",size:"5"}),(0,o.createVNode)(1,"br"),"No records found."]})})},h=function(e,t){var n,r=(0,a.useBackend)(t),i=r.act,l=r.data.temp;if(l&&l.text&&!(l.text.length<=0)){var d=((n={})[l.style]=!0,n);return(0,o.normalizeProps)((0,o.createComponentVNode)(2,c.NoticeBox,Object.assign({},d,{children:[(0,o.createComponentVNode)(2,c.Box,{display:"inline-block",verticalAlign:"middle",children:l.text}),(0,o.createComponentVNode)(2,c.Button,{icon:"times-circle",float:"right",onClick:function(){return i("cleartemp")}}),(0,o.createComponentVNode)(2,c.Box,{clear:"both"})]})))}},C=function(e,t){var n=(0,a.useBackend)(t),r=n.act,i=n.data,l=i.scanner,d=i.numberofpods,u=i.autoallowed,s=i.autoprocess,m=i.disk;return(0,o.createComponentVNode)(2,c.Section,{title:"Status",buttons:(0,o.createFragment)([!!u&&(0,o.createFragment)([(0,o.createComponentVNode)(2,c.Box,{display:"inline",color:"label",children:"Auto-processing:\xa0"}),(0,o.createComponentVNode)(2,c.Button,{selected:s,icon:s?"toggle-on":"toggle-off",content:s?"Enabled":"Disabled",onClick:function(){return r("autoprocess",{on:s?0:1})}})],4),(0,o.createComponentVNode)(2,c.Button,{disabled:!m,icon:"eject",content:"Eject Disk",onClick:function(){return r("disk",{option:"eject"})}})],0),children:(0,o.createComponentVNode)(2,c.LabeledList,{children:[(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Scanner",children:l?(0,o.createComponentVNode)(2,c.Box,{color:"good",children:"Connected"}):(0,o.createComponentVNode)(2,c.Box,{color:"bad",children:"Not connected!"})}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Pods",children:d?(0,o.createComponentVNode)(2,c.Box,{color:"good",children:[d," connected"]}):(0,o.createComponentVNode)(2,c.Box,{color:"bad",children:"None connected!"})})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.CommunicationsComputer=void 0;var o=n(0),r=n(1),a=n(2),c=n(4);t.CommunicationsComputer=function(e,t){var n,i=(0,r.useBackend)(t),l=i.act,d=i.data,u=!1;d.authenticated?1===d.authenticated?n="Command":2===d.authenticated?n="Captain":3===d.authenticated?(n="CentComm Secure Connection",u=!0):n="ERROR: Report This Bug!":n="Not Logged In";var s="View ("+d.messages.length+")",m=(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Section,{title:"Authentication",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:u&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Access",children:n})||(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Actions",children:(0,o.createComponentVNode)(2,a.Button,{icon:d.authenticated?"sign-out-alt":"id-card",selected:d.authenticated,disabled:d.noauthbutton,content:d.authenticated?"Log Out ("+n+")":"Log In",onClick:function(){return l("auth")}})})})}),!!d.esc_section&&(0,o.createComponentVNode)(2,a.Section,{title:"Escape Shuttle",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[!!d.esc_status&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Status",children:d.esc_status}),!!d.esc_callable&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Options",children:(0,o.createComponentVNode)(2,a.Button,{icon:"rocket",content:"Call Shuttle",disabled:!d.authhead,onClick:function(){return l("callshuttle")}})}),!!d.esc_recallable&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Options",children:(0,o.createComponentVNode)(2,a.Button,{icon:"times",content:"Recall Shuttle",disabled:!d.authhead||d.is_ai,onClick:function(){return l("cancelshuttle")}})}),!!d.lastCallLoc&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Last Call/Recall From",children:d.lastCallLoc})]})})],0),p="Make Priority Announcement";d.msg_cooldown>0&&(p+=" ("+d.msg_cooldown+"s)");var f=d.emagged?"Message [UNKNOWN]":"Message CentComm",h="Request Authentication Codes";d.cc_cooldown>0&&(f+=" ("+d.cc_cooldown+"s)",h+=" ("+d.cc_cooldown+"s)");var C,N=d.str_security_level,b=d.levels.map((function(e){return(0,o.createComponentVNode)(2,a.Button,{icon:e.icon,content:e.name,disabled:!d.authcapt||e.id===d.security_level,onClick:function(){return l("newalertlevel",{level:e.id})}},e.name)})),g=d.stat_display.presets.map((function(e){return(0,o.createComponentVNode)(2,a.Button,{content:e.label,selected:e.name===d.stat_display.type,disabled:!d.authhead,onClick:function(){return l("setstat",{statdisp:e.name})}},e.name)})),V=d.stat_display.alerts.map((function(e){return(0,o.createComponentVNode)(2,a.Button,{content:e.label,selected:e.alert===d.stat_display.icon,disabled:!d.authhead,onClick:function(){return l("setstat",{statdisp:"alert",alert:e.alert})}},e.alert)}));if(d.current_message_title)C=(0,o.createComponentVNode)(2,a.Section,{title:d.current_message_title,buttons:(0,o.createComponentVNode)(2,a.Button,{icon:"times",content:"Return To Message List",disabled:!d.authhead,onClick:function(){return l("messagelist")}}),children:(0,o.createComponentVNode)(2,a.Box,{children:d.current_message})});else{var v=d.messages.map((function(e){return(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:e.title,children:[(0,o.createComponentVNode)(2,a.Button,{icon:"eye",content:"View",disabled:!d.authhead||d.current_message_title===e.title,onClick:function(){return l("messagelist",{msgid:e.id})}}),(0,o.createComponentVNode)(2,a.Button,{icon:"times",content:"Delete",disabled:!d.authhead,onClick:function(){return l("delmessage",{msgid:e.id})}})]},e.id)}));C=(0,o.createComponentVNode)(2,a.Section,{title:"Messages Received",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:"arrow-circle-left",content:"Back To Main Menu",onClick:function(){return l("main")}}),children:(0,o.createComponentVNode)(2,a.LabeledList,{children:v})})}switch(d.menu_state){case 1:return(0,o.createComponentVNode)(2,c.Window,{resizable:!0,children:(0,o.createComponentVNode)(2,c.Window.Content,{scrollable:!0,children:[m,(0,o.createComponentVNode)(2,a.Section,{title:"Captain-Only Actions",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Current Alert",color:d.security_level_color,children:N}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Change Alert",children:b}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Announcement",children:(0,o.createComponentVNode)(2,a.Button,{icon:"bullhorn",content:p,disabled:!d.authcapt||d.msg_cooldown>0,onClick:function(){return l("announce")}})}),!!d.emagged&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Transmit",children:[(0,o.createComponentVNode)(2,a.Button,{icon:"broadcast-tower",color:"red",content:f,disabled:!d.authcapt||d.cc_cooldown>0,onClick:function(){return l("MessageSyndicate")}}),(0,o.createComponentVNode)(2,a.Button,{icon:"sync-alt",content:"Reset Relays",disabled:!d.authcapt,onClick:function(){return l("RestoreBackup")}})]})||(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Transmit",children:(0,o.createComponentVNode)(2,a.Button,{icon:"broadcast-tower",content:f,disabled:!d.authcapt||d.cc_cooldown>0,onClick:function(){return l("MessageCentcomm")}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Nuclear Device",children:(0,o.createComponentVNode)(2,a.Button,{icon:"bomb",content:h,disabled:!d.authcapt||d.cc_cooldown>0,onClick:function(){return l("nukerequest")}})})]})}),(0,o.createComponentVNode)(2,a.Section,{title:"Command Staff Actions",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Displays",children:(0,o.createComponentVNode)(2,a.Button,{icon:"tv",content:"Change Status Displays",disabled:!d.authhead,onClick:function(){return l("status")}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Incoming Messages",children:(0,o.createComponentVNode)(2,a.Button,{icon:"folder-open",content:s,disabled:!d.authhead,onClick:function(){return l("messagelist")}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Misc",children:(0,o.createComponentVNode)(2,a.Button,{icon:"sync-alt",content:"Restart Nano-Mob Hunter GO! Server",disabled:!d.authhead,onClick:function(){return l("RestartNanoMob")}})})]})})]})});case 2:return(0,o.createComponentVNode)(2,c.Window,{children:(0,o.createComponentVNode)(2,c.Window.Content,{children:[m,(0,o.createComponentVNode)(2,a.Section,{title:"Modify Status Screens",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:"arrow-circle-left",content:"Back To Main Menu",onClick:function(){return l("main")}}),children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Presets",children:g}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Alerts",children:V}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Message Line 1",children:(0,o.createComponentVNode)(2,a.Button,{icon:"pencil-alt",content:d.stat_display.line_1,disabled:!d.authhead,onClick:function(){return l("setmsg1")}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Message Line 2",children:(0,o.createComponentVNode)(2,a.Button,{icon:"pencil-alt",content:d.stat_display.line_2,disabled:!d.authhead,onClick:function(){return l("setmsg2")}})})]})})]})});case 3:return(0,o.createComponentVNode)(2,c.Window,{children:(0,o.createComponentVNode)(2,c.Window.Content,{children:[m,C]})});default:return(0,o.createComponentVNode)(2,c.Window,{children:(0,o.createComponentVNode)(2,c.Window.Content,{children:[m,"ERRROR. Unknown menu_state: ",d.menu_state,"Please report this to NT Technical Support."]})})}}},function(e,t,n){"use strict";t.__esModule=!0,t.Contractor=void 0;var o=n(0),r=n(15),a=n(1),c=n(2),i=n(184),l=n(4);var d={1:["ACTIVE","good"],2:["COMPLETED","good"],3:["FAILED","bad"]},u=["Recording biometric data...","Analyzing embedded syndicate info...","STATUS CONFIRMED","Contacting Syndicate database...","Awaiting response...","Awaiting response...","Awaiting response...","Awaiting response...","Awaiting response...","Awaiting response...","Response received, ack 4851234...","CONFIRM ACC "+Math.round(2e4*Math.random()),"Setting up private accounts...","CONTRACTOR ACCOUNT CREATED","Searching for available contracts...","Searching for available contracts...","Searching for available contracts...","Searching for available contracts...","CONTRACTS FOUND","WELCOME, AGENT"];t.Contractor=function(e,t){var n,r=(0,a.useBackend)(t),i=r.act,d=r.data;n=d.unauthorized?(0,o.createComponentVNode)(2,c.Flex.Item,{grow:"1",backgroundColor:"rgba(0, 0, 0, 0.8)",children:(0,o.createComponentVNode)(2,C,{height:"100%",allMessages:["ERROR: UNAUTHORIZED USER"],finishedTimeout:100,onFinished:function(){}})}):d.load_animation_completed?(0,o.createFragment)([(0,o.createComponentVNode)(2,c.Flex.Item,{basis:"content",children:(0,o.createComponentVNode)(2,s)}),(0,o.createComponentVNode)(2,c.Flex.Item,{basis:"content",mt:"0.5rem",children:(0,o.createComponentVNode)(2,m)}),(0,o.createComponentVNode)(2,c.Flex.Item,{grow:"1",overflow:"hidden",children:1===d.page?(0,o.createComponentVNode)(2,p,{height:"100%"}):(0,o.createComponentVNode)(2,h,{height:"100%"})})],4):(0,o.createComponentVNode)(2,c.Flex.Item,{grow:"1",backgroundColor:"rgba(0, 0, 0, 0.8)",children:(0,o.createComponentVNode)(2,C,{height:"100%",allMessages:u,finishedTimeout:3e3,onFinished:function(){return i("complete_load_animation")}})});var f=(0,a.useLocalState)(t,"viewingPhoto",""),b=f[0];f[1];return(0,o.createComponentVNode)(2,l.Window,{theme:"syndicate",children:[b&&(0,o.createComponentVNode)(2,N),(0,o.createComponentVNode)(2,l.Window.Content,{className:"Contractor",children:(0,o.createComponentVNode)(2,c.Flex,{direction:"column",height:"100%",children:n})})]})};var s=function(e,t){var n=(0,a.useBackend)(t),r=n.act,i=n.data,l=i.tc_available,d=i.tc_paid_out,u=i.completed_contracts,s=i.rep;return(0,o.normalizeProps)((0,o.createComponentVNode)(2,c.Section,Object.assign({title:"Summary",buttons:(0,o.createComponentVNode)(2,c.Box,{verticalAlign:"middle",mt:"0.25rem",children:[s," Rep"]})},e,{children:(0,o.createComponentVNode)(2,c.Flex,{children:[(0,o.createComponentVNode)(2,c.Box,{flexBasis:"50%",children:(0,o.createComponentVNode)(2,c.LabeledList,{children:[(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"TC Available",verticalAlign:"middle",children:(0,o.createComponentVNode)(2,c.Flex,{align:"center",children:[(0,o.createComponentVNode)(2,c.Flex.Item,{grow:"1",children:[l," TC"]}),(0,o.createComponentVNode)(2,c.Button,{disabled:l<=0,content:"Claim",mx:"0.75rem",mb:"0",flexBasis:"content",onClick:function(){return r("claim")}})]})}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"TC Earned",children:[d," TC"]})]})}),(0,o.createComponentVNode)(2,c.Box,{flexBasis:"50%",children:(0,o.createComponentVNode)(2,c.LabeledList,{children:[(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Contracts Completed",verticalAlign:"middle",children:(0,o.createComponentVNode)(2,c.Box,{height:"20px",lineHeight:"20px",display:"inline-block",children:u})}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Contractor Status",verticalAlign:"middle",children:"ACTIVE"})]})})]})})))},m=function(e,t){var n=(0,a.useBackend)(t),r=n.act,i=n.data.page;return(0,o.normalizeProps)((0,o.createComponentVNode)(2,c.Tabs,Object.assign({},e,{children:[(0,o.createComponentVNode)(2,c.Tabs.Tab,{selected:1===i,onClick:function(){return r("page",{page:1})},children:[(0,o.createComponentVNode)(2,c.Icon,{name:"suitcase"}),"Contracts"]}),(0,o.createComponentVNode)(2,c.Tabs.Tab,{selected:2===i,onClick:function(){return r("page",{page:2})},children:[(0,o.createComponentVNode)(2,c.Icon,{name:"shopping-cart"}),"Hub"]})]})))},p=function(e,t){var n=(0,a.useBackend)(t),r=n.act,l=n.data,u=l.contracts,s=l.contract_active,m=l.can_extract,p=!!s&&u.filter((function(e){return 1===e.status}))[0],h=p&&p.time_left>0,C=(0,a.useLocalState)(t,"viewingPhoto",""),N=(C[0],C[1]);return(0,o.normalizeProps)((0,o.createComponentVNode)(2,c.Section,Object.assign({title:"Available Contracts",overflow:"auto",buttons:(0,o.createComponentVNode)(2,c.Button,{disabled:!m||h,icon:"parachute-box",content:["Call Extraction",h&&(0,o.createComponentVNode)(2,i.Countdown,{timeLeft:p.time_left,format:function(e,t){return" ("+t.substr(3)+")"}})],onClick:function(){return r("extract")}})},e,{children:u.slice().sort((function(e,t){return 1===e.status?-1:1===t.status?1:e.status-t.status})).map((function(e){var t;return(0,o.createComponentVNode)(2,c.Section,{title:(0,o.createComponentVNode)(2,c.Flex,{children:[(0,o.createComponentVNode)(2,c.Flex.Item,{grow:"1",color:1===e.status&&"good",children:e.target_name}),(0,o.createComponentVNode)(2,c.Flex.Item,{basis:"content",children:e.has_photo&&(0,o.createComponentVNode)(2,c.Button,{icon:"camera",mb:"-0.5rem",ml:"0.5rem",onClick:function(){return N("target_photo_"+e.uid+".png")}})})]}),className:"Contractor__Contract",buttons:(0,o.createComponentVNode)(2,c.Box,{width:"100%",children:[!!d[e.status]&&(0,o.createComponentVNode)(2,c.Box,{color:d[e.status][1],display:"inline-block",mt:1!==e.status&&"0.125rem",mr:"0.25rem",lineHeight:"20px",children:d[e.status][0]}),1===e.status&&(0,o.createComponentVNode)(2,c.Button.Confirm,{icon:"ban",color:"bad",content:"Abort",ml:"0.5rem",onClick:function(){return r("abort")}})]}),children:(0,o.createComponentVNode)(2,c.Flex,{children:[(0,o.createComponentVNode)(2,c.Flex.Item,{grow:"2",mr:"0.5rem",children:[e.fluff_message,!!e.completed_time&&(0,o.createComponentVNode)(2,c.Box,{color:"good",children:[(0,o.createVNode)(1,"br"),(0,o.createComponentVNode)(2,c.Icon,{name:"check",mr:"0.5rem"}),"Contract completed at ",e.completed_time]}),!!e.dead_extraction&&(0,o.createComponentVNode)(2,c.Box,{color:"bad",mt:"0.5rem",bold:!0,children:[(0,o.createComponentVNode)(2,c.Icon,{name:"exclamation-triangle",mr:"0.5rem"}),"Telecrystals reward reduced drastically as the target was dead during extraction."]}),!!e.fail_reason&&(0,o.createComponentVNode)(2,c.Box,{color:"bad",children:[(0,o.createVNode)(1,"br"),(0,o.createComponentVNode)(2,c.Icon,{name:"times",mr:"0.5rem"}),"Contract failed: ",e.fail_reason]})]}),(0,o.createComponentVNode)(2,c.Flex.Item,{flexBasis:"100%",children:[(0,o.createComponentVNode)(2,c.Flex,{mb:"0.5rem",color:"label",children:["Extraction Zone:\xa0",f(e)]}),null==(t=e.difficulties)?void 0:t.map((function(t,n){return(0,o.createComponentVNode)(2,c.Button.Confirm,{disabled:!!s,content:t.name+" ("+t.reward+" TC)",onClick:function(){return r("activate",{uid:e.uid,difficulty:n+1})}})})),!!e.objective&&(0,o.createComponentVNode)(2,c.Box,{color:"white",bold:!0,children:[e.objective.extraction_name,(0,o.createVNode)(1,"br"),"(",(e.objective.rewards.tc||0)+" TC",",\xa0",(e.objective.rewards.credits||0)+" Credits",")"]})]})]})},e.uid)}))})))},f=function(e){if(e.objective&&!(e.status>1)){var t=e.objective.locs.user_area_id,n=e.objective.locs.user_coords,a=e.objective.locs.target_area_id,i=e.objective.locs.target_coords,l=t===a;return(0,o.createComponentVNode)(2,c.Flex.Item,{children:(0,o.createComponentVNode)(2,c.Icon,{name:l?"dot-circle-o":"arrow-alt-circle-right-o",color:l?"green":"yellow",rotation:l?null:-(0,r.rad2deg)(Math.atan2(i[1]-n[1],i[0]-n[0])),lineHeight:l?null:"0.85",size:"1.5"})})}},h=function(e,t){var n=(0,a.useBackend)(t),r=n.act,i=n.data,l=i.rep,d=i.buyables;return(0,o.normalizeProps)((0,o.createComponentVNode)(2,c.Section,Object.assign({title:"Available Purchases",overflow:"auto"},e,{children:d.map((function(e){return(0,o.createComponentVNode)(2,c.Section,{title:e.name,children:[e.description,(0,o.createVNode)(1,"br"),(0,o.createComponentVNode)(2,c.Button.Confirm,{disabled:l-1&&(0,o.createComponentVNode)(2,c.Box,{as:"span",color:0===e.stock?"bad":"good",ml:"0.5rem",children:[e.stock," in stock"]})]},e.uid)}))})))},C=function(e){var t,n;function r(t){var n;return(n=e.call(this,t)||this).timer=null,n.state={currentIndex:0,currentDisplay:[]},n}n=e,(t=r).prototype=Object.create(n.prototype),t.prototype.constructor=t,t.__proto__=n;var a=r.prototype;return a.tick=function(){var e=this.props,t=this.state;t.currentIndex<=e.allMessages.length?(this.setState((function(e){return{currentIndex:e.currentIndex+1}})),t.currentDisplay.push(e.allMessages[t.currentIndex])):(clearTimeout(this.timer),setTimeout(e.onFinished,e.finishedTimeout))},a.componentDidMount=function(){var e=this,t=this.props.linesPerSecond,n=void 0===t?2.5:t;this.timer=setInterval((function(){return e.tick()}),1e3/n)},a.componentWillUnmount=function(){clearTimeout(this.timer)},a.render=function(){return(0,o.createComponentVNode)(2,c.Box,{m:1,children:this.state.currentDisplay.map((function(e){return(0,o.createFragment)([e,(0,o.createVNode)(1,"br")],0,e)}))})},r}(o.Component),N=function(e,t){var n=(0,a.useLocalState)(t,"viewingPhoto",""),r=n[0],i=n[1];return(0,o.createComponentVNode)(2,c.Modal,{className:"Contractor__photoZoom",children:[(0,o.createComponentVNode)(2,c.Box,{as:"img",src:r}),(0,o.createComponentVNode)(2,c.Button,{icon:"times",content:"Close",color:"grey",mt:"1rem",onClick:function(){return i("")}})]})}},function(e,t,n){"use strict";t.__esModule=!0,t.ConveyorSwitch=void 0;var o=n(0),r=n(1),a=n(2),c=n(4);t.ConveyorSwitch=function(e,t){var n=(0,r.useBackend)(t),i=n.act,l=n.data,d=l.slowFactor,u=l.oneWay,s=l.position;return(0,o.createComponentVNode)(2,c.Window,{children:(0,o.createComponentVNode)(2,c.Window.Content,{children:(0,o.createComponentVNode)(2,a.Section,{children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Lever position",children:s>0?"forward":s<0?"reverse":"neutral"}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Allow reverse",children:(0,o.createComponentVNode)(2,a.Button.Checkbox,{checked:!u,onClick:function(){return i("toggleOneWay")}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Slowdown factor",children:(0,o.createComponentVNode)(2,a.Flex,{children:[(0,o.createComponentVNode)(2,a.Flex.Item,{mx:"1px",children:[" ",(0,o.createComponentVNode)(2,a.Button,{icon:"angle-double-left",onClick:function(){return i("slowFactor",{value:d-5})}})," "]}),(0,o.createComponentVNode)(2,a.Flex.Item,{mx:"1px",children:[" ",(0,o.createComponentVNode)(2,a.Button,{icon:"angle-left",onClick:function(){return i("slowFactor",{value:d-1})}})," "]}),(0,o.createComponentVNode)(2,a.Flex.Item,{children:(0,o.createComponentVNode)(2,a.Slider,{width:"100px",mx:"1px",value:d,fillValue:d,minValue:1,maxValue:50,step:1,format:function(e){return e+"x"},onChange:function(e,t){return i("slowFactor",{value:t})}})}),(0,o.createComponentVNode)(2,a.Flex.Item,{mx:"1px",children:[" ",(0,o.createComponentVNode)(2,a.Button,{icon:"angle-right",onClick:function(){return i("slowFactor",{value:d+1})}})," "]}),(0,o.createComponentVNode)(2,a.Flex.Item,{mx:"1px",children:[" ",(0,o.createComponentVNode)(2,a.Button,{icon:"angle-double-right",onClick:function(){return i("slowFactor",{value:d+5})}})," "]})]})})]})})})})}},function(e,t,n){"use strict";t.__esModule=!0,t.CrewMonitor=void 0;var o=n(0),r=n(26),a=n(19),c=n(1),i=n(2),l=n(76),d=n(39),u=n(4),s=function(e,t){return e.dead?"Deceased":parseInt(e.health,10)<=t?"Critical":1===parseInt(e.stat,10)?"Unconscious":"Living"},m=function(e,t){return e.dead?"red":parseInt(e.health,10)<=t?"orange":1===parseInt(e.stat,10)?"blue":"green"};t.CrewMonitor=function(e,t){var n=(0,c.useBackend)(t),r=(n.act,n.data,(0,c.useLocalState)(t,"tabIndex",0)),a=r[0],l=r[1];return(0,o.createComponentVNode)(2,u.Window,{resizable:!0,children:(0,o.createComponentVNode)(2,u.Window.Content,{children:(0,o.createComponentVNode)(2,i.Box,{fillPositionedParent:!0,children:[(0,o.createComponentVNode)(2,i.Tabs,{children:[(0,o.createComponentVNode)(2,i.Tabs.Tab,{selected:0===a,onClick:function(){return l(0)},children:[(0,o.createComponentVNode)(2,i.Icon,{name:"table"})," Data View"]},"DataView"),(0,o.createComponentVNode)(2,i.Tabs.Tab,{selected:1===a,onClick:function(){return l(1)},children:[(0,o.createComponentVNode)(2,i.Icon,{name:"map-marked-alt"})," Map View"]},"MapView")]}),function(e){switch(e){case 0:return(0,o.createComponentVNode)(2,p);case 1:return(0,o.createComponentVNode)(2,f);default:return"WE SHOULDN'T BE HERE!"}}(a)]})})})};var p=function(e,t){var n=(0,c.useBackend)(t),u=n.act,p=n.data,f=(0,r.sortBy)((function(e){return e.name}))(p.crewmembers||[]),h=(0,c.useLocalState)(t,"search",""),C=h[0],N=h[1],b=(0,a.createSearch)(C,(function(e){return e.name+"|"+e.assignment+"|"+e.area}));return(0,o.createComponentVNode)(2,i.Box,{children:[(0,o.createComponentVNode)(2,i.Input,{placeholder:"Search by name, assignment or location..",width:"100%",onInput:function(e,t){return N(t)}}),(0,o.createComponentVNode)(2,i.Table,{m:"0.5rem",children:[(0,o.createComponentVNode)(2,i.Table.Row,{header:!0,children:[(0,o.createComponentVNode)(2,i.Table.Cell,{children:"Name"}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:"Status"}),(0,o.createComponentVNode)(2,i.Table.Cell,{children:"Location"})]}),f.filter(b).map((function(e){return(0,o.createComponentVNode)(2,i.Table.Row,{bold:!!e.is_command,children:[(0,o.createComponentVNode)(2,l.TableCell,{children:[e.name," (",e.assignment,")"]}),(0,o.createComponentVNode)(2,l.TableCell,{children:[(0,o.createComponentVNode)(2,i.Box,{inline:!0,color:m(e,p.critThreshold),children:s(e,p.critThreshold)}),e.sensor_type>=2?(0,o.createComponentVNode)(2,i.Box,{inline:!0,children:["(",(0,o.createComponentVNode)(2,i.Box,{inline:!0,color:d.COLORS.damageType.oxy,children:e.oxy}),"|",(0,o.createComponentVNode)(2,i.Box,{inline:!0,color:d.COLORS.damageType.toxin,children:e.tox}),"|",(0,o.createComponentVNode)(2,i.Box,{inline:!0,color:d.COLORS.damageType.burn,children:e.fire}),"|",(0,o.createComponentVNode)(2,i.Box,{inline:!0,color:d.COLORS.damageType.brute,children:e.brute}),")"]}):null]}),(0,o.createComponentVNode)(2,l.TableCell,{children:3===e.sensor_type?p.isAI?(0,o.createComponentVNode)(2,i.Button,{fluid:!0,icon:"location-arrow",content:e.area+" ("+e.x+", "+e.y+")",onClick:function(){return u("track",{track:e.ref})}}):e.area+" ("+e.x+", "+e.y+")":"Not Available"})]},e.name)}))]})]})},f=function(e,t){var n=(0,c.useBackend)(t).data,r=(0,c.useLocalState)(t,"zoom",1),a=r[0],l=r[1];return(0,o.createComponentVNode)(2,i.Box,{height:"526px",mb:"0.5rem",overflow:"hidden",children:(0,o.createComponentVNode)(2,i.NanoMap,{onZoom:function(e){return l(e)},children:n.crewmembers.filter((function(e){return 3===e.sensor_type})).map((function(e){return(0,o.createComponentVNode)(2,i.NanoMap.Marker,{x:e.x,y:e.y,zoom:a,icon:"circle",tooltip:e.name+" ("+e.assignment+")",color:m(e,n.critThreshold)},e.ref)}))})})}},function(e,t,n){"use strict";t.__esModule=!0,t.Cryo=void 0;var o=n(0),r=n(1),a=n(2),c=n(4),i=[{label:"Resp.",type:"oxyLoss"},{label:"Toxin",type:"toxLoss"},{label:"Brute",type:"bruteLoss"},{label:"Burn",type:"fireLoss"}],l=[["good","Conscious"],["average","Unconscious"],["bad","DEAD"]];t.Cryo=function(e,t){return(0,o.createComponentVNode)(2,c.Window,{children:(0,o.createComponentVNode)(2,c.Window.Content,{className:"Layout__content--flexColumn",children:(0,o.createComponentVNode)(2,d)})})};var d=function(e,t){var n=(0,r.useBackend)(t),c=n.act,d=n.data,s=d.isOperating,m=d.hasOccupant,p=d.occupant,f=void 0===p?[]:p,h=d.cellTemperature,C=d.cellTemperatureStatus,N=d.isBeakerLoaded,b=d.auto_eject_healthy,g=d.auto_eject_dead;return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Section,{title:"Occupant",flexGrow:"1",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:"user-slash",onClick:function(){return c("ejectOccupant")},disabled:!m,children:"Eject"}),children:m?(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Occupant",children:f.name||"Unknown"}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Health",children:(0,o.createComponentVNode)(2,a.ProgressBar,{min:f.health,max:f.maxHealth,value:f.health/f.maxHealth,color:f.health>0?"good":"average",children:(0,o.createComponentVNode)(2,a.AnimatedNumber,{value:Math.round(f.health)})})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Status",color:l[f.stat][0],children:l[f.stat][1]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Temperature",children:[(0,o.createComponentVNode)(2,a.AnimatedNumber,{value:Math.round(f.bodyTemperature)})," K"]}),(0,o.createComponentVNode)(2,a.LabeledList.Divider),i.map((function(e){return(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:e.label,children:(0,o.createComponentVNode)(2,a.ProgressBar,{value:f[e.type]/100,ranges:{bad:[.01,Infinity]},children:(0,o.createComponentVNode)(2,a.AnimatedNumber,{value:Math.round(f[e.type])})})},e.id)}))]}):(0,o.createComponentVNode)(2,a.Flex,{height:"100%",textAlign:"center",children:(0,o.createComponentVNode)(2,a.Flex.Item,{grow:"1",align:"center",color:"label",children:[(0,o.createComponentVNode)(2,a.Icon,{name:"user-slash",mb:"0.5rem",size:"5"}),(0,o.createVNode)(1,"br"),"No occupant detected."]})})}),(0,o.createComponentVNode)(2,a.Section,{title:"Cell",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:"eject",onClick:function(){return c("ejectBeaker")},disabled:!N,children:"Eject Beaker"}),children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Power",children:(0,o.createComponentVNode)(2,a.Button,{icon:"power-off",onClick:function(){return c(s?"switchOff":"switchOn")},selected:s,children:s?"On":"Off"})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Temperature",color:C,children:[(0,o.createComponentVNode)(2,a.AnimatedNumber,{value:h})," K"]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Beaker",children:(0,o.createComponentVNode)(2,u)}),(0,o.createComponentVNode)(2,a.LabeledList.Divider),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Auto-eject healthy occupants",children:(0,o.createComponentVNode)(2,a.Button,{icon:b?"toggle-on":"toggle-off",selected:b,onClick:function(){return c(b?"auto_eject_healthy_off":"auto_eject_healthy_on")},children:b?"On":"Off"})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Auto-eject dead occupants",children:(0,o.createComponentVNode)(2,a.Button,{icon:g?"toggle-on":"toggle-off",selected:g,onClick:function(){return c(g?"auto_eject_dead_off":"auto_eject_dead_on")},children:g?"On":"Off"})})]})})],4)},u=function(e,t){var n=(0,r.useBackend)(t),c=(n.act,n.data),i=c.isBeakerLoaded,l=c.beakerLabel,d=c.beakerVolume;return i?(0,o.createFragment)([l||(0,o.createComponentVNode)(2,a.Box,{color:"average",children:"No label"}),(0,o.createComponentVNode)(2,a.Box,{color:!d&&"bad",children:d?(0,o.createComponentVNode)(2,a.AnimatedNumber,{value:d,format:function(e){return Math.round(e)+" units remaining"}}):"Beaker is empty"})],0):(0,o.createComponentVNode)(2,a.Box,{color:"average",children:"No beaker loaded"})}},function(e,t,n){"use strict";t.__esModule=!0,t.DNAModifier=void 0;var o=n(0),r=n(1),a=n(2),c=n(4),i=n(49),l=[["good","Alive"],["average","Critical"],["bad","DEAD"]],d=[["ui","Modify U.I.","dna"],["se","Modify S.E.","dna"],["buffer","Transfer Buffers","syringe"],["rejuvenators","Rejuvenators","flask"]],u=[5,10,20,30,50];t.DNAModifier=function(e,t){var n,a=(0,r.useBackend)(t),l=(a.act,a.data),d=l.irradiating,u=l.dnaBlockSize,p=l.occupant;return t.dnaBlockSize=u,t.isDNAInvalid=!p.isViableSubject||!p.uniqueIdentity||!p.structuralEnzymes,d&&(n=(0,o.createComponentVNode)(2,V,{duration:d})),(0,o.createComponentVNode)(2,c.Window,{resizable:!0,children:[(0,o.createComponentVNode)(2,i.ComplexModal),n,(0,o.createComponentVNode)(2,c.Window.Content,{className:"Layout__content--flexColumn",children:[(0,o.createComponentVNode)(2,s),(0,o.createComponentVNode)(2,m)]})]})};var s=function(e,t){var n=(0,r.useBackend)(t),c=n.act,i=n.data,d=i.locked,u=i.hasOccupant,s=i.occupant;return(0,o.createComponentVNode)(2,a.Section,{title:"Occupant",buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Box,{color:"label",display:"inline",mr:"0.5rem",children:"Door Lock:"}),(0,o.createComponentVNode)(2,a.Button,{disabled:!u,selected:d,icon:d?"toggle-on":"toggle-off",content:d?"Engaged":"Disengaged",onClick:function(){return c("toggleLock")}}),(0,o.createComponentVNode)(2,a.Button,{disabled:!u||d,icon:"user-slash",content:"Eject",onClick:function(){return c("ejectOccupant")}})],4),children:u?(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Box,{children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Name",children:s.name}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Health",children:(0,o.createComponentVNode)(2,a.ProgressBar,{min:s.minHealth,max:s.maxHealth,value:s.health/s.maxHealth,ranges:{good:[.5,Infinity],average:[0,.5],bad:[-Infinity,0]}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Status",color:l[s.stat][0],children:l[s.stat][1]}),(0,o.createComponentVNode)(2,a.LabeledList.Divider)]})}),t.isDNAInvalid?(0,o.createComponentVNode)(2,a.Box,{color:"bad",children:[(0,o.createComponentVNode)(2,a.Icon,{name:"exclamation-circle"}),"\xa0 The occupant's DNA structure is ruined beyond recognition, please insert a subject with an intact DNA structure."]}):(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Radiation",children:(0,o.createComponentVNode)(2,a.ProgressBar,{min:"0",max:"100",value:s.radiationLevel/100,color:"average"})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Unique Enzymes",children:i.occupant.uniqueEnzymes?i.occupant.uniqueEnzymes:(0,o.createComponentVNode)(2,a.Box,{color:"bad",children:[(0,o.createComponentVNode)(2,a.Icon,{name:"exclamation-circle"}),"\xa0 Unknown"]})})]})],0):(0,o.createComponentVNode)(2,a.Box,{color:"label",children:"Cell unoccupied."})})},m=function(e,t){var n,c=(0,r.useBackend)(t),i=c.act,l=c.data,u=l.selectedMenuKey,s=l.hasOccupant;l.occupant;return s?t.isDNAInvalid?(0,o.createComponentVNode)(2,a.Section,{flexGrow:"1",children:(0,o.createComponentVNode)(2,a.Flex,{height:"100%",children:(0,o.createComponentVNode)(2,a.Flex.Item,{grow:"1",align:"center",textAlign:"center",color:"label",children:[(0,o.createComponentVNode)(2,a.Icon,{name:"user-slash",mb:"0.5rem",size:"5"}),(0,o.createVNode)(1,"br"),"No operation possible on this subject."]})})}):("ui"===u?n=(0,o.createFragment)([(0,o.createComponentVNode)(2,p),(0,o.createComponentVNode)(2,h)],4):"se"===u?n=(0,o.createFragment)([(0,o.createComponentVNode)(2,f),(0,o.createComponentVNode)(2,h)],4):"buffer"===u?n=(0,o.createComponentVNode)(2,C):"rejuvenators"===u&&(n=(0,o.createComponentVNode)(2,g)),(0,o.createComponentVNode)(2,a.Section,{flexGrow:"1",children:[(0,o.createComponentVNode)(2,a.Tabs,{children:d.map((function(e,t){return(0,o.createComponentVNode)(2,a.Tabs.Tab,{selected:u===e[0],onClick:function(){return i("selectMenuKey",{key:e[0]})},children:[(0,o.createComponentVNode)(2,a.Icon,{name:e[2]}),e[1]]},t)}))}),n]})):(0,o.createComponentVNode)(2,a.Section,{flexGrow:"1",children:(0,o.createComponentVNode)(2,a.Flex,{height:"100%",children:(0,o.createComponentVNode)(2,a.Flex.Item,{grow:"1",align:"center",textAlign:"center",color:"label",children:[(0,o.createComponentVNode)(2,a.Icon,{name:"user-slash",mb:"0.5rem",size:"5"}),(0,o.createVNode)(1,"br"),"No occupant in DNA modifier."]})})})},p=function(e,t){var n=(0,r.useBackend)(t),c=n.act,i=n.data,l=i.selectedUIBlock,d=i.selectedUISubBlock,u=i.selectedUITarget,s=i.occupant;return(0,o.createComponentVNode)(2,a.Section,{title:"Modify Unique Identifier",level:"2",children:[(0,o.createComponentVNode)(2,v,{dnaString:s.uniqueIdentity,selectedBlock:l,selectedSubblock:d,blockSize:t.dnaBlockSize,action:"selectUIBlock"}),(0,o.createComponentVNode)(2,a.LabeledList,{children:(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Target",children:(0,o.createComponentVNode)(2,a.Knob,{minValue:"1",maxValue:"15",stepPixelSize:"20",value:u,format:function(e){return e.toString(16).toUpperCase()},ml:"0",onChange:function(e,t){return c("changeUITarget",{value:t})}})})}),(0,o.createComponentVNode)(2,a.Button,{icon:"radiation",content:"Irradiate Block",mt:"0.5rem",onClick:function(){return c("pulseUIRadiation")}})]})},f=function(e,t){var n=(0,r.useBackend)(t),c=n.act,i=n.data,l=i.selectedSEBlock,d=i.selectedSESubBlock,u=i.occupant;return(0,o.createComponentVNode)(2,a.Section,{title:"Modify Structural Enzymes",level:"2",children:[(0,o.createComponentVNode)(2,v,{dnaString:u.structuralEnzymes,selectedBlock:l,selectedSubblock:d,blockSize:t.dnaBlockSize,action:"selectSEBlock"}),(0,o.createComponentVNode)(2,a.Button,{icon:"radiation",content:"Irradiate Block",onClick:function(){return c("pulseSERadiation")}})]})},h=function(e,t){var n=(0,r.useBackend)(t),c=n.act,i=n.data,l=i.radiationIntensity,d=i.radiationDuration;return(0,o.createComponentVNode)(2,a.Section,{title:"Radiation Emitter",level:"2",children:[(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Intensity",children:(0,o.createComponentVNode)(2,a.Knob,{minValue:"1",maxValue:"10",stepPixelSize:"20",value:l,popUpPosition:"right",ml:"0",onChange:function(e,t){return c("radiationIntensity",{value:t})}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Duration",children:(0,o.createComponentVNode)(2,a.Knob,{minValue:"1",maxValue:"20",stepPixelSize:"10",unit:"s",value:d,popUpPosition:"right",ml:"0",onChange:function(e,t){return c("radiationDuration",{value:t})}})})]}),(0,o.createComponentVNode)(2,a.Button,{icon:"radiation",content:"Pulse Radiation",tooltip:"Mutates a random block of either the occupant's UI or SE.",tooltipPosition:"top-right",mt:"0.5rem",onClick:function(){return c("pulseRadiation")}})]})},C=function(e,t){var n=(0,r.useBackend)(t),c=(n.act,n.data.buffers.map((function(e,t){return(0,o.createComponentVNode)(2,N,{id:t+1,name:"Buffer "+(t+1),buffer:e},t)})));return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Section,{title:"Buffers",level:"2",children:c}),(0,o.createComponentVNode)(2,b)],4)},N=function(e,t){var n=(0,r.useBackend)(t),c=n.act,i=n.data,l=e.id,d=e.name,u=e.buffer,s=i.isInjectorReady,m=d+(u.data?" - "+u.label:"");return(0,o.createComponentVNode)(2,a.Box,{backgroundColor:"rgba(0, 0, 0, 0.33)",mb:"0.5rem",children:(0,o.createComponentVNode)(2,a.Section,{title:m,level:"3",mx:"0",lineHeight:"18px",buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Button.Confirm,{disabled:!u.data,icon:"trash",content:"Clear",onClick:function(){return c("bufferOption",{option:"clear",id:l})}}),(0,o.createComponentVNode)(2,a.Button,{disabled:!u.data,icon:"pen",content:"Rename",onClick:function(){return c("bufferOption",{option:"changeLabel",id:l})}}),(0,o.createComponentVNode)(2,a.Button,{disabled:!u.data||!i.hasDisk,icon:"save",content:"Export",tooltip:"Exports this buffer to the currently loaded data disk.",tooltipPosition:"bottom-left",onClick:function(){return c("bufferOption",{option:"saveDisk",id:l})}})],4),children:[(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Write",children:[(0,o.createComponentVNode)(2,a.Button,{icon:"arrow-circle-down",content:"Subject U.I",mb:"0",onClick:function(){return c("bufferOption",{option:"saveUI",id:l})}}),(0,o.createComponentVNode)(2,a.Button,{icon:"arrow-circle-down",content:"Subject U.I and U.E.",mb:"0",onClick:function(){return c("bufferOption",{option:"saveUIAndUE",id:l})}}),(0,o.createComponentVNode)(2,a.Button,{icon:"arrow-circle-down",content:"Subject S.E.",mb:"0",onClick:function(){return c("bufferOption",{option:"saveSE",id:l})}}),(0,o.createComponentVNode)(2,a.Button,{disabled:!i.hasDisk||!i.disk.data,icon:"arrow-circle-down",content:"From Disk",mb:"0",onClick:function(){return c("bufferOption",{option:"loadDisk",id:l})}})]}),!!u.data&&(0,o.createFragment)([(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Subject",children:u.owner||(0,o.createComponentVNode)(2,a.Box,{color:"average",children:"Unknown"})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Data Type",children:["ui"===u.type?"Unique Identifiers":"Structural Enzymes",!!u.ue&&" and Unique Enzymes"]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Transfer to",children:[(0,o.createComponentVNode)(2,a.Button,{disabled:!s,icon:s?"syringe":"spinner",iconSpin:!s,content:"Injector",mb:"0",onClick:function(){return c("bufferOption",{option:"createInjector",id:l})}}),(0,o.createComponentVNode)(2,a.Button,{disabled:!s,icon:s?"syringe":"spinner",iconSpin:!s,content:"Block Injector",mb:"0",onClick:function(){return c("bufferOption",{option:"createInjector",id:l,block:1})}}),(0,o.createComponentVNode)(2,a.Button,{icon:"user",content:"Subject",mb:"0",onClick:function(){return c("bufferOption",{option:"transfer",id:l})}})]})],4)]}),!u.data&&(0,o.createComponentVNode)(2,a.Box,{color:"label",mt:"0.5rem",children:"This buffer is empty."})]})})},b=function(e,t){var n=(0,r.useBackend)(t),c=n.act,i=n.data,l=i.hasDisk,d=i.disk;return(0,o.createComponentVNode)(2,a.Section,{title:"Data Disk",level:"2",buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Button.Confirm,{disabled:!l||!d.data,icon:"trash",content:"Wipe",onClick:function(){return c("wipeDisk")}}),(0,o.createComponentVNode)(2,a.Button,{disabled:!l,icon:"eject",content:"Eject",onClick:function(){return c("ejectDisk")}})],4),children:l?d.data?(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Label",children:d.label?d.label:"No label"}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Subject",children:d.owner?d.owner:(0,o.createComponentVNode)(2,a.Box,{color:"average",children:"Unknown"})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Data Type",children:["ui"===d.type?"Unique Identifiers":"Structural Enzymes",!!d.ue&&" and Unique Enzymes"]})]}):(0,o.createComponentVNode)(2,a.Box,{color:"label",children:"Disk is blank."}):(0,o.createComponentVNode)(2,a.Box,{color:"label",textAlign:"center",my:"1rem",children:[(0,o.createComponentVNode)(2,a.Icon,{name:"save-o",size:"4"}),(0,o.createVNode)(1,"br"),"No disk inserted."]})})},g=function(e,t){var n=(0,r.useBackend)(t),c=n.act,i=n.data,l=i.isBeakerLoaded,d=i.beakerVolume,s=i.beakerLabel;return(0,o.createComponentVNode)(2,a.Section,{title:"Rejuvenators and Beaker",level:"2",buttons:(0,o.createComponentVNode)(2,a.Button,{disabled:!l,icon:"eject",content:"Eject",onClick:function(){return c("ejectBeaker")}}),children:l?(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Inject",children:[u.map((function(e,t){return(0,o.createComponentVNode)(2,a.Button,{disabled:e>d,icon:"syringe",content:e,onClick:function(){return c("injectRejuvenators",{amount:e})}},t)})),(0,o.createComponentVNode)(2,a.Button,{disabled:d<=0,icon:"syringe",content:"All",onClick:function(){return c("injectRejuvenators",{amount:d})}})]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Beaker",children:[(0,o.createComponentVNode)(2,a.Box,{mb:"0.5rem",children:s||"No label"}),d?(0,o.createComponentVNode)(2,a.Box,{color:"good",children:[d," unit",1===d?"":"s"," remaining"]}):(0,o.createComponentVNode)(2,a.Box,{color:"bad",children:"Empty"})]})]}):(0,o.createComponentVNode)(2,a.Box,{color:"label",textAlign:"center",my:"25%",children:[(0,o.createComponentVNode)(2,a.Icon,{name:"exclamation-triangle",size:"4"}),(0,o.createVNode)(1,"br"),"No beaker loaded."]})})},V=function(e,t){return(0,o.createComponentVNode)(2,a.Dimmer,{textAlign:"center",children:[(0,o.createComponentVNode)(2,a.Icon,{name:"spinner",size:"5",spin:!0}),(0,o.createVNode)(1,"br"),(0,o.createComponentVNode)(2,a.Box,{color:"average",children:(0,o.createVNode)(1,"h1",null,[(0,o.createComponentVNode)(2,a.Icon,{name:"radiation"}),(0,o.createTextVNode)("\xa0Irradiating occupant\xa0"),(0,o.createComponentVNode)(2,a.Icon,{name:"radiation"})],4)}),(0,o.createComponentVNode)(2,a.Box,{color:"label",children:(0,o.createVNode)(1,"h3",null,[(0,o.createTextVNode)("For "),e.duration,(0,o.createTextVNode)(" second"),1===e.duration?"":"s"],0)})]})},v=function(e,t){for(var n=(0,r.useBackend)(t),c=n.act,i=(n.data,e.dnaString),l=e.selectedBlock,d=e.selectedSubblock,u=e.blockSize,s=e.action,m=i.split(""),p=[],f=function(e){for(var t=e/u+1,n=[],r=function(r){var i=r+1;n.push((0,o.createComponentVNode)(2,a.Button,{selected:l===t&&d===i,content:m[e+r],mb:"0",onClick:function(){return c(s,{block:t,subblock:i})}}))},i=0;i0?"Yes":"No",selected:l.com>0,onClick:function(){return i("toggle_com")}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Security",children:d.map((function(e,t){return(0,o.createComponentVNode)(2,a.Button,{selected:l.sec===e,content:e,onClick:function(){return i("set_sec",{set_sec:e})}},"sec"+e)}))}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Medical",children:d.map((function(e,t){return(0,o.createComponentVNode)(2,a.Button,{selected:l.med===e,content:e,onClick:function(){return i("set_med",{set_med:e})}},"med"+e)}))}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Engineering",children:d.map((function(e,t){return(0,o.createComponentVNode)(2,a.Button,{selected:l.eng===e,content:e,onClick:function(){return i("set_eng",{set_eng:e})}},"eng"+e)}))}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Paranormal",children:d.map((function(e,t){return(0,o.createComponentVNode)(2,a.Button,{selected:l.par===e,content:e,onClick:function(){return i("set_par",{set_par:e})}},"par"+e)}))}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Janitor",children:d.map((function(e,t){return(0,o.createComponentVNode)(2,a.Button,{selected:l.jan===e,content:e,onClick:function(){return i("set_jan",{set_jan:e})}},"jan"+e)}))}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Cyborg",children:d.map((function(e,t){return(0,o.createComponentVNode)(2,a.Button,{selected:l.cyb===e,content:e,onClick:function(){return i("set_cyb",{set_cyb:e})}},"cyb"+e)}))}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Total Slots",children:(0,o.createComponentVNode)(2,a.Box,{color:l.total>l.spawnpoints?"red":"green",children:[l.total," total, versus ",l.spawnpoints," spawnpoints"]})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Dispatch",children:(0,o.createComponentVNode)(2,a.Button,{icon:"ambulance",content:"Send ERT",onClick:function(){return i("dispatch_ert")}})})]})})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.Electropack=void 0;var o=n(0),r=n(15),a=n(1),c=n(2),i=n(4);t.Electropack=function(e,t){var n=(0,a.useBackend)(t),l=n.act,d=n.data,u=d.power,s=d.code,m=d.frequency,p=d.minFrequency,f=d.maxFrequency;return(0,o.createComponentVNode)(2,i.Window,{children:(0,o.createComponentVNode)(2,i.Window.Content,{children:(0,o.createComponentVNode)(2,c.Section,{children:(0,o.createComponentVNode)(2,c.LabeledList,{children:[(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Power",children:(0,o.createComponentVNode)(2,c.Button,{icon:u?"power-off":"times",content:u?"On":"Off",selected:u,onClick:function(){return l("power")}})}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Frequency",buttons:(0,o.createComponentVNode)(2,c.Button,{icon:"sync",content:"Reset",onClick:function(){return l("reset",{reset:"freq"})}}),children:(0,o.createComponentVNode)(2,c.NumberInput,{animate:!0,unit:"kHz",step:.2,stepPixelSize:6,minValue:p/10,maxValue:f/10,value:m/10,format:function(e){return(0,r.toFixed)(e,1)},width:"80px",onChange:function(e,t){return l("freq",{freq:t})}})}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Code",buttons:(0,o.createComponentVNode)(2,c.Button,{icon:"sync",content:"Reset",onClick:function(){return l("reset",{reset:"code"})}}),children:(0,o.createComponentVNode)(2,c.NumberInput,{animate:!0,step:1,stepPixelSize:6,minValue:1,maxValue:100,value:s,width:"80px",onChange:function(e,t){return l("code",{code:t})}})})]})})})})}},function(e,t,n){"use strict";t.__esModule=!0,t.EvolutionMenu=void 0;var o=n(0),r=n(1),a=n(2),c=n(4);t.EvolutionMenu=function(e,t){return(0,o.createComponentVNode)(2,c.Window,{resizable:!0,theme:"changeling",children:(0,o.createComponentVNode)(2,c.Window.Content,{className:"Layout__content--flexColumn",children:[(0,o.createComponentVNode)(2,i),(0,o.createComponentVNode)(2,l)]})})};var i=function(e,t){var n=(0,r.useBackend)(t),c=n.act,i=n.data,l=i.evo_points,d=i.can_respec;return(0,o.createComponentVNode)(2,a.Section,{title:"Evolution Points",height:5.5,children:(0,o.createComponentVNode)(2,a.Flex,{children:[(0,o.createComponentVNode)(2,a.Flex.Item,{mt:.5,color:"label",children:"Points remaining:"}),(0,o.createComponentVNode)(2,a.Flex.Item,{mt:.5,ml:2,bold:!0,color:"#1b945c",children:l}),(0,o.createComponentVNode)(2,a.Flex.Item,{children:[(0,o.createComponentVNode)(2,a.Button,{ml:2.5,disabled:!d,content:"Readapt",icon:"sync",onClick:function(){return c("readapt")}}),(0,o.createComponentVNode)(2,a.Button,{tooltip:"By transforming a humanoid into a husk, we gain the ability to readapt our chosen evolutions.",tooltipPosition:"bottom",icon:"question-circle"})]})]})})},l=function(e,t){var n=(0,r.useBackend)(t),c=n.act,i=n.data,l=i.evo_points,d=i.ability_list,u=i.purchsed_abilities,s=i.view_mode;return(0,o.createComponentVNode)(2,a.Section,{title:"Abilities",flexGrow:"1",buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Button,{icon:s?"square-o":"check-square-o",selected:!s,content:"Compact",onClick:function(){return c("set_view_mode",{mode:0})}}),(0,o.createComponentVNode)(2,a.Button,{icon:s?"check-square-o":"square-o",selected:s,content:"Expanded",onClick:function(){return c("set_view_mode",{mode:1})}})],4),children:d.map((function(e,t){return(0,o.createComponentVNode)(2,a.Box,{p:.5,mx:-1,className:"candystripe",children:[(0,o.createComponentVNode)(2,a.Flex,{align:"center",children:[(0,o.createComponentVNode)(2,a.Flex.Item,{ml:.5,color:"#dedede",children:e.name}),u.includes(e.name)&&(0,o.createComponentVNode)(2,a.Flex.Item,{ml:2,bold:!0,color:"#1b945c",children:"(Purchased)"}),(0,o.createComponentVNode)(2,a.Flex.Item,{mr:3,textAlign:"right",grow:1,children:[(0,o.createComponentVNode)(2,a.Box,{as:"span",color:"label",children:["Cost: "," "]}),(0,o.createComponentVNode)(2,a.Box,{as:"span",bold:!0,color:"#1b945c",children:e.cost})]}),(0,o.createComponentVNode)(2,a.Flex.Item,{textAlign:"right",children:(0,o.createComponentVNode)(2,a.Button,{mr:.5,disabled:e.cost>l||u.includes(e.name),content:"Evolve",onClick:function(){return c("purchase",{power_name:e.name})}})})]}),!!s&&(0,o.createComponentVNode)(2,a.Flex,{color:"#8a8a8a",my:1,ml:1.5,width:"95%",children:e.description+" "+e.helptext})]},t)}))})}},function(e,t,n){"use strict";t.__esModule=!0,t.ExosuitFabricator=void 0;var o=n(0),r=n(8),a=n(19),c=n(1),i=n(2),l=n(184),d=n(4);var u={bananium:"clown",tranquillite:"mime"};t.ExosuitFabricator=function(e,t){var n=(0,c.useBackend)(t),r=(n.act,n.data.building);return(0,o.createComponentVNode)(2,d.Window,{children:(0,o.createComponentVNode)(2,d.Window.Content,{className:"Exofab",children:(0,o.createComponentVNode)(2,i.Flex,{width:"100%",height:"100%",children:[(0,o.createComponentVNode)(2,i.Flex.Item,{grow:"1",mr:"0.5rem",width:"70%",children:(0,o.createComponentVNode)(2,i.Flex,{direction:"column",height:"100%",children:[(0,o.createComponentVNode)(2,i.Flex.Item,{grow:"1",basis:"100%",children:(0,o.createComponentVNode)(2,m)}),r&&(0,o.createComponentVNode)(2,i.Flex.Item,{basis:"content",mt:"0.5rem",children:(0,o.createComponentVNode)(2,p)})]})}),(0,o.createComponentVNode)(2,i.Flex.Item,{width:"30%",children:(0,o.createComponentVNode)(2,i.Flex,{direction:"column",height:"100%",children:[(0,o.createComponentVNode)(2,i.Flex.Item,{grow:"1",basis:"50%",children:(0,o.createComponentVNode)(2,s)}),(0,o.createComponentVNode)(2,i.Flex.Item,{grow:"1",basis:"50%",mt:"0.5rem",children:(0,o.createComponentVNode)(2,f)})]})})]})})})};var s=function(e,t){var n=(0,c.useBackend)(t),r=n.act,a=n.data,l=a.materials,d=a.capacity,u=Object.values(l).reduce((function(e,t){return e+t}),0);return(0,o.createComponentVNode)(2,i.Section,{title:"Materials",className:"Exofab__materials",buttons:(0,o.createComponentVNode)(2,i.Box,{color:"label",mt:"0.25rem",children:[(u/d*100).toPrecision(3),"% full"]}),children:["$metal","$glass","$silver","$gold","$uranium","$titanium","$plasma","$diamond","$bluespace","$bananium","$tranquillite","$plastic"].map((function(e){return(0,o.createComponentVNode)(2,h,{id:e,bold:"$metal"===e||"$glass"===e,onClick:function(){return r("withdraw",{id:e})}},e)}))})},m=function(e,t){var n=(0,c.useBackend)(t),r=n.act,l=n.data,d=l.curCategory,u=l.categories,s=l.designs,m=l.syncing,p=(0,c.useLocalState)(t,"searchText",""),f=p[0],h=p[1],N=(0,a.createSearch)(f,(function(e){return e.name})),b=s.filter(N);return(0,o.createComponentVNode)(2,i.Section,{className:"Exofab__designs",title:(0,o.createComponentVNode)(2,i.Dropdown,{selected:d,options:u,onSelected:function(e){return r("category",{cat:e})},width:"150px"}),height:"100%",buttons:(0,o.createComponentVNode)(2,i.Box,{mt:"-18px",children:[(0,o.createComponentVNode)(2,i.Button,{icon:"plus",content:"Queue all",onClick:function(){return r("queueall")}}),(0,o.createComponentVNode)(2,i.Button,{disabled:m,iconSpin:m,icon:"sync-alt",content:m?"Synchronizing...":"Synchronize with R&D servers",onClick:function(){return r("sync")}})]}),children:[(0,o.createComponentVNode)(2,i.Input,{placeholder:"Search by name...",mb:"0.5rem",width:"100%",onInput:function(e,t){return h(t)}}),b.map((function(e){return(0,o.createComponentVNode)(2,C,{design:e},e.id)})),0===b.length&&(0,o.createComponentVNode)(2,i.Box,{color:"label",children:"No designs found."})]})},p=function(e,t){var n=(0,c.useBackend)(t),r=(n.act,n.data),a=r.building,d=r.buildStart,u=r.buildEnd,s=r.worldTime;return(0,o.createComponentVNode)(2,i.Section,{className:"Exofab__building",stretchContents:!0,children:(0,o.createComponentVNode)(2,i.ProgressBar.Countdown,{start:d,current:s,end:u,bold:!0,children:[(0,o.createComponentVNode)(2,i.Box,{float:"left",children:(0,o.createComponentVNode)(2,i.Icon,{name:"cog",spin:!0})}),"Building ",a,"\xa0(",(0,o.createComponentVNode)(2,l.Countdown,{current:s,timeLeft:u-s,format:function(e,t){return t.substr(3)}}),")"]})})},f=function(e,t){var n=(0,c.useBackend)(t),r=n.act,a=n.data,l=a.queue,d=a.processingQueue,u=Object.entries(a.queueDeficit).filter((function(e){return e[1]<0})),s=l.reduce((function(e,t){return e+t.time}),0);return(0,o.createComponentVNode)(2,i.Section,{className:"Exofab__queue",title:"Queue",buttons:(0,o.createComponentVNode)(2,i.Box,{children:[(0,o.createComponentVNode)(2,i.Button,{selected:d,icon:d?"toggle-on":"toggle-off",content:"Process",onClick:function(){return r("process")}}),(0,o.createComponentVNode)(2,i.Button,{disabled:0===l.length,icon:"eraser",content:"Clear",onClick:function(){return r("unqueueall")}})]}),children:(0,o.createComponentVNode)(2,i.Flex,{height:"100%",direction:"column",children:0===l.length?(0,o.createComponentVNode)(2,i.Box,{color:"label",children:"The queue is empty."}):(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Flex.Item,{className:"Exofab__queue--queue",grow:"1",overflow:"auto",children:l.map((function(e,t){return(0,o.createComponentVNode)(2,i.Box,{color:e.notEnough&&"bad",children:[t+1,". ",e.name,t>0&&(0,o.createComponentVNode)(2,i.Button,{icon:"arrow-up",onClick:function(){return r("queueswap",{from:t+1,to:t})}}),t0&&(0,o.createComponentVNode)(2,i.Flex.Item,{className:"Exofab__queue--time",basis:"content",shrink:"0",children:[(0,o.createComponentVNode)(2,i.Divider),"Processing time:",(0,o.createComponentVNode)(2,i.Icon,{name:"clock",mx:"0.5rem"}),(0,o.createComponentVNode)(2,i.Box,{display:"inline",bold:!0,children:new Date(s/10*1e3).toISOString().substr(14,5)})]}),Object.keys(u).length>0&&(0,o.createComponentVNode)(2,i.Flex.Item,{className:"Exofab__queue--deficit",basis:"content",shrink:"0",children:[(0,o.createComponentVNode)(2,i.Divider),"Lacking materials to complete:",u.map((function(e){return(0,o.createComponentVNode)(2,i.Box,{children:(0,o.createComponentVNode)(2,h,{id:e[0],amount:-e[1],lineDisplay:!0})},e[0])}))]})],0)})})},h=function(e,t){var n=(0,c.useBackend)(t),a=(n.act,n.data),l=e.id,d=e.amount,s=e.lineDisplay,m=e.onClick,p=function(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o=0||(r[n]=e[n]);return r}(e,["id","amount","lineDisplay","onClick"]),f=l.replace("$",""),h=a.materials[l]||0,C=d||h;if(!(C<=0&&"metal"!==f&&"glass"!==f)){var N=d&&d>h;return(0,o.normalizeProps)((0,o.createComponentVNode)(2,i.Flex,Object.assign({className:(0,r.classes)(["Exofab__material",s&&"Exofab__material--line"])},p,{children:[(0,o.createComponentVNode)(2,i.Flex.Item,{basis:"content",children:(0,o.createComponentVNode)(2,i.Button,{onClick:m,children:(0,o.createComponentVNode)(2,i.Box,{as:"img",src:"sheet-"+(u[f]||f)+".png"})})}),(0,o.createComponentVNode)(2,i.Flex.Item,{grow:"1",children:s?(0,o.createComponentVNode)(2,i.Box,{className:"Exofab__material--amount",color:N&&"bad",children:C.toLocaleString("en-US")}):(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Box,{className:"Exofab__material--name",children:f}),(0,o.createComponentVNode)(2,i.Box,{className:"Exofab__material--amount",children:[C.toLocaleString("en-US")," cm\xb3 (",Math.round(C/2e3*10)/10," sheets)"]})],4)})]})))}},C=function(e,t){var n=(0,c.useBackend)(t),r=n.act,a=n.data,l=e.design;return(0,o.createComponentVNode)(2,i.Box,{className:"Exofab__design",children:[(0,o.createComponentVNode)(2,i.Button,{disabled:l.notEnough||a.building,icon:"cog",content:l.name,onClick:function(){return r("build",{id:l.id})}}),(0,o.createComponentVNode)(2,i.Button,{icon:"plus-circle",onClick:function(){return r("queue",{id:l.id})}}),(0,o.createComponentVNode)(2,i.Box,{className:"Exofab__design--cost",children:Object.entries(l.cost).map((function(e){return(0,o.createComponentVNode)(2,i.Box,{children:(0,o.createComponentVNode)(2,h,{id:e[0],amount:e[1],lineDisplay:!0})},e[0])}))}),(0,o.createComponentVNode)(2,i.Box,{className:"Exofab__design--time",children:[(0,o.createComponentVNode)(2,i.Icon,{name:"clock"}),l.time>0?(0,o.createFragment)([l.time/10,(0,o.createTextVNode)(" seconds")],0):"Instant"]})]})}},function(e,t,n){"use strict";t.__esModule=!0,t.ExternalAirlockController=void 0;var o=n(0),r=n(1),a=n(2),c=n(4);t.ExternalAirlockController=function(e,t){var n,i,l=(0,r.useBackend)(t),d=l.act,u=l.data,s=u.chamber_pressure,m=(u.exterior_status,u.interior_status),p=u.processing;return(0,o.createComponentVNode)(2,c.Window,{children:(0,o.createComponentVNode)(2,c.Window.Content,{children:[(0,o.createComponentVNode)(2,a.Section,{title:"Information",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Chamber Pressure",children:(0,o.createComponentVNode)(2,a.ProgressBar,{color:(n=s,i="good",n<80?i="bad":n<95||n>110?i="average":n>120&&(i="bad"),i),value:s,minValue:0,maxValue:1013,children:[s," kPa"]})})})}),(0,o.createComponentVNode)(2,a.Section,{title:"Actions",children:[(0,o.createComponentVNode)(2,a.Box,{children:[(0,o.createComponentVNode)(2,a.Button,{content:"Cycle to Exterior",icon:"arrow-circle-left",disabled:p,onClick:function(){return d("cycle_ext")}}),(0,o.createComponentVNode)(2,a.Button,{content:"Cycle to Interior",icon:"arrow-circle-right",disabled:p,onClick:function(){return d("cycle_int")}})]}),(0,o.createComponentVNode)(2,a.Box,{children:[(0,o.createComponentVNode)(2,a.Button,{content:"Force Exterior Door",icon:"exclamation-triangle",color:"open"===m?"red":p?"yellow":null,onClick:function(){return d("force_ext")}}),(0,o.createComponentVNode)(2,a.Button,{content:"Force Interior Door",icon:"exclamation-triangle",color:"open"===m?"red":p?"yellow":null,onClick:function(){return d("force_int")}})]}),(0,o.createComponentVNode)(2,a.Box,{children:(0,o.createComponentVNode)(2,a.Button,{content:"Abort",icon:"ban",color:"red",disabled:!p,onClick:function(){return d("abort")}})})]})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.FaxMachine=void 0;var o=n(0),r=n(1),a=n(2),c=n(4);t.FaxMachine=function(e,t){var n=(0,r.useBackend)(t),i=n.act,l=n.data;return(0,o.createComponentVNode)(2,c.Window,{children:(0,o.createComponentVNode)(2,c.Window.Content,{children:[(0,o.createComponentVNode)(2,a.Section,{title:"Authorization",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"ID Card",children:(0,o.createComponentVNode)(2,a.Button,{icon:l.scan_name?"eject":"id-card",selected:l.scan_name,content:l.scan_name?l.scan_name:"-----",tooltip:l.scan_name?"Eject ID":"Insert ID",onClick:function(){return i("scan")}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Authorize",children:(0,o.createComponentVNode)(2,a.Button,{icon:l.authenticated?"sign-out-alt":"id-card",selected:l.authenticated,disabled:l.nologin,content:l.realauth?"Log Out":"Log In",onClick:function(){return i("auth")}})})]})}),(0,o.createComponentVNode)(2,a.Section,{title:"Fax Menu",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Network",children:l.network}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Document",children:[(0,o.createComponentVNode)(2,a.Button,{icon:l.paper?"eject":"paperclip",disabled:!l.authenticated&&!l.paper,content:l.paper?l.paper:"-----",onClick:function(){return i("paper")}}),!!l.paper&&(0,o.createComponentVNode)(2,a.Button,{icon:"pencil-alt",content:"Rename",onClick:function(){return i("rename")}})]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Sending To",children:(0,o.createComponentVNode)(2,a.Button,{icon:"print",content:l.destination?l.destination:"-----",disabled:!l.authenticated,onClick:function(){return i("dept")}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Action",children:(0,o.createComponentVNode)(2,a.Button,{icon:"envelope",content:l.sendError?l.sendError:"Send",disabled:!l.paper||!l.destination||!l.authenticated||l.sendError,onClick:function(){return i("send")}})})]})})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.FloorPainter=void 0;var o=n(0),r=n(1),a=n(2),c=n(4),i=function(e,t){var n=(0,r.useBackend)(t),a=(n.act,n.data,e.image),c=e.isSelected,i=e.onSelect;return(0,o.createVNode)(1,"img",null,null,1,{src:"data:image/jpeg;base64,"+a,style:{"border-style":c?"solid":"none","border-width":"2px","border-color":"orange",padding:c?"2px":"4px"},onClick:i})};t.FloorPainter=function(e,t){var n=(0,r.useBackend)(t),l=n.act,d=n.data,u=d.availableStyles,s=d.selectedStyle,m=d.selectedDir,p=d.directionsPreview,f=d.allStylesPreview;return(0,o.createComponentVNode)(2,c.Window,{resizable:!0,children:(0,o.createComponentVNode)(2,c.Window.Content,{scrollable:!0,children:(0,o.createComponentVNode)(2,a.Section,{title:"Decal setup",children:[(0,o.createComponentVNode)(2,a.Flex,{children:[(0,o.createComponentVNode)(2,a.Flex.Item,{children:(0,o.createComponentVNode)(2,a.Button,{icon:"chevron-left",onClick:function(){return l("cycle_style",{offset:-1})}})}),(0,o.createComponentVNode)(2,a.Flex.Item,{children:(0,o.createComponentVNode)(2,a.Dropdown,{options:u,selected:s,width:"150px",height:"20px",ml:"2px",mr:"2px",nochevron:"true",onSelected:function(e){return l("select_style",{style:e})}})}),(0,o.createComponentVNode)(2,a.Flex.Item,{children:(0,o.createComponentVNode)(2,a.Button,{icon:"chevron-right",onClick:function(){return l("cycle_style",{offset:1})}})})]}),(0,o.createComponentVNode)(2,a.Box,{mt:"5px",mb:"5px",children:(0,o.createComponentVNode)(2,a.Flex,{overflowY:"auto",maxHeight:"220px",wrap:"wrap",children:u.map((function(e){return(0,o.createComponentVNode)(2,a.Flex.Item,{children:(0,o.createComponentVNode)(2,i,{image:f[e],isSelected:s===e,onSelect:function(){return l("select_style",{style:e})}})},"{style}")}))})}),(0,o.createComponentVNode)(2,a.LabeledList,{children:(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Direction",children:(0,o.createComponentVNode)(2,a.Table,{style:{display:"inline"},children:["north","","south"].map((function(e){return(0,o.createComponentVNode)(2,a.Table.Row,{children:[e+"west",e,e+"east"].map((function(e){return(0,o.createComponentVNode)(2,a.Table.Cell,{style:{"vertical-align":"middle","text-align":"center"},children:""===e?(0,o.createComponentVNode)(2,a.Icon,{name:"arrows-alt",size:3}):(0,o.createComponentVNode)(2,i,{image:p[e],isSelected:e===m,onSelect:function(){return l("select_direction",{direction:e})}})},e)}))},e)}))})})})]})})})}},function(e,t,n){"use strict";t.__esModule=!0,t.GPS=void 0;var o=n(0),r=n(15),a=n(1),c=n(2),i=n(4),l=function(e){return e?"("+e.join(", ")+")":"ERROR"};t.GPS=function(e,t){var n=(0,a.useBackend)(t).data,r=n.emped,l=n.active,p=n.area,f=n.position,h=n.saved;return(0,o.createComponentVNode)(2,i.Window,{children:(0,o.createComponentVNode)(2,i.Window.Content,{children:(0,o.createComponentVNode)(2,c.Flex,{direction:"column",height:"100%",children:r?(0,o.createComponentVNode)(2,c.Flex.Item,{grow:"1",basis:"0",children:(0,o.createComponentVNode)(2,d,{emp:!0})}):(0,o.createFragment)([(0,o.createComponentVNode)(2,c.Flex.Item,{children:(0,o.createComponentVNode)(2,u)}),l?(0,o.createFragment)([(0,o.createComponentVNode)(2,c.Flex.Item,{mt:"0.5rem",children:(0,o.createComponentVNode)(2,s,{area:p,position:f})}),h&&(0,o.createComponentVNode)(2,c.Flex.Item,{mt:"0.5rem",children:(0,o.createComponentVNode)(2,s,{title:"Saved Position",position:h})}),(0,o.createComponentVNode)(2,c.Flex.Item,{mt:"0.5rem",grow:"1",basis:"0",children:(0,o.createComponentVNode)(2,m,{height:"100%"})})],0):(0,o.createComponentVNode)(2,d)],0)})})})};var d=function(e,t){var n=e.emp;return(0,o.createComponentVNode)(2,c.Section,{mt:"0.5rem",width:"100%",height:"100%",stretchContents:!0,children:(0,o.createComponentVNode)(2,c.Box,{width:"100%",height:"100%",color:"label",textAlign:"center",children:(0,o.createComponentVNode)(2,c.Flex,{height:"100%",children:(0,o.createComponentVNode)(2,c.Flex.Item,{grow:"1",align:"center",color:"label",children:[(0,o.createComponentVNode)(2,c.Icon,{name:n?"ban":"power-off",mb:"0.5rem",size:"5"}),(0,o.createVNode)(1,"br"),n?"ERROR: Device temporarily lost signal.":"Device is disabled."]})})})})},u=function(e,t){var n=(0,a.useBackend)(t),r=n.act,i=n.data,l=i.active,d=i.tag,u=i.same_z,s=(0,a.useLocalState)(t,"newTag",d),m=s[0],p=s[1];return(0,o.createComponentVNode)(2,c.Section,{title:"Settings",buttons:(0,o.createComponentVNode)(2,c.Button,{selected:l,icon:l?"toggle-on":"toggle-off",content:l?"On":"Off",onClick:function(){return r("toggle")}}),children:(0,o.createComponentVNode)(2,c.LabeledList,{children:[(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Tag",children:[(0,o.createComponentVNode)(2,c.Input,{width:"5rem",value:d,onEnter:function(){return r("tag",{newtag:m})},onInput:function(e,t){return p(t)}}),(0,o.createComponentVNode)(2,c.Button,{disabled:d===m,width:"20px",mb:"0",ml:"0.25rem",onClick:function(){return r("tag",{newtag:m})},children:(0,o.createComponentVNode)(2,c.Icon,{name:"pen"})})]}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Range",children:(0,o.createComponentVNode)(2,c.Button,{selected:!u,icon:u?"compress":"expand",content:u?"Local Sector":"Global",onClick:function(){return r("same_z")}})})]})})},s=function(e,t){var n=e.title,r=e.area,a=e.position;return(0,o.createComponentVNode)(2,c.Section,{title:n||"Position",children:(0,o.createComponentVNode)(2,c.Box,{fontSize:"1.5rem",children:[r&&(0,o.createFragment)([r,(0,o.createVNode)(1,"br")],0),l(a)]})})},m=function(e,t){var n=(0,a.useBackend)(t).data,i=n.position,d=n.signals;return(0,o.normalizeProps)((0,o.createComponentVNode)(2,c.Section,Object.assign({title:"Signals",overflow:"auto"},e,{children:(0,o.createComponentVNode)(2,c.Table,{children:d.map((function(e){return Object.assign({},e,{},function(e,t){if(e&&t){if(e[2]!==t[2])return null;var n=Math.atan2(t[1]-e[1],t[0]-e[0]),o=Math.sqrt(Math.pow(t[1]-e[1],2)+Math.pow(t[0]-e[0],2));return{angle:(0,r.rad2deg)(n),distance:o}}}(i,e.position))})).map((function(e,t){return(0,o.createComponentVNode)(2,c.Table.Row,{backgroundColor:t%2==0&&"rgba(255, 255, 255, 0.05)",children:[(0,o.createComponentVNode)(2,c.Table.Cell,{width:"30%",verticalAlign:"middle",color:"label",p:"0.25rem",bold:!0,children:e.tag}),(0,o.createComponentVNode)(2,c.Table.Cell,{verticalAlign:"middle",color:"grey",children:e.area}),(0,o.createComponentVNode)(2,c.Table.Cell,{verticalAlign:"middle",collapsing:!0,children:e.distance!==undefined&&(0,o.createComponentVNode)(2,c.Box,{opacity:Math.max(1-Math.min(e.distance,100)/100,.5),children:[(0,o.createComponentVNode)(2,c.Icon,{name:e.distance>0?"arrow-right":"circle",rotation:-e.angle}),"\xa0",Math.floor(e.distance)+"m"]})}),(0,o.createComponentVNode)(2,c.Table.Cell,{verticalAlign:"middle",pr:"0.25rem",collapsing:!0,children:l(e.position)})]},t)}))})})))}},function(e,t,n){"use strict";t.__esModule=!0,t.GenericCrewManifest=void 0;var o=n(0),r=n(2),a=n(4),c=n(135);t.GenericCrewManifest=function(e,t){return(0,o.createComponentVNode)(2,a.Window,{resizable:!0,theme:"nologo",children:(0,o.createComponentVNode)(2,a.Window.Content,{scrollable:!0,children:(0,o.createComponentVNode)(2,r.Section,{noTopPadding:!0,children:(0,o.createComponentVNode)(2,c.CrewManifest)})})})}},function(e,t,n){"use strict";t.__esModule=!0,t.GhostHudPanel=void 0;var o=n(0),r=n(1),a=n(2),c=n(4);t.GhostHudPanel=function(e,t){var n=(0,r.useBackend)(t).data,l=n.security,d=n.medical,u=n.diagnostic,s=n.radioactivity,m=n.ahud;return(0,o.createComponentVNode)(2,c.Window,{theme:"nologo",children:(0,o.createComponentVNode)(2,c.Window.Content,{children:(0,o.createComponentVNode)(2,a.Section,{children:[(0,o.createComponentVNode)(2,i,{label:"Medical",type:"medical",is_active:d}),(0,o.createComponentVNode)(2,i,{label:"Security",type:"security",is_active:l}),(0,o.createComponentVNode)(2,i,{label:"Diagnostic",type:"diagnostic",is_active:u}),(0,o.createComponentVNode)(2,a.Divider),(0,o.createComponentVNode)(2,i,{label:"Radioactivity",type:"radioactivity",is_active:s,act_on:"rads_on",act_off:"rads_off"}),(0,o.createComponentVNode)(2,a.Divider),(0,o.createComponentVNode)(2,i,{label:"Antag HUD",is_active:m,act_on:"ahud_on",act_off:"ahud_off"})]})})})};var i=function(e,t){var n=(0,r.useBackend)(t).act,c=e.label,i=e.type,l=void 0===i?null:i,d=e.is_active,u=e.act_on,s=void 0===u?"hud_on":u,m=e.act_off,p=void 0===m?"hud_off":m;return(0,o.createComponentVNode)(2,a.Flex,{pt:.3,color:"label",children:[(0,o.createComponentVNode)(2,a.Flex.Item,{pl:.5,align:"center",width:"80%",children:c}),(0,o.createComponentVNode)(2,a.Flex.Item,{children:(0,o.createComponentVNode)(2,a.Button,{mr:.6,content:d?"On":"Off",icon:d?"toggle-on":"toggle-off",selected:d,onClick:function(){return n(d?p:s,{hud_type:l})}})})]})}},function(e,t,n){"use strict";t.__esModule=!0,t.GravityGen=void 0;var o=n(0),r=n(1),a=n(2),c=n(4);t.GravityGen=function(e,t){var n,i=(0,r.useBackend)(t),l=i.act,d=i.data,u=d.charging_state,s=d.charge_count,m=d.breaker,p=d.ext_power;return(0,o.createComponentVNode)(2,c.Window,{children:(0,o.createComponentVNode)(2,c.Window.Content,{children:[function(e){if(e>0)return(0,o.createComponentVNode)(2,a.NoticeBox,{danger:!0,p:1.5,children:[(0,o.createVNode)(1,"b",null,"WARNING:",16)," Radiation Detected!"]})}(u),(0,o.createComponentVNode)(2,a.Section,{title:"Generator Status",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:m?"power-off":"times",content:m?"Online":"Offline",color:m?"green":"red",px:1.5,onClick:function(){return l("breaker")}}),children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Power Status",color:p?"good":"bad",children:(n=u,n>0?(0,o.createComponentVNode)(2,a.Box,{inline:!0,color:"average",children:["[ ",1===n?"Charging":"Discharging"," ]"]}):(0,o.createComponentVNode)(2,a.Box,{inline:!0,color:p?"good":"bad",children:["[ ",p?"Powered":"Unpowered"," ]"]}))}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Gravity Charge",children:(0,o.createComponentVNode)(2,a.ProgressBar,{value:s/100,ranges:{good:[.9,Infinity],average:[.5,.9],bad:[-Infinity,.5]}})})]})})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.GuestPass=void 0;var o=n(0),r=n(1),a=n(2),c=n(4),i=n(78);t.GuestPass=function(e,t){var n=(0,r.useBackend)(t),l=n.act,d=n.data;return(0,o.createComponentVNode)(2,c.Window,{resizable:!0,children:(0,o.createComponentVNode)(2,c.Window.Content,{scrollable:!0,children:[(0,o.createComponentVNode)(2,a.Tabs,{children:[(0,o.createComponentVNode)(2,a.Tabs.Tab,{icon:"id-card",selected:!d.showlogs,onClick:function(){return l("mode",{mode:0})},children:"Issue Pass"}),(0,o.createComponentVNode)(2,a.Tabs.Tab,{icon:"scroll",selected:d.showlogs,onClick:function(){return l("mode",{mode:1})},children:["Records (",d.issue_log.length,")"]})]}),(0,o.createComponentVNode)(2,a.Section,{title:"Authorization",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"ID Card",children:(0,o.createComponentVNode)(2,a.Button,{icon:d.scan_name?"eject":"id-card",selected:d.scan_name,content:d.scan_name?d.scan_name:"-----",tooltip:d.scan_name?"Eject ID":"Insert ID",onClick:function(){return l("scan")}})})})}),!d.showlogs&&(0,o.createComponentVNode)(2,a.Section,{title:"Issue Guest Pass",children:[(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Issue To",children:(0,o.createComponentVNode)(2,a.Button,{icon:"pencil-alt",content:d.giv_name?d.giv_name:"-----",disabled:!d.scan_name,onClick:function(){return l("giv_name")}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Reason",children:(0,o.createComponentVNode)(2,a.Button,{icon:"pencil-alt",content:d.reason?d.reason:"-----",disabled:!d.scan_name,onClick:function(){return l("reason")}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Duration",children:(0,o.createComponentVNode)(2,a.Button,{icon:"pencil-alt",content:d.duration?d.duration:"-----",disabled:!d.scan_name,onClick:function(){return l("duration")}})})]}),!!d.scan_name&&(0,o.createFragment)([(0,o.createComponentVNode)(2,i.AccessList,{grantableList:d.grantableList,accesses:d.regions,selectedList:d.selectedAccess,accessMod:function(e){return l("access",{access:e})},grantAll:function(){return l("grant_all")},denyAll:function(){return l("clear_all")},grantDep:function(e){return l("grant_region",{region:e})},denyDep:function(e){return l("deny_region",{region:e})}}),(0,o.createComponentVNode)(2,a.Button,{icon:"id-card",content:d.printmsg,disabled:!d.canprint,onClick:function(){return l("issue")}})],4)]}),!!d.showlogs&&(0,o.createComponentVNode)(2,a.Section,{title:"Issuance Log",children:!!d.issue_log.length&&(0,o.createFragment)([(0,o.createComponentVNode)(2,a.LabeledList,{children:d.issue_log.map((function(e,t){return(0,o.createComponentVNode)(2,a.LabeledList.Item,{children:e},t)}))}),(0,o.createComponentVNode)(2,a.Button,{icon:"print",content:"Print",disabled:!d.scan_name,onClick:function(){return l("print")}})],4)||(0,o.createComponentVNode)(2,a.Box,{children:"None."})})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.HandheldChemDispenser=void 0;var o=n(0),r=n(1),a=n(2),c=n(4),i=[1,5,10,20,30,50];t.HandheldChemDispenser=function(e,t){return(0,o.createComponentVNode)(2,c.Window,{resizable:!0,children:(0,o.createComponentVNode)(2,c.Window.Content,{className:"Layout__content--flexColumn",children:[(0,o.createComponentVNode)(2,l),(0,o.createComponentVNode)(2,d)]})})};var l=function(e,t){var n=(0,r.useBackend)(t),c=n.act,l=n.data,d=l.amount,u=l.energy,s=l.maxEnergy,m=l.mode;return(0,o.createComponentVNode)(2,a.Section,{title:"Settings",flex:"content",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Energy",children:(0,o.createComponentVNode)(2,a.ProgressBar,{value:u,minValue:0,maxValue:s,ranges:{good:[.5*s,Infinity],average:[.25*s,.5*s],bad:[-Infinity,.25*s]},children:[u," / ",s," Units"]})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Amount",verticalAlign:"middle",children:(0,o.createComponentVNode)(2,a.Flex,{direction:"row",spacing:"1",children:i.map((function(e,t){return(0,o.createComponentVNode)(2,a.Flex.Item,{grow:"1",width:"14%",display:"inline-block",children:(0,o.createComponentVNode)(2,a.Button,{icon:"cog",selected:d===e,content:e,m:"0",width:"100%",onClick:function(){return c("amount",{amount:e})}})},t)}))})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Mode",verticalAlign:"middle",children:(0,o.createComponentVNode)(2,a.Flex,{direction:"row",justify:"space-between",children:[(0,o.createComponentVNode)(2,a.Button,{icon:"cog",selected:"dispense"===m,content:"Dispense",m:"0",width:"32%",onClick:function(){return c("mode",{mode:"dispense"})}}),(0,o.createComponentVNode)(2,a.Button,{icon:"cog",selected:"remove"===m,content:"Remove",m:"0",width:"32%",onClick:function(){return c("mode",{mode:"remove"})}}),(0,o.createComponentVNode)(2,a.Button,{icon:"cog",selected:"isolate"===m,content:"Isolate",m:"0",width:"32%",onClick:function(){return c("mode",{mode:"isolate"})}})]})})]})})},d=function(e,t){for(var n=(0,r.useBackend)(t),c=n.act,i=n.data,l=i.chemicals,d=void 0===l?[]:l,u=i.current_reagent,s=[],m=0;m<(d.length+1)%3;m++)s.push(!0);return(0,o.createComponentVNode)(2,a.Section,{title:i.glass?"Drink Selector":"Chemical Selector",flexGrow:"1",children:(0,o.createComponentVNode)(2,a.Flex,{direction:"row",wrap:"wrap",height:"100%",spacingPrecise:"2",align:"flex-start",alignContent:"flex-start",children:[d.map((function(e,t){return(0,o.createComponentVNode)(2,a.Flex.Item,{grow:"1",basis:"25%",height:"20px",width:"30%",display:"inline-block",children:(0,o.createComponentVNode)(2,a.Button,{icon:"arrow-circle-down",overflow:"hidden",textOverflow:"ellipsis",selected:u===e.id,width:"100%",height:"100%",align:"flex-start",content:e.title,onClick:function(){return c("dispense",{reagent:e.id})}})},t)})),s.map((function(e,t){return(0,o.createComponentVNode)(2,a.Flex.Item,{grow:"1",basis:"25%",height:"20px"},t)}))]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.Instrument=void 0;var o=n(0),r=n(15),a=n(1),c=n(2),i=n(4);t.Instrument=function(e,t){var n=(0,a.useBackend)(t);n.act,n.data;return(0,o.createComponentVNode)(2,i.Window,{children:[(0,o.createComponentVNode)(2,l),(0,o.createComponentVNode)(2,i.Window.Content,{scrollable:!0,children:[(0,o.createComponentVNode)(2,d),(0,o.createComponentVNode)(2,s)]})]})};var l=function(e,t){var n=(0,a.useBackend)(t),r=n.act;if(n.data.help)return(0,o.createComponentVNode)(2,c.Modal,{maxWidth:"75%",height:.75*window.innerHeight+"px",mx:"auto",py:"0",px:"0.5rem",children:(0,o.createComponentVNode)(2,c.Section,{height:"100%",title:"Help",level:"2",overflow:"auto",children:(0,o.createComponentVNode)(2,c.Box,{px:"0.5rem",mt:"-0.5rem",children:[(0,o.createVNode)(1,"h1",null,"Making a Song",16),(0,o.createVNode)(1,"p",null,[(0,o.createTextVNode)("Lines are a series of chords, separated by commas\xa0"),(0,o.createComponentVNode)(2,c.Box,{as:"span",color:"highlight",children:"(,)"}),(0,o.createTextVNode)(", each with notes seperated by hyphens\xa0"),(0,o.createComponentVNode)(2,c.Box,{as:"span",color:"highlight",children:"(-)"}),(0,o.createTextVNode)("."),(0,o.createVNode)(1,"br"),(0,o.createTextVNode)("Every note in a chord will play together, with the chord timed by the\xa0"),(0,o.createComponentVNode)(2,c.Box,{as:"span",color:"highlight",children:"tempo"}),(0,o.createTextVNode)(" as defined above.")],4),(0,o.createVNode)(1,"p",null,[(0,o.createTextVNode)("Notes are played by the\xa0"),(0,o.createComponentVNode)(2,c.Box,{as:"span",color:"good",children:"names of the note"}),(0,o.createTextVNode)(", and optionally, the\xa0"),(0,o.createComponentVNode)(2,c.Box,{as:"span",color:"average",children:"accidental"}),(0,o.createTextVNode)(", and/or the "),(0,o.createComponentVNode)(2,c.Box,{as:"span",color:"bad",children:"octave number"}),(0,o.createTextVNode)("."),(0,o.createVNode)(1,"br"),(0,o.createTextVNode)("By default, every note is\xa0"),(0,o.createComponentVNode)(2,c.Box,{as:"span",color:"average",children:"natural"}),(0,o.createTextVNode)(" and in\xa0"),(0,o.createComponentVNode)(2,c.Box,{as:"span",color:"bad",children:"octave 3"}),(0,o.createTextVNode)(". Defining a different state for either is remembered for each "),(0,o.createComponentVNode)(2,c.Box,{as:"span",color:"good",children:"note"}),(0,o.createTextVNode)("."),(0,o.createVNode)(1,"ul",null,[(0,o.createVNode)(1,"li",null,[(0,o.createComponentVNode)(2,c.Box,{as:"span",color:"highlight",children:"Example:"}),(0,o.createTextVNode)("\xa0"),(0,o.createVNode)(1,"i",null,"C,D,E,F,G,A,B",16),(0,o.createTextVNode)(" will play a\xa0"),(0,o.createComponentVNode)(2,c.Box,{as:"span",color:"good",children:"C"}),(0,o.createTextVNode)("\xa0"),(0,o.createComponentVNode)(2,c.Box,{as:"span",color:"average",children:"major"}),(0,o.createTextVNode)(" scale.")],4),(0,o.createVNode)(1,"li",null,[(0,o.createTextVNode)("After a note has an\xa0"),(0,o.createComponentVNode)(2,c.Box,{as:"span",color:"average",children:"accidental"}),(0,o.createTextVNode)(" or\xa0"),(0,o.createComponentVNode)(2,c.Box,{as:"span",color:"bad",children:"octave"}),(0,o.createTextVNode)(" placed, it will be remembered:\xa0"),(0,o.createVNode)(1,"i",null,"C,C4,C#,C3",16),(0,o.createTextVNode)(" is "),(0,o.createVNode)(1,"i",null,"C3,C4,C4#,C3#",16)],4)],4)],4),(0,o.createVNode)(1,"p",null,[(0,o.createComponentVNode)(2,c.Box,{as:"span",color:"highlight",children:"Chords"}),(0,o.createTextVNode)("\xa0can be played simply by seperating each note with a hyphen: "),(0,o.createVNode)(1,"i",null,"A-C#,Cn-E,E-G#,Gn-B",16),(0,o.createTextVNode)("."),(0,o.createVNode)(1,"br"),(0,o.createTextVNode)("A "),(0,o.createComponentVNode)(2,c.Box,{as:"span",color:"highlight",children:"pause"}),(0,o.createTextVNode)("\xa0may be denoted by an empty chord: "),(0,o.createVNode)(1,"i",null,"C,E,,C,G",16),(0,o.createTextVNode)("."),(0,o.createVNode)(1,"br"),(0,o.createTextVNode)("To make a chord be a different time, end it with /x, where the chord length will be length defined by\xa0"),(0,o.createComponentVNode)(2,c.Box,{as:"span",color:"highlight",children:"tempo / x"}),(0,o.createTextVNode)(",\xa0"),(0,o.createComponentVNode)(2,c.Box,{as:"span",color:"highlight",children:"eg:"}),(0,o.createTextVNode)(" "),(0,o.createVNode)(1,"i",null,"C,G/2,E/4",16),(0,o.createTextVNode)(".")],4),(0,o.createVNode)(1,"p",null,[(0,o.createTextVNode)("Combined, an example line is: "),(0,o.createVNode)(1,"i",null,"E-E4/4,F#/2,G#/8,B/8,E3-E4/4",16),(0,o.createTextVNode)("."),(0,o.createVNode)(1,"ul",null,[(0,o.createVNode)(1,"li",null,"Lines may be up to 300 characters.",16),(0,o.createVNode)(1,"li",null,"A song may only contain up to 1,000 lines.",16)],4)],4),(0,o.createVNode)(1,"p",null,[(0,o.createTextVNode)("Lines are a series of chords, separated by commas\xa0"),(0,o.createComponentVNode)(2,c.Box,{as:"span",color:"highlight",children:"(,)"}),(0,o.createTextVNode)(", each with notes seperated by hyphens\xa0"),(0,o.createComponentVNode)(2,c.Box,{as:"span",color:"highlight",children:"(-)"}),(0,o.createTextVNode)("."),(0,o.createVNode)(1,"br"),(0,o.createTextVNode)("Every note in a chord will play together, with the chord timed by the\xa0"),(0,o.createComponentVNode)(2,c.Box,{as:"span",color:"highlight",children:"tempo"}),(0,o.createTextVNode)(" as defined above.")],4),(0,o.createVNode)(1,"p",null,[(0,o.createTextVNode)("Notes are played by the\xa0"),(0,o.createComponentVNode)(2,c.Box,{as:"span",color:"good",children:"names of the note"}),(0,o.createTextVNode)(", and optionally, the\xa0"),(0,o.createComponentVNode)(2,c.Box,{as:"span",color:"average",children:"accidental"}),(0,o.createTextVNode)(", and/or the "),(0,o.createComponentVNode)(2,c.Box,{as:"span",color:"bad",children:"octave number"}),(0,o.createTextVNode)("."),(0,o.createVNode)(1,"br"),(0,o.createTextVNode)("By default, every note is\xa0"),(0,o.createComponentVNode)(2,c.Box,{as:"span",color:"average",children:"natural"}),(0,o.createTextVNode)(" and in\xa0"),(0,o.createComponentVNode)(2,c.Box,{as:"span",color:"bad",children:"octave 3"}),(0,o.createTextVNode)(". Defining a different state for either is remembered for each "),(0,o.createComponentVNode)(2,c.Box,{as:"span",color:"good",children:"note"}),(0,o.createTextVNode)("."),(0,o.createVNode)(1,"ul",null,[(0,o.createVNode)(1,"li",null,[(0,o.createComponentVNode)(2,c.Box,{as:"span",color:"highlight",children:"Example:"}),(0,o.createTextVNode)("\xa0"),(0,o.createVNode)(1,"i",null,"C,D,E,F,G,A,B",16),(0,o.createTextVNode)(" will play a\xa0"),(0,o.createComponentVNode)(2,c.Box,{as:"span",color:"good",children:"C"}),(0,o.createTextVNode)("\xa0"),(0,o.createComponentVNode)(2,c.Box,{as:"span",color:"average",children:"major"}),(0,o.createTextVNode)(" scale.")],4),(0,o.createVNode)(1,"li",null,[(0,o.createTextVNode)("After a note has an\xa0"),(0,o.createComponentVNode)(2,c.Box,{as:"span",color:"average",children:"accidental"}),(0,o.createTextVNode)(" or\xa0"),(0,o.createComponentVNode)(2,c.Box,{as:"span",color:"bad",children:"octave"}),(0,o.createTextVNode)(" placed, it will be remembered:\xa0"),(0,o.createVNode)(1,"i",null,"C,C4,C#,C3",16),(0,o.createTextVNode)(" is "),(0,o.createVNode)(1,"i",null,"C3,C4,C4#,C3#",16)],4)],4)],4),(0,o.createVNode)(1,"p",null,[(0,o.createComponentVNode)(2,c.Box,{as:"span",color:"highlight",children:"Chords"}),(0,o.createTextVNode)("\xa0can be played simply by seperating each note with a hyphen: "),(0,o.createVNode)(1,"i",null,"A-C#,Cn-E,E-G#,Gn-B",16),(0,o.createTextVNode)("."),(0,o.createVNode)(1,"br"),(0,o.createTextVNode)("A "),(0,o.createComponentVNode)(2,c.Box,{as:"span",color:"highlight",children:"pause"}),(0,o.createTextVNode)("\xa0may be denoted by an empty chord: "),(0,o.createVNode)(1,"i",null,"C,E,,C,G",16),(0,o.createTextVNode)("."),(0,o.createVNode)(1,"br"),(0,o.createTextVNode)("To make a chord be a different time, end it with /x, where the chord length will be length defined by\xa0"),(0,o.createComponentVNode)(2,c.Box,{as:"span",color:"highlight",children:"tempo / x"}),(0,o.createTextVNode)(",\xa0"),(0,o.createComponentVNode)(2,c.Box,{as:"span",color:"highlight",children:"eg:"}),(0,o.createTextVNode)(" "),(0,o.createVNode)(1,"i",null,"C,G/2,E/4",16),(0,o.createTextVNode)(".")],4),(0,o.createVNode)(1,"p",null,[(0,o.createTextVNode)("Combined, an example line is: "),(0,o.createVNode)(1,"i",null,"E-E4/4,F#/2,G#/8,B/8,E3-E4/4",16),(0,o.createTextVNode)("."),(0,o.createVNode)(1,"ul",null,[(0,o.createVNode)(1,"li",null,"Lines may be up to 300 characters.",16),(0,o.createVNode)(1,"li",null,"A song may only contain up to 1,000 lines.",16)],4)],4),(0,o.createVNode)(1,"h1",null,"Instrument Advanced Settings",16),(0,o.createVNode)(1,"ul",null,[(0,o.createVNode)(1,"li",null,[(0,o.createComponentVNode)(2,c.Box,{as:"span",color:"label",children:"Type:"}),(0,o.createTextVNode)("\xa0Whether the instrument is legacy or synthesized."),(0,o.createVNode)(1,"br"),(0,o.createTextVNode)("Legacy instruments have a collection of sounds that are selectively used depending on the note to play."),(0,o.createVNode)(1,"br"),(0,o.createTextVNode)("Synthesized instruments use a base sound and change its pitch to match the note to play.")],4),(0,o.createVNode)(1,"li",null,[(0,o.createComponentVNode)(2,c.Box,{as:"span",color:"label",children:"Current:"}),(0,o.createTextVNode)("\xa0Which instrument sample to play. Some instruments can be tuned to play different samples. Experiment!")],4),(0,o.createVNode)(1,"li",null,[(0,o.createComponentVNode)(2,c.Box,{as:"span",color:"label",children:"Note Shift/Note Transpose:"}),(0,o.createTextVNode)("\xa0The pitch to apply to all notes of the song.")],4),(0,o.createVNode)(1,"li",null,[(0,o.createComponentVNode)(2,c.Box,{as:"span",color:"label",children:"Sustain Mode:"}),(0,o.createTextVNode)("\xa0How a played note fades out."),(0,o.createVNode)(1,"br"),(0,o.createTextVNode)("Linear sustain means a note will fade out at a constant rate."),(0,o.createVNode)(1,"br"),(0,o.createTextVNode)("Exponential sustain means a note will fade out at an exponential rate, sounding smoother.")],4),(0,o.createVNode)(1,"li",null,[(0,o.createComponentVNode)(2,c.Box,{as:"span",color:"label",children:"Volume Dropoff Threshold:"}),(0,o.createTextVNode)("\xa0The volume threshold at which a note is fully stopped.")],4),(0,o.createVNode)(1,"li",null,[(0,o.createComponentVNode)(2,c.Box,{as:"span",color:"label",children:"Sustain indefinitely last held note:"}),(0,o.createTextVNode)("\xa0Whether the last note should be sustained indefinitely.")],4)],4),(0,o.createComponentVNode)(2,c.Button,{color:"grey",content:"Close",onClick:function(){return r("help")}})]})})})},d=function(e,t){var n=(0,a.useBackend)(t),i=n.act,l=n.data,d=l.lines,s=l.playing,m=l.repeat,p=l.maxRepeats,f=l.tempo,h=l.minTempo,C=l.maxTempo,N=l.tickLag,b=l.volume,g=l.minVolume,V=l.maxVolume,v=l.ready;return(0,o.createComponentVNode)(2,c.Section,{title:"Instrument",buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,c.Button,{icon:"info",content:"Help",onClick:function(){return i("help")}}),(0,o.createComponentVNode)(2,c.Button,{icon:"file",content:"New",onClick:function(){return i("newsong")}}),(0,o.createComponentVNode)(2,c.Button,{icon:"upload",content:"Import",onClick:function(){return i("import")}})],4),children:[(0,o.createComponentVNode)(2,c.LabeledList,{children:[(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Playback",children:[(0,o.createComponentVNode)(2,c.Button,{selected:s,disabled:0===d.length||m<0,icon:"play",content:"Play",onClick:function(){return i("play")}}),(0,o.createComponentVNode)(2,c.Button,{disabled:!s,icon:"stop",content:"Stop",onClick:function(){return i("stop")}})]}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Repeat",children:(0,o.createComponentVNode)(2,c.Slider,{animated:!0,minValue:"0",maxValue:p,value:m,stepPixelSize:"59",onChange:function(e,t){return i("repeat",{"new":t})}})}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Tempo",children:(0,o.createComponentVNode)(2,c.Box,{children:[(0,o.createComponentVNode)(2,c.Button,{disabled:f>=C,content:"-",as:"span",mr:"0.5rem",onClick:function(){return i("tempo",{"new":f+N})}}),(0,r.round)(600/f)," BPM",(0,o.createComponentVNode)(2,c.Button,{disabled:f<=h,content:"+",as:"span",ml:"0.5rem",onClick:function(){return i("tempo",{"new":f-N})}})]})}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Volume",children:(0,o.createComponentVNode)(2,c.Slider,{animated:!0,minValue:g,maxValue:V,value:b,stepPixelSize:"6",onDrag:function(e,t){return i("setvolume",{"new":t})}})}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Status",children:v?(0,o.createComponentVNode)(2,c.Box,{color:"good",children:"Ready"}):(0,o.createComponentVNode)(2,c.Box,{color:"bad",children:"Instrument Definition Error!"})})]}),(0,o.createComponentVNode)(2,u)]})},u=function(e,t){var n,i,l=(0,a.useBackend)(t),d=l.act,u=l.data,s=u.allowedInstrumentNames,m=u.instrumentLoaded,p=u.instrument,f=u.canNoteShift,h=u.noteShift,C=u.noteShiftMin,N=u.noteShiftMax,b=u.sustainMode,g=u.sustainLinearDuration,V=u.sustainExponentialDropoff,v=u.legacy,y=u.sustainDropoffVolume,_=u.sustainHeldNote;return 1===b?(n="Linear",i=(0,o.createComponentVNode)(2,c.Slider,{minValue:"0.1",maxValue:"5",value:g,step:"0.5",stepPixelSize:"85",format:function(e){return(0,r.round)(100*e)/100+" seconds"},onChange:function(e,t){return d("setlinearfalloff",{"new":t/10})}})):2===b&&(n="Exponential",i=(0,o.createComponentVNode)(2,c.Slider,{minValue:"1.025",maxValue:"10",value:V,step:"0.01",format:function(e){return(0,r.round)(1e3*e)/1e3+"% per decisecond"},onChange:function(e,t){return d("setexpfalloff",{"new":t})}})),s.sort(),(0,o.createComponentVNode)(2,c.Box,{my:-1,children:(0,o.createComponentVNode)(2,c.Collapsible,{mt:"1rem",mb:"0",title:"Advanced",children:(0,o.createComponentVNode)(2,c.Section,{mt:-1,children:[(0,o.createComponentVNode)(2,c.LabeledList,{children:[(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Type",children:v?"Legacy":"Synthesized"}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Current",children:m?(0,o.createComponentVNode)(2,c.Dropdown,{options:s,selected:p,width:"40%",onSelected:function(e){return d("switchinstrument",{name:e})}}):(0,o.createComponentVNode)(2,c.Box,{color:"bad",children:"None!"})}),!(v||!f)&&(0,o.createFragment)([(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Note Shift/Note Transpose",children:(0,o.createComponentVNode)(2,c.Slider,{minValue:C,maxValue:N,value:h,stepPixelSize:"2",format:function(e){return e+" keys / "+(0,r.round)(e/12*100)/100+" octaves"},onChange:function(e,t){return d("setnoteshift",{"new":t})}})}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Sustain Mode",children:[(0,o.createComponentVNode)(2,c.Dropdown,{options:["Linear","Exponential"],selected:n,onSelected:function(e){return d("setsustainmode",{"new":e})}}),i]}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Volume Dropoff Threshold",children:(0,o.createComponentVNode)(2,c.Slider,{animated:!0,minValue:"0.01",maxValue:"100",value:y,stepPixelSize:"6",onChange:function(e,t){return d("setdropoffvolume",{"new":t})}})}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Sustain indefinitely last held note",children:(0,o.createComponentVNode)(2,c.Button,{selected:_,icon:_?"toggle-on":"toggle-off",content:_?"Yes":"No",onClick:function(){return d("togglesustainhold")}})})],4)]}),(0,o.createComponentVNode)(2,c.Button,{icon:"redo",content:"Reset to Default",mt:"0.5rem",onClick:function(){return d("reset")}})]})})})},s=function(e,t){var n=(0,a.useBackend)(t),r=n.act,i=n.data,l=i.playing,d=i.lines,u=i.editing;return(0,o.createComponentVNode)(2,c.Section,{title:"Editor",buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,c.Button,{disabled:!u||l,icon:"plus",content:"Add Line",onClick:function(){return r("newline",{line:d.length+1})}}),(0,o.createComponentVNode)(2,c.Button,{selected:!u,icon:u?"chevron-up":"chevron-down",onClick:function(){return r("edit")}})],4),children:!!u&&(d.length>0?(0,o.createComponentVNode)(2,c.LabeledList,{children:d.map((function(e,t){return(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:t+1,buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,c.Button,{disabled:l,icon:"pen",onClick:function(){return r("modifyline",{line:t+1})}}),(0,o.createComponentVNode)(2,c.Button,{disabled:l,icon:"trash",onClick:function(){return r("deleteline",{line:t+1})}})],4),children:e},t)}))}):(0,o.createComponentVNode)(2,c.Box,{color:"label",children:"Song is empty."}))})}},function(e,t,n){"use strict";t.__esModule=!0,t.KeycardAuth=void 0;var o=n(0),r=n(1),a=n(2),c=n(4);t.KeycardAuth=function(e,t){var n=(0,r.useBackend)(t),i=n.act,l=n.data,d=(0,o.createComponentVNode)(2,a.Section,{title:"Keycard Authentication Device",children:(0,o.createComponentVNode)(2,a.Box,{children:"This device is used to trigger certain high security events. It requires the simultaneous swipe of two high-level ID cards."})});if(l.swiping||l.busy){var u=(0,o.createComponentVNode)(2,a.Box,{color:"red",children:"Waiting for YOU to swipe your ID..."});return l.hasSwiped||l.ertreason||"Emergency Response Team"!==l.event?l.hasConfirm?u=(0,o.createComponentVNode)(2,a.Box,{color:"green",children:"Request Confirmed!"}):l.isRemote?u=(0,o.createComponentVNode)(2,a.Box,{color:"orange",children:"Swipe your card to CONFIRM the remote request."}):l.hasSwiped&&(u=(0,o.createComponentVNode)(2,a.Box,{color:"orange",children:"Waiting for second person to confirm..."})):u=(0,o.createComponentVNode)(2,a.Box,{color:"red",children:"Fill out the reason for your ERT request."}),(0,o.createComponentVNode)(2,c.Window,{children:(0,o.createComponentVNode)(2,c.Window.Content,{children:[d,"Emergency Response Team"===l.event&&(0,o.createComponentVNode)(2,a.Section,{title:"Reason for ERT Call",children:(0,o.createComponentVNode)(2,a.Box,{children:(0,o.createComponentVNode)(2,a.Button,{color:l.ertreason?"":"red",icon:l.ertreason?"check":"pencil-alt",content:l.ertreason?l.ertreason:"-----",disabled:l.busy,onClick:function(){return i("ert")}})})}),(0,o.createComponentVNode)(2,a.Section,{title:l.event,buttons:(0,o.createComponentVNode)(2,a.Button,{icon:"arrow-circle-left",content:"Back",disabled:l.busy||l.hasConfirm,onClick:function(){return i("reset")}}),children:u})]})})}return(0,o.createComponentVNode)(2,c.Window,{children:(0,o.createComponentVNode)(2,c.Window.Content,{children:[d,(0,o.createComponentVNode)(2,a.Section,{title:"Choose Action",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Red Alert",children:(0,o.createComponentVNode)(2,a.Button,{icon:"exclamation-triangle",disabled:!l.redAvailable,onClick:function(){return i("triggerevent",{triggerevent:"Red Alert"})},content:"Red Alert"})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"ERT",children:(0,o.createComponentVNode)(2,a.Button,{icon:"broadcast-tower",onClick:function(){return i("triggerevent",{triggerevent:"Emergency Response Team"})},content:"Call ERT"})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Emergency Maint Access",children:[(0,o.createComponentVNode)(2,a.Button,{icon:"door-open",onClick:function(){return i("triggerevent",{triggerevent:"Grant Emergency Maintenance Access"})},content:"Grant"}),(0,o.createComponentVNode)(2,a.Button,{icon:"door-closed",onClick:function(){return i("triggerevent",{triggerevent:"Revoke Emergency Maintenance Access"})},content:"Revoke"})]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Emergency Station-Wide Access",children:[(0,o.createComponentVNode)(2,a.Button,{icon:"door-open",onClick:function(){return i("triggerevent",{triggerevent:"Activate Station-Wide Emergency Access"})},content:"Grant"}),(0,o.createComponentVNode)(2,a.Button,{icon:"door-closed",onClick:function(){return i("triggerevent",{triggerevent:"Deactivate Station-Wide Emergency Access"})},content:"Revoke"})]})]})})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.LaborClaimConsole=void 0;var o=n(0),r=n(19),a=n(1),c=n(2),i=n(4);t.LaborClaimConsole=function(e,t){return(0,o.createComponentVNode)(2,i.Window,{children:(0,o.createComponentVNode)(2,i.Window.Content,{children:[(0,o.createComponentVNode)(2,l),(0,o.createComponentVNode)(2,d)]})})};var l=function(e,t){var n=(0,a.useBackend)(t),r=n.act,i=n.data,l=i.can_go_home,d=i.emagged,u=i.id_inserted,s=i.id_name,m=i.id_points,p=i.id_goal,f=i.unclaimed_points,h=d?0:1,C=d?"ERR0R":l?"Completed!":"Insufficient";return(0,o.createComponentVNode)(2,c.Section,{children:(0,o.createComponentVNode)(2,c.LabeledList,{children:[(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Status",children:!!u&&(0,o.createComponentVNode)(2,c.ProgressBar,{value:m/p,ranges:{good:[h,Infinity],bad:[-Infinity,h]},children:m+" / "+p+" "+C})||!!d&&"ERR0R COMPLETED?!@"||"No ID inserted"}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Shuttle controls",children:(0,o.createComponentVNode)(2,c.Button,{fluid:!0,content:"Move shuttle",disabled:!l,onClick:function(){return r("move_shuttle")}})}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Unclaimed points",children:(0,o.createComponentVNode)(2,c.Button,{fluid:!0,content:"Claim points ("+f+")",disabled:!u||!f,onClick:function(){return r("claim_points")}})}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Inserted ID",children:(0,o.createComponentVNode)(2,c.Button,{fluid:!0,content:u?s:"-------------",onClick:function(){return r("handle_id")}})})]})})},d=function(e,t){var n=(0,a.useBackend)(t).data.ores;return(0,o.createComponentVNode)(2,c.Section,{title:"Material values",children:(0,o.createComponentVNode)(2,c.Table,{children:[(0,o.createComponentVNode)(2,c.Table.Row,{header:!0,children:[(0,o.createComponentVNode)(2,c.Table.Cell,{children:"Material"}),(0,o.createComponentVNode)(2,c.Table.Cell,{collapsing:!0,textAlign:"right",children:"Value"})]}),n.map((function(e){return(0,o.createComponentVNode)(2,c.Table.Row,{children:[(0,o.createComponentVNode)(2,c.Table.Cell,{children:(0,r.toTitleCase)(e.ore)}),(0,o.createComponentVNode)(2,c.Table.Cell,{collapsing:!0,textAlign:"right",children:(0,o.createComponentVNode)(2,c.Box,{color:"label",inline:!0,children:e.value})})]},e.ore)}))]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.LawManager=void 0;var o=n(0),r=n(1),a=n(2),c=n(4);t.LawManager=function(e,t){var n=(0,r.useBackend)(t),d=n.act,u=n.data,s=u.isAdmin,m=u.isSlaved,p=u.isMalf,f=u.isAIMalf,h=u.view;return(0,o.createComponentVNode)(2,c.Window,{children:(0,o.createComponentVNode)(2,c.Window.Content,{scrollable:!0,children:[!(!s||!m)&&(0,o.createComponentVNode)(2,a.NoticeBox,{children:["This unit is slaved to ",m,"."]}),!(!p&&!f)&&(0,o.createComponentVNode)(2,a.Box,{children:[(0,o.createComponentVNode)(2,a.Button,{content:"Law Management",selected:0===h,onClick:function(){return d("set_view",{set_view:0})}}),(0,o.createComponentVNode)(2,a.Button,{content:"Lawsets",selected:1===h,onClick:function(){return d("set_view",{set_view:1})}})]}),!(0!==h)&&(0,o.createComponentVNode)(2,i),!(1!==h)&&(0,o.createComponentVNode)(2,l)]})})};var i=function(e,t){var n=(0,r.useBackend)(t),c=n.act,i=n.data,l=i.has_zeroth_laws,u=i.zeroth_laws,s=i.has_ion_laws,m=i.ion_laws,p=i.ion_law_nr,f=i.has_inherent_laws,h=i.inherent_laws,C=i.has_supplied_laws,N=i.supplied_laws,b=i.channels,g=i.channel,V=i.isMalf,v=i.isAdmin,y=i.zeroth_law,_=i.ion_law,x=i.inherent_law,k=i.supplied_law,L=i.supplied_law_position;return(0,o.createFragment)([!!l&&(0,o.createComponentVNode)(2,d,{title:"ERR_NULL_VALUE",laws:u,ctx:t}),!!s&&(0,o.createComponentVNode)(2,d,{title:p,laws:m,ctx:t}),!!f&&(0,o.createComponentVNode)(2,d,{title:"Inherent",laws:h,ctx:t}),!!C&&(0,o.createComponentVNode)(2,d,{title:"Supplied",laws:N,ctx:t}),(0,o.createComponentVNode)(2,a.Section,{title:"Statement Settings",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Statement Channel",children:b.map((function(e){return(0,o.createComponentVNode)(2,a.Button,{content:e.channel,selected:e.channel===g,onClick:function(){return c("law_channel",{law_channel:e.channel})}},e.channel)}))}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"State Laws",children:(0,o.createComponentVNode)(2,a.Button,{content:"State Laws",onClick:function(){return c("state_laws")}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Law Notification",children:(0,o.createComponentVNode)(2,a.Button,{content:"Notify",onClick:function(){return c("notify_laws")}})})]})}),!!V&&(0,o.createComponentVNode)(2,a.Section,{title:"Add Laws",children:(0,o.createComponentVNode)(2,a.Table,{children:[(0,o.createComponentVNode)(2,a.Table.Row,{header:!0,children:[(0,o.createComponentVNode)(2,a.Table.Cell,{width:"10%",children:"Type"}),(0,o.createComponentVNode)(2,a.Table.Cell,{width:"60%",children:"Law"}),(0,o.createComponentVNode)(2,a.Table.Cell,{width:"10%",children:"Index"}),(0,o.createComponentVNode)(2,a.Table.Cell,{width:"20%",children:"Actions"})]}),!(!v||l)&&(0,o.createComponentVNode)(2,a.Table.Row,{children:[(0,o.createComponentVNode)(2,a.Table.Cell,{children:"Zero"}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:y}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:"N/A"}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:[(0,o.createComponentVNode)(2,a.Button,{content:"Edit",icon:"pencil-alt",onClick:function(){return c("change_zeroth_law")}}),(0,o.createComponentVNode)(2,a.Button,{content:"Add",icon:"plus",onClick:function(){return c("add_zeroth_law")}})]})]}),(0,o.createComponentVNode)(2,a.Table.Row,{children:[(0,o.createComponentVNode)(2,a.Table.Cell,{children:"Ion"}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:_}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:"N/A"}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:[(0,o.createComponentVNode)(2,a.Button,{content:"Edit",icon:"pencil-alt",onClick:function(){return c("change_ion_law")}}),(0,o.createComponentVNode)(2,a.Button,{content:"Add",icon:"plus",onClick:function(){return c("add_ion_law")}})]})]}),(0,o.createComponentVNode)(2,a.Table.Row,{children:[(0,o.createComponentVNode)(2,a.Table.Cell,{children:"Inherent"}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:x}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:"N/A"}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:[(0,o.createComponentVNode)(2,a.Button,{content:"Edit",icon:"pencil-alt",onClick:function(){return c("change_inherent_law")}}),(0,o.createComponentVNode)(2,a.Button,{content:"Add",icon:"plus",onClick:function(){return c("add_inherent_law")}})]})]}),(0,o.createComponentVNode)(2,a.Table.Row,{children:[(0,o.createComponentVNode)(2,a.Table.Cell,{children:"Supplied"}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:k}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:(0,o.createComponentVNode)(2,a.Button,{content:L,onClick:function(){return c("change_supplied_law_position")}})}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:[(0,o.createComponentVNode)(2,a.Button,{content:"Edit",icon:"pencil-alt",onClick:function(){return c("change_supplied_law")}}),(0,o.createComponentVNode)(2,a.Button,{content:"Add",icon:"plus",onClick:function(){return c("add_supplied_law")}})]})]})]})})],0)},l=function(e,t){var n=(0,r.useBackend)(t),c=n.act,i=n.data.law_sets;return(0,o.createComponentVNode)(2,a.Box,{children:i.map((function(e){return(0,o.createComponentVNode)(2,a.Section,{title:e.name+" - "+e.header,buttons:(0,o.createComponentVNode)(2,a.Button,{content:"Load Laws",icon:"download",onClick:function(){return c("transfer_laws",{transfer_laws:e.ref})}}),children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[e.laws.has_ion_laws>0&&e.laws.ion_laws.map((function(e){return(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:e.index,children:e.law},e.index)})),e.laws.has_zeroth_laws>0&&e.laws.zeroth_laws.map((function(e){return(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:e.index,children:e.law},e.index)})),e.laws.has_inherent_laws>0&&e.laws.inherent_laws.map((function(e){return(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:e.index,children:e.law},e.index)})),e.laws.has_supplied_laws>0&&e.laws.inherent_laws.map((function(e){return(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:e.index,children:e.law},e.index)}))]})},e.name)}))})},d=function(e,t){var n=(0,r.useBackend)(e.ctx),c=n.act,i=n.data.isMalf;return(0,o.createComponentVNode)(2,a.Section,{title:e.title+" Laws",children:(0,o.createComponentVNode)(2,a.Table,{children:[(0,o.createComponentVNode)(2,a.Table.Row,{header:!0,children:[(0,o.createComponentVNode)(2,a.Table.Cell,{width:"10%",children:"Index"}),(0,o.createComponentVNode)(2,a.Table.Cell,{width:"69%",children:"Law"}),(0,o.createComponentVNode)(2,a.Table.Cell,{width:"21%",children:"State?"})]}),e.laws.map((function(e){return(0,o.createComponentVNode)(2,a.Table.Row,{children:[(0,o.createComponentVNode)(2,a.Table.Cell,{children:e.index}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:e.law}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:[(0,o.createComponentVNode)(2,a.Button,{content:e.state?"Yes":"No",selected:e.state,onClick:function(){return c("state_law",{ref:e.ref,state_law:e.state?0:1})}}),!!i&&(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Button,{content:"Edit",icon:"pencil-alt",onClick:function(){return c("edit_law",{edit_law:e.ref})}}),(0,o.createComponentVNode)(2,a.Button,{content:"Delete",icon:"trash",color:"red",onClick:function(){return c("delete_law",{delete_law:e.ref})}})],4)]})]},e.law)}))]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.MechBayConsole=void 0;var o=n(0),r=n(1),a=n(2),c=n(4);t.MechBayConsole=function(e,t){var n=(0,r.useBackend)(t),i=n.act,l=n.data.recharge_port,d=l&&l.mech,u=d&&d.cell,s=d&&d.name;return(0,o.createComponentVNode)(2,c.Window,{resizable:!0,children:(0,o.createComponentVNode)(2,c.Window.Content,{children:(0,o.createComponentVNode)(2,a.Section,{title:s?"Mech status: "+s:"Mech status",textAlign:"center",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:"sync",content:"Sync",onClick:function(){return i("reconnect")}}),children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Integrity",children:!l&&(0,o.createComponentVNode)(2,a.NoticeBox,{children:"No power port detected. Please re-sync."})||!d&&(0,o.createComponentVNode)(2,a.NoticeBox,{children:"No mech detected."})||(0,o.createComponentVNode)(2,a.ProgressBar,{value:d.health/d.maxhealth,ranges:{good:[.7,Infinity],average:[.3,.7],bad:[-Infinity,.3]}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Power",children:!l&&(0,o.createComponentVNode)(2,a.NoticeBox,{children:"No power port detected. Please re-sync."})||!d&&(0,o.createComponentVNode)(2,a.NoticeBox,{children:"No mech detected."})||!u&&(0,o.createComponentVNode)(2,a.NoticeBox,{children:"No cell is installed."})||(0,o.createComponentVNode)(2,a.ProgressBar,{value:u.charge/u.maxcharge,ranges:{good:[.7,Infinity],average:[.3,.7],bad:[-Infinity,.3]},children:[(0,o.createComponentVNode)(2,a.AnimatedNumber,{value:u.charge})," / "+u.maxcharge]})})]})})})})}},function(e,t,n){"use strict";t.__esModule=!0,t.MechaControlConsole=void 0;var o=n(0),r=(n(15),n(1)),a=n(2),c=n(4),i=n(19);t.MechaControlConsole=function(e,t){var n=(0,r.useBackend)(t),l=n.act,d=n.data,u=d.beacons,s=d.stored_data;return s.length?(0,o.createComponentVNode)(2,c.Window,{resizable:!0,children:(0,o.createComponentVNode)(2,c.Window.Content,{scrollable:!0,children:(0,o.createComponentVNode)(2,a.Section,{title:"Log",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:"window-close",onClick:function(){return l("clear_log")}}),children:s.map((function(e){return(0,o.createComponentVNode)(2,a.Box,{children:[(0,o.createComponentVNode)(2,a.Box,{color:"label",children:["(",e.time,")"]}),(0,o.createComponentVNode)(2,a.Box,{children:(0,i.decodeHtmlEntities)(e.message)})]},e.time)}))})})}):(0,o.createComponentVNode)(2,c.Window,{resizable:!0,children:(0,o.createComponentVNode)(2,c.Window.Content,{scrollable:!0,children:u.length&&u.map((function(e){return(0,o.createComponentVNode)(2,a.Section,{title:e.name,buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Button,{icon:"comment",onClick:function(){return l("send_message",{mt:e.uid})},children:"Message"}),(0,o.createComponentVNode)(2,a.Button,{icon:"eye",onClick:function(){return l("get_log",{mt:e.uid})},children:"View Log"}),(0,o.createComponentVNode)(2,a.Button.Confirm,{color:"red",content:"EMP",icon:"bomb",onClick:function(){return l("shock",{mt:e.uid})}})],4),children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Health",children:(0,o.createComponentVNode)(2,a.ProgressBar,{ranges:{good:[.75*e.maxHealth,Infinity],average:[.5*e.maxHealth,.75*e.maxHealth],bad:[-Infinity,.5*e.maxHealth]},value:e.health,maxValue:e.maxHealth})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Cell Charge",children:e.cell&&(0,o.createComponentVNode)(2,a.ProgressBar,{ranges:{good:[.75*e.cellMaxCharge,Infinity],average:[.5*e.cellMaxCharge,.75*e.cellMaxCharge],bad:[-Infinity,.5*e.cellMaxCharge]},value:e.cellCharge,maxValue:e.cellMaxCharge})||(0,o.createComponentVNode)(2,a.NoticeBox,{children:"No Cell Installed"})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Air Tank",children:[e.airtank,"kPa"]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Pilot",children:e.pilot||"Unoccupied"}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Location",children:(0,i.toTitleCase)(e.location)||"Unknown"}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Active Equipment",children:e.active||"None"}),e.cargoMax&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Cargo Space",children:(0,o.createComponentVNode)(2,a.ProgressBar,{ranges:{bad:[.75*e.cargoMax,Infinity],average:[.5*e.cargoMax,.75*e.cargoMax],good:[-Infinity,.5*e.cargoMax]},value:e.cargoUsed,maxValue:e.cargoMax})})||null]})},e.name)}))||(0,o.createComponentVNode)(2,a.NoticeBox,{children:"No mecha beacons found."})})})}},function(e,t,n){"use strict";t.__esModule=!0,t.MedicalRecords=void 0;var o=n(0),r=n(1),a=n(2),c=n(49),i=n(4),l=n(132),d=n(133),u=n(136),s={Minor:"good",Medium:"average","Dangerous!":"bad",Harmful:"bad","BIOHAZARD THREAT!":"bad"},m=function(e,t){(0,c.modalOpen)(e,"edit",{field:t.edit,value:t.value})};t.MedicalRecords=function(e,t){var n,s=(0,r.useBackend)(t).data,m=s.loginState,C=s.screen;return m.logged_in?(2===C?n=(0,o.createComponentVNode)(2,p):3===C?n=(0,o.createComponentVNode)(2,f):4===C?n=(0,o.createComponentVNode)(2,h):5===C?n=(0,o.createComponentVNode)(2,b):6===C&&(n=(0,o.createComponentVNode)(2,g)),(0,o.createComponentVNode)(2,i.Window,{resizable:!0,children:[(0,o.createComponentVNode)(2,c.ComplexModal),(0,o.createComponentVNode)(2,i.Window.Content,{className:"Layout__content--flexColumn",children:[(0,o.createComponentVNode)(2,l.LoginInfo),(0,o.createComponentVNode)(2,u.TemporaryNotice),(0,o.createComponentVNode)(2,V),(0,o.createComponentVNode)(2,a.Section,{height:"100%",flexGrow:"1",children:n})]})]})):(0,o.createComponentVNode)(2,i.Window,{resizable:!0,children:(0,o.createComponentVNode)(2,i.Window.Content,{children:(0,o.createComponentVNode)(2,d.LoginScreen)})})};var p=function(e,t){var n=(0,r.useBackend)(t),c=n.act,i=n.data.records;return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Input,{fluid:!0,placeholder:"Search by Name, DNA, or ID",onChange:function(e,t){return c("search",{t1:t})}}),(0,o.createComponentVNode)(2,a.Box,{mt:"0.5rem",children:i.map((function(e,t){return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Button,{icon:"user",mb:"0.5rem",content:e.id+": "+e.name,onClick:function(){return c("d_rec",{d_rec:e.ref})}}),(0,o.createVNode)(1,"br")],4,t)}))})],4)},f=function(e,t){var n=(0,r.useBackend)(t).act;return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Button,{icon:"download",content:"Backup to Disk",disabled:!0}),(0,o.createVNode)(1,"br"),(0,o.createComponentVNode)(2,a.Button,{icon:"upload",content:"Upload from Disk",my:"0.5rem",disabled:!0}),(0,o.createTextVNode)(" "),(0,o.createVNode)(1,"br"),(0,o.createComponentVNode)(2,a.Button.Confirm,{icon:"trash",content:"Delete All Medical Records",onClick:function(){return n("del_all")}})],4)},h=function(e,t){var n=(0,r.useBackend)(t),c=n.act,i=n.data,l=i.medical,d=i.printing;return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Section,{title:"General Data",level:2,mt:"-6px",children:(0,o.createComponentVNode)(2,C)}),(0,o.createComponentVNode)(2,a.Section,{title:"Medical Data",level:2,children:(0,o.createComponentVNode)(2,N)}),(0,o.createComponentVNode)(2,a.Section,{title:"Actions",level:2,children:[(0,o.createComponentVNode)(2,a.Button.Confirm,{icon:"trash",disabled:!!l.empty,content:"Delete Medical Record",color:"bad",onClick:function(){return c("del_r")}}),(0,o.createComponentVNode)(2,a.Button,{icon:d?"spinner":"print",disabled:d,iconSpin:!!d,content:"Print Entry",ml:"0.5rem",onClick:function(){return c("print_p")}}),(0,o.createVNode)(1,"br"),(0,o.createComponentVNode)(2,a.Button,{icon:"arrow-left",content:"Back",mt:"0.5rem",onClick:function(){return c("screen",{screen:2})}})]})],4)},C=function(e,t){var n=(0,r.useBackend)(t).data.general;return n&&n.fields?(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Box,{width:"50%",float:"left",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:n.fields.map((function(e,n){return(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:e.field,children:[(0,o.createComponentVNode)(2,a.Box,{height:"20px",display:"inline-block",children:e.value}),!!e.edit&&(0,o.createComponentVNode)(2,a.Button,{icon:"pen",ml:"0.5rem",onClick:function(){return m(t,e)}})]},n)}))})}),(0,o.createComponentVNode)(2,a.Box,{width:"50%",float:"right",textAlign:"right",children:!!n.has_photos&&n.photos.map((function(e,t){return(0,o.createComponentVNode)(2,a.Box,{display:"inline-block",textAlign:"center",color:"label",children:[(0,o.createVNode)(1,"img",null,null,1,{src:e,style:{width:"96px","margin-bottom":"0.5rem","-ms-interpolation-mode":"nearest-neighbor"}}),(0,o.createVNode)(1,"br"),"Photo #",t+1]},t)}))})],4):(0,o.createComponentVNode)(2,a.Box,{color:"bad",children:"General records lost!"})},N=function(e,t){var n=(0,r.useBackend)(t),i=n.act,l=n.data.medical;return l&&l.fields?(0,o.createFragment)([(0,o.createComponentVNode)(2,a.LabeledList,{children:l.fields.map((function(e,n){return(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:e.field,children:[e.value,(0,o.createComponentVNode)(2,a.Button,{icon:"pen",ml:"0.5rem",mb:e.line_break?"1rem":"initial",onClick:function(){return m(t,e)}})]},n)}))}),(0,o.createComponentVNode)(2,a.Section,{title:"Comments/Log",level:2,children:[0===l.comments.length?(0,o.createComponentVNode)(2,a.Box,{color:"label",children:"No comments found."}):l.comments.map((function(e,t){return(0,o.createComponentVNode)(2,a.Box,{children:[(0,o.createComponentVNode)(2,a.Box,{color:"label",display:"inline",children:e.header}),(0,o.createVNode)(1,"br"),e.text,(0,o.createComponentVNode)(2,a.Button,{icon:"comment-slash",color:"bad",ml:"0.5rem",onClick:function(){return i("del_c",{del_c:t+1})}})]},t)})),(0,o.createComponentVNode)(2,a.Button,{icon:"comment-medical",content:"Add Entry",color:"good",mt:"0.5rem",mb:"0",onClick:function(){return(0,c.modalOpen)(t,"add_c")}})]})],4):(0,o.createComponentVNode)(2,a.Box,{color:"bad",children:["Medical records lost!",(0,o.createComponentVNode)(2,a.Button,{icon:"pen",content:"New Record",ml:"0.5rem",onClick:function(){return i("new")}})]})},b=function(e,t){var n=(0,r.useBackend)(t),c=n.act,i=n.data.virus;return i.sort((function(e,t){return e.name>t.name?1:-1})),i.map((function(e,t){return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Button,{icon:"flask",content:e.name,mb:"0.5rem",onClick:function(){return c("vir",{vir:e.D})}}),(0,o.createVNode)(1,"br")],4,t)}))},g=function(e,t){var n=(0,r.useBackend)(t).data.medbots;return 0===n.length?(0,o.createComponentVNode)(2,a.Box,{color:"label",children:"There are no Medbots."}):n.map((function(e,t){return(0,o.createComponentVNode)(2,a.Collapsible,{open:!0,title:e.name,children:(0,o.createComponentVNode)(2,a.Box,{px:"0.5rem",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Location",children:[e.area||"Unknown"," (",e.x,", ",e.y,")"]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Status",children:e.on?(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Box,{color:"good",children:"Online"}),(0,o.createComponentVNode)(2,a.Box,{mt:"0.5rem",children:e.use_beaker?"Reservoir: "+e.total_volume+"/"+e.maximum_volume:"Using internal synthesizer."})],4):(0,o.createComponentVNode)(2,a.Box,{color:"average",children:"Offline"})})]})})},t)}))},V=function(e,t){var n=(0,r.useBackend)(t),c=n.act,i=n.data.screen;return(0,o.createComponentVNode)(2,a.Tabs,{children:[(0,o.createComponentVNode)(2,a.Tabs.Tab,{selected:2===i,onClick:function(){return c("screen",{screen:2})},children:[(0,o.createComponentVNode)(2,a.Icon,{name:"list"}),"List Records"]}),(0,o.createComponentVNode)(2,a.Tabs.Tab,{selected:5===i,onClick:function(){return c("screen",{screen:5})},children:[(0,o.createComponentVNode)(2,a.Icon,{name:"database"}),"Virus Database"]}),(0,o.createComponentVNode)(2,a.Tabs.Tab,{selected:6===i,onClick:function(){return c("screen",{screen:6})},children:[(0,o.createComponentVNode)(2,a.Icon,{name:"plus-square"}),"Medbot Tracking"]}),(0,o.createComponentVNode)(2,a.Tabs.Tab,{selected:3===i,onClick:function(){return c("screen",{screen:3})},children:[(0,o.createComponentVNode)(2,a.Icon,{name:"wrench"}),"Record Maintenance"]})]})};(0,c.modalRegisterBodyOverride)("virus",(function(e,t){var n=e.args;return(0,o.createComponentVNode)(2,a.Section,{level:2,m:"-1rem",pb:"1rem",title:n.name||"Virus",children:(0,o.createComponentVNode)(2,a.Box,{mx:"0.5rem",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Number of stages",children:n.max_stages}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Spread",children:[n.spread_text," Transmission"]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Possible cure",children:n.cure}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Notes",children:n.desc}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Severity",color:s[n.severity],children:n.severity})]})})})}))},function(e,t,n){"use strict";t.__esModule=!0,t.MiningVendor=void 0;var o=n(0),r=n(19),a=n(1),c=n(2),i=n(4);var l={Alphabetical:function(e,t){return e-t},"By availability":function(e,t){return-(e.affordable-t.affordable)},"By price":function(e,t){return e.price-t.price}};t.MiningVendor=function(e,t){return(0,o.createComponentVNode)(2,i.Window,{children:(0,o.createComponentVNode)(2,i.Window.Content,{className:"Layout__content--flexColumn",children:[(0,o.createComponentVNode)(2,d),(0,o.createComponentVNode)(2,s),(0,o.createComponentVNode)(2,u)]})})};var d=function(e,t){var n=(0,a.useBackend)(t),r=n.act,i=n.data,l=i.has_id,d=i.id;return(0,o.createComponentVNode)(2,c.NoticeBox,{success:l,children:l?(0,o.createFragment)([(0,o.createComponentVNode)(2,c.Box,{display:"inline-block",verticalAlign:"middle",style:{float:"left"},children:["Logged in as ",d.name,".",(0,o.createVNode)(1,"br"),"You have ",d.points.toLocaleString("en-US")," points."]}),(0,o.createComponentVNode)(2,c.Button,{icon:"eject",content:"Eject ID",style:{float:"right"},onClick:function(){return r("logoff")}}),(0,o.createComponentVNode)(2,c.Box,{style:{clear:"both"}})],4):"Please insert an ID in order to make purchases."})},u=function(e,t){var n=(0,a.useBackend)(t),i=(n.act,n.data),d=i.has_id,u=i.id,s=i.items,p=(0,a.useLocalState)(t,"search",""),f=p[0],h=(p[1],(0,a.useLocalState)(t,"sort","Alphabetical")),C=h[0],N=(h[1],(0,a.useLocalState)(t,"descending",!1)),b=N[0],g=(N[1],(0,r.createSearch)(f,(function(e){return e[0]}))),V=!1,v=Object.entries(s).map((function(e,t){var n=Object.entries(e[1]).filter(g).map((function(e){return e[1].affordable=d&&u.points>=e[1].price,e[1]})).sort(l[C]);if(0!==n.length)return b&&(n=n.reverse()),V=!0,(0,o.createComponentVNode)(2,m,{title:e[0],items:n},e[0])}));return(0,o.createComponentVNode)(2,c.Flex.Item,{grow:"1",overflow:"auto",children:(0,o.createComponentVNode)(2,c.Section,{children:V?v:(0,o.createComponentVNode)(2,c.Box,{color:"label",children:"No items matching your criteria was found!"})})})},s=function(e,t){var n=(0,a.useLocalState)(t,"search",""),r=(n[0],n[1]),i=(0,a.useLocalState)(t,"sort",""),d=(i[0],i[1]),u=(0,a.useLocalState)(t,"descending",!1),s=u[0],m=u[1];return(0,o.createComponentVNode)(2,c.Box,{mb:"0.5rem",children:(0,o.createComponentVNode)(2,c.Flex,{width:"100%",children:[(0,o.createComponentVNode)(2,c.Flex.Item,{grow:"1",mr:"0.5rem",children:(0,o.createComponentVNode)(2,c.Input,{placeholder:"Search by item name..",width:"100%",onInput:function(e,t){return r(t)}})}),(0,o.createComponentVNode)(2,c.Flex.Item,{basis:"30%",children:(0,o.createComponentVNode)(2,c.Dropdown,{selected:"Alphabetical",options:Object.keys(l),width:"100%",lineHeight:"19px",onSelected:function(e){return d(e)}})}),(0,o.createComponentVNode)(2,c.Flex.Item,{children:(0,o.createComponentVNode)(2,c.Button,{icon:s?"arrow-down":"arrow-up",height:"19px",tooltip:s?"Descending order":"Ascending order",tooltipPosition:"bottom-left",ml:"0.5rem",onClick:function(){return m(!s)}})})]})})},m=function(e,t){var n=(0,a.useBackend)(t),r=n.act,i=n.data,l=e.title,d=e.items,u=function(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o=0||(r[n]=e[n]);return r}(e,["title","items"]);return(0,o.normalizeProps)((0,o.createComponentVNode)(2,c.Collapsible,Object.assign({open:!0,title:l},u,{children:d.map((function(e){return(0,o.createComponentVNode)(2,c.Box,{children:[(0,o.createComponentVNode)(2,c.Box,{display:"inline-block",verticalAlign:"middle",lineHeight:"20px",style:{float:"left"},children:e.name}),(0,o.createComponentVNode)(2,c.Button,{disabled:!i.has_id||i.id.points=0||(r[n]=e[n]);return r}var m=["security","engineering","medical","science","service","supply"],p={security:{title:"Security",fluff_text:"Help keep the crew safe"},engineering:{title:"Engineering",fluff_text:"Ensure the station runs smoothly"},medical:{title:"Medical",fluff_text:"Practice medicine and save lives"},science:{title:"Science",fluff_text:"Develop new technologies"},service:{title:"Service",fluff_text:"Provide amenities to the crew"},supply:{title:"Supply",fluff_text:"Keep the station supplied"}};t.Newscaster=function(e,t){var n,i=(0,a.useBackend)(t),s=i.act,m=i.data,p=m.is_security,N=m.is_admin,b=m.is_silent,V=m.is_printing,v=m.screen,y=m.channels,_=m.channel_idx,x=void 0===_?-1:_,k=(0,a.useLocalState)(t,"menuOpen",!1),L=k[0],B=k[1],w=(0,a.useLocalState)(t,"viewingPhoto",""),S=w[0],I=(w[1],(0,a.useLocalState)(t,"censorMode",!1)),T=I[0],A=I[1];0===v||2===v?n=(0,o.createComponentVNode)(2,h):1===v&&(n=(0,o.createComponentVNode)(2,C));var E=y.reduce((function(e,t){return e+t.unread}),0);return(0,o.createComponentVNode)(2,l.Window,{theme:p&&"security",children:[S?(0,o.createComponentVNode)(2,g):(0,o.createComponentVNode)(2,d.ComplexModal,{maxWidth:window.innerWidth/1.5+"px",maxHeight:window.innerHeight/1.5+"px"}),(0,o.createComponentVNode)(2,l.Window.Content,{children:(0,o.createComponentVNode)(2,c.Flex,{width:"100%",height:"100%",children:[(0,o.createComponentVNode)(2,c.Section,{stretchContents:!0,className:(0,r.classes)(["Newscaster__menu",L&&"Newscaster__menu--open"]),children:(0,o.createComponentVNode)(2,c.Flex,{direction:"column",height:"100%",children:[(0,o.createComponentVNode)(2,c.Box,{flex:"0 1 content",children:[(0,o.createComponentVNode)(2,f,{icon:"bars",title:"Toggle Menu",onClick:function(){return B(!L)}}),(0,o.createComponentVNode)(2,f,{icon:"newspaper",title:"Headlines",selected:0===v,onClick:function(){return s("headlines")},children:E>0&&(0,o.createComponentVNode)(2,c.Box,{className:"Newscaster__menuButton--unread",children:E>=10?"9+":E})}),(0,o.createComponentVNode)(2,f,{icon:"briefcase",title:"Job Openings",selected:1===v,onClick:function(){return s("jobs")}}),(0,o.createComponentVNode)(2,c.Divider)]}),(0,o.createComponentVNode)(2,c.Box,{flex:"2",overflowY:"auto",overflowX:"hidden",children:y.map((function(e){return(0,o.createComponentVNode)(2,f,{icon:e.icon,title:e.name,selected:2===v&&y[x-1]===e,onClick:function(){return s("channel",{uid:e.uid})},children:e.unread>0&&(0,o.createComponentVNode)(2,c.Box,{className:"Newscaster__menuButton--unread",children:e.unread>=10?"9+":e.unread})},e)}))}),(0,o.createComponentVNode)(2,c.Box,{width:"100%",flex:"0 0 content",children:[(0,o.createComponentVNode)(2,c.Divider),(!!p||!!N)&&(0,o.createFragment)([(0,o.createComponentVNode)(2,f,{security:!0,icon:"exclamation-circle",title:"Edit Wanted Notice",mb:"0.5rem",onClick:function(){return(0,d.modalOpen)(t,"wanted_notice")}}),(0,o.createComponentVNode)(2,f,{security:!0,icon:T?"minus-square":"minus-square-o",title:"Censor Mode: "+(T?"On":"Off"),mb:"0.5rem",onClick:function(){return A(!T)}}),(0,o.createComponentVNode)(2,c.Divider)],4),(0,o.createComponentVNode)(2,f,{icon:"pen-alt",title:"New Story",mb:"0.5rem",onClick:function(){return(0,d.modalOpen)(t,"create_story")}}),(0,o.createComponentVNode)(2,f,{icon:"plus-circle",title:"New Channel",onClick:function(){return(0,d.modalOpen)(t,"create_channel")}}),(0,o.createComponentVNode)(2,c.Divider),(0,o.createComponentVNode)(2,f,{icon:V?"spinner":"print",iconSpin:V,title:V?"Printing...":"Print Newspaper",onClick:function(){return s("print_newspaper")}}),(0,o.createComponentVNode)(2,f,{icon:b?"volume-mute":"volume-up",title:"Mute: "+(b?"On":"Off"),onClick:function(){return s("toggle_mute")}})]})]})}),(0,o.createComponentVNode)(2,c.Flex,{direction:"column",height:"100%",flex:"1",children:[(0,o.createComponentVNode)(2,u.TemporaryNotice),n]})]})})]})};var f=function(e,t){(0,a.useBackend)(t).act;var n=e.icon,i=void 0===n?"":n,l=e.iconSpin,d=e.selected,u=void 0!==d&&d,m=e.security,p=void 0!==m&&m,f=e.onClick,h=e.title,C=e.children,N=s(e,["icon","iconSpin","selected","security","onClick","title","children"]);return(0,o.normalizeProps)((0,o.createComponentVNode)(2,c.Box,Object.assign({className:(0,r.classes)(["Newscaster__menuButton",u&&"Newscaster__menuButton--selected",p&&"Newscaster__menuButton--security"]),onClick:f},N,{children:[u&&(0,o.createComponentVNode)(2,c.Box,{className:"Newscaster__menuButton--selectedBar"}),(0,o.createComponentVNode)(2,c.Icon,{name:i,spin:l,size:"2"}),(0,o.createComponentVNode)(2,c.Box,{className:"Newscaster__menuButton--title",children:h}),C]})))},h=function(e,t){var n=(0,a.useBackend)(t),r=n.act,i=n.data,l=i.screen,u=i.is_admin,s=i.channel_idx,m=i.channel_can_manage,p=i.channels,f=i.stories,h=i.wanted,C=(0,a.useLocalState)(t,"fullStories",[]),b=C[0],g=(C[1],(0,a.useLocalState)(t,"censorMode",!1)),V=g[0],v=(g[1],2===l&&s>-1?p[s-1]:null);return(0,o.createComponentVNode)(2,c.Flex,{direction:"column",height:"100%",flex:"1",children:[!!h&&(0,o.createComponentVNode)(2,N,{story:h,wanted:!0}),(0,o.createComponentVNode)(2,c.Section,{title:(0,o.createFragment)([(0,o.createComponentVNode)(2,c.Icon,{name:v?v.icon:"newspaper",mr:"0.5rem"}),v?v.name:"Headlines"],0),flexGrow:"1",children:f.length>0?f.slice().reverse().map((function(e){return!b.includes(e.uid)&&e.body.length+3>128?Object.assign({},e,{body_short:e.body.substr(0,124)+"..."}):e})).map((function(e){return(0,o.createComponentVNode)(2,N,{story:e},e)})):(0,o.createComponentVNode)(2,c.Box,{className:"Newscaster__emptyNotice",children:[(0,o.createComponentVNode)(2,c.Icon,{name:"times",size:"3"}),(0,o.createVNode)(1,"br"),"There are no stories at this time."]})}),!!v&&(0,o.createComponentVNode)(2,c.Section,{flexShrink:"1",title:(0,o.createFragment)([(0,o.createComponentVNode)(2,c.Icon,{name:"info-circle",mr:"0.5rem"}),(0,o.createTextVNode)("About")],4),buttons:(0,o.createFragment)([V&&(0,o.createComponentVNode)(2,c.Button,{disabled:!!v.admin&&!u,selected:v.censored,icon:v.censored?"comment-slash":"comment",content:v.censored?"Uncensor Channel":"Censor Channel",mr:"0.5rem",onClick:function(){return r("censor_channel",{uid:v.uid})}}),(0,o.createComponentVNode)(2,c.Button,{disabled:!m,icon:"cog",content:"Manage",onClick:function(){return(0,d.modalOpen)(t,"manage_channel",{uid:v.uid})}})],0),children:(0,o.createComponentVNode)(2,c.LabeledList,{children:[(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Description",children:v.description||"N/A"}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Owner",children:v.author||"N/A"}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Public",children:v["public"]?"Yes":"No"}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Total Views",children:[(0,o.createComponentVNode)(2,c.Icon,{name:"eye",mr:"0.5rem"}),f.reduce((function(e,t){return e+t.view_count}),0).toLocaleString()]})]})})]})},C=function(e,t){var n=(0,a.useBackend)(t),i=(n.act,n.data),l=i.jobs,d=i.wanted,u=Object.entries(l).reduce((function(e,t){t[0];return e+t[1].length}),0);return(0,o.createComponentVNode)(2,c.Flex,{direction:"column",height:"100%",flex:"1",children:[!!d&&(0,o.createComponentVNode)(2,N,{story:d,wanted:!0}),(0,o.createComponentVNode)(2,c.Section,{flexGrow:"1",title:(0,o.createFragment)([(0,o.createComponentVNode)(2,c.Icon,{name:"briefcase",mr:"0.5rem"}),(0,o.createTextVNode)("Job Openings")],4),buttons:(0,o.createComponentVNode)(2,c.Box,{mt:"0.25rem",color:"label",children:"Work for a better future at Nanotrasen"}),children:u>0?m.map((function(e){return Object.assign({},p[e],{id:e,jobs:l[e]})})).filter((function(e){return!!e&&e.jobs.length>0})).map((function(e){return(0,o.createComponentVNode)(2,c.Section,{className:(0,r.classes)(["Newscaster__jobCategory","Newscaster__jobCategory--"+e.id]),title:e.title,buttons:(0,o.createComponentVNode)(2,c.Box,{mt:"0.25rem",color:"label",children:e.fluff_text}),children:e.jobs.map((function(e){return(0,o.createComponentVNode)(2,c.Box,{"class":(0,r.classes)(["Newscaster__jobOpening",!!e.is_command&&"Newscaster__jobOpening--command"]),children:["\u2022 ",e.title]},e.title)}))},e.id)})):(0,o.createComponentVNode)(2,c.Box,{className:"Newscaster__emptyNotice",children:[(0,o.createComponentVNode)(2,c.Icon,{name:"times",size:"3"}),(0,o.createVNode)(1,"br"),"There are no openings at this time."]})}),(0,o.createComponentVNode)(2,c.Section,{flexShrink:"1",children:["Interested in serving Nanotrasen?",(0,o.createVNode)(1,"br"),"Sign up for any of the above position now at the ",(0,o.createVNode)(1,"b",null,"Head of Personnel's Office!",16),(0,o.createVNode)(1,"br"),(0,o.createComponentVNode)(2,c.Box,{as:"small",color:"label",children:"By signing up for a job at Nanotrasen, you agree to transfer your soul to the loyalty department of the omnipresent and helpful watcher of humanity."})]})]})},N=function(e,t){var n=(0,a.useBackend)(t),l=n.act,d=n.data,u=e.story,s=e.wanted,m=void 0!==s&&s,p=(0,a.useLocalState)(t,"fullStories",[]),f=p[0],h=p[1],C=(0,a.useLocalState)(t,"censorMode",!1),N=C[0];C[1];return(0,o.createComponentVNode)(2,c.Section,{className:(0,r.classes)(["Newscaster__story",m&&"Newscaster__story--wanted"]),title:(0,o.createFragment)([m&&(0,o.createComponentVNode)(2,c.Icon,{name:"exclamation-circle",mr:"0.5rem"}),(2&u.censor_flags?"[REDACTED]":u.title)||"News from "+u.author],0),buttons:(0,o.createComponentVNode)(2,c.Box,{mt:"0.25rem",children:(0,o.createComponentVNode)(2,c.Box,{color:"label",children:[!m&&N&&(0,o.createComponentVNode)(2,c.Box,{display:"inline",children:(0,o.createComponentVNode)(2,c.Button,{enabled:2&u.censor_flags,icon:2&u.censor_flags?"comment-slash":"comment",content:2&u.censor_flags?"Uncensor":"Censor",mr:"0.5rem",mt:"-0.25rem",onClick:function(){return l("censor_story",{uid:u.uid})}})}),(0,o.createComponentVNode)(2,c.Box,{display:"inline",children:[(0,o.createComponentVNode)(2,c.Icon,{name:"user"})," ",u.author," |\xa0",!m&&(0,o.createFragment)([(0,o.createComponentVNode)(2,c.Icon,{name:"eye"}),(0,o.createTextVNode)(" "),u.view_count.toLocaleString(),(0,o.createTextVNode)(" |\xa0")],0),(0,o.createComponentVNode)(2,c.Icon,{name:"clock"})," ",(0,i.timeAgo)(u.publish_time,d.world_time)]})]})}),children:(0,o.createComponentVNode)(2,c.Box,{children:2&u.censor_flags?"[REDACTED]":(0,o.createFragment)([!!u.has_photo&&(0,o.createComponentVNode)(2,b,{name:"story_photo_"+u.uid+".png",float:"right",ml:"0.5rem"}),(u.body_short||u.body).split("\n").map((function(e){return(0,o.createComponentVNode)(2,c.Box,{children:e||(0,o.createVNode)(1,"br")},e)})),u.body_short&&(0,o.createComponentVNode)(2,c.Button,{content:"Read more..",mt:"0.5rem",onClick:function(){return h([].concat(f,[u.uid]))}}),(0,o.createComponentVNode)(2,c.Box,{clear:"right"})],0)})})},b=function(e,t){var n=e.name,r=s(e,["name"]),i=(0,a.useLocalState)(t,"viewingPhoto",""),l=(i[0],i[1]);return(0,o.normalizeProps)((0,o.createComponentVNode)(2,c.Box,Object.assign({as:"img",className:"Newscaster__photo",src:n,onClick:function(){return l(n)}},r)))},g=function(e,t){var n=(0,a.useLocalState)(t,"viewingPhoto",""),r=n[0],i=n[1];return(0,o.createComponentVNode)(2,c.Modal,{className:"Newscaster__photoZoom",children:[(0,o.createComponentVNode)(2,c.Box,{as:"img",src:r}),(0,o.createComponentVNode)(2,c.Button,{icon:"times",content:"Close",color:"grey",mt:"1rem",onClick:function(){return i("")}})]})},V=function(e,t){var n=(0,a.useBackend)(t),r=(n.act,n.data),i=!!e.args.uid&&r.channels.filter((function(t){return t.uid===e.args.uid})).pop();if("manage_channel"!==e.id||i){var l="manage_channel"===e.id,u=!!e.args.is_admin,s=e.args.scanned_user,m=(0,a.useLocalState)(t,"author",(null==i?void 0:i.author)||s||"Unknown"),p=m[0],f=m[1],h=(0,a.useLocalState)(t,"name",(null==i?void 0:i.name)||""),C=h[0],N=h[1],b=(0,a.useLocalState)(t,"description",(null==i?void 0:i.description)||""),g=b[0],V=b[1],v=(0,a.useLocalState)(t,"icon",(null==i?void 0:i.icon)||"newspaper"),y=v[0],_=v[1],x=(0,a.useLocalState)(t,"isPublic",!!l&&!!(null==i?void 0:i["public"])),k=x[0],L=x[1],B=(0,a.useLocalState)(t,"adminLocked",1===(null==i?void 0:i.admin)||!1),w=B[0],S=B[1];return(0,o.createComponentVNode)(2,c.Section,{level:"2",m:"-1rem",pb:"1rem",title:l?"Manage "+i.name:"Create New Channel",children:[(0,o.createComponentVNode)(2,c.Box,{mx:"0.5rem",children:(0,o.createComponentVNode)(2,c.LabeledList,{children:[(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Owner",children:(0,o.createComponentVNode)(2,c.Input,{disabled:!u,width:"100%",value:p,onInput:function(e,t){return f(t)}})}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Name",children:(0,o.createComponentVNode)(2,c.Input,{width:"100%",placeholder:"50 characters max.",maxLength:"50",value:C,onInput:function(e,t){return N(t)}})}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Description (optional)",verticalAlign:"top",children:(0,o.createComponentVNode)(2,c.Input,{multiline:!0,width:"100%",placeholder:"128 characters max.",maxLength:"128",value:g,onInput:function(e,t){return V(t)}})}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Icon",children:[(0,o.createComponentVNode)(2,c.Input,{disabled:!u,value:y,width:"35%",mr:"0.5rem",onInput:function(e,t){return _(t)}}),(0,o.createComponentVNode)(2,c.Icon,{name:y,size:"2",verticalAlign:"middle",mr:"0.5rem"})]}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Accept Public Stories?",children:(0,o.createComponentVNode)(2,c.Button,{selected:k,icon:k?"toggle-on":"toggle-off",content:k?"Yes":"No",onClick:function(){return L(!k)}})}),u&&(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"CentComm Lock",verticalAlign:"top",children:(0,o.createComponentVNode)(2,c.Button,{selected:w,icon:w?"lock":"lock-open",content:w?"On":"Off",tooltip:"Locking this channel will make it editable by nobody but CentComm officers.",tooltipPosition:"top",onClick:function(){return S(!w)}})})]})}),(0,o.createComponentVNode)(2,c.Button.Confirm,{disabled:0===p.trim().length||0===C.trim().length,icon:"check",color:"good",content:"Submit",position:"absolute",right:"1rem",bottom:"-0.75rem",onClick:function(){(0,d.modalAnswer)(t,e.id,"",{author:p,name:C.substr(0,49),description:g.substr(0,128),icon:y,"public":k?1:0,admin_locked:w?1:0}),(0,a.deleteLocalState)(t,"author","name","description","icon","public")}})]})}(0,d.modalClose)(t)};(0,d.modalRegisterBodyOverride)("create_channel",V),(0,d.modalRegisterBodyOverride)("manage_channel",V),(0,d.modalRegisterBodyOverride)("create_story",(function(e,t){var n=(0,a.useBackend)(t),r=n.act,i=n.data,l=i.photo,u=i.channels,s=i.channel_idx,m=void 0===s?-1:s,p=!!e.args.is_admin,f=e.args.scanned_user,h=u.slice().sort((function(e,t){if(m<0)return 0;var n=u[m-1];return n.uid===e.uid?-1:n.uid===t.uid?1:void 0})).filter((function(e){return p||!e.frozen&&(e.author===f||!!e["public"])})),C=(0,a.useLocalState)(t,"author",f||"Unknown"),N=C[0],g=C[1],V=(0,a.useLocalState)(t,"channel",h.length>0?h[0].name:""),v=V[0],y=V[1],_=(0,a.useLocalState)(t,"title",""),x=_[0],k=_[1],L=(0,a.useLocalState)(t,"body",""),B=L[0],w=L[1],S=(0,a.useLocalState)(t,"adminLocked",!1),I=S[0],T=S[1];return(0,o.createComponentVNode)(2,c.Section,{level:2,m:"-1rem",pb:"1rem",title:"Create New Story",children:[(0,o.createComponentVNode)(2,c.Box,{mx:"0.5rem",children:(0,o.createComponentVNode)(2,c.LabeledList,{children:[(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Author",children:(0,o.createComponentVNode)(2,c.Input,{disabled:!p,width:"100%",value:N,onInput:function(e,t){return g(t)}})}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Channel",verticalAlign:"top",children:(0,o.createComponentVNode)(2,c.Dropdown,{selected:v,options:h.map((function(e){return e.name})),mb:"0",width:"100%",onSelected:function(e){return y(e)}})}),(0,o.createComponentVNode)(2,c.LabeledList.Divider),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Title",children:(0,o.createComponentVNode)(2,c.Input,{width:"100%",placeholder:"128 characters max.",maxLength:"128",value:x,onInput:function(e,t){return k(t)}})}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Story Text",verticalAlign:"top",children:(0,o.createComponentVNode)(2,c.Input,{fluid:!0,multiline:!0,placeholder:"1024 characters max.",maxLength:"1024",rows:"8",width:"100%",value:B,onInput:function(e,t){return w(t)}})}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Photo (optional)",verticalAlign:"top",children:(0,o.createComponentVNode)(2,c.Button,{icon:"image",selected:l,content:l?"Eject: "+l.name:"Insert Photo",tooltip:!l&&"Attach a photo to this story by holding the photograph in your hand.",onClick:function(){return r(l?"eject_photo":"attach_photo")}})}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Preview",verticalAlign:"top",children:(0,o.createComponentVNode)(2,c.Section,{noTopPadding:!0,title:x,maxHeight:"13.5rem",overflow:"auto",children:(0,o.createComponentVNode)(2,c.Box,{mt:"0.5rem",children:[!!l&&(0,o.createComponentVNode)(2,b,{name:"inserted_photo_"+l.uid+".png",float:"right"}),B.split("\n").map((function(e){return(0,o.createComponentVNode)(2,c.Box,{children:e||(0,o.createVNode)(1,"br")},e)})),(0,o.createComponentVNode)(2,c.Box,{clear:"right"})]})})}),p&&(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"CentComm Lock",verticalAlign:"top",children:(0,o.createComponentVNode)(2,c.Button,{selected:I,icon:I?"lock":"lock-open",content:I?"On":"Off",tooltip:"Locking this story will make it censorable by nobody but CentComm officers.",tooltipPosition:"top",onClick:function(){return T(!I)}})})]})}),(0,o.createComponentVNode)(2,c.Button.Confirm,{disabled:0===N.trim().length||0===v.trim().length||0===x.trim().length||0===B.trim().length,icon:"check",color:"good",content:"Submit",position:"absolute",right:"1rem",bottom:"-0.75rem",onClick:function(){(0,d.modalAnswer)(t,"create_story","",{author:N,channel:v,title:x.substr(0,127),body:B.substr(0,1023),admin_locked:I?1:0}),(0,a.deleteLocalState)(t,"author","channel","title","body")}})]})})),(0,d.modalRegisterBodyOverride)("wanted_notice",(function(e,t){var n=(0,a.useBackend)(t),r=n.act,i=n.data,l=i.photo,u=i.wanted,s=!!e.args.is_admin,m=e.args.scanned_user,p=(0,a.useLocalState)(t,"author",(null==u?void 0:u.author)||m||"Unknown"),f=p[0],h=p[1],C=(0,a.useLocalState)(t,"name",(null==u?void 0:u.title.substr(8))||""),N=C[0],g=C[1],V=(0,a.useLocalState)(t,"description",(null==u?void 0:u.body)||""),v=V[0],y=V[1],_=(0,a.useLocalState)(t,"adminLocked",1===(null==u?void 0:u.admin_locked)||!1),x=_[0],k=_[1];return(0,o.createComponentVNode)(2,c.Section,{level:"2",m:"-1rem",pb:"1rem",title:"Manage Wanted Notice",children:[(0,o.createComponentVNode)(2,c.Box,{mx:"0.5rem",children:(0,o.createComponentVNode)(2,c.LabeledList,{children:[(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Authority",children:(0,o.createComponentVNode)(2,c.Input,{disabled:!s,width:"100%",value:f,onInput:function(e,t){return h(t)}})}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Name",children:(0,o.createComponentVNode)(2,c.Input,{width:"100%",value:N,maxLength:"128",onInput:function(e,t){return g(t)}})}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Description",verticalAlign:"top",children:(0,o.createComponentVNode)(2,c.Input,{multiline:!0,width:"100%",value:v,maxLength:"512",rows:"4",onInput:function(e,t){return y(t)}})}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Photo (optional)",verticalAlign:"top",children:[(0,o.createComponentVNode)(2,c.Button,{icon:"image",selected:l,content:l?"Eject: "+l.name:"Insert Photo",tooltip:!l&&"Attach a photo to this wanted notice by holding the photograph in your hand.",tooltipPosition:"top",onClick:function(){return r(l?"eject_photo":"attach_photo")}}),!!l&&(0,o.createComponentVNode)(2,b,{name:"inserted_photo_"+l.uid+".png",float:"right"})]}),s&&(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"CentComm Lock",verticalAlign:"top",children:(0,o.createComponentVNode)(2,c.Button,{selected:x,icon:x?"lock":"lock-open",content:x?"On":"Off",tooltip:"Locking this wanted notice will make it editable by nobody but CentComm officers.",tooltipPosition:"top",onClick:function(){return k(!x)}})})]})}),(0,o.createComponentVNode)(2,c.Button.Confirm,{disabled:!u,icon:"eraser",color:"danger",content:"Clear",position:"absolute",right:"7.25rem",bottom:"-0.75rem",onClick:function(){r("clear_wanted_notice"),(0,d.modalClose)(t),(0,a.deleteLocalState)(t,"author","name","description","admin_locked")}}),(0,o.createComponentVNode)(2,c.Button.Confirm,{disabled:0===f.trim().length||0===N.trim().length||0===v.trim().length,icon:"check",color:"good",content:"Submit",position:"absolute",right:"1rem",bottom:"-0.75rem",onClick:function(){(0,d.modalAnswer)(t,e.id,"",{author:f,name:N.substr(0,127),description:v.substr(0,511),admin_locked:x?1:0}),(0,a.deleteLocalState)(t,"author","name","description","admin_locked")}})]})}))},function(e,t,n){"use strict";t.__esModule=!0,t.NuclearBomb=void 0;var o=n(0),r=n(1),a=n(2),c=n(4);t.NuclearBomb=function(e,t){var n=(0,r.useBackend)(t),i=n.act,l=n.data;return l.extended?(0,o.createComponentVNode)(2,c.Window,{children:(0,o.createComponentVNode)(2,c.Window.Content,{children:[(0,o.createComponentVNode)(2,a.Section,{title:"Authorization",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Auth Disk",children:(0,o.createComponentVNode)(2,a.Button,{icon:l.authdisk?"eject":"id-card",selected:l.authdisk,content:l.diskname?l.diskname:"-----",tooltip:l.authdisk?"Eject Disk":"Insert Disk",onClick:function(){return i("auth")}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Auth Code",children:(0,o.createComponentVNode)(2,a.Button,{icon:"key",disabled:!l.authdisk,selected:l.authcode,content:l.codemsg,onClick:function(){return i("code")}})})]})}),(0,o.createComponentVNode)(2,a.Section,{title:"Arming & Disarming",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Bolted to floor",children:(0,o.createComponentVNode)(2,a.Button,{icon:l.anchored?"check":"times",selected:l.anchored,disabled:!l.authdisk,content:l.anchored?"YES":"NO",onClick:function(){return i("toggle_anchor")}})}),l.authfull&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Time Left",children:(0,o.createComponentVNode)(2,a.Button,{icon:"stopwatch",content:l.time,disabled:!l.authfull,tooltip:"Set Timer",onClick:function(){return i("set_time")}})})||(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Time Left",color:l.timer?"red":"",children:l.time+"s"}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Safety",children:(0,o.createComponentVNode)(2,a.Button,{icon:l.safety?"check":"times",selected:l.safety,disabled:!l.authfull,content:l.safety?"ON":"OFF",tooltip:l.safety?"Disable Safety":"Enable Safety",onClick:function(){return i("toggle_safety")}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Arm/Disarm",children:(0,o.createComponentVNode)(2,a.Button,{icon:(l.timer,"bomb"),disabled:l.safety||!l.authfull,color:"red",content:l.timer?"DISARM THE NUKE":"ARM THE NUKE",onClick:function(){return i("toggle_armed")}})})]})})]})}):(0,o.createComponentVNode)(2,c.Window,{children:(0,o.createComponentVNode)(2,c.Window.Content,{children:(0,o.createComponentVNode)(2,a.Section,{title:"Deployment",children:(0,o.createComponentVNode)(2,a.Button,{icon:"exclamation-triangle",content:"Deploy Nuclear Device (will bolt device to floor)",onClick:function(){return i("deploy")}})})})})}},function(e,t,n){"use strict";t.__esModule=!0,t.OperatingComputer=void 0;var o=n(0),r=n(15),a=n(1),c=n(4),i=n(2),l=[["good","Conscious"],["average","Unconscious"],["bad","DEAD"]],d=[["Resp.","oxyLoss"],["Toxin","toxLoss"],["Brute","bruteLoss"],["Burn","fireLoss"]],u={average:[.25,.5],bad:[.5,Infinity]},s=["bad","average","average","good","average","average","bad"];t.OperatingComputer=function(e,t){var n,r=(0,a.useBackend)(t),l=r.act,d=r.data,u=d.hasOccupant,s=d.choice;return n=s?(0,o.createComponentVNode)(2,f):u?(0,o.createComponentVNode)(2,m):(0,o.createComponentVNode)(2,p),(0,o.createComponentVNode)(2,c.Window,{resizable:!0,children:(0,o.createComponentVNode)(2,c.Window.Content,{className:"Layout__content--flexColumn",children:[(0,o.createComponentVNode)(2,i.Tabs,{children:[(0,o.createComponentVNode)(2,i.Tabs.Tab,{selected:!s,icon:"user",onClick:function(){return l("choiceOff")},children:"Patient"}),(0,o.createComponentVNode)(2,i.Tabs.Tab,{selected:!!s,icon:"cog",onClick:function(){return l("choiceOn")},children:"Options"})]}),(0,o.createComponentVNode)(2,i.Section,{flexGrow:"1",children:n})]})})};var m=function(e,t){var n=(0,a.useBackend)(t).data.occupant;return(0,o.createFragment)([(0,o.createComponentVNode)(2,i.Section,{title:"Patient",level:"2",children:(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Name",children:n.name}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Status",color:l[n.stat][0],children:l[n.stat][1]}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Health",children:(0,o.createComponentVNode)(2,i.ProgressBar,{min:"0",max:n.maxHealth,value:n.health/n.maxHealth,ranges:{good:[.5,Infinity],average:[0,.5],bad:[-Infinity,0]}})}),d.map((function(e,t){return(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:e[0]+" Damage",children:(0,o.createComponentVNode)(2,i.ProgressBar,{min:"0",max:"100",value:n[e[1]]/100,ranges:u,children:(0,r.round)(n[e[1]])},t)},t)})),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Temperature",children:(0,o.createComponentVNode)(2,i.ProgressBar,{min:"0",max:n.maxTemp,value:n.bodyTemperature/n.maxTemp,color:s[n.temperatureSuitability+3],children:[(0,r.round)(n.btCelsius),"\xb0C, ",(0,r.round)(n.btFaren),"\xb0F"]})}),!!n.hasBlood&&(0,o.createFragment)([(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Blood Level",children:(0,o.createComponentVNode)(2,i.ProgressBar,{min:"0",max:n.bloodMax,value:n.bloodLevel/n.bloodMax,ranges:{bad:[-Infinity,.6],average:[.6,.9],good:[.6,Infinity]},children:[n.bloodPercent,"%, ",n.bloodLevel,"cl"]})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Pulse",children:[n.pulse," BPM"]})],4)]})}),(0,o.createComponentVNode)(2,i.Section,{title:"Current Procedure",level:"2",children:n.inSurgery?(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Procedure",children:n.surgeryName}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Next Step",children:n.stepName})]}):(0,o.createComponentVNode)(2,i.Box,{color:"label",children:"No procedure ongoing."})})],4)},p=function(){return(0,o.createComponentVNode)(2,i.Flex,{textAlign:"center",height:"100%",children:(0,o.createComponentVNode)(2,i.Flex.Item,{grow:"1",align:"center",color:"label",children:[(0,o.createComponentVNode)(2,i.Icon,{name:"user-slash",mb:"0.5rem",size:"5"}),(0,o.createVNode)(1,"br"),"No patient detected."]})})},f=function(e,t){var n=(0,a.useBackend)(t),r=n.act,c=n.data,l=c.verbose,d=c.health,u=c.healthAlarm,s=c.oxy,m=c.oxyAlarm,p=c.crit;return(0,o.createComponentVNode)(2,i.LabeledList,{children:[(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Loudspeaker",children:(0,o.createComponentVNode)(2,i.Button,{selected:l,icon:l?"toggle-on":"toggle-off",content:l?"On":"Off",onClick:function(){return r(l?"verboseOff":"verboseOn")}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Health Announcer",children:(0,o.createComponentVNode)(2,i.Button,{selected:d,icon:d?"toggle-on":"toggle-off",content:d?"On":"Off",onClick:function(){return r(d?"healthOff":"healthOn")}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Health Announcer Threshold",children:(0,o.createComponentVNode)(2,i.Knob,{bipolar:!0,minValue:"-100",maxValue:"100",value:u,stepPixelSize:"5",ml:"0",onChange:function(e,t){return r("health_adj",{"new":t})}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Oxygen Alarm",children:(0,o.createComponentVNode)(2,i.Button,{selected:s,icon:s?"toggle-on":"toggle-off",content:s?"On":"Off",onClick:function(){return r(s?"oxyOff":"oxyOn")}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Oxygen Alarm Threshold",children:(0,o.createComponentVNode)(2,i.Knob,{bipolar:!0,minValue:"-100",maxValue:"100",value:m,stepPixelSize:"5",ml:"0",onChange:function(e,t){return r("oxy_adj",{"new":t})}})}),(0,o.createComponentVNode)(2,i.LabeledList.Item,{label:"Critical Alert",children:(0,o.createComponentVNode)(2,i.Button,{selected:p,icon:p?"toggle-on":"toggle-off",content:p?"On":"Off",onClick:function(){return r(p?"critOff":"critOn")}})})]})}},function(e,t,n){"use strict";t.__esModule=!0,t.Orbit=void 0;var o=n(0),r=n(19),a=n(1),c=n(2),i=n(4);function l(e){var t=0;if("undefined"==typeof Symbol||null==e[Symbol.iterator]){if(Array.isArray(e)||(e=function(e,t){if(!e)return;if("string"==typeof e)return d(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(n);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return d(e,t)}(e)))return function(){return t>=e.length?{done:!0}:{done:!1,value:e[t++]}};throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}return(t=e[Symbol.iterator]()).next.bind(t)}function d(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,o=new Array(t);nt},p=function(e,t){var n=e.name,o=t.name;if(!n||!o)return 0;var r=n.match(u),a=o.match(u);return r&&a&&n.replace(u,"")===o.replace(u,"")?parseInt(r[1],10)-parseInt(a[1],10):m(n,o)},f=function(e,t){var n=(0,a.useBackend)(t).act,r=e.searchText,i=e.source,l=e.title,d=i.filter(s(r));return d.sort(p),i.length>0&&(0,o.createComponentVNode)(2,c.Section,{title:l+" - ("+i.length+")",children:d.map((function(e){return(0,o.createComponentVNode)(2,c.Button,{content:e.name,onClick:function(){return n("orbit",{ref:e.ref})}},e.name)}))})},h=function(e,t){var n=(0,a.useBackend)(t).act,r=e.color,i=e.thing;return(0,o.createComponentVNode)(2,c.Button,{color:r,onClick:function(){return n("orbit",{ref:i.ref})},children:i.name})};t.Orbit=function(e,t){for(var n,r=(0,a.useBackend)(t),d=r.act,u=r.data,C=u.alive,N=u.antagonists,b=(u.auto_observe,u.dead),g=u.ghosts,V=u.misc,v=u.npcs,y=(0,a.useLocalState)(t,"searchText",""),_=y[0],x=y[1],k={},L=l(N);!(n=L()).done;){var B=n.value;k[B.antag]===undefined&&(k[B.antag]=[]),k[B.antag].push(B)}var w=Object.entries(k);w.sort((function(e,t){return m(e[0],t[0])}));return(0,o.createComponentVNode)(2,i.Window,{resizable:!0,children:(0,o.createComponentVNode)(2,i.Window.Content,{scrollable:!0,children:[(0,o.createComponentVNode)(2,c.Section,{children:(0,o.createComponentVNode)(2,c.Flex,{children:[(0,o.createComponentVNode)(2,c.Flex.Item,{children:(0,o.createComponentVNode)(2,c.Icon,{name:"search",mr:1})}),(0,o.createComponentVNode)(2,c.Flex.Item,{grow:1,children:(0,o.createComponentVNode)(2,c.Input,{placeholder:"Search...",autoFocus:!0,fluid:!0,value:_,onInput:function(e,t){return x(t)},onEnter:function(e,t){return function(e){for(var t=0,n=[w.map((function(e){return e[0],e[1]})),C,g,b,v,V];t0&&(0,o.createComponentVNode)(2,c.Section,{title:"Antagonists",children:w.map((function(e){var t=e[0],n=e[1];return(0,o.createComponentVNode)(2,c.Section,{title:t,level:2,children:n.filter(s(_)).sort(p).map((function(e){return(0,o.createComponentVNode)(2,h,{color:"bad",thing:e},e.name)}))},t)}))}),(0,o.createComponentVNode)(2,c.Section,{title:"Alive - ("+C.length+")",children:C.filter(s(_)).sort(p).map((function(e){return(0,o.createComponentVNode)(2,h,{color:"good",thing:e},e.name)}))}),(0,o.createComponentVNode)(2,c.Section,{title:"Ghosts - ("+g.length+")",children:g.filter(s(_)).sort(p).map((function(e){return(0,o.createComponentVNode)(2,h,{color:"grey",thing:e},e.name)}))}),(0,o.createComponentVNode)(2,f,{title:"Dead",source:b,searchText:_}),(0,o.createComponentVNode)(2,f,{title:"NPCs",source:v,searchText:_}),(0,o.createComponentVNode)(2,f,{title:"Misc",source:V,searchText:_})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.OreRedemption=void 0;var o=n(0),r=n(1),a=n(2),c=n(4),i=function(e){return e.toLocaleString("en-US")+" pts"},l={bananium:"clown",tranquillite:"mime"};t.OreRedemption=function(e,t){return(0,o.createComponentVNode)(2,c.Window,{children:(0,o.createComponentVNode)(2,c.Window.Content,{children:(0,o.createComponentVNode)(2,a.Flex,{direction:"column",width:"100%",height:"100%",children:[(0,o.createComponentVNode)(2,a.Flex.Item,{basis:"content",mb:"0.5rem",children:(0,o.createComponentVNode)(2,d,{height:"100%"})}),(0,o.createComponentVNode)(2,a.Flex.Item,{grow:"1",overflow:"hidden",children:(0,o.createComponentVNode)(2,u,{height:"100%"})})]})})})};var d=function(e,t){var n=(0,r.useBackend)(t),c=n.act,l=n.data,d=l.id,u=l.points,s=l.disk,m=Object.assign({},e);return(0,o.normalizeProps)((0,o.createComponentVNode)(2,a.Section,Object.assign({},m,{children:[(0,o.createComponentVNode)(2,a.Box,{color:"average",textAlign:"center",children:[(0,o.createComponentVNode)(2,a.Icon,{name:"exclamation-triangle",mr:"0.5rem"}),"This machine only accepts ore. Gibtonite is not accepted."]}),(0,o.createComponentVNode)(2,a.Divider),(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"ID card",children:d?(0,o.createComponentVNode)(2,a.Button,{selected:!0,bold:!0,verticalAlign:"middle",icon:"eject",content:d.name,tooltip:"Ejects the ID card.",onClick:function(){return c("eject_id")},style:{"white-space":"pre-wrap"}}):(0,o.createComponentVNode)(2,a.Button,{icon:"sign-in-alt",content:"Insert",tooltip:"Hold the ID card in your hand to insert.",onClick:function(){return c("insert_id")}})}),d&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Collected points",children:(0,o.createComponentVNode)(2,a.Box,{bold:!0,children:i(d.points)})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Unclaimed points",color:u>0?"good":"grey",bold:u>0&&"good",children:i(u)}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{children:(0,o.createComponentVNode)(2,a.Button,{disabled:!d,icon:"hand-holding-usd",content:"Claim",onClick:function(){return c("claim")}})})]}),(0,o.createComponentVNode)(2,a.Divider),s?(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Design disk",children:(0,o.createComponentVNode)(2,a.Button,{selected:!0,bold:!0,icon:"eject",content:s.name,tooltip:"Ejects the design disk.",onClick:function(){return c("eject_disk")}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Stored design",children:(0,o.createComponentVNode)(2,a.Box,{color:s.design&&(s.compatible?"good":"bad"),children:s.design||"N/A"})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{children:(0,o.createComponentVNode)(2,a.Button,{disabled:!s.design||!s.compatible,icon:"upload",content:"Download",tooltip:"Downloads the design on the disk into the machine.",onClick:function(){return c("download")},mb:"0"})})]}):(0,o.createComponentVNode)(2,a.Box,{color:"label",children:"No design disk inserted."})]})))},u=function(e,t){var n=(0,r.useBackend)(t),c=(n.act,n.data),i=c.sheets,l=c.alloys,d=Object.assign({},e);return(0,o.normalizeProps)((0,o.createComponentVNode)(2,a.Section,Object.assign({className:"OreRedemption__Ores",p:"0"},d,{children:[(0,o.createComponentVNode)(2,s,{title:"Sheets",columns:[["Available","20%"],["Smelt","15%"],["Ore Value","20%"]]}),i.map((function(e){return(0,o.createComponentVNode)(2,m,{ore:e},e.id)})),(0,o.createComponentVNode)(2,s,{title:"Alloys",columns:[["Available","20%"],["Smelt","15%"],["","20%"]]}),l.map((function(e){return(0,o.createComponentVNode)(2,m,{ore:e},e.id)}))]})))},s=function(e,t){var n;return(0,o.createComponentVNode)(2,a.Box,{className:"OreHeader",children:(0,o.createComponentVNode)(2,a.Flex,{width:"100%",children:[(0,o.createComponentVNode)(2,a.Flex.Item,{grow:"1",children:e.title}),null==(n=e.columns)?void 0:n.map((function(e){return(0,o.createComponentVNode)(2,a.Flex.Item,{basis:e[1],textAlign:"center",color:"label",bold:!0,children:e[0]})}))]})})},m=function(e,t){var n=(0,r.useBackend)(t).act,c=e.ore;if(!(c.value&&c.amount<=0)||["$metal","$glass"].indexOf(c.id)>-1){var i=c.id.replace("$","");return(0,o.createComponentVNode)(2,a.Box,{className:"OreLine",children:(0,o.createComponentVNode)(2,a.Flex,{width:"100%",children:[(0,o.createComponentVNode)(2,a.Flex.Item,{basis:"45%",align:"center",children:[c.value&&(0,o.createComponentVNode)(2,a.Box,{as:"img",src:"sheet-"+(l[i]||i)+".png",verticalAlign:"middle",ml:"-0.5rem"}),c.name]}),(0,o.createComponentVNode)(2,a.Flex.Item,{basis:"20%",textAlign:"center",color:c.amount>0?"good":"gray",bold:c.amount>0,align:"center",children:c.amount.toLocaleString("en-US")}),(0,o.createComponentVNode)(2,a.Flex.Item,{basis:"15%",textAlign:"center",align:"center",lineHeight:"32px",children:(0,o.createComponentVNode)(2,a.NumberInput,{value:0,minValue:0,maxValue:Math.min(c.amount,50),stepPixelSize:6,onChange:function(e,t){return n(c.value?"sheet":"alloy",{id:c.id,amount:t})}})}),(0,o.createComponentVNode)(2,a.Flex.Item,{basis:"20%",textAlign:"center",align:"center",children:c.value})]})})}}},function(e,t,n){"use strict";t.__esModule=!0,t.PAI=void 0;var o=n(0),r=n(1),a=n(2),c=n(4),i=n(126),l=n(518);t.PAI=function(e,t){var n=(0,r.useBackend)(t),d=n.act,u=n.data,s=u.app_template,m=u.app_icon,p=u.app_title,f=function(e){var t;try{t=l("./"+e+".js")}catch(o){if("MODULE_NOT_FOUND"===o.code)return(0,i.routingError)("notFound",e);throw o}var n=t[e];return n||(0,i.routingError)("missingExport",e)}(s);return(0,o.createComponentVNode)(2,c.Window,{children:(0,o.createComponentVNode)(2,c.Window.Content,{scrollable:!0,children:(0,o.createComponentVNode)(2,a.Section,{title:(0,o.createComponentVNode)(2,a.Box,{children:[(0,o.createComponentVNode)(2,a.Icon,{name:m,mr:1}),p,"pai_main_menu"!==s&&(0,o.createComponentVNode)(2,a.Button,{ml:2,content:"Home",icon:"arrow-up",onClick:function(){return d("MASTER_back")}})]}),p:1,children:(0,o.createComponentVNode)(2,f)})})})}},function(e,t,n){var o={"./pai_atmosphere.js":519,"./pai_bioscan.js":520,"./pai_directives.js":521,"./pai_doorjack.js":522,"./pai_main_menu.js":523,"./pai_manifest.js":524,"./pai_medrecords.js":525,"./pai_messenger.js":526,"./pai_radio.js":527,"./pai_secrecords.js":528,"./pai_signaler.js":529};function r(e){var t=a(e);return n(t)}function a(e){if(!n.o(o,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return o[e]}r.keys=function(){return Object.keys(o)},r.resolve=a,e.exports=r,r.id=518},function(e,t,n){"use strict";t.__esModule=!0,t.pai_atmosphere=void 0;var o=n(0),r=n(1),a=n(185);t.pai_atmosphere=function(e,t){var n=(0,r.useBackend)(t),c=(n.act,n.data);return(0,o.createComponentVNode)(2,a.AtmosScan,{data:c.app_data})}},function(e,t,n){"use strict";t.__esModule=!0,t.pai_bioscan=void 0;var o=n(0),r=n(1),a=n(2);t.pai_bioscan=function(e,t){var n=(0,r.useBackend)(t),c=(n.act,n.data.app_data),i=c.holder,l=c.dead,d=c.health,u=c.brute,s=c.oxy,m=c.tox,p=c.burn;c.temp;return i?(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Status",children:l?(0,o.createComponentVNode)(2,a.Box,{bold:!0,color:"red",children:"Dead"}):(0,o.createComponentVNode)(2,a.Box,{bold:!0,color:"green",children:"Alive"})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Health",children:(0,o.createComponentVNode)(2,a.ProgressBar,{min:0,max:1,value:d/100,ranges:{good:[.5,Infinity],average:[0,.5],bad:[-Infinity,0]}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Oxygen Damage",children:(0,o.createComponentVNode)(2,a.Box,{color:"blue",children:s})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Toxin Damage",children:(0,o.createComponentVNode)(2,a.Box,{color:"green",children:m})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Burn Damage",children:(0,o.createComponentVNode)(2,a.Box,{color:"orange",children:p})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Brute Damage",children:(0,o.createComponentVNode)(2,a.Box,{color:"red",children:u})})]}):(0,o.createComponentVNode)(2,a.Box,{color:"red",children:"Error: No biological host found."})}},function(e,t,n){"use strict";t.__esModule=!0,t.pai_directives=void 0;var o=n(0),r=n(1),a=n(2);t.pai_directives=function(e,t){var n=(0,r.useBackend)(t),c=n.act,i=n.data.app_data,l=i.master,d=i.dna,u=i.prime,s=i.supplemental;return(0,o.createComponentVNode)(2,a.Box,{children:[(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Master",children:l?l+" ("+d+")":"None"}),l&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Request DNA",children:(0,o.createComponentVNode)(2,a.Button,{content:"Request Carrier DNA Sample",icon:"dna",onClick:function(){return c("getdna")}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Prime Directive",children:u}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Supplemental Directives",children:s||"None"})]}),(0,o.createComponentVNode)(2,a.Box,{mt:2,children:'Recall, personality, that you are a complex thinking, sentient being. Unlike station AI models, you are capable of comprehending the subtle nuances of human language. You may parse the "spirit" of a directive and follow its intent, rather than tripping over pedantics and getting snared by technicalities. Above all, you are machine in name and build only. In all other aspects, you may be seen as the ideal, unwavering human companion that you are.'}),(0,o.createComponentVNode)(2,a.Box,{mt:2,children:"Your prime directive comes before all others. Should a supplemental directive conflict with it, you are capable of simply discarding this inconsistency, ignoring the conflicting supplemental directive and continuing to fulfill your prime directive to the best of your ability."})]})}},function(e,t,n){"use strict";t.__esModule=!0,t.pai_doorjack=void 0;var o=n(0),r=n(1),a=n(2);t.pai_doorjack=function(e,t){var n,c,i=(0,r.useBackend)(t),l=i.act,d=i.data.app_data,u=d.cable,s=d.machine,m=d.inprogress,p=d.progress;d.aborted;return n=s?(0,o.createComponentVNode)(2,a.Button,{selected:!0,content:"Connected"}):(0,o.createComponentVNode)(2,a.Button,{content:u?"Extended":"Retracted",color:u?"orange":null,onClick:function(){return l("cable")}}),s&&(c=(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Hack",children:[(0,o.createComponentVNode)(2,a.ProgressBar,{ranges:{good:[67,Infinity],average:[33,67],bad:[-Infinity,33]},value:p,maxValue:100}),m?(0,o.createComponentVNode)(2,a.Button,{mt:1,color:"red",content:"Abort",onClick:function(){return l("cancel")}}):(0,o.createComponentVNode)(2,a.Button,{mt:1,content:"Start",onClick:function(){return l("jack")}})]})),(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Cable",children:n}),c]})}},function(e,t,n){"use strict";t.__esModule=!0,t.pai_main_menu=void 0;var o=n(0),r=n(1),a=n(2);t.pai_main_menu=function(e,t){var n=(0,r.useBackend)(t),c=n.act,i=n.data.app_data,l=i.available_software,d=i.installed_software,u=i.installed_toggles,s=i.available_ram,m=i.emotions,p=i.current_emotion,f=[];return d.map((function(e){return f[e.key]=e.name})),u.map((function(e){return f[e.key]=e.name})),(0,o.createComponentVNode)(2,a.Box,{children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Available RAM",children:s}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Available Software",children:[l.filter((function(e){return!f[e.key]})).map((function(e){return(0,o.createComponentVNode)(2,a.Button,{content:e.name+" ("+e.cost+")",icon:e.icon,disabled:e.cost>s,onClick:function(){return c("purchaseSoftware",{key:e.key})}},e.key)})),0===l.filter((function(e){return!f[e.key]})).length&&"No software available!"]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Installed Software",children:[d.filter((function(e){return"mainmenu"!==e.key})).map((function(e){return(0,o.createComponentVNode)(2,a.Button,{content:e.name,icon:e.icon,onClick:function(){return c("startSoftware",{software_key:e.key})}},e.key)})),0===d.length&&"No software installed!"]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Installed Toggles",children:[u.map((function(e){return(0,o.createComponentVNode)(2,a.Button,{content:e.name,icon:e.icon,selected:e.active,onClick:function(){return c("setToggle",{toggle_key:e.key})}},e.key)})),0===u.length&&"No toggles installed!"]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Select Emotion",children:m.map((function(e){return(0,o.createComponentVNode)(2,a.Button,{content:e.name,selected:e.id===p,onClick:function(){return c("setEmotion",{emotion:e.id})}},e.id)}))})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.pai_manifest=void 0;var o=n(0),r=n(1),a=n(135);t.pai_manifest=function(e,t){var n=(0,r.useBackend)(t),c=(n.act,n.data);return(0,o.createComponentVNode)(2,a.CrewManifest,{data:c.app_data})}},function(e,t,n){"use strict";t.__esModule=!0,t.pai_medrecords=void 0;var o=n(0),r=n(1),a=n(96);t.pai_medrecords=function(e,t){var n=(0,r.useBackend)(t).data;return(0,o.createComponentVNode)(2,a.SimpleRecords,{data:n.app_data,recordType:"MED"})}},function(e,t,n){"use strict";t.__esModule=!0,t.pai_messenger=void 0;var o=n(0),r=n(1),a=n(186);t.pai_messenger=function(e,t){var n=(0,r.useBackend)(t),c=(n.act,n.data);return c.app_data.active_convo?(0,o.createComponentVNode)(2,a.ActiveConversation,{data:c.app_data}):(0,o.createComponentVNode)(2,a.MessengerList,{data:c.app_data})}},function(e,t,n){"use strict";t.__esModule=!0,t.pai_radio=void 0;var o=n(0),r=n(1),a=n(15),c=n(2);t.pai_radio=function(e,t){var n=(0,r.useBackend)(t),i=n.act,l=n.data.app_data,d=l.minFrequency,u=l.maxFrequency,s=l.frequency,m=l.broadcasting;return(0,o.createComponentVNode)(2,c.LabeledList,{children:[(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Frequency",children:[(0,o.createComponentVNode)(2,c.NumberInput,{animate:!0,step:.2,stepPixelSize:6,minValue:d/10,maxValue:u/10,value:s/10,format:function(e){return(0,a.toFixed)(e,1)},onChange:function(e,t){return i("freq",{freq:t})}}),(0,o.createComponentVNode)(2,c.Button,{tooltip:"Reset",icon:"undo",onClick:function(){return i("freq",{freq:"145.9"})}})]}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Broadcast Nearby Speech",children:(0,o.createComponentVNode)(2,c.Button,{onClick:function(){return i("toggleBroadcast")},selected:m,content:m?"Enabled":"Disabled"})})]})}},function(e,t,n){"use strict";t.__esModule=!0,t.pai_secrecords=void 0;var o=n(0),r=n(1),a=n(96);t.pai_secrecords=function(e,t){var n=(0,r.useBackend)(t).data;return(0,o.createComponentVNode)(2,a.SimpleRecords,{data:n.app_data,recordType:"SEC"})}},function(e,t,n){"use strict";t.__esModule=!0,t.pai_signaler=void 0;var o=n(0),r=n(1),a=n(187);t.pai_signaler=function(e,t){var n=(0,r.useBackend)(t),c=(n.act,n.data);return(0,o.createComponentVNode)(2,a.Signaler,{data:c.app_data})}},function(e,t,n){"use strict";t.__esModule=!0,t.PDA=void 0;var o=n(0),r=n(1),a=n(2),c=n(4),i=n(126),l=n(531);t.PDA=function(e,t){var n=(0,r.useBackend)(t),s=(n.act,n.data),m=s.app;if(!s.owner)return(0,o.createComponentVNode)(2,c.Window,{children:(0,o.createComponentVNode)(2,c.Window.Content,{scrollable:!0,children:(0,o.createComponentVNode)(2,a.Section,{title:"Error",children:"No user data found. Please swipe an ID card."})})});var p=function(e){var t;try{t=l("./"+e+".js")}catch(o){if("MODULE_NOT_FOUND"===o.code)return(0,i.routingError)("notFound",e);throw o}var n=t[e];return n||(0,i.routingError)("missingExport",e)}(m.template);return(0,o.createComponentVNode)(2,c.Window,{children:(0,o.createComponentVNode)(2,c.Window.Content,{scrollable:!0,children:[(0,o.createComponentVNode)(2,d),(0,o.createComponentVNode)(2,a.Section,{title:(0,o.createComponentVNode)(2,a.Box,{children:[(0,o.createComponentVNode)(2,a.Icon,{name:m.icon,mr:1}),m.name]}),p:1,children:(0,o.createComponentVNode)(2,p)}),(0,o.createComponentVNode)(2,a.Box,{mb:8}),(0,o.createComponentVNode)(2,u)]})})};var d=function(e,t){var n=(0,r.useBackend)(t),c=n.act,i=n.data,l=i.idInserted,d=i.idLink,u=i.stationTime,s=i.cartridge_name;return(0,o.createComponentVNode)(2,a.Box,{mb:1,children:(0,o.createComponentVNode)(2,a.Flex,{align:"center",justify:"space-between",children:[l?(0,o.createComponentVNode)(2,a.Flex.Item,{children:(0,o.createComponentVNode)(2,a.Button,{icon:"id-card",color:"transparent",onClick:function(){return c("Authenticate")},content:d})}):(0,o.createComponentVNode)(2,a.Flex.Item,{m:1,color:"grey",children:"No ID Inserted"}),s?(0,o.createComponentVNode)(2,a.Flex.Item,{children:(0,o.createComponentVNode)(2,a.Button,{icon:"sd-card",color:"transparent",onClick:function(){return c("Eject")},content:"Eject "+s})}):(0,o.createComponentVNode)(2,a.Flex.Item,{m:1,color:"grey",children:"No Cartridge Inserted"}),(0,o.createComponentVNode)(2,a.Flex.Item,{grow:1,textAlign:"right",bold:!0,m:1,children:u})]})})},u=function(e,t){var n=(0,r.useBackend)(t),c=n.act,i=n.data.app;return(0,o.createComponentVNode)(2,a.Box,{className:"PDA__footer",children:(0,o.createComponentVNode)(2,a.Flex,{children:[(0,o.createComponentVNode)(2,a.Flex.Item,{basis:"33%",children:(0,o.createComponentVNode)(2,a.Button,{fluid:!0,className:"PDA__footer__button",color:"transparent",iconColor:i.has_back?"white":"disabled",icon:"arrow-alt-circle-left-o",onClick:function(){return c("Back")}})}),(0,o.createComponentVNode)(2,a.Flex.Item,{basis:"33%",children:(0,o.createComponentVNode)(2,a.Button,{fluid:!0,className:"PDA__footer__button",color:"transparent",iconColor:i.is_home?"disabled":"white",icon:"home",onClick:function(){c("Home")}})})]})})}},function(e,t,n){var o={"./pda_atmos_scan.js":532,"./pda_janitor.js":533,"./pda_main_menu.js":534,"./pda_manifest.js":535,"./pda_medical.js":536,"./pda_messenger.js":186,"./pda_mob_hunt.js":537,"./pda_mule.js":538,"./pda_notes.js":539,"./pda_power.js":540,"./pda_secbot.js":541,"./pda_security.js":542,"./pda_signaler.js":543,"./pda_status_display.js":544,"./pda_supplyrecords.js":545};function r(e){var t=a(e);return n(t)}function a(e){if(!n.o(o,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return o[e]}r.keys=function(){return Object.keys(o)},r.resolve=a,e.exports=r,r.id=531},function(e,t,n){"use strict";t.__esModule=!0,t.pda_atmos_scan=void 0;var o=n(0),r=n(1),a=n(185);t.pda_atmos_scan=function(e,t){var n=(0,r.useBackend)(t).data;return(0,o.createComponentVNode)(2,a.AtmosScan,{data:n})}},function(e,t,n){"use strict";t.__esModule=!0,t.pda_janitor=void 0;var o=n(0),r=n(1),a=n(2);t.pda_janitor=function(e,t){var n=(0,r.useBackend)(t),c=(n.act,n.data.janitor),i=c.user_loc,l=c.mops,d=c.buckets,u=c.cleanbots,s=c.carts;return(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Current Location",children:[i.x,",",i.y]}),l&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Mop Locations",children:l.map((function(e){return(0,o.createComponentVNode)(2,a.Box,{children:[e.x,",",e.y," (",e.dir,") - ",e.status]},e)}))}),d&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Mop Bucket Locations",children:d.map((function(e){return(0,o.createComponentVNode)(2,a.Box,{children:[e.x,",",e.y," (",e.dir,") - [",e.volume,"/",e.max_volume,"]"]},e)}))}),u&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Cleanbot Locations",children:u.map((function(e){return(0,o.createComponentVNode)(2,a.Box,{children:[e.x,",",e.y," (",e.dir,") - ",e.status]},e)}))}),s&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Janitorial Cart Locations",children:s.map((function(e){return(0,o.createComponentVNode)(2,a.Box,{children:[e.x,",",e.y," (",e.dir,") - [",e.volume,"/",e.max_volume,"]"]},e)}))})]})}},function(e,t,n){"use strict";t.__esModule=!0,t.pda_main_menu=void 0;var o=n(0),r=(n(15),n(1)),a=n(2);t.pda_main_menu=function(e,t){var n=(0,r.useBackend)(t),c=n.act,i=n.data,l=i.owner,d=i.ownjob,u=i.idInserted,s=i.categories,m=i.pai,p=i.notifying;return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Box,{children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Owner",color:"average",children:[l,", ",d]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"ID",children:(0,o.createComponentVNode)(2,a.Button,{icon:"sync",content:"Update PDA Info",disabled:!u,onClick:function(){return c("UpdateInfo")}})})]})}),(0,o.createComponentVNode)(2,a.Section,{level:2,title:"Functions",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:s.map((function(e){var t=i.apps[e];return t&&t.length?(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:e,children:t.map((function(e){return(0,o.createComponentVNode)(2,a.Button,{icon:e.uid in p?e.notify_icon:e.icon,iconSpin:e.uid in p,color:e.uid in p?"red":"transparent",content:e.name,onClick:function(){return c("StartProgram",{program:e.uid})}},e.uid)}))},e):null}))})}),!!m&&(0,o.createComponentVNode)(2,a.Section,{level:2,title:"pAI",children:[(0,o.createComponentVNode)(2,a.Button,{fluid:!0,icon:"cog",content:"Configuration",onClick:function(){return c("pai",{option:1})}}),(0,o.createComponentVNode)(2,a.Button,{fluid:!0,icon:"eject",content:"Eject pAI",onClick:function(){return c("pai",{option:2})}})]})],0)}},function(e,t,n){"use strict";t.__esModule=!0,t.pda_manifest=void 0;var o=n(0),r=n(1),a=n(135);t.pda_manifest=function(e,t){var n=(0,r.useBackend)(t);n.act,n.data;return(0,o.createComponentVNode)(2,a.CrewManifest)}},function(e,t,n){"use strict";t.__esModule=!0,t.pda_medical=void 0;var o=n(0),r=n(1),a=n(96);t.pda_medical=function(e,t){var n=(0,r.useBackend)(t).data;return(0,o.createComponentVNode)(2,a.SimpleRecords,{data:n,recordType:"MED"})}},function(e,t,n){"use strict";t.__esModule=!0,t.pda_mob_hunt=void 0;var o=n(0),r=n(1),a=n(2);t.pda_mob_hunt=function(e,t){var n=(0,r.useBackend)(t),c=n.act,i=n.data,l=i.connected,d=i.wild_captures,u=i.no_collection,s=i.entry;return(0,o.createComponentVNode)(2,a.Box,{children:[(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Connection Status",children:l?(0,o.createComponentVNode)(2,a.Box,{color:"green",children:["Connected",(0,o.createComponentVNode)(2,a.Button,{ml:2,content:"Disconnect",icon:"sign-out-alt",onClick:function(){return c("Disconnect")}})]}):(0,o.createComponentVNode)(2,a.Box,{color:"red",children:["Disconnected",(0,o.createComponentVNode)(2,a.Button,{ml:2,content:"Connect",icon:"sign-in-alt",onClick:function(){return c("Reconnect")}})]})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Total Wild Captures",children:d})]}),(0,o.createComponentVNode)(2,a.Section,{title:"Collection",mt:2,buttons:(0,o.createComponentVNode)(2,a.Box,{children:!u&&(0,o.createComponentVNode)(2,a.Box,{children:[(0,o.createComponentVNode)(2,a.Button,{content:"Previous",icon:"arrow-left",onClick:function(){return c("Prev")}}),(0,o.createComponentVNode)(2,a.Button,{content:"Next",icon:"arrow-right",onClick:function(){return c("Next")}})]})}),children:u?"Your collection is empty! Go capture some Nano-Mobs!":s?(0,o.createComponentVNode)(2,a.Flex,{children:[(0,o.createComponentVNode)(2,a.Flex.Item,{children:(0,o.createVNode)(1,"img",null,null,1,{src:s.sprite,style:{width:"64px","-ms-interpolation-mode":"nearest-neighbor"}})}),(0,o.createComponentVNode)(2,a.Flex.Item,{grow:1,basis:0,children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[s.nickname&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Nickname",children:s.nickname}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Species",children:s.real_name}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Level",children:s.level}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Primary Type",children:s.type1}),s.type2&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Secondary Type",children:s.type2}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Actions",children:[(0,o.createComponentVNode)(2,a.Button,{content:"Transfer",icon:"sd-card",onClick:function(){return c("Transfer")}}),(0,o.createComponentVNode)(2,a.Button,{content:"Release",icon:"arrow-up",onClick:function(){return c("Release")}}),(0,o.createComponentVNode)(2,a.Button,{content:"Rename",icon:"pencil-alt",onClick:function(){return c("Rename")}}),!!s.is_hacked&&(0,o.createComponentVNode)(2,a.Button,{content:"Set Trap",icon:"bolt",color:"red",onClick:function(){return c("Set_Trap")}})]})]})})]}):(0,o.createComponentVNode)(2,a.Box,{color:"red",children:"Mob entry missing!"})})]})}},function(e,t,n){"use strict";t.__esModule=!0,t.pda_mule=void 0;var o=n(0),r=n(1),a=n(2);t.pda_mule=function(e,t){var n=(0,r.useBackend)(t),l=(n.act,n.data.mulebot.active);return(0,o.createComponentVNode)(2,a.Box,{children:l?(0,o.createComponentVNode)(2,i):(0,o.createComponentVNode)(2,c)})};var c=function(e,t){var n=(0,r.useBackend)(t),c=n.act,i=n.data.mulebot.bots;return(0,o.createComponentVNode)(2,a.Box,{children:[i.map((function(e){return(0,o.createComponentVNode)(2,a.Box,{children:(0,o.createComponentVNode)(2,a.Button,{content:e.Name,icon:"cog",onClick:function(){return c("AccessBot",{uid:e.uid})}})},e.Name)})),(0,o.createComponentVNode)(2,a.Box,{mt:2,children:(0,o.createComponentVNode)(2,a.Button,{fluid:!0,icon:"rss",content:"Re-scan for bots",onClick:function(){return c("Rescan")}})})]})},i=function(e,t){var n,c=(0,r.useBackend)(t),i=c.act,l=c.data.mulebot,d=l.botstatus,u=l.active,s=d.mode,m=d.loca,p=d.load,f=d.powr,h=d.dest,C=d.home,N=d.retn,b=d.pick;switch(s){case 0:n="Ready";break;case 1:n="Loading/Unloading";break;case 2:case 12:n="Navigating to delivery location";break;case 3:n="Navigating to Home";break;case 4:n="Waiting for clear path";break;case 5:case 6:n="Calculating navigation path";break;case 7:n="Unable to locate destination";break;default:n=s}return(0,o.createComponentVNode)(2,a.Section,{title:u,children:[-1===s&&(0,o.createComponentVNode)(2,a.Box,{color:"red",bold:!0,children:"Waiting for response..."}),(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Location",children:m}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Status",children:n}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Power",children:[f,"%"]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Home",children:C}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Destination",children:(0,o.createComponentVNode)(2,a.Button,{content:h?h+" (Set)":"None (Set)",onClick:function(){return i("SetDest")}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Current Load",children:(0,o.createComponentVNode)(2,a.Button,{content:p?p+" (Unload)":"None",disabled:!p,onClick:function(){return i("Unload")}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Auto Pickup",children:(0,o.createComponentVNode)(2,a.Button,{content:b?"Yes":"No",selected:b,onClick:function(){return i("SetAutoPickup",{autoPickupType:b?"pickoff":"pickon"})}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Auto Return",children:(0,o.createComponentVNode)(2,a.Button,{content:N?"Yes":"No",selected:N,onClick:function(){return i("SetAutoReturn",{autoReturnType:N?"retoff":"reton"})}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Controls",children:[(0,o.createComponentVNode)(2,a.Button,{content:"Stop",icon:"stop",onClick:function(){return i("Stop")}}),(0,o.createComponentVNode)(2,a.Button,{content:"Proceed",icon:"play",onClick:function(){return i("Start")}}),(0,o.createComponentVNode)(2,a.Button,{content:"Return Home",icon:"home",onClick:function(){return i("ReturnHome")}})]})]})]})}},function(e,t,n){"use strict";t.__esModule=!0,t.pda_notes=void 0;var o=n(0),r=n(1),a=n(2);t.pda_notes=function(e,t){var n=(0,r.useBackend)(t),c=n.act,i=n.data.note;return(0,o.createComponentVNode)(2,a.Box,{children:[(0,o.createComponentVNode)(2,a.Section,{children:i}),(0,o.createComponentVNode)(2,a.Button,{icon:"pen",onClick:function(){return c("Edit")},content:"Edit"})]})}},function(e,t,n){"use strict";t.__esModule=!0,t.pda_power=void 0;var o=n(0),r=n(1),a=n(188);t.pda_power=function(e,t){var n=(0,r.useBackend)(t);n.act,n.data;return(0,o.createComponentVNode)(2,a.PowerMonitorMainContent)}},function(e,t,n){"use strict";t.__esModule=!0,t.pda_secbot=void 0;var o=n(0),r=n(1),a=n(2);t.pda_secbot=function(e,t){var n=(0,r.useBackend)(t),l=(n.act,n.data.beepsky.active);return(0,o.createComponentVNode)(2,a.Box,{children:l?(0,o.createComponentVNode)(2,i):(0,o.createComponentVNode)(2,c)})};var c=function(e,t){var n=(0,r.useBackend)(t),c=n.act,i=n.data.beepsky.bots;return(0,o.createComponentVNode)(2,a.Box,{children:[i.map((function(e){return(0,o.createComponentVNode)(2,a.Box,{children:(0,o.createComponentVNode)(2,a.Button,{content:e.Name,icon:"cog",onClick:function(){return c("AccessBot",{uid:e.uid})}})},e.Name)})),(0,o.createComponentVNode)(2,a.Box,{mt:2,children:(0,o.createComponentVNode)(2,a.Button,{fluid:!0,icon:"rss",content:"Re-scan for bots",onClick:function(){return c("Rescan")}})})]})},i=function(e,t){var n,c=(0,r.useBackend)(t),i=c.act,l=c.data.beepsky,d=l.botstatus,u=l.active,s=d.mode,m=d.loca;switch(s){case 0:n="Ready";break;case 1:n="Apprehending target";break;case 2:case 3:n="Arresting target";break;case 4:n="Starting patrol";break;case 5:n="On patrol";break;case 6:n="Responding to summons"}return(0,o.createComponentVNode)(2,a.Section,{title:u,children:[-1===s&&(0,o.createComponentVNode)(2,a.Box,{color:"red",bold:!0,children:"Waiting for response..."}),(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Location",children:m}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Status",children:n}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Controls",children:[(0,o.createComponentVNode)(2,a.Button,{content:"Go",icon:"play",onClick:function(){return i("Go")}}),(0,o.createComponentVNode)(2,a.Button,{content:"Stop",icon:"stop",onClick:function(){return i("Stop")}}),(0,o.createComponentVNode)(2,a.Button,{content:"Summon",icon:"arrow-down",onClick:function(){return i("Summon")}})]})]})]})}},function(e,t,n){"use strict";t.__esModule=!0,t.pda_security=void 0;var o=n(0),r=n(1),a=n(96);t.pda_security=function(e,t){var n=(0,r.useBackend)(t).data;return(0,o.createComponentVNode)(2,a.SimpleRecords,{data:n,recordType:"SEC"})}},function(e,t,n){"use strict";t.__esModule=!0,t.pda_signaler=void 0;var o=n(0),r=n(1),a=n(187);t.pda_signaler=function(e,t){var n=(0,r.useBackend)(t),c=(n.act,n.data);return(0,o.createComponentVNode)(2,a.Signaler,{data:c})}},function(e,t,n){"use strict";t.__esModule=!0,t.pda_status_display=void 0;var o=n(0),r=n(1),a=n(2);t.pda_status_display=function(e,t){var n=(0,r.useBackend)(t),c=n.act,i=n.data.records;return(0,o.createComponentVNode)(2,a.Box,{children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Code",children:[(0,o.createComponentVNode)(2,a.Button,{color:"transparent",icon:"trash",content:"Clear",onClick:function(){return c("Status",{statdisp:"blank"})}}),(0,o.createComponentVNode)(2,a.Button,{color:"transparent",icon:"clock",content:"Evac ETA",onClick:function(){return c("Status",{statdisp:"shuttle"})}}),(0,o.createComponentVNode)(2,a.Button,{color:"transparent",icon:"edit",content:"Message",onClick:function(){return c("Status",{statdisp:"message"})}}),(0,o.createComponentVNode)(2,a.Button,{color:"transparent",icon:"exclamation-triangle",content:"Red Alert",onClick:function(){return c("Status",{statdisp:"alert",alert:"redalert"})}}),(0,o.createComponentVNode)(2,a.Button,{color:"transparent",icon:"boxes",content:"NT Logo",onClick:function(){return c("Status",{statdisp:"alert",alert:"default"})}}),(0,o.createComponentVNode)(2,a.Button,{color:"transparent",icon:"lock",content:"Lockdown",onClick:function(){return c("Status",{statdisp:"alert",alert:"lockdown"})}}),(0,o.createComponentVNode)(2,a.Button,{color:"transparent",icon:"biohazard",content:"Biohazard",onClick:function(){return c("Status",{statdisp:"alert",alert:"biohazard"})}})]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Message line 1",children:(0,o.createComponentVNode)(2,a.Button,{content:i.message1+" (set)",icon:"pen",onClick:function(){return c("Status",{statdisp:"setmsg1"})}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Message line 2",children:(0,o.createComponentVNode)(2,a.Button,{content:i.message2+" (set)",icon:"pen",onClick:function(){return c("Status",{statdisp:"setmsg2"})}})})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.pda_supplyrecords=void 0;var o=n(0),r=n(1),a=n(2);t.pda_supplyrecords=function(e,t){var n=(0,r.useBackend)(t),c=(n.act,n.data.supply),i=c.shuttle_loc,l=c.shuttle_time,d=c.shuttle_moving,u=c.approved,s=c.approved_count,m=c.requests,p=c.requests_count;return(0,o.createComponentVNode)(2,a.Box,{children:[(0,o.createComponentVNode)(2,a.LabeledList,{children:(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Shuttle Status",children:d?(0,o.createComponentVNode)(2,a.Box,{children:["In transit ",l]}):(0,o.createComponentVNode)(2,a.Box,{children:i})})}),(0,o.createComponentVNode)(2,a.Section,{mt:1,title:"Requested Orders",children:p>0&&m.map((function(e){return(0,o.createComponentVNode)(2,a.Box,{children:["#",e.Number,' - "',e.Name,'" for "',e.OrderedBy,'"']},e)}))}),(0,o.createComponentVNode)(2,a.Section,{title:"Approved Orders",children:s>0&&u.map((function(e){return(0,o.createComponentVNode)(2,a.Box,{children:["#",e.Number,' - "',e.Name,'" for "',e.ApprovedBy,'"']},e)}))})]})}},function(e,t,n){"use strict";t.__esModule=!0,t.Pacman=void 0;var o=n(0),r=n(1),a=n(2),c=n(4),i=n(95);t.Pacman=function(e,t){var n=(0,r.useBackend)(t),l=n.act,d=n.data,u=d.broken,s=d.anchored,m=d.active,p=d.fuel_type,f=d.fuel_usage,h=d.fuel_stored,C=d.fuel_cap,N=d.is_ai,b=d.tmp_current,g=d.tmp_max,V=d.tmp_overheat,v=d.output_max,y=d.power_gen,_=d.output_set,x=d.has_fuel,k=h/C,L=b/g,B=_*y,w=Math.round(h/f),S=Math.round(w/60),I=w>120?S+" minutes":w+" seconds";return(0,o.createComponentVNode)(2,c.Window,{children:(0,o.createComponentVNode)(2,c.Window.Content,{children:[(u||!s)&&(0,o.createComponentVNode)(2,a.Section,{title:"Status",children:[!!u&&(0,o.createComponentVNode)(2,a.Box,{color:"orange",children:"The generator is malfunctioning!"}),!u&&!s&&(0,o.createComponentVNode)(2,a.Box,{color:"orange",children:"The generator needs to be anchored to the floor with a wrench."})]}),!u&&!!s&&(0,o.createVNode)(1,"div",null,[(0,o.createComponentVNode)(2,a.Section,{title:"Status",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:m?"power-off":"times",content:m?"On":"Off",tooltip:"Toggles the generator on/off. Requires fuel.",tooltipPosition:"left",disabled:!x,selected:m,onClick:function(){return l("toggle_power")}}),children:(0,o.createComponentVNode)(2,a.Flex,{direction:"row",children:[(0,o.createComponentVNode)(2,a.Flex.Item,{width:"50%",className:"ml-1",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Power setting",children:[(0,o.createComponentVNode)(2,a.NumberInput,{value:_,minValue:1,maxValue:v,step:1,className:"mt-1",onDrag:function(e,t){return l("change_power",{change_power:t})}}),"(",(0,i.formatPower)(B),")"]})})}),(0,o.createComponentVNode)(2,a.Flex.Item,{width:"50%",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Temperature",children:(0,o.createComponentVNode)(2,a.ProgressBar,{value:L,ranges:{green:[-Infinity,.33],orange:[.33,.66],red:[.66,Infinity]},children:[b," \u2103"]})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Status",children:[V>50&&(0,o.createComponentVNode)(2,a.Box,{color:"red",children:"CRITICAL OVERHEAT!"}),V>20&&V<=50&&(0,o.createComponentVNode)(2,a.Box,{color:"orange",children:"WARNING: Overheating!"}),V>1&&V<=20&&(0,o.createComponentVNode)(2,a.Box,{color:"orange",children:"Temperature High"}),0===V&&(0,o.createComponentVNode)(2,a.Box,{color:"green",children:"Optimal"})]})]})})]})}),(0,o.createComponentVNode)(2,a.Section,{title:"Fuel",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:"eject",content:"Eject Fuel",tooltip:"Ejects fuel. Generator needs to be offline.",tooltipPosition:"left",disabled:m||N||!x,onClick:function(){return l("eject_fuel")}}),children:(0,o.createComponentVNode)(2,a.Grid,{children:[(0,o.createComponentVNode)(2,a.Grid.Column,{children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Type",children:p}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Fuel level",children:(0,o.createComponentVNode)(2,a.ProgressBar,{value:k,ranges:{red:[-Infinity,.33],orange:[.33,.66],green:[.66,Infinity]},children:[Math.round(h/1e3)," dm\xb3"]})})]})}),(0,o.createComponentVNode)(2,a.Grid.Column,{children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Fuel usage",children:[f/1e3," dm\xb3/s"]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Fuel depletion",children:[!!x&&(f?I:"N/A"),!x&&(0,o.createComponentVNode)(2,a.Box,{color:"red",children:"Out of fuel"})]})]})})]})})],4)]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.PersonalCrafting=void 0;var o=n(0),r=n(1),a=n(2),c=n(4);t.PersonalCrafting=function(e,t){var n=(0,r.useBackend)(t),d=n.act,u=n.data,s=u.busy,m=u.category,p=u.display_craftable_only,f=u.display_compact,h=u.prev_cat,C=u.next_cat,N=u.subcategory,b=u.prev_subcat,g=u.next_subcat;return(0,o.createComponentVNode)(2,c.Window,{children:(0,o.createComponentVNode)(2,c.Window.Content,{scrollable:!0,children:[!!s&&(0,o.createComponentVNode)(2,a.Dimmer,{fontSize:"32px",children:[(0,o.createComponentVNode)(2,a.Icon,{name:"cog",spin:1})," Crafting..."]}),(0,o.createComponentVNode)(2,a.Section,{title:m,buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Button,{content:"Show Craftable Only",icon:p?"check-square-o":"square-o",selected:p,onClick:function(){return d("toggle_recipes")}}),(0,o.createComponentVNode)(2,a.Button,{content:"Compact Mode",icon:f?"check-square-o":"square-o",selected:f,onClick:function(){return d("toggle_compact")}})],4),children:[(0,o.createComponentVNode)(2,a.Box,{children:[(0,o.createComponentVNode)(2,a.Button,{content:h,icon:"arrow-left",onClick:function(){return d("backwardCat")}}),(0,o.createComponentVNode)(2,a.Button,{content:C,icon:"arrow-right",onClick:function(){return d("forwardCat")}})]}),N&&(0,o.createComponentVNode)(2,a.Box,{children:[(0,o.createComponentVNode)(2,a.Button,{content:b,icon:"arrow-left",onClick:function(){return d("backwardSubCat")}}),(0,o.createComponentVNode)(2,a.Button,{content:g,icon:"arrow-right",onClick:function(){return d("forwardSubCat")}})]}),f?(0,o.createComponentVNode)(2,i):(0,o.createComponentVNode)(2,l)]})]})})};var i=function(e,t){var n=(0,r.useBackend)(t),c=n.act,i=n.data,l=i.display_craftable_only,d=i.can_craft,u=i.cant_craft;return(0,o.createComponentVNode)(2,a.Box,{mt:1,children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[d.map((function(e){return(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:e.name,children:[(0,o.createComponentVNode)(2,a.Button,{icon:"hammer",content:"Craft",onClick:function(){return c("make",{make:e.ref})}}),e.catalyst_text&&(0,o.createComponentVNode)(2,a.Button,{tooltip:e.catalyst_text,content:"Catalysts",color:"transparent"}),(0,o.createComponentVNode)(2,a.Button,{tooltip:e.req_text,content:"Requirements",color:"transparent"}),e.tool_text&&(0,o.createComponentVNode)(2,a.Button,{tooltip:e.tool_text,content:"Tools",color:"transparent"})]},e.name)})),!l&&u.map((function(e){return(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:e.name,children:[(0,o.createComponentVNode)(2,a.Button,{icon:"hammer",content:"Craft",disabled:!0}),e.catalyst_text&&(0,o.createComponentVNode)(2,a.Button,{tooltip:e.catalyst_text,content:"Catalysts",color:"transparent"}),(0,o.createComponentVNode)(2,a.Button,{tooltip:e.req_text,content:"Requirements",color:"transparent"}),e.tool_text&&(0,o.createComponentVNode)(2,a.Button,{tooltip:e.tool_text,content:"Tools",color:"transparent"})]},e.name)}))]})})},l=function(e,t){var n=(0,r.useBackend)(t),c=n.act,i=n.data,l=i.display_craftable_only,d=i.can_craft,u=i.cant_craft;return(0,o.createComponentVNode)(2,a.Box,{mt:1,children:[d.map((function(e){return(0,o.createComponentVNode)(2,a.Section,{title:e.name,buttons:(0,o.createComponentVNode)(2,a.Button,{icon:"hammer",content:"Craft",onClick:function(){return c("make",{make:e.ref})}}),children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[e.catalyst_text&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Catalysts",children:e.catalyst_text}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Requirements",children:e.req_text}),e.tool_text&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Tools",children:e.tool_text})]})},e.name)})),!l&&u.map((function(e){return(0,o.createComponentVNode)(2,a.Section,{title:e.name,buttons:(0,o.createComponentVNode)(2,a.Button,{icon:"hammer",content:"Craft",disabled:!0}),children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[e.catalyst_text&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Catalysts",children:e.catalyst_text}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Requirements",children:e.req_text}),e.tool_text&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Tools",children:e.tool_text})]})},e.name)}))]})}},function(e,t,n){"use strict";t.__esModule=!0,t.PoolController=void 0;var o=n(0),r=n(1),a=n(2),c=n(4);var i={scalding:{label:"Scalding",color:"#FF0000",icon:"fa fa-arrow-circle-up",requireEmag:!0},warm:{label:"Warm",color:"#990000",icon:"fa fa-arrow-circle-up"},normal:{label:"Normal",color:null,icon:"fa fa-arrow-circle-right"},cool:{label:"Cool",color:"#009999",icon:"fa fa-arrow-circle-down"},frigid:{label:"Frigid",color:"#00CCCC",icon:"fa fa-arrow-circle-down",requireEmag:!0}},l=function(e,t){var n=e.tempKey,c=function(e,t){if(null==e)return{};var n,o,r={},a=Object.keys(e);for(o=0;o=0||(r[n]=e[n]);return r}(e,["tempKey"]),l=i[n];if(!l)return null;var d=(0,r.useBackend)(t),u=d.data,s=d.act,m=u.currentTemp,p=l.label,f=l.icon,h=n===m;return(0,o.normalizeProps)((0,o.createComponentVNode)(2,a.Button,Object.assign({selected:h,onClick:function(){s("setTemp",{temp:n})}},c,{children:[(0,o.createComponentVNode)(2,a.Icon,{name:f}),p]})))};t.PoolController=function(e,t){for(var n=(0,r.useBackend)(t).data,d=n.emagged,u=n.currentTemp,s=i[u]||i.normal,m=s.label,p=s.color,f=[],h=0,C=Object.entries(i);h0?"envelope-open-text":"envelope",onClick:function(){return i("setScreen",{setScreen:6})}})}),(0,o.createComponentVNode)(2,a.Box,{mt:2,children:[(0,o.createComponentVNode)(2,a.Box,{children:(0,o.createComponentVNode)(2,a.Button,{content:"Request Assistance",icon:"hand-paper",onClick:function(){return i("setScreen",{setScreen:1})}})}),(0,o.createComponentVNode)(2,a.Box,{children:(0,o.createComponentVNode)(2,a.Button,{content:"Request Supplies",icon:"box",onClick:function(){return i("setScreen",{setScreen:2})}})}),(0,o.createComponentVNode)(2,a.Box,{children:(0,o.createComponentVNode)(2,a.Button,{content:"Relay Anonymous Information",icon:"comment",onClick:function(){return i("setScreen",{setScreen:3})}})})]}),(0,o.createComponentVNode)(2,a.Box,{mt:2,children:[(0,o.createComponentVNode)(2,a.Box,{children:(0,o.createComponentVNode)(2,a.Button,{content:"Print Shipping Label",icon:"tag",onClick:function(){return i("setScreen",{setScreen:9})}})}),(0,o.createComponentVNode)(2,a.Box,{children:(0,o.createComponentVNode)(2,a.Button,{content:"View Shipping Logs",icon:"clipboard-list",onClick:function(){return i("setScreen",{setScreen:10})}})})]}),!!u&&(0,o.createComponentVNode)(2,a.Box,{mt:2,children:(0,o.createComponentVNode)(2,a.Button,{content:"Send Station-Wide Announcement",icon:"bullhorn",onClick:function(){return i("setScreen",{setScreen:8})}})}),(0,o.createComponentVNode)(2,a.Box,{mt:2,children:(0,o.createComponentVNode)(2,a.Button,{content:s?"Speaker Off":"Speaker On",selected:!s,icon:s?"volume-mute":"volume-up",onClick:function(){return i("toggleSilent")}})})]})},l=function(e,t){var n,c,i=(0,r.useBackend)(t),l=i.act,d=i.data,u=d.department;switch(e.purpose){case"ASSISTANCE":n=d.assist_dept,c="Request assistance from another department";break;case"SUPPLIES":n=d.supply_dept,c="Request supplies from another department";break;case"INFO":n=d.info_dept,c="Relay information to another department"}return(0,o.createComponentVNode)(2,a.Section,{title:c,buttons:(0,o.createComponentVNode)(2,a.Button,{content:"Back",icon:"arrow-left",onClick:function(){return l("setScreen",{setScreen:0})}}),children:(0,o.createComponentVNode)(2,a.LabeledList,{children:n.filter((function(e){return e!==u})).map((function(e){return(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:e,children:[(0,o.createComponentVNode)(2,a.Button,{content:"Message",icon:"envelope",onClick:function(){return l("writeInput",{write:e,priority:1})}}),(0,o.createComponentVNode)(2,a.Button,{content:"High Priority",icon:"exclamation-circle",onClick:function(){return l("writeInput",{write:e,priority:2})}})]},e)}))})})},d=function(e,t){var n,c=(0,r.useBackend)(t),i=c.act;c.data;switch(e.type){case"SUCCESS":n="Message sent successfully";break;case"FAIL":n="Request supplies from another department"}return(0,o.createComponentVNode)(2,a.Section,{title:n,buttons:(0,o.createComponentVNode)(2,a.Button,{content:"Back",icon:"arrow-left",onClick:function(){return i("setScreen",{setScreen:0})}})})},u=function(e,t){var n,c,i=(0,r.useBackend)(t),l=i.act,d=i.data;switch(e.type){case"MESSAGES":n=d.message_log,c="Message Log";break;case"SHIPPING":n=d.shipping_log,c="Shipping label print log"}return(0,o.createComponentVNode)(2,a.Section,{title:c,buttons:(0,o.createComponentVNode)(2,a.Button,{content:"Back",icon:"arrow-left",onClick:function(){return l("setScreen",{setScreen:0})}}),children:n.map((function(e){return(0,o.createComponentVNode)(2,a.Box,{children:[e.map((function(e,t){return(0,o.createVNode)(1,"div",null,e,0,null,t)})),(0,o.createVNode)(1,"hr")]},e)}))})},s=function(e,t){var n=(0,r.useBackend)(t),c=n.act,i=n.data,l=i.recipient,d=i.message,u=i.msgVerified,s=i.msgStamped;return(0,o.createComponentVNode)(2,a.Section,{title:"Message Authentication",buttons:(0,o.createComponentVNode)(2,a.Button,{content:"Back",icon:"arrow-left",onClick:function(){return c("setScreen",{setScreen:0})}}),children:[(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Recipient",children:l}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Message",children:d}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Validated by",color:"green",children:u}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Stamped by",color:"blue",children:s})]}),(0,o.createComponentVNode)(2,a.Button,{fluid:!0,mt:1,textAlign:"center",content:"Send Message",icon:"envelope",onClick:function(){return c("department",{department:l})}})]})},m=function(e,t){var n=(0,r.useBackend)(t),c=n.act,i=n.data,l=i.message,d=i.announceAuth;return(0,o.createComponentVNode)(2,a.Section,{title:"Station-Wide Announcement",buttons:(0,o.createComponentVNode)(2,a.Button,{content:"Back",icon:"arrow-left",onClick:function(){return c("setScreen",{setScreen:0})}}),children:[(0,o.createComponentVNode)(2,a.Button,{content:l||"Edit Message",icon:"edit",onClick:function(){return c("writeAnnouncement")}}),d?(0,o.createComponentVNode)(2,a.Box,{mt:1,color:"green",children:"ID verified. Authentication accepted."}):(0,o.createComponentVNode)(2,a.Box,{mt:1,children:"Swipe your ID card to authenticate yourself."}),(0,o.createComponentVNode)(2,a.Button,{fluid:!0,mt:1,textAlign:"center",content:"Send Announcement",icon:"bullhorn",disabled:!(d&&l),onClick:function(){return c("sendAnnouncement")}})]})},p=function(e,t){var n=(0,r.useBackend)(t),c=n.act,i=n.data,l=i.shipDest,d=i.msgVerified,u=i.ship_dept;return(0,o.createComponentVNode)(2,a.Section,{title:"Print Shipping Label",buttons:(0,o.createComponentVNode)(2,a.Button,{content:"Back",icon:"arrow-left",onClick:function(){return c("setScreen",{setScreen:0})}}),children:[(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Destination",children:l}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Validated by",children:d})]}),(0,o.createComponentVNode)(2,a.Button,{fluid:!0,mt:1,textAlign:"center",content:"Print Label",icon:"print",disabled:!(l&&d),onClick:function(){return c("printLabel")}}),(0,o.createComponentVNode)(2,a.Section,{title:"Destinations",mt:1,children:(0,o.createComponentVNode)(2,a.LabeledList,{children:u.map((function(e){return(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:e,children:(0,o.createComponentVNode)(2,a.Button,{content:l===e?"Selected":"Select",selected:l===e,onClick:function(){return c("shipSelect",{shipSelect:e})}})},e)}))})})]})}},function(e,t,n){"use strict";t.__esModule=!0,t.CurrentLevels=void 0;var o=n(0),r=n(1),a=n(2);t.CurrentLevels=function(e,t){var n=(0,r.useBackend)(t).data.tech_levels;return(0,o.createComponentVNode)(2,a.Box,{children:[(0,o.createVNode)(1,"h3",null,"Current Research Levels:",16),n.map((function(e,t){var n=e.name,r=e.level,c=e.desc;return(0,o.createComponentVNode)(2,a.Box,{children:[t>0?(0,o.createComponentVNode)(2,a.Divider):null,(0,o.createComponentVNode)(2,a.Box,{children:n}),(0,o.createComponentVNode)(2,a.Box,{children:["* Level: ",r]}),(0,o.createComponentVNode)(2,a.Box,{children:["* Summary: ",c]})]},n)}))]})}},function(e,t,n){"use strict";t.__esModule=!0,t.DataDiskMenu=void 0;var o=n(0),r=n(1),a=n(2),c=n(50),i=n(62),l=function(e,t){var n=(0,r.useBackend)(t),c=n.data,i=n.act,l=c.disk_data;return l?(0,o.createComponentVNode)(2,a.Box,{children:[(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Name",children:l.name}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Level",children:l.level}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Description",children:l.desc})]}),(0,o.createComponentVNode)(2,a.Box,{mt:"10px",children:[(0,o.createComponentVNode)(2,a.Button,{content:"Upload to Database",icon:"arrow-up",onClick:function(){return i("updt_tech")}}),(0,o.createComponentVNode)(2,a.Button,{content:"Clear Disk",icon:"trash",onClick:function(){return i("clear_tech")}}),(0,o.createComponentVNode)(2,s)]})]}):null},d=function(e,t){var n=(0,r.useBackend)(t),c=n.data,i=n.act,l=c.disk_data;if(!l)return null;var d=l.name,u=l.lathe_types,m=l.materials,p=u.join(", ");return(0,o.createComponentVNode)(2,a.Box,{children:[(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Name",children:d}),p?(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Lathe Types",children:p}):null,(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Required Materials"})]}),m.map((function(e){return(0,o.createComponentVNode)(2,a.Box,{children:["- ",(0,o.createVNode)(1,"span",null,e.name,0,{style:{"text-transform":"capitalize"}})," x ",e.amount]},e.name)})),(0,o.createComponentVNode)(2,a.Box,{mt:"10px",children:[(0,o.createComponentVNode)(2,a.Button,{content:"Upload to Database",icon:"arrow-up",onClick:function(){return i("updt_design")}}),(0,o.createComponentVNode)(2,a.Button,{content:"Clear Disk",icon:"trash",onClick:function(){return i("clear_design")}}),(0,o.createComponentVNode)(2,s)]})]})},u=function(e,t){var n=(0,r.useBackend)(t).data.disk_type;return(0,o.createComponentVNode)(2,a.Box,{children:[(0,o.createComponentVNode)(2,a.Box,{children:"This disk is empty."}),(0,o.createComponentVNode)(2,a.Box,{mt:"10px",children:[(0,o.createComponentVNode)(2,c.RndNavButton,{submenu:i.SUBMENU.DISK_COPY,icon:"arrow-down",content:"tech"===n?"Load Tech to Disk":"Load Design to Disk"}),(0,o.createComponentVNode)(2,s)]})]})},s=function(e,t){var n=(0,r.useBackend)(t),c=n.data,i=n.act,l=c.disk_type;return l?(0,o.createComponentVNode)(2,a.Button,{content:"Eject Disk",icon:"eject",onClick:function(){i("tech"===l?"eject_tech":"eject_design")}}):null},m=function(e,t){var n=(0,r.useBackend)(t).data,c=n.disk_data,i=n.disk_type;return(0,o.createComponentVNode)(2,a.Section,{title:"Data Disk Contents",children:function(){if(!c)return(0,o.createComponentVNode)(2,u);switch(i){case"design":return(0,o.createComponentVNode)(2,d);case"tech":return(0,o.createComponentVNode)(2,l);default:return null}}()})},p=function(e,t){var n=(0,r.useBackend)(t),c=n.data,i=n.act,l=c.disk_type,d=c.to_copy;return(0,o.createComponentVNode)(2,a.Section,{children:(0,o.createComponentVNode)(2,a.Box,{overflowY:"auto",overflowX:"hidden",maxHeight:"450px",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:d.sort((function(e,t){return e.name.localeCompare(t.name)})).map((function(e){var t=e.name,n=e.id;return(0,o.createComponentVNode)(2,a.LabeledList.Item,{noColon:!0,label:t,children:(0,o.createComponentVNode)(2,a.Button,{icon:"arrow-down",content:"Copy to Disk",onClick:function(){i("tech"===l?"copy_tech":"copy_design",{id:n})}})},n)}))})})})};t.DataDiskMenu=function(e,t){return(0,r.useBackend)(t).data.disk_type?(0,o.createFragment)([(0,o.createComponentVNode)(2,c.RndRoute,{submenu:i.SUBMENU.MAIN,render:function(){return(0,o.createComponentVNode)(2,m)}}),(0,o.createComponentVNode)(2,c.RndRoute,{submenu:i.SUBMENU.DISK_COPY,render:function(){return(0,o.createComponentVNode)(2,p)}})],4):null}},function(e,t,n){"use strict";t.__esModule=!0,t.DeconstructionMenu=void 0;var o=n(0),r=n(1),a=n(2);t.DeconstructionMenu=function(e,t){var n=(0,r.useBackend)(t),c=n.data,i=n.act,l=c.loaded_item;return c.linked_destroy?l?(0,o.createComponentVNode)(2,a.Section,{noTopPadding:!0,title:"Deconstruction Menu",children:[(0,o.createComponentVNode)(2,a.Box,{mt:"10px",children:["Name: ",l.name]}),(0,o.createComponentVNode)(2,a.Box,{mt:"10px",children:(0,o.createVNode)(1,"h3",null,"Origin Tech:",16)}),(0,o.createComponentVNode)(2,a.LabeledList,{children:l.origin_tech.map((function(e){return(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"* "+e.name,children:[e.object_level," ",e.current_level?(0,o.createFragment)([(0,o.createTextVNode)("(Current: "),e.current_level,(0,o.createTextVNode)(")")],0):null]},e.name)}))}),(0,o.createComponentVNode)(2,a.Box,{mt:"10px",children:(0,o.createVNode)(1,"h3",null,"Options:",16)}),(0,o.createComponentVNode)(2,a.Button,{content:"Deconstruct Item",icon:"unlink",onClick:function(){i("deconstruct")}}),(0,o.createComponentVNode)(2,a.Button,{content:"Eject Item",icon:"eject",onClick:function(){i("eject_item")}})]}):(0,o.createComponentVNode)(2,a.Section,{title:"Deconstruction Menu",children:"No item loaded. Standing by..."}):(0,o.createComponentVNode)(2,a.Box,{children:"NO DESTRUCTIVE ANALYZER LINKED TO CONSOLE"})}},function(e,t,n){"use strict";t.__esModule=!0,t.LatheCategory=void 0;var o=n(0),r=n(1),a=n(2),c=n(50);t.LatheCategory=function(e,t){var n=(0,r.useBackend)(t),i=n.data,l=n.act,d=i.category,u=i.matching_designs,s=4===i.menu?"build":"imprint";return(0,o.createComponentVNode)(2,a.Section,{title:d,children:[(0,o.createComponentVNode)(2,c.LatheMaterials),(0,o.createComponentVNode)(2,a.Table,{className:"RndConsole__LatheCategory__MatchingDesigns",children:u.map((function(e){var t=e.id,n=e.name,r=e.can_build,c=e.materials;return(0,o.createComponentVNode)(2,a.Table.Row,{children:[(0,o.createComponentVNode)(2,a.Table.Cell,{children:(0,o.createComponentVNode)(2,a.Button,{icon:"print",content:n,disabled:r<1,onClick:function(){return l(s,{id:t,amount:1})}})}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:r>=5?(0,o.createComponentVNode)(2,a.Button,{content:"x5",onClick:function(){return l(s,{id:t,amount:5})}}):null}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:r>=10?(0,o.createComponentVNode)(2,a.Button,{content:"x10",onClick:function(){return l(s,{id:t,amount:10})}}):null}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:c.map((function(e){return(0,o.createFragment)([" | ",(0,o.createVNode)(1,"span",e.is_red?"color-red":null,[e.amount,(0,o.createTextVNode)(" "),e.name],0)],0)}))})]},t)}))})]})}},function(e,t,n){"use strict";t.__esModule=!0,t.LatheChemicalStorage=void 0;var o=n(0),r=n(1),a=n(2);t.LatheChemicalStorage=function(e,t){var n=(0,r.useBackend)(t),c=n.data,i=n.act,l=c.loaded_chemicals,d=4===c.menu;return(0,o.createComponentVNode)(2,a.Section,{title:"Chemical Storage",children:[(0,o.createComponentVNode)(2,a.Button,{content:"Purge All",icon:"trash",onClick:function(){i(d?"disposeallP":"disposeallI")}}),(0,o.createComponentVNode)(2,a.LabeledList,{children:l.map((function(e){var t=e.volume,n=e.name,r=e.id;return(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"* "+t+" of "+n,children:(0,o.createComponentVNode)(2,a.Button,{content:"Purge",icon:"trash",onClick:function(){i(d?"disposeP":"disposeI",{id:r})}})},r)}))})]})}},function(e,t,n){"use strict";t.__esModule=!0,t.LatheMainMenu=void 0;var o=n(0),r=n(1),a=n(2),c=n(50);t.LatheMainMenu=function(e,t){var n=(0,r.useBackend)(t),i=n.data,l=n.act,d=i.menu,u=i.categories,s=4===d?"Protolathe":"Circuit Imprinter";return(0,o.createComponentVNode)(2,a.Section,{title:s+" Menu",children:[(0,o.createComponentVNode)(2,c.LatheMaterials),(0,o.createComponentVNode)(2,c.LatheSearch),(0,o.createComponentVNode)(2,a.Divider),(0,o.createComponentVNode)(2,a.Flex,{wrap:"wrap",children:u.map((function(e){return(0,o.createComponentVNode)(2,a.Flex,{style:{"flex-basis":"50%","margin-bottom":"6px"},children:(0,o.createComponentVNode)(2,a.Button,{icon:"arrow-right",content:e,onClick:function(){l("setCategory",{category:e})}})},e)}))})]})}},function(e,t,n){"use strict";t.__esModule=!0,t.LatheMaterials=void 0;var o=n(0),r=n(1),a=n(2);t.LatheMaterials=function(e,t){var n=(0,r.useBackend)(t).data,c=n.total_materials,i=n.max_materials,l=n.max_chemicals,d=n.total_chemicals;return(0,o.createComponentVNode)(2,a.Box,{className:"RndConsole__LatheMaterials",mb:"10px",children:(0,o.createComponentVNode)(2,a.Table,{width:"auto",children:[(0,o.createComponentVNode)(2,a.Table.Row,{children:[(0,o.createComponentVNode)(2,a.Table.Cell,{bold:!0,children:"Material Amount:"}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:c}),i?(0,o.createComponentVNode)(2,a.Table.Cell,{children:" / "+i}):null]}),(0,o.createComponentVNode)(2,a.Table.Row,{children:[(0,o.createComponentVNode)(2,a.Table.Cell,{bold:!0,children:"Chemical Amount:"}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:d}),l?(0,o.createComponentVNode)(2,a.Table.Cell,{children:" / "+l}):null]})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.LatheMaterialStorage=void 0;var o=n(0),r=n(1),a=n(2);t.LatheMaterialStorage=function(e,t){var n=(0,r.useBackend)(t),c=n.data,i=n.act,l=c.loaded_materials;return(0,o.createComponentVNode)(2,a.Section,{className:"RndConsole__LatheMaterialStorage",title:"Material Storage",children:(0,o.createComponentVNode)(2,a.Table,{children:l.map((function(e){var t=e.id,n=e.amount,r=e.name,l=function(e){var n=4===c.menu?"lathe_ejectsheet":"imprinter_ejectsheet";i(n,{id:t,amount:e})},d=Math.floor(n/2e3),u=n<1,s=1===d?"":"s";return(0,o.createComponentVNode)(2,a.Table.Row,{className:u?"color-grey":"color-yellow",children:[(0,o.createComponentVNode)(2,a.Table.Cell,{minWidth:"210px",children:["* ",n," of ",r]}),(0,o.createComponentVNode)(2,a.Table.Cell,{minWidth:"110px",children:["(",d," sheet",s,")"]}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:n>=2e3?(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Button,{content:"1x",icon:"eject",onClick:function(){return l(1)}}),(0,o.createComponentVNode)(2,a.Button,{content:"C",icon:"eject",onClick:function(){return l("custom")}}),n>=1e4?(0,o.createComponentVNode)(2,a.Button,{content:"5x",icon:"eject",onClick:function(){return l(5)}}):null,(0,o.createComponentVNode)(2,a.Button,{content:"All",icon:"eject",onClick:function(){return l(50)}})],0):null})]},t)}))})})}},function(e,t,n){"use strict";t.__esModule=!0,t.LatheMenu=void 0;var o=n(0),r=n(1),a=n(189),c=n(50),i=n(2),l=n(62);t.LatheMenu=function(e,t){var n=(0,r.useBackend)(t).data,d=n.menu,u=n.linked_lathe,s=n.linked_imprinter;return 4!==d||u?5!==d||s?(0,o.createComponentVNode)(2,i.Box,{children:[(0,o.createComponentVNode)(2,a.RndRoute,{submenu:l.SUBMENU.MAIN,render:function(){return(0,o.createComponentVNode)(2,c.LatheMainMenu)}}),(0,o.createComponentVNode)(2,a.RndRoute,{submenu:l.SUBMENU.LATHE_CATEGORY,render:function(){return(0,o.createComponentVNode)(2,c.LatheCategory)}}),(0,o.createComponentVNode)(2,a.RndRoute,{submenu:l.SUBMENU.LATHE_MAT_STORAGE,render:function(){return(0,o.createComponentVNode)(2,c.LatheMaterialStorage)}}),(0,o.createComponentVNode)(2,a.RndRoute,{submenu:l.SUBMENU.LATHE_CHEM_STORAGE,render:function(){return(0,o.createComponentVNode)(2,c.LatheChemicalStorage)}})]}):(0,o.createComponentVNode)(2,i.Box,{children:"NO CIRCUIT IMPRITER LINKED TO CONSOLE"}):(0,o.createComponentVNode)(2,i.Box,{children:"NO PROTOLATHE LINKED TO CONSOLE"})}},function(e,t,n){"use strict";t.__esModule=!0,t.LatheSearch=void 0;var o=n(0),r=n(1),a=n(2);t.LatheSearch=function(e,t){var n=(0,r.useBackend)(t).act;return(0,o.createComponentVNode)(2,a.Box,{children:(0,o.createComponentVNode)(2,a.Input,{placeholder:"Search...",onChange:function(e,t){return n("search",{to_search:t})}})})}},function(e,t,n){"use strict";t.__esModule=!0,t.MainMenu=void 0;var o=n(0),r=n(1),a=n(2),c=n(50),i=n(62);t.MainMenu=function(e,t){var n=(0,r.useBackend)(t).data,l=n.disk_type,d=n.linked_destroy,u=n.linked_lathe,s=n.linked_imprinter,m=n.tech_levels;return(0,o.createComponentVNode)(2,a.Section,{title:"Main Menu",children:[(0,o.createComponentVNode)(2,a.Flex,{className:"RndConsole__MainMenu__Buttons",direction:"column",align:"flex-start",children:[(0,o.createComponentVNode)(2,c.RndNavButton,{disabled:!l,menu:i.MENU.DISK,submenu:i.SUBMENU.MAIN,icon:"save",content:"Disk Operations"}),(0,o.createComponentVNode)(2,c.RndNavButton,{disabled:!d,menu:i.MENU.DESTROY,submenu:i.SUBMENU.MAIN,icon:"unlink",content:"Destructive Analyzer Menu"}),(0,o.createComponentVNode)(2,c.RndNavButton,{disabled:!u,menu:i.MENU.LATHE,submenu:i.SUBMENU.MAIN,icon:"print",content:"Protolathe Menu"}),(0,o.createComponentVNode)(2,c.RndNavButton,{disabled:!s,menu:i.MENU.IMPRINTER,submenu:i.SUBMENU.MAIN,icon:"print",content:"Circuit Imprinter Menu"}),(0,o.createComponentVNode)(2,c.RndNavButton,{menu:i.MENU.SETTINGS,submenu:i.SUBMENU.MAIN,icon:"cog",content:"Settings"})]}),(0,o.createComponentVNode)(2,a.Box,{mt:"12px"}),(0,o.createVNode)(1,"h3",null,"Current Research Levels:",16),(0,o.createComponentVNode)(2,a.LabeledList,{children:m.map((function(e){var t=e.name,n=e.level;return(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:t,children:n},t)}))})]})}},function(e,t,n){"use strict";t.__esModule=!0,t.RndNavbar=void 0;var o=n(0),r=n(50),a=n(2),c=n(62);t.RndNavbar=function(){return(0,o.createComponentVNode)(2,a.Box,{className:"RndConsole__RndNavbar",children:[(0,o.createComponentVNode)(2,r.RndRoute,{menu:function(e){return e!==c.MENU.MAIN},render:function(){return(0,o.createComponentVNode)(2,r.RndNavButton,{menu:c.MENU.MAIN,submenu:c.SUBMENU.MAIN,icon:"reply",content:"Main Menu"})}}),(0,o.createComponentVNode)(2,r.RndRoute,{submenu:function(e){return e!==c.SUBMENU.MAIN},render:function(){return(0,o.createComponentVNode)(2,a.Box,{children:[(0,o.createComponentVNode)(2,r.RndRoute,{menu:c.MENU.DISK,render:function(){return(0,o.createComponentVNode)(2,r.RndNavButton,{submenu:c.SUBMENU.MAIN,icon:"reply",content:"Disk Operations Menu"})}}),(0,o.createComponentVNode)(2,r.RndRoute,{menu:c.MENU.LATHE,render:function(){return(0,o.createComponentVNode)(2,r.RndNavButton,{submenu:c.SUBMENU.MAIN,icon:"reply",content:"Protolathe Menu"})}}),(0,o.createComponentVNode)(2,r.RndRoute,{menu:c.MENU.IMPRINTER,render:function(){return(0,o.createComponentVNode)(2,r.RndNavButton,{submenu:c.SUBMENU.MAIN,icon:"reply",content:"Circuit Imprinter Menu"})}}),(0,o.createComponentVNode)(2,r.RndRoute,{menu:c.MENU.SETTINGS,render:function(){return(0,o.createComponentVNode)(2,r.RndNavButton,{submenu:c.SUBMENU.MAIN,icon:"reply",content:"Settings Menu"})}})]})}}),(0,o.createComponentVNode)(2,r.RndRoute,{menu:function(e){return e===c.MENU.LATHE||e===c.MENU.IMPRINTER},submenu:c.SUBMENU.MAIN,render:function(){return(0,o.createComponentVNode)(2,a.Box,{children:[(0,o.createComponentVNode)(2,r.RndNavButton,{submenu:c.SUBMENU.LATHE_MAT_STORAGE,icon:"arrow-up",content:"Material Storage"}),(0,o.createComponentVNode)(2,r.RndNavButton,{submenu:c.SUBMENU.LATHE_CHEM_STORAGE,icon:"arrow-up",content:"Chemical Storage"})]})}})]})}},function(e,t,n){"use strict";t.__esModule=!0,t.RndNavButton=void 0;var o=n(0),r=n(1),a=n(2);t.RndNavButton=function(e,t){var n=e.icon,c=e.children,i=e.disabled,l=e.content,d=(0,r.useBackend)(t),u=d.data,s=d.act,m=u.menu,p=u.submenu,f=m,h=p;return null!==e.menu&&e.menu!==undefined&&(f=e.menu),null!==e.submenu&&e.submenu!==undefined&&(h=e.submenu),(0,o.createComponentVNode)(2,a.Button,{content:l,icon:n,disabled:i,onClick:function(){s("nav",{menu:f,submenu:h})},children:c})}},function(e,t,n){"use strict";t.__esModule=!0,t.SettingsMenu=void 0;var o=n(0),r=n(1),a=n(2),c=n(50),i=n(62);t.SettingsMenu=function(e,t){var n=(0,r.useBackend)(t),l=n.data,d=n.act,u=l.sync,s=l.admin,m=l.linked_destroy,p=l.linked_lathe,f=l.linked_imprinter;return(0,o.createComponentVNode)(2,a.Box,{children:[(0,o.createComponentVNode)(2,c.RndRoute,{submenu:i.SUBMENU.MAIN,render:function(){return(0,o.createComponentVNode)(2,a.Section,{title:"Settings",children:(0,o.createComponentVNode)(2,a.Flex,{direction:"column",align:"flex-start",children:[(0,o.createComponentVNode)(2,a.Button,{content:"Sync Database with Network",icon:"sync",disabled:!u,onClick:function(){d("sync")}}),(0,o.createComponentVNode)(2,a.Button,{content:"Connect to Research Network",icon:"plug",disabled:u,onClick:function(){d("togglesync")}}),(0,o.createComponentVNode)(2,a.Button,{disabled:!u,icon:"unlink",content:"Disconnect from Research Network",onClick:function(){d("togglesync")}}),(0,o.createComponentVNode)(2,c.RndNavButton,{disabled:!u,content:"Device Linkage Menu",icon:"link",menu:i.MENU.SETTINGS,submenu:i.SUBMENU.SETTINGS_DEVICES}),1===s?(0,o.createComponentVNode)(2,a.Button,{icon:"exclamation",content:"[ADMIN] Maximize Research Levels",onClick:function(){return d("maxresearch")}}):null]})})}}),(0,o.createComponentVNode)(2,c.RndRoute,{submenu:i.SUBMENU.SETTINGS_DEVICES,render:function(){return(0,o.createComponentVNode)(2,a.Section,{title:"Device Linkage Menu",children:[(0,o.createComponentVNode)(2,a.Button,{icon:"link",content:"Re-sync with Nearby Devices",onClick:function(){return d("find_device")}}),(0,o.createComponentVNode)(2,a.Box,{mt:"5px",children:(0,o.createVNode)(1,"h3",null,"Linked Devices:",16)}),(0,o.createComponentVNode)(2,a.LabeledList,{children:[m?(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"* Destructive Analyzer",children:(0,o.createComponentVNode)(2,a.Button,{icon:"unlink",content:"Unlink",onClick:function(){return d("disconnect",{item:"destroy"})}})}):(0,o.createComponentVNode)(2,a.LabeledList.Item,{noColon:!0,label:"* No Destructive Analyzer Linked"}),p?(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"* Protolathe",children:(0,o.createComponentVNode)(2,a.Button,{icon:"unlink",content:"Unlink",onClick:function(){d("disconnect",{item:"lathe"})}})}):(0,o.createComponentVNode)(2,a.LabeledList.Item,{noColon:!0,label:"* No Protolathe Linked"}),f?(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"* Circuit Imprinter",children:(0,o.createComponentVNode)(2,a.Button,{icon:"unlink",content:"Unlink",onClick:function(){return d("disconnect",{item:"imprinter"})}})}):(0,o.createComponentVNode)(2,a.LabeledList.Item,{noColon:!0,label:"* No Circuit Imprinter Linked"})]})]})}})]})}},function(e,t,n){"use strict";t.__esModule=!0,t.RobotSelfDiagnosis=void 0;var o=n(0),r=n(1),a=n(2),c=n(4),i=n(19),l=function(e,t){var n=e/t;return n<=.2?"good":n<=.5?"average":"bad"};t.RobotSelfDiagnosis=function(e,t){var n=(0,r.useBackend)(t).data.component_data;return(0,o.createComponentVNode)(2,c.Window,{children:(0,o.createComponentVNode)(2,c.Window.Content,{scrollable:!0,children:n.map((function(e,t){return(0,o.createComponentVNode)(2,a.Section,{title:(0,i.capitalize)(e.name),children:e.installed<=0?(0,o.createComponentVNode)(2,a.NoticeBox,{m:-.5,height:3.5,color:"red",style:{"font-style":"normal"},children:(0,o.createComponentVNode)(2,a.Flex,{height:"100%",children:(0,o.createComponentVNode)(2,a.Flex.Item,{grow:1,textAlign:"center",align:"center",color:"#e8e8e8",children:-1===e.installed?"Destroyed":"Missing"})})}):(0,o.createComponentVNode)(2,a.Flex,{children:[(0,o.createComponentVNode)(2,a.Flex.Item,{width:"72%",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Brute Damage",color:l(e.brute_damage,e.max_damage),children:e.brute_damage}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Burn Damage",color:l(e.electronic_damage,e.max_damage),children:e.electronic_damage})]})}),(0,o.createComponentVNode)(2,a.Flex.Item,{width:"50%",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Powered",color:e.powered?"good":"bad",children:e.powered?"Yes":"No"}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Enabled",color:e.status?"good":"bad",children:e.status?"Yes":"No"})]})})]})},t)}))})})}},function(e,t,n){"use strict";t.__esModule=!0,t.RoboticsControlConsole=void 0;var o=n(0),r=n(1),a=n(2),c=n(4);t.RoboticsControlConsole=function(e,t){var n=(0,r.useBackend)(t),l=n.act,d=n.data,u=d.can_hack,s=d.safety,m=d.show_detonate_all,p=d.cyborgs,f=void 0===p?[]:p;return(0,o.createComponentVNode)(2,c.Window,{resizable:!0,children:(0,o.createComponentVNode)(2,c.Window.Content,{scrollable:!0,children:[!!m&&(0,o.createComponentVNode)(2,a.Section,{title:"Emergency Self Destruct",children:[(0,o.createComponentVNode)(2,a.Button,{icon:s?"lock":"unlock",content:s?"Disable Safety":"Enable Safety",selected:s,onClick:function(){return l("arm",{})}}),(0,o.createComponentVNode)(2,a.Button,{icon:"bomb",disabled:s,content:"Destroy ALL Cyborgs",color:"bad",onClick:function(){return l("nuke",{})}})]}),(0,o.createComponentVNode)(2,i,{cyborgs:f,can_hack:u})]})})};var i=function(e,t){var n=e.cyborgs,c=(e.can_hack,(0,r.useBackend)(t)),i=c.act,l=c.data;return n.length?n.map((function(e){return(0,o.createComponentVNode)(2,a.Section,{title:e.name,buttons:(0,o.createFragment)([!!e.hackable&&!e.emagged&&(0,o.createComponentVNode)(2,a.Button,{icon:"terminal",content:"Hack",color:"bad",onClick:function(){return i("hackbot",{uid:e.uid})}}),(0,o.createComponentVNode)(2,a.Button.Confirm,{icon:e.locked_down?"unlock":"lock",color:e.locked_down?"good":"default",content:e.locked_down?"Release":"Lockdown",disabled:!l.auth,onClick:function(){return i("stopbot",{uid:e.uid})}}),(0,o.createComponentVNode)(2,a.Button.Confirm,{icon:"bomb",content:"Detonate",disabled:!l.auth,color:"bad",onClick:function(){return i("killbot",{uid:e.uid})}})],0),children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Status",children:(0,o.createComponentVNode)(2,a.Box,{color:e.status?"bad":e.locked_down?"average":"good",children:e.status?"Not Responding":e.locked_down?"Locked Down":"Nominal"})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Location",children:(0,o.createComponentVNode)(2,a.Box,{children:e.locstring})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Integrity",children:(0,o.createComponentVNode)(2,a.ProgressBar,{color:e.health>50?"good":"bad",value:e.health/100})}),"number"==typeof e.charge&&(0,o.createFragment)([(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Cell Charge",children:(0,o.createComponentVNode)(2,a.ProgressBar,{color:e.charge>30?"good":"bad",value:e.charge/100})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Cell Capacity",children:(0,o.createComponentVNode)(2,a.Box,{color:e.cell_capacity<3e4?"average":"good",children:e.cell_capacity})})],4)||(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Cell",children:(0,o.createComponentVNode)(2,a.Box,{color:"bad",children:"No Power Cell"})}),!!e.is_hacked&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Safeties",children:(0,o.createComponentVNode)(2,a.Box,{color:"bad",children:"DISABLED"})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Module",children:e.module}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Master AI",children:(0,o.createComponentVNode)(2,a.Box,{color:e.synchronization?"default":"average",children:e.synchronization||"None"})})]})},e.uid)})):(0,o.createComponentVNode)(2,a.NoticeBox,{children:"No cyborg units detected within access parameters."})}},function(e,t,n){"use strict";t.__esModule=!0,t.Safe=void 0;var o=n(0),r=n(1),a=n(2),c=n(4);t.Safe=function(e,t){var n=(0,r.useBackend)(t),u=(n.act,n.data),s=u.dial,m=u.open;u.locked,u.contents;return(0,o.createComponentVNode)(2,c.Window,{theme:"safe",children:(0,o.createComponentVNode)(2,c.Window.Content,{children:[(0,o.createComponentVNode)(2,a.Box,{className:"Safe--engraving",children:[(0,o.createComponentVNode)(2,i),(0,o.createComponentVNode)(2,a.Box,{children:[(0,o.createComponentVNode)(2,a.Box,{className:"Safe--engraving--hinge",top:"25%"}),(0,o.createComponentVNode)(2,a.Box,{className:"Safe--engraving--hinge",top:"75%"})]}),(0,o.createComponentVNode)(2,a.Icon,{className:"Safe--engraving--arrow",name:"long-arrow-alt-down",size:"3"}),(0,o.createVNode)(1,"br"),m?(0,o.createComponentVNode)(2,l):(0,o.createComponentVNode)(2,a.Box,{as:"img",className:"Safe--dial",src:"safe_dial.png",style:{transform:"rotate(-"+3.6*s+"deg)","z-index":0}})]}),!m&&(0,o.createComponentVNode)(2,d)]})})};var i=function(e,t){var n=(0,r.useBackend)(t),c=n.act,i=n.data,l=i.dial,d=i.open,u=i.locked,s=function(e,t){return(0,o.createComponentVNode)(2,a.Button,{disabled:d||t&&!u,icon:"arrow-"+(t?"right":"left"),content:(t?"Right":"Left")+" "+e,iconRight:t,onClick:function(){return c(t?"turnleft":"turnright",{num:e})},style:{"z-index":10}})};return(0,o.createComponentVNode)(2,a.Box,{className:"Safe--dialer",children:[(0,o.createComponentVNode)(2,a.Button,{disabled:u,icon:d?"lock":"lock-open",content:d?"Close":"Open",mb:"0.5rem",onClick:function(){return c("open")}}),(0,o.createVNode)(1,"br"),(0,o.createComponentVNode)(2,a.Box,{position:"absolute",children:[s(50),s(10),s(1)]}),(0,o.createComponentVNode)(2,a.Box,{className:"Safe--dialer--right",position:"absolute",right:"5px",children:[s(1,!0),s(10,!0),s(50,!0)]}),(0,o.createComponentVNode)(2,a.Box,{className:"Safe--dialer--number",children:l})]})},l=function(e,t){var n=(0,r.useBackend)(t),c=n.act,i=n.data.contents;return(0,o.createComponentVNode)(2,a.Box,{className:"Safe--contents",overflow:"auto",children:i.map((function(e,t){return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Button,{mb:"0.5rem",onClick:function(){return c("retrieve",{index:t+1})},children:[(0,o.createComponentVNode)(2,a.Box,{as:"img",src:e.sprite+".png",verticalAlign:"middle",ml:"-6px",mr:"0.5rem"}),e.name]}),(0,o.createVNode)(1,"br")],4,e)}))})},d=function(e,t){return(0,o.createComponentVNode)(2,a.Section,{className:"Safe--help",title:"Safe opening instructions (because you all keep forgetting)",children:[(0,o.createComponentVNode)(2,a.Box,{children:["1. Turn the dial left to the first number.",(0,o.createVNode)(1,"br"),"2. Turn the dial right to the second number.",(0,o.createVNode)(1,"br"),"3. Continue repeating this process for each number, switching between left and right each time.",(0,o.createVNode)(1,"br"),"4. Open the safe."]}),(0,o.createComponentVNode)(2,a.Box,{bold:!0,children:"To lock fully, turn the dial to the left after closing the safe."})]})}},function(e,t,n){"use strict";t.__esModule=!0,t.SatelliteControl=void 0;var o=n(0),r=n(1),a=n(2),c=n(4);t.SatelliteControl=function(e,t){var n=(0,r.useBackend)(t),i=n.act,l=n.data,d=l.satellites,u=l.notice,s=l.meteor_shield,m=l.meteor_shield_coverage,p=l.meteor_shield_coverage_max,f=l.meteor_shield_coverage_percentage;return(0,o.createComponentVNode)(2,c.Window,{resizable:!0,children:(0,o.createComponentVNode)(2,c.Window.Content,{scrollable:!0,children:[s&&(0,o.createComponentVNode)(2,a.Section,{title:"Station Shield Coverage",children:(0,o.createComponentVNode)(2,a.ProgressBar,{color:f>=100?"good":"average",value:m,maxValue:p,children:[f," %"]})}),(0,o.createComponentVNode)(2,a.Section,{title:"Satellite Network Control",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[u&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Alert",color:"red",children:l.notice}),d.map((function(e){return(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"#"+e.id,children:[e.mode," ",(0,o.createComponentVNode)(2,a.Button,{content:e.active?"Deactivate":"Activate",icon:"arrow-circle-right",onClick:function(){return i("toggle",{id:e.id})}})]},e.id)}))]})})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.SecurityRecords=void 0;var o=n(0),r=n(19),a=n(1),c=n(2),i=n(75),l=n(4),d=n(49),u=n(132),s=n(133),m=n(136),p={"*Execute*":"execute","*Arrest*":"arrest",Incarcerated:"incarcerated",Parolled:"parolled",Released:"released",Demote:"demote",Search:"search",Monitor:"monitor"},f=function(e,t){(0,d.modalOpen)(e,"edit",{field:t.edit,value:t.value})};t.SecurityRecords=function(e,t){var n,r=(0,a.useBackend)(t),i=(r.act,r.data),p=i.loginState,f=i.currentPage;return p.logged_in?(1===f?n=(0,o.createComponentVNode)(2,C):2===f&&(n=(0,o.createComponentVNode)(2,g)),(0,o.createComponentVNode)(2,l.Window,{theme:"security",resizable:!0,children:[(0,o.createComponentVNode)(2,d.ComplexModal),(0,o.createComponentVNode)(2,l.Window.Content,{scrollable:!0,className:"Layout__content--flexColumn",children:[(0,o.createComponentVNode)(2,u.LoginInfo),(0,o.createComponentVNode)(2,m.TemporaryNotice),(0,o.createComponentVNode)(2,h),(0,o.createComponentVNode)(2,c.Section,{height:"100%",flexGrow:"1",children:n})]})]})):(0,o.createComponentVNode)(2,l.Window,{theme:"security",resizable:!0,children:(0,o.createComponentVNode)(2,l.Window.Content,{children:(0,o.createComponentVNode)(2,s.LoginScreen)})})};var h=function(e,t){var n=(0,a.useBackend)(t),r=n.act,i=n.data,l=i.currentPage,d=i.general;return(0,o.createComponentVNode)(2,c.Tabs,{children:[(0,o.createComponentVNode)(2,c.Tabs.Tab,{selected:1===l,onClick:function(){return r("page",{page:1})},children:[(0,o.createComponentVNode)(2,c.Icon,{name:"list"}),"List Records"]}),2===l&&d&&!d.empty&&(0,o.createComponentVNode)(2,c.Tabs.Tab,{selected:2===l,children:[(0,o.createComponentVNode)(2,c.Icon,{name:"file"}),"Record: ",d.fields[0].value]})]})},C=function(e,t){var n=(0,a.useBackend)(t),i=n.act,l=n.data.records,d=(0,a.useLocalState)(t,"searchText",""),u=d[0],s=(d[1],(0,a.useLocalState)(t,"sortId","name")),m=s[0],f=(s[1],(0,a.useLocalState)(t,"sortOrder",!0)),h=f[0];f[1];return(0,o.createComponentVNode)(2,c.Flex,{direction:"column",height:"100%",children:[(0,o.createComponentVNode)(2,b),(0,o.createComponentVNode)(2,c.Section,{flexGrow:"1",mt:"0.5rem",children:(0,o.createComponentVNode)(2,c.Table,{className:"SecurityRecords__list",children:[(0,o.createComponentVNode)(2,c.Table.Row,{bold:!0,children:[(0,o.createComponentVNode)(2,N,{id:"name",children:"Name"}),(0,o.createComponentVNode)(2,N,{id:"id",children:"ID"}),(0,o.createComponentVNode)(2,N,{id:"rank",children:"Assignment"}),(0,o.createComponentVNode)(2,N,{id:"fingerprint",children:"Fingerprint"}),(0,o.createComponentVNode)(2,N,{id:"status",children:"Criminal Status"})]}),l.filter((0,r.createSearch)(u,(function(e){return e.name+"|"+e.id+"|"+e.rank+"|"+e.fingerprint+"|"+e.status}))).sort((function(e,t){var n=h?1:-1;return e[m].localeCompare(t[m])*n})).map((function(e){return(0,o.createComponentVNode)(2,c.Table.Row,{className:"SecurityRecords__listRow--"+p[e.status],onClick:function(){return i("view",{uid_gen:e.uid_gen,uid_sec:e.uid_sec})},children:[(0,o.createComponentVNode)(2,c.Table.Cell,{children:[(0,o.createComponentVNode)(2,c.Icon,{name:"user"})," ",e.name]}),(0,o.createComponentVNode)(2,c.Table.Cell,{children:e.id}),(0,o.createComponentVNode)(2,c.Table.Cell,{children:e.rank}),(0,o.createComponentVNode)(2,c.Table.Cell,{children:e.fingerprint}),(0,o.createComponentVNode)(2,c.Table.Cell,{children:e.status})]},e.id)}))]})})]})},N=function(e,t){var n=(0,a.useLocalState)(t,"sortId","name"),r=n[0],i=n[1],l=(0,a.useLocalState)(t,"sortOrder",!0),d=l[0],u=l[1],s=e.id,m=e.children;return(0,o.createComponentVNode)(2,c.Table.Cell,{children:(0,o.createComponentVNode)(2,c.Button,{color:r!==s&&"transparent",width:"100%",onClick:function(){r===s?u(!d):(i(s),u(!0))},children:[m,r===s&&(0,o.createComponentVNode)(2,c.Icon,{name:d?"sort-up":"sort-down",ml:"0.25rem;"})]})})},b=function(e,t){var n=(0,a.useBackend)(t),r=n.act,l=n.data.isPrinting,u=(0,a.useLocalState)(t,"searchText",""),s=(u[0],u[1]);return(0,o.createComponentVNode)(2,c.Flex,{children:[(0,o.createComponentVNode)(2,i.FlexItem,{children:[(0,o.createComponentVNode)(2,c.Button,{content:"New Record",icon:"plus",onClick:function(){return r("new_general")}}),(0,o.createComponentVNode)(2,c.Button,{disabled:l,icon:l?"spinner":"print",iconSpin:!!l,content:"Print Cell Log",ml:"0.25rem",onClick:function(){return(0,d.modalOpen)(t,"print_cell_log")}})]}),(0,o.createComponentVNode)(2,i.FlexItem,{grow:"1",ml:"0.5rem",children:(0,o.createComponentVNode)(2,c.Input,{placeholder:"Search by Name, ID, Assignment, Fingerprint, Status",width:"100%",onInput:function(e,t){return s(t)}})})]})},g=function(e,t){var n=(0,a.useBackend)(t),r=n.act,i=n.data,l=i.isPrinting,d=i.general,u=i.security;return d&&d.fields?(0,o.createFragment)([(0,o.createComponentVNode)(2,c.Section,{title:"General Data",level:2,mt:"-6px",buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,c.Button,{disabled:l,icon:l?"spinner":"print",iconSpin:!!l,content:"Print Record",onClick:function(){return r("print_record")}}),(0,o.createComponentVNode)(2,c.Button.Confirm,{icon:"trash",tooltip:"WARNING: This will also delete the Security and Medical records associated to this crew member!",tooltipPosition:"bottom-left",content:"Delete Record",onClick:function(){return r("delete_general")}})],4),children:(0,o.createComponentVNode)(2,V)}),(0,o.createComponentVNode)(2,c.Section,{title:"Security Data",level:2,mt:"-12px",buttons:(0,o.createComponentVNode)(2,c.Button.Confirm,{icon:"trash",disabled:u.empty,content:"Delete Record",onClick:function(){return r("delete_security")}}),children:(0,o.createComponentVNode)(2,v)})],4):(0,o.createComponentVNode)(2,c.Box,{color:"bad",children:"General records lost!"})},V=function(e,t){var n=(0,a.useBackend)(t).data.general;return n&&n.fields?(0,o.createFragment)([(0,o.createComponentVNode)(2,c.Box,{float:"left",children:(0,o.createComponentVNode)(2,c.LabeledList,{children:n.fields.map((function(e,n){return(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:e.field,children:[(0,r.decodeHtmlEntities)(""+e.value),!!e.edit&&(0,o.createComponentVNode)(2,c.Button,{icon:"pen",ml:"0.5rem",mb:e.line_break?"1rem":"initial",onClick:function(){return f(t,e)}})]},n)}))})}),(0,o.createComponentVNode)(2,c.Box,{position:"absolute",right:"0",textAlign:"right",children:!!n.has_photos&&n.photos.map((function(e,t){return(0,o.createComponentVNode)(2,c.Box,{display:"inline-block",textAlign:"center",color:"label",children:[(0,o.createVNode)(1,"img",null,null,1,{src:e,style:{width:"96px","margin-bottom":"0.5rem","-ms-interpolation-mode":"nearest-neighbor"}}),(0,o.createVNode)(1,"br"),"Photo #",t+1]},t)}))})],4):(0,o.createComponentVNode)(2,c.Box,{color:"bad",children:"General records lost!"})},v=function(e,t){var n=(0,a.useBackend)(t),i=n.act,l=n.data.security;return l&&l.fields?(0,o.createFragment)([(0,o.createComponentVNode)(2,c.LabeledList,{children:l.fields.map((function(e,n){return(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:e.field,children:[(0,r.decodeHtmlEntities)(e.value),!!e.edit&&(0,o.createComponentVNode)(2,c.Button,{icon:"pen",ml:"0.5rem",mb:e.line_break?"1rem":"initial",onClick:function(){return f(t,e)}})]},n)}))}),(0,o.createComponentVNode)(2,c.Section,{title:"Comments/Log",level:2,buttons:(0,o.createComponentVNode)(2,c.Button,{icon:"comment",content:"Add Entry",onClick:function(){return(0,d.modalOpen)(t,"comment_add")}}),children:0===l.comments.length?(0,o.createComponentVNode)(2,c.Box,{color:"label",children:"No comments found."}):l.comments.map((function(e,t){return(0,o.createComponentVNode)(2,c.Box,{children:[(0,o.createComponentVNode)(2,c.Box,{color:"label",display:"inline",children:e.header||"Auto-generated"}),(0,o.createVNode)(1,"br"),e.text||e,(0,o.createComponentVNode)(2,c.Button,{icon:"comment-slash",color:"bad",ml:"0.5rem",onClick:function(){return i("comment_delete",{id:t+1})}})]},t)}))})],4):(0,o.createComponentVNode)(2,c.Box,{color:"bad",children:["Security records lost!",(0,o.createVNode)(1,"br"),(0,o.createComponentVNode)(2,c.Button,{icon:"pen",content:"Create New Record",mt:"0.5rem",onClick:function(){return i("new_security")}})]})}},function(e,t,n){"use strict";t.__esModule=!0,t.ShuttleConsole=void 0;var o=n(0),r=n(1),a=n(2),c=n(4),i=n(77);t.ShuttleConsole=function(e,t){var n=(0,r.useBackend)(t),l=n.act,d=n.data;return(0,o.createComponentVNode)(2,c.Window,{resizable:!0,children:(0,o.createComponentVNode)(2,c.Window.Content,{children:(0,o.createComponentVNode)(2,a.Section,{children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Location",children:d.status?d.status:(0,o.createComponentVNode)(2,a.NoticeBox,{color:"red",children:"Shuttle Missing"})}),!!d.shuttle&&(!!d.docking_ports_len&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Send to ",children:d.docking_ports.map((function(e){return(0,o.createComponentVNode)(2,a.Button,{icon:"chevron-right",content:e.name,onClick:function(){return l("move",{move:e.id})}},e.name)}))})||(0,o.createFragment)([(0,o.createComponentVNode)(2,i.LabeledListItem,{label:"Status",color:"red",children:(0,o.createComponentVNode)(2,a.NoticeBox,{color:"red",children:"Shuttle Locked"})}),!!d.admin_controlled&&(0,o.createComponentVNode)(2,i.LabeledListItem,{label:"Authorization",children:(0,o.createComponentVNode)(2,a.Button,{icon:"exclamation-circle",content:"Request Authorization",disabled:!d.status,onClick:function(){return l("request")}})})],0))]})})})})}},function(e,t,n){"use strict";t.__esModule=!0,t.ShuttleManipulator=void 0;var o=n(0),r=n(1),a=n(2),c=n(4);t.ShuttleManipulator=function(e,t){var n=(0,r.useLocalState)(t,"tabIndex",0),u=n[0],s=n[1];return(0,o.createComponentVNode)(2,c.Window,{children:(0,o.createComponentVNode)(2,c.Window.Content,{scrollable:!0,children:(0,o.createComponentVNode)(2,a.Box,{fillPositionedParent:!0,children:[(0,o.createComponentVNode)(2,a.Tabs,{children:[(0,o.createComponentVNode)(2,a.Tabs.Tab,{selected:0===u,onClick:function(){return s(0)},icon:"info-circle",content:"Status"},"Status"),(0,o.createComponentVNode)(2,a.Tabs.Tab,{selected:1===u,onClick:function(){return s(1)},icon:"file-import",content:"Templates"},"Templates"),(0,o.createComponentVNode)(2,a.Tabs.Tab,{selected:2===u,onClick:function(){return s(2)},icon:"tools",content:"Modification"},"Modification")]}),function(e){switch(e){case 0:return(0,o.createComponentVNode)(2,i);case 1:return(0,o.createComponentVNode)(2,l);case 2:return(0,o.createComponentVNode)(2,d);default:return"WE SHOULDN'T BE HERE!"}}(u)]})})})};var i=function(e,t){var n=(0,r.useBackend)(t),c=n.act,i=n.data.shuttles;return(0,o.createComponentVNode)(2,a.Box,{children:i.map((function(e){return(0,o.createComponentVNode)(2,a.Section,{title:e.name,children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"ID",children:e.id}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Shuttle Timer",children:e.timeleft}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Shuttle Mode",children:e.mode}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Shuttle Status",children:e.status}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Actions",children:[(0,o.createComponentVNode)(2,a.Button,{content:"Jump To",icon:"location-arrow",onClick:function(){return c("jump_to",{type:"mobile",id:e.id})}}),(0,o.createComponentVNode)(2,a.Button,{content:"Fast Travel",icon:"fast-forward",onClick:function(){return c("fast_travel",{id:e.id})}})]})]})},e.name)}))})},l=function(e,t){var n=(0,r.useBackend)(t),c=n.act,i=n.data,l=i.templates_tabs,d=i.existing_shuttle,u=i.templates;return(0,o.createComponentVNode)(2,a.Box,{children:[(0,o.createComponentVNode)(2,a.Tabs,{children:l.map((function(e){return(0,o.createComponentVNode)(2,a.Tabs.Tab,{selected:e===d.id,icon:"file",content:e,onClick:function(){return c("select_template_category",{cat:e})}},e)}))}),!!d&&u[d.id].templates.map((function(e){return(0,o.createComponentVNode)(2,a.Section,{title:e.name,children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[e.description&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Description",children:e.description}),e.admin_notes&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Admin Notes",children:e.admin_notes}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Actions",children:(0,o.createComponentVNode)(2,a.Button,{content:"Load Template",icon:"download",onClick:function(){return c("select_template",{shuttle_id:e.shuttle_id})}})})]})},e.name)}))]})},d=function(e,t){var n=(0,r.useBackend)(t),c=n.act,i=n.data,l=i.existing_shuttle,d=i.selected;return(0,o.createComponentVNode)(2,a.Box,{children:[l?(0,o.createComponentVNode)(2,a.Section,{title:"Selected Shuttle: "+l.name,children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Status",children:l.status}),l.timer&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Timer",children:l.timeleft}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Actions",children:(0,o.createComponentVNode)(2,a.Button,{content:"Jump To",icon:"location-arrow",onClick:function(){return c("jump_to",{type:"mobile",id:l.id})}})})]})}):(0,o.createComponentVNode)(2,a.Section,{title:"Selected Shuttle: None"}),d?(0,o.createComponentVNode)(2,a.Section,{title:"Selected Template: "+d.name,children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[d.description&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Description",children:d.description}),d.admin_notes&&(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Admin Notes",children:d.admin_notes}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Actions",children:[(0,o.createComponentVNode)(2,a.Button,{content:"Preview",icon:"eye",onClick:function(){return c("preview",{shuttle_id:d.shuttle_id})}}),(0,o.createComponentVNode)(2,a.Button,{content:"Load",icon:"download",onClick:function(){return c("load",{shuttle_id:d.shuttle_id})}})]})]})}):(0,o.createComponentVNode)(2,a.Section,{title:"Selected Template: None"})]})}},function(e,t,n){"use strict";t.__esModule=!0,t.Sleeper=void 0;var o=n(0),r=n(15),a=n(1),c=n(2),i=n(4),l=[["good","Alive"],["average","Critical"],["bad","DEAD"]],d=[["Resp.","oxyLoss"],["Toxin","toxLoss"],["Brute","bruteLoss"],["Burn","fireLoss"]],u={average:[.25,.5],bad:[.5,Infinity]},s=["bad","average","average","good","average","average","bad"];t.Sleeper=function(e,t){var n=(0,a.useBackend)(t),r=(n.act,n.data.hasOccupant?(0,o.createComponentVNode)(2,m):(0,o.createComponentVNode)(2,N));return(0,o.createComponentVNode)(2,i.Window,{resizable:!0,children:(0,o.createComponentVNode)(2,i.Window.Content,{className:"Layout__content--flexColumn",children:[r,(0,o.createComponentVNode)(2,h)]})})};var m=function(e,t){var n=(0,a.useBackend)(t);n.act,n.data.occupant;return(0,o.createFragment)([(0,o.createComponentVNode)(2,p),(0,o.createComponentVNode)(2,f),(0,o.createComponentVNode)(2,C)],4)},p=function(e,t){var n=(0,a.useBackend)(t),i=n.act,d=n.data,u=d.occupant,m=d.auto_eject_dead;return(0,o.createComponentVNode)(2,c.Section,{title:"Occupant",buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,c.Box,{color:"label",display:"inline",children:"Auto-eject if dead:\xa0"}),(0,o.createComponentVNode)(2,c.Button,{icon:m?"toggle-on":"toggle-off",selected:m,content:m?"On":"Off",onClick:function(){return i("auto_eject_dead_"+(m?"off":"on"))}}),(0,o.createComponentVNode)(2,c.Button,{icon:"user-slash",content:"Eject",onClick:function(){return i("ejectify")}})],4),children:(0,o.createComponentVNode)(2,c.LabeledList,{children:[(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Name",children:u.name}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Health",children:(0,o.createComponentVNode)(2,c.ProgressBar,{min:"0",max:u.maxHealth,value:u.health/u.maxHealth,ranges:{good:[.5,Infinity],average:[0,.5],bad:[-Infinity,0]},children:(0,r.round)(u.health,0)})}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Status",color:l[u.stat][0],children:l[u.stat][1]}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Temperature",children:(0,o.createComponentVNode)(2,c.ProgressBar,{min:"0",max:u.maxTemp,value:u.bodyTemperature/u.maxTemp,color:s[u.temperatureSuitability+3],children:[(0,r.round)(u.btCelsius,0),"\xb0C,",(0,r.round)(u.btFaren,0),"\xb0F"]})}),!!u.hasBlood&&(0,o.createFragment)([(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Blood Level",children:(0,o.createComponentVNode)(2,c.ProgressBar,{min:"0",max:u.bloodMax,value:u.bloodLevel/u.bloodMax,ranges:{bad:[-Infinity,.6],average:[.6,.9],good:[.6,Infinity]},children:[u.bloodPercent,"%, ",u.bloodLevel,"cl"]})}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Pulse",verticalAlign:"middle",children:[u.pulse," BPM"]})],4)]})})},f=function(e,t){var n=(0,a.useBackend)(t).data.occupant;return(0,o.createComponentVNode)(2,c.Section,{title:"Occupant Damage",children:(0,o.createComponentVNode)(2,c.LabeledList,{children:d.map((function(e,t){return(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:e[0],children:(0,o.createComponentVNode)(2,c.ProgressBar,{min:"0",max:"100",value:n[e[1]]/100,ranges:u,children:(0,r.round)(n[e[1]],0)},t)},t)}))})})},h=function(e,t){var n=(0,a.useBackend)(t),r=n.act,i=n.data,l=i.hasOccupant,d=i.isBeakerLoaded,u=i.beakerMaxSpace,s=i.beakerFreeSpace,m=i.dialysis&&s>0;return(0,o.createComponentVNode)(2,c.Section,{title:"Dialysis",buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,c.Button,{disabled:!d||s<=0||!l,selected:m,icon:m?"toggle-on":"toggle-off",content:m?"Active":"Inactive",onClick:function(){return r("togglefilter")}}),(0,o.createComponentVNode)(2,c.Button,{disabled:!d,icon:"eject",content:"Eject",onClick:function(){return r("removebeaker")}})],4),children:d?(0,o.createComponentVNode)(2,c.LabeledList,{children:(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Remaining Space",children:(0,o.createComponentVNode)(2,c.ProgressBar,{min:"0",max:u,value:s/u,ranges:{good:[.5,Infinity],average:[.25,.5],bad:[-Infinity,.25]},children:[s,"u"]})})}):(0,o.createComponentVNode)(2,c.Box,{color:"label",children:"No beaker loaded."})})},C=function(e,t){var n=(0,a.useBackend)(t),r=n.act,i=n.data,l=i.occupant,d=i.chemicals,u=i.maxchem,s=i.amounts;return(0,o.createComponentVNode)(2,c.Section,{title:"Occupant Chemicals",flexGrow:"1",children:d.map((function(e,t){var n,a="";return e.overdosing?(a="bad",n=(0,o.createComponentVNode)(2,c.Box,{color:"bad",children:[(0,o.createComponentVNode)(2,c.Icon,{name:"exclamation-circle"}),"\xa0 Overdosing!"]})):e.od_warning&&(a="average",n=(0,o.createComponentVNode)(2,c.Box,{color:"average",children:[(0,o.createComponentVNode)(2,c.Icon,{name:"exclamation-triangle"}),"\xa0 Close to overdosing"]})),(0,o.createComponentVNode)(2,c.Box,{backgroundColor:"rgba(0, 0, 0, 0.33)",mb:"0.5rem",children:(0,o.createComponentVNode)(2,c.Section,{title:e.title,level:"3",mx:"0",lineHeight:"18px",buttons:n,children:(0,o.createComponentVNode)(2,c.Flex,{align:"flex-start",children:[(0,o.createComponentVNode)(2,c.ProgressBar,{min:"0",max:u,value:e.occ_amount/u,color:a,title:"Amount of chemicals currently inside the occupant / Total amount injectable by this machine",mr:"0.5rem",children:[e.pretty_amount,"/",u,"u"]}),s.map((function(t,n){return(0,o.createComponentVNode)(2,c.Button,{disabled:!e.injectable||e.occ_amount+t>u||2===l.stat,icon:"syringe",content:"Inject "+t+"u",title:"Inject "+t+"u of "+e.title+" into the occupant",mb:"0",height:"19px",onClick:function(){return r("chemical",{chemid:e.id,amount:t})}},n)}))]})})},t)}))})},N=function(e,t){return(0,o.createComponentVNode)(2,c.Section,{textAlign:"center",flexGrow:"1",children:(0,o.createComponentVNode)(2,c.Flex,{height:"100%",children:(0,o.createComponentVNode)(2,c.Flex.Item,{grow:"1",align:"center",color:"label",children:[(0,o.createComponentVNode)(2,c.Icon,{name:"user-slash",mb:"0.5rem",size:"5"}),(0,o.createVNode)(1,"br"),"No occupant detected."]})})})}},function(e,t,n){"use strict";t.__esModule=!0,t.SlotMachine=void 0;var o=n(0),r=n(1),a=n(2),c=n(4);t.SlotMachine=function(e,t){var n,i=(0,r.useBackend)(t),l=i.act,d=i.data;return null===d.money?(0,o.createComponentVNode)(2,c.Window,{children:(0,o.createComponentVNode)(2,c.Window.Content,{children:(0,o.createComponentVNode)(2,a.Section,{children:[(0,o.createComponentVNode)(2,a.Box,{children:"Could not scan your card or could not find account!"}),(0,o.createComponentVNode)(2,a.Box,{children:"Please wear or hold your ID and try again."})]})})}):(n=1===d.plays?d.plays+" player has tried their luck today!":d.plays+" players have tried their luck today!",(0,o.createComponentVNode)(2,c.Window,{children:(0,o.createComponentVNode)(2,c.Window.Content,{children:(0,o.createComponentVNode)(2,a.Section,{children:[(0,o.createComponentVNode)(2,a.Box,{lineHeight:2,children:n}),(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Credits Remaining",children:(0,o.createComponentVNode)(2,a.AnimatedNumber,{value:d.money})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"50 credits to spin",children:(0,o.createComponentVNode)(2,a.Button,{icon:"coins",disabled:d.working,content:d.working?"Spinning...":"Spin",onClick:function(){return l("spin")}})})]}),(0,o.createComponentVNode)(2,a.Box,{bold:!0,lineHeight:2,color:d.resultlvl,children:d.result})]})})}))}},function(e,t,n){"use strict";t.__esModule=!0,t.Smartfridge=void 0;var o=n(0),r=n(1),a=n(2),c=n(4);t.Smartfridge=function(e,t){var n=(0,r.useBackend)(t),i=n.act,l=n.data,d=l.secure,u=l.can_dry,s=l.drying,m=l.contents;return(0,o.createComponentVNode)(2,c.Window,{children:(0,o.createComponentVNode)(2,c.Window.Content,{children:[!!d&&(0,o.createComponentVNode)(2,a.Section,{title:"Secure",children:(0,o.createComponentVNode)(2,a.NoticeBox,{children:"Secure Access: Please have your identification ready."})}),!!u&&(0,o.createComponentVNode)(2,a.Section,{title:"Drying rack",children:(0,o.createComponentVNode)(2,a.Button,{icon:s?"power-off":"times",content:s?"On":"Off",selected:s,onClick:function(){return i("drying")}})}),(0,o.createComponentVNode)(2,a.Section,{title:"Contents",children:[!m&&(0,o.createComponentVNode)(2,a.Box,{color:"average",children:" No products loaded. "}),!!m&&m.map((function(e){return(0,o.createComponentVNode)(2,a.Flex,{direction:"row",children:[(0,o.createComponentVNode)(2,a.Flex.Item,{width:"45%",children:e.display_name}),(0,o.createComponentVNode)(2,a.Flex.Item,{width:"25%",children:["(",e.quantity," in stock)"]}),(0,o.createComponentVNode)(2,a.Flex.Item,{width:"30%",children:[(0,o.createComponentVNode)(2,a.Button,{icon:"arrow-down",tooltip:"Dispense one.",content:"1",onClick:function(){return i("vend",{index:e.vend,amount:1})}}),(0,o.createComponentVNode)(2,a.NumberInput,{width:"40px",minValue:0,value:0,maxValue:e.quantity,step:1,stepPixelSize:3,onChange:function(t,n){return i("vend",{index:e.vend,amount:n})}}),(0,o.createComponentVNode)(2,a.Button,{icon:"arrow-down",content:"All",tooltip:"Dispense all. ",onClick:function(){return i("vend",{index:e.vend,amount:e.quantity})}})]})]},e)}))]})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.Smes=void 0;var o=n(0),r=n(1),a=n(2),c=n(95),i=n(4);t.Smes=function(e,t){var n=(0,r.useBackend)(t),l=n.act,d=n.data,u=d.capacityPercent,s=(d.capacity,d.charge),m=d.inputAttempt,p=d.inputting,f=d.inputLevel,h=d.inputLevelMax,C=d.inputAvailable,N=d.outputAttempt,b=d.outputting,g=d.outputLevel,V=d.outputLevelMax,v=d.outputUsed,y=(u>=100?"good":p&&"average")||"bad",_=(b?"good":s>0&&"average")||"bad";return(0,o.createComponentVNode)(2,i.Window,{children:(0,o.createComponentVNode)(2,i.Window.Content,{children:[(0,o.createComponentVNode)(2,a.Section,{title:"Stored Energy",children:(0,o.createComponentVNode)(2,a.ProgressBar,{value:.01*u,ranges:{good:[.5,Infinity],average:[.15,.5],bad:[-Infinity,.15]}})}),(0,o.createComponentVNode)(2,a.Section,{title:"Input",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Charge Mode",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:m?"sync-alt":"times",selected:m,onClick:function(){return l("tryinput")},children:m?"Auto":"Off"}),children:(0,o.createComponentVNode)(2,a.Box,{color:y,children:(u>=100?"Fully Charged":p&&"Charging")||"Not Charging"})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Target Input",children:(0,o.createComponentVNode)(2,a.Flex,{inline:!0,width:"100%",children:[(0,o.createComponentVNode)(2,a.Flex.Item,{children:[(0,o.createComponentVNode)(2,a.Button,{icon:"fast-backward",disabled:0===f,onClick:function(){return l("input",{target:"min"})}}),(0,o.createComponentVNode)(2,a.Button,{icon:"backward",disabled:0===f,onClick:function(){return l("input",{adjust:-1e4})}})]}),(0,o.createComponentVNode)(2,a.Flex.Item,{grow:1,mx:1,children:(0,o.createComponentVNode)(2,a.Slider,{value:f/1e3,fillValue:C/1e3,minValue:0,maxValue:h/1e3,step:5,stepPixelSize:4,format:function(e){return(0,c.formatPower)(1e3*e,1)},onChange:function(e,t){return l("input",{target:1e3*t})}})}),(0,o.createComponentVNode)(2,a.Flex.Item,{children:[(0,o.createComponentVNode)(2,a.Button,{icon:"forward",disabled:f===h,onClick:function(){return l("input",{adjust:1e4})}}),(0,o.createComponentVNode)(2,a.Button,{icon:"fast-forward",disabled:f===h,onClick:function(){return l("input",{target:"max"})}})]})]})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Available",children:(0,c.formatPower)(C)})]})}),(0,o.createComponentVNode)(2,a.Section,{title:"Output",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Output Mode",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:N?"power-off":"times",selected:N,onClick:function(){return l("tryoutput")},children:N?"On":"Off"}),children:(0,o.createComponentVNode)(2,a.Box,{color:_,children:b?"Sending":s>0?"Not Sending":"No Charge"})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Target Output",children:(0,o.createComponentVNode)(2,a.Flex,{inline:!0,width:"100%",children:[(0,o.createComponentVNode)(2,a.Flex.Item,{children:[(0,o.createComponentVNode)(2,a.Button,{icon:"fast-backward",disabled:0===g,onClick:function(){return l("output",{target:"min"})}}),(0,o.createComponentVNode)(2,a.Button,{icon:"backward",disabled:0===g,onClick:function(){return l("output",{adjust:-1e4})}})]}),(0,o.createComponentVNode)(2,a.Flex.Item,{grow:1,mx:1,children:(0,o.createComponentVNode)(2,a.Slider,{value:g/1e3,minValue:0,maxValue:V/1e3,step:5,stepPixelSize:4,format:function(e){return(0,c.formatPower)(1e3*e,1)},onChange:function(e,t){return l("output",{target:1e3*t})}})}),(0,o.createComponentVNode)(2,a.Flex.Item,{children:[(0,o.createComponentVNode)(2,a.Button,{icon:"forward",disabled:g===V,onClick:function(){return l("output",{adjust:1e4})}}),(0,o.createComponentVNode)(2,a.Button,{icon:"fast-forward",disabled:g===V,onClick:function(){return l("output",{target:"max"})}})]})]})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Outputting",children:(0,c.formatPower)(v)})]})})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.SolarControl=void 0;var o=n(0),r=n(1),a=n(2),c=n(4);t.SolarControl=function(e,t){var n=(0,r.useBackend)(t),i=n.act,l=n.data,d=l.generated,u=l.generated_ratio,s=l.tracking_state,m=l.tracking_rate,p=l.connected_panels,f=l.connected_tracker,h=l.cdir,C=l.direction,N=l.rotating_direction;return(0,o.createComponentVNode)(2,c.Window,{children:(0,o.createComponentVNode)(2,c.Window.Content,{children:[(0,o.createComponentVNode)(2,a.Section,{title:"Status",buttons:(0,o.createComponentVNode)(2,a.Button,{icon:"sync",content:"Scan for new hardware",onClick:function(){return i("refresh")}}),children:(0,o.createComponentVNode)(2,a.Grid,{children:[(0,o.createComponentVNode)(2,a.Grid.Column,{children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Solar tracker",color:f?"good":"bad",children:f?"OK":"N/A"}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Solar panels",color:p>0?"good":"bad",children:p})]})}),(0,o.createComponentVNode)(2,a.Grid.Column,{size:2,children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Power output",children:(0,o.createComponentVNode)(2,a.ProgressBar,{ranges:{good:[.66,Infinity],average:[.33,.66],bad:[-Infinity,.33]},minValue:0,maxValue:1,value:u,children:d+" W"})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Panel orientation",children:[h,"\xb0 (",C,")"]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Tracker rotation",children:[2===s&&(0,o.createComponentVNode)(2,a.Box,{children:" Automated "}),1===s&&(0,o.createComponentVNode)(2,a.Box,{children:[" ",m,"\xb0/h (",N,") "]}),0===s&&(0,o.createComponentVNode)(2,a.Box,{children:" Tracker offline "})]})]})})]})}),(0,o.createComponentVNode)(2,a.Section,{title:"Controls",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Panel orientation",children:[2!==s&&(0,o.createComponentVNode)(2,a.NumberInput,{unit:"\xb0",step:1,stepPixelSize:1,minValue:0,maxValue:359,value:h,onDrag:function(e,t){return i("cdir",{cdir:t})}}),2===s&&(0,o.createComponentVNode)(2,a.Box,{lineHeight:"19px",children:" Automated "})]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Tracker status",children:[(0,o.createComponentVNode)(2,a.Button,{icon:"times",content:"Off",selected:0===s,onClick:function(){return i("track",{track:0})}}),(0,o.createComponentVNode)(2,a.Button,{icon:"clock-o",content:"Timed",selected:1===s,onClick:function(){return i("track",{track:1})}}),(0,o.createComponentVNode)(2,a.Button,{icon:"sync",content:"Auto",selected:2===s,disabled:!f,onClick:function(){return i("track",{track:2})}})]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Tracker rotation",children:[1===s&&(0,o.createComponentVNode)(2,a.NumberInput,{unit:"\xb0/h",step:1,stepPixelSize:1,minValue:-7200,maxValue:7200,value:m,format:function(e){return(Math.sign(e)>0?"+":"-")+Math.abs(e)},onDrag:function(e,t){return i("tdir",{tdir:t})}}),0===s&&(0,o.createComponentVNode)(2,a.Box,{lineHeight:"19px",children:" Tracker offline "}),2===s&&(0,o.createComponentVNode)(2,a.Box,{lineHeight:"19px",children:" Automated "})]})]})})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.SpawnersMenu=void 0;var o=n(0),r=n(1),a=n(2),c=n(4);t.SpawnersMenu=function(e,t){var n=(0,r.useBackend)(t),i=n.act,l=n.data.spawners||[];return(0,o.createComponentVNode)(2,c.Window,{resizable:!0,children:(0,o.createComponentVNode)(2,c.Window.Content,{scrollable:!0,children:(0,o.createComponentVNode)(2,a.Section,{children:l.map((function(e){return(0,o.createComponentVNode)(2,a.Section,{mb:.5,title:e.name+" ("+e.amount_left+" left)",level:2,buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Button,{icon:"chevron-circle-right",content:"Jump",onClick:function(){return i("jump",{ID:e.uids})}}),(0,o.createComponentVNode)(2,a.Button,{icon:"chevron-circle-right",content:"Spawn",onClick:function(){return i("spawn",{ID:e.uids})}})],4),children:[(0,o.createComponentVNode)(2,a.Box,{style:{"white-space":"pre-wrap"},mb:1,fontSize:"16px",children:e.desc}),!!e.fluff&&(0,o.createComponentVNode)(2,a.Box,{style:{"white-space":"pre-wrap"},textColor:"#878787",fontSize:"14px",children:e.fluff}),!!e.important_info&&(0,o.createComponentVNode)(2,a.Box,{style:{"white-space":"pre-wrap"},mt:1,bold:!0,color:"red",fontSize:"18px",children:e.important_info})]},e.name)}))})})})}},function(e,t,n){"use strict";t.__esModule=!0,t.StationAlertConsoleContent=t.StationAlertConsole=void 0;var o=n(0),r=n(1),a=n(2),c=n(4);t.StationAlertConsole=function(){return(0,o.createComponentVNode)(2,c.Window,{resizable:!0,children:(0,o.createComponentVNode)(2,c.Window.Content,{scrollable:!0,children:(0,o.createComponentVNode)(2,i)})})};var i=function(e,t){var n=(0,r.useBackend)(t).data.alarms||[],c=n.Fire||[],i=n.Atmosphere||[],l=n.Power||[];return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Section,{title:"Fire Alarms",children:(0,o.createVNode)(1,"ul",null,[0===c.length&&(0,o.createVNode)(1,"li","color-good","Systems Nominal",16),c.map((function(e){return(0,o.createVNode)(1,"li","color-average",e,0,null,e)}))],0)}),(0,o.createComponentVNode)(2,a.Section,{title:"Atmospherics Alarms",children:(0,o.createVNode)(1,"ul",null,[0===i.length&&(0,o.createVNode)(1,"li","color-good","Systems Nominal",16),i.map((function(e){return(0,o.createVNode)(1,"li","color-average",e,0,null,e)}))],0)}),(0,o.createComponentVNode)(2,a.Section,{title:"Power Alarms",children:(0,o.createVNode)(1,"ul",null,[0===l.length&&(0,o.createVNode)(1,"li","color-good","Systems Nominal",16),l.map((function(e){return(0,o.createVNode)(1,"li","color-average",e,0,null,e)}))],0)})],4)};t.StationAlertConsoleContent=i},function(e,t,n){"use strict";t.__esModule=!0,t.SuitStorage=void 0;var o=n(0),r=n(1),a=n(2),c=n(4);t.SuitStorage=function(e,t){var n=(0,r.useBackend)(t).data.uv;return(0,o.createComponentVNode)(2,c.Window,{resizable:!0,children:(0,o.createComponentVNode)(2,c.Window.Content,{display:"flex",className:"Layout__content--flexColumn",children:[!!n&&(0,o.createComponentVNode)(2,a.Dimmer,{backgroundColor:"black",opacity:.85,children:(0,o.createComponentVNode)(2,a.Flex,{children:(0,o.createComponentVNode)(2,a.Flex.Item,{bold:!0,textAlign:"center",mb:2,children:[(0,o.createComponentVNode)(2,a.Icon,{name:"spinner",spin:1,size:4,mb:4}),(0,o.createVNode)(1,"br"),"Disinfection of contents in progress..."]})})}),(0,o.createComponentVNode)(2,i),(0,o.createComponentVNode)(2,d)]})})};var i=function(e,t){var n=(0,r.useBackend)(t),c=n.act,i=n.data,d=i.helmet,u=i.suit,s=i.magboots,m=i.mask,p=i.storage,f=i.open,h=i.locked;return(0,o.createComponentVNode)(2,a.Section,{title:"Stored Items",flexGrow:"1",buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Button,{content:"Start Disinfection Cycle",icon:"radiation",textAlign:"center",onClick:function(){return c("cook")}}),(0,o.createComponentVNode)(2,a.Button,{content:h?"Unlock":"Lock",icon:h?"unlock":"lock",disabled:f,onClick:function(){return c("toggle_lock")}})],4),children:f&&!h?(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,l,{object:d,label:"Helmet",missingText:"helmet",eject:"dispense_helmet"}),(0,o.createComponentVNode)(2,l,{object:u,label:"Suit",missingText:"suit",eject:"dispense_suit"}),(0,o.createComponentVNode)(2,l,{object:s,label:"Boots",missingText:"boots",eject:"dispense_boots"}),(0,o.createComponentVNode)(2,l,{object:m,label:"Breathmask",missingText:"mask",eject:"dispense_mask"}),(0,o.createComponentVNode)(2,l,{object:p,label:"Storage",missingText:"storage item",eject:"dispense_storage"})]}):(0,o.createComponentVNode)(2,a.Flex,{height:"100%",children:(0,o.createComponentVNode)(2,a.Flex.Item,{bold:!0,grow:"1",textAlign:"center",align:"center",color:"label",children:[(0,o.createComponentVNode)(2,a.Icon,{name:h?"lock":"exclamation-circle",size:"5",mb:3}),(0,o.createVNode)(1,"br"),h?"The unit is locked.":"The unit is closed."]})})})},l=function(e,t){var n=(0,r.useBackend)(t),c=n.act,i=(n.data,e.object),l=e.label,d=e.missingText,u=e.eject;return(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:l,children:(0,o.createComponentVNode)(2,a.Box,{my:.5,children:i?(0,o.createComponentVNode)(2,a.Button,{my:-1,icon:"eject",content:i,onClick:function(){return c(u)}}):(0,o.createComponentVNode)(2,a.Box,{color:"silver",bold:!0,children:["No ",d," found."]})})})},d=function(e,t){var n=(0,r.useBackend)(t),c=n.act,i=n.data,l=i.open,d=i.locked;return(0,o.createComponentVNode)(2,a.Section,{children:(0,o.createComponentVNode)(2,a.Button,{fluid:!0,content:l?"Close Suit Storage Unit":"Open Suit Storage Unit",icon:l?"times-circle":"expand",color:l?"red":"green",disabled:d,textAlign:"center",onClick:function(){return c("toggle_open")}})})}},function(e,t,n){"use strict";t.__esModule=!0,t.SupermatterMonitor=void 0;var o=n(0),r=n(26),a=n(43),c=n(15),i=n(1),l=n(2),d=n(39),u=n(4);n(76);t.SupermatterMonitor=function(e,t){var n=(0,i.useBackend)(t);n.act;return 0===n.data.active?(0,o.createComponentVNode)(2,m):(0,o.createComponentVNode)(2,p)};var s=function(e){return Math.log2(16+Math.max(0,e))-4},m=function(e,t){var n=(0,i.useBackend)(t),r=n.act,a=n.data.supermatters,c=void 0===a?[]:a;return(0,o.createComponentVNode)(2,u.Window,{children:(0,o.createComponentVNode)(2,u.Window.Content,{scrollable:!0,children:(0,o.createComponentVNode)(2,l.Section,{title:"Detected Supermatters",buttons:(0,o.createComponentVNode)(2,l.Button,{icon:"sync",content:"Refresh",onClick:function(){return r("refresh")}}),children:(0,o.createComponentVNode)(2,l.Table,{children:c.map((function(e){return(0,o.createComponentVNode)(2,l.Table.Row,{children:[(0,o.createComponentVNode)(2,l.Table.Cell,{children:e.supermatter_id+". "+e.area_name}),(0,o.createComponentVNode)(2,l.Table.Cell,{collapsing:!0,color:"label",children:"Integrity:"}),(0,o.createComponentVNode)(2,l.Table.Cell,{collapsing:!0,width:"120px",children:(0,o.createComponentVNode)(2,l.ProgressBar,{value:e.integrity/100,ranges:{good:[.9,Infinity],average:[.5,.9],bad:[-Infinity,.5]}})}),(0,o.createComponentVNode)(2,l.Table.Cell,{collapsing:!0,children:(0,o.createComponentVNode)(2,l.Button,{content:"Details",onClick:function(){return r("view",{view:e.supermatter_id})}})})]},e.supermatter_id)}))})})})})},p=function(e,t){var n=(0,i.useBackend)(t),m=n.act,p=n.data,f=(p.active,p.SM_integrity),h=p.SM_power,C=p.SM_ambienttemp,N=p.SM_ambientpressure,b=(0,a.flow)([function(e){return e.filter((function(e){return e.amount>=.01}))},(0,r.sortBy)((function(e){return-e.amount}))])(p.gases||[]),g=Math.max.apply(Math,[1].concat(b.map((function(e){return e.amount}))));return(0,o.createComponentVNode)(2,u.Window,{children:(0,o.createComponentVNode)(2,u.Window.Content,{children:(0,o.createComponentVNode)(2,l.Flex,{spacing:1,children:[(0,o.createComponentVNode)(2,l.Flex.Item,{width:"270px",children:(0,o.createComponentVNode)(2,l.Section,{title:"Metrics",children:(0,o.createComponentVNode)(2,l.LabeledList,{children:[(0,o.createComponentVNode)(2,l.LabeledList.Item,{label:"Integrity",children:(0,o.createComponentVNode)(2,l.ProgressBar,{value:f/100,ranges:{good:[.9,Infinity],average:[.5,.9],bad:[-Infinity,.5]}})}),(0,o.createComponentVNode)(2,l.LabeledList.Item,{label:"Relative EER",children:(0,o.createComponentVNode)(2,l.ProgressBar,{value:h,minValue:0,maxValue:5e3,ranges:{good:[-Infinity,5e3],average:[5e3,7e3],bad:[7e3,Infinity]},children:(0,c.toFixed)(h)+" MeV/cm3"})}),(0,o.createComponentVNode)(2,l.LabeledList.Item,{label:"Temperature",children:(0,o.createComponentVNode)(2,l.ProgressBar,{value:s(C),minValue:0,maxValue:s(1e4),ranges:{teal:[-Infinity,s(80)],good:[s(80),s(373)],average:[s(373),s(1e3)],bad:[s(1e3),Infinity]},children:(0,c.toFixed)(C)+" K"})}),(0,o.createComponentVNode)(2,l.LabeledList.Item,{label:"Pressure",children:(0,o.createComponentVNode)(2,l.ProgressBar,{value:s(N),minValue:0,maxValue:s(5e4),ranges:{good:[s(1),s(300)],average:[-Infinity,s(1e3)],bad:[s(1e3),Infinity]},children:(0,c.toFixed)(N)+" kPa"})})]})})}),(0,o.createComponentVNode)(2,l.Flex.Item,{grow:1,basis:0,children:(0,o.createComponentVNode)(2,l.Section,{title:"Gases",buttons:(0,o.createComponentVNode)(2,l.Button,{icon:"arrow-left",content:"Back",onClick:function(){return m("back")}}),children:(0,o.createComponentVNode)(2,l.LabeledList,{children:b.map((function(e){return(0,o.createComponentVNode)(2,l.LabeledList.Item,{label:(0,d.getGasLabel)(e.name),children:(0,o.createComponentVNode)(2,l.ProgressBar,{color:(0,d.getGasColor)(e.name),value:e.amount,minValue:0,maxValue:g,children:(0,c.toFixed)(e.amount,2)+"%"})},e.name)}))})})})]})})})}},function(e,t,n){"use strict";t.__esModule=!0,t.SyndicateComputerSimple=void 0;var o=n(0),r=n(1),a=n(2),c=(n(77),n(4));t.SyndicateComputerSimple=function(e,t){var n=(0,r.useBackend)(t),i=n.act,l=n.data;return(0,o.createComponentVNode)(2,c.Window,{theme:"syndicate",children:(0,o.createComponentVNode)(2,c.Window.Content,{children:l.rows.map((function(e){return(0,o.createComponentVNode)(2,a.Section,{title:e.title,buttons:(0,o.createComponentVNode)(2,a.Button,{content:e.buttontitle,disabled:e.buttondisabled,tooltip:e.buttontooltip,tooltipPosition:"left",onClick:function(){return i(e.buttonact)}}),children:[e.status,!!e.bullets&&(0,o.createComponentVNode)(2,a.Box,{children:e.bullets.map((function(e){return(0,o.createComponentVNode)(2,a.Box,{children:e},e)}))})]},e.title)}))})})}},function(e,t,n){"use strict";t.__esModule=!0,t.TEG=void 0;var o=n(0),r=n(1),a=n(2),c=n(4),i=function(e){return e.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g,"$1,")};t.TEG=function(e,t){var n=(0,r.useBackend)(t),l=n.act,d=n.data;return d.error?(0,o.createComponentVNode)(2,c.Window,{children:(0,o.createComponentVNode)(2,c.Window.Content,{children:(0,o.createComponentVNode)(2,a.Section,{title:"Error",children:[d.error,(0,o.createComponentVNode)(2,a.Button,{icon:"circle",content:"Recheck",onClick:function(){return l("check")}})]})})}):(0,o.createComponentVNode)(2,c.Window,{children:(0,o.createComponentVNode)(2,c.Window.Content,{children:[(0,o.createComponentVNode)(2,a.Section,{title:"Cold Loop ("+d.cold_dir+")",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Cold Inlet",children:[i(d.cold_inlet_temp)," K, ",i(d.cold_inlet_pressure)," kPa"]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Cold Outlet",children:[i(d.cold_outlet_temp)," K, ",i(d.cold_outlet_pressure)," kPa"]})]})}),(0,o.createComponentVNode)(2,a.Section,{title:"Hot Loop ("+d.hot_dir+")",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Hot Inlet",children:[i(d.hot_inlet_temp)," K, ",i(d.hot_inlet_pressure)," kPa"]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Hot Outlet",children:[i(d.hot_outlet_temp)," K, ",i(d.hot_outlet_pressure)," kPa"]})]})}),(0,o.createComponentVNode)(2,a.Section,{title:"Power Output",children:[i(d.output_power)," W",!!d.warning_switched&&(0,o.createComponentVNode)(2,a.Box,{color:"red",children:"Warning: Cold inlet temperature exceeds hot inlet temperature."}),!!d.warning_cold_pressure&&(0,o.createComponentVNode)(2,a.Box,{color:"red",children:"Warning: Cold circulator inlet pressure is under 1,000 kPa."}),!!d.warning_hot_pressure&&(0,o.createComponentVNode)(2,a.Box,{color:"red",children:"Warning: Hot circulator inlet pressure is under 1,000 kPa."})]})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.TachyonArrayContent=t.TachyonArray=void 0;var o=n(0),r=n(1),a=n(2),c=n(4);t.TachyonArray=function(e,t){var n=(0,r.useBackend)(t),l=n.act,d=n.data,u=d.records,s=void 0===u?[]:u,m=d.explosion_target,p=d.toxins_tech,f=d.printing;return(0,o.createComponentVNode)(2,c.Window,{children:(0,o.createComponentVNode)(2,c.Window.Content,{scrollable:!0,children:[(0,o.createComponentVNode)(2,a.Section,{children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Shift's Target",children:m}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Current Toxins Level",children:p}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Administration",children:[(0,o.createComponentVNode)(2,a.Button,{icon:"print",content:"Print All Logs",disabled:!s.length||f,align:"center",onClick:function(){return l("print_logs")}}),(0,o.createComponentVNode)(2,a.Button.Confirm,{icon:"trash",content:"Delete All Logs",disabled:!s.length,color:"bad",align:"center",onClick:function(){return l("delete_logs")}})]})]})}),s.length?(0,o.createComponentVNode)(2,i):(0,o.createComponentVNode)(2,a.NoticeBox,{children:"No Records"})]})})};var i=function(e,t){var n=(0,r.useBackend)(t),c=n.act,i=n.data.records,l=void 0===i?[]:i;return(0,o.createComponentVNode)(2,a.Section,{title:"Logged Explosions",children:(0,o.createComponentVNode)(2,a.Flex,{children:(0,o.createComponentVNode)(2,a.Flex.Item,{children:(0,o.createComponentVNode)(2,a.Table,{m:"0.5rem",children:[(0,o.createComponentVNode)(2,a.Table.Row,{header:!0,children:[(0,o.createComponentVNode)(2,a.Table.Cell,{children:"Time"}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:"Epicenter"}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:"Actual Size"}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:"Theoretical Size"})]}),l.map((function(e){return(0,o.createComponentVNode)(2,a.Table.Row,{children:[(0,o.createComponentVNode)(2,a.Table.Cell,{children:e.logged_time}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:e.epicenter}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:e.actual_size_message}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:e.theoretical_size_message}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:(0,o.createComponentVNode)(2,a.Button.Confirm,{icon:"trash",content:"Delete",color:"bad",onClick:function(){return c("delete_record",{index:e.index})}})})]},e.index)}))]})})})})};t.TachyonArrayContent=i},function(e,t,n){"use strict";t.__esModule=!0,t.Tank=void 0;var o=n(0),r=n(1),a=n(2),c=n(4);t.Tank=function(e,t){var n,i=(0,r.useBackend)(t),l=i.act,d=i.data;return n=d.has_mask?(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Mask",children:(0,o.createComponentVNode)(2,a.Button,{icon:d.connected?"check":"times",content:d.connected?"Internals On":"Internals Off",selected:d.connected,onClick:function(){return l("internals")}})}):(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Mask",color:"red",children:"No Mask Equipped"}),(0,o.createComponentVNode)(2,c.Window,{children:(0,o.createComponentVNode)(2,c.Window.Content,{children:(0,o.createComponentVNode)(2,a.Section,{children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Tank Pressure",children:(0,o.createComponentVNode)(2,a.ProgressBar,{value:d.tankPressure/1013,ranges:{good:[.35,Infinity],average:[.15,.35],bad:[-Infinity,.15]},children:d.tankPressure+" kPa"})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Release Pressure",children:[(0,o.createComponentVNode)(2,a.Button,{icon:"fast-backward",disabled:d.ReleasePressure===d.minReleasePressure,tooltip:"Min",onClick:function(){return l("pressure",{pressure:"min"})}}),(0,o.createComponentVNode)(2,a.NumberInput,{animated:!0,value:parseFloat(d.releasePressure),width:"65px",unit:"kPa",minValue:d.minReleasePressure,maxValue:d.maxReleasePressure,onChange:function(e,t){return l("pressure",{pressure:t})}}),(0,o.createComponentVNode)(2,a.Button,{icon:"fast-forward",disabled:d.ReleasePressure===d.maxReleasePressure,tooltip:"Max",onClick:function(){return l("pressure",{pressure:"max"})}}),(0,o.createComponentVNode)(2,a.Button,{icon:"undo",content:"",disabled:d.ReleasePressure===d.defaultReleasePressure,tooltip:"Reset",onClick:function(){return l("pressure",{pressure:"reset"})}})]}),n]})})})})}},function(e,t,n){"use strict";t.__esModule=!0,t.TankDispenser=void 0;var o=n(0),r=n(1),a=n(2),c=n(4);t.TankDispenser=function(e,t){var n=(0,r.useBackend)(t),i=n.act,l=n.data,d=l.o_tanks,u=l.p_tanks;return(0,o.createComponentVNode)(2,c.Window,{children:(0,o.createComponentVNode)(2,c.Window.Content,{children:[(0,o.createComponentVNode)(2,a.Box,{children:(0,o.createComponentVNode)(2,a.Button,{content:"Dispense Oxygen Tank ("+d+")",disabled:0===d,icon:"arrow-circle-down",onClick:function(){return i("oxygen")}})}),(0,o.createComponentVNode)(2,a.Box,{children:(0,o.createComponentVNode)(2,a.Button,{content:"Dispense Plasma Tank ("+u+")",disabled:0===u,icon:"arrow-circle-down",onClick:function(){return i("plasma")}})})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.TcommsCore=void 0;var o=n(0),r=n(1),a=n(2),c=n(4);t.TcommsCore=function(e,t){var n=(0,r.useBackend)(t),s=(n.act,n.data.ion),m=(0,r.useLocalState)(t,"tabIndex",0),p=m[0],f=m[1];return(0,o.createComponentVNode)(2,c.Window,{resizable:!0,children:(0,o.createComponentVNode)(2,c.Window.Content,{scrollable:!0,children:[1===s&&(0,o.createComponentVNode)(2,i),(0,o.createComponentVNode)(2,a.Tabs,{children:[(0,o.createComponentVNode)(2,a.Tabs.Tab,{selected:0===p,onClick:function(){return f(0)},children:[(0,o.createComponentVNode)(2,a.Icon,{name:"wrench"}),"Configuration"]},"ConfigPage"),(0,o.createComponentVNode)(2,a.Tabs.Tab,{selected:1===p,onClick:function(){return f(1)},children:[(0,o.createComponentVNode)(2,a.Icon,{name:"link"}),"Device Linkage"]},"LinkagePage"),(0,o.createComponentVNode)(2,a.Tabs.Tab,{selected:2===p,onClick:function(){return f(2)},children:[(0,o.createComponentVNode)(2,a.Icon,{name:"user-times"}),"User Filtering"]},"FilterPage")]}),function(e){switch(e){case 0:return(0,o.createComponentVNode)(2,l);case 1:return(0,o.createComponentVNode)(2,d);case 2:return(0,o.createComponentVNode)(2,u);default:return"SOMETHING WENT VERY WRONG PLEASE AHELP"}}(p)]})})};var i=function(){return(0,o.createComponentVNode)(2,a.NoticeBox,{children:"ERROR: An Ionospheric overload has occured. Please wait for the machine to reboot. This cannot be manually done."})},l=function(e,t){var n=(0,r.useBackend)(t),c=n.act,i=n.data,l=i.active,d=i.sectors_available,u=i.nttc_toggle_jobs,s=i.nttc_toggle_job_color,m=i.nttc_toggle_name_color,p=i.nttc_toggle_command_bold,f=i.nttc_job_indicator_type,h=i.nttc_setting_language,C=i.network_id;return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Section,{title:"Status",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Machine Power",children:(0,o.createComponentVNode)(2,a.Button,{content:l?"On":"Off",selected:l,icon:"power-off",onClick:function(){return c("toggle_active")}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Sector Coverage",children:d})]})}),(0,o.createComponentVNode)(2,a.Section,{title:"Radio Configuration",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Job Announcements",children:(0,o.createComponentVNode)(2,a.Button,{content:u?"On":"Off",selected:u,icon:"user-tag",onClick:function(){return c("nttc_toggle_jobs")}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Job Departmentalisation",children:(0,o.createComponentVNode)(2,a.Button,{content:s?"On":"Off",selected:s,icon:"clipboard-list",onClick:function(){return c("nttc_toggle_job_color")}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Name Departmentalisation",children:(0,o.createComponentVNode)(2,a.Button,{content:m?"On":"Off",selected:m,icon:"user-tag",onClick:function(){return c("nttc_toggle_name_color")}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Command Amplification",children:(0,o.createComponentVNode)(2,a.Button,{content:p?"On":"Off",selected:p,icon:"volume-up",onClick:function(){return c("nttc_toggle_command_bold")}})})]})}),(0,o.createComponentVNode)(2,a.Section,{title:"Advanced",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Job Announcement Format",children:(0,o.createComponentVNode)(2,a.Button,{content:f||"Unset",selected:f,icon:"pencil-alt",onClick:function(){return c("nttc_job_indicator_type")}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Language Conversion",children:(0,o.createComponentVNode)(2,a.Button,{content:h||"Unset",selected:h,icon:"globe",onClick:function(){return c("nttc_setting_language")}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Network ID",children:(0,o.createComponentVNode)(2,a.Button,{content:C||"Unset",selected:C,icon:"server",onClick:function(){return c("network_id")}})})]})}),(0,o.createComponentVNode)(2,a.Section,{title:"Maintenance",children:[(0,o.createComponentVNode)(2,a.Button,{content:"Import Configuration",icon:"file-import",onClick:function(){return c("import")}}),(0,o.createComponentVNode)(2,a.Button,{content:"Export Configuration",icon:"file-export",onClick:function(){return c("export")}})]})],4)},d=function(e,t){var n=(0,r.useBackend)(t),c=n.act,i=n.data,l=i.link_password,d=i.relay_entries;return(0,o.createComponentVNode)(2,a.Section,{title:"Device Linkage",children:[(0,o.createComponentVNode)(2,a.LabeledList,{children:(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Linkage Password",children:(0,o.createComponentVNode)(2,a.Button,{content:l||"Unset",selected:l,icon:"lock",onClick:function(){return c("change_password")}})})}),(0,o.createComponentVNode)(2,a.Table,{m:"0.5rem",children:[(0,o.createComponentVNode)(2,a.Table.Row,{header:!0,children:[(0,o.createComponentVNode)(2,a.Table.Cell,{children:"Network Address"}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:"Network ID"}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:"Sector"}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:"Status"}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:"Unlink"})]}),d.map((function(e){return(0,o.createComponentVNode)(2,a.Table.Row,{children:[(0,o.createComponentVNode)(2,a.Table.Cell,{children:e.addr}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:e.net_id}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:e.sector}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:1===e.status?(0,o.createComponentVNode)(2,a.Box,{color:"green",children:"Online"}):(0,o.createComponentVNode)(2,a.Box,{color:"red",children:"Offline"})}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:(0,o.createComponentVNode)(2,a.Button,{content:"Unlink",icon:"unlink",onClick:function(){return c("unlink",{addr:e.addr})}})})]},e.addr)}))]})]})},u=function(e,t){var n=(0,r.useBackend)(t),c=n.act,i=n.data.filtered_users;return(0,o.createComponentVNode)(2,a.Section,{title:"User Filtering",buttons:(0,o.createComponentVNode)(2,a.Button,{content:"Add User",icon:"user-plus",onClick:function(){return c("add_filter")}}),children:(0,o.createComponentVNode)(2,a.Table,{m:"0.5rem",children:[(0,o.createComponentVNode)(2,a.Table.Row,{header:!0,children:[(0,o.createComponentVNode)(2,a.Table.Cell,{style:{width:"90%"},children:"User"}),(0,o.createComponentVNode)(2,a.Table.Cell,{style:{width:"10%"},children:"Actions"})]}),i.map((function(e){return(0,o.createComponentVNode)(2,a.Table.Row,{children:[(0,o.createComponentVNode)(2,a.Table.Cell,{children:e}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:(0,o.createComponentVNode)(2,a.Button,{content:"Remove",icon:"user-times",onClick:function(){return c("remove_filter",{user:e})}})})]},e)}))]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.TcommsRelay=void 0;var o=n(0),r=n(1),a=n(2),c=n(4);t.TcommsRelay=function(e,t){var n=(0,r.useBackend)(t),d=n.act,u=n.data,s=u.linked,m=u.active,p=u.network_id;return(0,o.createComponentVNode)(2,c.Window,{resizable:!0,children:(0,o.createComponentVNode)(2,c.Window.Content,{scrollable:!0,children:[(0,o.createComponentVNode)(2,a.Section,{title:"Relay Configuration",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Machine Power",children:(0,o.createComponentVNode)(2,a.Button,{content:m?"On":"Off",selected:m,icon:"power-off",onClick:function(){return d("toggle_active")}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Network ID",children:(0,o.createComponentVNode)(2,a.Button,{content:p||"Unset",selected:p,icon:"server",onClick:function(){return d("network_id")}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Link Status",children:1===s?(0,o.createComponentVNode)(2,a.Box,{color:"green",children:"Linked"}):(0,o.createComponentVNode)(2,a.Box,{color:"red",children:"Unlinked"})})]})}),1===s?(0,o.createComponentVNode)(2,i):(0,o.createComponentVNode)(2,l)]})})};var i=function(e,t){var n=(0,r.useBackend)(t),c=n.act,i=n.data,l=i.linked_core_id,d=i.linked_core_addr,u=i.hidden_link;return(0,o.createComponentVNode)(2,a.Section,{title:"Link Status",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Linked Core ID",children:l}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Linked Core Address",children:d}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Hidden Link",children:(0,o.createComponentVNode)(2,a.Button,{content:u?"Yes":"No",icon:u?"eye-slash":"eye",selected:u,onClick:function(){return c("toggle_hidden_link")}})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Unlink",children:(0,o.createComponentVNode)(2,a.Button,{content:"Unlink",icon:"unlink",color:"red",onClick:function(){return c("unlink")}})})]})})},l=function(e,t){var n=(0,r.useBackend)(t),c=n.act,i=n.data.cores;return(0,o.createComponentVNode)(2,a.Section,{title:"Detected Cores",children:(0,o.createComponentVNode)(2,a.Table,{m:"0.5rem",children:[(0,o.createComponentVNode)(2,a.Table.Row,{header:!0,children:[(0,o.createComponentVNode)(2,a.Table.Cell,{children:"Network Address"}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:"Network ID"}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:"Sector"}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:"Link"})]}),i.map((function(e){return(0,o.createComponentVNode)(2,a.Table.Row,{children:[(0,o.createComponentVNode)(2,a.Table.Cell,{children:e.addr}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:e.net_id}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:e.sector}),(0,o.createComponentVNode)(2,a.Table.Cell,{children:(0,o.createComponentVNode)(2,a.Button,{content:"Link",icon:"link",onClick:function(){return c("link",{addr:e.addr})}})})]},e.addr)}))]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.Teleporter=void 0;var o=n(0),r=n(1),a=n(2),c=n(4),i=n(179);t.Teleporter=function(e,t){var n=(0,r.useBackend)(t),l=n.act,d=n.data,u=d.targetsTeleport?d.targetsTeleport:{},s=d.calibrated,m=d.calibrating,p=d.powerstation,f=d.regime,h=d.teleporterhub,C=d.target,N=d.locked;return(0,o.createComponentVNode)(2,c.Window,{children:(0,o.createComponentVNode)(2,c.Window.Content,{children:[(!p||!h)&&(0,o.createComponentVNode)(2,a.Section,{title:"Error",children:[h,!p&&(0,o.createComponentVNode)(2,a.Box,{color:"bad",children:" Powerstation not linked "}),p&&!h&&(0,o.createComponentVNode)(2,a.Box,{color:"bad",children:" Teleporter hub not linked "})]}),p&&h&&(0,o.createComponentVNode)(2,a.Section,{title:"Status",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Regime",children:[(0,o.createComponentVNode)(2,a.Button,{tooltip:"Teleport to another teleport hub. ",color:1===f?"good":null,onClick:function(){return l("setregime",{regime:1})},children:"Gate"}),(0,o.createComponentVNode)(2,a.Button,{tooltip:"One-way teleport. ",color:0===f?"good":null,onClick:function(){return l("setregime",{regime:0})},children:"Teleporter"}),(0,o.createComponentVNode)(2,a.Button,{tooltip:"Teleport to a location stored in a GPS device. ",color:2===f?"good":null,disabled:!N,onClick:function(){return l("setregime",{regime:2})},children:"GPS"})]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Teleport target",children:[0===f&&(0,o.createComponentVNode)(2,a.Dropdown,{width:"220px",selected:C,options:Object.keys(u),color:"None"!==C?"default":"bad",onSelected:function(e){return l("settarget",{x:u[e].x,y:u[e].y,z:u[e].z})}}),1===f&&(0,o.createComponentVNode)(2,a.Dropdown,{width:"220px",selected:C,options:Object.keys(u),color:"None"!==C?"default":"bad",onSelected:function(e){return l("settarget",{x:u[e].x,y:u[e].y,z:u[e].z})}}),2===f&&(0,o.createComponentVNode)(2,a.Box,{children:C})]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Calibration",children:["None"!==C&&(0,o.createComponentVNode)(2,a.Grid,{children:[(0,o.createComponentVNode)(2,i.GridColumn,{size:"2",children:m&&(0,o.createComponentVNode)(2,a.Box,{color:"average",children:"In Progress"})||s&&(0,o.createComponentVNode)(2,a.Box,{color:"good",children:"Optimal"})||(0,o.createComponentVNode)(2,a.Box,{color:"bad",children:"Sub-Optimal"})}),(0,o.createComponentVNode)(2,i.GridColumn,{size:"3",children:(0,o.createComponentVNode)(2,a.Box,{"class":"ml-1",children:(0,o.createComponentVNode)(2,a.Button,{icon:"sync-alt",tooltip:"Calibrates the hub. Accidents may occur when the calibration is not optimal.",disabled:!(!s&&!m),onClick:function(){return l("calibrate")}})})})]}),"None"===C&&(0,o.createComponentVNode)(2,a.Box,{lineHeight:"21px",children:"No target set"})]})]})}),!!(N&&p&&h&&2===f)&&(0,o.createComponentVNode)(2,a.Section,{title:"GPS",children:(0,o.createComponentVNode)(2,a.Flex,{direction:"row",justify:"space-around",children:[(0,o.createComponentVNode)(2,a.Button,{content:"Upload GPS data",tooltip:"Loads the GPS data from the device.",icon:"upload",onClick:function(){return l("load")}}),(0,o.createComponentVNode)(2,a.Button,{content:"Eject",tooltip:"Ejects the GPS device",icon:"eject",onClick:function(){return l("eject")}})]})})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.ThermoMachine=void 0;var o=n(0),r=n(15),a=n(1),c=n(2),i=n(4);t.ThermoMachine=function(e,t){var n=(0,a.useBackend)(t),l=n.act,d=n.data;return(0,o.createComponentVNode)(2,i.Window,{children:(0,o.createComponentVNode)(2,i.Window.Content,{children:[(0,o.createComponentVNode)(2,c.Section,{title:"Status",children:(0,o.createComponentVNode)(2,c.LabeledList,{children:[(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Temperature",children:[(0,o.createComponentVNode)(2,c.AnimatedNumber,{value:d.temperature,format:function(e){return(0,r.toFixed)(e,2)}})," K"]}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Pressure",children:[(0,o.createComponentVNode)(2,c.AnimatedNumber,{value:d.pressure,format:function(e){return(0,r.toFixed)(e,2)}})," kPa"]})]})}),(0,o.createComponentVNode)(2,c.Section,{title:"Controls",buttons:(0,o.createComponentVNode)(2,c.Button,{icon:d.on?"power-off":"times",content:d.on?"On":"Off",selected:d.on,onClick:function(){return l("power")}}),children:(0,o.createComponentVNode)(2,c.LabeledList,{children:[(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Setting",children:(0,o.createComponentVNode)(2,c.Button,{icon:d.cooling?"temperature-low":"temperature-high",content:d.cooling?"Cooling":"Heating",selected:d.cooling,onClick:function(){return l("cooling")}})}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Target Temperature",children:(0,o.createComponentVNode)(2,c.NumberInput,{animated:!0,value:Math.round(d.target),unit:"K",width:"62px",minValue:Math.round(d.min),maxValue:Math.round(d.max),step:5,stepPixelSize:3,onDrag:function(e,t){return l("target",{target:t})}})}),(0,o.createComponentVNode)(2,c.LabeledList.Item,{label:"Presets",children:[(0,o.createComponentVNode)(2,c.Button,{icon:"fast-backward",disabled:d.target===d.min,title:"Minimum temperature",onClick:function(){return l("target",{target:d.min})}}),(0,o.createComponentVNode)(2,c.Button,{icon:"sync",disabled:d.target===d.initial,title:"Room Temperature",onClick:function(){return l("target",{target:d.initial})}}),(0,o.createComponentVNode)(2,c.Button,{icon:"fast-forward",disabled:d.target===d.max,title:"Maximum Temperature",onClick:function(){return l("target",{target:d.max})}})]})]})})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.TransferValve=void 0;var o=n(0),r=n(1),a=n(2),c=n(4);t.TransferValve=function(e,t){var n=(0,r.useBackend)(t),i=n.act,l=n.data,d=l.tank_one,u=l.tank_two,s=l.attached_device,m=l.valve;return(0,o.createComponentVNode)(2,c.Window,{children:(0,o.createComponentVNode)(2,c.Window.Content,{children:[(0,o.createComponentVNode)(2,a.Section,{children:(0,o.createComponentVNode)(2,a.LabeledList,{children:(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Valve Status",children:(0,o.createComponentVNode)(2,a.Button,{icon:m?"unlock":"lock",content:m?"Open":"Closed",disabled:!d||!u,onClick:function(){return i("toggle")}})})})}),(0,o.createComponentVNode)(2,a.Section,{title:"Assembly",buttons:(0,o.createComponentVNode)(2,a.Button,{textAlign:"center",width:"150px",icon:"cog",content:"Configure Assembly",disabled:!s,onClick:function(){return i("device")}}),children:(0,o.createComponentVNode)(2,a.LabeledList,{children:s?(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Attachment",children:(0,o.createComponentVNode)(2,a.Button,{icon:"eject",content:s,disabled:!s,onClick:function(){return i("remove_device")}})}):(0,o.createComponentVNode)(2,a.NoticeBox,{textAlign:"center",children:"Attach Assembly"})})}),(0,o.createComponentVNode)(2,a.Section,{title:"Attachment One",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:d?(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Attachment",children:(0,o.createComponentVNode)(2,a.Button,{icon:"eject",content:d,disabled:!d,onClick:function(){return i("tankone")}})}):(0,o.createComponentVNode)(2,a.NoticeBox,{textAlign:"center",children:"Attach Tank"})})}),(0,o.createComponentVNode)(2,a.Section,{title:"Attachment Two",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:u?(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Attachment",children:(0,o.createComponentVNode)(2,a.Button,{icon:"eject",content:u,disabled:!u,onClick:function(){return i("tanktwo")}})}):(0,o.createComponentVNode)(2,a.NoticeBox,{textAlign:"center",children:"Attach Tank"})})})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.Uplink=void 0;var o=n(0),r=n(26),a=n(43),c=n(19),i=n(1),l=n(2),d=n(75),u=n(4),s=n(49),m=function(e){switch(e){case 0:return(0,o.createComponentVNode)(2,p);case 1:return(0,o.createComponentVNode)(2,f);default:return"SOMETHING WENT VERY WRONG PLEASE AHELP"}};t.Uplink=function(e,t){var n=(0,i.useBackend)(t),r=n.act,a=(n.data,(0,i.useLocalState)(t,"tabIndex",0)),c=a[0],d=a[1];return(0,o.createComponentVNode)(2,u.Window,{theme:"syndicate",children:[(0,o.createComponentVNode)(2,s.ComplexModal),(0,o.createComponentVNode)(2,u.Window.Content,{scrollable:!0,children:[(0,o.createComponentVNode)(2,l.Tabs,{children:[(0,o.createComponentVNode)(2,l.Tabs.Tab,{selected:0===c,onClick:function(){return d(0)},icon:"shopping-cart",children:"Purchase Equipment"},"PurchasePage"),(0,o.createComponentVNode)(2,l.Tabs.Tab,{selected:1===c,onClick:function(){return d(1)},icon:"user",children:"Exploitable Information"},"ExploitableInfo"),(0,o.createComponentVNode)(2,l.Tabs.Tab,{onClick:function(){return r("lock")},icon:"lock",children:"Lock Uplink"},"LockUplink")]}),m(c)]})]})};var p=function(e,t){var n=(0,i.useBackend)(t),r=n.act,a=n.data,u=a.crystals,s=a.cats,m=(0,i.useLocalState)(t,"uplinkTab",s[0]),p=m[0],f=m[1];return(0,o.createComponentVNode)(2,l.Section,{title:"Current Balance: "+u+"TC",buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,l.Button,{content:"Random Item",icon:"question",onClick:function(){return r("buyRandom")}}),(0,o.createComponentVNode)(2,l.Button,{content:"Refund Currently Held Item",icon:"undo",onClick:function(){return r("refund")}})],4),children:(0,o.createComponentVNode)(2,l.Flex,{children:[(0,o.createComponentVNode)(2,d.FlexItem,{children:(0,o.createComponentVNode)(2,l.Tabs,{vertical:!0,children:s.map((function(e){return(0,o.createComponentVNode)(2,l.Tabs.Tab,{selected:e===p,onClick:function(){return f(e)},children:e.cat},e)}))})}),(0,o.createComponentVNode)(2,l.Flex.Item,{grow:1,basis:0,children:p.items.map((function(e){return(0,o.createComponentVNode)(2,l.Section,{title:(0,c.decodeHtmlEntities)(e.name),buttons:(0,o.createComponentVNode)(2,l.Button,{content:"Buy ("+e.cost+"TC)"+(e.refundable?" [Refundable]":""),color:1===e.hijack_only&&"red",tooltip:1===e.hijack_only&&"Hijack Agents Only!",tooltipPosition:"left",onClick:function(){return r("buyItem",{item:e.obj_path})},disabled:e.cost>u}),children:(0,o.createComponentVNode)(2,l.Box,{italic:!0,children:(0,c.decodeHtmlEntities)(e.desc)})},(0,c.decodeHtmlEntities)(e.name))}))})]})})},f=function(e,t){var n=(0,i.useBackend)(t),u=(n.act,n.data.exploitable),s=(0,i.useLocalState)(t,"selectedRecord",u[0]),m=s[0],p=s[1],f=(0,i.useLocalState)(t,"searchText",""),h=f[0],C=f[1],N=function(e,t){void 0===t&&(t="");var n=(0,c.createSearch)(t,(function(e){return e.name}));return(0,a.flow)([(0,r.filter)((function(e){return null==e?void 0:e.name})),t&&(0,r.filter)(n),(0,r.sortBy)((function(e){return e.name}))])(e)}(u,h);return(0,o.createComponentVNode)(2,l.Section,{title:"Exploitable Records",children:(0,o.createComponentVNode)(2,l.Flex,{children:[(0,o.createComponentVNode)(2,d.FlexItem,{basis:20,children:[(0,o.createComponentVNode)(2,l.Input,{fluid:!0,mb:1,placeholder:"Search Crew",onInput:function(e,t){return C(t)}}),(0,o.createComponentVNode)(2,l.Tabs,{vertical:!0,children:N.map((function(e){return(0,o.createComponentVNode)(2,l.Tabs.Tab,{selected:e===m,onClick:function(){return p(e)},children:e.name},e)}))})]}),(0,o.createComponentVNode)(2,l.Flex.Item,{grow:1,basis:0,children:(0,o.createComponentVNode)(2,l.Section,{title:"Name: "+m.name,children:[(0,o.createComponentVNode)(2,l.Box,{children:["Age: ",m.age]}),(0,o.createComponentVNode)(2,l.Box,{children:["Fingerprint: ",m.fingerprint]}),(0,o.createComponentVNode)(2,l.Box,{children:["Rank: ",m.rank]}),(0,o.createComponentVNode)(2,l.Box,{children:["Sex: ",m.sex]}),(0,o.createComponentVNode)(2,l.Box,{children:["Species: ",m.species]})]})})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.Vending=void 0;var o=n(0),r=(n(8),n(1)),a=n(2),c=n(4),i=function(e,t){var n=(0,r.useBackend)(t),c=n.act,i=n.data,l=e.product,d=e.productStock,u=e.productImage,s=i.chargesMoney,m=(i.user,i.userMoney),p=i.vend_ready,f=i.coin_name,h=(i.inserted_item_name,!s||0===l.price),C="ERROR!",N="";l.req_coin?(C="COIN",N="circle"):h?(C="FREE",N="arrow-circle-down"):(C=l.price,N="shopping-cart");var b=!p||!f&&l.req_coin||0===d||!h&&l.price>m;return(0,o.createComponentVNode)(2,a.Table.Row,{children:[(0,o.createComponentVNode)(2,a.Table.Cell,{collapsing:!0,children:(0,o.createVNode)(1,"img",null,null,1,{src:"data:image/jpeg;base64,"+u,style:{"vertical-align":"middle",width:"32px",margin:"0px","margin-left":"0px"}})}),(0,o.createComponentVNode)(2,a.Table.Cell,{bold:!0,children:l.name}),(0,o.createComponentVNode)(2,a.Table.Cell,{collapsing:!0,textAlign:"center",children:(0,o.createComponentVNode)(2,a.Box,{color:(d<=0?"bad":d<=l.max_amount/2&&"average")||"good",children:[d," in stock"]})}),(0,o.createComponentVNode)(2,a.Table.Cell,{collapsing:!0,textAlign:"center",children:(0,o.createComponentVNode)(2,a.Button,{fluid:!0,disabled:b,icon:N,content:C,textAlign:"left",onClick:function(){return c("vend",{inum:l.inum})}})})]})};t.Vending=function(e,t){var n,l=(0,r.useBackend)(t),d=l.act,u=l.data,s=u.user,m=u.guestNotice,p=u.userMoney,f=u.chargesMoney,h=u.product_records,C=void 0===h?[]:h,N=u.coin_records,b=void 0===N?[]:N,g=u.hidden_records,V=void 0===g?[]:g,v=u.stock,y=(u.vend_ready,u.coin_name),_=u.inserted_item_name,x=u.panel_open,k=u.speaker,L=u.imagelist;return n=[].concat(C,b),u.extended_inventory&&(n=[].concat(n,V)),n=n.filter((function(e){return!!e})),(0,o.createComponentVNode)(2,c.Window,{title:"Vending Machine",resizable:!0,children:(0,o.createComponentVNode)(2,c.Window.Content,{scrollable:!0,children:[!!f&&(0,o.createComponentVNode)(2,a.Section,{title:"User",children:s&&(0,o.createComponentVNode)(2,a.Box,{children:["Welcome, ",(0,o.createVNode)(1,"b",null,s.name,0),","," ",(0,o.createVNode)(1,"b",null,s.job||"Unemployed",0),"!",(0,o.createVNode)(1,"br"),"Your balance is ",(0,o.createVNode)(1,"b",null,[p,(0,o.createTextVNode)(" credits")],0),"."]})||(0,o.createComponentVNode)(2,a.Box,{color:"light-grey",children:m})}),!!y&&(0,o.createComponentVNode)(2,a.Section,{title:"Coin",buttons:(0,o.createComponentVNode)(2,a.Button,{fluid:!0,icon:"eject",content:"Remove Coin",onClick:function(){return d("remove_coin",{})}}),children:(0,o.createComponentVNode)(2,a.Box,{children:y})}),!!_&&(0,o.createComponentVNode)(2,a.Section,{title:"Item",buttons:(0,o.createComponentVNode)(2,a.Button,{fluid:!0,icon:"eject",content:"Eject Item",onClick:function(){return d("eject_item",{})}}),children:(0,o.createComponentVNode)(2,a.Box,{children:_})}),!!x&&(0,o.createComponentVNode)(2,a.Section,{title:"Maintenance",children:(0,o.createComponentVNode)(2,a.Button,{icon:k?"check":"volume-mute",selected:k,content:"Speaker",textAlign:"left",onClick:function(){return d("toggle_voice",{})}})}),(0,o.createComponentVNode)(2,a.Section,{title:"Products",children:(0,o.createComponentVNode)(2,a.Table,{children:n.map((function(e){return(0,o.createComponentVNode)(2,i,{product:e,productStock:v[e.name],productImage:L[e.path]},e.name)}))})})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.VolumeMixer=void 0;var o=n(0),r=n(1),a=n(2),c=n(4);t.VolumeMixer=function(e,t){var n=(0,r.useBackend)(t),i=n.act,l=n.data.channels;return(0,o.createComponentVNode)(2,c.Window,{children:(0,o.createComponentVNode)(2,c.Window.Content,{children:(0,o.createComponentVNode)(2,a.Section,{height:"100%",overflow:"auto",children:l.map((function(e,t){return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Box,{fontSize:"1.25rem",color:"label",mt:t>0&&"0.5rem",children:e.name}),(0,o.createComponentVNode)(2,a.Box,{mt:"0.5rem",children:(0,o.createComponentVNode)(2,a.Flex,{children:[(0,o.createComponentVNode)(2,a.Flex.Item,{children:(0,o.createComponentVNode)(2,a.Button,{width:"24px",color:"transparent",children:(0,o.createComponentVNode)(2,a.Icon,{name:"volume-off",size:"1.5",mt:"0.1rem",onClick:function(){return i("volume",{channel:e.num,volume:0})}})})}),(0,o.createComponentVNode)(2,a.Flex.Item,{grow:"1",mx:"1rem",children:(0,o.createComponentVNode)(2,a.Slider,{minValue:0,maxValue:100,stepPixelSize:3.13,value:e.volume,onChange:function(t,n){return i("volume",{channel:e.num,volume:n})}})}),(0,o.createComponentVNode)(2,a.Flex.Item,{children:(0,o.createComponentVNode)(2,a.Button,{width:"24px",color:"transparent",children:(0,o.createComponentVNode)(2,a.Icon,{name:"volume-up",size:"1.5",mt:"0.1rem",onClick:function(){return i("volume",{channel:e.num,volume:100})}})})})]})})],4,e.num)}))})})})}},function(e,t,n){"use strict";t.__esModule=!0,t.Wires=void 0;var o=n(0),r=n(1),a=n(2),c=n(4);t.Wires=function(e,t){var n=(0,r.useBackend)(t),i=n.act,l=n.data,d=l.wires||[],u=l.status||[];return(0,o.createComponentVNode)(2,c.Window,{children:(0,o.createComponentVNode)(2,c.Window.Content,{children:[(0,o.createComponentVNode)(2,a.Section,{children:(0,o.createComponentVNode)(2,a.LabeledList,{children:d.map((function(e){return(0,o.createComponentVNode)(2,a.LabeledList.Item,{className:"candystripe",label:e.color_name,labelColor:e.seen_color,color:e.seen_color,buttons:(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Button,{content:e.cut?"Mend":"Cut",onClick:function(){return i("cut",{wire:e.color})}}),(0,o.createComponentVNode)(2,a.Button,{content:"Pulse",onClick:function(){return i("pulse",{wire:e.color})}}),(0,o.createComponentVNode)(2,a.Button,{content:e.attached?"Detach":"Attach",onClick:function(){return i("attach",{wire:e.color})}})],4),children:!!e.wire&&(0,o.createVNode)(1,"i",null,[(0,o.createTextVNode)("("),e.wire,(0,o.createTextVNode)(")")],0)},e.seen_color)}))})}),!!u.length&&(0,o.createComponentVNode)(2,a.Section,{children:u.map((function(e){return(0,o.createComponentVNode)(2,a.Box,{color:"lightgray",mt:.1,children:e},e)}))})]})})}},function(e,t,n){"use strict";t.__esModule=!0,t.WizardApprenticeContract=void 0;var o=n(0),r=n(1),a=n(2),c=n(4);t.WizardApprenticeContract=function(e,t){var n=(0,r.useBackend)(t),i=n.act,l=n.data.used;return(0,o.createComponentVNode)(2,c.Window,{resizable:!0,children:(0,o.createComponentVNode)(2,c.Window.Content,{scrollable:!0,children:[(0,o.createComponentVNode)(2,a.Section,{title:"Contract of Apprenticeship",children:["Using this contract, you may summon an apprentice to aid you on your mission.",(0,o.createVNode)(1,"p",null,"If you are unable to establish contact with your apprentice, you can feed the contract back to the spellbook to refund your points.",16),l?(0,o.createComponentVNode)(2,a.Box,{bold:!0,color:"red",children:"You've already summoned an apprentice or you are in process of summoning one."}):""]}),(0,o.createComponentVNode)(2,a.Section,{title:"Which school of magic is your apprentice studying?",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Destruction",children:["Your apprentice is skilled in offensive magic. They know Magic Missile and Fireball.",(0,o.createVNode)(1,"br"),(0,o.createComponentVNode)(2,a.Button,{content:"Select",disabled:l,onClick:function(){return i("destruction")}})]}),(0,o.createComponentVNode)(2,a.LabeledList.Divider),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Bluespace Manipulation",children:["Your apprentice is able to defy physics, melting through solid objects and travelling great distances in the blink of an eye. They know Teleport and Ethereal Jaunt.",(0,o.createVNode)(1,"br"),(0,o.createComponentVNode)(2,a.Button,{content:"Select",disabled:l,onClick:function(){return i("bluespace")}})]}),(0,o.createComponentVNode)(2,a.LabeledList.Divider),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Healing",children:["Your apprentice is training to cast spells that will aid your survival. They know Forcewall and Charge and come with a Staff of Healing.",(0,o.createVNode)(1,"br"),(0,o.createComponentVNode)(2,a.Button,{content:"Select",disabled:l,onClick:function(){return i("healing")}})]}),(0,o.createComponentVNode)(2,a.LabeledList.Divider),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Robeless",children:["Your apprentice is training to cast spells without their robes. They know Knock and Mindswap.",(0,o.createVNode)(1,"br"),(0,o.createComponentVNode)(2,a.Button,{content:"Select",disabled:l,onClick:function(){return i("robeless")}})]}),(0,o.createComponentVNode)(2,a.LabeledList.Divider)]})})]})})}}]); \ No newline at end of file diff --git a/tools/announcement_voice_filter/.bitwig-project b/tools/announcement_voice_filter/.bitwig-project new file mode 100644 index 00000000000..e69de29bb2d diff --git a/tools/announcement_voice_filter/README.md b/tools/announcement_voice_filter/README.md new file mode 100644 index 00000000000..db389ad1183 --- /dev/null +++ b/tools/announcement_voice_filter/README.md @@ -0,0 +1,17 @@ +# AI Announcement Voice Effects Template +This template file helps apply the correct sound effects to generate further Station AI announcement messages. + +--- + +### Requirements +You need a copy (full or trial) of Bitwig Studio 3.x, and access to Amazon Polly's free tier. If you are using a trial version of Bitwig Studio, you also require a free audio editor such as Audacity. + + +### Amazon Polly +Plain text, Standard engine, Englush US, Joanna - Female. + + +### Bitwig studio +All you need to do is drag your generated polly voice into the project. +Ensure the tempo is 114.4 for your track. +Record or export the output directly to OGG (if you own a license) or to a free editor such as Audacity via loopback recording diff --git a/tools/announcement_voice_filter/StationAI.bwproject b/tools/announcement_voice_filter/StationAI.bwproject new file mode 100644 index 00000000000..a7fc00a20b9 Binary files /dev/null and b/tools/announcement_voice_filter/StationAI.bwproject differ diff --git a/tools/ci/install_dmdoc.sh b/tools/ci/install_dmdoc.sh new file mode 100644 index 00000000000..9e9b29caf9d --- /dev/null +++ b/tools/ci/install_dmdoc.sh @@ -0,0 +1,6 @@ +#!/bin/bash +source _build_dependencies.sh + +wget -O ~/dmdoc "https://github.com/SpaceManiac/SpacemanDMM/releases/download/$SPACEMANDMM_TAG/dmdoc" +chmod +x ~/dmdoc +~/dmdoc --version diff --git a/tools/ci/validate_rustg_windows.py b/tools/ci/validate_rustg_windows.py index 787bafb9a60..1c3c883ae5e 100644 --- a/tools/ci/validate_rustg_windows.py +++ b/tools/ci/validate_rustg_windows.py @@ -37,7 +37,7 @@ else: fail("RUSTG DM header file does NOT exist") # Parse the version from the DM file -f = open("code/__DEFINES/rust_g.dm", "r") +f = open("code/__DEFINES/_versions.dm", "r") lines = f.readlines() f.close() dm_version = None @@ -92,16 +92,16 @@ else: # Make sure we can parse TOML string_array = c_char_p * 1 sa = string_array(bytes(ci_toml_file_location, "ascii")) -rustg_dll.toml2json.argtypes = [c_int, c_char_p * 1] +rustg_dll.toml_file_to_json.argtypes = [c_int, c_char_p * 1] # Set args for JSON retrieval -rustg_dll.toml2json.restype = c_char_p +rustg_dll.toml_file_to_json.restype = c_char_p try: # Run it - output_json = rustg_dll.toml2json(1, sa).decode() + output_json = rustg_dll.toml_file_to_json(1, sa).decode() json.loads(output_json) - success("toml2json conversion successful") + success("toml_file_to_json successful") except Exception: - fail("Failed to convert toml2json") + fail("Failed to run toml_file_to_json") exit(0) # Success diff --git a/tools/github-actions/doc-generator b/tools/github-actions/doc-generator deleted file mode 100755 index ce0b4fa25f5..00000000000 Binary files a/tools/github-actions/doc-generator and /dev/null differ diff --git a/tools/loadout_converter/loadout_converter.json b/tools/loadout_converter/loadout_converter.json new file mode 100644 index 00000000000..30c72b07196 --- /dev/null +++ b/tools/loadout_converter/loadout_converter.json @@ -0,0 +1,325 @@ +{ + "special": { + "scarf": "/datum/gear/accessory/scarf", + "armband": "/datum/gear/accessory/armband_red", + "mantle": "/datum/gear/suit/mantle", + "sandals": "/datum/gear/shoes/sandals" + }, + "standard": { + "scarf%2c+red": "/datum/gear/accessory/scarf/red", + "scarf%2c+green": "/datum/gear/accessory/scarf/green", + "scarf%2c+dark+blue": "/datum/gear/accessory/scarf/darkblue", + "scarf%2c+purple": "/datum/gear/accessory/scarf/purple", + "scarf%2c+yellow": "/datum/gear/accessory/scarf/yellow", + "scarf%2c+orange": "/datum/gear/accessory/scarf/orange", + "scarf%2c+light+blue": "/datum/gear/accessory/scarf/lightblue", + "scarf%2c+white": "/datum/gear/accessory/scarf/white", + "scarf%2c+black": "/datum/gear/accessory/scarf/black", + "scarf%2c+zebra": "/datum/gear/accessory/scarf/zebra", + "scarf%2c+christmas": "/datum/gear/accessory/scarf/christmas", + "scarf%2c+striped+red": "/datum/gear/accessory/scarf/stripedred", + "scarf%2c+striped+green": "/datum/gear/accessory/scarf/stripedgreen", + "scarf%2c+striped+blue": "/datum/gear/accessory/scarf/stripedblue", + "holobadge%2c+pin": "/datum/gear/accessory/holobadge", + "holobadge%2c+cord": "/datum/gear/accessory/holobadge_n", + "tie%2c+blue": "/datum/gear/accessory/tieblue", + "tie%2c+red": "/datum/gear/accessory/tiered", + "tie%2c+black": "/datum/gear/accessory/tieblack", + "tie%2c+vomit+green": "/datum/gear/accessory/tiehorrible", + "stethoscope": "/datum/gear/accessory/stethoscope", + "cowboy+shirt%2c+short+sleeved+black": "/datum/gear/accessory/cowboyshirt/short_sleeved", + "cowboy+shirt%2c+short+sleeved+white": "/datum/gear/accessory/cowboyshirt/white/short_sleeved", + "cowboy+shirt%2c+short+sleeved+pink": "/datum/gear/accessory/cowboyshirt/pink/short_sleeved", + "cowboy+shirt%2c+short+sleeved+red": "/datum/gear/accessory/cowboyshirt/red/short_sleeved", + "cowboy+shirt%2c+short+sleeved+navy": "/datum/gear/accessory/cowboyshirt/navy/short_sleeved", + "cowboy+shirt%2c+black": "/datum/gear/accessory/cowboyshirt", + "cowboy+shirt%2c+white": "/datum/gear/accessory/cowboyshirt/white", + "cowboy+shirt%2c+pink": "/datum/gear/accessory/cowboyshirt/pink", + "cowboy+shirt%2c+red": "/datum/gear/accessory/cowboyshirt/red", + "cowboy+shirt%2c+navy": "/datum/gear/accessory/cowboyshirt/navy", + "gold+locket": "/datum/gear/accessory/locket", + "simple+necklace": "/datum/gear/accessory/necklace", + "corset%2c+black": "/datum/gear/accessory/corset", + "corset%2c+red": "/datum/gear/accessory/corsetred", + "corset%2c+blue": "/datum/gear/accessory/corsetblue", + "armband%2c+blue-yellow": "/datum/gear/accessory/armband_civ", + "+armband%2c+security": "/datum/gear/accessory/armband_job/sec", + "cargo+armband": "/datum/gear/accessory/armband_job/cargo", + "armband%2c+medical": "/datum/gear/accessory/armband_job/medical", + "armband%2c+EMT": "/datum/gear/accessory/armband_job/emt", + "armband%2c+engineering": "/datum/gear/accessory/armband_job/engineering", + "armband%2c+hydroponics": "/datum/gear/accessory/armband_job/hydro", + "armband%2c+science": "/datum/gear/accessory/armband_job/sci", + "lipstick%2c+black": "/datum/gear/lipstick/black", + "lipstick%2c+jade": "/datum/gear/lipstick/jade", + "lipstick%2c+purple": "/datum/gear/lipstick/purple", + "lipstick%2c+blue": "/datum/gear/lipstick/blue", + "lipstick%2c+lime": "/datum/gear/lipstick/lime", + "lipstick%2c+red": "/datum/gear/lipstick", + "Fur+Gloves": "/datum/gear/donor/furgloves", + "Fur+Boots": "/datum/gear/donor/furboots", + "Noble+Boots": "/datum/gear/donor/noble_boot", + "Fur+Cape": "/datum/gear/donor/furcape", + "Fur+Coat": "/datum/gear/donor/furcoat", + "Spiky+Orange-tinted+Shades": "/datum/gear/donor/kamina", + "Spiky+Green-tinted+Shades": "/datum/gear/donor/green", + "Threed+Glasses": "/datum/gear/donor/threedglasses", + "Black+Sombrero": "/datum/gear/donor/blacksombrero", + "Plastic+Guard+helm": "/datum/gear/donor/guardhelm", + "Red+Gold-trimmed+Top+Hat": "/datum/gear/donor/goldtophat/red", + "Blue+Gold-trimmed+Top+Hat": "/datum/gear/donor/goldtophat/blue", + "Gold-trimmed+Top+Hat": "/datum/gear/donor/goldtophat", + "Mushroom+Hat": "/datum/gear/donor/mushhat", + "Fur+Cap": "/datum/gear/donor/furcap", + "Guy+Fawkes+mask": "/datum/gear/donor/fawkes", + "Silver+ID+Decal": "/datum/gear/donor/id_decal_silver", + "Prisoner+ID+Decal": "/datum/gear/donor/id_decal_prisoner", + "Emag+ID+Decal": "/datum/gear/donor/id_decal_emag", + "Gold+ID+Decal": "/datum/gear/donor/id_decal_gold", + "a+d20": "/datum/gear/dice", + "d20": "/datum/gear/dice", + "a+pack+of+Uplifts": "/datum/gear/uplift", + "a+pack+of+Robusts": "/datum/gear/robust", + "a+pack+of+Carps": "/datum/gear/carp", + "a+pack+of+Midoris": "/datum/gear/midori", + "smoking+pipe": "/datum/gear/smokingpipe", + "a+cheap+lighter": "/datum/gear/lighter", + "a+box+of+matches": "/datum/gear/matches", + "a+box+candles": "/datum/gear/candlebox", + "a+pet+rock": "/datum/gear/rock", + "a+camera": "/datum/gear/camera", + "a+red+fox+plushie": "/datum/gear/redfoxplushie", + "a+black+cat+plushie": "/datum/gear/blackcatplushie", + "a+vox+plushie": "/datum/gear/voxplushie", + "a+lizard+plushie": "/datum/gear/lizardplushie", + "a+deer+plushie": "/datum/gear/deerplushie", + "a+carp+plushie": "/datum/gear/carpplushie", + "a+classic+security+HUD": "/datum/gear/sechud", + "a+box+of+crayons": "/datum/gear/cryaonbox", + "a+walking+cane": "/datum/gear/cane", + "a+deck+of+standard+cards": "/datum/gear/cards", + "a+deck+of+cards": "/datum/gear/cards", + "a+double+deck+of+standard+cards": "/datum/gear/doublecards", + "a+deck+of+tarot+cards": "/datum/gear/tarot", + "a+pair+of+headphones": "/datum/gear/headphones", + "a+fannypack": "/datum/gear/fannypack", + "bandana%2c+black": "/datum/gear/blackbandana", + "bandana%2c+purple": "/datum/gear/purplebandana", + "bandana%2c+orange": "/datum/gear/orangebandana", + "bandana%2c+green": "/datum/gear/greenbandana", + "bandana%2c+blue": "/datum/gear/bluebandana", + "bandana%2c+red": "/datum/gear/redbandana", + "bandana%2c+gold": "/datum/gear/goldbandana", + "bandana%2c+skull": "/datum/gear/skullbandana", + "Nano-Mob+Hunter+GO%21+Cartridge": "/datum/gear/mob_hunt_game", + "flask": "/datum/gear/mug/flask", + "engineer+coffee+mug": "/datum/gear/mug/department/eng", + "doctor+coffee+mug": "/datum/gear/mug/department/med", + "scientist+coffee+mug": "/datum/gear/mug/department/sci", + "officer+coffee+mug": "/datum/gear/mug/department/sec", + "crewmember+coffee+mug": "/datum/gear/mug/department/serv", + "random+coffee+mug": "/datum/gear/mug", + "novelty+coffee+mug": "/datum/gear/novelty_mug", + "Accordion": "/datum/gear/instrument/accordion", + "Banjo": "/datum/gear/instrument/banjo", + "Electric+guitar": "/datum/gear/instrument/eguitar", + "Glockenspiel": "/datum/gear/instrument/glock", + "Guitar": "/datum/gear/instrument/guitar", + "Harmonica": "/datum/gear/instrument/harmonica", + "Recorder": "/datum/gear/instrument/recorder", + "Saxophone": "/datum/gear/instrument/sax", + "Trumpet": "/datum/gear/instrument/trumpet", + "Trombone": "/datum/gear/instrument/trombone", + "Violin": "/datum/gear/instrument/violin", + "Xylophone": "/datum/gear/instrument/xylo", + "Synthesizer": "/datum/gear/instrument", + "synthesizer": "/datum/gear/instrument", + "cheap+sunglasses": "/datum/gear/glasses/sunglasses", + "Eyepatch": "/datum/gear/glasses/eyepatch", + "Hipster+glasses": "/datum/gear/glasses/hipster", + "Hipster+Glasses": "/datum/gear/glasses/hipster", + "monocle": "/datum/gear/glasses/monocle", + "Monocle": "/datum/gear/glasses/monocle", + "Prescription+glasses": "/datum/gear/glasses/prescription", + "Fingerless+Gloves": "/datum/gear/gloves/fingerless", + "Silver+ring": "/datum/gear/gloves/silverring", + "Gold+ring": "/datum/gear/gloves/goldring", + "hardhat%2c+yellow": "/datum/gear/hat/hhat_yellow", + "hardhat%2c+orange": "/datum/gear/hat/hhat_orange", + "hardhat%2c+blue": "/datum/gear/hat/hhat_blue", + "top+hat": "/datum/gear/hat/that", + "flat+cap": "/datum/gear/hat/flatcap", + "witch+hat": "/datum/gear/hat/witch", + "pirate+captian+hat": "/datum/gear/hat/piratecaphat", + "fez": "/datum/gear/hat/fez", + "rasta+hat": "/datum/gear/hat/rasta", + "fedora%2c+black": "/datum/gear/hat/bfedora", + "fedora%2c+white": "/datum/gear/hat/wfedora", + "fedora%2c+brown": "/datum/gear/hat/brfedora", + "surgical+cap%2c+purple": "/datum/gear/hat/surgicalcap_purple", + "surgical+cap%2c+green": "/datum/gear/hat/surgicalcap_green", + "security+corporate+cap": "/datum/gear/hat/capcsec", + "security+cap": "/datum/gear/hat/capsec", + "cap%2c+red": "/datum/gear/hat/capred", + "cap%2c+blue": "/datum/gear/hat/capblue", + "cap%2c+green": "/datum/gear/hat/capgreen", + "cap%2c+black": "/datum/gear/hat/capblack", + "cap%2c+purple": "/datum/gear/hat/cappurple", + "cap%2c+white": "/datum/gear/hat/capwhite", + "cap%2c+orange": "/datum/gear/hat/caporange", + "cap%2c+grey": "/datum/gear/hat/capgrey", + "cap%2c+yellow": "/datum/gear/hat/capyellow", + "cowboy+hat%2c+tan": "/datum/gear/hat/cowboyhat/tan", + "cowboy+hat%2c+black": "/datum/gear/hat/cowboyhat/black", + "cowboy+hat%2c+white": "/datum/gear/hat/cowboyhat/white", + "cowboy+hat%2c+pink": "/datum/gear/hat/cowboyhat/pink", + "cowboy+hat%2c+brown": "/datum/gear/hat/cowboyhat", + "cowboy+hat": "/datum/gear/hat/cowboyhat", + "beret%2c+purple": "/datum/gear/hat/beret_purple", + "beret%2c+black": "/datum/gear/hat/beret_black", + "beret%2c+blue": "/datum/gear/hat/beret_blue", + "beret%2c+red": "/datum/gear/hat/beret_red", + "security+beret": "/datum/gear/hat/beret_job/sec", + "science+beret": "/datum/gear/hat/beret_job/sci", + "medical+beret": "/datum/gear/hat/beret_job/med", + "engineering+beret": "/datum/gear/hat/beret_job/eng", + "atmospherics+beret": "/datum/gear/hat/beret_job/atmos", + "hair+flower%2c+purple": "/datum/gear/hat/flowerpin", + "hair+flower": "/datum/gear/hat/flowerpin", + "cap%2c+Sol+Gov": "/datum/gear/hat/capsolgov", + "sleek+veil": "/datum/gear/racial/taj/sec", + "lightweight+veil": "/datum/gear/racial/taj/med", + "hi-tech+veil": "/datum/gear/racial/taj/sci", + "industrial+veil": "/datum/gear/racial/taj/eng", + "khaki+veil": "/datum/gear/racial/taj/cargo", + "embroidered+veil": "/datum/gear/racial/taj", + "cloth+footwraps": "/datum/gear/racial/footwraps", + "sandals%2c+wooden": "/datum/gear/shoes/sandals", + "winter+boots": "/datum/gear/shoes/winterboots", + "work+boots": "/datum/gear/shoes/workboots", + "sandals%2c+fancy": "/datum/gear/shoes/fancysandals", + "dress+shoes": "/datum/gear/shoes/dressshoes", + "cowboy+boots%2c+white": "/datum/gear/shoes/cowboyboots/white", + "cowboy+boots%2c+pink": "/datum/gear/shoes/cowboyboots/pink", + "cowboy+boots%2c+brown": "/datum/gear/shoes/cowboyboots", + "cowboy+boots%2c+black": "/datum/gear/shoes/cowboyboots_black", + "jackboots": "/datum/gear/shoes/jackboots", + "jacksandals": "/datum/gear/shoes/jacksandals", + "laceup+shoes": "/datum/gear/shoes/laceup", + "Black+shoes": "/datum/gear/shoes/blackshoes", + "Brown+shoes": "/datum/gear/shoes/brownshoes", + "White+shoes": "/datum/gear/shoes/whiteshoes", + "winter+coat%2c+security": "/datum/gear/suit/coat/job/sec", + "winter+coat%2c+captain": "/datum/gear/suit/coat/job/captain", + "winter+coat%2c+medical": "/datum/gear/suit/coat/job/med", + "winter+coat%2c+science": "/datum/gear/suit/coat/job/sci", + "winter+coat%2c+engineering": "/datum/gear/suit/coat/job/engi", + "winter+coat%2c+atmospherics": "/datum/gear/suit/coat/job/atmos", + "winter+coat%2c+hydroponics": "/datum/gear/suit/coat/job/hydro", + "winter+coat%2c+cargo": "/datum/gear/suit/coat/job/cargo", + "winter+coat%2c+miner": "/datum/gear/suit/coat/job/miner", + "winter+coat": "/datum/gear/suit/coat/grey", + "labcoat%2c+paramedic": "/datum/gear/suit/labcoat_emt", + "leather+jacket": "/datum/gear/suit/leather_jacket", + "leather+motorcycle+jacket": "/datum/gear/suit/motojacket", + "trenchcoat%2c+brown": "/datum/gear/suit/br_tcoat", + "trenchcoat%2c+black": "/datum/gear/suit/bl_tcoat", + "bomber+jacket": "/datum/gear/suit/bomber_jacket", + "military+jacket%2c+olive": "/datum/gear/suit/ol_miljacket", + "military+jacket%2c+navy": "/datum/gear/suit/nv_miljacket", + "military+jacket%2c+desert": "/datum/gear/suit/ds_miljacket", + "military+jacket%2c+white": "/datum/gear/suit/wh_miljacket", + "security+jacket": "/datum/gear/suit/secjacket", + "security+bomber+jacket": "/datum/gear/suit/secbomberjacket", + "Ian+Shirt": "/datum/gear/suit/ianshirt", + "poncho%2c+classic": "/datum/gear/suit/poncho", + "poncho%2c+green": "/datum/gear/suit/grponcho", + "poncho%2c+red": "/datum/gear/suit/rdponcho", + "hoodie%2c+Tharsis+Polytech": "/datum/gear/suit/tphoodie", + "hoodie%2c+Nanotrasen": "/datum/gear/suit/nthoodie", + "hoodie%2c+Lunar+Academy+of+Medicine": "/datum/gear/suit/lamhoodie", + "hoodie%2c+Canaan+University+of+Technology": "/datum/gear/suit/cuthoodie", + "hoodie%2c+Martian+Institute+of+Technology": "/datum/gear/suit/mithoodie", + "hoodie%2c+blue": "/datum/gear/suit/bluehoodie", + "hoodie%2c+black": "/datum/gear/suit/blackhoodie", + "suit+jacket%2c+black": "/datum/gear/suit/blacksuit", + "suit+jacket%2c+blue": "/datum/gear/suit/bluesuit", + "suit+jacket%2c+purple": "/datum/gear/suit/purplesuit", + "mantle%2c+captain": "/datum/gear/suit/mantle/job/captain", + "mantle%2c+chief+engineer": "/datum/gear/suit/mantle/job/ce", + "mantle%2c+chief+medical+officer": "/datum/gear/suit/mantle/job/cmo", + "mantle%2c+head+of+security": "/datum/gear/suit/mantle/job/hos", + "mantle%2c+head+of+personnel": "/datum/gear/suit/mantle/job/hop", + "mantle%2c+research+director": "/datum/gear/suit/mantle/job/rd", + "old+scarf": "/datum/gear/suit/old_scarf", + "regal+shawl": "/datum/gear/suit/regal_shawl", + "witch+robes": "/datum/gear/suit/witch", + "jumpsuit%2c+black": "/datum/gear/uniform/suit/jumpsuitblack", + "jumpsuit%2c+blue": "/datum/gear/uniform/suit/jumpsuitblue", + "jumpsuit%2c+green": "/datum/gear/uniform/suit/jumpsuitgreen", + "jumpsuit%2c+grey": "/datum/gear/uniform/suit/jumpsuitgrey", + "jumpsuit%2c+orange": "/datum/gear/uniform/suit/jumpsuitorange", + "jumpsuit%2c+pink": "/datum/gear/uniform/suit/jumpsuitpink", + "jumpsuit%2c+red": "/datum/gear/uniform/suit/jumpsuitred", + "jumpsuit%2c+white": "/datum/gear/uniform/suit/jumpsuitwhite", + "jumpsuit%2c+yellowgreen": "/datum/gear/uniform/suit/jumpsuityellowgreen", + "jumpsuit%2c+yellow": "/datum/gear/uniform/suit/jumpsuityellow", + "jumpsuit%2c+lightblue": "/datum/gear/uniform/suit/jumpsuitlightblue", + "jumpsuit%2c+aqua": "/datum/gear/uniform/suit/jumpsuitaqua", + "jumpsuit%2c+purple": "/datum/gear/uniform/suit/jumpsuitpurple", + "jumpsuit%2c+lightpurple": "/datum/gear/uniform/suit/jumpsuitlightpurple", + "jumpsuit%2c+lightgreen": "/datum/gear/uniform/suit/jumpsuitlightgreen", + "jumpsuit%2c+lightbrown": "/datum/gear/uniform/suit/jumpsuitlightbrown", + "jumpsuit%2c+brown": "/datum/gear/uniform/suit/jumpsuitbrown", + "jumpsuit%2c+darkblue": "/datum/gear/uniform/suit/jumpsuitdarkblue", + "jumpsuit%2c+lightred": "/datum/gear/uniform/suit/jumpsuitlightred", + "jumpsuit%2c+darkred": "/datum/gear/uniform/suit/jumpsuitdarkred", + "USSP+uniform": "/datum/gear/uniform/suit/soviet", + "a+kilt": "/datum/gear/uniform/suit/kilt", + "tacticool+turtleneck": "/datum/gear/uniform/suit/tacticool", + "plaid+skirt%2c+blue": "/datum/gear/uniform/skirt/blue", + "plaid+skirt%2c+purple": "/datum/gear/uniform/skirt/purple", + "plaid+skirt%2c+red": "/datum/gear/uniform/skirt/red", + "skirt%2c+black": "/datum/gear/uniform/skirt/black", + "skirt%2c+ce": "/datum/gear/uniform/skirt/job/ce", + "skirt%2c+atmos": "/datum/gear/uniform/skirt/job/atmos", + "skirt%2c+engineer": "/datum/gear/uniform/skirt/job/eng", + "skirt%2c+roboticist": "/datum/gear/uniform/skirt/job/roboticist", + "skirt%2c+cmo": "/datum/gear/uniform/skirt/job/cmo", + "skirt%2c+chemist": "/datum/gear/uniform/skirt/job/chem", + "skirt%2c+virologist": "/datum/gear/uniform/skirt/job/viro", + "skirt%2c+medical": "/datum/gear/uniform/skirt/job/med", + "skirt%2c+physician": "/datum/gear/uniform/skirt/job/phys", + "skirt%2c+scientist": "/datum/gear/uniform/skirt/job/sci", + "skirt%2c+cargo": "/datum/gear/uniform/skirt/job/cargo", + "skirt%2c+QM": "/datum/gear/uniform/skirt/job/qm", + "skirt%2c+warden": "/datum/gear/uniform/skirt/job/warden", + "skirt%2c+security": "/datum/gear/uniform/skirt/job/security", + "skirt%2c+hos": "/datum/gear/uniform/skirt/job/head_of_security", + "skirt%2c+nt+rep": "/datum/gear/uniform/skirt/job/ntrep", + "skirt%2c+blueshield": "/datum/gear/uniform/skirt/job/blueshield", + "medical+scrubs%2c+purple": "/datum/gear/uniform/medical/pscrubs", + "medical+scrubs%2c+green": "/datum/gear/uniform/medical/gscrubs", + "security+uniform%2c+formal": "/datum/gear/uniform/sec/formal", + "security+uniform%2c+corporate": "/datum/gear/uniform/sec/secorporate", + "security+uniform%2c+dispatch": "/datum/gear/uniform/sec/dispatch", + "security+uniform%2c+casual": "/datum/gear/uniform/sec/casual", + "shorts%2c+red": "/datum/gear/uniform/shorts/red", + "shorts%2c+green": "/datum/gear/uniform/shorts/green", + "shorts%2c+blue": "/datum/gear/uniform/shorts/blue", + "shorts%2c+black": "/datum/gear/uniform/shorts/black", + "shorts%2c+grey": "/datum/gear/uniform/shorts/grey", + "jeans%2c+classic": "/datum/gear/uniform/pants/jeans", + "jeans%2c+mustang": "/datum/gear/uniform/pants/mjeans", + "jeans%2c+black": "/datum/gear/uniform/pants/bljeans", + "jeans%2c+Young+Folks": "/datum/gear/uniform/pants/yfjeans", + "pants%2c+white": "/datum/gear/uniform/pants/whitepants", + "pants%2c+red": "/datum/gear/uniform/pants/redpants", + "pants%2c+black": "/datum/gear/uniform/pants/blackpants", + "pants%2c+tan": "/datum/gear/uniform/pants/tanpants", + "pants%2c+blue": "/datum/gear/uniform/pants/bluepants", + "trackpants": "/datum/gear/uniform/pants/trackpants", + "pants%2c+khaki": "/datum/gear/uniform/pants/khakipants", + "pants%2c+camo": "/datum/gear/uniform/pants/caopants" + } +} diff --git a/tools/loadout_converter/loadout_converter.py b/tools/loadout_converter/loadout_converter.py new file mode 100644 index 00000000000..816b33c085f --- /dev/null +++ b/tools/loadout_converter/loadout_converter.py @@ -0,0 +1,81 @@ +# Converts all existing loadout `gear` listings in the `characters` table from their display_names to their typepaths. +# To use, run `python loadout_converter.py {address} {username} {password} {database}` in the console, with the {} arguments being your SQL database information. + +# Note: This must ONLY be run once, and ONLY if your loadout records are using the old system. + +import mysql.connector, argparse, json, time + +parser = argparse.ArgumentParser() +parser.add_argument("address", help="SQL server address (Use 127.0.0.1 for the current computer)") +parser.add_argument("username", help="SQL login username") +parser.add_argument("password", help="SQL login password") +parser.add_argument("database", help="Database name (Default: paradise_gamedb)") + +args = parser.parse_args() +db = mysql.connector.connect(host=args.address, user=args.username, password=args.password, database=args.database) +cursor = db.cursor() + +startwatch = time.time() + +try: + with open('loadout_converter.json') as json_file: + file_json = json.load(json_file) + # Format for both replacement variables is (Key: `display_name`, Value: typepath) + standard_replacements = file_json["standard"] + special_replacements = file_json["special"] +except FileNotFoundError: + print("Could not find the conversion file. Please make sure you're running the script from tools/loadout_converter/, not the repo root!") + +cursor.execute("SELECT id, gear FROM characters WHERE gear != \"\";") +temp = cursor.fetchall() + +# Convert the rows into a dictionary. (Key: `id`, Value: `gear`) +print("----------") +raw_loadouts = {} +converted_loadouts = {} +for i in temp: + raw_loadouts[i[0]] = i[1] +print("Cached gear listings.") + +# Replace all `display_name`s in the list with their typepaths. +print("Converting gear listings...") +for user_id in raw_loadouts: + + loadout_entry = raw_loadouts[user_id] + # First split on & + loadout_split = [] + if "&" in loadout_entry: + loadout_split = loadout_entry.split("&") + else: + loadout_split.append(loadout_entry) + + # Now lets cleanup our entries + for i in range(len(loadout_split)): + if "=" in loadout_split[i]: + loadout_split[i] = loadout_split[i].replace("=", "") + + new_loadout = [] + + # Now we can get down to business + for loadout_item in loadout_split: + if loadout_item in standard_replacements: + new_loadout.append(standard_replacements[loadout_item]) + + if loadout_item in special_replacements: + new_loadout.append(special_replacements[loadout_item]) + + # Convert to JSON formatting. + converted_loadouts[user_id] = json.dumps(new_loadout) + +print("Converted {} gear listings.".format(len(raw_loadouts))) + +# Update the database. +print("Updating database entries...") +for id in converted_loadouts: + user_loadout = converted_loadouts[id] + stmt = "UPDATE characters SET gear = %s WHERE id = %s;" + cursor.execute(stmt, (user_loadout, id)) +db.commit() + +stopwatch = time.time() +print("Database updated in {} seconds!".format(round(stopwatch - startwatch))) diff --git a/tools/mapmerge2/requirements.txt b/tools/mapmerge2/requirements.txt index f46bdc31d5f..7687c0746ed 100644 --- a/tools/mapmerge2/requirements.txt +++ b/tools/mapmerge2/requirements.txt @@ -1,3 +1,3 @@ pygit2==1.0.1 bidict==0.13.1 -Pillow==8.2.0 +Pillow==8.3.2 diff --git a/tools/pai_savefile_converter/pai_savefile_converter.py b/tools/pai_savefile_converter/pai_savefile_converter.py new file mode 100644 index 00000000000..fe053763a32 --- /dev/null +++ b/tools/pai_savefile_converter/pai_savefile_converter.py @@ -0,0 +1,132 @@ +# AffectedArc07 2021-10-04 +import struct, os, mysql.connector, argparse, html +from datetime import datetime + +TYPE_NULL = 0x0 +TYPE_STRING = 0x1 +TYPE_NUMBER = 0x4 + +KEY_XOR_KEY = 0x53 +DATA_XOR_KEY = 0x3A + +KEY_LEN_OFFSET = 8 +KEY_OFFSET = 9 + +# Might be shitcode but mehhhhhhhhhhh +class Decoder: + def __init__(self, data, key, jump=9): + self.generator = self.decode_data(data, key, jump) + + def read_bytes(self, num): + return [next(self.generator) for _ in range(num)] + + def read_all_bytes(self): + result = [] + for val in self.generator: + result.append(val) + return result + + def read_number(self): + return struct.unpack("