diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 65d388e70df..88eec1aece6 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -10,7 +10,7 @@ on: jobs: run_linters: name: Run Linters - runs-on: ubuntu-18.04 + runs-on: ubuntu-20.04 steps: - uses: actions/checkout@v2 - name: Setup Cache @@ -37,7 +37,7 @@ jobs: compile_all_maps: name: Compile All Maps - runs-on: ubuntu-18.04 + runs-on: ubuntu-20.04 steps: - uses: actions/checkout@v2 - name: Setup Cache @@ -54,7 +54,7 @@ jobs: unit_tests_and_sql: name: Unit Tests + SQL Validation - runs-on: ubuntu-18.04 + runs-on: ubuntu-20.04 services: mariadb: image: mariadb:latest @@ -80,6 +80,7 @@ jobs: sudo dpkg --add-architecture i386 sudo apt update || true sudo apt install libssl1.1:i386 + ldd librust_g.so - name: Compile & Run Unit Tests run: | tools/ci/install_byond.sh @@ -87,3 +88,13 @@ jobs: tools/ci/dm.sh -DCIBUILDING paradise.dme tools/ci/run_server.sh + windows_dll_tests: + name: Windows RUSTG Validation + runs-on: windows-2016 + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-python@v2 + with: + python-version: '3.8.2' # Script was made for 3.8.2 + architecture: 'x86' # This MUST be x86 + - run: python tools/ci/validate_rustg_windows.py diff --git a/.github/workflows/render_nanomaps.yml b/.github/workflows/render_nanomaps.yml index 32bde6d350a..403bc8dc77d 100644 --- a/.github/workflows/render_nanomaps.yml +++ b/.github/workflows/render_nanomaps.yml @@ -5,10 +5,9 @@ # -aa name: 'Render Nanomaps' on: - push: - branches: master - paths: - - '_maps/map_files/**' + schedule: + - cron: "0 0 * * *" + workflow_dispatch: jobs: generate_maps: @@ -17,8 +16,13 @@ jobs: steps: - name: 'Update Branch' uses: actions/checkout@v2 - with: - fetch-depth: 1 + + - name: Branch + run: | + git fetch origin + git branch -f nanomap-render + git checkout nanomap-render + git reset --hard origin/master - name: 'Generate Maps' run: './tools/github-actions/nanomap-renderer-invoker.sh' @@ -29,7 +33,15 @@ jobs: git config --local user.name "NanoMap Generation" git pull origin master git commit -m "NanoMap Auto-Update (`date`)" -a || true - - name: 'Push Maps' - uses: ad-m/github-push-action@master + git push -f -u origin nanomap-render + + - name: Create Pull Request + uses: repo-sync/pull-request@v2 with: + source_branch: "nanomap-render" + destination_branch: "master" + pr_title: "Automatic NanoMap Update" + pr_body: "This pull request updates the server NanoMaps. Please review the diff images before merging." + pr_label: "NanoMaps" + pr_allow_empty: false github_token: ${{ secrets.GITHUB_TOKEN }} diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 00000000000..5547f1b61f6 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,8 @@ +{ + "workbench.editorAssociations": [ + { + "filenamePattern": "*.dmi", + "viewType": "imagePreview.previewEditor" + } + ] +} diff --git a/SQL/paradise_schema.sql b/SQL/paradise_schema.sql index dab229a8051..8917d28d6bb 100644 --- a/SQL/paradise_schema.sql +++ b/SQL/paradise_schema.sql @@ -159,7 +159,7 @@ DROP TABLE IF EXISTS `admin`; CREATE TABLE `admin` ( `id` int(11) NOT NULL AUTO_INCREMENT, `ckey` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL, - `rank` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'Administrator', + `admin_rank` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'Administrator', `level` int(2) NOT NULL DEFAULT '0', `flags` int(16) NOT NULL DEFAULT '0', PRIMARY KEY (`id`), @@ -268,7 +268,7 @@ CREATE TABLE `player` ( `toggles` int(11) DEFAULT NULL, `toggles_2` int(11) DEFAULT '0', `sound` mediumint(8) DEFAULT '31', - `volume` smallint(4) DEFAULT '100', + `volume_mixer` longtext COLLATE utf8mb4_unicode_ci DEFAULT NULL, `lastchangelog` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '0', `exp` longtext COLLATE utf8mb4_unicode_ci DEFAULT NULL, `clientfps` smallint(4) DEFAULT '0', diff --git a/SQL/paradise_schema_prefixed.sql b/SQL/paradise_schema_prefixed.sql index a58d6250f65..b3c8f1f7643 100644 --- a/SQL/paradise_schema_prefixed.sql +++ b/SQL/paradise_schema_prefixed.sql @@ -158,7 +158,7 @@ DROP TABLE IF EXISTS `SS13_admin`; CREATE TABLE `SS13_admin` ( `id` int(11) NOT NULL AUTO_INCREMENT, `ckey` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL, - `rank` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'Administrator', + `admin_rank` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'Administrator', `level` int(2) NOT NULL DEFAULT '0', `flags` int(16) NOT NULL DEFAULT '0', PRIMARY KEY (`id`), @@ -267,7 +267,7 @@ CREATE TABLE `SS13_player` ( `toggles` int(11) DEFAULT NULL, `toggles_2` int(11) DEFAULT '0', `sound` mediumint(8) DEFAULT '31', - `volume` smallint(4) DEFAULT '100', + `volume_mixer` longtext COLLATE utf8mb4_unicode_ci DEFAULT NULL, `lastchangelog` varchar(32) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '0', `exp` longtext COLLATE utf8mb4_unicode_ci DEFAULT NULL, `clientfps` smallint(4) DEFAULT '0', diff --git a/SQL/updates/20-21.sql b/SQL/updates/20-21.sql new file mode 100644 index 00000000000..5882b786ff6 --- /dev/null +++ b/SQL/updates/20-21.sql @@ -0,0 +1,8 @@ +# Updating DB from 20-21 +# Replaces volume (number) column by volume_mixer (text) ~dearmochi + +# Add column to player +ALTER TABLE `player` ADD COLUMN `volume_mixer` longtext COLLATE utf8mb4_unicode_ci DEFAULT NULL AFTER `volume`; + +# Remove column from player +ALTER TABLE `player` DROP COLUMN `volume`; diff --git a/SQL/updates/21-22.sql b/SQL/updates/21-22.sql new file mode 100644 index 00000000000..24ef6fd9f25 --- /dev/null +++ b/SQL/updates/21-22.sql @@ -0,0 +1,4 @@ +# Updating DB from 21-22, -AffectedArc07 +# Changes `rank` to `admin_rank` to remove use of reserved keyword + +ALTER TABLE `admin` CHANGE COLUMN `rank` `admin_rank` VARCHAR(32) NOT NULL DEFAULT 'Administrator' COLLATE 'utf8mb4_unicode_ci' AFTER `ckey`; diff --git a/_maps/map_files/Delta/delta.dmm b/_maps/map_files/Delta/delta.dmm index ab1bcbb423d..4be798f308c 100644 --- a/_maps/map_files/Delta/delta.dmm +++ b/_maps/map_files/Delta/delta.dmm @@ -81119,10 +81119,10 @@ /turf/simulated/wall/r_wall, /area/medical/chemistry) "cXf" = ( -/obj/machinery/status_display{ +/obj/structure/closet/secure_closet/reagents, +/obj/structure/disaster_counter/chemistry{ pixel_x = -32 }, -/obj/structure/closet/secure_closet/reagents, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "whitegreen"; @@ -95264,6 +95264,9 @@ network = list("Research Outpost") }, /obj/effect/decal/warning_stripes/yellow/hollow, +/obj/structure/disaster_counter/toxins{ + pixel_y = 32 + }, /turf/simulated/floor/plasteel, /area/toxins/mixing) "dxe" = ( diff --git a/_maps/map_files/MetaStation/MetaStation.dmm b/_maps/map_files/MetaStation/MetaStation.dmm index a4730f26f86..0eed170f63f 100644 --- a/_maps/map_files/MetaStation/MetaStation.dmm +++ b/_maps/map_files/MetaStation/MetaStation.dmm @@ -4095,7 +4095,7 @@ /obj/effect/decal/warning_stripes/yellow/hollow, /obj/machinery/suit_storage_unit/engine/secure, /turf/simulated/floor/plasteel, -/area/engine/engineering) +/area/engine/equipmentstorage) "ajT" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/cable/yellow{ @@ -4603,7 +4603,7 @@ /obj/effect/decal/warning_stripes/yellow/hollow, /obj/machinery/suit_storage_unit/engine/secure, /turf/simulated/floor/plasteel, -/area/engine/engineering) +/area/engine/equipmentstorage) "akQ" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -5164,15 +5164,13 @@ /turf/simulated/floor/plating, /area/security/main) "alQ" = ( -/obj/effect/decal/warning_stripes/yellow/hollow, -/obj/machinery/door/poddoor{ - density = 0; - icon_state = "open"; - id_tag = "Singularity"; - name = "Containment Blast Doors"; - opacity = 0 +/obj/structure/sign/securearea{ + pixel_y = 32 }, -/turf/simulated/floor/plasteel, +/obj/machinery/light_switch{ + pixel_x = -9 + }, +/turf/simulated/wall/r_wall, /area/engine/engineering) "alR" = ( /obj/machinery/door/firedoor, @@ -7246,11 +7244,6 @@ icon_state = "redcorner" }, /area/security/brig) -"aqe" = ( -/obj/effect/decal/warning_stripes/west, -/obj/machinery/suit_storage_unit/engine/secure, -/turf/simulated/floor/plasteel, -/area/engine/engineering) "aqh" = ( /obj/machinery/gravity_generator/main/station, /turf/simulated/floor/plasteel{ @@ -7356,16 +7349,6 @@ }, /turf/simulated/floor/plating, /area/maintenance/fore) -"aqv" = ( -/obj/machinery/alarm{ - dir = 4; - icon_state = "alarm0"; - pixel_x = -22 - }, -/obj/effect/decal/warning_stripes/southwest, -/obj/machinery/suit_storage_unit/engine/secure, -/turf/simulated/floor/plasteel, -/area/engine/engineering) "aqw" = ( /obj/structure/closet/crate, /obj/item/bodybag, @@ -8745,26 +8728,6 @@ icon_state = "showroomfloor" }, /area/security/warden) -"asX" = ( -/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/machinery/cell_charger, -/turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "vault" - }, -/area/engine/mechanic_workshop) "asZ" = ( /turf/simulated/floor/engine, /area/security/podbay) @@ -12290,10 +12253,6 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/fore) -"azM" = ( -/obj/machinery/space_heater, -/turf/simulated/floor/plating, -/area/engine/engineering) "azN" = ( /obj/structure/disposalpipe/segment{ dir = 1; @@ -13417,10 +13376,10 @@ /turf/simulated/floor/plating, /area/maintenance/starboard) "aCd" = ( +/obj/effect/decal/warning_stripes/northwest, /obj/structure/sign/securearea{ pixel_y = 32 }, -/obj/effect/decal/warning_stripes/northwest, /turf/simulated/floor/plasteel, /area/engine/engineering) "aCe" = ( @@ -13435,33 +13394,20 @@ }, /area/crew_quarters/sleep) "aCf" = ( -/obj/machinery/light_switch{ - pixel_x = 23 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/shower{ - dir = 8; - icon_state = "shower"; - name = "emergency shower"; - tag = "icon-shower (WEST)" - }, +/obj/effect/decal/warning_stripes/northeast, /obj/structure/sign/securearea{ pixel_y = 32 }, -/obj/effect/decal/warning_stripes/northeast, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, /turf/simulated/floor/plasteel, /area/engine/engineering) "aCg" = ( /turf/simulated/wall/r_wall, /area/engine/engineering) "aCh" = ( -/obj/structure/closet/emcloset, -/turf/simulated/floor/plating, +/obj/machinery/atmospherics/unary/vent_pump/on, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, /area/engine/engineering) "aCi" = ( /obj/machinery/newscaster{ @@ -13648,13 +13594,16 @@ }, /area/security/nuke_storage) "aCD" = ( -/obj/structure/grille, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" +/obj/machinery/atmospherics/unary/portables_connector{ + layer = 2 + }, +/obj/machinery/light{ + dir = 1; + on = 1 + }, +/turf/simulated/floor/plasteel{ + icon_state = "dark" }, -/turf/simulated/floor/plating/airless, /area/engine/engineering) "aCE" = ( /obj/machinery/alarm{ @@ -13823,7 +13772,7 @@ icon_state = "0-8" }, /turf/simulated/floor/plating, -/area/engine/engineering) +/area/engine/equipmentstorage) "aCN" = ( /obj/structure/disposalpipe/segment{ dir = 8; @@ -13992,14 +13941,9 @@ /area/engine/gravitygenerator) "aDc" = ( /obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/effect/decal/warning_stripes/north, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5; - level = 1 - }, /turf/simulated/floor/plasteel, /area/engine/engineering) "aDd" = ( @@ -14019,13 +13963,12 @@ /turf/simulated/floor/plating, /area/maintenance/starboard) "aDf" = ( -/obj/structure/grille, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 2 + }, +/turf/simulated/floor/plasteel{ + icon_state = "dark" }, -/turf/simulated/floor/plating/airless, /area/engine/engineering) "aDg" = ( /obj/structure/table, @@ -14034,75 +13977,19 @@ icon_state = "showroomfloor" }, /area/security/warden) -"aDh" = ( -/obj/structure/grille, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/plating/airless, -/area/engine/engineering) "aDi" = ( -/turf/simulated/floor/plating/airless, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/machinery/camera{ + c_tag = "Engineering Supermatter Fore"; + dir = 8; + network = list("SS13","engine") + }, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, /area/engine/engineering) -"aDj" = ( -/obj/structure/cable, -/obj/machinery/power/emitter{ - anchored = 1; - state = 2 - }, -/turf/simulated/floor/plating/airless, -/area/engine/engineering) -"aDk" = ( -/obj/structure/grille, -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/plating/airless, -/area/maintenance/starboard) -"aDl" = ( -/obj/structure/grille, -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating/airless, -/area/engine/engineering) -"aDm" = ( -/obj/structure/grille, -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/plating/airless, -/area/engine/engineering) -"aDn" = ( -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'HIGH VOLTAGE'"; - icon_state = "shock"; - name = "HIGH VOLTAGE" - }, -/turf/simulated/wall/r_wall, -/area/engine/engineering) -"aDo" = ( -/obj/structure/grille, -/turf/simulated/floor/plating/airless, -/area/space/nearstation) "aDp" = ( /obj/item/stack/cable_coil, /turf/simulated/floor/plating/airless, @@ -14148,16 +14035,13 @@ name = "\improper Mining Office" }) "aDw" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ +/obj/effect/decal/warning_stripes/east, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 }, -/obj/effect/decal/warning_stripes/east, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel, /area/engine/engineering) "aDx" = ( @@ -14239,19 +14123,6 @@ /area/quartermaster/sorting{ name = "\improper Warehouse" }) -"aDC" = ( -/obj/machinery/camera/emp_proof{ - c_tag = "Fore Arm - Far"; - dir = 8; - network = list("Singulo") - }, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/plating/airless, -/area/engine/engineering) "aDD" = ( /obj/structure/cable/yellow{ d1 = 1; @@ -14331,8 +14202,24 @@ /turf/simulated/floor/plating, /area/bridge) "aDL" = ( -/obj/effect/spawner/window/reinforced, -/turf/simulated/floor/plating, +/obj/machinery/atmospherics/pipe/simple/visible/cyan{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/effect/decal/warning_stripes/south, +/turf/simulated/floor/engine, /area/engine/engineering) "aDM" = ( /obj/machinery/flasher{ @@ -14556,14 +14443,14 @@ /turf/simulated/floor/carpet, /area/security/detectives_office) "aEd" = ( -/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 = 9 }, /turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "vault" + icon_state = "dark" }, /area/engine/engineering) "aEe" = ( @@ -14607,14 +14494,6 @@ }, /turf/simulated/floor/plating, /area/bridge) -"aEi" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/plating/airless, -/area/engine/engineering) "aEj" = ( /obj/machinery/atmospherics/pipe/simple/hidden/universal, /turf/simulated/floor/plating, @@ -14647,17 +14526,20 @@ }, /area/crew_quarters/sleep) "aEn" = ( -/obj/machinery/door/airlock/external{ - name = "Engineering External Access"; - req_access = null; - req_access_txt = "10;13" +/obj/machinery/door/airlock/engineering/glass{ + name = "Supermatter Engine Room"; + req_access_txt = "10"; + req_one_access_txt = "0" }, -/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" }, -/turf/simulated/floor/plating, /area/engine/engineering) "aEo" = ( /obj/structure/disposalpipe/segment{ @@ -14833,7 +14715,7 @@ }, /obj/effect/decal/warning_stripes/yellow/hollow, /turf/simulated/floor/plasteel, -/area/maintenance/starboard) +/area/engine/engineering) "aEy" = ( /obj/machinery/door/window/southright{ dir = 4; @@ -14845,17 +14727,17 @@ /turf/simulated/floor/plasteel, /area/engine/engineering) "aEz" = ( -/obj/structure/table, -/obj/item/stack/packageWrap, -/obj/item/wrench, /obj/machinery/light{ dir = 8 }, -/obj/item/hand_labeler, /obj/structure/window/reinforced{ dir = 1 }, /obj/effect/decal/warning_stripes/yellow, +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, /turf/simulated/floor/plasteel, /area/engine/engineering) "aEA" = ( @@ -14913,14 +14795,6 @@ /obj/effect/decal/warning_stripes/west, /turf/simulated/floor/plasteel, /area/engine/engineering) -"aEF" = ( -/obj/item/multitool, -/turf/simulated/floor/plating/airless, -/area/engine/engineering) -"aEG" = ( -/obj/item/radio/off, -/turf/simulated/floor/plating/airless, -/area/engine/engineering) "aEH" = ( /obj/structure/closet/crate, /obj/item/stack/ore/glass, @@ -15059,14 +14933,6 @@ icon_state = "dark" }, /area/security/brig) -"aES" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/plating/airless, -/area/engine/engineering) "aET" = ( /turf/simulated/floor/plasteel{ icon_state = "floorgrime" @@ -15095,15 +14961,6 @@ icon_state = "showroomfloor" }, /area/security/warden) -"aEW" = ( -/obj/structure/grille, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/plating/airless, -/area/engine/engineering) "aEX" = ( /obj/structure/closet/crate{ name = "Gold Crate" @@ -15138,18 +14995,6 @@ luminosity = 2 }, /area/security/nuke_storage) -"aFa" = ( -/obj/structure/grille, -/obj/machinery/light{ - dir = 1 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating/airless, -/area/engine/engineering) "aFb" = ( /obj/item/coin/silver{ pixel_x = 7; @@ -15257,29 +15102,11 @@ icon_state = "floorgrime" }, /area/security/brig) -"aFk" = ( -/obj/structure/grille, -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/plating/airless, -/area/engine/engineering) "aFl" = ( /turf/simulated/floor/plasteel{ icon_state = "red" }, /area/security/brig) -"aFm" = ( -/obj/structure/grille, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plating/airless, -/area/engine/engineering) "aFn" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 4 @@ -15583,14 +15410,6 @@ /obj/effect/decal/warning_stripes/yellow, /turf/simulated/floor/plasteel, /area/engine/engineering) -"aFN" = ( -/obj/machinery/disposal, -/obj/structure/disposalpipe/trunk{ - dir = 4 - }, -/obj/effect/decal/warning_stripes/yellow, -/turf/simulated/floor/plasteel, -/area/engine/engineering) "aFO" = ( /obj/machinery/door/poddoor/shutters{ dir = 8; @@ -15644,10 +15463,6 @@ "aFR" = ( /turf/simulated/wall, /area/engine/engineering) -"aFS" = ( -/obj/effect/decal/warning_stripes/north, -/turf/simulated/floor/plating/airless, -/area/engine/engineering) "aFT" = ( /obj/effect/decal/warning_stripes/south, /turf/simulated/floor/plating, @@ -15674,32 +15489,20 @@ }, /area/security/brig) "aFY" = ( -/obj/structure/reagent_dispensers/watertank, -/obj/effect/decal/warning_stripes/west, -/turf/simulated/floor/plating, +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 2 + }, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, /area/engine/engineering) "aFZ" = ( -/obj/machinery/camera/emp_proof{ - c_tag = "Fore Arm - Near"; - dir = 4; - network = list("Singulo") +/obj/structure/closet/firecloset, +/turf/simulated/floor/plasteel{ + icon_state = "dark" }, -/turf/space, -/area/space/nearstation) +/area/engine/engineering) "aGb" = ( -/obj/structure/rack{ - dir = 8; - layer = 2.9 - }, -/obj/item/clothing/mask/gas{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/clothing/mask/gas, -/obj/item/clothing/mask/gas{ - pixel_x = -3; - pixel_y = -3 - }, /obj/item/radio/intercom{ frequency = 1459; name = "Station Intercom (General)"; @@ -15710,7 +15513,7 @@ dir = 2; network = list("SS13") }, -/obj/effect/decal/warning_stripes/yellow, +/obj/effect/decal/warning_stripes/northwest, /turf/simulated/floor/plasteel, /area/engine/engineering) "aGc" = ( @@ -15722,24 +15525,6 @@ /obj/effect/decal/warning_stripes/northwest, /turf/simulated/floor/plasteel, /area/engine/engineering) -"aGd" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/decal/warning_stripes/east, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plasteel, -/area/engine/engineering) -"aGe" = ( -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'RADIOACTIVE AREA'"; - icon_state = "radiation"; - name = "RADIOACTIVE AREA"; - pixel_x = 32 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/decal/warning_stripes/east, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plasteel, -/area/engine/engineering) "aGf" = ( /obj/machinery/hologram/holopad, /turf/simulated/floor/plasteel, @@ -16003,17 +15788,9 @@ }, /area/security/brig) "aGC" = ( -/obj/structure/disposalpipe/sortjunction{ - sortType = 4 - }, -/obj/effect/landmark/start{ - name = "Station Engineer" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plasteel, /area/engine/engineering) "aGD" = ( @@ -16163,14 +15940,6 @@ }, /turf/simulated/floor/plasteel, /area/crew_quarters/sleep) -"aGT" = ( -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/plating/airless, -/area/engine/engineering) "aGU" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -16280,14 +16049,7 @@ }, /area/security/processing) "aHi" = ( -/obj/machinery/door/poddoor{ - density = 0; - icon_state = "open"; - id_tag = "Singularity"; - name = "Containment Blast Doors"; - opacity = 0 - }, -/obj/effect/decal/warning_stripes/west, +/obj/effect/spawner/window/reinforced/plasma, /turf/simulated/floor/plating, /area/engine/engineering) "aHj" = ( @@ -16476,7 +16238,7 @@ }, /obj/effect/decal/warning_stripes/yellow/hollow, /turf/simulated/floor/plasteel, -/area/engine/engineering) +/area/engine/equipmentstorage) "aHI" = ( /turf/simulated/floor/plasteel{ dir = 1; @@ -16794,10 +16556,6 @@ /area/crew_quarters/locker/locker_toilet{ name = "\improper Restrooms" }) -"aIf" = ( -/obj/structure/lattice, -/turf/space, -/area/engine/engineering) "aIg" = ( /obj/structure/reagent_dispensers/watertank, /obj/effect/decal/cleanable/fungus, @@ -16813,12 +16571,17 @@ name = "\improper Restrooms" }) "aIi" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/effect/decal/warning_stripes/south, /turf/simulated/floor/plasteel, /area/engine/engineering) "aIk" = ( @@ -16903,12 +16666,22 @@ /turf/simulated/floor/mineral/tranquillite, /area/crew_quarters/sleep) "aIu" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/cable/yellow{ - d1 = 2; - d2 = 8; - icon_state = "2-8" + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/door/airlock/engineering, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" }, -/obj/machinery/atmospherics/unary/vent_scrubber, /turf/simulated/floor/plasteel, /area/engine/engineering) "aIv" = ( @@ -16918,15 +16691,12 @@ icon_state = "2-4" }, /obj/effect/decal/warning_stripes/northeast, -/obj/machinery/atmospherics/unary/vent_pump, +/obj/machinery/atmospherics/unary/vent_pump/on, /turf/simulated/floor/plasteel, -/area/engine/engineering) +/area/engine/equipmentstorage) "aIw" = ( -/obj/effect/landmark/start{ - name = "Station Engineer" - }, /turf/simulated/floor/plasteel, -/area/engine/engineering) +/area/engine/equipmentstorage) "aIy" = ( /obj/structure/sign/securearea{ desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; @@ -16945,7 +16715,7 @@ }, /obj/effect/decal/warning_stripes/yellow/hollow, /turf/simulated/floor/plasteel, -/area/engine/engineering) +/area/engine/equipmentstorage) "aIA" = ( /obj/effect/decal/warning_stripes/west, /turf/simulated/floor/plasteel, @@ -16959,7 +16729,7 @@ d2 = 8; icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, /turf/simulated/floor/plasteel, /area/engine/engineering) "aIC" = ( @@ -16998,7 +16768,7 @@ dir = 6 }, /turf/simulated/floor/plasteel, -/area/engine/engineering) +/area/engine/equipmentstorage) "aIE" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -17016,11 +16786,17 @@ /area/engine/engineering) "aIF" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 + dir = 9 }, -/obj/effect/decal/warning_stripes/south, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 +/obj/effect/decal/warning_stripes/east, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4; + initialize_directions = 11 + }, +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" }, /turf/simulated/floor/plasteel, /area/engine/engineering) @@ -17147,7 +16923,7 @@ }, /obj/effect/decal/warning_stripes/yellow/hollow, /turf/simulated/floor/plasteel, -/area/engine/engineering) +/area/engine/equipmentstorage) "aIT" = ( /obj/machinery/light/small, /obj/structure/table/wood, @@ -17174,18 +16950,7 @@ }, /obj/effect/decal/warning_stripes/yellow/hollow, /turf/simulated/floor/plasteel, -/area/engine/engineering) -"aIW" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/decal/warning_stripes/east, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plasteel, -/area/engine/engineering) +/area/engine/equipmentstorage) "aIX" = ( /obj/effect/spawner/window/reinforced, /obj/structure/cable/yellow{ @@ -17239,21 +17004,8 @@ /turf/simulated/floor/plasteel, /area/hallway/primary/fore) "aJb" = ( -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plasteel, +/obj/effect/spawner/window/reinforced/plasma, +/turf/simulated/floor/engine, /area/engine/engineering) "aJc" = ( /turf/simulated/floor/plasteel, @@ -17392,23 +17144,6 @@ }, /turf/simulated/floor/plasteel, /area/hallway/primary/fore) -"aJo" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/item/clothing/glasses/meson, -/obj/machinery/door/poddoor{ - density = 0; - icon_state = "open"; - id_tag = "Singularity"; - name = "Containment Blast Doors"; - opacity = 0 - }, -/obj/effect/decal/warning_stripes/west, -/turf/simulated/floor/plating, -/area/engine/engineering) "aJp" = ( /obj/structure/chair/office/dark{ dir = 8 @@ -17469,13 +17204,21 @@ }, /area/security/detectives_office) "aJt" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" +/obj/machinery/atmospherics/pipe/manifold/visible/green{ + dir = 1; + tag = "icon-manifold-g (NORTH)" }, -/turf/simulated/floor/plating/airless, -/area/space/nearstation) +/obj/machinery/light{ + dir = 1; + on = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/effect/decal/warning_stripes/north, +/obj/machinery/meter, +/turf/simulated/floor/engine, +/area/engine/engineering) "aJu" = ( /obj/machinery/door/airlock/maintenance{ name = "Law Office Maintenance"; @@ -17509,14 +17252,6 @@ /area/crew_quarters/locker/locker_toilet{ name = "\improper Restrooms" }) -"aJx" = ( -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/plating/airless, -/area/space/nearstation) "aJy" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/security/glass{ @@ -17654,20 +17389,14 @@ }, /obj/effect/decal/warning_stripes/yellow/hollow, /turf/simulated/floor/plasteel, -/area/engine/engineering) +/area/engine/equipmentstorage) "aJJ" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" +/obj/effect/spawner/window/reinforced/plasma, +/obj/machinery/atmospherics/pipe/simple/visible/red{ + dir = 2 }, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/plating/airless, -/area/space/nearstation) +/turf/simulated/floor/engine, +/area/engine/engineering) "aJK" = ( /obj/machinery/door/airlock/bananium/glass, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -17688,7 +17417,7 @@ dir = 4 }, /turf/simulated/floor/plasteel, -/area/engine/engineering) +/area/engine/equipmentstorage) "aJN" = ( /obj/effect/spawner/window/reinforced, /obj/structure/cable/yellow, @@ -17718,7 +17447,7 @@ dir = 9 }, /turf/simulated/floor/plasteel, -/area/engine/engineering) +/area/engine/equipmentstorage) "aJR" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/engineering/glass{ @@ -17738,7 +17467,7 @@ dir = 4 }, /turf/simulated/floor/plasteel, -/area/engine/engineering) +/area/engine/equipmentstorage) "aJS" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable/yellow{ @@ -17775,34 +17504,30 @@ }, /obj/effect/decal/warning_stripes/yellow/hollow, /turf/simulated/floor/plasteel, -/area/engine/engineering) +/area/engine/equipmentstorage) "aJU" = ( -/obj/structure/closet/secure_closet/engineering_electrical, -/obj/effect/decal/warning_stripes/yellow, +/obj/effect/decal/warning_stripes/east, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5; + level = 1 + }, /turf/simulated/floor/plasteel, /area/engine/engineering) "aJV" = ( -/obj/structure/rack{ - dir = 8; - layer = 2.9 +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 }, -/obj/item/storage/belt/utility, -/obj/item/wrench, -/obj/item/weldingtool, -/obj/item/clothing/head/welding{ - pixel_x = -3; - pixel_y = 5 - }, -/obj/effect/decal/warning_stripes/yellow, -/turf/simulated/floor/plasteel, +/obj/effect/decal/warning_stripes/west, +/turf/simulated/floor/engine, /area/engine/engineering) "aJW" = ( -/obj/machinery/field/generator{ - anchored = 1; - state = 2 +/obj/machinery/atmospherics/pipe/simple/visible/cyan{ + dir = 10; + initialize_directions = 10 }, -/turf/simulated/floor/plating/airless, -/area/space/nearstation) +/obj/effect/decal/warning_stripes/southwestcorner, +/turf/simulated/floor/engine, +/area/engine/engineering) "aJX" = ( /turf/simulated/floor/wood, /area/lawoffice) @@ -17822,18 +17547,16 @@ /turf/simulated/floor/plating, /area/bridge) "aJZ" = ( -/obj/structure/closet/radiation, -/obj/effect/decal/warning_stripes/yellow, -/turf/simulated/floor/plasteel, -/area/engine/engineering) -"aKa" = ( -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" +/obj/machinery/door/airlock/engineering/glass{ + name = "Supermatter Engine Room"; + req_access_txt = "10"; + req_one_access_txt = "0" }, -/turf/simulated/floor/plating/airless, -/area/space/nearstation) +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/engine, +/area/engine/engineering) "aKb" = ( /obj/effect/spawner/window/reinforced, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -17960,14 +17683,6 @@ }, /turf/simulated/floor/plating, /area/hallway/primary/fore) -"aKp" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plating/airless, -/area/engine/engineering) "aKq" = ( /obj/effect/spawner/window/reinforced, /obj/structure/cable/yellow{ @@ -18342,6 +18057,13 @@ icon_state = "grimy" }, /area/security/detectives_office) +"aKT" = ( +/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ + dir = 4 + }, +/obj/structure/lattice, +/turf/space, +/area/space/nearstation) "aKU" = ( /obj/structure/cable/yellow{ d1 = 4; @@ -18541,21 +18263,6 @@ /obj/structure/closet/secure_closet/clown, /turf/simulated/floor/wood, /area/crew_quarters/sleep) -"aLn" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/effect/decal/warning_stripes/southeast, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/turf/simulated/floor/plasteel, -/area/engine/engineering) "aLo" = ( /obj/machinery/door/poddoor/shutters{ dir = 2; @@ -18602,7 +18309,7 @@ /obj/item/grenade/chem_grenade/metalfoam, /obj/effect/decal/warning_stripes/yellow/hollow, /turf/simulated/floor/plasteel, -/area/engine/engineering) +/area/engine/equipmentstorage) "aLq" = ( /obj/structure/table, /obj/item/stack/rods{ @@ -18612,7 +18319,7 @@ /obj/item/storage/box/lights/mixed, /obj/effect/decal/warning_stripes/yellow/hollow, /turf/simulated/floor/plasteel, -/area/engine/engineering) +/area/engine/equipmentstorage) "aLr" = ( /obj/structure/closet/crate{ name = "solar pack crate" @@ -18635,27 +18342,7 @@ /obj/item/paper/solar, /obj/effect/decal/warning_stripes/yellow/hollow, /turf/simulated/floor/plasteel, -/area/engine/engineering) -"aLs" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/disposalpipe/segment, -/obj/effect/decal/warning_stripes/east, -/turf/simulated/floor/plasteel, -/area/engine/engineering) -"aLt" = ( -/obj/effect/landmark/start{ - name = "Station Engineer" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/turf/simulated/floor/plasteel, -/area/engine/engineering) +/area/engine/equipmentstorage) "aLu" = ( /obj/structure/table, /obj/item/stack/cable_coil{ @@ -18675,7 +18362,7 @@ }, /obj/effect/decal/warning_stripes/yellow/hollow, /turf/simulated/floor/plasteel, -/area/engine/engineering) +/area/engine/equipmentstorage) "aLv" = ( /obj/machinery/door/firedoor, /obj/machinery/door/airlock/security/glass{ @@ -18688,30 +18375,30 @@ }, /area/security/processing) "aLw" = ( -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/decal/warning_stripes/south, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plasteel, +/obj/effect/decal/warning_stripes/north, +/turf/simulated/floor/engine, /area/engine/engineering) "aLx" = ( -/obj/item/wirecutters, -/obj/structure/lattice, -/turf/space, -/area/space/nearstation) +/obj/machinery/power/emitter{ + anchored = 1; + state = 2 + }, +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/yellow{ + d2 = 8; + icon_state = "0-8" + }, +/turf/simulated/floor/plating, +/area/engine/engineering) "aLy" = ( /obj/machinery/computer/guestpass{ pixel_x = 30 @@ -18748,21 +18435,15 @@ /turf/simulated/floor/plasteel, /area/construction) "aLE" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" +/obj/machinery/atmospherics/unary/portables_connector{ + dir = 8 }, -/obj/machinery/door/poddoor{ - density = 0; - icon_state = "open"; - id_tag = "Singularity"; - name = "Containment Blast Doors"; - opacity = 0 +/obj/machinery/portable_atmospherics/canister, +/obj/effect/decal/warning_stripes/yellow/hollow, +/turf/simulated/floor/plasteel{ + icon_state = "dark" }, -/obj/effect/decal/warning_stripes/west, -/turf/simulated/floor/plating, -/area/engine/engineering) +/area/engine/supermatter) "aLF" = ( /obj/structure/closet/toolcloset, /obj/machinery/light_construct{ @@ -18800,23 +18481,20 @@ /turf/simulated/floor/plating, /area/maintenance/fore) "aLN" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" +/obj/machinery/atmospherics/binary/pump{ + dir = 8; + name = "Mix Bypass" }, -/turf/simulated/floor/plating/airless, -/area/space/nearstation) -"aLO" = ( -/obj/machinery/power/grounding_rod{ - anchored = 1 +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 }, /obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" + d1 = 2; + d2 = 8; + icon_state = "2-8" }, -/turf/simulated/floor/plating/airless, +/obj/effect/decal/warning_stripes/south, +/turf/simulated/floor/engine, /area/engine/engineering) "aLP" = ( /obj/structure/disposalpipe/segment, @@ -18844,7 +18522,7 @@ /obj/structure/cable/yellow, /obj/effect/decal/warning_stripes/yellow/hollow, /turf/simulated/floor/plasteel, -/area/engine/engineering) +/area/engine/equipmentstorage) "aLS" = ( /obj/effect/decal/warning_stripes/north, /turf/simulated/floor/plasteel, @@ -18857,26 +18535,11 @@ /turf/simulated/floor/plasteel, /area/quartermaster/storage) "aLU" = ( -/obj/structure/table, -/obj/machinery/light_switch{ - pixel_x = 23 - }, /obj/machinery/light{ dir = 4; icon_state = "tube1" }, -/obj/item/storage/toolbox/mechanical{ - pixel_y = 5 - }, -/obj/item/flashlight{ - pixel_x = 1; - pixel_y = 5 - }, -/obj/item/flashlight{ - pixel_x = 1; - pixel_y = 5 - }, -/obj/effect/decal/warning_stripes/yellow, +/obj/effect/decal/warning_stripes/east, /turf/simulated/floor/plasteel, /area/engine/engineering) "aLV" = ( @@ -19271,10 +18934,6 @@ /area/construction/Storage{ name = "Storage Wing" }) -"aMF" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plasteel, -/area/engine/engineering) "aMG" = ( /obj/structure/sign/securearea{ desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; @@ -19307,11 +18966,17 @@ name = "Storage Wing" }) "aMI" = ( -/obj/machinery/power/grounding_rod{ - anchored = 1 +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 2 }, -/turf/simulated/floor/plating/airless, -/area/space/nearstation) +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/effect/decal/warning_stripes/north, +/turf/simulated/floor/engine, +/area/engine/engineering) "aMJ" = ( /obj/machinery/door/window{ dir = 1; @@ -19363,20 +19028,19 @@ /turf/simulated/floor/plating, /area/turret_protected/ai_upload) "aMQ" = ( +/obj/machinery/atmospherics/pipe/simple/visible/cyan{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, /obj/structure/cable{ d1 = 4; d2 = 8; icon_state = "4-8" }, -/obj/structure/rack{ - dir = 8; - layer = 2.9 - }, -/obj/item/crowbar, -/obj/item/wirecutters, -/obj/item/stack/cable_coil, -/obj/effect/decal/warning_stripes/yellow, -/turf/simulated/floor/plasteel, +/obj/effect/decal/warning_stripes/south, +/turf/simulated/floor/engine, /area/engine/engineering) "aMR" = ( /obj/machinery/firealarm{ @@ -19421,18 +19085,19 @@ /turf/simulated/floor/plasteel, /area/quartermaster/storage) "aMU" = ( +/obj/machinery/atmospherics/pipe/simple/visible/cyan{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, /obj/structure/cable{ d1 = 2; d2 = 4; icon_state = "2-4" }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/decal/warning_stripes/yellow/hollow, -/turf/simulated/floor/plasteel, +/obj/effect/decal/warning_stripes/southeastcorner, +/turf/simulated/floor/engine, /area/engine/engineering) "aMW" = ( /obj/structure/cable/yellow{ @@ -19462,9 +19127,13 @@ d2 = 8; icon_state = "2-8" }, -/obj/effect/decal/warning_stripes/southeastcorner, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" }, /turf/simulated/floor/plasteel, /area/engine/engineering) @@ -19565,13 +19234,15 @@ /turf/simulated/floor/plasteel, /area/quartermaster/storage) "aNd" = ( -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'RADIOACTIVE AREA'"; - icon_state = "radiation"; - name = "RADIOACTIVE AREA" +/obj/machinery/atmospherics/binary/pump{ + dir = 8; + name = "External Gas to Loop" }, -/turf/simulated/wall/r_wall, -/area/engine/engineering) +/obj/effect/decal/warning_stripes/yellow, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/engine/supermatter) "aNe" = ( /obj/structure/cable/yellow{ d1 = 4; @@ -20046,14 +19717,14 @@ state = 2 }, /turf/simulated/floor/plating, -/area/engine/engineering) +/area/storage/secure) "aNT" = ( /obj/machinery/field/generator{ anchored = 0; state = 2 }, /turf/simulated/floor/plating, -/area/engine/engineering) +/area/storage/secure) "aNU" = ( /obj/machinery/shieldgen, /obj/machinery/light/small{ @@ -20065,11 +19736,11 @@ network = list("SS13") }, /turf/simulated/floor/plating, -/area/engine/engineering) +/area/storage/secure) "aNV" = ( /obj/machinery/shieldgen, /turf/simulated/floor/plating, -/area/engine/engineering) +/area/storage/secure) "aNX" = ( /obj/machinery/camera{ c_tag = "Cargo Bay - Storage Wing Entrance"; @@ -20100,15 +19771,15 @@ /turf/simulated/floor/plasteel, /area/quartermaster/storage) "aOa" = ( -/obj/machinery/power/rad_collector{ - anchored = 1 +/obj/machinery/door/airlock/engineering/glass{ + name = "Supermatter Engine Room"; + req_access_txt = "10"; + req_one_access_txt = "0" }, -/obj/structure/cable{ - d2 = 8; - icon_state = "0-8" +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 2 }, -/obj/effect/decal/warning_stripes/west, -/turf/simulated/floor/plating, +/turf/simulated/floor/engine, /area/engine/engineering) "aOb" = ( /obj/machinery/computer/security{ @@ -20121,21 +19792,13 @@ icon_state = "dark" }, /area/security/brig) -"aOc" = ( -/obj/effect/landmark/start{ - name = "Station Engineer" - }, -/turf/simulated/floor/plating, -/area/engine/engineering) "aOd" = ( /turf/simulated/floor/plating, /area/engine/engineering) "aOe" = ( -/obj/structure/particle_accelerator/particle_emitter/right{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/engine/engineering) +/obj/machinery/atmospherics/pipe/simple/visible/universal, +/turf/simulated/wall/r_wall, +/area/engine/supermatter) "aOf" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 4 @@ -20158,7 +19821,15 @@ name = "Storage Wing" }) "aOg" = ( -/obj/effect/decal/warning_stripes/northeast, +/obj/effect/decal/warning_stripes/east, +/obj/structure/table, +/obj/item/geiger_counter, +/obj/item/geiger_counter, +/obj/item/clothing/suit/radiation, +/obj/item/clothing/head/radiation, +/obj/item/tank/internals/emergency_oxygen/engi, +/obj/item/clothing/gloves/color/black, +/obj/item/clothing/glasses/meson/engine, /turf/simulated/floor/plasteel, /area/engine/engineering) "aOh" = ( @@ -20203,10 +19874,6 @@ icon_state = "dark" }, /area/security/brig) -"aOj" = ( -/obj/item/crowbar, -/turf/space, -/area/space/nearstation) "aOk" = ( /obj/machinery/alarm{ dir = 4; @@ -20222,10 +19889,6 @@ }, /turf/simulated/floor/plating, /area/construction) -"aOm" = ( -/obj/effect/decal/warning_stripes/northwest, -/turf/simulated/floor/plating/airless, -/area/space/nearstation) "aOp" = ( /obj/machinery/door/poddoor{ id_tag = "QMLoaddoor"; @@ -20236,10 +19899,6 @@ }, /turf/simulated/floor/plating, /area/quartermaster/storage) -"aOq" = ( -/obj/effect/decal/warning_stripes/northeast, -/turf/simulated/floor/plating/airless, -/area/space/nearstation) "aOs" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ req_access_txt = 1 @@ -20251,18 +19910,6 @@ /obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel, /area/quartermaster/storage) -"aOv" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/disposalpipe/segment, -/obj/effect/decal/warning_stripes/northeastcorner, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plasteel, -/area/engine/engineering) "aOw" = ( /obj/structure/toilet{ pixel_y = 8 @@ -20530,20 +20177,18 @@ name = "\improper Restrooms" }) "aPa" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/cyan{ + dir = 8; + initialize_directions = 11; + level = 2 + }, /obj/structure/cable{ d1 = 1; d2 = 2; icon_state = "1-2" }, -/obj/machinery/door/poddoor{ - density = 0; - icon_state = "open"; - id_tag = "Singularity"; - name = "Containment Blast Doors"; - opacity = 0 - }, -/obj/effect/decal/warning_stripes/yellow/hollow, -/turf/simulated/floor/plasteel, +/obj/effect/decal/warning_stripes/east, +/turf/simulated/floor/engine, /area/engine/engineering) "aPb" = ( /obj/structure/disposalpipe/segment, @@ -20566,13 +20211,6 @@ icon_state = "redcorner" }, /area/security/brig) -"aPd" = ( -/obj/machinery/the_singularitygen{ - anchored = 1 - }, -/obj/effect/decal/warning_stripes/north, -/turf/simulated/floor/plating/airless, -/area/space/nearstation) "aPe" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/effect/decal/warning_stripes/west, @@ -20587,19 +20225,6 @@ /obj/structure/plasticflaps/mining, /turf/simulated/floor/plating, /area/quartermaster/storage) -"aPg" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/plating/airless, -/area/space/nearstation) "aPh" = ( /obj/structure/table, /obj/item/hatchet, @@ -20646,7 +20271,7 @@ "aPl" = ( /obj/machinery/portable_atmospherics/canister/toxins, /turf/simulated/floor/plating, -/area/engine/engineering) +/area/storage/secure) "aPm" = ( /obj/machinery/door_timer{ dir = 1; @@ -20707,29 +20332,59 @@ /turf/simulated/floor/plasteel, /area/construction) "aPs" = ( -/obj/structure/particle_accelerator/end_cap{ - dir = 4 +/obj/machinery/atmospherics/pipe/manifold/visible/cyan{ + dir = 8; + initialize_directions = 11; + level = 2 }, -/turf/simulated/floor/plating, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/effect/decal/warning_stripes/east, +/obj/machinery/door_control{ + id = "engsm"; + name = "Radiation Shutters Control"; + pixel_x = 24; + req_access_txt = "10"; + req_one_access = null + }, +/turf/simulated/floor/engine, /area/engine/engineering) "aPt" = ( -/obj/structure/particle_accelerator/fuel_chamber{ +/obj/machinery/atmospherics/pipe/simple/visible/cyan{ dir = 4 }, -/turf/simulated/floor/plating, -/area/engine/engineering) +/turf/simulated/wall/r_wall, +/area/engine/supermatter) "aPu" = ( -/obj/structure/particle_accelerator/power_box{ - dir = 4 +/obj/machinery/atmospherics/binary/pump{ + dir = 4; + name = "Gas to Chamber" }, -/turf/simulated/floor/plating, -/area/engine/engineering) +/obj/machinery/power/apc{ + cell_type = 25000; + dir = 1; + name = "Engineering Engine Super APC"; + pixel_x = 0; + pixel_y = 24; + shock_proof = 1 + }, +/obj/structure/cable/yellow{ + d1 = 0; + d2 = 2; + icon_state = "0-2" + }, +/turf/simulated/floor/engine, +/area/engine/supermatter) "aPv" = ( -/obj/structure/particle_accelerator/particle_emitter/center{ - dir = 4 +/obj/machinery/meter, +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 9 }, -/turf/simulated/floor/plating, -/area/engine/engineering) +/turf/simulated/wall/r_wall, +/area/engine/supermatter) "aPw" = ( /obj/machinery/door_control{ id = "qm_warehouse"; @@ -20755,12 +20410,20 @@ name = "Storage Wing" }) "aPy" = ( -/obj/machinery/power/tesla_coil{ - anchored = 1 +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" }, -/obj/structure/cable, -/turf/simulated/floor/plating/airless, -/area/space/nearstation) +/obj/effect/decal/warning_stripes/northeast, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/binary/valve/digital/open{ + name = "Output Release" + }, +/turf/simulated/floor/engine, +/area/engine/engineering) "aPz" = ( /obj/item/seeds/apple, /obj/item/seeds/banana, @@ -20879,15 +20542,17 @@ /turf/simulated/floor/plasteel, /area/engine/engineering) "aPL" = ( -/obj/machinery/door/poddoor{ - density = 0; - icon_state = "open"; - id_tag = "Singularity"; - name = "Containment Blast Doors"; - opacity = 0 +/obj/machinery/door/airlock/engineering/glass{ + name = "Supermatter Engine Room"; + req_access_txt = "10"; + req_one_access_txt = "0" }, -/obj/effect/decal/warning_stripes/yellow/hollow, -/turf/simulated/floor/plasteel, +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/engine, /area/engine/engineering) "aPM" = ( /obj/structure/window/reinforced{ @@ -21300,6 +20965,15 @@ icon_state = "neutralcorner" }, /area/crew_quarters/locker) +"aQF" = ( +/obj/structure/cable/yellow{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/plasteel, +/area/engine/engineering) "aQG" = ( /obj/effect/decal/warning_stripes/arrow{ dir = 8; @@ -21428,30 +21102,32 @@ name = "\improper Garden" }) "aQR" = ( +/obj/effect/decal/warning_stripes/east, /obj/structure/table, -/obj/machinery/door_control{ - id = "Singularity"; - name = "Shutters Control"; - pixel_x = 25; - req_access_txt = "11" - }, -/obj/item/storage/toolbox/electrical{ +/obj/item/rpd, +/obj/item/clothing/suit/radiation, +/obj/item/clothing/glasses/meson, +/obj/item/clothing/head/radiation, +/obj/item/tank/internals/emergency_oxygen/engi, +/obj/item/storage/toolbox/mechanical{ + pixel_y = 5 + }, +/obj/item/flashlight{ + pixel_x = 1; pixel_y = 5 }, -/obj/effect/decal/warning_stripes/yellow, -/obj/item/clothing/glasses/meson/engine, /turf/simulated/floor/plasteel, /area/engine/engineering) "aQS" = ( /obj/machinery/power/emitter, /turf/simulated/floor/plating, -/area/engine/engineering) +/area/storage/secure) "aQT" = ( /obj/effect/landmark{ name = "blobstart" }, /turf/simulated/floor/plating, -/area/engine/engineering) +/area/storage/secure) "aQU" = ( /obj/effect/decal/warning_stripes/southwestcorner, /turf/simulated/floor/plasteel, @@ -21495,72 +21171,70 @@ }, /turf/simulated/floor/plasteel, /area/engine/engineering) -"aQZ" = ( -/obj/machinery/door_control{ - id = "Singularity"; - name = "Shutters Control"; - pixel_x = -25; - req_access_txt = "11" - }, -/obj/effect/decal/warning_stripes/northwest, -/turf/simulated/floor/plating, -/area/engine/engineering) "aRa" = ( -/obj/structure/cable{ +/obj/machinery/atmospherics/pipe/simple/visible/supply{ + dir = 6 + }, +/turf/simulated/wall/r_wall, +/area/engine/supermatter) +"aRb" = ( +/obj/machinery/door/airlock/engineering/glass{ + heat_proof = 1; + name = "Supermatter Chamber"; + req_access_txt = "10"; + req_one_access_txt = "0" + }, +/obj/structure/cable/yellow{ d1 = 4; d2 = 8; icon_state = "4-8" }, -/obj/effect/decal/warning_stripes/north, -/turf/simulated/floor/plating, -/area/engine/engineering) -"aRb" = ( -/obj/machinery/particle_accelerator/control_box, -/obj/structure/cable{ - d2 = 8; - icon_state = "0-8" - }, -/turf/simulated/floor/plating, -/area/engine/engineering) +/turf/simulated/floor/engine, +/area/engine/supermatter) "aRc" = ( -/obj/structure/chair/stool{ - pixel_y = 8 - }, -/turf/simulated/floor/plating, -/area/engine/engineering) -"aRd" = ( -/obj/structure/particle_accelerator/particle_emitter/left{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/engine/engineering) -"aRe" = ( -/obj/item/weldingtool, -/turf/space, -/area/space/nearstation) -"aRf" = ( -/obj/item/wirecutters, -/obj/structure/cable{ +/obj/structure/cable/yellow{ d1 = 1; - d2 = 4; - icon_state = "1-4" + d2 = 8; + icon_state = "1-8" }, -/obj/effect/decal/warning_stripes/east, -/turf/simulated/floor/plating, +/turf/simulated/floor/engine, +/area/engine/supermatter) +"aRd" = ( +/obj/machinery/door/airlock/engineering/glass{ + heat_proof = 1; + name = "Supermatter Chamber"; + req_access_txt = "10"; + req_one_access_txt = "0" + }, +/turf/simulated/floor/engine, +/area/engine/supermatter) +"aRe" = ( +/obj/machinery/atmospherics/pipe/simple/visible/red{ + dir = 2 + }, +/obj/effect/decal/warning_stripes/yellow, +/turf/simulated/floor/engine, /area/engine/engineering) +"aRf" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/turf/simulated/floor/engine, +/area/engine/supermatter) "aRg" = ( +/obj/machinery/meter, +/obj/machinery/atmospherics/pipe/manifold/visible/cyan{ + dir = 8; + initialize_directions = 11; + level = 2 + }, /obj/structure/cable{ d1 = 1; d2 = 2; icon_state = "1-2" }, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/effect/decal/warning_stripes/north, -/turf/simulated/floor/plating, +/obj/effect/decal/warning_stripes/east, +/turf/simulated/floor/engine, /area/engine/engineering) "aRh" = ( /obj/effect/decal/warning_stripes/west, @@ -21627,29 +21301,17 @@ }, /turf/simulated/floor/plasteel, /area/quartermaster/storage) -"aRr" = ( -/obj/machinery/camera/emp_proof{ - c_tag = "Engineering - Particle Accelerator"; - dir = 2; - network = list("Singulo","SS13") - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/decal/warning_stripes/north, -/turf/simulated/floor/plating, -/area/engine/engineering) "aRs" = ( -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" +/obj/machinery/atmospherics/pipe/simple/visible/supply{ + dir = 10 }, -/obj/effect/decal/warning_stripes/northeast, -/turf/simulated/floor/plating, -/area/engine/engineering) +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/engine, +/area/engine/supermatter) "aRt" = ( /obj/structure/mirror{ pixel_x = -28 @@ -22068,7 +21730,7 @@ /obj/machinery/power/emitter, /obj/machinery/light/small, /turf/simulated/floor/plating, -/area/engine/engineering) +/area/storage/secure) "aSh" = ( /obj/structure/closet/crate, /obj/item/stack/sheet/metal{ @@ -22091,17 +21753,7 @@ }, /obj/item/gps, /turf/simulated/floor/plating, -/area/engine/engineering) -"aSi" = ( -/obj/machinery/the_singularitygen{ - anchored = 0 - }, -/turf/simulated/floor/plating, -/area/engine/engineering) -"aSk" = ( -/obj/effect/decal/warning_stripes/east, -/turf/simulated/floor/plating/airless, -/area/space/nearstation) +/area/storage/secure) "aSl" = ( /obj/machinery/navbeacon{ codes_txt = "delivery"; @@ -22129,13 +21781,17 @@ /turf/simulated/floor/plasteel, /area/engine/engineering) "aSo" = ( -/obj/effect/decal/warning_stripes/east, -/turf/simulated/floor/plating, -/area/engine/engineering) +/turf/simulated/floor/engine, +/area/engine/supermatter) "aSp" = ( -/obj/effect/decal/warning_stripes/southwest, -/turf/simulated/floor/plating/airless, -/area/space/nearstation) +/obj/structure/reflector/box{ + anchored = 1; + dir = 8 + }, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/engine/engineering) "aSq" = ( /turf/simulated/wall/mineral/titanium, /area/shuttle/pod_1) @@ -22202,13 +21858,8 @@ name = "\improper Garden" }) "aSC" = ( -/obj/structure/table, -/obj/machinery/cell_charger, -/obj/item/stock_parts/cell/high{ - charge = 100; - maxcharge = 15000 - }, /obj/effect/decal/warning_stripes/yellow, +/obj/machinery/computer/sm_monitor, /turf/simulated/floor/plasteel, /area/engine/engineering) "aSD" = ( @@ -22234,8 +21885,12 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/disposalpipe/segment, -/obj/effect/decal/warning_stripes/southeastcorner, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/yellow{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, /turf/simulated/floor/plasteel, /area/engine/engineering) "aSF" = ( @@ -22597,15 +22252,6 @@ /obj/machinery/hologram/holopad, /turf/simulated/floor/wood, /area/lawoffice) -"aTl" = ( -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/effect/decal/warning_stripes/west, -/turf/simulated/floor/plating, -/area/engine/engineering) "aTm" = ( /obj/machinery/firealarm{ dir = 8; @@ -22865,10 +22511,6 @@ /area/hallway/secondary/construction{ name = "\improper Garden" }) -"aTG" = ( -/obj/effect/decal/warning_stripes/southeast, -/turf/simulated/floor/plating/airless, -/area/space/nearstation) "aTH" = ( /obj/machinery/power/apc{ dir = 4; @@ -22896,54 +22538,35 @@ /area/hallway/secondary/construction{ name = "\improper Garden" }) -"aTI" = ( -/obj/machinery/the_singularitygen/tesla{ - anchored = 1 - }, -/obj/effect/decal/warning_stripes/south, -/turf/simulated/floor/plating/airless, -/area/space/nearstation) "aTJ" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" +/obj/machinery/atmospherics/pipe/simple/visible/cyan, +/obj/machinery/light{ + dir = 4 }, -/turf/simulated/floor/plating, -/area/engine/engineering) -"aTK" = ( /obj/structure/cable{ d1 = 1; d2 = 2; icon_state = "1-2" }, /obj/effect/decal/warning_stripes/east, -/turf/simulated/floor/plating, +/turf/simulated/floor/engine, /area/engine/engineering) +"aTK" = ( +/obj/structure/window/plasmareinforced, +/obj/machinery/atmospherics/pipe/manifold/visible/supply{ + dir = 8 + }, +/obj/machinery/power/rad_collector{ + anchored = 1 + }, +/obj/structure/cable, +/turf/simulated/floor/engine, +/area/engine/supermatter) "aTL" = ( /obj/structure/disposalpipe/segment, /obj/effect/decal/warning_stripes/yellow/hollow, /turf/simulated/floor/plasteel, /area/quartermaster/storage) -"aTM" = ( -/obj/machinery/power/tesla_coil{ - anchored = 1 - }, -/obj/structure/cable{ - d2 = 4; - icon_state = "0-4" - }, -/turf/simulated/floor/plating/airless, -/area/space/nearstation) -"aTO" = ( -/obj/effect/spawner/lootdrop/maintenance, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plating/airless, -/area/engine/engineering) "aTP" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plating, @@ -22955,9 +22578,11 @@ /turf/simulated/floor/plasteel, /area/construction) "aTR" = ( -/obj/effect/decal/warning_stripes/south, -/turf/simulated/floor/plating, -/area/engine/engineering) +/obj/machinery/atmospherics/pipe/simple/visible/green{ + dir = 4 + }, +/turf/simulated/wall/r_wall, +/area/engine/supermatter) "aTS" = ( /obj/docking_port/stationary{ dir = 8; @@ -22986,9 +22611,9 @@ /turf/simulated/floor/plating, /area/quartermaster/storage) "aTV" = ( -/obj/effect/decal/warning_stripes/southeast, -/turf/simulated/floor/plating, -/area/engine/engineering) +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/engine, +/area/engine/supermatter) "aTW" = ( /obj/structure/cable/yellow{ d1 = 4; @@ -23142,13 +22767,6 @@ /turf/simulated/floor/plasteel, /area/storage/primary) "aUh" = ( -/obj/machinery/computer/security/telescreen{ - desc = "Used for monitoring the singularity engine safely."; - dir = 8; - name = "Singularity Monitor"; - network = list("Singulo"); - pixel_x = 32 - }, /obj/machinery/camera{ c_tag = "Engineering - Central"; dir = 8; @@ -23392,18 +23010,6 @@ /area/hallway/secondary/construction{ name = "\improper Garden" }) -"aUF" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/light{ - dir = 8 - }, -/obj/effect/decal/warning_stripes/west, -/turf/simulated/floor/plating, -/area/engine/engineering) "aUG" = ( /obj/structure/window/reinforced{ dir = 1 @@ -23472,19 +23078,6 @@ tag = "icon-vault" }, /area/engine/engineering) -"aUM" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/plating/airless, -/area/space/nearstation) "aUN" = ( /obj/effect/spawner/window/reinforced, /turf/simulated/floor/plating, @@ -23528,7 +23121,6 @@ d2 = 8; icon_state = "2-8" }, -/obj/effect/decal/warning_stripes/east, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel, /area/engine/engineering) @@ -23661,17 +23253,13 @@ /turf/simulated/floor/plasteel, /area/engine/engineering) "aVh" = ( -/obj/structure/closet/secure_closet/engineering_welding, -/obj/effect/decal/warning_stripes/yellow, -/turf/simulated/floor/plasteel, -/area/engine/engineering) -"aVi" = ( -/obj/machinery/power/smes/engineering, -/obj/structure/cable{ - d2 = 4; - icon_state = "0-4" - }, -/obj/effect/decal/warning_stripes/yellow, +/obj/effect/decal/warning_stripes/east, +/obj/structure/table, +/obj/item/rpd, +/obj/item/geiger_counter, +/obj/item/clothing/suit/radiation, +/obj/item/clothing/glasses/meson, +/obj/item/clothing/head/radiation, /turf/simulated/floor/plasteel, /area/engine/engineering) "aVk" = ( @@ -23766,17 +23354,21 @@ }, /area/crew_quarters/locker) "aVs" = ( -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" +/obj/machinery/atmospherics/binary/pump/on{ + name = "Gas to Filter" }, /obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/yellow{ d1 = 4; d2 = 8; icon_state = "4-8" }, -/turf/simulated/floor/plating, +/obj/effect/decal/warning_stripes/east, +/turf/simulated/floor/engine, /area/engine/engineering) "aVt" = ( /obj/structure/table, @@ -24042,25 +23634,6 @@ icon_state = "neutralcorner" }, /area/crew_quarters/locker) -"aVN" = ( -/obj/structure/table, -/obj/item/book/manual/engineering_guide{ - pixel_x = 3; - pixel_y = 4 - }, -/obj/item/book/manual/engineering_particle_accelerator{ - pixel_x = -2; - pixel_y = 3 - }, -/obj/machinery/door_control{ - id = "Singularity"; - name = "Shutters Control"; - pixel_x = 25; - req_access_txt = "11" - }, -/obj/effect/decal/warning_stripes/yellow, -/turf/simulated/floor/plasteel, -/area/engine/engineering) "aVO" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -24189,16 +23762,6 @@ /area/hallway/secondary/construction{ name = "\improper Garden" }) -"aWb" = ( -/obj/machinery/door_control{ - id = "Singularity"; - name = "Shutters Control"; - pixel_x = -25; - req_access_txt = "11" - }, -/obj/effect/decal/warning_stripes/southwest, -/turf/simulated/floor/plating, -/area/engine/engineering) "aWc" = ( /turf/simulated/floor/plasteel{ dir = 6; @@ -24239,13 +23802,25 @@ /turf/simulated/floor/plating, /area/maintenance/starboard) "aWg" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/green{ + dir = 8 + }, +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 24 + }, +/obj/machinery/camera{ + c_tag = "Engineering Supermatter Port"; + dir = 8; + network = list("SS13","engine") + }, /obj/structure/cable{ d1 = 1; d2 = 2; icon_state = "1-2" }, -/obj/effect/decal/warning_stripes/south, -/turf/simulated/floor/plating, +/obj/effect/decal/warning_stripes/east, +/turf/simulated/floor/engine, /area/engine/engineering) "aWh" = ( /obj/machinery/camera/autoname{ @@ -24355,25 +23930,12 @@ }, /area/security/brig) "aWp" = ( -/obj/structure/table, -/obj/item/book/manual/engineering_hacking{ - pixel_x = 4; - pixel_y = 5 - }, -/obj/item/book/manual/engineering_construction{ - pixel_y = 3 - }, -/obj/structure/extinguisher_cabinet{ - pixel_x = 27 - }, /obj/machinery/light{ dir = 4; icon_state = "tube1" }, -/obj/item/book/manual/engineering_singularity_safety{ - pixel_x = -4 - }, -/obj/effect/decal/warning_stripes/yellow, +/obj/effect/decal/warning_stripes/east, +/obj/structure/closet/firecloset, /turf/simulated/floor/plasteel, /area/engine/engineering) "aWq" = ( @@ -24461,6 +24023,12 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/structure/table, +/obj/machinery/cell_charger, +/obj/item/stock_parts/cell/high{ + charge = 100; + maxcharge = 15000 + }, /turf/simulated/floor/plasteel{ dir = 1; icon_state = "yellow" @@ -24494,15 +24062,10 @@ icon_state = "neutralcorner" }, /area/crew_quarters/locker) -"aWz" = ( -/obj/machinery/power/grounding_rod{ - anchored = 1 - }, -/turf/simulated/floor/plating/airless, -/area/engine/engineering) "aWA" = ( -/turf/space, -/area/engine/engineering) +/obj/structure/lattice, +/turf/simulated/wall/r_wall, +/area/space/nearstation) "aWB" = ( /obj/structure/window/reinforced{ dir = 1; @@ -24826,22 +24389,15 @@ /turf/simulated/floor/plasteel, /area/quartermaster/storage) "aXo" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" +/obj/machinery/atmospherics/pipe/manifold/visible/red{ + dir = 1 }, -/obj/structure/rack{ - dir = 8; - layer = 2.9 - }, -/obj/item/crowbar, -/obj/item/stack/cable_coil, -/obj/item/screwdriver, -/obj/item/weldingtool, +/obj/machinery/meter, /obj/effect/decal/warning_stripes/yellow, -/turf/simulated/floor/plasteel, -/area/engine/engineering) +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/engine/supermatter) "aXp" = ( /obj/machinery/vending/crittercare, /obj/effect/decal/warning_stripes/north, @@ -24862,24 +24418,14 @@ name = "\improper Garden" }) "aXs" = ( +/obj/machinery/atmospherics/trinary/filter/flipped, /obj/structure/cable{ d1 = 1; d2 = 2; icon_state = "1-2" }, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4"; - tag = "90Curve" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/effect/decal/warning_stripes/yellow/hollow, -/turf/simulated/floor/plasteel, +/obj/effect/decal/warning_stripes/east, +/turf/simulated/floor/engine, /area/engine/engineering) "aXt" = ( /obj/machinery/computer/security/mining, @@ -25581,9 +25127,6 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/effect/landmark/start{ - name = "Station Engineer" - }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -25632,7 +25175,7 @@ icon_state = "vault"; tag = "icon-vault" }, -/area/engine/chiefs_office) +/area/engine/engineering) "aYV" = ( /obj/structure/cable/yellow{ d2 = 4; @@ -25646,16 +25189,16 @@ icon_state = "vault"; tag = "icon-vault" }, -/area/engine/chiefs_office) +/area/engine/engineering) "aYW" = ( /obj/structure/cable{ d1 = 4; d2 = 8; icon_state = "4-8" }, -/obj/effect/decal/warning_stripes/north, +/obj/effect/decal/warning_stripes/east, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 + dir = 10 }, /turf/simulated/floor/plasteel, /area/engine/engineering) @@ -25764,7 +25307,6 @@ d2 = 8; icon_state = "4-8" }, -/obj/effect/decal/warning_stripes/northeastcorner, /obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 4; @@ -25773,68 +25315,50 @@ /turf/simulated/floor/plasteel, /area/engine/engineering) "aZd" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, /obj/structure/cable{ d1 = 4; d2 = 8; icon_state = "4-8" }, -/obj/machinery/power/terminal{ - dir = 1; - icon_state = "term" - }, -/obj/structure/cable{ - d2 = 4; - icon_state = "0-4" - }, -/obj/effect/decal/warning_stripes/north, -/turf/simulated/floor/plasteel, +/obj/effect/decal/warning_stripes/west, +/turf/simulated/floor/engine, /area/engine/engineering) "aZe" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, +/obj/effect/spawner/window/reinforced/plasma, /obj/structure/cable{ d1 = 4; d2 = 8; icon_state = "4-8" }, -/obj/effect/decal/warning_stripes/north, -/turf/simulated/floor/plasteel, +/obj/structure/sign/securearea{ + pixel_y = 32 + }, +/turf/simulated/floor/engine, /area/engine/engineering) "aZg" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" +/obj/machinery/atmospherics/pipe/simple/visible/red{ + dir = 5 }, -/obj/effect/decal/warning_stripes/northeast, -/turf/simulated/floor/plasteel, -/area/engine/engineering) +/obj/effect/decal/warning_stripes/yellow, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/engine/supermatter) "aZh" = ( +/obj/machinery/atmospherics/pipe/simple/visible/green, /obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4"; - tag = "90Curve" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 + d1 = 2; + d2 = 8; + icon_state = "2-8"; + tag = "" }, /obj/structure/cable{ d1 = 1; d2 = 8; icon_state = "1-8" }, -/obj/effect/decal/warning_stripes/north, -/turf/simulated/floor/plasteel, +/obj/effect/decal/warning_stripes/east, +/turf/simulated/floor/engine, /area/engine/engineering) "aZj" = ( /obj/machinery/door/airlock/external{ @@ -26085,13 +25609,21 @@ }, /area/turret_protected/ai_upload_foyer) "aZO" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, /obj/structure/cable{ d1 = 4; d2 = 8; icon_state = "4-8" }, -/obj/effect/decal/warning_stripes/east, -/turf/simulated/floor/plasteel, +/obj/effect/decal/warning_stripes/north, +/obj/machinery/atmospherics/pipe/manifold/visible/green{ + dir = 1; + tag = "icon-manifold-g (NORTH)" + }, +/obj/machinery/meter, +/turf/simulated/floor/engine, /area/engine/engineering) "aZP" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -26354,33 +25886,33 @@ }, /area/storage/primary) "bao" = ( +/obj/machinery/atmospherics/pipe/simple/visible/green{ + dir = 5; + initialize_directions = 12; + tag = "icon-intact-g (NORTHEAST)" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, /obj/structure/cable{ d1 = 1; d2 = 4; icon_state = "1-4"; - tag = "90Curve" + tag = "" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plasteel, +/obj/effect/decal/warning_stripes/northeastcorner, +/turf/simulated/floor/engine, /area/engine/engineering) "bap" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" +/obj/machinery/atmospherics/pipe/manifold/visible/yellow{ + dir = 4 }, -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 }, -/turf/simulated/floor/plating/airless, -/area/space/nearstation) +/obj/effect/decal/warning_stripes/east, +/turf/simulated/floor/engine, +/area/engine/engineering) "baq" = ( /obj/structure/cable/yellow{ d1 = 4; @@ -26426,10 +25958,6 @@ /obj/effect/decal/warning_stripes/yellow/hollow, /turf/simulated/floor/plasteel, /area/quartermaster/storage) -"bat" = ( -/obj/machinery/light_switch, -/turf/simulated/wall, -/area/engine/engineering) "bau" = ( /obj/item/clothing/head/fedora, /obj/structure/table/wood/poker, @@ -26451,12 +25979,13 @@ /obj/effect/decal/warning_stripes/south, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable/yellow{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, /turf/simulated/floor/plasteel, /area/engine/engineering) -"bax" = ( -/obj/item/wrench, -/turf/simulated/floor/plating/airless, -/area/engine/engineering) "bay" = ( /obj/machinery/hologram/holopad, /obj/structure/cable/yellow{ @@ -26473,16 +26002,6 @@ /area/bridge/meeting_room{ name = "\improper Command Hallway" }) -"baA" = ( -/obj/machinery/light, -/obj/machinery/camera{ - c_tag = "Engineering - Aft"; - dir = 1; - network = list("SS13") - }, -/obj/effect/decal/warning_stripes/south, -/turf/simulated/floor/plasteel, -/area/engine/engineering) "baB" = ( /obj/effect/decal/warning_stripes/east, /turf/simulated/floor/plasteel, @@ -26513,41 +26032,11 @@ /turf/simulated/floor/plating, /area/maintenance/starboard) "baE" = ( -/obj/machinery/camera/autoname{ - dir = 4; - network = list("SS13") - }, -/obj/machinery/door_control{ - desc = "A remote control-switch for the engineering security doors."; - id = "Engineering"; - name = "Engineering Lockdown"; - pixel_x = -24; - pixel_y = -6; - req_access_txt = "1" - }, -/obj/machinery/door_control{ - id = "atmos"; - name = "Atmospherics Lockdown"; - pixel_x = -24; - pixel_y = 5; - req_access_txt = "1" - }, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/unary/vent_pump{ - dir = 4; - external_pressure_bound = 101.325; - on = 1; - pressure_checks = 1 - }, /turf/simulated/floor/plasteel{ - dir = 10; + dir = 9; icon_state = "yellow" }, -/area/engine/engineering) +/area/engine/break_room) "baF" = ( /obj/machinery/light{ dir = 4 @@ -26569,9 +26058,12 @@ /turf/simulated/floor/plasteel, /area/quartermaster/storage) "baG" = ( -/obj/effect/decal/warning_stripes/south, -/turf/simulated/floor/plating/airless, -/area/engine/engineering) +/obj/structure/lattice/catwalk, +/obj/machinery/atmospherics/pipe/simple/visible/yellow{ + dir = 5 + }, +/turf/space, +/area/space/nearstation) "baH" = ( /obj/machinery/atmospherics/pipe/simple/hidden{ dir = 10; @@ -27042,16 +26534,13 @@ }, /area/hallway/primary/central) "bbC" = ( -/obj/effect/landmark/start{ - name = "Station Engineer" +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plasteel, +/obj/effect/decal/warning_stripes/south, +/turf/simulated/floor/engine, /area/engine/engineering) "bbD" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -27099,14 +26588,6 @@ "bbH" = ( /turf/simulated/wall, /area/storage/tech) -"bbI" = ( -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/plating/airless, -/area/engine/engineering) "bbJ" = ( /obj/structure/cable{ d1 = 2; @@ -27141,16 +26622,8 @@ /turf/simulated/floor/plasteel, /area/engine/engineering) "bbO" = ( -/obj/structure/table, -/obj/item/paper_bin{ - pixel_x = -4; - pixel_y = 10 - }, -/obj/item/pen{ - pixel_x = -3; - pixel_y = 5 - }, /obj/effect/decal/warning_stripes/yellow, +/obj/structure/closet/secure_closet/engineering_welding, /turf/simulated/floor/plasteel, /area/engine/engineering) "bbP" = ( @@ -27225,19 +26698,6 @@ /area/quartermaster/office{ name = "\improper Cargo Office" }) -"bbU" = ( -/obj/structure/cable{ - d2 = 2; - icon_state = "0-2"; - pixel_y = 1 - }, -/obj/machinery/power/emitter{ - anchored = 1; - dir = 1; - state = 2 - }, -/turf/simulated/floor/plating/airless, -/area/engine/engineering) "bbV" = ( /obj/structure/table, /obj/item/analyzer, @@ -27524,22 +26984,9 @@ tag = "icon-vault (SOUTHWEST)" }, /area/turret_protected/ai_upload_foyer) -"bcp" = ( -/obj/machinery/light/small, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/effect/decal/warning_stripes/south, -/turf/simulated/floor/plasteel, -/area/engine/engineering) "bcq" = ( -/obj/structure/table, -/obj/item/folder/yellow, -/obj/item/folder/yellow, -/obj/item/storage/firstaid/fire, /obj/effect/decal/warning_stripes/yellow, +/obj/structure/closet/secure_closet/engineering_electrical, /turf/simulated/floor/plasteel, /area/engine/engineering) "bcr" = ( @@ -27670,16 +27117,6 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, /turf/simulated/floor/plasteel, /area/security/brig) -"bcC" = ( -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'RADIOACTIVE AREA'"; - icon_state = "radiation"; - name = "RADIOACTIVE AREA"; - pixel_x = 32 - }, -/obj/effect/decal/warning_stripes/east, -/turf/simulated/floor/plasteel, -/area/engine/engineering) "bcD" = ( /obj/structure/cable/yellow{ d1 = 4; @@ -27734,18 +27171,6 @@ /area/maintenance/fpmaint2{ name = "Port Maintenance" }) -"bcG" = ( -/obj/machinery/atmospherics/unary/vent_pump{ - dir = 1; - on = 1 - }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plasteel, -/area/engine/engineering) "bcH" = ( /obj/structure/cable/yellow{ d1 = 4; @@ -28154,18 +27579,12 @@ /turf/simulated/floor/plating, /area/maintenance/starboard) "bdp" = ( -/obj/machinery/camera/emp_proof{ - c_tag = "Aft Arm - Far"; - dir = 8; - network = list("Singulo") +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/simple/visible/yellow{ + dir = 10 }, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/plating/airless, -/area/engine/engineering) +/turf/space, +/area/space/nearstation) "bdq" = ( /obj/structure/cable/yellow{ d1 = 4; @@ -28412,16 +27831,6 @@ }, /turf/simulated/floor/plasteel, /area/hallway/primary/central) -"bdG" = ( -/obj/structure/grille, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4"; - tag = "90Curve" - }, -/turf/simulated/floor/plating/airless, -/area/engine/engineering) "bdH" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -29118,12 +28527,6 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/supply, /turf/simulated/floor/plasteel, /area/security/brig) -"beU" = ( -/obj/machinery/door/airlock/external{ - name = "South Containment Arm Access" - }, -/turf/simulated/floor/plating, -/area/engine/engineering) "beV" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 10 @@ -29153,17 +28556,6 @@ /area/construction/hallway{ name = "\improper MiniSat Exterior" }) -"beZ" = ( -/obj/machinery/camera/emp_proof{ - c_tag = "Aft Arm - Near"; - dir = 4; - network = list("Singulo") - }, -/obj/machinery/power/grounding_rod{ - anchored = 1 - }, -/turf/simulated/floor/plating/airless, -/area/space/nearstation) "bfb" = ( /obj/structure/window/reinforced{ dir = 8 @@ -29419,22 +28811,6 @@ /obj/effect/decal/warning_stripes/northeast, /turf/simulated/floor/plasteel, /area/engine/engineering) -"bft" = ( -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; - icon_state = "space"; - layer = 4; - name = "EXTERNAL AIRLOCK"; - pixel_y = -32 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/decal/warning_stripes/southeast, -/turf/simulated/floor/plasteel, -/area/engine/engineering) "bfu" = ( /obj/structure/cable/yellow{ d1 = 1; @@ -29486,24 +28862,14 @@ /turf/simulated/floor/plasteel, /area/engine/engineering) "bfz" = ( -/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/atmospherics/pipe/simple/heat_exchanging{ + dir = 6; + icon_state = "intact"; + tag = "icon-intact (SOUTHEAST)" }, -/obj/machinery/light/small{ - dir = 1 - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/decal/warning_stripes/east, -/turf/simulated/floor/plating, -/area/engine/engineering) +/obj/structure/lattice, +/turf/space, +/area/space/nearstation) "bfA" = ( /obj/structure/cable/yellow{ d1 = 4; @@ -29520,16 +28886,6 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, /turf/simulated/floor/plasteel, /area/security/brig) -"bfB" = ( -/obj/machinery/light, -/obj/structure/grille, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating/airless, -/area/engine/engineering) "bfC" = ( /obj/machinery/status_display{ dir = 4; @@ -30118,17 +29474,15 @@ /turf/simulated/floor/plasteel, /area/quartermaster/storage) "bgE" = ( -/obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/cable/yellow{ d1 = 1; d2 = 2; icon_state = "1-2" }, -/obj/machinery/door/airlock/engineering, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plasteel, -/area/engine/engineering) +/area/engine/break_room) "bgF" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -30144,10 +29498,6 @@ }, /turf/simulated/floor/plasteel, /area/hallway/primary/central) -"bgG" = ( -/obj/item/cigbutt, -/turf/simulated/floor/plating, -/area/engine/engineering) "bgH" = ( /obj/machinery/ai_status_display{ pixel_y = 32 @@ -30625,19 +29975,10 @@ }, /area/hallway/primary/central) "bhA" = ( -/obj/structure/grille, -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating/airless, -/area/engine/engineering) +/obj/structure/lattice, +/obj/structure/lattice/catwalk, +/turf/space, +/area/space/nearstation) "bhB" = ( /obj/machinery/atmospherics/unary/vent_pump{ dir = 4; @@ -31794,13 +31135,6 @@ }, /area/storage/tools) "bjG" = ( -/obj/machinery/computer/security/telescreen{ - desc = "Used for monitoring the singularity engine safely."; - dir = 8; - name = "Singularity Monitor"; - network = list("Singulo"); - pixel_x = 29 - }, /obj/structure/cable/yellow{ d1 = 1; d2 = 2; @@ -31812,6 +31146,14 @@ }, /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/computer/security/telescreen{ + desc = "A telescreen that connects to the engine's camera network."; + dir = 8; + layer = 4; + name = "Engine Monitor"; + network = list("engine"); + pixel_x = 30 + }, /turf/simulated/floor/plasteel{ dir = 5; icon_state = "vault" @@ -31879,26 +31221,6 @@ "bjN" = ( /turf/simulated/wall, /area/engine/break_room) -"bjO" = ( -/obj/machinery/firealarm{ - dir = 4; - pixel_x = 24 - }, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/computer/monitor, -/obj/structure/cable/yellow{ - d2 = 8; - icon_state = "0-8" - }, -/turf/simulated/floor/plasteel{ - dir = 6; - icon_state = "yellow" - }, -/area/engine/engineering) "bjP" = ( /obj/effect/spawner/window/reinforced, /obj/structure/cable/yellow, @@ -31930,20 +31252,6 @@ icon_state = "vault" }, /area/turret_protected/ai) -"bjT" = ( -/obj/structure/sign/securearea{ - desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; - icon_state = "space"; - layer = 4; - name = "EXTERNAL AIRLOCK"; - pixel_y = 32 - }, -/obj/effect/decal/warning_stripes/east, -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/engine/engineering) "bjU" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4; @@ -32657,16 +31965,11 @@ /turf/simulated/floor/plating, /area/engine/mechanic_workshop) "blj" = ( -/obj/machinery/door/firedoor, /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/atmospherics/pipe/simple/hidden/scrubbers{ dir = 8 }, @@ -32674,7 +31977,10 @@ dir = 4; level = 1 }, -/turf/simulated/floor/plasteel, +/turf/simulated/floor/plasteel{ + dir = 5; + icon_state = "vault" + }, /area/engine/mechanic_workshop) "bll" = ( /obj/structure/closet/emcloset, @@ -34141,27 +33447,8 @@ d2 = 2; icon_state = "1-2" }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/plasteel{ - dir = 1; - icon_state = "yellow" - }, -/area/engine/break_room) -"bnD" = ( -/obj/machinery/disposal{ - pixel_x = 2; - pixel_y = 2 - }, -/obj/structure/disposalpipe/trunk{ - dir = 8 - }, -/turf/simulated/floor/plasteel{ - dir = 1; - icon_state = "yellow" - }, +/turf/simulated/floor/plasteel, /area/engine/break_room) "bnE" = ( /obj/machinery/light_switch{ @@ -36019,6 +35306,9 @@ /obj/structure/chair/stool{ pixel_y = 8 }, +/obj/effect/landmark/start{ + name = "Station Engineer" + }, /turf/simulated/floor/plasteel, /area/engine/break_room) "bqT" = ( @@ -36994,6 +36284,9 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/landmark/start{ + name = "Station Engineer" + }, /turf/simulated/floor/plasteel, /area/engine/break_room) "bsE" = ( @@ -37010,15 +36303,13 @@ /turf/simulated/floor/plating, /area/janitor) "bsF" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/unary/vent_pump{ - dir = 4; - on = 1 +/obj/structure/disposalpipe/sortjunction, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8; + initialize_directions = 11 }, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 }, /turf/simulated/floor/plasteel, /area/engine/engineering) @@ -37096,6 +36387,8 @@ icon_state = "D-NW"; tag = "icon-D-NW" }, +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/simple/visible/yellow, /turf/space, /area/space/nearstation) "bsO" = ( @@ -37239,6 +36532,12 @@ dir = 4; level = 1 }, +/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" @@ -37255,6 +36554,20 @@ 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" @@ -38639,7 +37952,7 @@ dir = 8; icon_state = "vault" }, -/area/space/nearstation) +/area/engine/break_room) "bvl" = ( /obj/effect/spawner/window/reinforced, /obj/machinery/door/poddoor/shutters{ @@ -38805,7 +38118,7 @@ /turf/simulated/floor/plasteel{ icon_state = "dark" }, -/area/space/nearstation) +/area/engine/break_room) "bvw" = ( /obj/machinery/alarm{ dir = 4; @@ -39513,6 +38826,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/machinery/atmospherics/pipe/simple/visible/yellow, /turf/simulated/floor/plating/airless, /area/space/nearstation) "bwG" = ( @@ -41831,7 +41145,7 @@ dir = 8; icon_state = "vault" }, -/area/space/nearstation) +/area/engine/break_room) "bAu" = ( /obj/machinery/vending/boozeomat, /turf/simulated/wall, @@ -41950,15 +41264,11 @@ }, /area/hallway/primary/starboard) "bAL" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/decal/warning_stripes/east, /turf/simulated/floor/plasteel, /area/engine/engineering) -"bAO" = ( -/obj/structure/reagent_dispensers/fueltank, -/turf/simulated/floor/plating, -/area/engine/break_room) "bAP" = ( /obj/machinery/door/poddoor{ density = 0; @@ -42690,10 +42000,7 @@ name = "\improper Command Hallway" }) "bCj" = ( -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plasteel, /area/engine/engineering) "bCk" = ( @@ -42880,7 +42187,7 @@ /turf/simulated/floor/plasteel{ icon_state = "dark" }, -/area/space/nearstation) +/area/engine/break_room) "bCx" = ( /obj/structure/sign/securearea{ desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; @@ -43122,7 +42429,7 @@ /turf/simulated/floor/plasteel{ icon_state = "dark" }, -/area/space/nearstation) +/area/engine/break_room) "bDa" = ( /obj/structure/cable/yellow{ d1 = 1; @@ -44237,13 +43544,13 @@ }, /area/atmos) "bEL" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" }, /obj/effect/decal/warning_stripes/west, -/turf/simulated/floor/plating, +/turf/simulated/floor/engine, /area/engine/engineering) "bEM" = ( /obj/machinery/computer/atmos_alert, @@ -48803,18 +48110,6 @@ }, /turf/simulated/floor/wood, /area/library) -"bMO" = ( -/obj/machinery/power/rad_collector{ - anchored = 1 - }, -/obj/item/tank/internals/plasma, -/obj/structure/cable{ - d2 = 8; - icon_state = "0-8" - }, -/obj/effect/decal/warning_stripes/west, -/turf/simulated/floor/plating, -/area/engine/engineering) "bMP" = ( /obj/machinery/bookbinder, /turf/simulated/floor/wood, @@ -54319,7 +53614,7 @@ name = "Secure Storage Blast Doors" }, /turf/simulated/floor/plating, -/area/engine/engineering) +/area/storage/secure) "bXv" = ( /obj/structure/sign/nosmoking_2, /turf/simulated/wall, @@ -55615,10 +54910,6 @@ /area/maintenance/aft{ name = "Aft Maintenance" }) -"bZV" = ( -/obj/effect/decal/cleanable/fungus, -/turf/simulated/wall/r_wall, -/area/maintenance/starboard) "bZW" = ( /obj/machinery/newscaster{ pixel_x = -32 @@ -56889,9 +56180,16 @@ name = "Aft Maintenance" }) "ccu" = ( -/obj/structure/reagent_dispensers/fueltank, -/obj/effect/decal/warning_stripes/west, -/turf/simulated/floor/plating, +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/effect/decal/warning_stripes/south, +/obj/machinery/atmospherics/pipe/simple/visible/yellow{ + dir = 4 + }, +/turf/simulated/floor/engine, /area/engine/engineering) "ccv" = ( /obj/structure/closet/crate/hydroponics, @@ -67017,6 +66315,9 @@ /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 + }, /turf/simulated/floor/plasteel{ icon_state = "white" }, @@ -68410,6 +67711,9 @@ icon_state = "bluecorner" }, /area/hallway/primary/aft) +"cwA" = ( +/turf/simulated/wall/r_wall, +/area/engine/equipmentstorage) "cwB" = ( /obj/machinery/power/compressor{ comp_id = "incineratorturbine"; @@ -73773,6 +73077,9 @@ dir = 4 }, /obj/effect/decal/warning_stripes/yellow/hollow, +/obj/structure/disaster_counter/toxins{ + pixel_y = 32 + }, /turf/simulated/floor/plasteel, /area/toxins/mixing{ name = "\improper Toxins Lab" @@ -78753,16 +78060,13 @@ icon_state = "4-8" }, /obj/structure/rack, -/obj/item/storage/firstaid/regular{ - empty = 1; +/obj/item/storage/firstaid/regular/empty{ name = "First-Aid (empty)" }, -/obj/item/storage/firstaid/regular{ - empty = 1; +/obj/item/storage/firstaid/regular/empty{ name = "First-Aid (empty)" }, -/obj/item/storage/firstaid/regular{ - empty = 1; +/obj/item/storage/firstaid/regular/empty{ name = "First-Aid (empty)" }, /obj/item/healthanalyzer{ @@ -84090,6 +83394,9 @@ /obj/structure/noticeboard{ pixel_y = 30 }, +/obj/structure/disaster_counter/scichem{ + pixel_x = 32 + }, /turf/simulated/floor/plasteel{ dir = 4; icon_state = "whitepurplefull"; @@ -87026,31 +86333,26 @@ name = "\improper Secure Lab" }) "ddZ" = ( -/obj/machinery/power/tesla_coil{ - anchored = 1 - }, -/obj/structure/cable{ - d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/floor/plating/airless, -/area/space/nearstation) +/obj/machinery/meter, +/obj/machinery/atmospherics/pipe/simple/visible/yellow, +/obj/effect/decal/warning_stripes/east, +/turf/simulated/floor/engine, +/area/engine/engineering) "dea" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" +/obj/machinery/atmospherics/pipe/simple/visible/green{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 }, -/turf/simulated/floor/plating/airless, -/area/space/nearstation) -"dec" = ( /obj/structure/cable{ d1 = 1; d2 = 8; icon_state = "1-8" }, -/turf/simulated/floor/plating/airless, -/area/space/nearstation) +/obj/effect/decal/warning_stripes/north, +/turf/simulated/floor/engine, +/area/engine/engineering) "ded" = ( /obj/machinery/dye_generator, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -87461,8 +86763,23 @@ }, /area/chapel/main) "deW" = ( -/obj/machinery/light_switch, -/turf/simulated/wall/r_wall, +/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, @@ -87501,68 +86818,6 @@ icon_state = "vault" }, /area/engine/mechanic_workshop) -"dfb" = ( -/obj/machinery/door/poddoor{ - density = 0; - icon_state = "open"; - id_tag = "mechpod"; - name = "Mechanic's Workshop Inner Door"; - opacity = 0 - }, -/turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "vault" - }, -/area/engine/mechanic_workshop) -"dfc" = ( -/obj/machinery/mecha_part_fabricator/spacepod, -/obj/machinery/light{ - dir = 1; - in_use = 1 - }, -/turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "vault" - }, -/area/engine/mechanic_workshop) -"dfd" = ( -/obj/machinery/camera, -/turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "vault" - }, -/area/engine/mechanic_workshop) -"dfe" = ( -/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) -"dff" = ( -/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 - }, -/turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "vault" - }, -/area/engine/mechanic_workshop) "dfg" = ( /turf/simulated/floor/plasteel{ dir = 5; @@ -87612,13 +86867,6 @@ icon_state = "vault" }, /area/engine/mechanic_workshop) -"dfm" = ( -/obj/machinery/vending/cola, -/turf/simulated/floor/plasteel{ - dir = 5; - icon_state = "vault" - }, -/area/engine/mechanic_workshop) "dfn" = ( /obj/structure/cable/yellow{ d1 = 1; @@ -87768,8 +87016,13 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/machinery/door/airlock/engineering/glass{ + name = "Mechanic Workshop"; + req_access_txt = "70" + }, +/obj/machinery/door/firedoor, /turf/simulated/floor/plasteel, -/area/engine/break_room) +/area/engine/mechanic_workshop) "dfB" = ( /obj/structure/cable/yellow{ d1 = 1; @@ -87846,6 +87099,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 9 }, +/obj/machinery/vending/cola, /turf/simulated/floor/plasteel{ dir = 5; icon_state = "vault" @@ -88323,9 +87577,9 @@ /turf/simulated/floor/plasteel, /area/engine/break_room) "dgO" = ( -/obj/structure/sign/pods, +/obj/machinery/light_switch, /turf/simulated/wall, -/area/engine/break_room) +/area/engine/mechanic_workshop) "dgW" = ( /obj/machinery/computer/camera_advanced/xenobio, /turf/simulated/floor/plasteel{ @@ -88642,12 +87896,32 @@ icon_state = "yellowcorner" }, /area/hallway/primary/starboard) +"dom" = ( +/obj/effect/decal/warning_stripes/north, +/turf/simulated/floor/plasteel, +/area/engine/equipmentstorage) "dqh" = ( /obj/effect/decal/warning_stripes/south, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel, /area/engine/break_room) +"dqm" = ( +/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{ + dir = 9 + }, +/obj/machinery/camera{ + c_tag = "Supermatter Chamber"; + dir = 4; + network = list("engine") + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/engine, +/area/engine/supermatter) "dvV" = ( /obj/machinery/atmospherics/pipe/simple/visible/yellow{ dir = 6 @@ -88734,6 +88008,17 @@ }, /turf/simulated/floor/plasteel, /area/construction) +"dMG" = ( +/obj/machinery/door/airlock/engineering/glass{ + name = "Supermatter Engine Room"; + req_access_txt = "10"; + req_one_access_txt = "0" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/engine, +/area/engine/engineering) "dMV" = ( /obj/machinery/atmospherics/pipe/manifold/visible/cyan{ dir = 8; @@ -88815,6 +88100,20 @@ icon_state = "neutralcorner" }, /area/hallway/primary/central) +"dXb" = ( +/obj/machinery/meter, +/obj/machinery/atmospherics/pipe/manifold/visible/cyan{ + level = 2 + }, +/obj/machinery/light{ + dir = 2 + }, +/obj/effect/decal/warning_stripes/south, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/turf/simulated/floor/engine, +/area/engine/engineering) "dZe" = ( /obj/effect/decal/warning_stripes/west, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -88824,6 +88123,29 @@ icon_state = "white" }, /area/medical/cryo) +"ebM" = ( +/obj/machinery/atmospherics/pipe/simple/visible/green{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/effect/decal/warning_stripes/north, +/turf/simulated/floor/engine, +/area/engine/engineering) +"ebV" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/engine, +/area/engine/supermatter) "edg" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -88839,6 +88161,22 @@ icon_state = "green" }, /area/hydroponics) +"edK" = ( +/obj/machinery/atmospherics/binary/pump{ + dir = 1; + name = "Gas to Mix" + }, +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/effect/decal/warning_stripes/north, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/turf/simulated/floor/engine, +/area/engine/engineering) "ehr" = ( /obj/structure/chair/office/dark, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -88883,6 +88221,12 @@ icon_state = "dark" }, /area/engine/break_room) +"evR" = ( +/obj/machinery/atmospherics/pipe/simple/visible/yellow{ + dir = 4 + }, +/turf/simulated/wall/r_wall, +/area/engine/engineering) "eEV" = ( /obj/machinery/atmospherics/unary/vent_pump/high_volume{ dir = 4; @@ -88966,6 +88310,22 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel, /area/hallway/primary/central) +"fga" = ( +/obj/machinery/atmospherics/pipe/simple/visible/green, +/obj/machinery/door/window/northleft{ + dir = 8; + icon_state = "left"; + name = "Inner Pipe Access"; + req_access_txt = "24" + }, +/obj/machinery/atmospherics/pipe/simple/visible/yellow{ + dir = 4; + level = 2 + }, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/atmos) "fgw" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 4 @@ -88983,14 +88343,35 @@ /area/hallway/secondary/entry{ name = "Arrivals" }) +"flr" = ( +/obj/structure/window/plasmareinforced{ + dir = 1 + }, +/obj/machinery/power/rad_collector{ + anchored = 1 + }, +/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{ + dir = 9 + }, +/obj/structure/cable{ + d2 = 2; + icon_state = "0-2" + }, +/turf/simulated/floor/engine, +/area/engine/supermatter) "fmg" = ( /obj/effect/spawner/window/reinforced, /obj/effect/spawner/airlock, /turf/simulated/floor/plating, /area/maintenance/portsolar) -"fnC" = ( -/turf/space, -/area/space/nearstation) +"fmP" = ( +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 10 + }, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/engine/engineering) "frX" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -89039,10 +88420,6 @@ icon_state = "white" }, /area/medical/virology) -"fBB" = ( -/obj/structure/lattice, -/turf/space, -/area/space) "fDi" = ( /obj/structure/cable/yellow{ d1 = 4; @@ -89069,6 +88446,13 @@ }, /turf/simulated/floor/plating, /area/maintenance/starboard) +"fHC" = ( +/obj/machinery/atmospherics/pipe/simple/visible/cyan{ + dir = 5 + }, +/obj/effect/decal/warning_stripes/west, +/turf/simulated/floor/engine, +/area/engine/engineering) "fNU" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 4 @@ -89166,6 +88550,11 @@ icon_state = "chapel" }, /area/chapel/main) +"gdM" = ( +/obj/effect/spawner/window/reinforced/plasma, +/obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction, +/turf/simulated/floor/engine, +/area/engine/engineering) "ged" = ( /obj/structure/sink{ dir = 8; @@ -89187,6 +88576,17 @@ /area/toxins/xenobiology{ name = "\improper Secure Lab" }) +"gfB" = ( +/obj/structure/window/plasmareinforced, +/obj/machinery/power/rad_collector{ + anchored = 1 + }, +/obj/machinery/atmospherics/pipe/simple/visible/supply{ + dir = 10 + }, +/obj/structure/cable, +/turf/simulated/floor/engine, +/area/engine/supermatter) "gog" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -89194,6 +88594,22 @@ icon_state = "redfull" }, /area/security/main) +"gpj" = ( +/obj/machinery/status_display, +/turf/simulated/wall/r_wall, +/area/engine/supermatter) +"gqj" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/cyan{ + dir = 8; + initialize_directions = 11; + level = 2 + }, +/obj/machinery/light{ + dir = 8 + }, +/obj/effect/decal/warning_stripes/west, +/turf/simulated/floor/engine, +/area/engine/engineering) "gsn" = ( /obj/structure/cable/yellow{ d1 = 1; @@ -89206,6 +88622,26 @@ }, /turf/simulated/floor/plasteel, /area/hallway/primary/aft) +"gsr" = ( +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/effect/decal/warning_stripes/north, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/engine, +/area/engine/engineering) +"gyy" = ( +/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ + dir = 9 + }, +/obj/structure/lattice, +/obj/structure/lattice/catwalk, +/turf/space, +/area/space/nearstation) "gyR" = ( /obj/structure/sign/securearea{ desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; @@ -89276,6 +88712,51 @@ /obj/effect/spawner/airlock/s_to_n, /turf/simulated/floor/plating, /area/maintenance/auxsolarstarboard) +"gYM" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/engine/engineering) +"gZY" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plating, +/area/engine/engineering) +"hdL" = ( +/obj/structure/cable/yellow{ + d2 = 8; + icon_state = "0-8" + }, +/turf/simulated/floor/plating, +/area/engine/engineering) +"hfb" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/visible/yellow{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/engine/engineering) +"hgN" = ( +/obj/machinery/atmospherics/pipe/simple/visible/yellow{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/engine/engineering) "hlZ" = ( /obj/structure/cable/yellow{ d1 = 1; @@ -89297,6 +88778,12 @@ }, /turf/simulated/floor/plasteel, /area/crew_quarters/courtroom) +"hnC" = ( +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 5 + }, +/turf/simulated/floor/plasteel, +/area/atmos) "hnL" = ( /obj/structure/chair{ dir = 8 @@ -89309,6 +88796,29 @@ /area/crew_quarters/fitness{ name = "\improper Recreation Area" }) +"hqN" = ( +/obj/machinery/door/airlock/engineering/glass{ + name = "Supermatter Engine Room"; + req_access_txt = "10"; + req_one_access_txt = "0" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable/yellow{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/engine, +/area/engine/engineering) +"huo" = ( +/obj/machinery/meter, +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 10 + }, +/turf/simulated/wall/r_wall, +/area/engine/supermatter) "hxv" = ( /obj/machinery/camera{ c_tag = "Telecoms - Server Room - Aft"; @@ -89323,6 +88833,15 @@ }, /turf/simulated/floor/plasteel/dark, /area/tcommsat/server) +"hAg" = ( +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/effect/decal/warning_stripes/northwest, +/turf/simulated/floor/engine, +/area/engine/engineering) "hBn" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ req_access_txt = 1 @@ -89349,6 +88868,40 @@ }, /turf/simulated/floor/plasteel, /area/storage/primary) +"hEA" = ( +/obj/machinery/camera/autoname{ + dir = 4; + network = list("SS13") + }, +/obj/machinery/door_control{ + desc = "A remote control-switch for the engineering security doors."; + id = "Engineering"; + name = "Engineering Lockdown"; + pixel_x = -24; + pixel_y = -6; + req_access_txt = "1" + }, +/obj/machinery/door_control{ + id = "atmos"; + name = "Atmospherics Lockdown"; + pixel_x = -24; + pixel_y = 5; + req_access_txt = "1" + }, +/obj/structure/cable/yellow{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/unary/vent_pump{ + dir = 4; + on = 1 + }, +/turf/simulated/floor/plasteel{ + dir = 10; + icon_state = "yellow" + }, +/area/engine/engineering) "hEP" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -89360,6 +88913,10 @@ icon_state = "chapel" }, /area/chapel/main) +"hHE" = ( +/obj/effect/decal/warning_stripes/southwest, +/turf/simulated/floor/plasteel, +/area/engine/equipmentstorage) "hHX" = ( /obj/machinery/firealarm{ dir = 8; @@ -89373,6 +88930,21 @@ icon_state = "neutralcorner" }, /area/hallway/primary/aft) +"hIG" = ( +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 24 + }, +/obj/machinery/computer/monitor, +/obj/structure/cable/yellow{ + d2 = 8; + icon_state = "0-8" + }, +/turf/simulated/floor/plasteel{ + dir = 6; + icon_state = "yellow" + }, +/area/engine/engineering) "hIT" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 8 @@ -89396,6 +88968,14 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/bluegrid, /area/turret_protected/ai_upload) +"hWr" = ( +/obj/structure/sign/securearea{ + desc = "A warning sign which reads 'HIGH VOLTAGE'"; + icon_state = "shock"; + name = "HIGH VOLTAGE" + }, +/turf/simulated/wall/r_wall, +/area/engine/supermatter) "hYZ" = ( /obj/machinery/atmospherics/pipe/simple/visible/universal{ dir = 4 @@ -89429,6 +89009,18 @@ /area/toxins/xenobiology{ name = "\improper Secure Lab" }) +"ibi" = ( +/obj/effect/spawner/window/reinforced/plasma, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/visible/yellow{ + dir = 4 + }, +/turf/simulated/floor/engine, +/area/engine/engineering) "ibR" = ( /obj/docking_port/stationary{ dir = 8; @@ -89481,11 +89073,38 @@ icon_state = "green" }, /area/hydroponics) +"iof" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/effect/decal/warning_stripes/south, +/turf/simulated/floor/plasteel, +/area/engine/engineering) "izL" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plasteel, /area/storage/primary) +"iAT" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/cyan{ + dir = 8; + initialize_directions = 11; + level = 2 + }, +/obj/machinery/camera{ + c_tag = "Engineering Supermatter Starboard"; + dir = 4; + network = list("SS13","engine") + }, +/obj/effect/decal/warning_stripes/northwest, +/turf/simulated/floor/engine, +/area/engine/engineering) "iDw" = ( /obj/machinery/atmospherics/unary/portables_connector, /obj/machinery/portable_atmospherics/canister/air, @@ -89518,6 +89137,15 @@ }, /turf/simulated/floor/bluegrid, /area/turret_protected/ai_upload) +"iIk" = ( +/obj/effect/decal/warning_stripes/east, +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plasteel, +/area/engine/engineering) "iMC" = ( /obj/effect/decal/warning_stripes/west, /obj/machinery/light{ @@ -89543,6 +89171,29 @@ /area/medical/research{ name = "Research Division" }) +"iNu" = ( +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "yellow" + }, +/area/engine/break_room) +"iNI" = ( +/obj/machinery/atmospherics/pipe/manifold4w/visible, +/turf/simulated/floor/plasteel, +/area/atmos) +"iSH" = ( +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/effect/decal/warning_stripes/south, +/obj/machinery/atmospherics/binary/pump{ + dir = 8; + name = "Atmos to Loop" + }, +/turf/simulated/floor/engine, +/area/engine/engineering) "iTR" = ( /obj/effect/decal/warning_stripes/south, /obj/machinery/atmospherics/pipe/simple/visible{ @@ -89584,12 +89235,25 @@ icon_state = "dark" }, /area/chapel/main) +"iZY" = ( +/obj/structure/sign/pods, +/turf/simulated/wall, +/area/engine/mechanic_workshop) "jap" = ( /obj/structure/disposalpipe/segment, /turf/simulated/floor/plating, /area/maintenance/fpmaint2{ name = "Port Maintenance" }) +"jbk" = ( +/obj/structure/reflector/double{ + anchored = 1; + dir = 8 + }, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/engine/engineering) "jdi" = ( /obj/effect/landmark/start{ name = "Life Support Specialist" @@ -89681,25 +89345,57 @@ /turf/simulated/floor/plasteel, /area/hallway/secondary/entry) "jLP" = ( -/obj/machinery/atmospherics/unary/vent_pump, +/obj/machinery/atmospherics/unary/vent_pump/on, /turf/simulated/floor/plasteel, /area/atmos) -"jZt" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" +"jPv" = ( +/obj/effect/decal/warning_stripes/north, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/disposalpipe/segment, -/obj/effect/decal/warning_stripes/east, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel, /area/engine/engineering) +"jUV" = ( +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/binary/valve{ + dir = 4; + name = "Output to Waste" + }, +/turf/simulated/floor/plating, +/area/engine/engineering) +"kez" = ( +/turf/simulated/wall/r_wall, +/area/engine/supermatter) +"kkt" = ( +/obj/effect/spawner/window/reinforced, +/obj/machinery/atmospherics/pipe/simple/visible/yellow{ + dir = 4; + level = 2 + }, +/turf/simulated/floor/plating, +/area/atmos) "kmF" = ( /obj/effect/spawner/window/reinforced, /turf/simulated/floor/plating, /area/hallway/secondary/entry) +"knc" = ( +/obj/machinery/atmospherics/pipe/simple/visible/green, +/obj/machinery/light{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/effect/decal/warning_stripes/east, +/turf/simulated/floor/engine, +/area/engine/engineering) "koz" = ( /obj/structure/cable/yellow{ d1 = 1; @@ -89724,6 +89420,22 @@ icon_state = "neutralcorner" }, /area/hallway/primary/port) +"kto" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/simple/visible/green{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/visible/yellow, +/turf/space, +/area/space/nearstation) +"ktv" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/simple/visible/yellow{ + dir = 9; + tag = "icon-intact-y (NORTHWEST)" + }, +/turf/space, +/area/space/nearstation) "ktI" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 10 @@ -89756,6 +89468,35 @@ }, /turf/simulated/floor/bluegrid, /area/assembly/chargebay) +"kxf" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/effect/decal/warning_stripes/northwestcorner, +/obj/effect/decal/warning_stripes/southeastcorner, +/turf/simulated/floor/plasteel, +/area/engine/engineering) +"kBa" = ( +/obj/machinery/atmospherics/binary/pump/on{ + name = "Gas to Cooling Loop" + }, +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/effect/decal/warning_stripes/south, +/obj/machinery/atmospherics/pipe/simple/visible/yellow{ + dir = 4 + }, +/turf/simulated/floor/engine, +/area/engine/engineering) "kBq" = ( /obj/structure/window/reinforced, /obj/structure/window/reinforced{ @@ -89778,6 +89519,19 @@ icon_state = "brown" }, /area/storage/primary) +"kGw" = ( +/obj/machinery/door/poddoor/shutters/radiation/preopen{ + dir = 2; + id_tag = "engsm"; + name = "Radiation Chamber Shutters" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plating, +/area/engine/supermatter) "kHS" = ( /obj/structure/chair/office/dark{ dir = 8 @@ -89787,6 +89541,23 @@ }, /turf/simulated/floor/wood, /area/library) +"kKa" = ( +/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ + dir = 5; + icon_state = "intact"; + tag = "icon-intact (NORTHEAST)" + }, +/obj/structure/lattice, +/turf/space, +/area/space/nearstation) +"kLs" = ( +/obj/machinery/atmospherics/unary/portables_connector{ + layer = 2 + }, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/engine/engineering) "kNc" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 6 @@ -89804,20 +89575,20 @@ icon_state = "whiteblue" }, /area/medical/paramedic) -"kOI" = ( -/obj/structure/cable/yellow{ - d1 = 1; +"kRX" = ( +/obj/structure/window/plasmareinforced{ + dir = 1 + }, +/obj/machinery/power/rad_collector{ + anchored = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/visible/scrubbers, +/obj/structure/cable{ d2 = 2; - icon_state = "1-2" + icon_state = "0-2" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/disposalpipe/segment, -/obj/effect/decal/warning_stripes/east, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/turf/simulated/floor/plasteel, -/area/engine/engineering) +/turf/simulated/floor/engine, +/area/engine/supermatter) "kSC" = ( /obj/machinery/atmospherics/unary/portables_connector{ dir = 4 @@ -89836,12 +89607,21 @@ }, /turf/simulated/floor/plating, /area/maintenance/starboard) -"kWU" = ( -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 6; - level = 2 +"kWg" = ( +/obj/machinery/atmospherics/unary/portables_connector{ + dir = 8 + }, +/obj/machinery/portable_atmospherics/canister/nitrogen, +/obj/effect/decal/warning_stripes/yellow/hollow, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/engine/supermatter) +"lcc" = ( +/obj/machinery/atmospherics/pipe/manifold4w/visible, +/turf/simulated/floor/plasteel{ + icon_state = "dark" }, -/turf/simulated/floor/plating, /area/engine/engineering) "lcL" = ( /obj/machinery/portable_atmospherics/canister/air, @@ -89852,6 +89632,10 @@ /area/maintenance/aft{ name = "Aft Maintenance" }) +"len" = ( +/obj/effect/decal/warning_stripes/west, +/turf/simulated/floor/engine, +/area/engine/engineering) "lfz" = ( /obj/effect/decal/warning_stripes/west, /obj/machinery/atmospherics/unary/vent_pump{ @@ -89887,6 +89671,27 @@ icon_state = "redfull" }, /area/security/main) +"lmi" = ( +/obj/structure/lattice/catwalk, +/obj/machinery/atmospherics/pipe/simple/visible/yellow{ + dir = 10 + }, +/turf/space, +/area/space/nearstation) +"lpU" = ( +/obj/machinery/atmospherics/pipe/simple/visible/red{ + dir = 2 + }, +/obj/effect/decal/warning_stripes/southeast, +/turf/simulated/floor/engine, +/area/engine/engineering) +"lwo" = ( +/obj/effect/decal/warning_stripes/east, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/turf/simulated/floor/plasteel, +/area/engine/engineering) "lCt" = ( /obj/structure/window/reinforced{ dir = 4 @@ -89907,12 +89712,51 @@ }, /turf/simulated/floor/engine, /area/toxins/explab) +"lGk" = ( +/obj/structure/cable/yellow{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/visible/red{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/engine/engineering) +"lGr" = ( +/obj/machinery/atmospherics/binary/pump{ + dir = 8; + name = "Gas to Filter" + }, +/obj/machinery/alarm/engine{ + dir = 4; + pixel_x = -22 + }, +/turf/simulated/floor/engine, +/area/engine/supermatter) "lIR" = ( /turf/simulated/floor/plasteel{ dir = 4; icon_state = "green" }, /area/hydroponics) +"lJX" = ( +/obj/structure/window/plasmareinforced, +/obj/machinery/power/rad_collector{ + anchored = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/visible/supply{ + dir = 1 + }, +/obj/structure/cable, +/turf/simulated/floor/engine, +/area/engine/supermatter) +"lOU" = ( +/obj/machinery/atmospherics/pipe/simple/visible/cyan, +/obj/effect/decal/warning_stripes/west, +/turf/simulated/floor/engine, +/area/engine/engineering) "lPA" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 5 @@ -90007,6 +89851,27 @@ }, /turf/simulated/floor/plating, /area/hallway/secondary/entry) +"miB" = ( +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/effect/decal/warning_stripes/south, +/obj/machinery/atmospherics/pipe/simple/visible/yellow{ + dir = 5; + tag = "icon-intact-y (NORTHWEST)" + }, +/turf/simulated/floor/engine, +/area/engine/engineering) +"moi" = ( +/obj/machinery/atmospherics/trinary/filter/flipped{ + dir = 1; + filter_type = -1 + }, +/obj/effect/decal/warning_stripes/northeast, +/turf/simulated/floor/engine, +/area/engine/engineering) "moJ" = ( /obj/structure/window/reinforced{ dir = 4 @@ -90036,6 +89901,23 @@ /area/medical/research{ name = "Research Division" }) +"mzf" = ( +/obj/structure/window/plasmareinforced{ + dir = 1 + }, +/obj/machinery/power/rad_collector{ + anchored = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/visible/scrubbers{ + dir = 8; + initialize_directions = 11 + }, +/obj/structure/cable{ + d2 = 2; + icon_state = "0-2" + }, +/turf/simulated/floor/engine, +/area/engine/supermatter) "mAt" = ( /obj/structure/cable/yellow{ d1 = 4; @@ -90072,9 +89954,65 @@ /area/toxins/xenobiology{ name = "\improper Secure Lab" }) +"mVG" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/effect/decal/warning_stripes/north, +/obj/machinery/atmospherics/pipe/simple/visible/green{ + dir = 4 + }, +/turf/simulated/floor/engine, +/area/engine/engineering) +"mWL" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/engine/engineering) "mXy" = ( /turf/simulated/floor/mineral/titanium, /area/shuttle/arrival/station) +"mZJ" = ( +/obj/structure/reflector/single{ + anchored = 1; + dir = 8 + }, +/turf/simulated/floor/plating, +/area/engine/engineering) +"naP" = ( +/obj/machinery/atmospherics/pipe/simple/visible/cyan{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 2; + initialize_directions = 11 + }, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/effect/decal/warning_stripes/south, +/turf/simulated/floor/engine, +/area/engine/engineering) "nbq" = ( /obj/structure/cable/yellow{ d1 = 4; @@ -90136,6 +90074,24 @@ icon_state = "redfull" }, /area/security/main) +"nqA" = ( +/obj/machinery/hologram/holopad, +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 10 + }, +/turf/simulated/floor/plasteel, +/area/atmos) +"nss" = ( +/obj/machinery/atmospherics/binary/pump{ + dir = 4; + name = "Cooling Loop Bypass" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/effect/decal/warning_stripes/northwestcorner, +/turf/simulated/floor/engine, +/area/engine/engineering) "ntG" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable/yellow{ @@ -90190,6 +90146,22 @@ /area/construction/hallway{ name = "\improper MiniSat Exterior" }) +"nEQ" = ( +/obj/machinery/atmospherics/binary/pump/on{ + dir = 1; + name = "Cooling Loop to Gas" + }, +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/effect/decal/warning_stripes/southeast, +/obj/machinery/atmospherics/pipe/simple/visible/yellow{ + dir = 4 + }, +/turf/simulated/floor/engine, +/area/engine/engineering) "nIZ" = ( /obj/docking_port/stationary{ dir = 8; @@ -90230,6 +90202,22 @@ icon_state = "dark" }, /area/crew_quarters/courtroom) +"nMx" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/simple/visible/yellow{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/visible/yellow, +/turf/space, +/area/space/nearstation) +"nMC" = ( +/turf/simulated/wall/r_wall, +/area/storage/secure) +"nRh" = ( +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/engine/engineering) "nUW" = ( /obj/structure/cable/yellow{ d1 = 4; @@ -90286,6 +90274,22 @@ }, /turf/simulated/floor/plating, /area/maintenance/starboard) +"ogE" = ( +/obj/machinery/door/airlock/engineering/glass{ + name = "Supermatter Engine Room"; + req_access_txt = "10"; + req_one_access_txt = "0" + }, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/visible/red{ + dir = 4 + }, +/turf/simulated/floor/engine, +/area/engine/engineering) "ogV" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 4 @@ -90308,6 +90312,14 @@ /area/toxins/xenobiology{ name = "\improper Secure Lab" }) +"ojl" = ( +/obj/machinery/atmospherics/trinary/filter/flipped{ + dir = 1; + filter_type = 2 + }, +/obj/effect/decal/warning_stripes/east, +/turf/simulated/floor/engine, +/area/engine/engineering) "okl" = ( /obj/effect/landmark/start{ name = "Cook" @@ -90339,10 +90351,6 @@ icon_state = "purplecorner" }, /area/hallway/primary/aft) -"oAG" = ( -/obj/effect/spawner/airlock/w_to_e, -/turf/simulated/wall, -/area/engine/engineering) "oBY" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 1 @@ -90393,6 +90401,11 @@ }, /turf/simulated/floor/plating, /area/maintenance/starboard) +"oOs" = ( +/obj/machinery/atmospherics/pipe/simple/visible/cyan, +/obj/effect/decal/warning_stripes/yellow, +/turf/simulated/floor/engine, +/area/engine/engineering) "oOT" = ( /obj/machinery/atmospherics/unary/vent_pump{ dir = 1; @@ -90410,6 +90423,10 @@ /area/medical/medbay2{ name = "Medbay Storage" }) +"oTM" = ( +/obj/structure/sign/fire, +/turf/simulated/wall/r_wall, +/area/engine/supermatter) "oUC" = ( /obj/structure/cable/yellow{ d1 = 1; @@ -90422,6 +90439,14 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel, /area/hallway/primary/aft) +"oWm" = ( +/obj/structure/cable/yellow{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/plating, +/area/engine/engineering) "pad" = ( /obj/structure/cable/yellow{ d1 = 1; @@ -90450,6 +90475,15 @@ /area/toxins/xenobiology{ name = "\improper Secure Lab" }) +"pcW" = ( +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/effect/decal/warning_stripes/southwest, +/turf/simulated/floor/engine, +/area/engine/engineering) "pdC" = ( /obj/structure/cable/yellow{ d1 = 1; @@ -90477,10 +90511,23 @@ /area/medical/research{ name = "Research Division" }) +"peo" = ( +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/simple/visible/yellow, +/turf/space, +/area/space) "pep" = ( /obj/effect/spawner/airlock/s_to_n, /turf/simulated/wall, /area/maintenance/starboard) +"peO" = ( +/obj/machinery/atmospherics/pipe/simple/visible/yellow, +/obj/machinery/atmospherics/binary/pump{ + dir = 4; + name = "Mix to Engine" + }, +/turf/simulated/floor/plasteel, +/area/atmos) "pkf" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -90503,6 +90550,23 @@ /area/toxins/mixing{ name = "\improper Toxins Lab" }) +"plu" = ( +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 6 + }, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/engine/engineering) +"pmh" = ( +/obj/machinery/atmospherics/pipe/manifold/visible{ + dir = 2 + }, +/obj/machinery/meter, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/engine/engineering) "poN" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/wood, @@ -90524,6 +90588,11 @@ /area/hallway/secondary/exit{ name = "\improper Departure Lounge" }) +"pvv" = ( +/obj/machinery/atmospherics/pipe/simple/visible/cyan, +/obj/effect/decal/warning_stripes/southwest, +/turf/simulated/floor/engine, +/area/engine/engineering) "pzX" = ( /obj/effect/decal/warning_stripes/south, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -90555,12 +90624,27 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel, /area/security/armoury) +"pKs" = ( +/obj/machinery/atmospherics/pipe/simple/visible/universal{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/engine/engineering) "pMx" = ( /obj/effect/spawner/airlock/w_to_e, /turf/simulated/wall, /area/maintenance/aft{ name = "Aft Maintenance" }) +"pNG" = ( +/obj/machinery/atmospherics/pipe/simple/visible, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/engine/engineering) "pOV" = ( /obj/effect/decal/warning_stripes/south, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -90570,6 +90654,16 @@ /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; @@ -90589,6 +90683,32 @@ /area/maintenance/aft{ name = "Aft Maintenance" }) +"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) +"pUc" = ( +/obj/machinery/atmospherics/pipe/simple/heat_exchanging, +/obj/structure/lattice, +/turf/space, +/area/space/nearstation) +"pUq" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/cyan{ + dir = 8; + initialize_directions = 11; + level = 2 + }, +/obj/effect/decal/warning_stripes/west, +/turf/simulated/floor/engine, +/area/engine/engineering) "pXI" = ( /obj/structure/cable/yellow{ d1 = 1; @@ -90652,6 +90772,9 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plasteel, /area/security/brig) +"qpO" = ( +/turf/simulated/wall, +/area/engine/equipmentstorage) "qsd" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -90670,6 +90793,16 @@ }, /turf/simulated/floor/plasteel, /area/assembly/robotics) +"qtt" = ( +/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ + dir = 5; + icon_state = "intact"; + tag = "icon-intact (NORTHEAST)" + }, +/obj/structure/lattice, +/obj/structure/lattice/catwalk, +/turf/space, +/area/space/nearstation) "qtw" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 10 @@ -90679,6 +90812,18 @@ icon_state = "neutralcorner" }, /area/hallway/primary/aft) +"qxn" = ( +/obj/machinery/alarm{ + dir = 1; + pixel_y = -22 + }, +/obj/machinery/atmospherics/pipe/simple/visible/yellow{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/engine/engineering) "qAm" = ( /obj/structure/window/reinforced{ dir = 8 @@ -90764,6 +90909,19 @@ /area/toxins/misc_lab{ name = "\improper Research Testing Range" }) +"qHS" = ( +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/obj/machinery/disposal{ + pixel_x = 2; + pixel_y = 2 + }, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "yellowcorner" + }, +/area/engine/break_room) "qQy" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -90779,6 +90937,13 @@ }, /turf/simulated/floor/plating, /area/maintenance/starboard) +"qWn" = ( +/obj/machinery/atmospherics/pipe/simple/visible/red{ + dir = 2 + }, +/obj/effect/decal/warning_stripes/east, +/turf/simulated/floor/engine, +/area/engine/engineering) "qYF" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 5; @@ -90786,6 +90951,17 @@ }, /turf/simulated/floor/bluegrid, /area/turret_protected/ai_upload) +"raV" = ( +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/engine/engineering) "rdz" = ( /obj/item/twohanded/required/kirbyplants{ icon_state = "plant-06"; @@ -90804,6 +90980,10 @@ /area/hallway/secondary/entry{ name = "Arrivals" }) +"riM" = ( +/obj/effect/decal/warning_stripes/northwest, +/turf/simulated/floor/plasteel, +/area/engine/equipmentstorage) "rjU" = ( /obj/structure/window/reinforced{ dir = 1; @@ -90819,6 +90999,24 @@ /area/construction/hallway{ name = "\improper MiniSat Exterior" }) +"rlJ" = ( +/obj/machinery/atmospherics/pipe/manifold/visible/cyan{ + level = 2 + }, +/obj/machinery/light{ + dir = 2 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/effect/decal/warning_stripes/south, +/turf/simulated/floor/engine, +/area/engine/engineering) "rpg" = ( /obj/structure/lattice/catwalk, /obj/structure/cable{ @@ -90846,6 +91044,22 @@ }, /turf/simulated/floor/plasteel, /area/engine/break_room) +"rsT" = ( +/obj/machinery/atmospherics/binary/pump{ + name = "Mix to Gas" + }, +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/effect/decal/warning_stripes/north, +/turf/simulated/floor/engine, +/area/engine/engineering) +"rwh" = ( +/obj/machinery/power/supermatter_crystal/engine, +/turf/simulated/floor/engine, +/area/engine/supermatter) "rxV" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 6 @@ -90861,13 +91075,6 @@ icon_state = "neutralcorner" }, /area/atmos) -"rzO" = ( -/obj/machinery/portable_atmospherics/canister/air, -/obj/machinery/atmospherics/unary/portables_connector{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/engine/engineering) "rDg" = ( /obj/structure/cable/yellow{ d1 = 4; @@ -90895,6 +91102,19 @@ }, /turf/space, /area/space) +"rDF" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "yellow" + }, +/area/engine/break_room) "rEw" = ( /obj/structure/cable/yellow{ d1 = 1; @@ -90954,6 +91174,10 @@ /area/construction/hallway{ name = "\improper MiniSat Exterior" }) +"rNt" = ( +/obj/effect/decal/warning_stripes/south, +/turf/simulated/floor/plasteel, +/area/engine/equipmentstorage) "rOw" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 8 @@ -90983,6 +91207,18 @@ icon_state = "neutralcorner" }, /area/hallway/primary/port) +"rRM" = ( +/obj/effect/spawner/window/reinforced/plasma, +/obj/structure/cable/yellow{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/engine, +/area/engine/engineering) "rTO" = ( /obj/docking_port/stationary{ dir = 2; @@ -90995,6 +91231,21 @@ }, /turf/space, /area/space) +"rYj" = ( +/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ + dir = 9 + }, +/obj/structure/lattice, +/turf/space, +/area/space/nearstation) +"rYO" = ( +/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ + dir = 4 + }, +/obj/structure/lattice, +/obj/structure/lattice/catwalk, +/turf/space, +/area/space/nearstation) "say" = ( /obj/structure/window/reinforced, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -91066,6 +91317,23 @@ /area/medical/research{ name = "Research Division" }) +"ssZ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/floor/plating, +/area/engine/engineering) +"swl" = ( +/obj/machinery/atmospherics/pipe/simple/visible/yellow{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/engine/engineering) "szt" = ( /obj/machinery/atmospherics/unary/vent_pump{ dir = 8; @@ -91080,6 +91348,9 @@ }, /turf/simulated/floor/wood, /area/security/vacantoffice) +"sBY" = ( +/turf/simulated/floor/plating, +/area/storage/secure) "sDC" = ( /obj/docking_port/stationary/whiteship{ dir = 8; @@ -91180,6 +91451,10 @@ }, /turf/simulated/floor/plasteel, /area/security/brig) +"tbK" = ( +/obj/effect/decal/warning_stripes/west, +/turf/simulated/floor/plasteel, +/area/engine/equipmentstorage) "tca" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -91204,6 +91479,13 @@ icon_state = "dark" }, /area/chapel/main) +"tgE" = ( +/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ + dir = 10 + }, +/obj/structure/lattice, +/turf/space, +/area/space/nearstation) "thz" = ( /obj/effect/decal/warning_stripes/north, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -91219,6 +91501,37 @@ }, /turf/simulated/floor/plasteel, /area/construction) +"tpg" = ( +/obj/machinery/firealarm{ + pixel_y = 29 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/engine/engineering) +"tvk" = ( +/obj/machinery/atmospherics/pipe/simple/visible/green{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/effect/decal/warning_stripes/north, +/turf/simulated/floor/engine, +/area/engine/engineering) "tvn" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 9; @@ -91228,6 +91541,12 @@ icon_state = "grimy" }, /area/security/detectives_office) +"tvr" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/turf/simulated/floor/plating, +/area/engine/engineering) "twD" = ( /obj/structure/disposalpipe/segment{ dir = 2; @@ -91237,6 +91556,25 @@ /area/maintenance/fpmaint2{ name = "Port Maintenance" }) +"tAn" = ( +/obj/machinery/atmospherics/pipe/simple/visible/green{ + dir = 4 + }, +/obj/machinery/light{ + dir = 1; + on = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/effect/decal/warning_stripes/north, +/turf/simulated/floor/engine, +/area/engine/engineering) "tEL" = ( /obj/structure/cable/yellow{ d1 = 1; @@ -91272,6 +91610,20 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plasteel, /area/hallway/primary/aft) +"tSX" = ( +/obj/structure/lattice, +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/simple/visible/yellow{ + dir = 4 + }, +/turf/space, +/area/space/nearstation) +"tVw" = ( +/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{ + dir = 5 + }, +/turf/simulated/wall/r_wall, +/area/engine/supermatter) "tWl" = ( /obj/effect/spawner/window/reinforced, /obj/effect/spawner/airlock/e_to_w, @@ -91279,6 +91631,20 @@ /area/maintenance/aft{ name = "Aft Maintenance" }) +"tZI" = ( +/obj/machinery/atmospherics/unary/outlet_injector{ + frequency = 1441; + icon_state = "on"; + id = "engine-waste_out"; + name = "engine outlet injector"; + on = 1; + volume_rate = 200 + }, +/turf/simulated/floor/plating, +/area/engine/engineering) +"uaQ" = ( +/turf/simulated/wall, +/area/engine/mechanic_workshop) "ueD" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 8 @@ -91374,6 +91740,13 @@ /area/maintenance/fpmaint2{ name = "Port Maintenance" }) +"uLE" = ( +/obj/structure/reflector/single{ + anchored = 1; + dir = 1 + }, +/turf/simulated/floor/plating, +/area/engine/engineering) "uMx" = ( /obj/structure/cable/yellow{ d1 = 1; @@ -91445,6 +91818,15 @@ icon_state = "dark" }, /area/crew_quarters/courtroom) +"vfv" = ( +/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/heat_exchanging, +/obj/structure/lattice, +/obj/structure/lattice/catwalk, +/turf/space, +/area/space/nearstation) "vgP" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -91461,6 +91843,27 @@ }, /turf/space, /area/space) +"vjL" = ( +/obj/effect/spawner/window/reinforced/plasma, +/turf/simulated/floor/engine, +/area/engine/supermatter) +"vmT" = ( +/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ + dir = 6; + icon_state = "intact"; + tag = "icon-intact (SOUTHEAST)" + }, +/obj/structure/lattice, +/obj/structure/lattice/catwalk, +/turf/space, +/area/space/nearstation) +"vny" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/effect/decal/warning_stripes/west, +/turf/simulated/floor/engine, +/area/engine/engineering) "vtP" = ( /obj/machinery/conveyor/west{ id = "garbage" @@ -91476,6 +91879,14 @@ icon_state = "whitebluefull" }, /area/medical/reception) +"vwA" = ( +/obj/machinery/atmospherics/pipe/simple/visible/cyan, +/obj/machinery/light{ + dir = 8 + }, +/obj/effect/decal/warning_stripes/west, +/turf/simulated/floor/engine, +/area/engine/engineering) "vBA" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 9 @@ -91487,6 +91898,16 @@ icon_state = "dark" }, /area/bridge) +"vCR" = ( +/obj/machinery/light{ + dir = 4; + icon_state = "tube1" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/turf/simulated/floor/plating, +/area/engine/engineering) "vDW" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 9 @@ -91544,6 +91965,27 @@ icon_state = "redcorner" }, /area/security/brig) +"vRY" = ( +/obj/effect/spawner/window/reinforced/plasma, +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/engine, +/area/engine/engineering) +"vUD" = ( +/obj/machinery/power/emitter{ + anchored = 1; + dir = 1; + state = 2 + }, +/obj/structure/cable/yellow{ + d2 = 8; + icon_state = "0-8" + }, +/turf/simulated/floor/plating, +/area/engine/engineering) "vVo" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -91598,6 +92040,14 @@ "vZo" = ( /turf/simulated/floor/plating, /area/space/nearstation) +"vZU" = ( +/obj/machinery/atmospherics/unary/thermomachine/freezer{ + dir = 1 + }, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/engine/engineering) "wgm" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -91615,6 +92065,13 @@ icon_state = "whiteblue" }, /area/medical/reception) +"wuZ" = ( +/obj/machinery/light{ + dir = 4; + icon_state = "tube1" + }, +/turf/simulated/floor/plating, +/area/engine/engineering) "wvK" = ( /obj/structure/cable{ d1 = 1; @@ -91640,6 +92097,14 @@ icon_state = "dark" }, /area/medical/morgue) +"wxE" = ( +/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/heat_exchanging, +/obj/structure/lattice, +/turf/space, +/area/space/nearstation) "wyX" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -91653,6 +92118,17 @@ /area/medical/research{ name = "Research Division" }) +"wAP" = ( +/obj/structure/transit_tube{ + icon_state = "D-SW"; + tag = "icon-D-SW" + }, +/obj/structure/lattice, +/obj/machinery/atmospherics/pipe/simple/visible/yellow{ + dir = 6 + }, +/turf/space, +/area/space/nearstation) "wHZ" = ( /obj/effect/spawner/window/reinforced, /obj/structure/sign/securearea{ @@ -91669,6 +92145,14 @@ }, /turf/simulated/floor/plating, /area/maintenance/starboard) +"wLN" = ( +/obj/machinery/atmospherics/trinary/filter/flipped{ + dir = 1; + filter_type = -1 + }, +/obj/effect/decal/warning_stripes/east, +/turf/simulated/floor/engine, +/area/engine/engineering) "wRS" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 9 @@ -91786,6 +92270,16 @@ }, /turf/simulated/floor/carpet, /area/library) +"xyA" = ( +/obj/machinery/atmospherics/pipe/simple/visible/cyan, +/obj/machinery/atmospherics/pipe/simple/visible/yellow{ + dir = 4; + level = 2 + }, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/atmos) "xyZ" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/carpet, @@ -91802,6 +92296,14 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plasteel, /area/hallway/primary/aft) +"xDw" = ( +/obj/effect/decal/warning_stripes/east, +/obj/machinery/meter, +/obj/machinery/atmospherics/pipe/manifold/visible/red{ + dir = 8 + }, +/turf/simulated/floor/engine, +/area/engine/engineering) "xEi" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 10 @@ -91824,6 +92326,30 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/plating, /area/maintenance/starboard) +"xHf" = ( +/obj/effect/decal/warning_stripes/southeast, +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/plasteel, +/area/engine/engineering) +"xHU" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/effect/decal/warning_stripes/south, +/obj/machinery/atmospherics/pipe/simple/visible/yellow{ + dir = 4 + }, +/turf/simulated/floor/engine, +/area/engine/engineering) "xJS" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -91839,6 +92365,14 @@ icon_state = "neutralcorner" }, /area/hallway/primary/central) +"xLf" = ( +/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ + dir = 10 + }, +/obj/structure/lattice, +/obj/structure/lattice/catwalk, +/turf/space, +/area/space/nearstation) "xOM" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -91891,10 +92425,43 @@ icon_state = "floorgrime" }, /area/security/permabrig) +"xYW" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/turf/simulated/floor/plating, +/area/engine/engineering) "xZq" = ( /obj/effect/spawner/window/reinforced, /turf/simulated/floor/plating, /area/solar/starboard) +"yaq" = ( +/obj/machinery/power/emitter{ + anchored = 1; + dir = 1; + state = 2 + }, +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/yellow{ + d2 = 8; + icon_state = "0-8" + }, +/turf/simulated/floor/plating, +/area/engine/engineering) +"yeW" = ( +/obj/structure/sign/securearea{ + desc = "A warning sign which reads 'RADIOACTIVE AREA'"; + icon_state = "radiation"; + name = "RADIOACTIVE AREA"; + pixel_x = 0; + pixel_y = 0 + }, +/turf/simulated/wall/r_wall, +/area/engine/supermatter) "yij" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -130545,23 +131112,23 @@ asI aoG dHr asI -axh -axh -axh -axh -axh -axh -axh -axh -axh -axh -axh -axh -axh -axh -axh -axh -axh +cwA +cwA +cwA +cwA +cwA +cwA +nMC +nMC +nMC +nMC +nMC +nMC +aCg +aCg +aCg +aCg +aCg bam bam bam @@ -130802,23 +131369,23 @@ asJ aoG dHr arr -axh +cwA aHH aIV aJI aJT aLq -aCg +nMC aNS aNT aQS aQS -aCg +nMC aWN aYE aZI aYV -bam +aCg bdE bdy beI @@ -131059,23 +131626,23 @@ awL ayo aBX asJ -axh +cwA ajS -aHa -aIA -aJL +riM +tbK +hHE aLp -aCg +nMC aNT aNT aQS aSg -aCg +nMC aUL aYD aXx aYU -bam +aCg bfd bdz beJ @@ -131316,23 +131883,23 @@ asJ aoG dHr asI -axh +cwA aIz -aHg +dom aIw -aJO +rNt aLu -aCg +nMC aNU aPl aQT aSh -aCg +nMC aWX aYG aXF aYU -bam +aCg bbK bdz beK @@ -131573,23 +132140,23 @@ aoG aoG dHr aDa -axh +cwA akP -aHg -ccH +dom +aIw aJM aLr -aCg +nMC aNV -aOd -aOd -aSi -aCg +sBY +sBY +sBY +nMC aST aUK aZM aST -bam +aCg bam bdA bmN @@ -131830,18 +132397,18 @@ ayv xGP qQy dgI -axh +cwA aIS aIv aID aJQ aLR -aCg -aCg +nMC +nMC bXu bXu -aCg -aCg +nMC +nMC aVg aYQ aXQ @@ -132087,12 +132654,12 @@ aoG aoG aBZ axh -axh -aFR +cwA +qpO aCM aJR aCM -aFR +qpO aFR aPK aHa @@ -132343,7 +132910,7 @@ buC bZJ asJ aBW -axh +aCg aEA aGc aIA @@ -132600,13 +133167,13 @@ aoG aoG aoG dgE -axh +aCg aEA aHg aHc aIB -aMF -aLt +ccH +ccH ccH ccH aPo @@ -132857,20 +133424,20 @@ ayo ayr atA aCa -axh +aCg aFM -aHg +jPv bCj aMX -aLs -kOI -jZt -aOv +aPp +aPp +aPp +aPp aPp aSE -jZt +aPp aUR -jZt +aPp aZc ccz baw @@ -133112,11 +133679,11 @@ asJ asJ aoG aAI -axh +aCg aEx -axh +aCg aGb -aHg +kxf bAL aIF aJU @@ -133124,13 +133691,13 @@ aLU aQR aOg aUh -aSn -aVN +iIk +baB aWp aVh aYW -ccH -aJO +lwo +xHf bcq aFR bho @@ -133146,7 +133713,7 @@ bsC bqS bxm bjN -bAO +buz bCM bCM bCM @@ -133369,26 +133936,26 @@ avD aoG aoG azs -axh +aCg aEy aEz -aFN aHg -bAL -aIF -aJZ +iof aCg +vRY +aJZ +aJb aCg alQ -aCg +aJb aPL +aJb aCg aCg -aJZ aZe -ccH -baA -bat +dMG +vRY +aCg aFR aFR aFR @@ -133628,32 +134195,32 @@ ayN ayI amk aCd -aIA aEE aPn -bAL -aIF +iof +aCg +hAg aJV -aCg -aQZ -aTl -aUF +len +len +len +len bEL -aWb -aCg -aVi +len +len +len aZd -ccH -aQU -aqe -aqv -aFR +vny +pcW +aCg ayE aAO aHw -baE +hEA bhZ -bnz +baE +iNu +qHS dfz bqT bsD @@ -133897,22 +134464,22 @@ aTJ aPs aVs aWg -aPa +knc aXs aZh bao bbC -bcG -bcp -aFR +aCg azv aAW -aIu +aQF bck +aIu +rDF bgE bnC dfB -bpn +dgL bpn aZo bxd @@ -134143,33 +134710,33 @@ azn amk aCf aDw -aGe -aGd -aIW -aLn +baB +aSn +aJb +aLw aMQ aNd -aRa -aOc +aNd +kez aPt aRb aTR -aNd +yeW aXo aZg aZO -baB -bcC -bft -aFR +miB +aCg azJ aHl bfr -bjO -bhZ -bnD +hIG +aFR +uaQ +bli +bli dfA -dgL +iZY bvt bpn bqU @@ -134397,34 +134964,34 @@ avI amk amk bqV -bZV cbc +aCg aEn aCg aHi -aJo -aLE -aLE aCg -aRr -aOd +aLw +aMQ +kWg +kWg +kez aPu aRc -aTR +lGr +kez +aLE +aLE +ebM +iSH aCg -aLE -aLE -aLE -aHi -aCg -aEn aFR aFR aFR aFR -aFR -aFR -bli +uaQ +pSk +dfg +dfg blj dgO bjN @@ -134654,36 +135221,36 @@ avH axM amk aAK -bZV +cbc aCh aEd -aCg +plu aFY aOa -aOa -aOa -aDL +rsT +rlJ +gpj aRa aOe aPv aRd -aTR -aDL -aOa -bMO -aOa +huo +aOe +tVw +gpj +tAn ccu aCg bfz -aTR -beU -bgG -aCh +pUc +pUc +kKa +anq deW -dff -dfm +dfg +dfg bsZ -bnt +anq bnt bxf jdX @@ -134911,36 +135478,36 @@ awU ayz amk aCb -axh -aCg -aEn -aCg aCg +kLs +pNG +lcc +vZU +aJb +aLw aDL -aDL -aDL -aDL +kGw aRs aTK aRf aSo aTV -aDL -aDL -aDL -aDL -aCg -aCg -aEn -aCg -aCg -aOd +mzf +dqm +kGw +mVG +ccu aCg +aKT +bfz +pUc +rYj +anq avP dfh dft dfI -bnt +anq bvu bly bxg @@ -135168,31 +135735,31 @@ amk amk amk azy -bZV +cbc aCD -aES -abq +pNG +pmh aFZ -arA +aJb aMI -aDL -aDL -aDL -aDL -aUK -aDL -aDL -aDL -aDL -beZ -arA -aaa -abq -aGT -bdG -aCg -aOd +naP +kGw +ebV +lJX +aRf +rwh +aTV +kRX +ebV +kGw +tvk +xHU aCg +aKT +tgE +pUc +kKa +anq dfa dfg dfq @@ -135212,7 +135779,7 @@ bMd bNa bPz bRf -bSR +iNI bUv bSP bSP @@ -135425,33 +135992,33 @@ ape arr ayx azy -axh -aDf -aDi -abq -abq -aJx -aLN -aLN -aLN -aLN -aLN -aUM -aLN -aLN -aLN -aLN +aCg +kLs +pNG +lcc +vZU +aJb +aLw aLN +kGw +ebV +gfB +aRf +aSo +aTV +flr +ebV +kGw dea -abq -abq -aDi -aDf +ccu aCg -aOd -aCg -dfc -dfg +aKT +bfz +pUc +rYj +anq +anq +pPA dfx dfK anq @@ -135469,8 +136036,8 @@ bMe bNc bIp bIn -bSS -bGG +nqA +hnC bYk bYm bYk @@ -135682,32 +136249,32 @@ ans ans asI azy -axh +aCg aDf aDi -aDi -aaa +fmP +aFY +aOa +edK +dXb +gpj +kez +kez +oTM +vjL +hWr +kez +kez +gpj aJt -arA -arA -arA -arA -arA -arA -arA -arA -arA -arA -arA -aJt -aaa -aDi -aDi -aDf -aCg -aOd -aCg -dfb +kBa +gdM +gyy +xLf +qtt +vmT +qtt +anq dfj dfu dfJ @@ -135727,7 +136294,7 @@ bNa bPA bRg bRg -bRg +peO bVS bRg bRg @@ -135939,33 +136506,33 @@ arT ans azr azy -axh -aDh -aDj -aFS -abq -aJt -arA -aJW -aaa -aaa -aJW -aaa -aaa -aaa -aaa -aJW -arA -aJt -abq -baG -bbU -bhA aCg -aOd aCg -dfd -dfk +aCg +aCg +aHi +aCg +gsr +aJW +pUq +lOU +gqj +pvv +oOs +iAT +vwA +fHC +len +nss +ccu +aJb +abq +bfz +wxE +wxE +gyy +anq +pRy dfy btc anq @@ -135984,7 +136551,7 @@ bNg bQR bSs bUt -bUw +fga bXj bYc bZK @@ -136197,31 +136764,31 @@ axd aGW bal axh -aDf -aWz -aEF -aaa +axh +abq +aef +tZI aJJ aPy -aaa -aaa -aaa -abq -aaa +xDw +wLN +qWn +wLN +lpU aRe -aaa -aaa -aaa +moi +qWn +ojl ddZ bap -aaa -bax -aDi -aDf -aCg -aOd -aCg -asX +nEQ +gdM +kKa +tgE +wxE +wxE +qtt +anq dfk deZ bkV @@ -136241,7 +136808,7 @@ bNe bPC bRi bSU -bRi +xyA bPC bRi bSU @@ -136454,31 +137021,31 @@ ayA azu asJ axh -aDk -aEW -aDi -aaa -aJt -arA -aaa -aaa +axh abq -abq -abq -abq -abq -aaa -aaa -arA -aJt -aaa -aDi -aCD -aFk +aef +aef aCg -aOd +rRM +ogE +aJb aCg -dfe +aCg +aJb +aJb +aJb +aCg +aCg +aJb +hqN +ibi +aCg +aKT +bfz +wxE +wxE +gyy +anq dfk aoN dgK @@ -136498,7 +137065,7 @@ bzL bHG bzL bIt -bzL +kkt bHG bzL bIt @@ -136712,50 +137279,50 @@ buC aCc axh axh -aDf -aDi -aaa -aJt -arA -aaa -aaa -abq -aOm -aRh -aSp abq abq -aJW -arA -aJt -aaa -aDi -aDf -aCg +abq aCg +mWL +jUV aOd +gYM +nRh +nRh +aSp +jbk +nRh +gYM +aOd +gZY +hgN aCg +rYO +xLf +vfv +vfv +qtt anq dfl dfl azD anq -bsL +wAP bwF bsN -aaa -abq -abq -abq -abq -bIu -abq -bMj -abq -bIu -abq -bMj -abq +peo +cmL +cmL +cmL +cmL +nMx +cmL +kto +cmL +nMx +cmL +kto +ktv bIu abq bMj @@ -136969,35 +137536,35 @@ cbX asJ arr axh -aFa -aDi -abq -aJJ -aPy aaa aaa -abq -aPd -csp -aTI -abq aaa -aaa -ddZ -bap -aaa -aDi -bfB aCg -azM -aOd +tpg +lGk +raV +nRh +nRh +nRh +nRh +nRh +nRh +nRh +oWm +ssZ +qxn aCg +rYO +vmT +vfv +vfv +gyy anq abq abq abq anq -abq +bIu bwL abq abq @@ -137225,36 +137792,36 @@ bnI asJ asJ axh +axh +aaa +aaa +aaa aCg -aDf -aDi -abq -aJt -arA -aJW +mWL +pKs aLx -abq -aOq -aSk -aTG -abq -aaa -aaa -arA -aJt -abq -aDi -aDf +nRh +nRh +nRh +aSp +nRh +nRh +nRh +yaq +xYW +hfb aCg -aCg -kWU -rzO -aDL +aKT +tgE +wxE +wxE +qtt +aaa aaa aaa aaa abq -aaa +bIu bwL aaa aaa @@ -137482,36 +138049,36 @@ axh azf dAH axh -aCD -aFk -aDi -aaa -aJt -arA aaa aaa -abq -abq -abq -abq -abq aaa aaa -arA -aJt -aaa -aDi -aDm -bdG aCg -bjT -aFR -aFR +tvr +vCR +hdL +aOd +aOd +uLE +aCg +mZJ +aOd +aOd +vUD +wuZ +swl +aCg +aKT +bfz +wxE +wxE +gyy aaa aaa aaa -abq aaa +aaa +bIu bwL aaa aaa @@ -137739,36 +138306,36 @@ aoG aoG asJ uJn -aDf -aWz -aEG aaa -aJJ -aPy -aaa -aaa -aaa -aOj aaa abq -aaa -aaa -aaa -ddZ -bap -aaa -aDi -aDi -aDf +abq aCg -aOd -oAG +aCg +aCg +aCg +aCg +aCg +aCg +aCg +aCg +aCg +aCg +aCg +aCg +evR +aCg +aKT +tgE +wxE +wxE +qtt aaa aaa aaa aaa -abq -abq +aaa +tSX bwM abq abq @@ -137996,36 +138563,36 @@ aoG aoG asJ axh -aDl -aDj -aFS abq -aJt -arA -aJW +abd +abd aaa aaa aaa aaa -aJW -aaa -aaa -aJW -arA -aJt abq +aaa +aaa +aaa +aaa +abq +aaa +aaa +abq +aef +lmi baG -bbU +rYO bhA -aCg -aOd -aFR +xLf +gyy +rYO aaa -fnC -fnC -abq -abq aaa +aaa +aaa +abq +bIu bwU aaa abq @@ -138253,36 +138820,36 @@ aaa aoG asJ axh -aDf -aDi -aDi aaa -aJt -arA -arA -aTM -arA -arA -aTM -arA -arA -aTM -arA -arA -aJt +abd +bre +bre +aaa +aaa +aaa abq -aDi -aDi -aDf -aCg -aOd -aFR aaa aaa aaa aaa abq aaa +aaa +abq +aaa +aaa +bIu +tgE +pUc +pUc +pUc +rYj +aaa +aaa +aaa +aaa +aaa +bIu bwL aaa abq @@ -138510,36 +139077,36 @@ aaa abq aef aCj -aDm -aFm -aDC -aWA -aKa -aLN -aLN -aPg -aLN -aLN -aPg -aLN -aLN -aPg -aLN -aLN -dec -aWA -bdp -aFm -aFk -aNd -aef -abq -abq -abq -fBB -fBB -abq aaa +abd +abd +bre +abd +abq +arB +arB +arB +arB +arB +arB +arB +arB +arB +arB +arB +arB +bdp +cmL +cmL +cmL +cmL +cmL +cmL +cmL +cmL +cmL +cmL +ktv bwL aaa abq @@ -138766,32 +139333,32 @@ abq abq abq aef +axh +aaa +aaa +abd +abd +abd +aaa +abd +bre bre -aCg -aDn -aGT -aEi aWA +bre +bre +bre +bre aWA -aIf -aIf -aWA -aWA -aIf -aWA -aWA -aIf -aIf -aWA -aWA -bbI -aES -aDn -aCg -aCg -aef -aaa +bre +bre +arB aaa +arB +abd +arB +abd +abd +abd aaa aaa aaa @@ -139024,34 +139591,34 @@ aaa aaa aaa abq -abq -aCg -aCg -aGT -aKp -aLO -aKp -aKp -aKp -aTO -aLO -aKp -aKp -aKp -aKp -aLO -aKp -aES -aCg -aCg -abq -abq aaa aaa aaa aaa aaa aaa +arB +arB +arB +arB +arB +arB +arB +arB +bFb +arB +arB +arB +abq +arB +bre +aWA +bre +bre +abd +aaa +aaa +aaa abq aaa bwL @@ -139282,33 +139849,33 @@ aaa aaa aaa aaa -abq -aCg -aCg -aCg -aCg -aCg -aCg -aCg -aCg -aCg -aCg -aCg -aCg -aCg -aCg -aCg -aCg -aCg -abq -aaa -abf aaa aaa aaa aaa aaa aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +arB +abd +arB +abd +abd +abd +aaa +aaa +aaa abq aaa bwL @@ -139540,23 +140107,23 @@ aaa aaa aaa aaa -aDo -aDo -aDo -aDo -aNd -aDo -aDo -aDo -aDo -aDo -aDo -aDo -aNd -aDo -aDo -aDo -aDo +aaa +aaa +aaD +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +abq abq aaa abq @@ -139797,22 +140364,22 @@ aaa aaa aaa aaa -abq -abq -abq -abq -abq -abq -abq -abq -abq -abq -abq -abq -abq -abq -abq -abq +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa +aaa abq abq aaa @@ -140058,15 +140625,15 @@ aaa aaa aaa aaa -abq -aaa -aaa -abq aaa aaa aaa aaa -abq +aaa +aaa +aaa +aaa +aaa aaa aaa aaa @@ -140315,7 +140882,6 @@ aaa aaa aaa aaa -abq aaa aaa aaa @@ -140323,7 +140889,8 @@ aaa aaa aaa aaa -abq +aaa +aaa aaa aaa aaa @@ -140572,7 +141139,6 @@ aaa aaa aaa aaa -abq aaa aaa aaa @@ -140580,7 +141146,8 @@ aaa aaa aaa aaa -abq +aaa +aaa aaa aaa aaa @@ -140837,7 +141404,7 @@ aaa aaa aaa aaa -abq +aaa aaa aaa aaa @@ -141599,7 +142166,7 @@ aaa aaa aaa aaa -aaD +aaa aaa aaa aaa diff --git a/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1.dmm b/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1.dmm deleted file mode 100644 index 93415236e34..00000000000 --- a/_maps/map_files/RandomRuins/LavaRuins/lavaland_surface_syndicate_base1.dmm +++ /dev/null @@ -1,9161 +0,0 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"aa" = ( -/turf/template_noop, -/area/template_noop) -"ab" = ( -/turf/simulated/floor/plating/lava/smooth/lava_land_surface, -/area/lavaland/surface/outdoors) -"ac" = ( -/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface, -/area/lavaland/surface/outdoors) -"ad" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/access_button{ - command = "cycle_interior"; - frequency = 1449; - master_tag = "syndicate_base_virology"; - name = "interior access button"; - pixel_x = 25; - pixel_y = -25; - req_access_txt = "150" - }, -/turf/simulated/floor/plasteel/white/side{ - dir = 4 - }, -/area/ruin/unpowered/syndicate_lava_base/virology) -"ae" = ( -/turf/simulated/wall/mineral/plastitanium/nodiagonal, -/area/ruin/unpowered/syndicate_lava_base/testlab) -"af" = ( -/obj/machinery/light/small{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/main) -"ag" = ( -/obj/machinery/alarm/syndicate{ - dir = 4; - pixel_x = -24 - }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/main) -"ah" = ( -/obj/structure/table/wood, -/obj/machinery/chem_dispenser/beer/upgraded{ - dir = 1 - }, -/obj/structure/sign/barsign{ - pixel_y = -32; - req_access = null; - req_access_txt = "0" - }, -/turf/simulated/floor/wood, -/area/ruin/unpowered/syndicate_lava_base/bar) -"ai" = ( -/obj/structure/table/wood, -/obj/machinery/chem_dispenser/soda/upgraded{ - dir = 1 - }, -/turf/simulated/floor/wood, -/area/ruin/unpowered/syndicate_lava_base/bar) -"aj" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/vending/medical/syndicate_access, -/turf/simulated/floor/plasteel/white/side{ - dir = 4 - }, -/area/ruin/unpowered/syndicate_lava_base/virology) -"ak" = ( -/obj/machinery/vending/boozeomat/syndicate_access, -/turf/simulated/wall/mineral/plastitanium/nodiagonal, -/area/ruin/unpowered/syndicate_lava_base/bar) -"al" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/vending/medical/syndicate_access, -/turf/simulated/floor/plasteel/white, -/area/ruin/unpowered/syndicate_lava_base/medbay) -"am" = ( -/obj/effect/decal/cleanable/dirt, -/mob/living/carbon/human/monkey{ - faction = list("neutral","syndicate") - }, -/turf/simulated/floor/plasteel/white/side{ - dir = 9 - }, -/area/ruin/unpowered/syndicate_lava_base/virology) -"an" = ( -/mob/living/carbon/human/monkey{ - faction = list("neutral","syndicate") - }, -/turf/simulated/floor/plasteel/white/side{ - dir = 5 - }, -/area/ruin/unpowered/syndicate_lava_base/virology) -"ao" = ( -/mob/living/carbon/human/monkey{ - faction = list("neutral","syndicate") - }, -/turf/simulated/floor/plasteel/white/side{ - dir = 10 - }, -/area/ruin/unpowered/syndicate_lava_base/virology) -"ap" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/floor/engine, -/area/ruin/unpowered/syndicate_lava_base/testlab) -"aq" = ( -/turf/simulated/floor/engine, -/area/ruin/unpowered/syndicate_lava_base/testlab) -"ar" = ( -/obj/effect/decal/cleanable/dirt, -/mob/living/carbon/human/monkey{ - faction = list("neutral","syndicate") - }, -/turf/simulated/floor/plasteel/white/side{ - dir = 6 - }, -/area/ruin/unpowered/syndicate_lava_base/virology) -"as" = ( -/turf/simulated/wall/mineral/plastitanium/nodiagonal, -/area/ruin/unpowered/syndicate_lava_base/chemistry) -"at" = ( -/obj/effect/spawner/window/plastitanium, -/obj/machinery/door/poddoor{ - id_tag = "lavalandsyndi_chemistry" - }, -/turf/simulated/floor/plating, -/area/ruin/unpowered/syndicate_lava_base/chemistry) -"au" = ( -/obj/structure/bed/roller, -/obj/machinery/iv_drip, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/mob/living/carbon/human/monkey{ - faction = list("neutral","syndicate") - }, -/turf/simulated/floor/plasteel/dark, -/area/ruin/unpowered/syndicate_lava_base/testlab) -"av" = ( -/obj/machinery/light/small, -/obj/structure/bed/roller, -/obj/machinery/iv_drip, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/mob/living/carbon/human/monkey{ - faction = list("neutral","syndicate") - }, -/turf/simulated/floor/plasteel/dark, -/area/ruin/unpowered/syndicate_lava_base/testlab) -"aw" = ( -/obj/machinery/light/small{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating{ - baseturf = /turf/simulated/floor/plating/lava/smooth/lava_land_surface; - oxygen = 14; - nitrogen = 23; - temperature = 300 - }, -/area/ruin/unpowered/syndicate_lava_base/arrivals) -"ax" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" - }, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/virology) -"ay" = ( -/obj/machinery/door/airlock/external{ - frequency = 1449; - id_tag = "syndicate_base_west_north_interior"; - locked = 1; - req_access_txt = "150" - }, -/obj/structure/fans/tiny, -/turf/simulated/floor/plating, -/area/ruin/unpowered/syndicate_lava_base/main) -"az" = ( -/obj/machinery/embedded_controller/radio/airlock/access_controller{ - frequency = 1449; - id_tag = "syndicate_base_west_south"; - pixel_x = -25; - req_access_txt = "150"; - tag_exterior_door = "syndicate_base_west_south_exterior"; - tag_interior_door = "syndicate_base_west_south_interior" - }, -/turf/simulated/floor/plating, -/area/ruin/unpowered/syndicate_lava_base/arrivals) -"aA" = ( -/obj/machinery/light/small{ - dir = 4 - }, -/obj/structure/sign/fire{ - pixel_x = 32 - }, -/obj/structure/closet/emcloset/anchored, -/obj/item/tank/internals/emergency_oxygen/engi, -/obj/item/flashlight/seclite, -/obj/item/clothing/mask/gas, -/obj/structure/sign/vacuum{ - pixel_x = 0; - pixel_y = 32 - }, -/turf/simulated/floor/plating, -/area/ruin/unpowered/syndicate_lava_base/arrivals) -"aB" = ( -/obj/structure/fans/tiny, -/obj/machinery/door/airlock/external{ - frequency = 1449; - id_tag = "syndicate_base_west_north_interior"; - locked = 1; - req_access_txt = "150" - }, -/turf/simulated/floor/plating, -/area/ruin/unpowered/syndicate_lava_base/main) -"aC" = ( -/obj/structure/fans/tiny, -/obj/machinery/door/airlock/external{ - frequency = 1449; - id_tag = "syndicate_base_west_north_exterior"; - locked = 1; - req_access_txt = "150" - }, -/turf/simulated/floor/plating, -/area/ruin/unpowered/syndicate_lava_base/main) -"aD" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/access_button{ - command = "cycle_interior"; - frequency = 1449; - master_tag = "syndicate_base_west_south"; - name = "interior access button"; - pixel_x = 25; - pixel_y = 25; - req_access_txt = "150" - }, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/arrivals) -"aE" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light/small, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/arrivals) -"aF" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/engine, -/area/ruin/unpowered/syndicate_lava_base/testlab) -"aG" = ( -/obj/structure/fans/tiny, -/obj/machinery/door/airlock/external{ - frequency = 1449; - id_tag = "syndicate_base_south_exterior"; - locked = 1; - req_access_txt = "150" - }, -/turf/simulated/floor/plating, -/area/ruin/unpowered/syndicate_lava_base/arrivals) -"aH" = ( -/obj/effect/turf_decal/stripes/corner, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/arrivals) -"aI" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/medical{ - frequency = 1449; - id_tag = "syndicate_base_virology_interior"; - locked = 1; - name = "Virology Lab Interior Airlock"; - req_access_txt = "150" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plasteel/white, -/area/ruin/unpowered/syndicate_lava_base/virology) -"aJ" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/medical{ - frequency = 1449; - id_tag = "syndicate_base_virology_exterior"; - locked = 1; - name = "Virology Lab Exterior Airlock"; - req_access_txt = "150" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/main) -"aK" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/machinery/access_button{ - command = "cycle_exterior"; - frequency = 1449; - master_tag = "syndicate_base_virology"; - name = "exterior access button"; - pixel_x = -25; - pixel_y = 25; - req_access_txt = "150" - }, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/main) -"aL" = ( -/turf/simulated/wall/mineral/plastitanium/explosive, -/area/ruin/unpowered/syndicate_lava_base/testlab) -"aM" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/chem_dispenser/upgraded, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/chemistry) -"aN" = ( -/obj/effect/turf_decal/stripes/line, -/obj/effect/turf_decal/caution/stand_clear{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/access_button{ - command = "cycle_interior"; - frequency = 1449; - master_tag = "syndicate_base_south"; - name = "interior access button"; - pixel_x = 25; - pixel_y = -25; - req_access_txt = "150" - }, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/arrivals) -"aO" = ( -/obj/machinery/door/airlock/external{ - frequency = 1449; - id_tag = "syndicate_base_south_interior"; - locked = 1; - req_access_txt = "150" - }, -/obj/structure/fans/tiny, -/turf/simulated/floor/plating, -/area/ruin/unpowered/syndicate_lava_base/arrivals) -"aP" = ( -/obj/structure/sign/vacuum{ - pixel_x = -32 - }, -/obj/machinery/light/small{ - dir = 8 - }, -/obj/machinery/embedded_controller/radio/airlock/access_controller{ - frequency = 1449; - id_tag = "syndicate_base_south"; - pixel_x = 25; - req_access_txt = "150"; - tag_exterior_door = "syndicate_base_south_exterior"; - tag_interior_door = "syndicate_base_south_interior" - }, -/turf/simulated/floor/plating, -/area/ruin/unpowered/syndicate_lava_base/arrivals) -"aQ" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light/small, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/arrivals) -"aR" = ( -/obj/structure/sign/xeno_warning_mining{ - pixel_x = -32 - }, -/obj/structure/sign/fire{ - pixel_x = 32 - }, -/turf/simulated/floor/plating, -/area/ruin/unpowered/syndicate_lava_base/arrivals) -"aS" = ( -/obj/machinery/access_button{ - command = "cycle_exterior"; - frequency = 1449; - master_tag = "syndicate_base_south"; - name = "exterior access button"; - pixel_x = 20; - pixel_y = 21; - req_access_txt = "150" - }, -/turf/simulated/floor/plating/lava/smooth/lava_land_surface, -/area/lavaland/surface/outdoors) -"aT" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 6 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/access_button{ - command = "cycle_interior"; - frequency = 1449; - master_tag = "syndicate_base_west_north"; - name = "interior access button"; - pixel_x = 25; - pixel_y = -8; - req_access_txt = "150" - }, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/main) -"aU" = ( -/obj/machinery/embedded_controller/radio/airlock/access_controller{ - frequency = 1449; - id_tag = "syndicate_base_west_north"; - pixel_x = -25; - req_access_txt = "150"; - tag_exterior_door = "syndicate_base_west_north_exterior"; - tag_interior_door = "syndicate_base_west_north_interior" - }, -/turf/simulated/floor/plating, -/area/ruin/unpowered/syndicate_lava_base/main) -"aV" = ( -/obj/machinery/light/small{ - dir = 4 - }, -/obj/structure/sign/fire{ - pixel_x = 32 - }, -/obj/structure/closet/emcloset/anchored, -/obj/item/tank/internals/emergency_oxygen/engi, -/obj/item/flashlight/seclite, -/obj/item/clothing/mask/gas, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/structure/sign/vacuum{ - pixel_x = 0; - pixel_y = -32 - }, -/turf/simulated/floor/plating, -/area/ruin/unpowered/syndicate_lava_base/main) -"aW" = ( -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/obj/machinery/door_control{ - id = "lavalandsyndi_arrivals"; - name = "Arrivals Blast Door Control"; - pixel_y = -26; - req_access_txt = "150" - }, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/arrivals) -"aX" = ( -/obj/effect/turf_decal/caution/red{ - dir = 1 - }, -/obj/machinery/light/small{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" - }, -/turf/simulated/floor/plasteel/white/side{ - dir = 4 - }, -/area/ruin/unpowered/syndicate_lava_base/virology) -"aY" = ( -/obj/structure/fans/tiny, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/door/airlock/external{ - frequency = 1449; - id_tag = "syndicate_base_west_north_exterior"; - locked = 1; - req_access_txt = "150" - }, -/turf/simulated/floor/plating, -/area/ruin/unpowered/syndicate_lava_base/main) -"aZ" = ( -/obj/structure/fans/tiny, -/obj/machinery/door/airlock/external{ - frequency = 1449; - id_tag = "syndicate_base_west_south_exterior"; - locked = 1; - req_access_txt = "150" - }, -/turf/simulated/floor/plating, -/area/ruin/unpowered/syndicate_lava_base/arrivals) -"ba" = ( -/obj/machinery/door/airlock/external{ - frequency = 1449; - id_tag = "syndicate_base_west_south_interior"; - locked = 1; - req_access_txt = "150" - }, -/obj/structure/fans/tiny, -/turf/simulated/floor/plating, -/area/ruin/unpowered/syndicate_lava_base/arrivals) -"bb" = ( -/obj/structure/fans/tiny, -/obj/machinery/door/airlock/external{ - frequency = 1449; - id_tag = "syndicate_base_west_south_interior"; - locked = 1; - req_access_txt = "150" - }, -/turf/simulated/floor/plating, -/area/ruin/unpowered/syndicate_lava_base/arrivals) -"bc" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 9 - }, -/obj/effect/mapping_helpers/no_lava, -/obj/machinery/access_button{ - command = "cycle_exterior"; - frequency = 1449; - master_tag = "syndicate_base_west_north"; - name = "exterior access button"; - pixel_x = -21; - pixel_y = 21; - req_access_txt = "150" - }, -/turf/simulated/floor/plating{ - baseturf = /turf/simulated/floor/plating/lava/smooth/lava_land_surface; - oxygen = 14; - nitrogen = 23; - temperature = 300 - }, -/area/lavaland/surface/outdoors) -"bd" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 10 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/embedded_controller/radio/airlock/access_controller{ - frequency = 1449; - id_tag = "syndicate_base_virology"; - pixel_x = -25; - req_access_txt = "150"; - tag_exterior_door = "syndicate_base_virology_exterior"; - tag_interior_door = "syndicate_base_virology_interior" - }, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/main) -"be" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/obj/machinery/power/apc/syndicate{ - dir = 1; - name = "Engineering APC"; - pixel_y = 24 - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/yellow{ - d1 = 0; - d2 = 8; - icon_state = "0-8" - }, -/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{ - dir = 9 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/engineering) -"bf" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/airlock/glass{ - frequency = 1449; - id_tag = "syndicate_base_incinerator_interior"; - locked = 1; - req_access_txt = "150" - }, -/obj/machinery/access_button{ - command = "cycle_interior"; - frequency = 1449; - master_tag = "syndicate_base_incinerator"; - name = "interior access button"; - pixel_x = -25; - pixel_y = 0; - req_access_txt = "150" - }, -/turf/simulated/floor/engine, -/area/ruin/unpowered/syndicate_lava_base/engineering) -"bg" = ( -/obj/machinery/light/small{ - dir = 8 - }, -/turf/simulated/floor/engine, -/area/ruin/unpowered/syndicate_lava_base/engineering) -"bh" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/engine, -/area/ruin/unpowered/syndicate_lava_base/engineering) -"bi" = ( -/obj/machinery/light/small{ - dir = 4 - }, -/obj/machinery/atmospherics/binary/pump{ - name = "Incinerator Input" - }, -/turf/simulated/floor/engine, -/area/ruin/unpowered/syndicate_lava_base/engineering) -"bj" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/airlock/glass{ - frequency = 1449; - id_tag = "syndicate_base_incinerator_exterior"; - locked = 1; - req_access_txt = "150" - }, -/obj/machinery/access_button{ - command = "cycle_exterior"; - frequency = 1449; - master_tag = "syndicate_base_incinerator"; - name = "exterior access button"; - pixel_x = -25; - pixel_y = 0; - req_access_txt = "150" - }, -/turf/simulated/floor/engine, -/area/ruin/unpowered/syndicate_lava_base/engineering) -"bk" = ( -/obj/structure/rack, -/obj/item/flashlight{ - pixel_x = -3; - pixel_y = 3 - }, -/obj/item/flashlight, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/brown{ - dir = 1 - }, -/obj/effect/turf_decal/tile/brown{ - dir = 4 - }, -/obj/machinery/firealarm/syndicate{ - dir = 8; - pixel_x = -26 - }, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/cargo) -"bl" = ( -/obj/effect/turf_decal/stripes/corner, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/cargo) -"bm" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/effect/turf_decal/caution/stand_clear{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/access_button{ - command = "cycle_interior"; - frequency = 1449; - master_tag = "syndicate_base_east"; - name = "interior access button"; - pixel_x = 25; - pixel_y = 25; - req_access_txt = "150" - }, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/cargo) -"bn" = ( -/obj/machinery/door/airlock/external{ - frequency = 1449; - id_tag = "syndicate_base_east_interior"; - locked = 1; - req_access_txt = "150" - }, -/obj/structure/fans/tiny, -/turf/simulated/floor/plating, -/area/ruin/unpowered/syndicate_lava_base/cargo) -"bo" = ( -/obj/structure/sign/vacuum{ - pixel_y = -32 - }, -/obj/machinery/light/small, -/obj/machinery/embedded_controller/radio/airlock/access_controller{ - frequency = 1449; - id_tag = "syndicate_base_east"; - pixel_x = 0; - pixel_y = 25; - req_access_txt = "150"; - tag_exterior_door = "syndicate_base_east_exterior"; - tag_interior_door = "syndicate_base_east_interior" - }, -/turf/simulated/floor/plating, -/area/ruin/unpowered/syndicate_lava_base/cargo) -"bp" = ( -/obj/structure/fans/tiny, -/obj/machinery/door/airlock/external{ - frequency = 1449; - id_tag = "syndicate_base_east_exterior"; - locked = 1; - req_access_txt = "150" - }, -/turf/simulated/floor/plating, -/area/ruin/unpowered/syndicate_lava_base/cargo) -"bq" = ( -/obj/machinery/access_button{ - command = "cycle_exterior"; - frequency = 1449; - master_tag = "syndicate_base_east"; - name = "exterior access button"; - pixel_x = -21; - pixel_y = 21; - req_access_txt = "150" - }, -/turf/simulated/floor/plating/lava/smooth/lava_land_surface, -/area/lavaland/surface/outdoors) -"br" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/trinary/mixer/flipped{ - dir = 8; - node1_concentration = 0.2; - node2_concentration = 0.8; - on = 1; - target_pressure = 4500 - }, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/engineering) -"bs" = ( -/obj/machinery/air_sensor{ - frequency = 1442; - id_tag = "syndie_lavaland_n2_sensor" - }, -/turf/simulated/floor/engine/n2, -/area/ruin/unpowered/syndicate_lava_base/engineering) -"bt" = ( -/obj/machinery/light/small{ - dir = 4 - }, -/turf/simulated/floor/engine/n2, -/area/ruin/unpowered/syndicate_lava_base/engineering) -"bu" = ( -/obj/machinery/atmospherics/unary/vent_pump/siphon/on{ - dir = 8; - frequency = 1442; - id_tag = "syndie_lavaland_n2_out"; - name = "nitrogen out" - }, -/turf/simulated/floor/engine/n2, -/area/ruin/unpowered/syndicate_lava_base/engineering) -"bv" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 10 - }, -/obj/effect/mapping_helpers/no_lava, -/obj/machinery/access_button{ - command = "cycle_exterior"; - frequency = 1449; - master_tag = "syndicate_base_west_south"; - name = "exterior access button"; - pixel_x = -21; - pixel_y = -21; - req_access_txt = "150" - }, -/turf/simulated/floor/plating{ - baseturf = /turf/simulated/floor/plating/lava/smooth/lava_land_surface; - oxygen = 14; - nitrogen = 23; - temperature = 300 - }, -/area/lavaland/surface/outdoors) -"bw" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/structure/bookcase/random, -/turf/simulated/floor/plasteel/dark, -/area/ruin/unpowered/syndicate_lava_base/bar) -"bx" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/obj/machinery/turretid/lethal{ - ailock = 1; - check_synth = 0; - control_area = "Syndicate Lavaland Primary Hallway"; - dir = 1; - faction = "syndicate"; - name = "Base turret controls"; - pixel_y = 30; - req_access = null; - req_access_txt = "150"; - syndicate = 1 - }, -/turf/simulated/floor/redgrid, -/area/ruin/unpowered/syndicate_lava_base/main) -"by" = ( -/obj/machinery/atmospherics/pipe/simple/visible/scrubbers, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/visible/supply, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/engineering) -"bz" = ( -/obj/machinery/atmospherics/pipe/simple/visible/cyan{ - dir = 6; - initialize_directions = 6; - level = 2 - }, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/engineering) -"bA" = ( -/obj/effect/turf_decal/bot, -/obj/machinery/portable_atmospherics/scrubber, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/visible/cyan{ - dir = 4; - level = 2 - }, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/engineering) -"bB" = ( -/obj/effect/spawner/window/plastitanium, -/obj/machinery/atmospherics/pipe/simple/visible/cyan{ - dir = 4; - level = 2 - }, -/turf/simulated/floor/plating, -/area/ruin/unpowered/syndicate_lava_base/engineering) -"bC" = ( -/obj/machinery/atmospherics/pipe/simple/visible/scrubbers, -/obj/machinery/atmospherics/pipe/simple/visible/supply, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/engineering) -"bD" = ( -/obj/machinery/atmospherics/pipe/simple/visible/universal, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/engineering) -"bE" = ( -/obj/machinery/atmospherics/pipe/simple/visible/cyan, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/engineering) -"bF" = ( -/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/visible/supply{ - dir = 5 - }, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/engineering) -"bG" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/manifold/visible/supply, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/engineering) -"bH" = ( -/obj/machinery/atmospherics/pipe/simple/visible/cyan, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/engineering) -"bI" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/baseturf_helper/lava_land/surface, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/chemistry) -"bJ" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/manifold/visible/cyan, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/engineering) -"bK" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/visible/cyan{ - dir = 4; - level = 2 - }, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/engineering) -"bL" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/manifold/visible/yellow{ - dir = 8; - level = 2 - }, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/engineering) -"bM" = ( -/obj/effect/turf_decal/stripes/corner, -/obj/machinery/light/small, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/binary/pump{ - dir = 8; - name = "Plasma to Incinerator" - }, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/engineering) -"bN" = ( -/obj/effect/turf_decal/stripes/line, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/visible/yellow{ - dir = 10; - level = 2 - }, -/obj/structure/reagent_dispensers/fueltank, -/obj/item/clothing/head/welding, -/obj/item/weldingtool/largetank, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/engineering) -"bO" = ( -/obj/machinery/ignition_switch{ - id = "syndicate_base_incinerator"; - pixel_x = 6; - pixel_y = -24 - }, -/obj/effect/turf_decal/stripes/line, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/portable_atmospherics/canister, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/embedded_controller/radio/airlock/access_controller{ - frequency = 1449; - id_tag = "syndicate_base_incinerator"; - pixel_x = -6; - pixel_y = -25; - req_access_txt = "150"; - tag_exterior_door = "syndicate_base_incinerator_exterior"; - tag_interior_door = "syndicate_base_incinerator_interior" - }, -/obj/machinery/atmospherics/pipe/simple/visible/yellow, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/engineering) -"bP" = ( -/obj/effect/spawner/window/plastitanium, -/obj/machinery/atmospherics/pipe/simple/visible/yellow, -/turf/simulated/floor/plating, -/area/ruin/unpowered/syndicate_lava_base/engineering) -"bQ" = ( -/turf/simulated/floor/engine, -/area/ruin/unpowered/syndicate_lava_base/engineering) -"bR" = ( -/obj/machinery/optable, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plasteel/white/side{ - dir = 4 - }, -/area/ruin/unpowered/syndicate_lava_base/medbay) -"bS" = ( -/obj/machinery/vending/toyliberationstation{ - req_access_txt = "150" - }, -/obj/effect/turf_decal/tile/brown, -/obj/effect/turf_decal/tile/brown{ - dir = 8 - }, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/cargo) -"bT" = ( -/turf/simulated/wall/mineral/plastitanium/explosive, -/area/ruin/unpowered/syndicate_lava_base/medbay) -"bU" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/obj/machinery/door_control{ - id = "lavalandsyndi"; - name = "Syndicate Experimentation Lockdown Control"; - pixel_y = 26; - req_access_txt = "150" - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/stripes/corner{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/baseturf_helper/lava_land/surface, -/turf/simulated/floor/plasteel/dark, -/area/ruin/unpowered/syndicate_lava_base/testlab) -"bV" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/effect/baseturf_helper/lava_land/surface, -/turf/simulated/floor/plasteel/white/corner{ - dir = 1 - }, -/area/ruin/unpowered/syndicate_lava_base/virology) -"bW" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/baseturf_helper/lava_land/surface, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/cargo) -"bX" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/baseturf_helper/lava_land/surface, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/dormitories) -"bY" = ( -/obj/effect/baseturf_helper/lava_land/surface, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/main) -"bZ" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/obj/effect/baseturf_helper/lava_land/surface, -/turf/simulated/floor/plasteel/dark, -/area/ruin/unpowered/syndicate_lava_base/bar) -"ca" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/visible/yellow{ - dir = 6; - level = 2 - }, -/obj/effect/baseturf_helper/lava_land/surface, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/engineering) -"cb" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/effect/baseturf_helper/lava_land/surface, -/turf/simulated/floor/plasteel/dark, -/area/ruin/unpowered/syndicate_lava_base/telecomms) -"cc" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/effect/baseturf_helper/lava_land/surface, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/arrivals) -"cd" = ( -/obj/machinery/light/small, -/obj/structure/extinguisher_cabinet{ - pixel_y = -29 - }, -/obj/structure/cable/yellow, -/obj/machinery/power/apc/syndicate{ - dir = 4; - name = "Medbay APC"; - pixel_x = 24 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/baseturf_helper/lava_land/surface, -/turf/simulated/floor/plasteel/white/side{ - dir = 6 - }, -/area/ruin/unpowered/syndicate_lava_base/medbay) -"ce" = ( -/obj/structure/sign/securearea, -/turf/simulated/wall/mineral/plastitanium/explosive, -/area/ruin/unpowered/syndicate_lava_base/main) -"cg" = ( -/obj/machinery/portable_atmospherics/canister/nitrogen, -/turf/simulated/floor/engine/n2, -/area/ruin/unpowered/syndicate_lava_base/engineering) -"ch" = ( -/obj/machinery/air_sensor{ - frequency = 1442; - id_tag = "syndie_lavaland_o2_sensor" - }, -/turf/simulated/floor/engine/o2, -/area/ruin/unpowered/syndicate_lava_base/engineering) -"ci" = ( -/obj/machinery/light/small{ - dir = 4 - }, -/turf/simulated/floor/engine/o2, -/area/ruin/unpowered/syndicate_lava_base/engineering) -"cj" = ( -/obj/machinery/atmospherics/unary/vent_pump/siphon/on{ - dir = 8; - frequency = 1442; - id_tag = "syndie_lavaland_o2_out"; - name = "oxygen out" - }, -/turf/simulated/floor/engine/o2, -/area/ruin/unpowered/syndicate_lava_base/engineering) -"ck" = ( -/obj/machinery/portable_atmospherics/canister/oxygen, -/turf/simulated/floor/engine/o2, -/area/ruin/unpowered/syndicate_lava_base/engineering) -"cl" = ( -/obj/machinery/atmospherics/unary/vent_pump/siphon/on{ - dir = 1; - frequency = 1442; - id_tag = "syndie_lavaland_tox_out"; - name = "toxin out" - }, -/turf/simulated/floor/engine/plasma, -/area/ruin/unpowered/syndicate_lava_base/engineering) -"cm" = ( -/obj/machinery/air_sensor{ - frequency = 1442; - id_tag = "syndie_lavaland_tox_sensor" - }, -/turf/simulated/floor/engine/plasma, -/area/ruin/unpowered/syndicate_lava_base/engineering) -"cn" = ( -/obj/machinery/portable_atmospherics/canister/toxins, -/turf/simulated/floor/engine/plasma, -/area/ruin/unpowered/syndicate_lava_base/engineering) -"co" = ( -/obj/machinery/light/small, -/turf/simulated/floor/engine/plasma, -/area/ruin/unpowered/syndicate_lava_base/engineering) -"cp" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/igniter{ - id = "syndicate_base_incinerator" - }, -/turf/simulated/floor/engine, -/area/ruin/unpowered/syndicate_lava_base/engineering) -"cq" = ( -/obj/machinery/atmospherics/unary/outlet_injector/on{ - dir = 1; - id = "syndie_lavaland_inc_in" - }, -/obj/structure/sign/vacuum/external{ - pixel_y = -32 - }, -/turf/simulated/floor/engine, -/area/ruin/unpowered/syndicate_lava_base/engineering) -"cr" = ( -/obj/machinery/door/poddoor{ - id_tag = "lavalandsyndi_incineratorinput" - }, -/turf/simulated/floor/engine, -/area/ruin/unpowered/syndicate_lava_base/engineering) -"cs" = ( -/obj/structure/cable, -/obj/structure/cable{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/power/compressor{ - comp_id = "syndie_lavaland_incineratorturbine"; - dir = 1; - luminosity = 2 - }, -/turf/simulated/floor/engine, -/area/ruin/unpowered/syndicate_lava_base/engineering) -"ct" = ( -/obj/structure/cable, -/obj/machinery/power/turbine{ - dir = 2; - luminosity = 2 - }, -/turf/simulated/floor/engine, -/area/ruin/unpowered/syndicate_lava_base/engineering) -"cu" = ( -/obj/machinery/door/poddoor{ - id_tag = "lavalandsyndi_incineratoroutput" - }, -/turf/simulated/floor/engine, -/area/ruin/unpowered/syndicate_lava_base/engineering) -"cA" = ( -/obj/structure/table/reinforced, -/obj/item/clothing/glasses/science, -/obj/item/clothing/glasses/science, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/chemistry) -"cG" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/machinery/chem_master, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/chemistry) -"dc" = ( -/obj/machinery/light/small{ - dir = 8 - }, -/turf/simulated/floor/engine, -/area/ruin/unpowered/syndicate_lava_base/testlab) -"di" = ( -/obj/machinery/light/small{ - dir = 4 - }, -/turf/simulated/floor/engine, -/area/ruin/unpowered/syndicate_lava_base/testlab) -"do" = ( -/obj/structure/closet/secure_closet/medical1{ - req_access = null; - req_access_txt = "150" - }, -/obj/effect/decal/cleanable/dirt, -/obj/item/storage/box/beakers/bluespace, -/obj/item/storage/box/beakers/bluespace, -/turf/simulated/floor/plasteel/white/side{ - dir = 9 - }, -/area/ruin/unpowered/syndicate_lava_base/chemistry) -"du" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/obj/machinery/door_control{ - id = "lavalandsyndi_chemistry"; - name = "Chemistry Blast Door Control"; - pixel_y = 26; - req_access_txt = "150" - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plasteel/white/side{ - dir = 1 - }, -/area/ruin/unpowered/syndicate_lava_base/chemistry) -"dv" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 10 - }, -/obj/machinery/chem_heater, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/chemistry) -"dw" = ( -/obj/structure/chair/office/light{ - dir = 1 - }, -/obj/effect/turf_decal/bot, -/obj/effect/turf_decal/stripes/line, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/chemistry) -"dx" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 6 - }, -/obj/structure/closet/crate, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/chemistry) -"dy" = ( -/turf/simulated/wall/mineral/plastitanium/nodiagonal, -/area/ruin/unpowered/syndicate_lava_base/cargo) -"dA" = ( -/obj/structure/closet/l3closet, -/obj/machinery/power/apc/syndicate{ - dir = 8; - name = "Chemistry APC"; - pixel_x = -24 - }, -/obj/structure/cable/yellow{ - d1 = 0; - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plasteel/white/side{ - dir = 8 - }, -/area/ruin/unpowered/syndicate_lava_base/chemistry) -"dB" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/chemistry) -"dC" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/chemistry) -"dE" = ( -/obj/structure/table/glass, -/obj/item/stack/sheet/mineral/plasma{ - amount = 5; - pixel_x = -2; - pixel_y = 6 - }, -/obj/item/stack/sheet/mineral/plasma{ - amount = 5; - pixel_y = 2 - }, -/obj/item/stack/sheet/mineral/plasma{ - amount = 5; - pixel_x = 2; - pixel_y = -2 - }, -/obj/effect/decal/cleanable/dirt, -/obj/item/reagent_containers/glass/bottle/charcoal{ - pixel_x = 6 - }, -/obj/item/reagent_containers/glass/bottle/epinephrine, -/turf/simulated/floor/plasteel/white/corner{ - dir = 4 - }, -/area/ruin/unpowered/syndicate_lava_base/chemistry) -"dG" = ( -/obj/structure/lattice/catwalk, -/turf/simulated/floor/plating/lava/smooth/lava_land_surface, -/area/lavaland/surface/outdoors) -"dI" = ( -/obj/structure/table/glass, -/obj/machinery/reagentgrinder{ - pixel_y = 5 - }, -/obj/item/reagent_containers/glass/beaker/large, -/turf/simulated/floor/plasteel/white/side{ - dir = 5 - }, -/area/ruin/unpowered/syndicate_lava_base/chemistry) -"dK" = ( -/obj/effect/turf_decal/box/white/corners{ - dir = 1 - }, -/obj/structure/closet/crate/secure/gear{ - req_access_txt = "150" - }, -/obj/item/clothing/gloves/combat, -/obj/item/clothing/gloves/combat, -/obj/item/clothing/under/syndicate/combat, -/obj/item/clothing/under/syndicate/combat, -/obj/item/storage/belt/military, -/obj/item/storage/belt/military, -/obj/item/clothing/shoes/combat, -/obj/item/clothing/shoes/combat, -/obj/item/clothing/mask/gas/syndicate, -/obj/item/clothing/mask/gas/syndicate, -/obj/item/clothing/glasses/night, -/obj/item/clothing/glasses/night, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plasteel/dark, -/area/ruin/unpowered/syndicate_lava_base/cargo) -"dL" = ( -/obj/machinery/alarm/syndicate{ - pixel_y = 24 - }, -/obj/structure/closet/crate, -/obj/item/extinguisher{ - pixel_x = -5; - pixel_y = 5 - }, -/obj/item/extinguisher{ - pixel_x = -2; - pixel_y = 2 - }, -/obj/item/extinguisher{ - pixel_x = 1; - pixel_y = -1 - }, -/obj/item/flashlight{ - pixel_x = -5; - pixel_y = 5 - }, -/obj/item/flashlight{ - pixel_x = -2; - pixel_y = 2 - }, -/obj/item/flashlight{ - pixel_x = 1; - pixel_y = -1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plasteel/dark, -/area/ruin/unpowered/syndicate_lava_base/cargo) -"dM" = ( -/obj/effect/turf_decal/box/white/corners{ - dir = 4 - }, -/obj/structure/closet/crate, -/obj/item/storage/box/donkpockets{ - pixel_x = -2; - pixel_y = 6 - }, -/obj/item/storage/box/donkpockets{ - pixel_y = 3 - }, -/obj/item/storage/box/donkpockets{ - pixel_x = 2 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plasteel/dark, -/area/ruin/unpowered/syndicate_lava_base/cargo) -"dP" = ( -/turf/simulated/wall/mineral/plastitanium/explosive, -/area/ruin/unpowered/syndicate_lava_base/cargo) -"dQ" = ( -/obj/structure/sign/securearea, -/turf/simulated/wall/mineral/plastitanium/nodiagonal, -/area/ruin/unpowered/syndicate_lava_base/testlab) -"dR" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/hatch{ - heat_proof = 1; - name = "Experimentation Room"; - req_access_txt = "150" - }, -/obj/machinery/door/poddoor/preopen{ - id_tag = "lavalandsyndi"; - name = "Syndicate Research Experimentation Shutters" - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/simulated/floor/plasteel/dark, -/area/ruin/unpowered/syndicate_lava_base/testlab) -"dS" = ( -/obj/effect/spawner/window/plastitanium, -/obj/machinery/door/firedoor, -/obj/machinery/door/poddoor/preopen{ - id_tag = "lavalandsyndi"; - name = "Syndicate Research Experimentation Shutters" - }, -/turf/simulated/floor/plating, -/area/ruin/unpowered/syndicate_lava_base/testlab) -"dT" = ( -/obj/machinery/firealarm/syndicate{ - dir = 8; - pixel_x = -26 - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plasteel/white/side{ - dir = 8 - }, -/area/ruin/unpowered/syndicate_lava_base/chemistry) -"dU" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/chemistry) -"dX" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/chemistry) -"dY" = ( -/obj/structure/chair{ - dir = 4 - }, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/chemistry) -"dZ" = ( -/obj/machinery/light/small{ - dir = 4 - }, -/obj/structure/table/glass, -/obj/item/folder/white, -/obj/item/reagent_containers/glass/beaker/large{ - pixel_x = -3 - }, -/obj/item/reagent_containers/glass/beaker/large{ - pixel_x = -3 - }, -/obj/item/reagent_containers/dropper, -/obj/machinery/alarm/syndicate{ - dir = 8; - pixel_x = 24 - }, -/obj/effect/decal/cleanable/dirt, -/obj/item/screwdriver/nuke{ - pixel_y = 18 - }, -/turf/simulated/floor/plasteel/white/side{ - dir = 4 - }, -/area/ruin/unpowered/syndicate_lava_base/chemistry) -"ea" = ( -/obj/effect/turf_decal/box/white/corners{ - dir = 8 - }, -/obj/structure/closet/crate/secure/weapon{ - req_access_txt = "150" - }, -/obj/item/ammo_box/c10mm{ - pixel_y = 6 - }, -/obj/item/ammo_box/c10mm, -/obj/item/ammo_box/magazine/m10mm{ - pixel_x = -5; - pixel_y = 5 - }, -/obj/item/ammo_box/magazine/m10mm{ - pixel_x = -2; - pixel_y = 2 - }, -/obj/item/ammo_box/magazine/m10mm{ - pixel_x = 1; - pixel_y = -1 - }, -/obj/item/ammo_box/magazine/m10mm{ - pixel_x = 4; - pixel_y = -4 - }, -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/plasteel/dark, -/area/ruin/unpowered/syndicate_lava_base/cargo) -"eb" = ( -/obj/structure/closet/crate, -/obj/item/storage/toolbox/electrical{ - pixel_y = 4 - }, -/obj/item/storage/toolbox/mechanical, -/turf/simulated/floor/plasteel/dark, -/area/ruin/unpowered/syndicate_lava_base/cargo) -"ec" = ( -/obj/effect/turf_decal/box/white/corners, -/obj/structure/closet/crate/medical, -/obj/item/storage/firstaid/fire{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/storage/firstaid/brute, -/obj/item/storage/firstaid/regular{ - pixel_x = -3; - pixel_y = -3 - }, -/turf/simulated/floor/plasteel/dark, -/area/ruin/unpowered/syndicate_lava_base/cargo) -"ed" = ( -/obj/structure/table, -/obj/item/pen, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/item/paper_bin/syndicate, -/turf/simulated/floor/plasteel/dark, -/area/ruin/unpowered/syndicate_lava_base/cargo) -"ef" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/obj/structure/cable/yellow{ - d1 = 0; - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/power/apc/syndicate{ - dir = 1; - name = "Cargo Bay APC"; - pixel_y = 24 - }, -/obj/structure/closet/emcloset/anchored, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/brown{ - dir = 1 - }, -/obj/effect/turf_decal/tile/brown{ - dir = 4 - }, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/cargo) -"eg" = ( -/obj/structure/closet/firecloset/full{ - anchored = 1 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/brown{ - dir = 1 - }, -/obj/effect/turf_decal/tile/brown{ - dir = 4 - }, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/cargo) -"eh" = ( -/turf/simulated/wall/mineral/plastitanium/nodiagonal, -/area/ruin/unpowered/syndicate_lava_base/virology) -"ei" = ( -/obj/structure/disposaloutlet{ - dir = 1 - }, -/obj/structure/disposalpipe/trunk, -/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/syndicate_lava_base/virology) -"ek" = ( -/obj/effect/spawner/window/plastitanium, -/turf/simulated/floor/plating, -/area/ruin/unpowered/syndicate_lava_base/testlab) -"el" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/simulated/floor/plasteel/dark, -/area/ruin/unpowered/syndicate_lava_base/testlab) -"eo" = ( -/obj/structure/table/reinforced, -/obj/item/storage/toolbox/syndicate, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/item/paper/crumpled{ - info = "Explosive testing on site is STRICTLY forbidden, as this outpost's walls are lined with explosives intended for intentional self-destruct purposes that may be set off prematurely through careless experiments."; - name = "Explosives Testing Warning"; - pixel_x = -6; - pixel_y = -3 - }, -/turf/simulated/floor/plasteel/dark, -/area/ruin/unpowered/syndicate_lava_base/testlab) -"ep" = ( -/obj/structure/table/reinforced, -/obj/effect/decal/cleanable/dirt, -/obj/item/pen, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/item/paper_bin/syndicate, -/turf/simulated/floor/plasteel/dark, -/area/ruin/unpowered/syndicate_lava_base/testlab) -"eq" = ( -/obj/structure/table/reinforced, -/obj/item/restraints/handcuffs, -/obj/item/taperecorder, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/simulated/floor/plasteel/dark, -/area/ruin/unpowered/syndicate_lava_base/testlab) -"er" = ( -/obj/machinery/light/small{ - dir = 8 - }, -/obj/structure/extinguisher_cabinet{ - pixel_x = -27; - pixel_y = 1 - }, -/obj/structure/cable/yellow{ - 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/white/side{ - dir = 8 - }, -/area/ruin/unpowered/syndicate_lava_base/chemistry) -"es" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 9 - }, -/obj/effect/decal/cleanable/dirt, -/obj/structure/closet/crate, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/chemistry) -"et" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/chemistry) -"eu" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 5 - }, -/obj/machinery/chem_heater, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/chemistry) -"ev" = ( -/turf/simulated/floor/plasteel/white/corner, -/area/ruin/unpowered/syndicate_lava_base/chemistry) -"ew" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/vending/syndichem, -/turf/simulated/floor/plasteel/white/side{ - dir = 6 - }, -/area/ruin/unpowered/syndicate_lava_base/chemistry) -"ex" = ( -/obj/machinery/light/small{ - dir = 8 - }, -/obj/machinery/firealarm/syndicate{ - dir = 8; - pixel_x = -26 - }, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/simulated/floor/plasteel/dark, -/area/ruin/unpowered/syndicate_lava_base/cargo) -"ey" = ( -/obj/structure/cable/yellow{ - 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/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/simulated/floor/plasteel/dark, -/area/ruin/unpowered/syndicate_lava_base/cargo) -"ez" = ( -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/simulated/floor/plasteel/dark, -/area/ruin/unpowered/syndicate_lava_base/cargo) -"eA" = ( -/obj/machinery/door/firedoor, -/obj/structure/cable/yellow{ - 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/decal/cleanable/dirt, -/obj/machinery/door/airlock/mining/glass{ - name = "Warehouse"; - req_access_txt = "150" - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/simulated/floor/plasteel/dark, -/area/ruin/unpowered/syndicate_lava_base/cargo) -"eB" = ( -/obj/structure/cable/yellow{ - 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/decal/cleanable/dirt, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/cargo) -"eC" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/cargo) -"eD" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/cargo) -"eE" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/structure/table, -/obj/item/storage/box/lights/bulbs, -/obj/item/wrench, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/mineral/plastitanium, -/area/ruin/unpowered/syndicate_lava_base/cargo) -"eF" = ( -/obj/effect/spawner/window/plastitanium, -/obj/machinery/door/firedoor, -/obj/machinery/door/poddoor{ - id_tag = "lavalandsyndi_cargo" - }, -/turf/simulated/floor/plating, -/area/ruin/unpowered/syndicate_lava_base/cargo) -"eG" = ( -/obj/structure/closet/secure_closet/personal/patient, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plasteel/white/side{ - dir = 9 - }, -/area/ruin/unpowered/syndicate_lava_base/virology) -"eH" = ( -/obj/structure/bed, -/obj/item/bedsheet, -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/floor/plasteel/white/side{ - dir = 5 - }, -/area/ruin/unpowered/syndicate_lava_base/virology) -"eI" = ( -/obj/effect/spawner/window/plastitanium, -/turf/simulated/floor/plating, -/area/ruin/unpowered/syndicate_lava_base/virology) -"eJ" = ( -/obj/structure/disposalpipe/segment, -/turf/simulated/wall/mineral/plastitanium/nodiagonal, -/area/ruin/unpowered/syndicate_lava_base/virology) -"eL" = ( -/obj/machinery/door/airlock/hatch{ - name = "Monkey Pen"; - req_access_txt = "150" - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/simulated/floor/plasteel/dark, -/area/ruin/unpowered/syndicate_lava_base/testlab) -"eM" = ( -/obj/machinery/firealarm/syndicate{ - dir = 1; - pixel_y = -24 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/simulated/floor/plasteel/dark, -/area/ruin/unpowered/syndicate_lava_base/testlab) -"eN" = ( -/obj/machinery/alarm/syndicate{ - dir = 1; - pixel_y = -24 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/simulated/floor/plasteel/dark, -/area/ruin/unpowered/syndicate_lava_base/testlab) -"eO" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/simulated/floor/plasteel/dark, -/area/ruin/unpowered/syndicate_lava_base/testlab) -"eP" = ( -/obj/structure/chair{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/simulated/floor/plasteel/dark, -/area/ruin/unpowered/syndicate_lava_base/testlab) -"eQ" = ( -/obj/machinery/light/small, -/obj/structure/table/reinforced, -/obj/item/storage/box/monkeycubes/syndicate, -/obj/item/storage/box/monkeycubes/syndicate, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/simulated/floor/plasteel/dark, -/area/ruin/unpowered/syndicate_lava_base/testlab) -"eR" = ( -/obj/structure/cable/yellow{ - 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/white/side{ - dir = 10 - }, -/area/ruin/unpowered/syndicate_lava_base/chemistry) -"eS" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/machinery/chem_master, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/chemistry) -"eT" = ( -/obj/effect/turf_decal/bot, -/obj/structure/chair/office/light, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/chemistry) -"eU" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/chem_dispenser/upgraded, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/chemistry) -"eV" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plasteel/white/side{ - dir = 6 - }, -/area/ruin/unpowered/syndicate_lava_base/chemistry) -"eW" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/simulated/floor/plasteel/dark, -/area/ruin/unpowered/syndicate_lava_base/cargo) -"eX" = ( -/obj/effect/turf_decal/box/white/corners{ - dir = 1 - }, -/obj/structure/closet/crate/internals, -/obj/item/tank/internals/oxygen/yellow, -/obj/item/tank/internals/oxygen/yellow, -/obj/item/tank/internals/oxygen/yellow, -/obj/item/tank/internals/emergency_oxygen/double, -/obj/item/tank/internals/emergency_oxygen/double, -/obj/item/tank/internals/emergency_oxygen/double, -/obj/item/clothing/mask/gas, -/obj/item/clothing/mask/gas, -/obj/item/clothing/mask/gas, -/turf/simulated/floor/plasteel/dark, -/area/ruin/unpowered/syndicate_lava_base/cargo) -"eY" = ( -/obj/effect/turf_decal/box/white/corners{ - dir = 4 - }, -/obj/structure/closet/crate, -/obj/item/storage/box/donkpockets{ - pixel_x = -2; - pixel_y = 6 - }, -/obj/item/storage/box/donkpockets{ - pixel_y = 3 - }, -/obj/item/storage/box/donkpockets{ - pixel_x = 2 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/turf/simulated/floor/plasteel/dark, -/area/ruin/unpowered/syndicate_lava_base/cargo) -"eZ" = ( -/obj/structure/rack{ - dir = 8 - }, -/obj/item/stack/sheet/cardboard{ - amount = 3 - }, -/obj/item/stack/rods/twentyfive, -/obj/item/stock_parts/cell/high/plus, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/simulated/floor/plasteel/dark, -/area/ruin/unpowered/syndicate_lava_base/cargo) -"fa" = ( -/obj/effect/spawner/window/plastitanium, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plating, -/area/ruin/unpowered/syndicate_lava_base/cargo) -"fb" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/closet/crate, -/obj/effect/turf_decal/tile/brown{ - dir = 8 - }, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/cargo) -"fc" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/cargo) -"fd" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/cargo) -"fe" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/structure/table, -/obj/machinery/cell_charger, -/obj/item/stock_parts/cell/high/plus, -/turf/simulated/floor/mineral/plastitanium, -/area/ruin/unpowered/syndicate_lava_base/cargo) -"ff" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plasteel/white/side{ - dir = 10 - }, -/area/ruin/unpowered/syndicate_lava_base/virology) -"fg" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/turf/simulated/floor/plasteel/white/side{ - dir = 6 - }, -/area/ruin/unpowered/syndicate_lava_base/virology) -"fh" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/turf/simulated/floor/plasteel/white/side{ - dir = 10 - }, -/area/ruin/unpowered/syndicate_lava_base/virology) -"fi" = ( -/obj/structure/table/glass, -/obj/item/storage/box/beakers{ - pixel_x = 2; - pixel_y = 2 - }, -/obj/item/storage/box/syringes, -/obj/machinery/power/apc/syndicate{ - dir = 1; - name = "Virology APC"; - pixel_y = 24 - }, -/obj/structure/cable/yellow{ - d1 = 0; - d2 = 2; - icon_state = "0-2" - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plasteel/white/side{ - dir = 9 - }, -/area/ruin/unpowered/syndicate_lava_base/virology) -"fj" = ( -/obj/structure/table/glass, -/obj/structure/reagent_dispensers/virusfood{ - pixel_y = 28 - }, -/obj/item/clothing/gloves/color/latex, -/obj/item/healthanalyzer, -/obj/item/clothing/glasses/hud/health, -/obj/structure/disposalpipe/segment, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/firealarm/syndicate{ - dir = 4; - pixel_x = 26 - }, -/turf/simulated/floor/plasteel/white/side{ - dir = 5 - }, -/area/ruin/unpowered/syndicate_lava_base/virology) -"fk" = ( -/obj/machinery/power/apc/syndicate{ - dir = 2; - name = "Experimentation Lab APC"; - pixel_y = -24 - }, -/obj/structure/cable/yellow{ - d2 = 4; - icon_state = "0-4" - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/simulated/floor/plasteel/dark, -/area/ruin/unpowered/syndicate_lava_base/testlab) -"fl" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/extinguisher_cabinet{ - pixel_x = 25 - }, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/simulated/floor/plasteel/dark, -/area/ruin/unpowered/syndicate_lava_base/testlab) -"fm" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/medical{ - name = "Chemistry Lab"; - req_access_txt = "150" - }, -/obj/structure/cable/yellow{ - 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/white, -/area/ruin/unpowered/syndicate_lava_base/chemistry) -"fn" = ( -/obj/effect/spawner/window/plastitanium, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plating, -/area/ruin/unpowered/syndicate_lava_base/chemistry) -"fo" = ( -/obj/machinery/door/firedoor, -/obj/structure/table/reinforced, -/obj/machinery/door/window/southleft{ - base_state = "left"; - dir = 2; - icon_state = "left"; - name = "Chemistry" - }, -/obj/machinery/door/window/southleft{ - base_state = "left"; - dir = 1; - icon_state = "left"; - name = "Chemistry"; - req_access_txt = "150" - }, -/turf/simulated/floor/plasteel/white, -/area/ruin/unpowered/syndicate_lava_base/chemistry) -"fp" = ( -/obj/machinery/smartfridge/secure/chemistry/preloaded/syndicate, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/chemistry) -"fq" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/vending/assist, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/simulated/floor/plasteel/dark, -/area/ruin/unpowered/syndicate_lava_base/cargo) -"fr" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/simulated/floor/plasteel/dark, -/area/ruin/unpowered/syndicate_lava_base/cargo) -"fs" = ( -/obj/effect/turf_decal/box/white/corners{ - dir = 8 - }, -/obj/structure/closet/crate, -/obj/item/storage/box/stockparts/deluxe, -/obj/item/storage/box/stockparts/deluxe, -/obj/item/stack/sheet/metal/fifty, -/obj/item/stack/sheet/glass/fifty, -/obj/item/circuitboard/processor, -/obj/item/circuitboard/gibber, -/obj/item/circuitboard/deepfryer, -/turf/simulated/floor/plasteel/dark, -/area/ruin/unpowered/syndicate_lava_base/cargo) -"ft" = ( -/obj/effect/turf_decal/box/white/corners, -/obj/structure/closet/crate, -/obj/item/reagent_containers/glass/beaker/waterbottle/large{ - pixel_x = -3; - pixel_y = 3 - }, -/obj/item/reagent_containers/glass/beaker/waterbottle/large{ - pixel_x = -3; - pixel_y = 3 - }, -/obj/item/reagent_containers/glass/beaker/waterbottle/large, -/obj/item/reagent_containers/glass/beaker/waterbottle/large, -/obj/item/reagent_containers/glass/beaker/waterbottle/large{ - pixel_x = 3; - pixel_y = -3 - }, -/obj/item/reagent_containers/glass/beaker/waterbottle/large{ - pixel_x = 3; - pixel_y = -3 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plasteel/dark, -/area/ruin/unpowered/syndicate_lava_base/cargo) -"fu" = ( -/obj/machinery/light/small{ - dir = 8 - }, -/obj/machinery/alarm/syndicate{ - dir = 4; - pixel_x = -24 - }, -/obj/structure/table, -/obj/item/clothing/suit/storage/hazardvest, -/obj/item/clothing/suit/storage/hazardvest, -/obj/item/clothing/head/soft{ - pixel_x = -8 - }, -/obj/item/clothing/head/soft{ - pixel_x = -8 - }, -/obj/item/radio{ - pixel_x = 5 - }, -/obj/item/radio{ - pixel_x = 5 - }, -/obj/effect/turf_decal/tile/brown{ - dir = 1 - }, -/obj/effect/turf_decal/tile/brown{ - dir = 8 - }, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/cargo) -"fv" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/cargo) -"fx" = ( -/obj/structure/sign/securearea, -/turf/simulated/wall/mineral/plastitanium/nodiagonal, -/area/ruin/unpowered/syndicate_lava_base/cargo) -"fy" = ( -/obj/machinery/door/airlock/medical/glass{ - name = "Isolation B"; - req_access_txt = "150" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plasteel/white, -/area/ruin/unpowered/syndicate_lava_base/virology) -"fz" = ( -/obj/machinery/door/airlock/medical/glass{ - name = "Isolation A"; - req_access_txt = "150" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plasteel/white, -/area/ruin/unpowered/syndicate_lava_base/virology) -"fA" = ( -/obj/structure/table/glass, -/obj/item/reagent_containers/syringe/antiviral, -/obj/item/reagent_containers/dropper, -/obj/item/reagent_containers/spray/cleaner, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plasteel/white/side{ - dir = 8 - }, -/area/ruin/unpowered/syndicate_lava_base/virology) -"fB" = ( -/obj/structure/chair/stool, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plasteel/white/corner{ - dir = 4 - }, -/area/ruin/unpowered/syndicate_lava_base/virology) -"fC" = ( -/obj/machinery/smartfridge/secure/chemistry/virology/preloaded/syndicate, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plasteel/white/side{ - dir = 5 - }, -/area/ruin/unpowered/syndicate_lava_base/virology) -"fD" = ( -/obj/structure/sign/biohazard, -/turf/simulated/wall/mineral/plastitanium/nodiagonal, -/area/ruin/unpowered/syndicate_lava_base/virology) -"fE" = ( -/obj/effect/turf_decal/bot, -/obj/structure/closet/l3closet, -/obj/machinery/light/small{ - dir = 8 - }, -/obj/machinery/alarm/syndicate{ - pixel_y = 24 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/main) -"fF" = ( -/obj/effect/turf_decal/bot, -/obj/machinery/shower{ - pixel_y = 14 - }, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/main) -"fG" = ( -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/door/airlock/hatch{ - name = "Experimentation Lab"; - req_access_txt = "150" - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/simulated/floor/plasteel/dark, -/area/ruin/unpowered/syndicate_lava_base/testlab) -"fH" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plasteel/white/side{ - dir = 1 - }, -/area/ruin/unpowered/syndicate_lava_base/main) -"fI" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable/yellow{ - 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/white/side{ - dir = 1 - }, -/area/ruin/unpowered/syndicate_lava_base/main) -"fO" = ( -/turf/simulated/floor/plasteel/white/side{ - dir = 1 - }, -/area/ruin/unpowered/syndicate_lava_base/main) -"fW" = ( -/obj/machinery/door/firedoor, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/door/airlock/mining/glass{ - name = "Warehouse"; - req_access_txt = "150" - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/simulated/floor/plasteel/dark, -/area/ruin/unpowered/syndicate_lava_base/cargo) -"fY" = ( -/obj/structure/extinguisher_cabinet{ - pixel_x = -27; - pixel_y = 1 - }, -/obj/structure/table, -/obj/item/folder/yellow, -/obj/item/stack/wrapping_paper{ - pixel_y = 5 - }, -/obj/item/stack/packageWrap, -/obj/item/hand_labeler, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/brown{ - dir = 1 - }, -/obj/effect/turf_decal/tile/brown{ - dir = 4 - }, -/obj/effect/turf_decal/tile/brown{ - dir = 8 - }, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/cargo) -"gb" = ( -/obj/structure/table, -/obj/item/paper_bin, -/obj/item/pen, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/brown{ - dir = 1 - }, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/cargo) -"gg" = ( -/obj/structure/sign/fire{ - pixel_y = 32 - }, -/obj/structure/sign/xeno_warning_mining{ - pixel_y = -32 - }, -/turf/simulated/floor/plating, -/area/ruin/unpowered/syndicate_lava_base/cargo) -"gj" = ( -/turf/simulated/wall/mineral/plastitanium/explosive, -/area/ruin/unpowered/syndicate_lava_base/virology) -"gp" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plasteel/white, -/area/ruin/unpowered/syndicate_lava_base/virology) -"gq" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/turf/simulated/floor/plasteel/white, -/area/ruin/unpowered/syndicate_lava_base/virology) -"gr" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plasteel/white, -/area/ruin/unpowered/syndicate_lava_base/virology) -"gs" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 2 - }, -/obj/machinery/light/small, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plasteel/white, -/area/ruin/unpowered/syndicate_lava_base/virology) -"gt" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/turf/simulated/floor/plasteel/white/side{ - dir = 9 - }, -/area/ruin/unpowered/syndicate_lava_base/virology) -"gv" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/virology) -"gy" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/main) -"gz" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/main) -"gE" = ( -/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/main) -"gF" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/obj/structure/cable/yellow{ - 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/decal/cleanable/dirt, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/main) -"gG" = ( -/obj/structure/cable/yellow{ - 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, -/area/ruin/unpowered/syndicate_lava_base/main) -"gH" = ( -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 2 - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/main) -"gI" = ( -/obj/structure/cable/yellow{ - 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/decal/cleanable/dirt, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/main) -"gJ" = ( -/obj/machinery/door/firedoor, -/obj/structure/cable/yellow{ - 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/decal/cleanable/dirt, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/main) -"gK" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/obj/structure/cable/yellow{ - 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/turf_decal/tile/brown{ - dir = 4 - }, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/main) -"gL" = ( -/obj/structure/cable/yellow{ - 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 = 9 - }, -/obj/effect/turf_decal/tile/brown{ - dir = 1 - }, -/obj/effect/turf_decal/tile/brown{ - dir = 4 - }, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/main) -"gM" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/brown{ - dir = 1 - }, -/obj/effect/turf_decal/tile/brown{ - dir = 4 - }, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/main) -"gN" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/brown{ - dir = 1 - }, -/obj/effect/turf_decal/tile/brown, -/obj/effect/turf_decal/tile/brown{ - dir = 4 - }, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/main) -"gO" = ( -/obj/structure/sign/cargo, -/turf/simulated/wall/mineral/plastitanium/nodiagonal, -/area/ruin/unpowered/syndicate_lava_base/cargo) -"gP" = ( -/obj/machinery/photocopier, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/brown{ - dir = 1 - }, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/cargo) -"gQ" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/cargo) -"gR" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/cargo) -"gS" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 4 - }, -/obj/machinery/light/small{ - dir = 4 - }, -/obj/machinery/door_control{ - id = "lavalandsyndi_cargo"; - name = "Cargo Bay Blast Door Control"; - pixel_x = 26; - req_access_txt = "150" - }, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/cargo) -"gT" = ( -/obj/machinery/door/airlock/medical/glass{ - name = "Monkey Pen"; - req_access_txt = "150" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plasteel/white, -/area/ruin/unpowered/syndicate_lava_base/virology) -"gU" = ( -/obj/machinery/alarm/syndicate{ - dir = 4; - pixel_x = -24 - }, -/obj/structure/sink{ - dir = 8; - pixel_x = -12; - pixel_y = 2 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plasteel/white/side{ - dir = 8 - }, -/area/ruin/unpowered/syndicate_lava_base/virology) -"gV" = ( -/obj/structure/chair/office/light, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/virology) -"ha" = ( -/turf/simulated/wall/mineral/plastitanium/nodiagonal, -/area/ruin/unpowered/syndicate_lava_base/main) -"hb" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/main) -"hc" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/main) -"hd" = ( -/obj/effect/turf_decal/tile/red, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/main) -"he" = ( -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/main) -"hf" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/main) -"hg" = ( -/obj/machinery/light/small, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/main) -"hh" = ( -/obj/machinery/door/firedoor, -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/main) -"hi" = ( -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/main) -"hj" = ( -/obj/effect/turf_decal/tile/brown, -/obj/effect/turf_decal/tile/brown{ - dir = 4 - }, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/main) -"hk" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/mining/glass{ - name = "Cargo Bay" - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/cargo) -"hl" = ( -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/cargo) -"hn" = ( -/obj/structure/chair{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/cargo) -"ho" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/machinery/computer/shuttle{ - desc = "Occasionally used to call in a resupply shuttle if one is in range."; - dir = 8; - icon_keyboard = "syndie_key"; - icon_screen = "syndishuttle"; - light_color = "#FA8282"; - name = "syndicate cargo shuttle terminal"; - possible_destinations = "syndielavaland_cargo"; - req_access_txt = "150"; - shuttleId = "syndie_cargo" - }, -/turf/simulated/floor/mineral/plastitanium, -/area/ruin/unpowered/syndicate_lava_base/cargo) -"hq" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plasteel/white/side{ - dir = 1 - }, -/area/ruin/unpowered/syndicate_lava_base/virology) -"hs" = ( -/obj/machinery/computer/pandemic, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/door_control{ - id = "lavalandsyndi_virology"; - name = "Virology Blast Door Control"; - pixel_x = -26; - req_access_txt = "150" - }, -/turf/simulated/floor/plasteel/white/side{ - dir = 10 - }, -/area/ruin/unpowered/syndicate_lava_base/virology) -"ht" = ( -/obj/structure/table, -/obj/item/paper_bin{ - pixel_x = -2; - pixel_y = 5 - }, -/obj/item/hand_labeler, -/obj/item/pen/red, -/obj/item/restraints/handcuffs, -/obj/effect/decal/cleanable/dirt, -/obj/item/clothing/glasses/science, -/turf/simulated/floor/plasteel/white/side, -/area/ruin/unpowered/syndicate_lava_base/virology) -"hu" = ( -/obj/structure/table, -/obj/machinery/reagentgrinder, -/obj/item/stack/sheet/mineral/plasma{ - amount = 5 - }, -/obj/item/stack/sheet/mineral/uranium{ - amount = 10 - }, -/obj/item/stack/sheet/mineral/gold{ - amount = 10 - }, -/turf/simulated/floor/plasteel/white/side, -/area/ruin/unpowered/syndicate_lava_base/virology) -"hv" = ( -/obj/machinery/disposal, -/obj/structure/sign/deathsposal{ - pixel_x = 32 - }, -/obj/effect/turf_decal/stripes/red/box, -/obj/structure/disposalpipe/trunk{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plasteel/white/side{ - dir = 6 - }, -/area/ruin/unpowered/syndicate_lava_base/virology) -"hx" = ( -/obj/machinery/alarm/syndicate{ - dir = 4; - pixel_x = -24 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/main) -"hy" = ( -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/main) -"hz" = ( -/turf/simulated/wall/mineral/plastitanium/nodiagonal, -/area/ruin/unpowered/syndicate_lava_base/dormitories) -"hA" = ( -/obj/structure/closet/emcloset/anchored, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/simulated/floor/plasteel/dark, -/area/ruin/unpowered/syndicate_lava_base/dormitories) -"hB" = ( -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/main) -"hC" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/mining/glass{ - name = "Cargo Bay" - }, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/cargo) -"hD" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/structure/rack, -/obj/item/storage/belt/utility, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/mineral/plastitanium, -/area/ruin/unpowered/syndicate_lava_base/cargo) -"hF" = ( -/obj/machinery/light/small, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plasteel/white/side, -/area/ruin/unpowered/syndicate_lava_base/virology) -"hH" = ( -/obj/effect/spawner/window/plastitanium, -/obj/machinery/door/poddoor/preopen{ - id_tag = "lavalandsyndi_virology" - }, -/turf/simulated/floor/plating, -/area/ruin/unpowered/syndicate_lava_base/virology) -"hJ" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/ruin/unpowered/syndicate_lava_base/main) -"hL" = ( -/obj/machinery/light/small{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/main) -"hM" = ( -/obj/structure/table/wood, -/obj/item/ammo_box/magazine/m10mm, -/obj/item/ammo_box/magazine/sniper_rounds, -/obj/machinery/alarm/syndicate{ - pixel_y = 24 - }, -/turf/simulated/floor/plasteel/grimy, -/area/ruin/unpowered/syndicate_lava_base/dormitories) -"hN" = ( -/obj/machinery/light/small{ - dir = 4 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/plasteel/grimy, -/area/ruin/unpowered/syndicate_lava_base/dormitories) -"hO" = ( -/turf/simulated/wall/mineral/plastitanium/explosive, -/area/ruin/unpowered/syndicate_lava_base/dormitories) -"hP" = ( -/obj/machinery/light/small{ - dir = 8 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/plasteel/grimy, -/area/ruin/unpowered/syndicate_lava_base/dormitories) -"hQ" = ( -/obj/structure/table/wood, -/obj/item/ammo_box/magazine/m10mm, -/obj/machinery/alarm/syndicate{ - pixel_y = 24 - }, -/turf/simulated/floor/plasteel/grimy, -/area/ruin/unpowered/syndicate_lava_base/dormitories) -"hR" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/brown{ - dir = 4 - }, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/main) -"hS" = ( -/obj/structure/table/reinforced, -/obj/item/folder, -/obj/item/suppressor, -/obj/item/clothing/ears/earmuffs, -/obj/item/clothing/ears/earmuffs, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/brown, -/obj/effect/turf_decal/tile/brown{ - dir = 8 - }, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/cargo) -"hU" = ( -/obj/machinery/light/small, -/obj/structure/filingcabinet/chestdrawer, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/brown, -/obj/effect/turf_decal/tile/brown{ - dir = 8 - }, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/cargo) -"hV" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/brown, -/obj/effect/turf_decal/tile/brown{ - dir = 8 - }, -/obj/machinery/autolathe, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/cargo) -"hW" = ( -/obj/machinery/porta_turret/syndicate{ - dir = 10 - }, -/turf/simulated/wall/mineral/plastitanium/nodiagonal, -/area/ruin/unpowered/syndicate_lava_base/main) -"hZ" = ( -/obj/machinery/firealarm/syndicate{ - dir = 8; - pixel_x = -26 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/main) -"ia" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/main) -"ib" = ( -/obj/effect/mob_spawn/human/lavaland_syndicate{ - icon_state = "sleeper_s"; - dir = 4 - }, -/turf/simulated/floor/plasteel/grimy, -/area/ruin/unpowered/syndicate_lava_base/dormitories) -"ic" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plasteel/grimy, -/area/ruin/unpowered/syndicate_lava_base/dormitories) -"id" = ( -/obj/structure/toilet{ - pixel_y = 18 - }, -/obj/structure/sink{ - dir = 4; - pixel_x = 11 - }, -/obj/machinery/light/small{ - dir = 8 - }, -/obj/structure/mirror{ - pixel_x = 28 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/simulated/floor/plasteel/dark, -/area/ruin/unpowered/syndicate_lava_base/dormitories) -"ie" = ( -/obj/effect/mob_spawn/human/lavaland_syndicate/comms{ - dir = 8; - icon_state = "sleeper_s" - }, -/turf/simulated/floor/plasteel/grimy, -/area/ruin/unpowered/syndicate_lava_base/dormitories) -"if" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/main) -"ig" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 9 - }, -/obj/effect/mapping_helpers/no_lava, -/turf/simulated/floor/plating{ - baseturf = /turf/simulated/floor/plating/lava/smooth/lava_land_surface; - oxygen = 14; - nitrogen = 23; - temperature = 300 - }, -/area/lavaland/surface/outdoors) -"ih" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/effect/mapping_helpers/no_lava, -/turf/simulated/floor/plating{ - oxygen = 14; - nitrogen = 23; - temperature = 300 - }, -/area/lavaland/surface/outdoors) -"ii" = ( -/obj/structure/table, -/obj/item/storage/toolbox/emergency, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/main) -"ij" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/main) -"ik" = ( -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/main) -"il" = ( -/obj/machinery/door/airlock{ - name = "Cabin 2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/dormitories) -"im" = ( -/obj/machinery/door/airlock{ - name = "Unisex Restrooms" - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/simulated/floor/plasteel/dark, -/area/ruin/unpowered/syndicate_lava_base/dormitories) -"in" = ( -/obj/machinery/door/airlock{ - name = "Cabin 4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/dormitories) -"ip" = ( -/obj/effect/turf_decal/stripes/red/corner, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/main) -"iq" = ( -/obj/structure/sign/securearea, -/turf/simulated/wall/mineral/plastitanium/nodiagonal, -/area/ruin/unpowered/syndicate_lava_base/main) -"ir" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/stripes/red/line{ - dir = 9 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/simulated/floor/plasteel/dark, -/area/ruin/unpowered/syndicate_lava_base/main) -"it" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/stripes/red/line{ - dir = 5 - }, -/obj/structure/filingcabinet, -/obj/item/folder/syndicate/mining, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/simulated/floor/plasteel/dark, -/area/ruin/unpowered/syndicate_lava_base/main) -"iu" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/effect/mapping_helpers/no_lava, -/turf/simulated/floor/plating{ - baseturf = /turf/simulated/floor/plating/lava/smooth/lava_land_surface; - oxygen = 14; - nitrogen = 23; - temperature = 300 - }, -/area/lavaland/surface/outdoors) -"iv" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/mapping_helpers/no_lava, -/turf/simulated/floor/plating{ - baseturf = /turf/simulated/floor/plating/lava/smooth/lava_land_surface; - oxygen = 14; - nitrogen = 23; - temperature = 300 - }, -/area/lavaland/surface/outdoors) -"iw" = ( -/obj/structure/chair{ - dir = 4 - }, -/obj/structure/extinguisher_cabinet{ - pixel_x = -27; - pixel_y = 1 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/main) -"ix" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/main) -"iy" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Dormitories" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/dormitories) -"iz" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/dormitories) -"iA" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/dormitories) -"iB" = ( -/obj/machinery/alarm/syndicate{ - pixel_y = 24 - }, -/obj/machinery/atmospherics/unary/vent_pump/on, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/dormitories) -"iD" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/obj/machinery/firealarm/syndicate{ - dir = 2; - pixel_y = 24 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/dormitories) -"iE" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/dormitories) -"iF" = ( -/obj/machinery/washing_machine, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/simulated/floor/plasteel/dark, -/area/ruin/unpowered/syndicate_lava_base/dormitories) -"iG" = ( -/obj/machinery/firealarm/syndicate{ - dir = 8; - pixel_x = -26 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/main) -"iH" = ( -/obj/effect/turf_decal/stripes/red/line{ - dir = 4 - }, -/obj/effect/turf_decal/caution/red{ - dir = 8 - }, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/main) -"iI" = ( -/obj/machinery/door/airlock/vault{ - id_tag = "syndie_lavaland_vault"; - req_access_txt = "150"; - locked = 1 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/simulated/floor/plasteel/dark, -/area/ruin/unpowered/syndicate_lava_base/main) -"iJ" = ( -/turf/simulated/floor/redgrid, -/area/ruin/unpowered/syndicate_lava_base/main) -"iK" = ( -/obj/machinery/syndicatebomb/self_destruct{ - anchored = 1 - }, -/turf/simulated/floor/redgrid, -/area/ruin/unpowered/syndicate_lava_base/main) -"iM" = ( -/obj/machinery/light/small{ - dir = 4 - }, -/turf/simulated/floor/plating{ - baseturf = /turf/simulated/floor/plating/lava/smooth/lava_land_surface; - oxygen = 14; - nitrogen = 23; - temperature = 300 - }, -/area/ruin/unpowered/syndicate_lava_base/arrivals) -"iN" = ( -/turf/simulated/wall/mineral/plastitanium/explosive, -/area/ruin/unpowered/syndicate_lava_base/main) -"iO" = ( -/obj/machinery/light/small{ - dir = 8 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/main) -"iP" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/main) -"iQ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/main) -"iR" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/public/glass{ - name = "Dormitories" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/dormitories) -"iS" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/dormitories) -"iT" = ( -/obj/machinery/light/small, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 2 - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/simulated/floor/plasteel{ - heat_capacity = 1e+006 - }, -/area/ruin/unpowered/syndicate_lava_base/dormitories) -"iU" = ( -/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/dormitories) -"iV" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/power/apc/syndicate{ - dir = 2; - name = "Dormitories APC"; - pixel_y = -24 - }, -/obj/structure/cable/yellow{ - d1 = 0; - d2 = 8; - icon_state = "0-8" - }, -/obj/effect/turf_decal/tile/neutral, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/dormitories) -"iW" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/dormitories) -"iX" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/simulated/floor/plasteel{ - heat_capacity = 1e+006 - }, -/area/ruin/unpowered/syndicate_lava_base/dormitories) -"iY" = ( -/obj/structure/table, -/obj/structure/bedsheetbin, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/simulated/floor/plasteel/dark, -/area/ruin/unpowered/syndicate_lava_base/dormitories) -"iZ" = ( -/obj/structure/extinguisher_cabinet{ - pixel_x = -27; - pixel_y = 1 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/main) -"ja" = ( -/obj/effect/turf_decal/stripes/red/corner{ - dir = 4 - }, -/obj/machinery/door_control{ - id = "syndie_lavaland_vault"; - name = "Vault Bolt Control"; - normaldoorcontrol = 1; - pixel_x = 24; - pixel_y = 8; - req_access_txt = "150"; - specialfunctions = 4 - }, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/main) -"jb" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/stripes/red/line{ - dir = 10 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/simulated/floor/plasteel/dark, -/area/ruin/unpowered/syndicate_lava_base/main) -"jc" = ( -/obj/machinery/light/small, -/turf/simulated/floor/redgrid, -/area/ruin/unpowered/syndicate_lava_base/main) -"jd" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/stripes/red/line{ - dir = 6 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/simulated/floor/plasteel/dark, -/area/ruin/unpowered/syndicate_lava_base/main) -"je" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 1 - }, -/obj/effect/mapping_helpers/no_lava, -/turf/simulated/floor/plating{ - baseturf = /turf/simulated/floor/plating/lava/smooth/lava_land_surface; - oxygen = 14; - nitrogen = 23; - temperature = 300 - }, -/area/lavaland/surface/outdoors) -"jf" = ( -/obj/machinery/door/airlock{ - name = "Cabin 1" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/dormitories) -"jg" = ( -/obj/machinery/door/airlock/maintenance, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/ruin/unpowered/syndicate_lava_base/dormitories) -"jh" = ( -/obj/machinery/door/airlock{ - name = "Cabin 3" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/dormitories) -"ji" = ( -/obj/structure/cable/yellow{ - d1 = 0; - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/power/apc/syndicate{ - dir = 8; - name = "Primary Hallway APC"; - pixel_x = -24 - }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/main) -"jj" = ( -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/main) -"jk" = ( -/obj/effect/mapping_helpers/no_lava, -/turf/simulated/floor/plating{ - baseturf = /turf/simulated/floor/plating/lava/smooth/lava_land_surface; - oxygen = 14; - nitrogen = 23; - temperature = 300 - }, -/area/lavaland/surface/outdoors) -"jl" = ( -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/main) -"jm" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/main) -"jn" = ( -/obj/effect/mob_spawn/human/lavaland_syndicate{ - icon_state = "sleeper_s"; - dir = 4 - }, -/obj/machinery/alarm/syndicate{ - pixel_y = 24 - }, -/turf/simulated/floor/plasteel/grimy, -/area/ruin/unpowered/syndicate_lava_base/dormitories) -"jo" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plasteel/grimy, -/area/ruin/unpowered/syndicate_lava_base/dormitories) -"jp" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/ruin/unpowered/syndicate_lava_base/main) -"jq" = ( -/obj/effect/mob_spawn/human/lavaland_syndicate{ - dir = 8; - icon_state = "sleeper_s" - }, -/obj/machinery/alarm/syndicate{ - pixel_y = 24 - }, -/turf/simulated/floor/plasteel/grimy, -/area/ruin/unpowered/syndicate_lava_base/dormitories) -"jr" = ( -/obj/machinery/vending/snack, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/main) -"js" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/unary/vent_pump/on, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/main) -"jt" = ( -/obj/machinery/light/small{ - dir = 4 - }, -/obj/effect/turf_decal/tile/yellow, -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, -/obj/structure/reagent_dispensers/watertank, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/main) -"ju" = ( -/turf/simulated/wall/mineral/plastitanium/nodiagonal, -/area/ruin/unpowered/syndicate_lava_base/engineering) -"jv" = ( -/obj/effect/turf_decal/bot, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/suit_storage_unit/radsuit, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/engineering) -"jw" = ( -/obj/effect/turf_decal/bot, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/effect/decal/cleanable/dirt, -/obj/structure/closet/toolcloset{ - anchored = 1 - }, -/obj/item/crowbar, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/engineering) -"jx" = ( -/obj/effect/spawner/window/plastitanium, -/obj/machinery/door/firedoor, -/obj/machinery/door/poddoor/preopen{ - id_tag = "lavalandsyndi_bar" - }, -/turf/simulated/floor/plating, -/area/ruin/unpowered/syndicate_lava_base/bar) -"jy" = ( -/turf/simulated/wall/mineral/plastitanium/nodiagonal, -/area/ruin/unpowered/syndicate_lava_base/bar) -"jz" = ( -/obj/machinery/door/airlock/public/glass{ - name = "Bar" - }, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/bar) -"jA" = ( -/obj/structure/table/wood, -/obj/item/ammo_box/magazine/m10mm, -/obj/item/ammo_box/magazine/sniper_rounds, -/turf/simulated/floor/plasteel/grimy, -/area/ruin/unpowered/syndicate_lava_base/dormitories) -"jB" = ( -/obj/machinery/light/small{ - dir = 4 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/turf/simulated/floor/plasteel/grimy, -/area/ruin/unpowered/syndicate_lava_base/dormitories) -"jC" = ( -/obj/machinery/light/small{ - dir = 8 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/turf/simulated/floor/plasteel/grimy, -/area/ruin/unpowered/syndicate_lava_base/dormitories) -"jD" = ( -/obj/machinery/vending/cola, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/main) -"jE" = ( -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/main) -"jF" = ( -/obj/structure/cable/yellow{ - 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/turf_decal/tile/yellow, -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/main) -"jG" = ( -/obj/effect/turf_decal/delivery, -/obj/machinery/door/firedoor, -/obj/structure/cable/yellow{ - 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/door/airlock/engineering{ - name = "Engineering"; - req_access_txt = "150" - }, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/engineering) -"jH" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 9 - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/engineering) -"jI" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 5 - }, -/obj/machinery/light/small{ - dir = 4 - }, -/obj/machinery/alarm/syndicate{ - dir = 8; - pixel_x = 24 - }, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/engineering) -"jJ" = ( -/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{ - dir = 6 - }, -/turf/simulated/wall/mineral/plastitanium/nodiagonal, -/area/ruin/unpowered/syndicate_lava_base/engineering) -"jK" = ( -/obj/machinery/atmospherics/unary/outlet_injector/on{ - dir = 8; - volume_rate = 200; - id = "syndie_lavaland_waste" - }, -/turf/simulated/floor/plating/asteroid/basalt/lava_land_surface, -/area/ruin/unpowered/syndicate_lava_base/engineering) -"jL" = ( -/obj/structure/table, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/item/lighter{ - pixel_x = 7; - pixel_y = 6 - }, -/obj/item/storage/fancy/cigarettes/cigpack_syndicate{ - pixel_x = -3 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/simulated/floor/plasteel/dark, -/area/ruin/unpowered/syndicate_lava_base/bar) -"jM" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/obj/structure/chair{ - dir = 8 - }, -/obj/machinery/door_control{ - id = "lavalandsyndi_bar"; - name = "Bar Blast Door Control"; - pixel_y = 26; - req_access_txt = "150" - }, -/turf/simulated/floor/plasteel/dark, -/area/ruin/unpowered/syndicate_lava_base/bar) -"jN" = ( -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/simulated/floor/plasteel/dark, -/area/ruin/unpowered/syndicate_lava_base/bar) -"jO" = ( -/obj/structure/extinguisher_cabinet{ - pixel_x = 25 - }, -/turf/simulated/floor/plasteel/dark, -/area/ruin/unpowered/syndicate_lava_base/bar) -"jP" = ( -/turf/simulated/wall/mineral/plastitanium/explosive, -/area/ruin/unpowered/syndicate_lava_base/bar) -"jQ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plating, -/area/ruin/unpowered/syndicate_lava_base/main) -"jR" = ( -/obj/machinery/light/small{ - dir = 8 - }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/main) -"jS" = ( -/obj/structure/cable/yellow{ - 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, -/area/ruin/unpowered/syndicate_lava_base/main) -"jT" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/closet/firecloset/full{ - anchored = 1 - }, -/obj/effect/turf_decal/tile/yellow, -/obj/effect/turf_decal/tile/yellow{ - dir = 4 - }, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/main) -"jU" = ( -/obj/structure/sign/engineering, -/turf/simulated/wall/mineral/plastitanium/nodiagonal, -/area/ruin/unpowered/syndicate_lava_base/engineering) -"jV" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 10 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/shower{ - desc = "The HS-452. Installed recently by the DonkCo Hygiene Division."; - dir = 4; - name = "emergency shower" - }, -/obj/structure/sign/radiation/rad_area{ - pixel_y = -32 - }, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/engineering) -"jW" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 6 - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/engineering) -"jY" = ( -/obj/structure/chair{ - dir = 1 - }, -/turf/simulated/floor/plasteel/dark, -/area/ruin/unpowered/syndicate_lava_base/bar) -"jZ" = ( -/turf/simulated/floor/plasteel/dark, -/area/ruin/unpowered/syndicate_lava_base/bar) -"ka" = ( -/obj/structure/closet/crate, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plasteel/dark, -/area/ruin/unpowered/syndicate_lava_base/bar) -"kb" = ( -/obj/structure/rack{ - dir = 8 - }, -/obj/item/storage/box/lights/bulbs, -/obj/item/stack/rods{ - amount = 50 - }, -/obj/item/clothing/head/welding, -/obj/item/stock_parts/cell/high/plus, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/ruin/unpowered/syndicate_lava_base/main) -"kc" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/ruin/unpowered/syndicate_lava_base/main) -"kd" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 2 - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/ruin/unpowered/syndicate_lava_base/main) -"ke" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/ruin/unpowered/syndicate_lava_base/main) -"kf" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/ruin/unpowered/syndicate_lava_base/main) -"kg" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/ruin/unpowered/syndicate_lava_base/main) -"kh" = ( -/obj/machinery/door/airlock/maintenance, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plating, -/area/ruin/unpowered/syndicate_lava_base/main) -"ki" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 2 - }, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/main) -"kj" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/obj/structure/chair{ - dir = 8 - }, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/main) -"kk" = ( -/obj/effect/turf_decal/delivery, -/obj/machinery/door/firedoor, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/door/airlock/engineering{ - name = "Engineering"; - req_access_txt = "150" - }, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/engineering) -"kl" = ( -/obj/machinery/atmospherics/pipe/simple/visible/scrubbers, -/turf/simulated/wall/mineral/plastitanium/nodiagonal, -/area/ruin/unpowered/syndicate_lava_base/engineering) -"km" = ( -/obj/structure/cable/yellow{ - d1 = 0; - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/computer/monitor/secret, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/engineering) -"kn" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/simulated/floor/plasteel/dark, -/area/ruin/unpowered/syndicate_lava_base/bar) -"ko" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/simulated/floor/plasteel/dark, -/area/ruin/unpowered/syndicate_lava_base/bar) -"kp" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/turf/simulated/floor/plasteel/dark, -/area/ruin/unpowered/syndicate_lava_base/bar) -"kq" = ( -/obj/machinery/alarm/syndicate{ - dir = 8; - pixel_x = 24 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/obj/machinery/vending/coffee/free, -/turf/simulated/floor/plasteel/dark, -/area/ruin/unpowered/syndicate_lava_base/bar) -"kr" = ( -/obj/machinery/door/airlock/maintenance{ - req_access_txt = "150" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/ruin/unpowered/syndicate_lava_base/bar) -"ks" = ( -/obj/structure/reagent_dispensers/fueltank, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/ruin/unpowered/syndicate_lava_base/main) -"kt" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/portable_atmospherics/canister/oxygen, -/obj/structure/window/reinforced{ - dir = 8 - }, -/turf/simulated/floor/plating, -/area/ruin/unpowered/syndicate_lava_base/main) -"ku" = ( -/turf/simulated/floor/plasteel/white/side, -/area/ruin/unpowered/syndicate_lava_base/main) -"kv" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plasteel/white/side, -/area/ruin/unpowered/syndicate_lava_base/main) -"kw" = ( -/obj/structure/table, -/obj/effect/decal/cleanable/dirt, -/obj/item/clothing/gloves/combat{ - pixel_y = -6 - }, -/obj/item/tank/internals/emergency_oxygen{ - pixel_x = 4; - pixel_y = 4 - }, -/obj/item/clothing/mask/breath{ - pixel_x = -2; - pixel_y = 4 - }, -/turf/simulated/floor/plasteel/white/side, -/area/ruin/unpowered/syndicate_lava_base/main) -"kx" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 9 - }, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/ruin/unpowered/syndicate_lava_base/engineering) -"ky" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 5 - }, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/ruin/unpowered/syndicate_lava_base/engineering) -"kz" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/visible/supply, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/pipe/manifold/visible/scrubbers{ - dir = 8 - }, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/engineering) -"kB" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/engineering) -"kC" = ( -/obj/machinery/computer/general_air_control/large_tank_control{ - dir = 8; - frequency = 1442; - name = "Nitrogen Supply Control"; - output_tag = "syndie_lavaland_n2_out"; - sensors = list("syndie_lavaland_n2_sensor" = "Tank") - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/engineering) -"kD" = ( -/obj/effect/spawner/window/plastitanium, -/turf/simulated/floor/plating, -/area/ruin/unpowered/syndicate_lava_base/engineering) -"kG" = ( -/obj/structure/table, -/obj/item/reagent_containers/food/drinks/cans/beer, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/simulated/floor/plasteel/dark, -/area/ruin/unpowered/syndicate_lava_base/bar) -"kH" = ( -/obj/structure/chair{ - dir = 8 - }, -/turf/simulated/floor/plasteel/dark, -/area/ruin/unpowered/syndicate_lava_base/bar) -"kJ" = ( -/obj/structure/chair/stool/bar, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/simulated/floor/plasteel/dark, -/area/ruin/unpowered/syndicate_lava_base/bar) -"kK" = ( -/obj/structure/chair/stool/bar, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/plasteel/dark, -/area/ruin/unpowered/syndicate_lava_base/bar) -"kL" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/simulated/floor/plasteel/dark, -/area/ruin/unpowered/syndicate_lava_base/bar) -"kM" = ( -/obj/machinery/firealarm/syndicate{ - dir = 4; - pixel_x = 26 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/vending/cigarette/syndicate/free, -/turf/simulated/floor/plasteel/dark, -/area/ruin/unpowered/syndicate_lava_base/bar) -"kN" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/structure/sink/kitchen{ - pixel_y = 28 - }, -/turf/simulated/floor/plasteel/dark, -/area/ruin/unpowered/syndicate_lava_base/bar) -"kO" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plasteel/dark, -/area/ruin/unpowered/syndicate_lava_base/bar) -"kP" = ( -/obj/structure/reagent_dispensers/watertank, -/obj/effect/decal/cleanable/dirt, -/obj/item/soap/syndie, -/obj/item/mop, -/obj/item/reagent_containers/glass/bucket, -/turf/simulated/floor/plating, -/area/ruin/unpowered/syndicate_lava_base/main) -"kQ" = ( -/turf/simulated/wall/mineral/plastitanium/nodiagonal, -/area/ruin/unpowered/syndicate_lava_base/medbay) -"kR" = ( -/obj/machinery/door/firedoor, -/obj/machinery/door/airlock/medical/glass{ - name = "Medbay" - }, -/turf/simulated/floor/plasteel/white, -/area/ruin/unpowered/syndicate_lava_base/medbay) -"kS" = ( -/obj/machinery/door/firedoor, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/door/airlock/medical/glass{ - name = "Medbay" - }, -/turf/simulated/floor/plasteel/white, -/area/ruin/unpowered/syndicate_lava_base/medbay) -"kT" = ( -/obj/structure/sign/lifestar, -/turf/simulated/wall/mineral/plastitanium/nodiagonal, -/area/ruin/unpowered/syndicate_lava_base/medbay) -"kV" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 8 - }, -/obj/machinery/power/smes/engineering, -/obj/structure/cable/yellow, -/obj/structure/sign/electricshock{ - pixel_x = -32 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/ruin/unpowered/syndicate_lava_base/engineering) -"kW" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 4 - }, -/obj/machinery/power/smes/engineering, -/obj/structure/cable/yellow, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/ruin/unpowered/syndicate_lava_base/engineering) -"lf" = ( -/obj/machinery/light/small{ - dir = 8 - }, -/obj/structure/chair{ - dir = 1 - }, -/obj/machinery/firealarm/syndicate{ - dir = 8; - pixel_x = -26 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plasteel/dark, -/area/ruin/unpowered/syndicate_lava_base/bar) -"lg" = ( -/obj/structure/chair/stool/bar, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/simulated/floor/plasteel/dark, -/area/ruin/unpowered/syndicate_lava_base/bar) -"lh" = ( -/obj/structure/table/wood, -/turf/simulated/floor/wood, -/area/ruin/unpowered/syndicate_lava_base/bar) -"li" = ( -/obj/structure/table/wood, -/obj/item/toy/cards/deck/syndicate{ - pixel_x = -6; - pixel_y = 6 - }, -/turf/simulated/floor/wood{ - icon_state = "wood-broken4" - }, -/area/ruin/unpowered/syndicate_lava_base/bar) -"lj" = ( -/obj/machinery/door/window/southleft{ - base_state = "right"; - dir = 1; - icon_state = "right"; - name = "Bar" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/wood, -/area/ruin/unpowered/syndicate_lava_base/bar) -"lk" = ( -/obj/structure/table/wood, -/obj/machinery/light/small{ - dir = 4 - }, -/obj/machinery/computer/security/telescreen/entertainment{ - pixel_x = 30 - }, -/obj/structure/window/reinforced{ - dir = 1; - pixel_y = 1 - }, -/obj/item/book/manual/chef_recipes{ - pixel_x = 2; - pixel_y = 6 - }, -/obj/item/reagent_containers/food/drinks/shaker, -/turf/simulated/floor/wood, -/area/ruin/unpowered/syndicate_lava_base/bar) -"ll" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/reagent_dispensers/beerkeg, -/turf/simulated/floor/plasteel/dark, -/area/ruin/unpowered/syndicate_lava_base/bar) -"lm" = ( -/obj/structure/closet/secure_closet/medical1{ - req_access = null; - req_access_txt = "150" - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/item/defibrillator, -/turf/simulated/floor/plasteel/white/side{ - dir = 9 - }, -/area/ruin/unpowered/syndicate_lava_base/medbay) -"ln" = ( -/turf/simulated/floor/plasteel/white/side{ - dir = 1 - }, -/area/ruin/unpowered/syndicate_lava_base/medbay) -"lo" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/obj/structure/table, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/item/storage/box/masks{ - pixel_x = -2; - pixel_y = -2 - }, -/obj/item/storage/box/gloves{ - pixel_x = 5; - pixel_y = 5 - }, -/turf/simulated/floor/plasteel/white/side{ - dir = 5 - }, -/area/ruin/unpowered/syndicate_lava_base/medbay) -"lp" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 10 - }, -/obj/machinery/power/terminal{ - dir = 1 - }, -/obj/structure/cable{ - d2 = 4; - icon_state = "0-4" - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/ruin/unpowered/syndicate_lava_base/engineering) -"lq" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 6 - }, -/obj/machinery/power/terminal{ - dir = 1 - }, -/obj/structure/cable{ - d2 = 2; - icon_state = "0-2" - }, -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/plating, -/area/ruin/unpowered/syndicate_lava_base/engineering) -"lu" = ( -/obj/machinery/light/small{ - dir = 4 - }, -/obj/effect/turf_decal/bot, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/portable_atmospherics/pump, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/engineering) -"lw" = ( -/obj/effect/turf_decal/stripes/line, -/obj/effect/mapping_helpers/no_lava, -/turf/simulated/floor/plating{ - baseturf = /turf/simulated/floor/plating/lava/smooth/lava_land_surface; - oxygen = 14; - nitrogen = 23; - temperature = 300 - }, -/area/lavaland/surface/outdoors) -"ly" = ( -/obj/structure/chair/stool/bar, -/turf/simulated/floor/plasteel/dark, -/area/ruin/unpowered/syndicate_lava_base/bar) -"lz" = ( -/obj/structure/table/wood, -/obj/item/reagent_containers/glass/rag{ - pixel_x = -4; - pixel_y = 9 - }, -/obj/item/reagent_containers/food/drinks/cans/beer{ - pixel_x = 5; - pixel_y = -2 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/wood, -/area/ruin/unpowered/syndicate_lava_base/bar) -"lA" = ( -/turf/simulated/floor/wood, -/area/ruin/unpowered/syndicate_lava_base/bar) -"lB" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/wood, -/area/ruin/unpowered/syndicate_lava_base/bar) -"lC" = ( -/obj/structure/table/wood, -/obj/machinery/reagentgrinder, -/obj/item/kitchen/rollingpin, -/obj/item/kitchen/knife{ - pixel_x = 6 - }, -/turf/simulated/floor/wood, -/area/ruin/unpowered/syndicate_lava_base/bar) -"lE" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plasteel/dark, -/area/ruin/unpowered/syndicate_lava_base/bar) -"lF" = ( -/obj/machinery/light/small{ - dir = 4 - }, -/obj/structure/closet/crate, -/obj/item/vending_refill/snack{ - pixel_x = -3; - pixel_y = 3 - }, -/obj/item/vending_refill/snack{ - pixel_x = -3; - pixel_y = 3 - }, -/obj/item/vending_refill/coffee, -/obj/item/vending_refill/cola, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plasteel/dark, -/area/ruin/unpowered/syndicate_lava_base/bar) -"lG" = ( -/obj/structure/table, -/obj/item/storage/box/syringes, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/item/gun/syringe/syndicate, -/obj/machinery/defibrillator_mount/loaded{ - pixel_x = -30 - }, -/turf/simulated/floor/plasteel/white/side{ - dir = 9 - }, -/area/ruin/unpowered/syndicate_lava_base/medbay) -"lH" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plasteel/white/corner{ - dir = 1 - }, -/area/ruin/unpowered/syndicate_lava_base/medbay) -"lI" = ( -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/medbay) -"lJ" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/medbay) -"lK" = ( -/obj/structure/table, -/obj/item/storage/firstaid/regular{ - pixel_x = -4; - pixel_y = -4 - }, -/obj/effect/decal/cleanable/dirt, -/obj/item/storage/firstaid/fire{ - pixel_x = 4; - pixel_y = 4 - }, -/turf/simulated/floor/plasteel/white/side{ - dir = 4 - }, -/area/ruin/unpowered/syndicate_lava_base/medbay) -"lL" = ( -/obj/machinery/alarm/syndicate{ - dir = 4; - pixel_x = -24 - }, -/obj/machinery/light/small{ - dir = 8 - }, -/obj/structure/table, -/obj/item/stack/sheet/metal/fifty{ - pixel_x = -1; - pixel_y = 1 - }, -/obj/item/stack/sheet/mineral/plastitanium{ - amount = 30 - }, -/obj/item/stack/sheet/glass/fifty{ - pixel_x = 1; - pixel_y = -1 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/engineering) -"lM" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/engineering) -"lP" = ( -/obj/machinery/computer/general_air_control/large_tank_control{ - dir = 8; - frequency = 1442; - name = "Oxygen Supply Control"; - output_tag = "syndie_lavaland_o2_out"; - sensors = list("syndie_lavaland_o2_sensor" = "Tank") - }, -/obj/effect/turf_decal/tile/blue, -/obj/effect/turf_decal/tile/blue{ - dir = 4 - }, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/engineering) -"lS" = ( -/obj/machinery/porta_turret/syndicate{ - dir = 9 - }, -/turf/simulated/wall/mineral/plastitanium/nodiagonal, -/area/ruin/unpowered/syndicate_lava_base/main) -"lU" = ( -/obj/machinery/alarm/syndicate{ - dir = 4; - pixel_x = -24 - }, -/obj/structure/chair/stool, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/simulated/floor/plasteel/dark, -/area/ruin/unpowered/syndicate_lava_base/bar) -"lV" = ( -/obj/structure/chair/stool/bar, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/simulated/floor/plasteel/dark, -/area/ruin/unpowered/syndicate_lava_base/bar) -"lW" = ( -/obj/structure/table/wood, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/wood, -/area/ruin/unpowered/syndicate_lava_base/bar) -"lX" = ( -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/wood, -/area/ruin/unpowered/syndicate_lava_base/bar) -"lY" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/wood, -/area/ruin/unpowered/syndicate_lava_base/bar) -"lZ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/wood, -/area/ruin/unpowered/syndicate_lava_base/bar) -"ma" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/door/airlock{ - name = "Bar Storage"; - req_access_txt = "150" - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plasteel/dark, -/area/ruin/unpowered/syndicate_lava_base/bar) -"mb" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plasteel/dark, -/area/ruin/unpowered/syndicate_lava_base/bar) -"mc" = ( -/obj/item/storage/box/donkpockets{ - pixel_x = -2; - pixel_y = 6 - }, -/obj/item/storage/box/donkpockets{ - pixel_y = 3 - }, -/obj/item/storage/box/donkpockets{ - pixel_x = 2 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/effect/decal/cleanable/dirt, -/obj/structure/closet/secure_closet/freezer/kitchen/maintenance{ - req_access = null - }, -/turf/simulated/floor/plasteel/dark, -/area/ruin/unpowered/syndicate_lava_base/bar) -"md" = ( -/obj/machinery/sleeper/syndie{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/medbay) -"me" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/medbay) -"mf" = ( -/obj/structure/sink{ - dir = 4; - pixel_x = 11 - }, -/obj/machinery/alarm/syndicate{ - dir = 8; - pixel_x = 24 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/medbay) -"mg" = ( -/obj/machinery/firealarm/syndicate{ - dir = 8; - pixel_x = -26 - }, -/obj/structure/table, -/obj/machinery/cell_charger, -/obj/item/stock_parts/cell/high/plus, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/obj/item/rpd{ - pixel_y = 3 - }, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/engineering) -"mh" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/engineering) -"mj" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/atmospherics/binary/pump{ - dir = 8; - name = "O2 to Incinerator" - }, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/engineering) -"mn" = ( -/turf/simulated/wall/mineral/plastitanium/nodiagonal, -/area/ruin/unpowered/syndicate_lava_base/telecomms) -"mo" = ( -/turf/simulated/wall/mineral/plastitanium/explosive, -/area/ruin/unpowered/syndicate_lava_base/telecomms) -"mp" = ( -/obj/effect/spawner/window/plastitanium, -/obj/machinery/door/firedoor, -/obj/machinery/door/poddoor/preopen{ - id_tag = "lavalandsyndi_telecomms" - }, -/turf/simulated/floor/plating, -/area/ruin/unpowered/syndicate_lava_base/telecomms) -"mr" = ( -/turf/simulated/floor/plating, -/area/ruin/unpowered/syndicate_lava_base/arrivals) -"mt" = ( -/obj/machinery/computer/arcade/orion_trail, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plasteel/dark, -/area/ruin/unpowered/syndicate_lava_base/bar) -"mu" = ( -/obj/item/twohanded/required/kirbyplants{ - icon_state = "plant-22" - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plasteel/dark, -/area/ruin/unpowered/syndicate_lava_base/bar) -"mv" = ( -/obj/structure/table/wood, -/obj/machinery/light/small, -/obj/structure/cable/yellow, -/obj/machinery/power/apc/syndicate{ - dir = 2; - name = "Bar APC"; - pixel_y = -24 - }, -/turf/simulated/floor/wood, -/area/ruin/unpowered/syndicate_lava_base/bar) -"mw" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/wood, -/area/ruin/unpowered/syndicate_lava_base/bar) -"mx" = ( -/obj/structure/table/wood, -/obj/machinery/kitchen_machine/microwave, -/turf/simulated/floor/wood, -/area/ruin/unpowered/syndicate_lava_base/bar) -"my" = ( -/obj/structure/closet/secure_closet/freezer/fridge/open, -/obj/item/reagent_containers/food/condiment/enzyme, -/obj/item/reagent_containers/food/snacks/chocolatebar, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plasteel/dark, -/area/ruin/unpowered/syndicate_lava_base/bar) -"mz" = ( -/obj/machinery/door/airlock/maintenance, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/ruin/unpowered/syndicate_lava_base/main) -"mA" = ( -/obj/machinery/light/small{ - dir = 8 - }, -/obj/structure/bed/roller, -/obj/machinery/iv_drip, -/obj/item/reagent_containers/iv_bag/blood/OMinus, -/obj/machinery/firealarm/syndicate{ - dir = 8; - pixel_x = -26 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plasteel/white/side{ - dir = 8 - }, -/area/ruin/unpowered/syndicate_lava_base/medbay) -"mB" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/medbay) -"mC" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/medbay) -"mD" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/medbay) -"mE" = ( -/obj/structure/table/reinforced, -/obj/item/scalpel, -/obj/item/circular_saw{ - pixel_y = 9 - }, -/obj/machinery/light/small{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plasteel/white/side{ - dir = 4 - }, -/area/ruin/unpowered/syndicate_lava_base/medbay) -"mF" = ( -/obj/structure/extinguisher_cabinet{ - pixel_x = -27; - pixel_y = 1 - }, -/obj/structure/chair/stool, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/engineering) -"mG" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/engineering) -"mK" = ( -/obj/effect/turf_decal/stripes/line, -/obj/machinery/computer/general_air_control/large_tank_control{ - dir = 1; - frequency = 1442; - name = "Toxins Supply Control"; - output_tag = "syndie_lavaland_tox_out"; - sensors = list("syndie_lavaland_tox_sensor" = "Tank") - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/engineering) -"mN" = ( -/obj/structure/sign/securearea, -/turf/simulated/wall/mineral/plastitanium/nodiagonal, -/area/ruin/unpowered/syndicate_lava_base/telecomms) -"mP" = ( -/obj/structure/filingcabinet/security, -/turf/simulated/floor/plasteel/dark, -/area/ruin/unpowered/syndicate_lava_base/telecomms) -"mQ" = ( -/turf/simulated/floor/plasteel/dark, -/area/ruin/unpowered/syndicate_lava_base/telecomms) -"mR" = ( -/obj/structure/table, -/obj/item/storage/toolbox/syndicate, -/obj/item/multitool, -/obj/machinery/door_control{ - id = "lavalandsyndi_telecomms"; - name = "Telecomms Blast Door Control"; - pixel_x = 26; - req_access_txt = "150" - }, -/turf/simulated/floor/plasteel/dark, -/area/ruin/unpowered/syndicate_lava_base/telecomms) -"mT" = ( -/turf/simulated/wall/mineral/plastitanium/nodiagonal, -/area/ruin/unpowered/syndicate_lava_base/arrivals) -"mU" = ( -/obj/effect/spawner/window/plastitanium, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plating, -/area/ruin/unpowered/syndicate_lava_base/bar) -"mX" = ( -/obj/structure/rack{ - dir = 8 - }, -/obj/item/storage/toolbox/mechanical, -/obj/item/stack/cable_coil/yellow{ - pixel_x = 2; - pixel_y = -3 - }, -/obj/item/multitool, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/arrivals) -"mY" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plasteel/white/side{ - dir = 4 - }, -/area/ruin/unpowered/syndicate_lava_base/arrivals) -"mZ" = ( -/obj/machinery/sleeper/syndie{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/medbay) -"na" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/medbay) -"nc" = ( -/obj/machinery/computer/turbine_computer{ - dir = 1; - id = "syndie_lavaland_incineratorturbine" - }, -/obj/machinery/door_control{ - id = "lavalandsyndi_incineratoroutput"; - name = "Incinerator Output Blast Door Control"; - pixel_x = -6; - pixel_y = -24; - req_access_txt = "150" - }, -/obj/machinery/door_control{ - id = "lavalandsyndi_incineratorinput"; - name = "Incinerator Input Blast Door Control"; - pixel_x = 6; - pixel_y = -24; - req_access_txt = "150" - }, -/obj/effect/turf_decal/stripes/line, -/obj/effect/decal/cleanable/dirt, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/engineering) -"nd" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/turf_decal/stripes/line, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/engineering) -"nf" = ( -/obj/structure/sign/fire, -/turf/simulated/wall/mineral/plastitanium, -/area/ruin/unpowered/syndicate_lava_base/engineering) -"ng" = ( -/obj/structure/table, -/obj/machinery/photocopier/faxmachine/longrange/syndie{ - department = "Syndicate Bioweapon Research Outpost" - }, -/turf/simulated/floor/plasteel/dark, -/area/ruin/unpowered/syndicate_lava_base/telecomms) -"nk" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/simulated/floor/plasteel/dark, -/area/ruin/unpowered/syndicate_lava_base/telecomms) -"nl" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/simulated/floor/plasteel/dark, -/area/ruin/unpowered/syndicate_lava_base/telecomms) -"nm" = ( -/obj/machinery/light/small{ - dir = 4 - }, -/obj/machinery/atmospherics/unary/vent_pump/on, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/structure/noticeboard{ - dir = 8; - pixel_x = 27 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/simulated/floor/plasteel/dark, -/area/ruin/unpowered/syndicate_lava_base/telecomms) -"nn" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/arrivals) -"no" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/arrivals) -"np" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/arrivals) -"nq" = ( -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/arrivals) -"ns" = ( -/obj/structure/closet/emcloset/anchored, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/arrivals) -"nt" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/power/apc/syndicate{ - dir = 1; - name = "Arrival Hallway APC"; - pixel_y = 24 - }, -/obj/structure/cable/yellow{ - d2 = 4; - icon_state = "0-4" - }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/arrivals) -"nu" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/arrivals) -"nv" = ( -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/arrivals) -"nw" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 2 - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/plasteel/white/side{ - dir = 4 - }, -/area/ruin/unpowered/syndicate_lava_base/arrivals) -"nx" = ( -/obj/machinery/door/firedoor, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/airlock/medical/glass{ - name = "Medbay" - }, -/turf/simulated/floor/plasteel/white, -/area/ruin/unpowered/syndicate_lava_base/medbay) -"ny" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plasteel/white/side{ - dir = 8 - }, -/area/ruin/unpowered/syndicate_lava_base/medbay) -"nz" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/medbay) -"nA" = ( -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/plasteel/white/corner, -/area/ruin/unpowered/syndicate_lava_base/medbay) -"nB" = ( -/obj/structure/table/reinforced, -/obj/item/surgicaldrill, -/obj/effect/decal/cleanable/dirt, -/obj/item/bonegel, -/obj/item/bonesetter, -/obj/item/FixOVein, -/turf/simulated/floor/plasteel/white/side, -/area/ruin/unpowered/syndicate_lava_base/medbay) -"nC" = ( -/obj/structure/table/reinforced, -/obj/item/retractor, -/obj/item/hemostat, -/obj/effect/decal/cleanable/dirt, -/obj/item/cautery, -/turf/simulated/floor/plasteel/white/side{ - dir = 6 - }, -/area/ruin/unpowered/syndicate_lava_base/medbay) -"nH" = ( -/obj/machinery/alarm/syndicate{ - dir = 4; - pixel_x = -24 - }, -/obj/machinery/light/small{ - dir = 8 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/simulated/floor/plasteel/dark, -/area/ruin/unpowered/syndicate_lava_base/telecomms) -"nI" = ( -/obj/machinery/computer/camera_advanced, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/simulated/floor/plasteel/dark, -/area/ruin/unpowered/syndicate_lava_base/telecomms) -"nJ" = ( -/obj/structure/table/reinforced, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/simulated/floor/plasteel/dark, -/area/ruin/unpowered/syndicate_lava_base/telecomms) -"nK" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/structure/cable/yellow{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/simulated/floor/plasteel/dark, -/area/ruin/unpowered/syndicate_lava_base/telecomms) -"nL" = ( -/obj/machinery/door/airlock/hatch{ - name = "Telecommunications"; - req_access_txt = "150" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/simulated/floor/plasteel/dark, -/area/ruin/unpowered/syndicate_lava_base/telecomms) -"nN" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/arrivals) -"nQ" = ( -/obj/effect/turf_decal/stripes/corner{ - dir = 8 - }, -/obj/machinery/light/small, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/arrivals) -"nR" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/arrivals) -"nS" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/firealarm/syndicate{ - dir = 2; - pixel_y = 24 - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/arrivals) -"nT" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/arrivals) -"nU" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/obj/machinery/alarm/syndicate{ - pixel_y = 24 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red{ - dir = 4 - }, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/arrivals) -"nV" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/effect/turf_decal/tile/red{ - dir = 1 - }, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/arrivals) -"nW" = ( -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/arrivals) -"nX" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/arrivals) -"nZ" = ( -/turf/simulated/floor/plasteel/white/side{ - dir = 4 - }, -/area/ruin/unpowered/syndicate_lava_base/arrivals) -"oa" = ( -/turf/simulated/floor/plasteel/white/side{ - dir = 10 - }, -/area/ruin/unpowered/syndicate_lava_base/medbay) -"ob" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plasteel/white/side, -/area/ruin/unpowered/syndicate_lava_base/medbay) -"oh" = ( -/obj/machinery/firealarm/syndicate{ - dir = 8; - pixel_x = -26 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/simulated/floor/plasteel/dark, -/area/ruin/unpowered/syndicate_lava_base/telecomms) -"oi" = ( -/obj/structure/chair/office{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/simulated/floor/plasteel/dark, -/area/ruin/unpowered/syndicate_lava_base/telecomms) -"ok" = ( -/obj/structure/chair{ - dir = 8 - }, -/obj/structure/cable/yellow, -/obj/machinery/power/apc/syndicate{ - dir = 2; - name = "Telecommunications APC"; - pixel_y = -24 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 1 - }, -/obj/effect/turf_decal/tile/neutral, -/obj/effect/turf_decal/tile/neutral{ - dir = 4 - }, -/obj/effect/turf_decal/tile/neutral{ - dir = 8 - }, -/turf/simulated/floor/plasteel/dark, -/area/ruin/unpowered/syndicate_lava_base/telecomms) -"ol" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/structure/rack{ - dir = 8 - }, -/obj/item/clothing/suit/space/syndicate, -/obj/item/clothing/mask/gas/syndicate, -/obj/item/clothing/head/helmet/space/syndicate, -/obj/item/mining_scanner, -/obj/item/pickaxe, -/turf/simulated/floor/mineral/plastitanium, -/area/ruin/unpowered/syndicate_lava_base/arrivals) -"om" = ( -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/arrivals) -"on" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/obj/structure/extinguisher_cabinet{ - pixel_y = -29 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/arrivals) -"oo" = ( -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/arrivals) -"op" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/obj/effect/turf_decal/tile/red, -/obj/effect/turf_decal/tile/red{ - dir = 8 - }, -/turf/simulated/floor/plasteel, -/area/ruin/unpowered/syndicate_lava_base/arrivals) -"or" = ( -/obj/structure/rack{ - dir = 8 - }, -/obj/item/storage/belt/medical, -/obj/effect/decal/cleanable/dirt, -/obj/item/crowbar, -/obj/item/clothing/glasses/hud/health, -/obj/item/clothing/accessory/stethoscope, -/turf/simulated/floor/plasteel/white, -/area/ruin/unpowered/syndicate_lava_base/medbay) -"ou" = ( -/obj/machinery/computer/message_monitor{ - dir = 1 - }, -/turf/simulated/floor/plasteel/dark, -/area/ruin/unpowered/syndicate_lava_base/telecomms) -"ov" = ( -/obj/structure/table/reinforced, -/obj/item/pen, -/obj/item/paper_bin/syndicate, -/turf/simulated/floor/plasteel/dark, -/area/ruin/unpowered/syndicate_lava_base/telecomms) -"ox" = ( -/obj/effect/spawner/window/plastitanium, -/obj/machinery/door/firedoor, -/obj/machinery/door/poddoor{ - id_tag = "lavalandsyndi_arrivals" - }, -/turf/simulated/floor/plating, -/area/ruin/unpowered/syndicate_lava_base/arrivals) -"oF" = ( -/obj/structure/sign/securearea, -/turf/simulated/wall/mineral/plastitanium/nodiagonal, -/area/ruin/unpowered/syndicate_lava_base/arrivals) -"oP" = ( -/obj/structure/sign/chemistry, -/turf/simulated/wall/mineral/plastitanium/nodiagonal, -/area/ruin/unpowered/syndicate_lava_base/testlab) -"pQ" = ( -/obj/structure/sign/explosives/alt{ - pixel_x = 32 - }, -/turf/simulated/floor/redgrid, -/area/ruin/unpowered/syndicate_lava_base/main) -"qG" = ( -/obj/structure/sign/explosives/alt{ - pixel_x = -32 - }, -/turf/simulated/floor/engine, -/area/ruin/unpowered/syndicate_lava_base/testlab) -"vu" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/engine, -/area/ruin/unpowered/syndicate_lava_base/testlab) -"yd" = ( -/obj/machinery/atmospherics/pipe/simple/visible/yellow, -/turf/simulated/wall/mineral/plastitanium, -/area/ruin/unpowered/syndicate_lava_base/engineering) -"yU" = ( -/turf/simulated/wall/mineral/plastitanium/explosive, -/area/ruin/unpowered/syndicate_lava_base/chemistry) -"Au" = ( -/turf/simulated/wall/mineral/plastitanium/explosive, -/area/ruin/unpowered/syndicate_lava_base/engineering) -"BF" = ( -/obj/effect/spawner/window/plastitanium, -/obj/machinery/door/firedoor, -/obj/machinery/door/poddoor/preopen{ - id_tag = "lavalandsyndi"; - name = "Syndicate Research Experimentation Shutters" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/ruin/unpowered/syndicate_lava_base/testlab) -"Cg" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/engine, -/area/ruin/unpowered/syndicate_lava_base/testlab) -"CG" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/turf/simulated/floor/engine, -/area/ruin/unpowered/syndicate_lava_base/testlab) -"DL" = ( -/obj/structure/sign/explosives/alt{ - pixel_x = 32 - }, -/turf/simulated/floor/engine, -/area/ruin/unpowered/syndicate_lava_base/testlab) -"Lg" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/turf/simulated/floor/engine, -/area/ruin/unpowered/syndicate_lava_base/testlab) -"LQ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/engine, -/area/ruin/unpowered/syndicate_lava_base/testlab) -"RI" = ( -/turf/simulated/wall/mineral/plastitanium, -/area/ruin/unpowered/syndicate_lava_base/engineering) -"RV" = ( -/obj/structure/sign/fire, -/turf/simulated/wall/mineral/plastitanium/nodiagonal, -/area/ruin/unpowered/syndicate_lava_base/engineering) -"Tp" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/turf/simulated/floor/engine, -/area/ruin/unpowered/syndicate_lava_base/testlab) -"TC" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/engine, -/area/ruin/unpowered/syndicate_lava_base/testlab) - -(1,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -aa -aa -"} -(2,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -"} -(3,1,1) = {" -aa -aa -aa -aa -aa -ab -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -"} -(4,1,1) = {" -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -"} -(5,1,1) = {" -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -"} -(6,1,1) = {" -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -"} -(7,1,1) = {" -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -eh -gj -eh -eh -eh -eh -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -mn -mN -mn -mn -mn -mn -ab -ab -ab -ab -ab -ab -ab -aa -"} -(8,1,1) = {" -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ac -eh -eG -ff -eI -aj -eh -eh -eh -eh -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -mp -mP -cb -nH -oh -mn -mn -ab -ab -ab -ab -ab -ab -aa -"} -(9,1,1) = {" -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -eh -eH -fg -fy -gp -eI -am -ao -eh -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -mp -ng -nk -nI -oi -ou -mn -ab -ab -ab -ab -ab -ab -ab -"} -(10,1,1) = {" -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ac -eh -eI -eI -eI -gq -gT -hq -hF -eh -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -mp -mQ -nl -nJ -nJ -ov -mn -ab -ab -ab -ab -ab -ab -ab -"} -(11,1,1) = {" -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ac -eh -eG -fh -eI -gr -eI -an -ar -eh -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -mp -mR -nm -nK -ok -mn -mn -ab -ab -ab -ab -ab -ab -ab -"} -(12,1,1) = {" -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -eh -eH -fg -fz -gs -eh -gj -eh -eh -ab -ab -ab -ab -ab -ab -dG -dG -dG -dG -dG -dG -lS -mn -mn -mo -nL -mn -mn -ab -ab -ab -ab -ab -ab -ab -ab -"} -(13,1,1) = {" -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -eh -gj -eI -eI -gt -gU -hs -hH -ab -ab -ab -ab -ab -ab -dG -dG -ig -iu -iu -iu -bv -aZ -az -ba -nn -aE -mT -mT -ab -ab -ab -ab -ab -ab -ab -ab -"} -(14,1,1) = {" -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ac -eh -fi -fA -bV -gV -ht -hH -ab -ab -ab -ab -ab -dG -dG -ig -je -iv -jk -aw -lw -aZ -mr -bb -aD -nN -ol -mT -ab -ab -ab -ab -ab -ab -ab -ab -"} -(15,1,1) = {" -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ei -eJ -fj -fB -gv -ax -hu -hH -ab -ab -ab -ab -dG -dG -ig -je -jk -jx -jx -jy -jy -jy -aA -mT -no -nN -ol -mT -ab -ab -ab -ab -ab -ab -ab -ab -"} -(16,1,1) = {" -aa -ab -ab -ab -ab -ab -ab -ac -ab -ac -ac -ae -ae -ae -ae -fC -ad -aX -hv -hH -ab -ab -ab -dG -dG -ig -je -jk -jx -jx -kG -lf -bw -jy -jy -jP -np -aH -mT -mT -mT -oF -ab -ab -ab -ab -ab -ab -"} -(17,1,1) = {" -ab -ab -ab -ab -ab -ae -ae -ae -ae -ae -ae -ae -au -av -aL -fD -aI -eh -eh -eh -hW -dG -dG -dG -ig -je -iv -jx -jx -kn -kH -jN -jZ -lU -mt -mU -np -aN -aO -aP -aR -aG -aS -ab -ab -ab -ab -aa -"} -(18,1,1) = {" -ab -ab -ab -ab -ae -aL -aq -aq -qG -dc -aq -dQ -ek -eL -ae -fE -gy -bd -ay -aU -aC -bc -iu -iu -je -jk -jx -jx -jN -jZ -jN -jZ -jN -jZ -kn -mU -nq -nQ -mT -mT -mT -oF -ab -ab -ab -ab -ab -aa -"} -(19,1,1) = {" -ab -ab -ab -ab -ae -ap -aq -Lg -aq -Lg -aq -dR -el -eM -ae -fF -gz -aT -aB -hJ -aY -ih -iv -iM -iv -iv -jx -jL -jY -jN -bZ -lg -ly -lV -mu -mU -cc -nR -om -mT -ab -ab -ab -ab -ab -ab -aa -aa -"} -(20,1,1) = {" -aa -ab -ab -ab -ae -aq -aq -aF -aq -aF -aq -ae -bU -eN -ae -ae -aJ -ha -ha -aV -ha -ha -ha -ha -ha -ha -jy -jM -jN -jZ -kJ -lh -lz -lW -mv -jy -jy -nS -on -mT -ab -ab -ab -ab -ab -ab -ab -aa -"} -(21,1,1) = {" -aa -ab -ab -ab -ae -aq -aq -Tp -aq -Cg -aq -dS -eo -eO -fk -ae -aK -hb -ha -iN -ha -ii -iw -iO -hB -jl -jz -jN -jZ -ko -kK -li -lA -lX -mw -ah -jy -nu -oo -ox -ab -ab -ab -ab -ab -ab -ab -ab -"} -(22,1,1) = {" -aa -ab -ab -ab -ae -ap -aq -CG -vu -TC -LQ -BF -ep -eP -fl -fG -gE -hc -hx -hL -hZ -ij -ix -iP -hd -jm -jz -jO -jN -kp -kL -lj -lB -lY -lA -ai -jP -nT -op -ox -ab -ab -ab -ab -ab -ab -ab -ab -"} -(23,1,1) = {" -aa -ab -ab -ab -ae -ae -aq -aq -DL -di -aq -dS -eq -eQ -ae -dQ -gF -hd -hy -hy -ia -ik -if -iQ -hz -hz -jP -jy -ka -kq -kM -lk -lC -lZ -mx -jy -jy -nU -oo -ox -ab -ab -ab -ab -ab -ab -ab -ab -"} -(24,1,1) = {" -aa -ab -ab -ab -ab -ae -ae -ae -ae -ae -aL -ae -ae -ae -oP -fH -gG -he -hz -hz -hz -hz -iy -iR -hz -jn -jA -jy -jy -jy -jy -jy -ak -ma -jy -jy -ns -nV -oo -ox -ab -ab -ab -ab -ab -ab -ab -ab -"} -(25,1,1) = {" -aa -ab -ab -ab -ab -ab -ac -ac -as -do -dA -dT -er -eR -fm -fI -gH -he -hz -hM -ib -hz -iz -iS -jf -jo -jB -hz -kb -jy -kN -jZ -lE -mb -my -jy -nt -nW -aW -mT -ab -ab -ab -ab -ab -ab -ab -ab -"} -(26,1,1) = {" -ab -ab -ab -ab -ab -ab -ab -as -as -du -dB -dU -es -eS -fn -fO -gG -hf -hz -hN -ic -il -iA -iT -hz -hz -hz -hz -kc -kr -kO -ll -lF -mc -jy -jy -nu -nX -oo -mT -ab -ab -ab -ab -ab -ab -ab -ab -"} -(27,1,1) = {" -ab -ab -ab -ab -ab -ab -ab -at -aM -dv -dC -bI -et -eT -fo -fO -gG -hg -hz -hz -hz -hz -iB -iU -jg -jp -jp -jQ -kd -jy -jy -jy -jy -jy -jy -mX -nv -aQ -mT -mT -ab -ab -ab -ab -ab -ab -ab -aa -"} -(28,1,1) = {" -aa -ab -ab -ab -ab -ab -ab -at -cA -dw -dC -dX -eu -eU -fn -fH -gG -he -hA -hO -id -im -bX -iV -hz -hz -hz -hz -ke -jQ -jQ -jQ -jp -jp -mz -mY -nw -nZ -mT -ab -ab -ab -ab -ab -ab -ab -ab -aa -"} -(29,1,1) = {" -aa -ab -ab -ab -ab -ab -ab -at -cG -dx -dE -dY -ev -eV -fp -fH -gI -he -hz -hz -hz -hz -iD -iW -jh -jo -jC -hz -kf -ks -kP -kQ -kQ -kQ -kQ -kT -nx -kR -kQ -kQ -ab -ab -ab -ab -ab -ab -ab -ab -"} -(30,1,1) = {" -aa -ab -ab -ab -ab -ab -ab -as -as -as -dI -dZ -ew -as -yU -as -gJ -hh -hz -hP -ic -in -iE -iX -hz -jq -jA -hz -kg -kt -kQ -bT -lG -md -mA -mZ -ny -oa -or -kQ -ab -ab -ab -ab -ab -ab -ab -ab -"} -(31,1,1) = {" -aa -ab -ab -ab -ab -ab -ab -ab -ac -as -as -as -as -as -fq -dy -gK -he -hz -hQ -ie -hz -iF -iY -hz -hO -hz -hz -kh -ha -kQ -lm -lH -me -mB -na -nz -ob -al -kQ -ab -ab -ab -ab -ab -ab -ab -ab -"} -(32,1,1) = {" -aa -aa -ab -ab -ab -ab -ab -ab -ac -dy -dK -ea -ex -eW -fr -fW -gL -he -hz -hz -hz -hz -hz -hz -hz -jr -jD -jR -iQ -ku -kR -ln -lI -lI -mC -lI -nA -cd -kQ -kQ -ac -ab -ab -ab -ab -ab -ab -ab -"} -(33,1,1) = {" -aa -aa -ab -ab -ab -ab -ab -ab -ab -dy -dL -eb -ey -eX -fs -fa -gM -hi -hB -hB -hB -ag -iG -iZ -ji -js -jE -jS -ki -kv -kS -ln -lJ -mf -mD -lI -nB -kQ -kQ -ac -ab -ab -ab -ab -ab -ab -ab -ab -"} -(34,1,1) = {" -aa -aa -aa -ab -ab -ab -ab -ab -ab -dy -dM -ec -ez -eY -ft -dP -gN -hj -hj -hR -af -ip -iH -ja -bY -jj -gI -if -kj -kw -kT -lo -lK -kQ -mE -bR -nC -kQ -ac -ab -ab -ab -ab -ab -ab -ab -ab -aa -"} -(35,1,1) = {" -aa -aa -ab -ab -ab -ab -ab -ab -ab -dy -dy -ed -ey -eZ -dy -dy -gO -hk -hC -dy -ha -ce -iI -iq -ha -jt -jF -jT -ju -ju -ju -ju -ju -Au -ju -ju -RI -RI -RI -RI -RI -ab -ab -ab -ab -ab -ab -ab -"} -(36,1,1) = {" -aa -aa -ab -ab -ab -ab -ab -ab -ab -ac -dy -dy -eA -fa -dy -fY -gP -gQ -hl -hS -ha -ir -iJ -jb -ha -ju -jG -jU -ju -kx -kV -lp -lL -mg -mF -nc -RI -bg -RI -bQ -RI -RI -nf -ab -ab -ab -ab -aa -"} -(37,1,1) = {" -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -dy -bk -eB -fb -fu -gb -gQ -hl -bW -bS -ha -bx -iK -jc -ha -jv -jH -jV -ju -ky -kW -lq -lM -mh -mG -nd -bf -bh -bj -cp -cs -ct -cu -ab -ab -ab -ab -ab -"} -(38,1,1) = {" -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -dy -ef -eC -fc -fv -fv -gR -gQ -hl -hU -ha -it -pQ -jd -ha -jw -jI -jW -kk -kz -by -bC -bF -ca -bL -bO -yd -bi -yd -cq -RI -RI -nf -ab -ab -ab -ab -ab -"} -(39,1,1) = {" -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -dy -eg -eD -fd -bl -bm -gS -hn -gQ -hV -ha -ha -ha -ha -ha -ju -jJ -kl -kl -be -bz -bD -bG -mj -bM -RV -RI -RI -RI -cr -nf -ab -ab -ab -ab -ab -ab -ab -"} -(40,1,1) = {" -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -dy -dP -eE -fe -dy -bn -dy -ho -hD -dy -dy -ac -ab -ab -ab -ac -jK -ju -km -kB -br -bE -bH -bJ -bN -bP -cl -cn -RI -ab -ab -ab -ab -ab -ab -ab -ab -ab -"} -(41,1,1) = {" -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -dy -eF -eF -dy -bo -dy -eF -eF -dy -ab -ab -ab -ab -ab -ab -ab -ju -ju -kC -bA -lu -lP -bK -mK -kD -cm -co -RI -ab -ab -ab -ab -ab -ab -ab -ab -ab -"} -(42,1,1) = {" -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -dy -gg -dy -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ju -kD -bB -Au -kD -bB -ju -ju -ju -ju -RI -ab -ab -ab -ab -ab -ab -ab -ab -aa -"} -(43,1,1) = {" -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -fx -bp -fx -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ju -bs -bu -ju -ch -cj -ju -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -"} -(44,1,1) = {" -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -bq -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ju -bt -cg -ju -ci -ck -ju -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -"} -(45,1,1) = {" -aa -aa -aa -ab -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ju -ju -ju -ju -ju -ju -ju -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -"} -(46,1,1) = {" -aa -aa -aa -aa -aa -ab -ab -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -"} -(47,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -"} -(48,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -aa -aa -"} diff --git a/_maps/map_files/RandomRuins/SpaceRuins/syndie_space_base.dmm b/_maps/map_files/RandomRuins/SpaceRuins/syndie_space_base.dmm new file mode 100644 index 00000000000..6f97ce3e9f8 --- /dev/null +++ b/_maps/map_files/RandomRuins/SpaceRuins/syndie_space_base.dmm @@ -0,0 +1,8654 @@ +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"aj" = ( +/obj/effect/spawner/window/reinforced, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/arrivals) +"ap" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/bar) +"ar" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0; + tag = "" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/turf/simulated/floor/plating, +/area/ruin/unpowered/syndicate_space_base/engineering) +"at" = ( +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/ruin/unpowered/syndicate_space_base/engineering) +"av" = ( +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "whiteblue"; + tag = "icon-whitehall (WEST)" + }, +/area/ruin/unpowered/syndicate_space_base/medbay) +"aT" = ( +/obj/effect/decal/cleanable/blood, +/obj/item/clothing/mask/gas/clown_hat{ + desc = "What is this? A secret syndie space face, inside the secret syndie space base?"; + name = "syndicate clown mask" + }, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/dormitories) +"aX" = ( +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/yellow{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/plating, +/area/ruin/unpowered/syndicate_space_base/engineering) +"be" = ( +/obj/machinery/atmospherics/binary/pump/on{ + name = "Air To Distro" + }, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/engineering) +"br" = ( +/obj/effect/turf_decal/stripes/red/line, +/obj/machinery/door_control{ + id = "syndie_lavaland_vault"; + name = "Vault Bolt Control"; + normaldoorcontrol = 1; + pixel_x = 24; + pixel_y = -24; + req_access_txt = "150"; + specialfunctions = 4 + }, +/turf/simulated/floor/plasteel{ + dir = 2; + icon_state = "brown" + }, +/area/ruin/unpowered/syndicate_space_base/cargo) +"bw" = ( +/turf/simulated/floor/plasteel{ + icon_state = "whitebluefull"; + tag = "icon-whitebluefull" + }, +/area/ruin/unpowered/syndicate_space_base/medbay) +"bO" = ( +/obj/structure/rack, +/obj/item/rpd{ + pixel_y = 3 + }, +/turf/simulated/floor/plating, +/area/ruin/unpowered/syndicate_space_base/engineering) +"bS" = ( +/obj/structure/chair{ + dir = 8 + }, +/turf/simulated/floor/plasteel{ + icon_state = "whitegreenfull"; + tag = "icon-whitebluefull" + }, +/area/ruin/unpowered/syndicate_space_base/virology) +"bT" = ( +/turf/simulated/floor/plasteel{ + icon_state = "white" + }, +/area/ruin/unpowered/syndicate_space_base/chemistry) +"bY" = ( +/obj/structure/table, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/arrivals) +"cg" = ( +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "darkbluecorners" + }, +/area/ruin/unpowered/syndicate_space_base/dormitories) +"ch" = ( +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/yellow{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/ruin/unpowered/syndicate_space_base/engineering) +"cj" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/arrivals) +"cs" = ( +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "whitegreen"; + tag = "icon-whitegreen (WEST)" + }, +/area/ruin/unpowered/syndicate_space_base/virology) +"cB" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5; + level = 1 + }, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/chemistry) +"cC" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0; + tag = "" + }, +/obj/machinery/light, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/main) +"cD" = ( +/obj/machinery/atmospherics/pipe/manifold/visible{ + dir = 4; + initialize_directions = 11; + level = 2 + }, +/obj/machinery/meter, +/turf/simulated/floor/plating, +/area/ruin/unpowered/syndicate_space_base/engineering) +"cE" = ( +/obj/machinery/atmospherics/binary/valve, +/turf/simulated/floor/plating, +/area/ruin/unpowered/syndicate_space_base/engineering) +"cH" = ( +/obj/machinery/door/window/eastright{ + name = "Animal Storage"; + req_access_txt = "150"; + req_one_access_txt = "150" + }, +/obj/structure/window/basic{ + dir = 1 + }, +/turf/simulated/floor/grass, +/area/ruin/unpowered/syndicate_space_base/bar) +"cJ" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5; + level = 1 + }, +/turf/simulated/floor/engine, +/area/ruin/unpowered/syndicate_space_base/testlab) +"cL" = ( +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, +/obj/machinery/power/apc/syndicate{ + dir = 1; + name = "Medical APC"; + pixel_y = 24 + }, +/turf/simulated/floor/plasteel{ + dir = 5; + icon_state = "whiteblue"; + tag = "icon-whiteblue (NORTHEAST)" + }, +/area/ruin/unpowered/syndicate_space_base/medbay) +"cO" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4"; + tag = "90Curve" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plasteel{ + icon_state = "white" + }, +/area/ruin/unpowered/syndicate_space_base/medbay) +"cS" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4; + initialize_directions = 11; + level = 1 + }, +/turf/simulated/floor/plasteel{ + icon_state = "floorgrime" + }, +/area/ruin/unpowered/syndicate_space_base/bar) +"cU" = ( +/obj/structure/table/glass, +/obj/machinery/reagentgrinder{ + pixel_y = 5 + }, +/obj/item/reagent_containers/glass/beaker/large, +/turf/simulated/floor/plasteel{ + dir = 5; + icon_state = "whitepurple"; + tag = "icon-whitepurple (NORTHEAST)" + }, +/area/ruin/unpowered/syndicate_space_base/chemistry) +"di" = ( +/turf/simulated/floor/plasteel{ + icon_state = "grimy" + }, +/area/ruin/unpowered/syndicate_space_base/bar) +"dl" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/dormitories) +"ds" = ( +/obj/structure/sign/poster/contraband/hacking_guide, +/turf/simulated/wall/mineral/plastitanium/nodiagonal, +/area/ruin/unpowered/syndicate_space_base/engineering) +"dH" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/turf/simulated/floor/engine, +/area/ruin/unpowered/syndicate_space_base/testlab) +"dP" = ( +/obj/effect/decal/warning_stripes/yellow, +/obj/machinery/portable_atmospherics/canister/sleeping_agent, +/turf/simulated/floor/plating, +/area/ruin/unpowered/syndicate_space_base/engineering) +"dS" = ( +/obj/structure/closet/crate, +/obj/item/extinguisher{ + pixel_x = -5; + pixel_y = 5 + }, +/obj/item/extinguisher{ + pixel_x = -2; + pixel_y = 2 + }, +/obj/item/extinguisher{ + pixel_x = 1; + pixel_y = -1 + }, +/obj/item/flashlight{ + pixel_x = -5; + pixel_y = 5 + }, +/obj/item/flashlight{ + pixel_x = -2; + pixel_y = 2 + }, +/obj/item/flashlight{ + pixel_x = 1; + pixel_y = -1 + }, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "brown" + }, +/area/ruin/unpowered/syndicate_space_base/cargo) +"dW" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0; + tag = "" + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/arrivals) +"el" = ( +/obj/structure/table/reinforced, +/obj/item/storage/box/monkeycubes/syndicate, +/obj/item/storage/box/monkeycubes/syndicate, +/obj/item/storage/box/monkeycubes/syndicate, +/obj/item/storage/box/monkeycubes/syndicate, +/obj/item/storage/box/monkeycubes/syndicate, +/turf/simulated/floor/plasteel{ + dir = 6; + icon_state = "brown" + }, +/area/ruin/unpowered/syndicate_space_base/cargo) +"em" = ( +/obj/structure/table, +/obj/machinery/door_control{ + id = "SSBrestricted"; + name = "Shutters Control"; + pixel_x = 6; + req_access_txt = "151" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "darkred" + }, +/area/ruin/unpowered/syndicate_space_base/arrivals) +"eC" = ( +/obj/machinery/atmospherics/unary/thermomachine/freezer, +/turf/simulated/floor/plating, +/area/ruin/unpowered/syndicate_space_base/engineering) +"eN" = ( +/obj/machinery/light{ + dir = 1; + on = 1 + }, +/turf/simulated/floor/engine, +/area/ruin/unpowered/syndicate_space_base/testlab) +"eQ" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0; + tag = "" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/plating, +/area/ruin/unpowered/syndicate_space_base/engineering) +"eV" = ( +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "whiteblue"; + tag = "icon-whiteblue (NORTH)" + }, +/area/ruin/unpowered/syndicate_space_base/medbay) +"fb" = ( +/obj/machinery/kitchen_machine/microwave, +/obj/structure/table, +/turf/simulated/floor/plasteel{ + dir = 2; + icon_state = "cafeteria"; + tag = "icon-cafeteria (NORTHEAST)" + }, +/area/ruin/unpowered/syndicate_space_base/bar) +"fe" = ( +/obj/effect/spawner/window/reinforced, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/chemistry) +"ff" = ( +/obj/machinery/cryopod/offstation, +/turf/simulated/floor/plasteel{ + dir = 6; + icon_state = "darkblue" + }, +/area/ruin/unpowered/syndicate_space_base/dormitories) +"fi" = ( +/obj/machinery/atmospherics/pipe/simple/visible, +/turf/simulated/floor/engine/air, +/area/ruin/unpowered/syndicate_space_base/engineering) +"fn" = ( +/obj/machinery/vending/syndichem, +/obj/structure/extinguisher_cabinet{ + pixel_x = -5; + pixel_y = 30 + }, +/turf/simulated/floor/plasteel{ + dir = 9; + icon_state = "whitepurple"; + tag = "icon-whitepurple (NORTHWEST)" + }, +/area/ruin/unpowered/syndicate_space_base/chemistry) +"fu" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/chem_master, +/turf/simulated/floor/plasteel{ + dir = 10; + icon_state = "whitepurple"; + tag = "icon-whitepurple (SOUTHWEST)" + }, +/area/ruin/unpowered/syndicate_space_base/chemistry) +"fx" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0; + tag = "" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/main) +"fF" = ( +/turf/simulated/wall/mineral/plastitanium/nodiagonal, +/area/ruin/unpowered/syndicate_space_base/dormitories) +"fH" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0; + tag = "" + }, +/turf/simulated/floor/engine, +/area/ruin/unpowered/syndicate_space_base/testlab) +"fP" = ( +/obj/effect/mob_spawn/human/spacebase_syndicate{ + dir = 8 + }, +/turf/simulated/floor/plasteel{ + dir = 9; + icon_state = "darkblue" + }, +/area/ruin/unpowered/syndicate_space_base/dormitories) +"fQ" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/main) +"fU" = ( +/obj/machinery/alarm/syndicate{ + pixel_y = 24 + }, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/telecomms) +"fX" = ( +/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ + dir = 4 + }, +/turf/simulated/floor/engine/vacuum, +/area/ruin/unpowered/syndicate_space_base/engineering) +"ge" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0; + tag = "" + }, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/chemistry) +"gg" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/plasteel{ + icon_state = "whitegreenfull"; + tag = "icon-whitebluefull" + }, +/area/ruin/unpowered/syndicate_space_base/virology) +"gh" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "yellow" + }, +/area/ruin/unpowered/syndicate_space_base/engineering) +"gj" = ( +/obj/structure/sign/securearea{ + name = "\improper STAY CLEAR HEAVY MACHINERY"; + pixel_y = 32 + }, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/arrivals) +"gl" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0; + tag = "" + }, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/dormitories) +"gn" = ( +/obj/structure/sign/poster/contraband/syndicate_pistol, +/turf/simulated/wall/mineral/plastitanium/nodiagonal, +/area/ruin/unpowered/syndicate_space_base/cargo) +"gs" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/main) +"gu" = ( +/obj/machinery/atmospherics/unary/portables_connector{ + dir = 1 + }, +/obj/machinery/portable_atmospherics/canister/toxins, +/turf/simulated/floor/plating, +/area/ruin/unpowered/syndicate_space_base/engineering) +"gD" = ( +/turf/simulated/wall/mineral/plastitanium/nodiagonal, +/area/ruin/unpowered/syndicate_space_base/medbay) +"gS" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/obj/structure/bed/roller, +/obj/machinery/iv_drip, +/obj/item/reagent_containers/iv_bag/blood/OMinus, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "whiteblue"; + tag = "icon-whiteblue (WEST)" + }, +/area/ruin/unpowered/syndicate_space_base/medbay) +"gY" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/turf/simulated/floor/redgrid, +/area/ruin/unpowered/syndicate_space_base/telecomms) +"gZ" = ( +/obj/machinery/light, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4; + level = 1 + }, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/arrivals) +"hc" = ( +/obj/machinery/atmospherics/binary/volume_pump, +/turf/simulated/floor/plating, +/area/ruin/unpowered/syndicate_space_base/engineering) +"hp" = ( +/obj/structure/table/glass, +/obj/machinery/reagentgrinder{ + pixel_y = 5 + }, +/obj/item/reagent_containers/glass/beaker/large, +/obj/structure/cable{ + d2 = 2; + icon_state = "0-2" + }, +/obj/machinery/power/apc/syndicate{ + dir = 1; + name = "Chemistry APC"; + pixel_y = 24 + }, +/turf/simulated/floor/plasteel{ + dir = 5; + icon_state = "whitepurple"; + tag = "icon-whitepurple (NORTHEAST)" + }, +/area/ruin/unpowered/syndicate_space_base/chemistry) +"hq" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4; + level = 1 + }, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/arrivals) +"hr" = ( +/obj/machinery/atmospherics/pipe/manifold/visible{ + dir = 8 + }, +/obj/machinery/meter, +/turf/simulated/floor/plating, +/area/ruin/unpowered/syndicate_space_base/engineering) +"hB" = ( +/obj/machinery/plantgenes, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/bar) +"hK" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/main) +"hO" = ( +/obj/item/stack/sheet/mineral/plastitanium{ + amount = 30; + pixel_x = 5; + pixel_y = 5 + }, +/obj/item/stack/sheet/mineral/plastitanium{ + amount = 30 + }, +/obj/item/stack/sheet/mineral/plastitanium{ + amount = 30; + pixel_x = -5; + pixel_y = -5 + }, +/obj/structure/rack{ + dir = 8 + }, +/turf/simulated/floor/plasteel{ + dir = 5; + icon_state = "yellow" + }, +/area/ruin/unpowered/syndicate_space_base/engineering) +"hR" = ( +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4; + level = 1 + }, +/obj/effect/spawner/window/reinforced, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/telecomms) +"hS" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0; + tag = "" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4; + level = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/chemistry) +"hX" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4; + initialize_directions = 11; + level = 1 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0; + tag = "" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8"; + tag = "" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/main) +"ia" = ( +/turf/simulated/mineral, +/area/ruin/unpowered/syndicate_space_base/testlab) +"ic" = ( +/turf/template_noop, +/area/template_noop) +"id" = ( +/obj/machinery/atmospherics/unary/passive_vent, +/turf/simulated/floor/engine/vacuum, +/area/ruin/unpowered/syndicate_space_base/engineering) +"ii" = ( +/obj/machinery/hydroponics/constructable, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/bar) +"ik" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/bar) +"in" = ( +/obj/machinery/kitchen_machine/oven, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + dir = 2; + icon_state = "cafeteria"; + tag = "icon-cafeteria (NORTHEAST)" + }, +/area/ruin/unpowered/syndicate_space_base/bar) +"ir" = ( +/obj/machinery/door/airlock/hatch/syndicate, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0; + tag = "" + }, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/virology) +"it" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4"; + tag = "" + }, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/bar) +"iy" = ( +/obj/structure/table, +/obj/machinery/photocopier/faxmachine/longrange/syndie{ + department = "Syndicate Bioweapon Research Outpost" + }, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/telecomms) +"iA" = ( +/obj/machinery/atmospherics/pipe/simple/visible/universal{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/engineering) +"iF" = ( +/obj/structure/table, +/obj/item/pen, +/obj/item/paper_bin, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/telecomms) +"iH" = ( +/obj/machinery/atmospherics/unary/thermomachine/heater, +/turf/simulated/floor/plating, +/area/ruin/unpowered/syndicate_space_base/engineering) +"ji" = ( +/obj/structure/cable/yellow{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/plating, +/area/ruin/unpowered/syndicate_space_base/engineering) +"jl" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/telecomms) +"jm" = ( +/obj/machinery/light/small, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/arrivals) +"jq" = ( +/obj/structure/chair{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + icon_state = "whitegreenfull"; + tag = "icon-whitebluefull" + }, +/area/ruin/unpowered/syndicate_space_base/virology) +"jt" = ( +/obj/structure/table, +/obj/item/storage/box/masks{ + pixel_x = -2; + pixel_y = -2 + }, +/obj/item/storage/box/gloves{ + pixel_x = 5; + pixel_y = 5 + }, +/turf/simulated/floor/plasteel{ + dir = 6; + icon_state = "whiteblue"; + tag = "icon-whitehall (WEST)" + }, +/area/ruin/unpowered/syndicate_space_base/medbay) +"jy" = ( +/obj/structure/toilet{ + dir = 8 + }, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/simulated/floor/plasteel{ + icon_state = "freezerfloor" + }, +/area/ruin/unpowered/syndicate_space_base/arrivals) +"jB" = ( +/obj/structure/rack{ + dir = 8 + }, +/obj/item/soap/syndie, +/obj/item/soap/syndie, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/arrivals) +"jC" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/main) +"jI" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + icon_state = "white" + }, +/area/ruin/unpowered/syndicate_space_base/virology) +"jO" = ( +/obj/structure/chair/stool/bar, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/bar) +"jS" = ( +/obj/machinery/atmospherics/pipe/manifold/visible{ + dir = 4; + initialize_directions = 11; + level = 2 + }, +/obj/machinery/meter, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/engineering) +"jW" = ( +/obj/structure/table/wood, +/obj/machinery/chem_dispenser/beer/upgraded{ + dir = 1 + }, +/obj/machinery/alarm/syndicate{ + pixel_y = 24 + }, +/turf/simulated/floor/plasteel{ + icon_state = "grimy" + }, +/area/ruin/unpowered/syndicate_space_base/bar) +"kg" = ( +/obj/machinery/computer/cryopod{ + pixel_x = -32; + req_one_access = null + }, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "darkblue" + }, +/area/ruin/unpowered/syndicate_space_base/dormitories) +"kk" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/main) +"ks" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/turf/simulated/floor/plasteel{ + icon_state = "whitebluefull"; + tag = "icon-whitebluefull" + }, +/area/ruin/unpowered/syndicate_space_base/medbay) +"ku" = ( +/obj/structure/window/basic{ + dir = 4 + }, +/obj/structure/reagent_dispensers/watertank/high, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/bar) +"kC" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/chemistry) +"kD" = ( +/obj/structure/table, +/obj/item/paper_bin, +/obj/item/pen, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/turf/simulated/floor/plasteel{ + dir = 10; + icon_state = "darkred" + }, +/area/ruin/unpowered/syndicate_space_base/arrivals) +"kE" = ( +/obj/effect/spawner/window/reinforced, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/telecomms) +"kI" = ( +/obj/machinery/portable_atmospherics/canister/toxins, +/obj/effect/decal/warning_stripes/yellow, +/turf/simulated/floor/plating, +/area/ruin/unpowered/syndicate_space_base/engineering) +"kU" = ( +/obj/structure/table/glass, +/obj/item/storage/box/beakers{ + pixel_x = 2; + pixel_y = 2 + }, +/obj/item/storage/box/syringes, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "whitegreen"; + tag = "icon-whitegreen (EAST)" + }, +/area/ruin/unpowered/syndicate_space_base/virology) +"kY" = ( +/obj/structure/cable/yellow{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/ruin/unpowered/syndicate_space_base/engineering) +"lf" = ( +/turf/simulated/wall/mineral/plastitanium/nodiagonal, +/area/ruin/unpowered/syndicate_space_base/main) +"lm" = ( +/obj/machinery/atmospherics/unary/passive_vent, +/turf/simulated/floor/engine/air, +/area/ruin/unpowered/syndicate_space_base/engineering) +"lo" = ( +/obj/machinery/optable, +/obj/machinery/light, +/turf/simulated/floor/plasteel{ + dir = 2; + icon_state = "whiteblue"; + tag = "icon-whitehall (WEST)" + }, +/area/ruin/unpowered/syndicate_space_base/medbay) +"lr" = ( +/obj/machinery/smartfridge, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/bar) +"lu" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/plasteel{ + icon_state = "whitebluefull"; + tag = "icon-whitebluefull" + }, +/area/ruin/unpowered/syndicate_space_base/medbay) +"lv" = ( +/obj/structure/rack{ + dir = 8 + }, +/obj/item/stack/sheet/cardboard{ + amount = 3 + }, +/obj/item/stack/rods/twentyfive, +/obj/item/stock_parts/cell/high/plus, +/obj/item/storage/box/stockparts/deluxe, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "brown" + }, +/area/ruin/unpowered/syndicate_space_base/cargo) +"lw" = ( +/obj/structure/reagent_dispensers/fueltank, +/obj/effect/decal/warning_stripes/yellow, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "yellow" + }, +/area/ruin/unpowered/syndicate_space_base/engineering) +"ly" = ( +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "whitegreen"; + tag = "icon-whitegreen (WEST)" + }, +/area/ruin/unpowered/syndicate_space_base/virology) +"lB" = ( +/obj/machinery/smartfridge/secure/chemistry/virology/preloaded/syndicate, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "whitegreen"; + tag = "icon-whitegreen (WEST)" + }, +/area/ruin/unpowered/syndicate_space_base/virology) +"lM" = ( +/obj/effect/mob_spawn/human/spacebase_syndicate{ + dir = 8 + }, +/turf/simulated/floor/plasteel{ + dir = 6; + icon_state = "darkblue" + }, +/area/ruin/unpowered/syndicate_space_base/dormitories) +"lZ" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 10 + }, +/obj/machinery/power/terminal{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable/yellow{ + d1 = 0; + d2 = 2; + icon_state = "0-2" + }, +/turf/simulated/floor/plating, +/area/ruin/unpowered/syndicate_space_base/engineering) +"mh" = ( +/obj/structure/table/glass, +/obj/structure/reagent_dispensers/virusfood{ + pixel_y = 28 + }, +/obj/item/clothing/gloves/color/latex, +/obj/item/healthanalyzer, +/obj/item/clothing/glasses/hud/health, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plasteel{ + dir = 5; + icon_state = "whitegreen"; + tag = "icon-whitegreen (NORTHEAST)" + }, +/area/ruin/unpowered/syndicate_space_base/virology) +"mi" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/main) +"mB" = ( +/obj/structure/cable{ + d2 = 2; + icon_state = "0-2" + }, +/obj/machinery/power/apc/syndicate{ + dir = 1; + name = "Telecomms APC"; + pixel_y = 24 + }, +/obj/structure/filingcabinet/chestdrawer, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/telecomms) +"mE" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/structure/fans/tiny, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/testlab) +"mP" = ( +/obj/machinery/power/generator, +/obj/structure/cable/yellow, +/turf/simulated/floor/plating, +/area/ruin/unpowered/syndicate_space_base/engineering) +"mX" = ( +/obj/structure/sink{ + dir = 4; + icon_state = "sink"; + pixel_x = 10; + pixel_y = 0 + }, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/chemistry) +"nc" = ( +/obj/machinery/atmospherics/unary/outlet_injector/on{ + dir = 8 + }, +/turf/simulated/floor/plating/airless, +/area/ruin/unpowered/syndicate_space_base/engineering) +"ne" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0; + tag = "" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8; + initialize_directions = 11 + }, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/main) +"nf" = ( +/obj/item/book/manual/chef_recipes{ + pixel_x = 2; + pixel_y = 6 + }, +/obj/structure/table, +/turf/simulated/floor/plasteel{ + dir = 2; + icon_state = "cafeteria"; + tag = "icon-cafeteria (NORTHEAST)" + }, +/area/ruin/unpowered/syndicate_space_base/bar) +"nj" = ( +/turf/simulated/wall/mineral/plastitanium/nodiagonal, +/area/ruin/unpowered/syndicate_space_base/telecomms) +"nm" = ( +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/ruin/unpowered/syndicate_space_base/engineering) +"nr" = ( +/obj/machinery/door/airlock/vault{ + id_tag = "syndie_lavaland_vault"; + locked = 1; + req_access_txt = "150" + }, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/cargo) +"nv" = ( +/obj/machinery/light, +/turf/simulated/floor/engine, +/area/ruin/unpowered/syndicate_space_base/testlab) +"ny" = ( +/turf/simulated/floor/plasteel{ + dir = 2; + icon_state = "whitegreen"; + tag = "icon-whitehall (WEST)" + }, +/area/ruin/unpowered/syndicate_space_base/virology) +"nA" = ( +/turf/simulated/floor/grass, +/area/ruin/unpowered/syndicate_space_base/bar) +"nD" = ( +/obj/machinery/hydroponics/constructable, +/turf/simulated/floor/plasteel{ + icon_state = "floorgrime" + }, +/area/ruin/unpowered/syndicate_space_base/bar) +"nG" = ( +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "darkred" + }, +/area/ruin/unpowered/syndicate_space_base/cargo) +"nT" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0; + tag = "" + }, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/arrivals) +"nY" = ( +/obj/machinery/door/airlock/hatch/syndicate, +/turf/simulated/floor/plasteel{ + icon_state = "white" + }, +/area/ruin/unpowered/syndicate_space_base/virology) +"nZ" = ( +/obj/machinery/reagentgrinder, +/obj/item/stack/sheet/mineral/plasma{ + amount = 5 + }, +/obj/item/stack/sheet/mineral/uranium{ + amount = 10 + }, +/obj/item/stack/sheet/mineral/gold{ + amount = 10 + }, +/obj/structure/table/glass, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "whitegreen"; + tag = "icon-whitegreen (EAST)" + }, +/area/ruin/unpowered/syndicate_space_base/virology) +"ob" = ( +/obj/machinery/door/airlock/hatch/syndicate, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4; + level = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/arrivals) +"oi" = ( +/obj/machinery/door/airlock/hatch/syndicate, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0; + tag = "" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4; + level = 1 + }, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/cargo) +"oj" = ( +/obj/structure/closet/crate, +/obj/item/storage/box/donkpockets{ + pixel_x = -2; + pixel_y = 6 + }, +/obj/item/storage/box/donkpockets{ + pixel_y = 3 + }, +/obj/item/storage/box/donkpockets{ + pixel_x = 2 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/power/apc/syndicate{ + dir = 1; + name = "Storage APC"; + pixel_y = 24 + }, +/obj/structure/cable{ + d2 = 2; + icon_state = "0-2" + }, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "brown" + }, +/area/ruin/unpowered/syndicate_space_base/cargo) +"ol" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/engine, +/area/ruin/unpowered/syndicate_space_base/testlab) +"ow" = ( +/obj/structure/closet/crate/medical, +/obj/item/storage/firstaid/fire{ + pixel_x = 3; + pixel_y = 3 + }, +/obj/item/storage/firstaid/brute, +/obj/item/storage/firstaid/regular{ + pixel_x = -3; + pixel_y = -3 + }, +/obj/structure/window/basic, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "whiteblue"; + tag = "icon-whitehall (WEST)" + }, +/area/ruin/unpowered/syndicate_space_base/medbay) +"oO" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4"; + tag = "90Curve" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4; + level = 1 + }, +/turf/simulated/floor/plasteel, +/area/ruin/unpowered/syndicate_space_base/cargo) +"oW" = ( +/obj/structure/window/basic{ + dir = 4 + }, +/obj/machinery/biogenerator, +/obj/item/reagent_containers/glass/bucket, +/obj/item/reagent_containers/glass/bucket, +/obj/item/reagent_containers/glass/bucket, +/obj/item/reagent_containers/glass/bucket, +/turf/simulated/floor/plasteel{ + icon_state = "floorgrime" + }, +/area/ruin/unpowered/syndicate_space_base/bar) +"oZ" = ( +/obj/effect/decal/warning_stripes/north, +/obj/machinery/atmospherics/binary/pump{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/ruin/unpowered/syndicate_space_base/engineering) +"pa" = ( +/obj/effect/mob_spawn/human/spacebase_syndicate{ + dir = 8 + }, +/turf/simulated/floor/plasteel{ + dir = 5; + icon_state = "darkblue" + }, +/area/ruin/unpowered/syndicate_space_base/dormitories) +"ph" = ( +/obj/machinery/light, +/obj/machinery/cryopod/offstation, +/turf/simulated/floor/plasteel{ + dir = 2; + icon_state = "darkblue" + }, +/area/ruin/unpowered/syndicate_space_base/dormitories) +"pp" = ( +/obj/machinery/vending/hydronutrients, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/bar) +"pA" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4; + level = 1 + }, +/obj/effect/spawner/window/reinforced, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/engineering) +"pG" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4; + level = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/main) +"pI" = ( +/obj/structure/table/reinforced, +/obj/item/retractor, +/obj/item/hemostat, +/obj/effect/decal/cleanable/dirt, +/obj/item/cautery, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "whiteblue"; + tag = "icon-whiteblue (WEST)" + }, +/area/ruin/unpowered/syndicate_space_base/medbay) +"pK" = ( +/obj/item/flag/syndi, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "darkblue" + }, +/area/ruin/unpowered/syndicate_space_base/dormitories) +"pR" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0; + tag = "" + }, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/bar) +"qs" = ( +/turf/simulated/floor/plasteel{ + dir = 5; + icon_state = "darkred" + }, +/area/ruin/unpowered/syndicate_space_base/cargo) +"qt" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/computer/operating, +/turf/simulated/floor/plasteel{ + dir = 2; + icon_state = "whiteblue"; + tag = "icon-whitehall (WEST)" + }, +/area/ruin/unpowered/syndicate_space_base/medbay) +"qv" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/engine, +/area/ruin/unpowered/syndicate_space_base/testlab) +"qz" = ( +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "darkblue" + }, +/area/ruin/unpowered/syndicate_space_base/dormitories) +"qF" = ( +/turf/simulated/floor/plating, +/area/ruin/unpowered/syndicate_space_base/engineering) +"qN" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4; + initialize_directions = 11; + level = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/bar) +"qQ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/turf/simulated/floor/plasteel{ + icon_state = "whitegreenfull"; + tag = "icon-whitebluefull" + }, +/area/ruin/unpowered/syndicate_space_base/virology) +"qT" = ( +/obj/machinery/conveyor_switch/oneway{ + id = "syndiegarbage"; + name = "disposal coveyor" + }, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/arrivals) +"qY" = ( +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 10 + }, +/turf/simulated/floor/plating, +/area/ruin/unpowered/syndicate_space_base/engineering) +"rp" = ( +/obj/machinery/vending/toyliberationstation{ + req_access_txt = "150" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0; + tag = "" + }, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "brown" + }, +/area/ruin/unpowered/syndicate_space_base/cargo) +"rr" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0; + tag = "" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4; + level = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/testlab) +"rw" = ( +/obj/item/gun/energy/floragun, +/obj/item/gun/energy/floragun, +/obj/item/gun/energy/floragun, +/obj/item/gun/energy/floragun, +/obj/structure/closet/crate/hydroponics, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + icon_state = "floorgrime" + }, +/area/ruin/unpowered/syndicate_space_base/bar) +"rD" = ( +/obj/structure/rack{ + dir = 8 + }, +/obj/item/reagent_containers/spray/cleaner, +/obj/item/reagent_containers/spray/cleaner, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/arrivals) +"rK" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4; + level = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/arrivals) +"rN" = ( +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 9 + }, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/engineering) +"rV" = ( +/obj/machinery/seed_extractor, +/turf/simulated/floor/plasteel{ + icon_state = "floorgrime" + }, +/area/ruin/unpowered/syndicate_space_base/bar) +"rW" = ( +/obj/effect/decal/warning_stripes/north, +/obj/machinery/atmospherics/binary/pump, +/turf/simulated/floor/plating, +/area/ruin/unpowered/syndicate_space_base/engineering) +"sb" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/chemistry) +"sr" = ( +/obj/effect/decal/warning_stripes/blue, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/arrivals) +"ss" = ( +/obj/structure/bookcase/random, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/arrivals) +"sw" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4; + level = 1 + }, +/turf/simulated/floor/engine, +/area/ruin/unpowered/syndicate_space_base/testlab) +"sz" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/navbeacon/invisible{ + codes_txt = "patrol;next_patrol=SBSE"; + location = "SBNE" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0; + tag = "" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/main) +"sH" = ( +/obj/machinery/vending/artvend, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "brown" + }, +/area/ruin/unpowered/syndicate_space_base/cargo) +"sR" = ( +/obj/machinery/door/airlock/hatch/syndicate, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/engineering) +"te" = ( +/obj/machinery/computer/camera_advanced, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/telecomms) +"tf" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4; + level = 1 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0; + tag = "" + }, +/obj/machinery/alarm/syndicate{ + pixel_y = 24 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/main) +"th" = ( +/obj/machinery/light{ + dir = 1; + on = 1 + }, +/turf/simulated/floor/plating, +/area/ruin/unpowered/syndicate_space_base/engineering) +"tj" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0; + tag = "" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8; + initialize_directions = 11 + }, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/main) +"tv" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6; + level = 1 + }, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/main) +"tz" = ( +/obj/structure/closet/secure_closet/medical1{ + req_access = null; + req_access_txt = "150" + }, +/obj/item/defibrillator, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "whiteblue"; + tag = "icon-whiteblue (WEST)" + }, +/area/ruin/unpowered/syndicate_space_base/medbay) +"tL" = ( +/obj/structure/closet/firecloset/full, +/turf/simulated/floor/plasteel{ + dir = 9; + icon_state = "yellow" + }, +/area/ruin/unpowered/syndicate_space_base/engineering) +"tQ" = ( +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "whitepurple"; + tag = "icon-whitepurple (WEST)" + }, +/area/ruin/unpowered/syndicate_space_base/chemistry) +"tW" = ( +/obj/structure/table, +/obj/machinery/computer/library/checkout, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/arrivals) +"uk" = ( +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/main) +"un" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0; + tag = "" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4; + level = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/structure/fans/tiny, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/testlab) +"uq" = ( +/turf/simulated/floor/plasteel{ + icon_state = "freezerfloor" + }, +/area/ruin/unpowered/syndicate_space_base/arrivals) +"ur" = ( +/obj/structure/reagent_dispensers/watertank, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/arrivals) +"uu" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8"; + tag = "" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plasteel{ + icon_state = "white" + }, +/area/ruin/unpowered/syndicate_space_base/virology) +"uz" = ( +/obj/machinery/portable_atmospherics/pump, +/turf/simulated/floor/plasteel{ + dir = 5; + icon_state = "yellow" + }, +/area/ruin/unpowered/syndicate_space_base/engineering) +"uF" = ( +/obj/structure/rack{ + dir = 8 + }, +/obj/item/stack/sheet/metal/fifty{ + pixel_x = -5; + pixel_y = -5 + }, +/obj/item/stack/sheet/metal/fifty{ + pixel_x = 5; + pixel_y = 5 + }, +/obj/item/stack/sheet/metal/fifty, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "yellow" + }, +/area/ruin/unpowered/syndicate_space_base/engineering) +"uJ" = ( +/turf/simulated/floor/plasteel{ + dir = 2; + icon_state = "cafeteria"; + tag = "icon-cafeteria (NORTHEAST)" + }, +/area/ruin/unpowered/syndicate_space_base/bar) +"uL" = ( +/obj/structure/sink{ + dir = 4; + pixel_x = 12 + }, +/obj/item/storage/box/monkeycubes/syndicate, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "whitegreen"; + tag = "icon-whitegreen (EAST)" + }, +/area/ruin/unpowered/syndicate_space_base/virology) +"uN" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8"; + tag = "" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4; + initialize_directions = 11; + level = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1; + initialize_directions = 11; + level = 1 + }, +/turf/simulated/floor/engine, +/area/ruin/unpowered/syndicate_space_base/testlab) +"uX" = ( +/obj/machinery/door/airlock/hatch/syndicate, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0; + tag = "" + }, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/telecomms) +"uZ" = ( +/obj/machinery/monkey_recycler, +/turf/simulated/floor/plasteel{ + dir = 6; + icon_state = "whitegreen"; + tag = "icon-whitegreen (SOUTHEAST)" + }, +/area/ruin/unpowered/syndicate_space_base/virology) +"ve" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/simulated/floor/engine, +/area/ruin/unpowered/syndicate_space_base/testlab) +"vk" = ( +/obj/machinery/kitchen_machine/grill, +/turf/simulated/floor/plasteel{ + dir = 2; + icon_state = "cafeteria"; + tag = "icon-cafeteria (NORTHEAST)" + }, +/area/ruin/unpowered/syndicate_space_base/bar) +"vn" = ( +/obj/machinery/portable_atmospherics/canister/air, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/engineering) +"vq" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/plasteel{ + icon_state = "white" + }, +/area/ruin/unpowered/syndicate_space_base/virology) +"vs" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0; + tag = "" + }, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8"; + tag = "" + }, +/turf/simulated/floor/plating, +/area/ruin/unpowered/syndicate_space_base/engineering) +"vt" = ( +/obj/machinery/light{ + dir = 1; + on = 1 + }, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/arrivals) +"vv" = ( +/obj/structure/table/wood, +/obj/machinery/chem_dispenser/soda/upgraded{ + dir = 1 + }, +/turf/simulated/floor/plasteel{ + icon_state = "grimy" + }, +/area/ruin/unpowered/syndicate_space_base/bar) +"vE" = ( +/obj/machinery/atmospherics/binary/volume_pump{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/ruin/unpowered/syndicate_space_base/engineering) +"vF" = ( +/obj/structure/window/plasmareinforced{ + dir = 1 + }, +/obj/structure/window/plasmareinforced, +/obj/structure/grille, +/turf/simulated/floor/engine/vacuum, +/area/ruin/unpowered/syndicate_space_base/engineering) +"vJ" = ( +/obj/structure/closet/l3closet, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "brown" + }, +/area/ruin/unpowered/syndicate_space_base/cargo) +"vK" = ( +/obj/structure/rack{ + dir = 8 + }, +/obj/item/reagent_containers/glass/bucket, +/obj/item/mop, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/arrivals) +"vL" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 1 + }, +/obj/effect/turf_decal/bot, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "whitepurplefull"; + tag = "icon-whitepurple (WEST)" + }, +/area/ruin/unpowered/syndicate_space_base/chemistry) +"vM" = ( +/obj/machinery/door/firedoor, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/chemistry) +"vP" = ( +/obj/machinery/recycler, +/obj/machinery/conveyor/east{ + id = "syndiegarbage" + }, +/obj/machinery/light, +/turf/simulated/floor/plating, +/area/ruin/unpowered/syndicate_space_base/arrivals) +"vQ" = ( +/turf/simulated/floor/plasteel, +/area/ruin/unpowered/syndicate_space_base/cargo) +"vY" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/meter, +/turf/simulated/floor/plating, +/area/ruin/unpowered/syndicate_space_base/engineering) +"wc" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1; + initialize_directions = 11; + level = 1 + }, +/turf/simulated/floor/plating, +/area/ruin/unpowered/syndicate_space_base/engineering) +"wf" = ( +/obj/structure/closet/crate, +/obj/item/vending_refill/snack{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/item/vending_refill/snack{ + pixel_x = -3; + pixel_y = 3 + }, +/obj/item/vending_refill/coffee, +/obj/item/vending_refill/cola, +/turf/simulated/floor/plasteel{ + dir = 10; + icon_state = "brown" + }, +/area/ruin/unpowered/syndicate_space_base/cargo) +"wg" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "whitegreen"; + tag = "icon-whitegreen (WEST)" + }, +/area/ruin/unpowered/syndicate_space_base/virology) +"wh" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0; + tag = "" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/main) +"wj" = ( +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "whitepurplefull"; + tag = "icon-whitepurple (WEST)" + }, +/area/ruin/unpowered/syndicate_space_base/chemistry) +"wn" = ( +/obj/structure/table, +/obj/machinery/smartfridge/disks, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/bar) +"wp" = ( +/turf/simulated/floor/plasteel{ + dir = 5; + icon_state = "darkred" + }, +/area/ruin/unpowered/syndicate_space_base/arrivals) +"wq" = ( +/obj/structure/closet/crate/secure/weapon{ + req_access_txt = "150" + }, +/obj/item/ammo_box/magazine/m10mm/ap, +/obj/item/ammo_box/magazine/m10mm/ap, +/obj/item/ammo_box/magazine/m10mm/fire, +/obj/item/ammo_box/magazine/m10mm/fire, +/obj/item/ammo_box/magazine/m10mm/hp, +/obj/item/ammo_box/magazine/m10mm/hp, +/turf/simulated/floor/plasteel{ + dir = 10; + icon_state = "darkred" + }, +/area/ruin/unpowered/syndicate_space_base/cargo) +"ws" = ( +/turf/simulated/floor/plasteel{ + dir = 9; + icon_state = "darkred" + }, +/area/ruin/unpowered/syndicate_space_base/cargo) +"wz" = ( +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "darkbluecorners" + }, +/area/ruin/unpowered/syndicate_space_base/dormitories) +"wB" = ( +/obj/structure/bed, +/turf/simulated/floor/plasteel{ + icon_state = "white" + }, +/area/ruin/unpowered/syndicate_space_base/virology) +"wC" = ( +/turf/simulated/floor/plasteel{ + icon_state = "white" + }, +/area/ruin/unpowered/syndicate_space_base/virology) +"wJ" = ( +/obj/structure/window/plasmareinforced{ + dir = 1 + }, +/obj/effect/turf_decal/caution/red, +/obj/machinery/atmospherics/pipe/manifold/visible{ + dir = 4; + initialize_directions = 11; + level = 2 + }, +/obj/machinery/meter, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/engineering) +"wS" = ( +/obj/item/kitchen/rollingpin, +/obj/structure/table, +/turf/simulated/floor/plasteel{ + dir = 2; + icon_state = "cafeteria"; + tag = "icon-cafeteria (NORTHEAST)" + }, +/area/ruin/unpowered/syndicate_space_base/bar) +"wX" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4; + level = 1 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0; + tag = "" + }, +/obj/structure/cable{ + d2 = 4; + icon_state = "0-4" + }, +/obj/machinery/power/apc/syndicate{ + dir = 1; + name = "Primary Corridor APC"; + pixel_y = 24 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/main) +"wZ" = ( +/obj/machinery/atmospherics/binary/circulator{ + side = 4 + }, +/turf/simulated/floor/plating, +/area/ruin/unpowered/syndicate_space_base/engineering) +"xc" = ( +/obj/machinery/door/airlock/hatch/syndicate, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/arrivals) +"xm" = ( +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/vending/medical/syndicate_access, +/obj/machinery/alarm/syndicate{ + pixel_y = 24 + }, +/turf/simulated/floor/plasteel{ + dir = 9; + icon_state = "whiteblue"; + tag = "icon-whiteblue (NORTHWEST)" + }, +/area/ruin/unpowered/syndicate_space_base/medbay) +"xo" = ( +/obj/machinery/door_control{ + id = "syndbaseventing"; + name = "Toxin Venting Control"; + pixel_x = -8; + pixel_y = 26 + }, +/obj/machinery/ignition_switch{ + id = "syndbaseigniter"; + pixel_x = 6; + pixel_y = 25 + }, +/turf/simulated/floor/plating, +/area/ruin/unpowered/syndicate_space_base/engineering) +"xr" = ( +/obj/structure/window/basic{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/bar) +"xt" = ( +/obj/machinery/portable_atmospherics/canister/air{ + anchored = 1 + }, +/turf/simulated/floor/engine/air, +/area/ruin/unpowered/syndicate_space_base/engineering) +"xu" = ( +/obj/structure/sign/poster/contraband/tools, +/turf/simulated/wall/mineral/plastitanium/nodiagonal, +/area/ruin/unpowered/syndicate_space_base/engineering) +"xB" = ( +/obj/item/storage/box/monkeycubes/syndicate, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/chemistry) +"xG" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0; + tag = "" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4"; + tag = "90Curve" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/main) +"xN" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4; + level = 1 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0; + tag = "" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/main) +"yf" = ( +/obj/machinery/computer/monitor{ + name = "Engine Grid Power Monitoring Computer" + }, +/obj/structure/cable/yellow, +/turf/simulated/floor/plating, +/area/ruin/unpowered/syndicate_space_base/engineering) +"yq" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/turf/simulated/floor/plasteel{ + icon_state = "whitegreenfull"; + tag = "icon-whitebluefull" + }, +/area/ruin/unpowered/syndicate_space_base/virology) +"yz" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0; + tag = "" + }, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/main) +"yB" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0; + tag = "" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8"; + tag = "" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/main) +"yE" = ( +/turf/simulated/wall/mineral/plastitanium/nodiagonal, +/area/ruin/unpowered/syndicate_space_base/arrivals) +"yY" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/bar) +"yZ" = ( +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 9 + }, +/turf/simulated/floor/plating, +/area/ruin/unpowered/syndicate_space_base/engineering) +"zj" = ( +/obj/structure/table, +/obj/item/storage/box/disks_plantgene, +/turf/simulated/floor/plasteel{ + icon_state = "floorgrime" + }, +/area/ruin/unpowered/syndicate_space_base/bar) +"zl" = ( +/obj/structure/table/glass, +/obj/item/reagent_containers/syringe/antiviral, +/obj/item/reagent_containers/dropper, +/obj/item/reagent_containers/spray/cleaner, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "whitegreen"; + tag = "icon-whitegreen (EAST)" + }, +/area/ruin/unpowered/syndicate_space_base/virology) +"zm" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4"; + tag = "90Curve" + }, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/telecomms) +"zs" = ( +/obj/structure/sign/biohazard{ + pixel_y = 0 + }, +/turf/simulated/wall/mineral/plastitanium/nodiagonal, +/area/ruin/unpowered/syndicate_space_base/virology) +"zG" = ( +/obj/structure/table/wood, +/obj/item/reagent_containers/food/drinks/cans/beer, +/turf/simulated/floor/plasteel{ + icon_state = "grimy" + }, +/area/ruin/unpowered/syndicate_space_base/bar) +"zS" = ( +/obj/structure/window/basic{ + dir = 4 + }, +/obj/machinery/floodlight, +/turf/simulated/floor/plasteel{ + icon_state = "floorgrime" + }, +/area/ruin/unpowered/syndicate_space_base/bar) +"Ai" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/chemistry) +"Aj" = ( +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/engineering) +"Am" = ( +/obj/structure/closet/secure_closet/freezer/fridge/open, +/obj/item/reagent_containers/food/condiment/flour, +/obj/item/reagent_containers/food/condiment/flour, +/obj/item/reagent_containers/food/condiment/flour, +/obj/item/reagent_containers/food/condiment/flour, +/obj/item/reagent_containers/food/condiment/flour, +/obj/item/reagent_containers/food/condiment/flour, +/obj/item/reagent_containers/food/condiment/flour, +/obj/item/reagent_containers/food/condiment/flour, +/obj/item/reagent_containers/food/condiment/flour, +/obj/item/reagent_containers/food/condiment/flour, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + icon_state = "floorgrime" + }, +/area/ruin/unpowered/syndicate_space_base/bar) +"AA" = ( +/obj/structure/table/reinforced, +/obj/item/clothing/glasses/science, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "whitepurplefull"; + tag = "icon-whitepurple (WEST)" + }, +/area/ruin/unpowered/syndicate_space_base/chemistry) +"AB" = ( +/obj/machinery/autolathe/syndicate, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "yellow" + }, +/area/ruin/unpowered/syndicate_space_base/engineering) +"AG" = ( +/obj/machinery/alarm/syndicate{ + pixel_y = 24 + }, +/turf/simulated/floor/plasteel{ + dir = 9; + icon_state = "whitegreen"; + tag = "icon-whitegreen (NORTHWEST)" + }, +/area/ruin/unpowered/syndicate_space_base/virology) +"AI" = ( +/obj/structure/table/glass, +/obj/item/stack/sheet/mineral/plasma{ + amount = 5; + pixel_x = -2; + pixel_y = 6 + }, +/obj/item/stack/sheet/mineral/plasma{ + amount = 5; + pixel_y = 2 + }, +/obj/item/stack/sheet/mineral/plasma{ + amount = 5; + pixel_x = 2; + pixel_y = -2 + }, +/obj/item/reagent_containers/glass/bottle/charcoal{ + pixel_x = 6 + }, +/obj/item/reagent_containers/glass/bottle/epinephrine, +/obj/item/storage/box/beakers/bluespace, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "whitepurple"; + tag = "icon-whitepurple (NORTH)" + }, +/area/ruin/unpowered/syndicate_space_base/chemistry) +"AJ" = ( +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "yellow" + }, +/area/ruin/unpowered/syndicate_space_base/engineering) +"AM" = ( +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plating, +/area/ruin/unpowered/syndicate_space_base/engineering) +"AU" = ( +/obj/machinery/vending/cigarette/syndicate/free, +/turf/simulated/floor/plasteel{ + icon_state = "floorgrime" + }, +/area/ruin/unpowered/syndicate_space_base/bar) +"AV" = ( +/turf/simulated/mineral, +/area/template_noop) +"AX" = ( +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4; + level = 1 + }, +/turf/simulated/floor/plating, +/area/ruin/unpowered/syndicate_space_base/engineering) +"Bt" = ( +/obj/machinery/atmospherics/unary/portables_connector{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/ruin/unpowered/syndicate_space_base/engineering) +"BC" = ( +/obj/machinery/door/airlock/hatch/syndicate, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/cargo) +"BG" = ( +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 5 + }, +/turf/simulated/floor/plating, +/area/ruin/unpowered/syndicate_space_base/engineering) +"BH" = ( +/obj/structure/table/reinforced, +/obj/item/scalpel, +/obj/item/circular_saw{ + pixel_y = 9 + }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "whiteblue"; + tag = "icon-whiteblue (WEST)" + }, +/area/ruin/unpowered/syndicate_space_base/medbay) +"BN" = ( +/obj/structure/chair{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/arrivals) +"BS" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0; + tag = "" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/main) +"Cd" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/main) +"Ce" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4; + level = 1 + }, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/engineering) +"Cf" = ( +/obj/machinery/conveyor/east{ + id = "syndiegarbage" + }, +/turf/simulated/floor/plating, +/area/ruin/unpowered/syndicate_space_base/arrivals) +"Cj" = ( +/obj/item/reagent_containers/food/condiment/saltshaker{ + pixel_x = -3; + pixel_y = 0 + }, +/obj/item/reagent_containers/food/condiment/peppermill{ + pixel_x = 3 + }, +/obj/structure/table, +/turf/simulated/floor/plasteel{ + dir = 2; + icon_state = "cafeteria"; + tag = "icon-cafeteria (NORTHEAST)" + }, +/area/ruin/unpowered/syndicate_space_base/bar) +"Cr" = ( +/obj/machinery/portable_atmospherics/canister/oxygen, +/obj/effect/decal/warning_stripes/yellow, +/turf/simulated/floor/plating, +/area/ruin/unpowered/syndicate_space_base/engineering) +"Cv" = ( +/turf/simulated/floor/plasteel{ + dir = 10; + icon_state = "whitegreen"; + tag = "icon-whitegreen (SOUTHWEST)" + }, +/area/ruin/unpowered/syndicate_space_base/virology) +"CG" = ( +/turf/simulated/floor/plasteel, +/area/ruin/unpowered/syndicate_space_base/engineering) +"CH" = ( +/obj/structure/closet/bombcloset, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "brown" + }, +/area/ruin/unpowered/syndicate_space_base/cargo) +"CI" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/chemistry) +"CL" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/turf/simulated/floor/redgrid, +/area/ruin/unpowered/syndicate_space_base/telecomms) +"CM" = ( +/obj/structure/sign/explosives/alt, +/turf/simulated/wall/mineral/plastitanium/nodiagonal, +/area/ruin/unpowered/syndicate_space_base/testlab) +"Da" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0; + tag = "" + }, +/obj/machinery/atmospherics/unary/vent_pump/on, +/turf/simulated/floor/plating, +/area/ruin/unpowered/syndicate_space_base/engineering) +"Dp" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4; + initialize_directions = 11; + level = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/main) +"Dv" = ( +/obj/machinery/portable_atmospherics/pump, +/turf/simulated/floor/plasteel{ + dir = 6; + icon_state = "yellow" + }, +/area/ruin/unpowered/syndicate_space_base/engineering) +"Dw" = ( +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "darkred" + }, +/area/ruin/unpowered/syndicate_space_base/arrivals) +"Dy" = ( +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/bar) +"DE" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/turf/simulated/floor/plasteel{ + dir = 2; + icon_state = "darkblue" + }, +/area/ruin/unpowered/syndicate_space_base/dormitories) +"DG" = ( +/turf/simulated/wall/mineral/plastitanium/nodiagonal, +/area/ruin/unpowered/syndicate_space_base/cargo) +"DH" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0; + tag = "" + }, +/turf/simulated/floor/plating, +/area/ruin/unpowered/syndicate_space_base/engineering) +"DL" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/turf/simulated/floor/engine, +/area/ruin/unpowered/syndicate_space_base/testlab) +"DN" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + icon_state = "floorgrime" + }, +/area/ruin/unpowered/syndicate_space_base/bar) +"DP" = ( +/obj/item/clothing/glasses/night, +/obj/item/clothing/glasses/night, +/obj/item/clothing/mask/gas/syndicate, +/obj/item/clothing/mask/gas/syndicate, +/obj/item/clothing/shoes/combat, +/obj/item/clothing/shoes/combat, +/obj/item/storage/belt/military, +/obj/item/storage/belt/military, +/obj/item/clothing/under/syndicate/combat, +/obj/item/clothing/under/syndicate/combat, +/obj/item/clothing/gloves/combat, +/obj/structure/closet/crate/secure/gear{ + req_access_txt = "150" + }, +/obj/item/clothing/gloves/combat, +/obj/machinery/light, +/turf/simulated/floor/plasteel{ + dir = 2; + icon_state = "darkred" + }, +/area/ruin/unpowered/syndicate_space_base/cargo) +"DW" = ( +/obj/machinery/computer/pandemic, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "whitegreen"; + tag = "icon-whitegreen (WEST)" + }, +/area/ruin/unpowered/syndicate_space_base/virology) +"El" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4; + level = 1 + }, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/main) +"Em" = ( +/turf/simulated/wall/mineral/plastitanium/nodiagonal, +/area/ruin/unpowered/syndicate_space_base/engineering) +"Es" = ( +/obj/machinery/light, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/main) +"EA" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 6 + }, +/obj/machinery/power/terminal{ + dir = 1 + }, +/obj/structure/cable/yellow{ + d1 = 0; + d2 = 2; + icon_state = "0-2" + }, +/turf/simulated/floor/plating, +/area/ruin/unpowered/syndicate_space_base/engineering) +"EC" = ( +/obj/structure/table, +/obj/item/storage/box/syringes, +/obj/item/gun/syringe/syndicate, +/obj/machinery/defibrillator_mount/loaded{ + pixel_x = -30 + }, +/obj/item/stock_parts/cell/high/plus, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "whiteblue"; + tag = "icon-whiteblue (WEST)" + }, +/area/ruin/unpowered/syndicate_space_base/medbay) +"EI" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0; + tag = "" + }, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/medbay) +"EK" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/ruin/unpowered/syndicate_space_base/engineering) +"EM" = ( +/obj/effect/spawner/window/reinforced, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/cargo) +"EO" = ( +/turf/simulated/floor/plasteel{ + icon_state = "whitegreenfull"; + tag = "icon-whitebluefull" + }, +/area/ruin/unpowered/syndicate_space_base/virology) +"EP" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8"; + tag = "" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4"; + tag = "90Curve" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8; + initialize_directions = 11 + }, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/chemistry) +"ET" = ( +/obj/machinery/atmospherics/unary/portables_connector{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/ruin/unpowered/syndicate_space_base/engineering) +"EW" = ( +/obj/structure/window/plasmareinforced{ + dir = 1 + }, +/obj/structure/window/plasmareinforced, +/obj/structure/window/plasmareinforced{ + dir = 8 + }, +/obj/structure/grille, +/obj/machinery/atmospherics/pipe/simple/insulated, +/turf/simulated/floor/engine/vacuum, +/area/ruin/unpowered/syndicate_space_base/engineering) +"EX" = ( +/turf/simulated/floor/plasteel{ + dir = 2; + icon_state = "darkbluecorners" + }, +/area/ruin/unpowered/syndicate_space_base/dormitories) +"Fd" = ( +/obj/structure/table, +/obj/item/storage/firstaid/regular{ + pixel_x = -4; + pixel_y = -4 + }, +/obj/effect/decal/cleanable/dirt, +/obj/item/storage/firstaid/fire{ + pixel_x = 4; + pixel_y = 4 + }, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "whiteblue"; + tag = "icon-whitehall (WEST)" + }, +/area/ruin/unpowered/syndicate_space_base/medbay) +"Fe" = ( +/obj/structure/cable{ + d2 = 4; + icon_state = "0-4" + }, +/obj/machinery/power/apc/syndicate{ + dir = 1; + name = "Virology APC"; + pixel_y = 24 + }, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "whitegreen"; + tag = "icon-whitegreen (WEST)" + }, +/area/ruin/unpowered/syndicate_space_base/virology) +"Fi" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0; + tag = "" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/chemistry) +"Fl" = ( +/turf/simulated/wall/mineral/plastitanium/nodiagonal, +/area/ruin/unpowered/syndicate_space_base/virology) +"Fm" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + dir = 2; + icon_state = "darkblue" + }, +/area/ruin/unpowered/syndicate_space_base/dormitories) +"Fp" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/obj/machinery/chem_heater, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "whitepurple"; + tag = "icon-whitepurple (EAST)" + }, +/area/ruin/unpowered/syndicate_space_base/chemistry) +"Fs" = ( +/obj/structure/window/basic{ + dir = 1 + }, +/turf/simulated/floor/grass, +/area/ruin/unpowered/syndicate_space_base/bar) +"Ft" = ( +/obj/structure/sign/chemistry, +/turf/simulated/wall/mineral/plastitanium/nodiagonal, +/area/ruin/unpowered/syndicate_space_base/chemistry) +"FC" = ( +/turf/simulated/floor/plasteel{ + dir = 9; + icon_state = "darkred" + }, +/area/ruin/unpowered/syndicate_space_base/arrivals) +"FK" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "whitepurple"; + tag = "icon-whitepurple (WEST)" + }, +/area/ruin/unpowered/syndicate_space_base/chemistry) +"FQ" = ( +/obj/structure/rack{ + dir = 8 + }, +/obj/item/storage/bag/trash, +/obj/item/storage/bag/trash, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/arrivals) +"FW" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0; + tag = "" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/main) +"FY" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0; + tag = "" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4; + level = 1 + }, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/telecomms) +"Ga" = ( +/obj/machinery/cryopod/offstation, +/turf/simulated/floor/plasteel{ + dir = 5; + icon_state = "darkblue" + }, +/area/ruin/unpowered/syndicate_space_base/dormitories) +"Gd" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plasteel{ + icon_state = "floorgrime" + }, +/area/ruin/unpowered/syndicate_space_base/bar) +"Ge" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/chem_master, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plasteel{ + dir = 10; + icon_state = "whitepurple"; + tag = "icon-whitepurple (SOUTHWEST)" + }, +/area/ruin/unpowered/syndicate_space_base/chemistry) +"Go" = ( +/obj/machinery/cooker/deepfryer, +/turf/simulated/floor/plasteel{ + dir = 2; + icon_state = "cafeteria"; + tag = "icon-cafeteria (NORTHEAST)" + }, +/area/ruin/unpowered/syndicate_space_base/bar) +"Gq" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/dormitories) +"GJ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4; + level = 1 + }, +/obj/structure/extinguisher_cabinet{ + pixel_x = -5; + pixel_y = 30 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0; + tag = "" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/main) +"GK" = ( +/obj/structure/closet/crate/hydroponics, +/obj/item/storage/bag/plants, +/obj/item/storage/bag/plants, +/obj/item/storage/bag/plants, +/obj/item/storage/bag/plants, +/turf/simulated/floor/plasteel{ + icon_state = "floorgrime" + }, +/area/ruin/unpowered/syndicate_space_base/bar) +"GM" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0; + tag = "" + }, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/arrivals) +"GQ" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/ruin/unpowered/syndicate_space_base/engineering) +"GY" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4; + level = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "darkred" + }, +/area/ruin/unpowered/syndicate_space_base/arrivals) +"Hc" = ( +/turf/space, +/area/ruin/unpowered/syndicate_space_base/engineering) +"He" = ( +/obj/machinery/portable_atmospherics/scrubber, +/obj/effect/decal/warning_stripes/yellow, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "yellow" + }, +/area/ruin/unpowered/syndicate_space_base/engineering) +"Hq" = ( +/obj/structure/closet/firecloset/full, +/turf/simulated/floor/plasteel{ + dir = 10; + icon_state = "yellow" + }, +/area/ruin/unpowered/syndicate_space_base/engineering) +"Hv" = ( +/obj/effect/spawner/window/reinforced, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/engineering) +"HB" = ( +/obj/structure/sink{ + dir = 8; + icon_state = "sink"; + pixel_x = -12; + pixel_y = 2 + }, +/turf/simulated/floor/plasteel{ + icon_state = "floorgrime" + }, +/area/ruin/unpowered/syndicate_space_base/bar) +"HF" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "whitepurple"; + tag = "icon-whitepurple (WEST)" + }, +/area/ruin/unpowered/syndicate_space_base/chemistry) +"HL" = ( +/obj/structure/closet/crate, +/obj/item/storage/box/stockparts/deluxe, +/obj/item/storage/box/stockparts/deluxe, +/obj/item/stack/sheet/metal/fifty, +/obj/item/stack/sheet/glass/fifty, +/obj/item/circuitboard/gibber, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "brown" + }, +/area/ruin/unpowered/syndicate_space_base/cargo) +"HS" = ( +/obj/machinery/alarm/syndicate{ + pixel_y = 24 + }, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "darkblue" + }, +/area/ruin/unpowered/syndicate_space_base/dormitories) +"HZ" = ( +/turf/simulated/wall/mineral/plastitanium/nodiagonal, +/area/ruin/unpowered/syndicate_space_base/bar) +"Ig" = ( +/obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction{ + dir = 4 + }, +/turf/simulated/wall/mineral/plastitanium/nodiagonal, +/area/ruin/unpowered/syndicate_space_base/engineering) +"Ih" = ( +/obj/machinery/alarm/syndicate{ + pixel_y = 24 + }, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/arrivals) +"Il" = ( +/obj/structure/closet/secure_closet/freezer/fridge/open, +/obj/item/reagent_containers/food/condiment/enzyme, +/obj/item/reagent_containers/food/drinks/cans/beer, +/obj/item/reagent_containers/food/drinks/cans/beer, +/obj/item/reagent_containers/food/drinks/cans/beer, +/obj/item/reagent_containers/food/drinks/cans/beer, +/obj/item/reagent_containers/food/drinks/cans/beer, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/bar) +"Iv" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4; + level = 1 + }, +/turf/simulated/floor/plasteel, +/area/ruin/unpowered/syndicate_space_base/cargo) +"IA" = ( +/obj/machinery/vending/boozeomat, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/bar) +"IL" = ( +/obj/machinery/navbeacon/invisible{ + codes_txt = "patrol;next_patrol=SBNE"; + location = "SBNW" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0; + tag = "" + }, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/main) +"IZ" = ( +/obj/machinery/atmospherics/binary/circulator, +/turf/simulated/floor/plating, +/area/ruin/unpowered/syndicate_space_base/engineering) +"Ja" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/plasteel, +/area/ruin/unpowered/syndicate_space_base/cargo) +"Je" = ( +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/ruin/unpowered/syndicate_space_base/engineering) +"Jg" = ( +/obj/structure/window/plasmareinforced{ + dir = 1 + }, +/obj/effect/turf_decal/caution/red, +/obj/machinery/atmospherics/unary/portables_connector{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/engineering) +"Jh" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/turf/simulated/floor/plasteel{ + icon_state = "whitebluefull"; + tag = "icon-whitebluefull" + }, +/area/ruin/unpowered/syndicate_space_base/medbay) +"Ji" = ( +/obj/item/twohanded/required/kirbyplants{ + icon_state = "plant-22" + }, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/bar) +"Jk" = ( +/obj/machinery/tcomms/relay/ruskie{ + network_id = "SYNDIE-RELAY" + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/telecomms) +"Jm" = ( +/turf/simulated/floor/plasteel{ + icon_state = "yellow" + }, +/area/ruin/unpowered/syndicate_space_base/engineering) +"Jq" = ( +/obj/structure/table/wood, +/turf/simulated/floor/plasteel{ + icon_state = "grimy" + }, +/area/ruin/unpowered/syndicate_space_base/bar) +"JH" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/plating, +/area/ruin/unpowered/syndicate_space_base/engineering) +"JX" = ( +/obj/machinery/navbeacon/invisible{ + codes_txt = "patrol;next_patrol=SBNW"; + location = "SBSW" + }, +/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/ruin/unpowered/syndicate_space_base/main) +"Kf" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0; + tag = "" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/chemistry) +"Kh" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0; + tag = "" + }, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/main) +"Ki" = ( +/obj/item/twohanded/required/kirbyplants{ + icon_state = "plant-22" + }, +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, +/obj/machinery/power/apc/syndicate{ + dir = 1; + name = "Bar APC"; + pixel_y = 24 + }, +/turf/simulated/floor/plasteel{ + icon_state = "grimy" + }, +/area/ruin/unpowered/syndicate_space_base/bar) +"Kj" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/ruin/unpowered/syndicate_space_base/engineering) +"Km" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/obj/machinery/chem_heater, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "whitepurple"; + tag = "icon-whitepurple (EAST)" + }, +/area/ruin/unpowered/syndicate_space_base/chemistry) +"Ko" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0; + tag = "" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/main) +"Kt" = ( +/obj/machinery/bodyscanner, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "whiteblue"; + tag = "icon-whitehall (WEST)" + }, +/area/ruin/unpowered/syndicate_space_base/medbay) +"Kv" = ( +/obj/structure/mirror{ + pixel_y = 32 + }, +/turf/simulated/floor/plasteel{ + icon_state = "freezerfloor" + }, +/area/ruin/unpowered/syndicate_space_base/arrivals) +"Kw" = ( +/obj/machinery/processor, +/obj/structure/table, +/turf/simulated/floor/plasteel{ + dir = 2; + icon_state = "cafeteria"; + tag = "icon-cafeteria (NORTHEAST)" + }, +/area/ruin/unpowered/syndicate_space_base/bar) +"Kx" = ( +/obj/machinery/recharge_station, +/turf/simulated/floor/plasteel{ + dir = 9; + icon_state = "yellow" + }, +/area/ruin/unpowered/syndicate_space_base/engineering) +"KB" = ( +/mob/living/simple_animal/pig, +/turf/simulated/floor/grass, +/area/ruin/unpowered/syndicate_space_base/bar) +"KH" = ( +/obj/machinery/portable_atmospherics/canister/oxygen, +/obj/effect/decal/warning_stripes/yellow, +/obj/machinery/alarm/syndicate{ + pixel_y = 24 + }, +/turf/simulated/floor/plating, +/area/ruin/unpowered/syndicate_space_base/engineering) +"KJ" = ( +/obj/item/flag/syndi, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "darkblue" + }, +/area/ruin/unpowered/syndicate_space_base/dormitories) +"KK" = ( +/obj/structure/chair{ + dir = 1 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/turf/simulated/floor/plasteel{ + dir = 6; + icon_state = "darkred" + }, +/area/ruin/unpowered/syndicate_space_base/arrivals) +"KQ" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/main) +"KS" = ( +/obj/item/stack/sheet/glass/fifty{ + pixel_x = 5; + pixel_y = 5 + }, +/obj/item/stack/sheet/glass/fifty{ + pixel_x = -5; + pixel_y = -5 + }, +/obj/structure/rack{ + dir = 8 + }, +/obj/item/stack/sheet/glass/fifty, +/turf/simulated/floor/plasteel{ + dir = 6; + icon_state = "yellow" + }, +/area/ruin/unpowered/syndicate_space_base/engineering) +"La" = ( +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/dormitories) +"Le" = ( +/obj/structure/reagent_dispensers/beerkeg, +/turf/simulated/floor/plasteel{ + icon_state = "floorgrime" + }, +/area/ruin/unpowered/syndicate_space_base/bar) +"Lf" = ( +/obj/machinery/cryopod/offstation, +/turf/simulated/floor/plasteel{ + dir = 9; + icon_state = "darkblue" + }, +/area/ruin/unpowered/syndicate_space_base/dormitories) +"Lh" = ( +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/item/wrench, +/turf/simulated/floor/plating, +/area/ruin/unpowered/syndicate_space_base/engineering) +"Lj" = ( +/obj/item/reagent_containers/food/drinks/shaker, +/obj/structure/table, +/turf/simulated/floor/plasteel{ + dir = 2; + icon_state = "cafeteria"; + tag = "icon-cafeteria (NORTHEAST)" + }, +/area/ruin/unpowered/syndicate_space_base/bar) +"Lk" = ( +/obj/machinery/computer/syndicate_depot/teleporter, +/obj/machinery/light, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/arrivals) +"Lm" = ( +/obj/structure/table, +/obj/item/clothing/glasses/welding, +/obj/item/clothing/glasses/welding, +/obj/item/clothing/glasses/welding, +/obj/item/clothing/glasses/welding, +/obj/machinery/power/apc/syndicate{ + dir = 1; + name = "Engineering APC"; + pixel_y = 24; + shock_proof = 1 + }, +/obj/structure/cable/yellow{ + d1 = 0; + d2 = 2; + icon_state = "0-2" + }, +/turf/simulated/floor/plating, +/area/ruin/unpowered/syndicate_space_base/engineering) +"Ls" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/ruin/unpowered/syndicate_space_base/engineering) +"LI" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0; + tag = "" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8"; + tag = "" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4; + initialize_directions = 11; + level = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/main) +"LK" = ( +/obj/structure/chair/stool/bar, +/turf/simulated/floor/plasteel{ + icon_state = "floorgrime" + }, +/area/ruin/unpowered/syndicate_space_base/bar) +"LP" = ( +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "darkbluecorners" + }, +/area/ruin/unpowered/syndicate_space_base/dormitories) +"LQ" = ( +/obj/structure/closet/crate/secure/gear{ + req_access_txt = "150" + }, +/obj/item/clothing/suit/space/syndicate, +/obj/item/clothing/suit/space/syndicate, +/obj/item/clothing/mask/gas/syndicate, +/obj/item/clothing/mask/gas/syndicate, +/obj/item/clothing/head/helmet/space/syndicate, +/obj/item/clothing/head/helmet/space/syndicate, +/turf/simulated/floor/plasteel{ + dir = 6; + icon_state = "darkred" + }, +/area/ruin/unpowered/syndicate_space_base/cargo) +"LR" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/main) +"LV" = ( +/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ + dir = 10 + }, +/turf/simulated/floor/engine/vacuum, +/area/ruin/unpowered/syndicate_space_base/engineering) +"LX" = ( +/obj/machinery/door/poddoor{ + id_tag = "syndbaseventing"; + name = "Venting Bay Door"; + use_power = 0 + }, +/turf/simulated/floor/engine/vacuum, +/area/ruin/unpowered/syndicate_space_base/engineering) +"LY" = ( +/obj/structure/sink{ + dir = 4; + pixel_x = 12 + }, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/simulated/floor/plasteel{ + icon_state = "freezerfloor" + }, +/area/ruin/unpowered/syndicate_space_base/arrivals) +"Mb" = ( +/obj/machinery/atmospherics/unary/vent_pump/on, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/arrivals) +"Mc" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 5 + }, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plating, +/area/ruin/unpowered/syndicate_space_base/engineering) +"Me" = ( +/obj/machinery/atmospherics/binary/volume_pump, +/obj/machinery/alarm/syndicate{ + pixel_x = -32 + }, +/turf/simulated/floor/plating, +/area/ruin/unpowered/syndicate_space_base/engineering) +"Mi" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4; + level = 1 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0; + tag = "" + }, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4"; + tag = "90Curve" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/main) +"Mk" = ( +/obj/structure/chair{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "whitepurplefull"; + tag = "icon-whitepurple (WEST)" + }, +/area/ruin/unpowered/syndicate_space_base/chemistry) +"Mq" = ( +/obj/structure/rack{ + dir = 8 + }, +/obj/item/storage/belt/medical, +/obj/item/crowbar, +/obj/item/clothing/glasses/hud/health, +/obj/item/clothing/accessory/stethoscope, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "whiteblue"; + tag = "icon-whiteblue (WEST)" + }, +/area/ruin/unpowered/syndicate_space_base/medbay) +"Ms" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0; + tag = "" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plating, +/area/ruin/unpowered/syndicate_space_base/engineering) +"MH" = ( +/obj/structure/chair{ + dir = 8 + }, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/arrivals) +"MU" = ( +/obj/structure/table, +/obj/item/t_scanner, +/obj/item/t_scanner, +/obj/item/t_scanner, +/obj/item/t_scanner, +/turf/simulated/floor/plating, +/area/ruin/unpowered/syndicate_space_base/engineering) +"MV" = ( +/obj/effect/mob_spawn/human/spacebase_syndicate{ + dir = 8 + }, +/turf/simulated/floor/plasteel{ + dir = 10; + icon_state = "darkblue" + }, +/area/ruin/unpowered/syndicate_space_base/dormitories) +"Na" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/chemistry) +"NE" = ( +/obj/machinery/atmospherics/unary/outlet_injector/on, +/turf/simulated/floor/engine/vacuum, +/area/ruin/unpowered/syndicate_space_base/engineering) +"NN" = ( +/obj/structure/bookcase/random, +/obj/machinery/light{ + dir = 1; + on = 1 + }, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/arrivals) +"NO" = ( +/obj/item/paper_bin{ + pixel_x = -2; + pixel_y = 5 + }, +/obj/item/hand_labeler, +/obj/item/pen/red, +/obj/item/restraints/handcuffs, +/obj/effect/decal/cleanable/dirt, +/obj/item/clothing/glasses/science, +/obj/structure/table/glass, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "whitegreen"; + tag = "icon-whitegreen (EAST)" + }, +/area/ruin/unpowered/syndicate_space_base/virology) +"NT" = ( +/obj/structure/extinguisher_cabinet{ + pixel_x = -5; + pixel_y = 30 + }, +/obj/structure/rack, +/obj/item/clothing/gloves/color/yellow, +/obj/item/clothing/gloves/color/yellow, +/turf/simulated/floor/plating, +/area/ruin/unpowered/syndicate_space_base/engineering) +"NV" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0; + tag = "" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/main) +"Og" = ( +/turf/simulated/wall/mineral/plastitanium/nodiagonal, +/area/ruin/unpowered/syndicate_space_base/chemistry) +"On" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/power/smes/engineering, +/obj/structure/cable/yellow, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/ruin/unpowered/syndicate_space_base/engineering) +"Op" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0; + tag = "" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4; + level = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/main) +"Ot" = ( +/obj/machinery/light, +/turf/simulated/floor/plasteel{ + dir = 2; + icon_state = "darkred" + }, +/area/ruin/unpowered/syndicate_space_base/arrivals) +"OG" = ( +/obj/machinery/door/firedoor, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/bar) +"OK" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plating, +/area/ruin/unpowered/syndicate_space_base/engineering) +"OY" = ( +/obj/machinery/power/apc/syndicate{ + dir = 1; + name = "Dorms APC"; + pixel_y = 24 + }, +/obj/structure/cable{ + d2 = 2; + icon_state = "0-2" + }, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "darkblue" + }, +/area/ruin/unpowered/syndicate_space_base/dormitories) +"Pq" = ( +/obj/item/holosign_creator/atmos, +/obj/structure/table, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "yellow" + }, +/area/ruin/unpowered/syndicate_space_base/engineering) +"PB" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8; + initialize_directions = 11 + }, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/chemistry) +"PE" = ( +/obj/machinery/vending/medical/syndicate_access, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "whitegreen"; + tag = "icon-whitegreen (WEST)" + }, +/area/ruin/unpowered/syndicate_space_base/virology) +"PH" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 4 + }, +/obj/machinery/chem_dispenser/upgraded, +/turf/simulated/floor/plasteel{ + dir = 6; + icon_state = "whitepurple"; + tag = "icon-whitepurple (SOUTHEAST)" + }, +/area/ruin/unpowered/syndicate_space_base/chemistry) +"PI" = ( +/obj/machinery/light, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0; + tag = "" + }, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/main) +"PK" = ( +/obj/structure/table/wood, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plasteel{ + icon_state = "grimy" + }, +/area/ruin/unpowered/syndicate_space_base/bar) +"PX" = ( +/obj/structure/cable{ + d2 = 2; + icon_state = "0-2"; + pixel_y = 1 + }, +/obj/machinery/computer/monitor{ + name = "Output Grid Power Monitoring Computer" + }, +/turf/simulated/floor/plating, +/area/ruin/unpowered/syndicate_space_base/engineering) +"Qj" = ( +/obj/structure/closet/crate/medical, +/obj/item/clothing/mask/breath/medical, +/obj/item/clothing/mask/breath/medical, +/obj/item/tank/internals/anesthetic, +/obj/item/tank/internals/anesthetic, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "whiteblue"; + tag = "icon-whitehall (WEST)" + }, +/area/ruin/unpowered/syndicate_space_base/medbay) +"Qr" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0; + tag = "" + }, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plating, +/area/ruin/unpowered/syndicate_space_base/engineering) +"Qt" = ( +/obj/structure/sign/barsign, +/turf/simulated/wall/mineral/plastitanium/nodiagonal, +/area/ruin/unpowered/syndicate_space_base/bar) +"QO" = ( +/obj/machinery/light, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4; + level = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/arrivals) +"QQ" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plating, +/area/ruin/unpowered/syndicate_space_base/engineering) +"QW" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/turf/simulated/floor/plating, +/area/ruin/unpowered/syndicate_space_base/engineering) +"Ri" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/engine, +/area/ruin/unpowered/syndicate_space_base/testlab) +"Rk" = ( +/obj/machinery/cryopod/offstation, +/turf/simulated/floor/plasteel{ + dir = 10; + icon_state = "darkblue" + }, +/area/ruin/unpowered/syndicate_space_base/dormitories) +"Rn" = ( +/obj/machinery/alarm/syndicate{ + pixel_y = 24 + }, +/turf/simulated/floor/engine, +/area/ruin/unpowered/syndicate_space_base/testlab) +"Rr" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/main) +"Ry" = ( +/obj/structure/table/reinforced, +/obj/item/surgicaldrill, +/obj/effect/decal/cleanable/dirt, +/obj/item/bonegel, +/obj/item/bonesetter, +/obj/item/FixOVein, +/turf/simulated/floor/plasteel{ + dir = 10; + icon_state = "whiteblue"; + tag = "icon-whitehall (WEST)" + }, +/area/ruin/unpowered/syndicate_space_base/medbay) +"RC" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0; + tag = "" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/turf/simulated/floor/engine, +/area/ruin/unpowered/syndicate_space_base/testlab) +"RF" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/engine, +/area/ruin/unpowered/syndicate_space_base/testlab) +"RG" = ( +/obj/machinery/light{ + dir = 1; + on = 1 + }, +/obj/effect/mob_spawn/human/spacebase_syndicate{ + dir = 8 + }, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "darkblue" + }, +/area/ruin/unpowered/syndicate_space_base/dormitories) +"RM" = ( +/obj/structure/grille, +/obj/structure/window/full/plastitanium, +/turf/simulated/floor/plasteel{ + icon_state = "white" + }, +/area/ruin/unpowered/syndicate_space_base/virology) +"RN" = ( +/obj/structure/reagent_dispensers/watertank, +/obj/effect/decal/warning_stripes/yellow, +/turf/simulated/floor/plasteel{ + dir = 10; + icon_state = "yellow" + }, +/area/ruin/unpowered/syndicate_space_base/engineering) +"Sh" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/navbeacon/invisible{ + codes_txt = "patrol;next_patrol=SBSW"; + location = "SBSE" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0; + tag = "" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8; + initialize_directions = 11 + }, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/main) +"SE" = ( +/obj/structure/table/glass, +/obj/item/folder/white, +/obj/item/reagent_containers/glass/beaker/large{ + pixel_x = -3 + }, +/obj/item/reagent_containers/glass/beaker/large{ + pixel_x = -3 + }, +/obj/item/reagent_containers/dropper, +/obj/item/screwdriver/nuke{ + pixel_y = 18 + }, +/obj/machinery/light{ + dir = 4 + }, +/obj/item/reagent_containers/spray/cleaner, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "whitepurple"; + tag = "icon-whitepurple (EAST)" + }, +/area/ruin/unpowered/syndicate_space_base/chemistry) +"SI" = ( +/obj/effect/decal/warning_stripes/yellow, +/obj/machinery/bluespace_beacon/syndicate/infiltrator, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/arrivals) +"SO" = ( +/obj/machinery/light{ + dir = 1; + on = 1 + }, +/obj/machinery/cryopod/offstation, +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "darkblue" + }, +/area/ruin/unpowered/syndicate_space_base/dormitories) +"SQ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4; + level = 1 + }, +/turf/simulated/floor/plating, +/area/ruin/unpowered/syndicate_space_base/engineering) +"SU" = ( +/obj/machinery/vending/coffee/free, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/bar) +"SV" = ( +/turf/simulated/floor/plasteel{ + dir = 1; + icon_state = "brown" + }, +/area/ruin/unpowered/syndicate_space_base/cargo) +"SW" = ( +/mob/living/simple_animal/cow, +/turf/simulated/floor/grass, +/area/ruin/unpowered/syndicate_space_base/bar) +"SX" = ( +/obj/structure/window/basic{ + dir = 4 + }, +/mob/living/simple_animal/chicken, +/turf/simulated/floor/grass, +/area/ruin/unpowered/syndicate_space_base/bar) +"Tc" = ( +/obj/structure/closet/crate, +/obj/item/storage/box/donkpockets{ + pixel_x = -2; + pixel_y = 6 + }, +/obj/item/storage/box/donkpockets{ + pixel_y = 3 + }, +/obj/item/storage/box/donkpockets{ + pixel_x = 2 + }, +/obj/machinery/alarm/syndicate{ + pixel_y = 24 + }, +/turf/simulated/floor/plasteel{ + dir = 9; + icon_state = "brown" + }, +/area/ruin/unpowered/syndicate_space_base/cargo) +"Te" = ( +/obj/machinery/sparker{ + id = "syndbaseigniter"; + pixel_x = -20 + }, +/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ + dir = 4 + }, +/turf/simulated/floor/engine/vacuum, +/area/ruin/unpowered/syndicate_space_base/engineering) +"Tg" = ( +/obj/machinery/door/firedoor, +/turf/simulated/floor/plating, +/area/ruin/unpowered/syndicate_space_base/engineering) +"Tl" = ( +/obj/machinery/atmospherics/pipe/manifold/visible{ + dir = 4; + initialize_directions = 11; + level = 2 + }, +/turf/simulated/floor/plating, +/area/ruin/unpowered/syndicate_space_base/engineering) +"Tm" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/dormitories) +"Tn" = ( +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/plating, +/area/ruin/unpowered/syndicate_space_base/engineering) +"Tq" = ( +/obj/structure/window/basic{ + dir = 4 + }, +/obj/machinery/vending/hydroseeds, +/turf/simulated/floor/plasteel{ + icon_state = "floorgrime" + }, +/area/ruin/unpowered/syndicate_space_base/bar) +"Tr" = ( +/obj/machinery/power/apc/syndicate{ + dir = 1; + name = "Arrivals APC"; + pixel_y = 24 + }, +/obj/structure/cable{ + d2 = 8; + icon_state = "0-8" + }, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/arrivals) +"Tv" = ( +/turf/simulated/floor/engine/vacuum, +/area/ruin/unpowered/syndicate_space_base/engineering) +"Tw" = ( +/turf/simulated/floor/plasteel{ + icon_state = "floorgrime" + }, +/area/ruin/unpowered/syndicate_space_base/bar) +"TC" = ( +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/ruin/unpowered/syndicate_space_base/engineering) +"TD" = ( +/turf/simulated/wall/mineral/plastitanium/nodiagonal, +/area/ruin/unpowered/syndicate_space_base/testlab) +"TJ" = ( +/obj/structure/table/wood, +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + icon_state = "grimy" + }, +/area/ruin/unpowered/syndicate_space_base/bar) +"TM" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0; + tag = "" + }, +/obj/machinery/alarm/syndicate{ + pixel_y = 24 + }, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/chemistry) +"TN" = ( +/obj/structure/curtain/open/shower, +/turf/simulated/floor/plasteel{ + icon_state = "freezerfloor" + }, +/area/ruin/unpowered/syndicate_space_base/arrivals) +"Uo" = ( +/obj/structure/closet/l3closet, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "brown" + }, +/area/ruin/unpowered/syndicate_space_base/cargo) +"Us" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4; + level = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/arrivals) +"UF" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4"; + tag = "" + }, +/turf/simulated/floor/plasteel{ + icon_state = "white" + }, +/area/ruin/unpowered/syndicate_space_base/chemistry) +"UR" = ( +/obj/machinery/light, +/obj/machinery/atmospherics/unary/portables_connector{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/engineering) +"Vc" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/engine, +/area/ruin/unpowered/syndicate_space_base/testlab) +"Vd" = ( +/obj/structure/chair{ + dir = 8 + }, +/turf/simulated/floor/redgrid, +/area/ruin/unpowered/syndicate_space_base/telecomms) +"Vf" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0; + tag = "" + }, +/obj/effect/turf_decal/stripes/line{ + dir = 9 + }, +/turf/simulated/floor/plating, +/area/ruin/unpowered/syndicate_space_base/engineering) +"Vg" = ( +/obj/machinery/portable_atmospherics/canister/carbon_dioxide, +/obj/effect/decal/warning_stripes/yellow, +/turf/simulated/floor/plating, +/area/ruin/unpowered/syndicate_space_base/engineering) +"Vl" = ( +/turf/simulated/floor/engine, +/area/ruin/unpowered/syndicate_space_base/testlab) +"Vs" = ( +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "darkblue" + }, +/area/ruin/unpowered/syndicate_space_base/dormitories) +"Vu" = ( +/obj/machinery/monkey_recycler, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/chemistry) +"Vx" = ( +/obj/structure/window/plasmareinforced{ + dir = 1 + }, +/obj/effect/turf_decal/caution/red, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/engineering) +"VB" = ( +/obj/machinery/meter, +/obj/machinery/atmospherics/pipe/simple/insulated{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/ruin/unpowered/syndicate_space_base/engineering) +"VH" = ( +/obj/effect/turf_decal/stripes/line{ + dir = 8 + }, +/obj/machinery/power/smes/engineering{ + charge = 0 + }, +/obj/structure/cable/yellow, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/plating, +/area/ruin/unpowered/syndicate_space_base/engineering) +"VK" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable/yellow{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/plating, +/area/ruin/unpowered/syndicate_space_base/engineering) +"VP" = ( +/obj/machinery/light, +/obj/effect/mob_spawn/human/spacebase_syndicate{ + dir = 8 + }, +/turf/simulated/floor/plasteel{ + dir = 2; + icon_state = "darkblue" + }, +/area/ruin/unpowered/syndicate_space_base/dormitories) +"VQ" = ( +/obj/machinery/shower{ + dir = 8; + icon_state = "shower"; + tag = "icon-shower (WEST)" + }, +/obj/item/soap/syndie, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/simulated/floor/plasteel{ + icon_state = "freezerfloor" + }, +/area/ruin/unpowered/syndicate_space_base/arrivals) +"VW" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0; + tag = "" + }, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/main) +"Wi" = ( +/obj/machinery/kitchen_machine/candy_maker, +/turf/simulated/floor/plasteel{ + dir = 2; + icon_state = "cafeteria"; + tag = "icon-cafeteria (NORTHEAST)" + }, +/area/ruin/unpowered/syndicate_space_base/bar) +"Wl" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/machinery/hydroponics/constructable, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/bar) +"Wn" = ( +/obj/machinery/sleeper/syndie, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "whiteblue"; + tag = "icon-whitehall (WEST)" + }, +/area/ruin/unpowered/syndicate_space_base/medbay) +"Wr" = ( +/turf/simulated/floor/engine/air, +/area/ruin/unpowered/syndicate_space_base/engineering) +"Wz" = ( +/obj/structure/sign/lifestar{ + desc = "The Star of Life, a symbol of Medical Aid."; + icon_state = "lifestar"; + name = "Medbay" + }, +/turf/simulated/wall/mineral/plastitanium/nodiagonal, +/area/ruin/unpowered/syndicate_space_base/medbay) +"WC" = ( +/obj/item/kitchen/knife{ + pixel_x = 6 + }, +/obj/structure/table, +/turf/simulated/floor/plasteel{ + dir = 2; + icon_state = "cafeteria"; + tag = "icon-cafeteria (NORTHEAST)" + }, +/area/ruin/unpowered/syndicate_space_base/bar) +"WG" = ( +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/arrivals) +"WN" = ( +/obj/machinery/atmospherics/pipe/manifold/visible{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/ruin/unpowered/syndicate_space_base/engineering) +"WT" = ( +/obj/structure/window/basic, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "whiteblue"; + tag = "icon-whiteblue (WEST)" + }, +/area/ruin/unpowered/syndicate_space_base/medbay) +"Xa" = ( +/obj/machinery/atmospherics/pipe/simple/heat_exchanging{ + dir = 9 + }, +/turf/simulated/floor/engine/vacuum, +/area/ruin/unpowered/syndicate_space_base/engineering) +"Xb" = ( +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/chemistry) +"Xh" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0; + tag = "" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/dormitories) +"Xm" = ( +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "yellow" + }, +/area/ruin/unpowered/syndicate_space_base/engineering) +"XQ" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/structure/window/plasmareinforced{ + dir = 1 + }, +/obj/structure/window/plasmareinforced, +/obj/structure/window/plasmareinforced{ + dir = 4 + }, +/obj/structure/grille, +/obj/machinery/atmospherics/pipe/simple/insulated, +/turf/simulated/floor/engine/vacuum, +/area/ruin/unpowered/syndicate_space_base/engineering) +"XS" = ( +/obj/structure/table/glass, +/obj/item/folder/white, +/obj/item/reagent_containers/glass/beaker/large{ + pixel_x = -3 + }, +/obj/item/reagent_containers/glass/beaker/large{ + pixel_x = -3 + }, +/obj/item/reagent_containers/dropper, +/obj/item/screwdriver/nuke{ + pixel_y = 18 + }, +/obj/item/reagent_containers/spray/cleaner, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0; + tag = "" + }, +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "whitepurple"; + tag = "icon-whitepurple (EAST)" + }, +/area/ruin/unpowered/syndicate_space_base/chemistry) +"Ya" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4; + level = 1 + }, +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0; + tag = "" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1; + initialize_directions = 11; + level = 1 + }, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/main) +"Yc" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0; + tag = "" + }, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/dormitories) +"Yq" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/universal{ + dir = 4 + }, +/turf/simulated/wall/mineral/plastitanium/nodiagonal, +/area/ruin/unpowered/syndicate_space_base/engineering) +"Yz" = ( +/obj/machinery/door/poddoor/shutters{ + dir = 8; + id_tag = "SSBrestricted"; + name = "Syndicate Restricted Area" + }, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/arrivals) +"YC" = ( +/obj/effect/spawner/window/reinforced, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/chemistry) +"YJ" = ( +/obj/structure/table, +/obj/machinery/cell_charger, +/obj/item/stock_parts/cell/high/plus, +/turf/simulated/floor/plating, +/area/ruin/unpowered/syndicate_space_base/engineering) +"YP" = ( +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 6 + }, +/obj/machinery/light{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/ruin/unpowered/syndicate_space_base/engineering) +"YU" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/item/storage/part_replacer, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + dir = 8; + icon_state = "brown" + }, +/area/ruin/unpowered/syndicate_space_base/cargo) +"Za" = ( +/obj/structure/cable{ + d1 = 4; + d2 = 8; + icon_state = "4-8"; + pixel_y = 0; + tag = "" + }, +/turf/simulated/floor/plating, +/area/ruin/unpowered/syndicate_space_base/engineering) +"Zg" = ( +/obj/machinery/power/apc/syndicate{ + dir = 1; + name = "Test Chamber APC"; + pixel_y = 24 + }, +/obj/structure/cable{ + d2 = 2; + icon_state = "0-2" + }, +/turf/simulated/floor/engine, +/area/ruin/unpowered/syndicate_space_base/testlab) +"Zl" = ( +/obj/structure/closet/crate/hydroponics, +/obj/item/cultivator, +/obj/item/cultivator, +/obj/item/cultivator, +/obj/item/cultivator, +/obj/item/shovel/spade, +/obj/item/shovel/spade, +/obj/item/shovel/spade, +/obj/item/shovel/spade, +/obj/item/hatchet, +/obj/item/hatchet, +/obj/item/hatchet, +/obj/item/hatchet, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/bar) +"Zo" = ( +/obj/machinery/computer/general_air_control{ + frequency = 1222; + name = "Bomb Mix Monitor"; + sensors = list("burn_sensor" = "Burn Mix") + }, +/obj/effect/decal/warning_stripes/north, +/turf/simulated/floor/plating, +/area/ruin/unpowered/syndicate_space_base/engineering) +"Zy" = ( +/turf/simulated/floor/plasteel{ + dir = 4; + icon_state = "darkblue" + }, +/area/ruin/unpowered/syndicate_space_base/dormitories) +"ZB" = ( +/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/ruin/unpowered/syndicate_space_base/main) +"ZR" = ( +/turf/simulated/floor/plasteel{ + icon_state = "dark" + }, +/area/ruin/unpowered/syndicate_space_base/testlab) + +(1,1,1) = {" +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +"} +(2,1,1) = {" +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +AV +AV +AV +AV +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +"} +(3,1,1) = {" +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +AV +AV +AV +AV +AV +AV +AV +AV +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +"} +(4,1,1) = {" +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +ic +ic +AV +AV +AV +AV +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +"} +(5,1,1) = {" +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +"} +(6,1,1) = {" +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +"} +(7,1,1) = {" +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +"} +(8,1,1) = {" +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +"} +(9,1,1) = {" +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +ic +ic +ic +ic +ic +ic +ic +"} +(10,1,1) = {" +ic +ic +ic +ic +ic +ic +ic +ic +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +ic +ic +ic +ic +ic +ic +"} +(11,1,1) = {" +ic +ic +ic +ic +ic +ic +ic +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +ic +ic +ic +ic +ic +"} +(12,1,1) = {" +ic +ic +ic +ic +ic +ic +ic +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +HZ +HZ +HZ +HZ +HZ +HZ +HZ +HZ +HZ +HZ +HZ +HZ +HZ +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +ic +ic +ic +ic +"} +(13,1,1) = {" +ic +ic +ic +ic +ic +ic +AV +AV +AV +AV +AV +fF +fF +fF +fF +fF +fF +fF +fF +nj +nj +nj +nj +nj +nj +hB +Tw +Wl +Tw +ii +HB +ii +Tw +ii +Fs +nA +HZ +AV +AV +gD +gD +gD +gD +gD +gD +gD +gD +gD +gD +gD +AV +AV +AV +AV +AV +AV +ic +ic +ic +ic +"} +(14,1,1) = {" +ic +ic +ic +ic +ic +AV +AV +AV +AV +AV +AV +fF +Lf +Vs +KJ +kg +KJ +Vs +Rk +nj +iy +iF +Jk +te +nj +rV +Dy +nD +Dy +nD +Dy +nD +Dy +nD +Fs +KB +HZ +lf +lf +gD +xm +Mq +tz +EC +gS +WT +pI +BH +Ry +gD +AV +AV +AV +AV +AV +AV +ic +ic +ic +ic +"} +(15,1,1) = {" +ic +ic +ic +ic +ic +ic +AV +AV +AV +AV +AV +fF +SO +La +La +La +La +La +ph +nj +fU +CL +Vd +gY +nj +pp +Tw +Dy +Tw +Dy +Tw +Dy +Tw +Dy +Fs +SW +HZ +uk +uk +Wz +eV +bw +bw +bw +bw +bw +bw +bw +lo +gD +AV +AV +AV +AV +AV +AV +AV +ic +ic +ic +"} +(16,1,1) = {" +ic +ic +ic +ic +ic +AV +AV +AV +AV +AV +AV +fF +Ga +Zy +cg +La +EX +Zy +ff +nj +mB +FY +zm +jl +nj +Tq +xr +zS +wn +Tw +Dy +zj +ku +oW +cH +SX +HZ +tv +fQ +EI +cO +ks +lu +lu +Jh +bw +bw +bw +qt +gD +AV +AV +AV +AV +AV +AV +AV +ic +ic +ic +"} +(17,1,1) = {" +ic +ic +ic +ic +AV +AV +AV +AV +AV +AV +AV +fF +fF +fF +qz +La +Fm +fF +fF +nj +nj +hR +uX +kE +nj +Ji +GK +Zl +rw +Dy +Tw +lr +Am +Il +Tw +Ji +HZ +ZB +yz +gD +cL +Fd +Kt +Wn +Wn +ow +Qj +av +jt +gD +AV +AV +AV +AV +AV +AV +AV +ic +ic +ic +"} +(18,1,1) = {" +ic +ic +ic +ic +AV +AV +AV +AV +AV +AV +AV +AV +AV +fF +HS +La +Gq +dl +dl +Tm +LR +Dp +ne +Cd +ik +Gd +ap +DN +qN +Gd +ap +Gd +yY +cS +ap +Gd +ik +Rr +cC +gD +gD +gD +gD +gD +gD +gD +gD +gD +gD +gD +gD +AV +AV +AV +AV +AV +AV +AV +ic +ic +"} +(19,1,1) = {" +ic +ic +ic +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +fF +OY +gl +Xh +gl +gl +Yc +VW +VW +Mi +IL +pR +it +Tw +Dy +Tw +Dy +Tw +Dy +Tw +Dy +Tw +Dy +OG +JX +yz +Fl +AG +cs +wg +lB +DW +PE +Cv +RM +vq +wC +Fl +AV +AV +AV +AV +AV +AV +AV +ic +ic +"} +(20,1,1) = {" +ic +ic +ic +AV +AV +AV +AV +AV +AV +AV +AV +fF +fF +fF +qz +La +DE +fF +fF +fF +fF +fF +Op +Es +HZ +Ki +di +Jq +jO +Tw +IA +WC +wS +fb +Cj +uJ +Qt +ZB +yz +Fl +Fe +EO +EO +EO +bS +EO +ny +nY +wC +wB +Fl +AV +AV +AV +AV +AV +AV +AV +AV +ic +"} +(21,1,1) = {" +ic +ic +ic +AV +AV +AV +AV +AV +AV +AV +AV +fF +fP +Vs +wz +La +LP +Vs +MV +fF +La +fF +xN +uk +HZ +jW +di +zG +LK +Dy +AU +Lj +uJ +uJ +uJ +uJ +HZ +kk +Kh +ir +uu +qQ +gg +gg +yq +EO +ny +RM +RM +RM +Fl +AV +AV +AV +AV +AV +AV +AV +AV +ic +"} +(22,1,1) = {" +ic +ic +AV +AV +AV +AV +AV +AV +AV +AV +AV +fF +RG +La +La +La +La +La +VP +fF +La +fF +xN +uk +HZ +Jq +di +PK +jO +Tw +SU +nf +uJ +uJ +uJ +uJ +HZ +uk +yz +zs +ly +jq +EO +jq +EO +EO +ny +nY +wC +wC +Fl +AV +AV +AV +AV +AV +AV +AV +AV +ic +"} +(23,1,1) = {" +ic +ic +AV +AV +AV +AV +AV +AV +AV +AV +AV +fF +pa +Zy +pK +Zy +pK +Zy +lM +fF +aT +fF +Ya +mi +HZ +vv +di +TJ +LK +Dy +Le +Kw +vk +in +Go +Wi +HZ +uk +yz +Fl +mh +NO +zl +kU +nZ +uL +uZ +RM +jI +wB +Fl +AV +AV +AV +AV +AV +AV +AV +AV +ic +"} +(24,1,1) = {" +ic +ic +AV +AV +AV +AV +AV +AV +AV +AV +Em +Em +Em +Em +Em +Em +Em +Em +Em +Em +Em +Em +xN +uk +DG +DG +DG +DG +DG +DG +DG +DG +DG +DG +DG +DG +DG +uk +PI +Og +Og +Og +Og +YC +Og +Og +YC +Og +Og +Og +Og +Og +AV +AV +AV +AV +AV +AV +AV +AV +"} +(25,1,1) = {" +ic +AV +AV +AV +AV +AV +AV +AV +AV +AV +Em +Kx +gh +lw +RN +Em +tL +He +Pq +He +Hq +Em +NV +jC +DG +Tc +dS +YU +vJ +lv +wf +HL +wf +gn +ws +wq +DG +uk +yz +Og +fn +tQ +HF +FK +fu +Og +fn +tQ +HF +FK +Ge +Og +AV +AV +AV +AV +AV +AV +AV +AV +"} +(26,1,1) = {" +ic +AV +AV +AV +AV +AV +AV +AV +AV +AV +Em +AB +CG +CG +Jm +Em +AJ +CG +CG +CG +Jm +Em +wX +uk +EM +SV +vQ +Iv +vQ +vQ +vQ +Ja +br +nr +nG +DP +DG +uk +yz +YC +AI +Mk +wj +vL +AA +fe +AI +Mk +wj +vL +AA +Og +AV +AV +AV +AV +AV +AV +AV +AV +"} +(27,1,1) = {" +ic +AV +AV +AV +AV +AV +AV +AV +AV +AV +Em +hO +CG +uF +KS +Em +uz +Xm +CG +Xm +Dv +Em +GJ +uk +DG +oj +rp +oO +Uo +CH +sH +Ja +el +DG +qs +LQ +DG +uk +yz +Og +hp +XS +UF +Fp +PH +Og +cU +SE +bT +Km +PH +Og +AV +AV +AV +AV +AV +AV +AV +AV +"} +(28,1,1) = {" +ic +AV +AV +AV +AV +AV +AV +AV +AV +AV +Em +Em +sR +Hv +Em +Em +Em +Hv +sR +Em +Em +Em +tf +uk +DG +DG +DG +oi +EM +EM +EM +BC +DG +DG +DG +DG +DG +uk +yz +Og +Og +Og +TM +Ft +Og +Og +Og +Ft +Xb +Og +Og +Og +Og +AV +AV +AV +AV +AV +AV +AV +"} +(29,1,1) = {" +ic +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +Em +Tn +DH +DH +Da +eQ +ar +Ms +Qr +BS +BS +hX +sz +BS +FW +Ko +LI +BS +xG +tj +fx +BS +BS +BS +wh +BS +Sh +yB +ge +Kf +Fi +EP +PB +Na +Na +Na +sb +kC +cB +Xb +xB +Og +AV +AV +AV +AV +AV +AV +AV +"} +(30,1,1) = {" +ic +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +Em +Za +qF +qF +qF +qF +Ls +SQ +Tg +uk +uk +hK +uk +uk +uk +El +uk +uk +yz +pG +uk +uk +uk +uk +KQ +uk +gs +uk +vM +Xb +Ai +hS +CI +Xb +mX +Xb +CI +Xb +Ai +Xb +Vu +Og +AV +AV +AV +AV +AV +AV +AV +"} +(31,1,1) = {" +ic +AV +AV +AV +AV +AV +AV +AV +AV +Em +Em +Em +Za +qF +qF +qF +JH +QW +SQ +xu +Em +Em +Em +Em +Em +sR +pA +Em +yE +GM +gZ +yE +yE +yE +yE +yE +yE +TD +TD +TD +TD +TD +rr +CM +TD +TD +TD +CM +ZR +TD +Og +Og +Og +AV +AV +AV +AV +AV +AV +AV +"} +(32,1,1) = {" +ic +AV +AV +AV +AV +AV +AV +AV +AV +Em +MU +qF +Za +qF +qF +qF +qF +Ls +SQ +bO +Em +Wr +Wr +Wr +Vx +Aj +Ce +vn +yE +nT +rK +xc +uq +uq +uq +uq +uq +TD +ia +ia +ia +TD +un +TD +ia +ia +ia +TD +mE +TD +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +"} +(33,1,1) = {" +ic +AV +AV +AV +AV +AV +AV +AV +AV +Em +PX +DH +vs +Vf +VH +lZ +AM +Je +SQ +YJ +Em +Wr +xt +Wr +Jg +Aj +iA +UR +yE +nT +rK +yE +Kv +yE +TN +yE +TN +TD +TD +TD +TD +TD +rr +CM +TD +TD +TD +CM +ZR +TD +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +"} +(34,1,1) = {" +ic +AV +AV +AV +AV +AV +AV +AV +AV +Em +Lm +VK +aX +Mc +On +EA +AM +ch +AX +yf +Em +Wr +lm +fi +wJ +be +jS +rN +yE +dW +Us +yE +LY +yE +jy +yE +VQ +TD +Zg +fH +fH +RC +uN +ol +RF +RF +dH +cJ +Vl +TD +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +"} +(35,1,1) = {" +ic +ic +AV +AV +AV +AV +AV +AV +AV +Em +NT +qF +ji +AM +AM +AM +AM +nm +EK +ds +Em +Em +Em +Em +Em +yE +yE +yE +yE +Tr +rK +yE +yE +yE +yE +yE +yE +TD +Rn +Vl +Vl +sw +Vc +Vl +Vl +Vl +Vc +Ri +Vl +TD +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +"} +(36,1,1) = {" +ic +ic +AV +AV +AV +AV +AV +AV +AV +Em +th +qF +qF +qF +qF +qF +qF +at +qF +YP +Me +BG +TC +qF +Em +jB +ur +WG +aj +Mb +cj +aj +WG +qT +jm +yE +AV +TD +Vl +Vl +Vl +sw +Vc +Vl +Vl +Vl +Vc +Ri +Vl +TD +AV +AV +AV +AV +AV +AV +AV +AV +AV +ic +"} +(37,1,1) = {" +ic +ic +AV +AV +AV +AV +AV +AV +AV +Em +qF +ET +qF +qF +qF +qF +qF +at +eC +Tl +IZ +cD +vE +gu +Em +vt +WG +WG +xc +WG +rK +xc +WG +WG +Cf +yE +AV +TD +Vl +Vl +Vl +sw +Vc +Vl +Vl +Vl +Vc +Ri +Vl +TD +AV +AV +AV +AV +AV +AV +AV +AV +AV +ic +"} +(38,1,1) = {" +ic +ic +AV +AV +AV +AV +AV +AV +AV +Em +qF +VB +qF +qF +qF +qF +qF +kY +AM +Lh +mP +qF +qF +qF +Em +rD +vK +FQ +yE +Ih +QO +yE +yE +gj +vP +yE +AV +TD +Vl +Vl +Vl +sw +Vc +Vl +Vl +Vl +Vc +Ri +Vl +TD +AV +AV +AV +AV +AV +AV +AV +AV +AV +ic +"} +(39,1,1) = {" +ic +ic +AV +AV +AV +AV +AV +AV +AV +Em +Em +Ig +Em +Em +xo +qF +JH +QW +iH +WN +wZ +hr +vE +gu +Em +yE +yE +yE +yE +WG +rK +BN +yE +WG +Cf +yE +AV +TD +Vl +Vl +Vl +DL +ve +Vl +Vl +Vl +ve +DL +Vl +TD +AV +AV +AV +AV +AV +AV +AV +AV +AV +ic +"} +(40,1,1) = {" +ic +ic +ic +AV +AV +AV +AV +Em +Em +Em +fX +Te +NE +EW +oZ +cE +Bt +Ls +qF +qY +hc +yZ +qF +qF +Em +ss +WG +WG +aj +WG +rK +bY +yE +WG +yE +yE +AV +TD +eN +Vl +Vl +Vl +Vl +Vl +Vl +Vl +Vl +Vl +nv +TD +AV +AV +AV +AV +AV +AV +AV +AV +AV +ic +"} +(41,1,1) = {" +ic +ic +ic +AV +AV +AV +AV +Em +Hc +LX +fX +fX +Tv +vF +Zo +qF +qF +wc +OK +QQ +OK +OK +GQ +qF +Em +ss +WG +WG +xc +WG +rK +MH +yE +yE +yE +AV +AV +TD +Vl +Vl +Vl +Vl +Vl +Vl +Vl +Vl +Vl +Vl +Vl +TD +AV +AV +AV +AV +AV +AV +AV +AV +AV +ic +"} +(42,1,1) = {" +ic +ic +ic +AV +AV +AV +AV +Em +Em +Em +LV +Xa +id +XQ +rW +cE +Bt +vY +qF +Em +KH +qF +qF +dP +Em +NN +WG +WG +yE +aj +ob +aj +yE +AV +AV +AV +AV +TD +Vl +Vl +Vl +Vl +Vl +Vl +Vl +Vl +Vl +Vl +Vl +TD +AV +AV +AV +AV +AV +AV +AV +AV +ic +ic +"} +(43,1,1) = {" +ic +ic +ic +AV +AV +AV +AV +AV +AV +Em +Em +Em +Em +Em +Em +Em +Em +Yq +Em +Em +Cr +qF +qF +dP +Em +ss +WG +BN +yE +FC +GY +kD +yE +AV +AV +AV +AV +TD +Vl +Vl +Vl +Vl +Vl +Vl +Vl +Vl +Vl +Vl +Vl +TD +AV +AV +AV +AV +AV +AV +AV +AV +ic +ic +"} +(44,1,1) = {" +ic +ic +ic +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +Em +nc +Hc +Em +kI +qF +qF +Vg +Em +ss +WG +tW +yE +Dw +hq +Ot +yE +AV +AV +AV +AV +TD +Vl +Vl +Vl +Vl +Vl +Vl +Vl +Vl +Vl +Vl +Vl +TD +AV +AV +AV +AV +AV +AV +AV +AV +ic +ic +"} +(45,1,1) = {" +ic +ic +ic +ic +ic +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +Em +Hc +Hc +Em +kI +qF +Kj +Vg +Em +yE +yE +yE +yE +wp +em +KK +yE +AV +AV +AV +AV +TD +Vl +Vl +Vl +Vl +Vl +Vl +Vl +Vl +Vl +Vl +Vl +TD +AV +AV +AV +AV +AV +AV +AV +AV +ic +ic +"} +(46,1,1) = {" +ic +ic +ic +AV +ic +ic +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +Em +Em +Em +Em +Em +Em +Em +Em +Em +AV +AV +AV +yE +Yz +yE +yE +yE +AV +AV +AV +AV +TD +eN +Vl +Vl +Vl +Vl +Vl +Vl +Vl +Vl +Vl +nv +TD +AV +AV +AV +AV +AV +AV +AV +ic +ic +ic +"} +(47,1,1) = {" +ic +ic +ic +ic +ic +ic +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +yE +WG +WG +sr +yE +AV +AV +AV +AV +TD +Vl +Vl +Vl +Vl +Vl +Vl +Vl +Vl +Vl +Vl +Vl +TD +AV +AV +AV +AV +AV +AV +AV +ic +ic +ic +"} +(48,1,1) = {" +ic +AV +ic +ic +ic +ic +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +yE +WG +WG +Lk +yE +AV +AV +AV +AV +TD +Vl +Vl +Vl +Vl +Vl +Vl +Vl +Vl +Vl +Vl +Vl +TD +AV +AV +AV +AV +AV +AV +AV +ic +ic +ic +"} +(49,1,1) = {" +ic +ic +ic +ic +ic +ic +ic +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +yE +WG +WG +SI +yE +AV +AV +AV +AV +TD +Vl +qv +Vl +Vl +Vl +Vl +Vl +Vl +Vl +qv +Vl +TD +AV +AV +AV +AV +AV +AV +ic +ic +ic +ic +"} +(50,1,1) = {" +ic +AV +ic +ic +ic +ic +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +yE +yE +yE +yE +yE +AV +AV +AV +AV +TD +TD +TD +TD +TD +TD +TD +TD +TD +TD +TD +TD +TD +AV +AV +AV +AV +AV +AV +ic +ic +ic +ic +"} +(51,1,1) = {" +ic +ic +ic +AV +ic +ic +ic +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +ic +ic +ic +ic +"} +(52,1,1) = {" +ic +ic +ic +ic +ic +ic +ic +AV +ic +ic +AV +AV +AV +AV +ic +ic +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +ic +ic +ic +ic +ic +"} +(53,1,1) = {" +ic +ic +ic +ic +ic +AV +ic +ic +ic +ic +ic +AV +ic +ic +ic +ic +ic +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +ic +ic +ic +ic +ic +ic +"} +(54,1,1) = {" +ic +AV +ic +ic +ic +ic +ic +ic +ic +AV +ic +AV +ic +ic +AV +ic +ic +ic +AV +AV +ic +ic +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +ic +ic +ic +ic +ic +ic +ic +"} +(55,1,1) = {" +ic +ic +ic +ic +AV +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +ic +ic +ic +ic +ic +ic +ic +"} +(56,1,1) = {" +ic +ic +ic +ic +ic +ic +ic +AV +ic +AV +ic +ic +ic +AV +ic +AV +ic +ic +ic +ic +AV +ic +ic +AV +ic +ic +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +ic +ic +ic +ic +ic +ic +ic +ic +"} +(57,1,1) = {" +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +AV +AV +ic +ic +ic +ic +ic +AV +ic +ic +ic +ic +ic +ic +AV +ic +AV +AV +AV +AV +AV +AV +AV +AV +ic +ic +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +AV +ic +ic +ic +ic +ic +ic +ic +ic +"} +(58,1,1) = {" +ic +ic +ic +ic +ic +ic +ic +ic +AV +ic +ic +ic +ic +ic +ic +ic +ic +AV +ic +ic +ic +ic +AV +ic +ic +ic +ic +AV +AV +AV +AV +AV +AV +ic +ic +ic +ic +ic +ic +ic +AV +AV +AV +ic +AV +AV +AV +AV +AV +AV +AV +ic +ic +ic +ic +ic +ic +ic +ic +ic +"} +(59,1,1) = {" +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +AV +ic +ic +ic +ic +AV +ic +ic +ic +ic +ic +AV +ic +ic +ic +AV +AV +AV +ic +ic +ic +ic +ic +ic +AV +ic +ic +ic +ic +ic +ic +ic +AV +AV +ic +ic +AV +ic +ic +ic +ic +ic +ic +ic +ic +ic +"} +(60,1,1) = {" +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +AV +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +AV +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +ic +"} diff --git a/_maps/map_files/RandomRuins/SpaceRuins/ussp.dmm b/_maps/map_files/RandomRuins/SpaceRuins/ussp.dmm index 3a657a7e054..1ba82c992a5 100644 --- a/_maps/map_files/RandomRuins/SpaceRuins/ussp.dmm +++ b/_maps/map_files/RandomRuins/SpaceRuins/ussp.dmm @@ -6735,7 +6735,7 @@ }) "nS" = ( /obj/structure/table/wood, -/obj/item/reagent_containers/food/snacks/beetsoup, +/obj/item/reagent_containers/food/snacks/soup/beetsoup, /turf/simulated/floor/plasteel{ icon_state = "bar" }, diff --git a/_maps/map_files/RandomZLevels/moonoutpost19.dmm b/_maps/map_files/RandomZLevels/moonoutpost19.dmm index acec675d0d1..cfe208e1557 100644 --- a/_maps/map_files/RandomZLevels/moonoutpost19.dmm +++ b/_maps/map_files/RandomZLevels/moonoutpost19.dmm @@ -5349,8 +5349,7 @@ /obj/effect/decal/cleanable/blood/oil{ color = "black" }, -/obj/item/storage/firstaid/regular{ - empty = 1; +/obj/item/storage/firstaid/regular/empty{ name = "First-Aid (empty)" }, /obj/item/healthanalyzer{ diff --git a/_maps/map_files/RandomZLevels/spacebattle.dmm b/_maps/map_files/RandomZLevels/spacebattle.dmm index 82ff15e5bd5..41249533907 100644 --- a/_maps/map_files/RandomZLevels/spacebattle.dmm +++ b/_maps/map_files/RandomZLevels/spacebattle.dmm @@ -666,7 +666,7 @@ /area/awaymission/spacebattle/cruiser) "cS" = ( /obj/structure/table/reinforced, -/obj/item/reagent_containers/food/snacks/stew, +/obj/item/reagent_containers/food/snacks/soup/stew, /turf/simulated/floor/plasteel{ icon_state = "cafeteria"; dir = 2 diff --git a/_maps/map_files/RandomZLevels/wildwest.dmm b/_maps/map_files/RandomZLevels/wildwest.dmm index 5ceeeac6383..50a7074a7a9 100644 --- a/_maps/map_files/RandomZLevels/wildwest.dmm +++ b/_maps/map_files/RandomZLevels/wildwest.dmm @@ -1217,7 +1217,7 @@ }, /area/awaymission/wwgov) "dy" = ( -/obj/item/reagent_containers/food/snacks/stew, +/obj/item/reagent_containers/food/snacks/soup/stew, /turf/simulated/floor/plasteel{ tag = "icon-stage_bleft"; icon_state = "stage_bleft" diff --git a/_maps/map_files/cyberiad/cyberiad.dmm b/_maps/map_files/cyberiad/cyberiad.dmm index 93e02389793..332f6a22e6c 100644 --- a/_maps/map_files/cyberiad/cyberiad.dmm +++ b/_maps/map_files/cyberiad/cyberiad.dmm @@ -43596,6 +43596,9 @@ /area/hallway/secondary/entry) "bLD" = ( /obj/structure/closet/secure_closet/reagents, +/obj/structure/disaster_counter/chemistry{ + pixel_x = -32 + }, /turf/simulated/floor/plasteel{ dir = 8; icon_state = "whiteyellow" @@ -44752,12 +44755,6 @@ /area/medical/reception) "bNA" = ( /obj/effect/decal/warning_stripes/northeast, -/obj/item/radio/intercom{ - frequency = 1459; - name = "station intercom (General)"; - pixel_x = -28; - pixel_y = 22 - }, /turf/simulated/floor/plasteel, /area/medical/chemistry) "bNB" = ( @@ -46980,16 +46977,13 @@ /area/assembly/robotics) "bRm" = ( /obj/structure/table, -/obj/item/storage/firstaid/regular{ - empty = 1; +/obj/item/storage/firstaid/regular/empty{ name = "First-Aid (empty)" }, -/obj/item/storage/firstaid/regular{ - empty = 1; +/obj/item/storage/firstaid/regular/empty{ name = "First-Aid (empty)" }, -/obj/item/storage/firstaid/regular{ - empty = 1; +/obj/item/storage/firstaid/regular/empty{ name = "First-Aid (empty)" }, /obj/item/healthanalyzer, @@ -60290,7 +60284,13 @@ pixel_y = 0 }, /obj/machinery/alarm{ - pixel_y = 25 + pixel_y = 31 + }, +/obj/machinery/driver_button{ + dir = 2; + id_tag = "toxinsdriver"; + pixel_y = 22; + range = 18 }, /turf/simulated/floor/plasteel, /area/toxins/launch{ @@ -61438,15 +61438,12 @@ name = "Toxins Launch Room" }) "cqq" = ( -/obj/machinery/driver_button{ - dir = 2; - id_tag = "toxinsdriver"; - pixel_y = 24; - range = 18 - }, /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 8 }, +/obj/structure/disaster_counter/toxins{ + pixel_y = 32 + }, /turf/simulated/floor/plasteel, /area/toxins/launch{ name = "Toxins Launch Room" @@ -68306,13 +68303,13 @@ }, /area/toxins/misc_lab) "cCl" = ( -/obj/machinery/newscaster{ - pixel_y = 34 - }, /obj/machinery/light{ dir = 1; on = 1 }, +/obj/structure/disaster_counter/scichem{ + pixel_y = 32 + }, /turf/simulated/floor/plasteel{ dir = 5; icon_state = "vault"; @@ -68334,6 +68331,9 @@ /area/toxins/misc_lab) "cCn" = ( /obj/machinery/chem_heater, +/obj/machinery/newscaster{ + pixel_y = 34 + }, /turf/simulated/floor/plasteel{ dir = 5; icon_state = "vault"; @@ -78694,6 +78694,9 @@ }, /obj/machinery/meter, /obj/machinery/light, +/obj/structure/disaster_counter/supermatter{ + pixel_y = -32 + }, /turf/simulated/floor/engine, /area/engine/engineering) "cVB" = ( diff --git a/code/__DEFINES/contracts.dm b/code/__DEFINES/contracts.dm deleted file mode 100644 index 26351cfbac2..00000000000 --- a/code/__DEFINES/contracts.dm +++ /dev/null @@ -1,58 +0,0 @@ -#define CONTRACT_POWER "Power" -#define CONTRACT_WEALTH "Wealth" -#define CONTRACT_PRESTIGE "Prestige" -#define CONTRACT_MAGIC "Magic" -#define CONTRACT_REVIVE "Revive" -#define CONTRACT_KNOWLEDGE "Knowledge" -#define CONTRACT_UNWILLING "Unwilling" -#define CONTRACT_FRIENDSHIP "Friendship" -// FIXME: Implement these -#define CONTRACT_ETALENT "Engineering Talent" -#define CONTRACT_CTALENT "Chemistry Talent" -#define CONTRACT_RETURNDEAD "Return Dead" -#define CONTRACT_AUGMENT "Cybernetic Augmentations" -#define CONTRACT_CANDY "Endless Candy" -#define CONTRACT_ECHANCE "An Extra Chance" -#define CONTRACT_ATECH "Advanced Technology" -#define CONTRACT_DEVILSMACHINE "Devil's Machinery" -#define CONTRACT_YOUTH "Eternal Youth" -#define CONTRACT_FOOD "Food" -#define CONTRACT_SPACE "Space Gear" -#define CONTRACT_CALAMITY "Calamity" - -#define BANE_SALT "salt" -#define BANE_LIGHT "light" -#define BANE_IRON "iron" -#define BANE_WHITECLOTHES "whiteclothes" -#define BANE_SILVER "silver" -#define BANE_HARVEST "harvest" -#define BANE_TOOLBOX "toolbox" - -#define OBLIGATION_FOOD "food" -#define OBLIGATION_FIDDLE "fiddle" -#define OBLIGATION_DANCEOFF "danceoff" -#define OBLIGATION_GREET "greet" -#define OBLIGATION_PRESENCEKNOWN "presenceknown" -#define OBLIGATION_SAYNAME "sayname" -#define OBLIGATION_ANNOUNCEKILL "announcekill" -#define OBLIGATION_ANSWERTONAME "answername" - -#define BAN_HURTWOMAN "hurtwoman" -#define BAN_HURTMAN "hurtman" -#define BAN_CHAPEL "chapel" -#define BAN_HURTPRIEST "hurtpriest" -#define BAN_AVOIDWATER "avoidwater" -#define BAN_STRIKEUNCONCIOUS "strikeunconcious" -#define BAN_HURTLIZARD "hurtlizard" -#define BAN_HURTANIMAL "hurtanimal" - -#define BANISH_WATER "water" -#define BANISH_COFFIN "coffin" -#define BANISH_FORMALDYHIDE "embalm" -#define BANISH_RUNES "runes" -#define BANISH_CANDLES "candles" -#define BANISH_DESTRUCTION "destruction" -#define BANISH_FUNERAL_GARB "funeral" - -#define LORE 1 -#define LAW 2 diff --git a/code/__DEFINES/dcs/signals.dm b/code/__DEFINES/dcs/signals.dm index 899f74069a6..2558653c510 100644 --- a/code/__DEFINES/dcs/signals.dm +++ b/code/__DEFINES/dcs/signals.dm @@ -156,6 +156,9 @@ #define COMSIG_ATOM_ORBIT_BEGIN "atom_orbit_begin" ///called when an atom stops orbiting another atom: (atom) #define COMSIG_ATOM_ORBIT_STOP "atom_orbit_stop" +///from base of atom/hitby(atom/movable/AM, skipcatch, hitpush, blocked, datum/thrownthing/throwingdatum) +#define COMSIG_ATOM_HITBY "atom_hitby" + ///////////////// ///from base of atom/attack_ghost(): (mob/dead/observer/ghost) #define COMSIG_ATOM_ATTACK_GHOST "atom_attack_ghost" @@ -493,7 +496,7 @@ // /obj/item/clothing signals -///from base of obj/item/clothing/shoes/proc/step_action(): () +///from [/mob/living/carbon/human/Move]: () #define COMSIG_SHOES_STEP_ACTION "shoes_step_action" ///from base of /obj/item/clothing/suit/space/proc/toggle_spacesuit(): (obj/item/clothing/suit/space/suit) #define COMSIG_SUIT_SPACE_TOGGLE "suit_space_toggle" diff --git a/code/__DEFINES/flags.dm b/code/__DEFINES/flags.dm index e77c140e78f..a68646224cf 100644 --- a/code/__DEFINES/flags.dm +++ b/code/__DEFINES/flags.dm @@ -110,22 +110,21 @@ #define NO_RUINS 4 //ITEM INVENTORY SLOT BITMASKS -#define SLOT_OCLOTHING 1 -#define SLOT_ICLOTHING 2 -#define SLOT_GLOVES 4 -#define SLOT_EYES 8 -#define SLOT_EARS 16 -#define SLOT_MASK 32 -#define SLOT_HEAD 64 -#define SLOT_FEET 128 -#define SLOT_ID 256 -#define SLOT_BELT 512 -#define SLOT_BACK 1024 -#define SLOT_POCKET 2048 //this is to allow items with a w_class of 3 or 4 to fit in pockets. -#define SLOT_DENYPOCKET 4096 //this is to deny items with a w_class of 2 or 1 to fit in pockets. -#define SLOT_TWOEARS 8192 -#define SLOT_PDA 16384 -#define SLOT_TIE 32768 +#define SLOT_OCLOTHING (1<<0) +#define SLOT_ICLOTHING (1<<1) +#define SLOT_GLOVES (1<<2) +#define SLOT_EYES (1<<3) +#define SLOT_EARS (1<<4) +#define SLOT_MASK (1<<5) +#define SLOT_HEAD (1<<6) +#define SLOT_FEET (1<<7) +#define SLOT_ID (1<<8) +#define SLOT_BELT (1<<9) +#define SLOT_BACK (1<<10) +#define SLOT_POCKET (1<<11) //this is to allow items with a w_class of 3 or 4 to fit in pockets. +#define SLOT_TWOEARS (1<<12) +#define SLOT_PDA (1<<13) +#define SLOT_TIE (1<<14) //ORGAN TYPE FLAGS #define AFFECT_ROBOTIC_ORGAN 1 diff --git a/code/__DEFINES/footstep.dm b/code/__DEFINES/footstep.dm new file mode 100644 index 00000000000..469549b8827 --- /dev/null +++ b/code/__DEFINES/footstep.dm @@ -0,0 +1,192 @@ +#define FOOTSTEP_WOOD "wood" +#define FOOTSTEP_FLOOR "floor" +#define FOOTSTEP_PLATING "plating" +#define FOOTSTEP_CARPET "carpet" +#define FOOTSTEP_SAND "sand" +#define FOOTSTEP_GRASS "grass" +#define FOOTSTEP_WATER "water" +#define FOOTSTEP_LAVA "lava" +#define FOOTSTEP_MEAT "meat" +//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" +//misc footstep sounds +#define FOOTSTEP_GENERIC_HEAVY "heavy" + +//footstep mob defines +#define FOOTSTEP_MOB_CLAW 1 +#define FOOTSTEP_MOB_BAREFOOT 2 +#define FOOTSTEP_MOB_HEAVY 3 +#define FOOTSTEP_MOB_SHOE 4 +#define FOOTSTEP_MOB_HUMAN 5 //Warning: Only works on /mob/living/carbon/human +#define FOOTSTEP_MOB_SLIME 6 +#define FOOTSTEP_OBJ_MACHINE 7 +#define FOOTSTEP_OBJ_ROBOT 8 + +/* + +id = list( +list(sounds), +base volume, +extra range addition +) + + +*/ + +GLOBAL_LIST_INIT(footstep, list( + FOOTSTEP_WOOD = list(list( + 'sound/effects/footstep/wood1.ogg', + 'sound/effects/footstep/wood2.ogg', + 'sound/effects/footstep/wood3.ogg', + 'sound/effects/footstep/wood4.ogg', + 'sound/effects/footstep/wood5.ogg'), 100, 0), + FOOTSTEP_FLOOR = list(list( + 'sound/effects/footstep/floor1.ogg', + 'sound/effects/footstep/floor2.ogg', + 'sound/effects/footstep/floor3.ogg', + 'sound/effects/footstep/floor4.ogg', + 'sound/effects/footstep/floor5.ogg'), 75, -1), + FOOTSTEP_PLATING = list(list( + 'sound/effects/footstep/plating1.ogg', + 'sound/effects/footstep/plating2.ogg', + 'sound/effects/footstep/plating3.ogg', + 'sound/effects/footstep/plating4.ogg', + 'sound/effects/footstep/plating5.ogg'), 100, 1), + FOOTSTEP_CARPET = list(list( + 'sound/effects/footstep/carpet1.ogg', + 'sound/effects/footstep/carpet2.ogg', + 'sound/effects/footstep/carpet3.ogg', + 'sound/effects/footstep/carpet4.ogg', + 'sound/effects/footstep/carpet5.ogg'), 75, -1), + FOOTSTEP_SAND = list(list( + 'sound/effects/footstep/asteroid1.ogg', + 'sound/effects/footstep/asteroid2.ogg', + 'sound/effects/footstep/asteroid3.ogg', + 'sound/effects/footstep/asteroid4.ogg', + 'sound/effects/footstep/asteroid5.ogg'), 75, 0), + FOOTSTEP_GRASS = list(list( + 'sound/effects/footstep/grass1.ogg', + 'sound/effects/footstep/grass2.ogg', + 'sound/effects/footstep/grass3.ogg', + 'sound/effects/footstep/grass4.ogg'), 75, 0), + FOOTSTEP_WATER = list(list( + 'sound/effects/footstep/water1.ogg', + 'sound/effects/footstep/water2.ogg', + 'sound/effects/footstep/water3.ogg', + 'sound/effects/footstep/water4.ogg'), 100, 1), + FOOTSTEP_LAVA = list(list( + 'sound/effects/footstep/lava1.ogg', + 'sound/effects/footstep/lava2.ogg', + 'sound/effects/footstep/lava3.ogg'), 100, 0), + FOOTSTEP_MEAT = list(list( + 'sound/effects/meatslap.ogg'), 100, 0) +)) +//bare footsteps lists +GLOBAL_LIST_INIT(barefootstep, list( + FOOTSTEP_WOOD_BAREFOOT = list(list( + 'sound/effects/footstep/woodbarefoot1.ogg', + 'sound/effects/footstep/woodbarefoot2.ogg', + 'sound/effects/footstep/woodbarefoot3.ogg', + 'sound/effects/footstep/woodbarefoot4.ogg', + 'sound/effects/footstep/woodbarefoot5.ogg'), 80, -1), + FOOTSTEP_HARD_BAREFOOT = list(list( + 'sound/effects/footstep/hardbarefoot1.ogg', + 'sound/effects/footstep/hardbarefoot2.ogg', + 'sound/effects/footstep/hardbarefoot3.ogg', + 'sound/effects/footstep/hardbarefoot4.ogg', + 'sound/effects/footstep/hardbarefoot5.ogg'), 80, -1), + FOOTSTEP_CARPET_BAREFOOT = list(list( + 'sound/effects/footstep/carpetbarefoot1.ogg', + 'sound/effects/footstep/carpetbarefoot2.ogg', + 'sound/effects/footstep/carpetbarefoot3.ogg', + 'sound/effects/footstep/carpetbarefoot4.ogg', + 'sound/effects/footstep/carpetbarefoot5.ogg'), 75, -2), + FOOTSTEP_SAND = list(list( + 'sound/effects/footstep/asteroid1.ogg', + 'sound/effects/footstep/asteroid2.ogg', + 'sound/effects/footstep/asteroid3.ogg', + 'sound/effects/footstep/asteroid4.ogg', + 'sound/effects/footstep/asteroid5.ogg'), 75, 0), + FOOTSTEP_GRASS = list(list( + 'sound/effects/footstep/grass1.ogg', + 'sound/effects/footstep/grass2.ogg', + 'sound/effects/footstep/grass3.ogg', + 'sound/effects/footstep/grass4.ogg'), 75, 0), + FOOTSTEP_WATER = list(list( + 'sound/effects/footstep/water1.ogg', + 'sound/effects/footstep/water2.ogg', + 'sound/effects/footstep/water3.ogg', + 'sound/effects/footstep/water4.ogg'), 100, 1), + FOOTSTEP_LAVA = list(list( + 'sound/effects/footstep/lava1.ogg', + 'sound/effects/footstep/lava2.ogg', + 'sound/effects/footstep/lava3.ogg'), 100, 0), + FOOTSTEP_MEAT = list(list( + 'sound/effects/meatslap.ogg'), 100, 0), +)) + +//claw footsteps lists +GLOBAL_LIST_INIT(clawfootstep, list( + FOOTSTEP_WOOD_CLAW = list(list( + 'sound/effects/footstep/woodclaw1.ogg', + 'sound/effects/footstep/woodclaw2.ogg', + 'sound/effects/footstep/woodclaw3.ogg', + 'sound/effects/footstep/woodclaw2.ogg', + 'sound/effects/footstep/woodclaw1.ogg'), 90, 1), + FOOTSTEP_HARD_CLAW = list(list( + 'sound/effects/footstep/hardclaw1.ogg', + 'sound/effects/footstep/hardclaw2.ogg', + 'sound/effects/footstep/hardclaw3.ogg', + 'sound/effects/footstep/hardclaw4.ogg', + 'sound/effects/footstep/hardclaw1.ogg'), 90, 1), + FOOTSTEP_CARPET_BAREFOOT = list(list( + 'sound/effects/footstep/carpetbarefoot1.ogg', + 'sound/effects/footstep/carpetbarefoot2.ogg', + 'sound/effects/footstep/carpetbarefoot3.ogg', + 'sound/effects/footstep/carpetbarefoot4.ogg', + 'sound/effects/footstep/carpetbarefoot5.ogg'), 75, -2), + FOOTSTEP_SAND = list(list( + 'sound/effects/footstep/asteroid1.ogg', + 'sound/effects/footstep/asteroid2.ogg', + 'sound/effects/footstep/asteroid3.ogg', + 'sound/effects/footstep/asteroid4.ogg', + 'sound/effects/footstep/asteroid5.ogg'), 75, 0), + FOOTSTEP_GRASS = list(list( + 'sound/effects/footstep/grass1.ogg', + 'sound/effects/footstep/grass2.ogg', + 'sound/effects/footstep/grass3.ogg', + 'sound/effects/footstep/grass4.ogg'), 75, 0), + FOOTSTEP_WATER = list(list( + 'sound/effects/footstep/water1.ogg', + 'sound/effects/footstep/water2.ogg', + 'sound/effects/footstep/water3.ogg', + 'sound/effects/footstep/water4.ogg'), 100, 1), + FOOTSTEP_LAVA = list(list( + 'sound/effects/footstep/lava1.ogg', + 'sound/effects/footstep/lava2.ogg', + 'sound/effects/footstep/lava3.ogg'), 100, 0), + FOOTSTEP_MEAT = list(list( + 'sound/effects/meatslap.ogg'), 100, 0), +)) + +//heavy footsteps list +GLOBAL_LIST_INIT(heavyfootstep, list( + FOOTSTEP_GENERIC_HEAVY = list(list( + 'sound/effects/footstep/heavy1.ogg', + 'sound/effects/footstep/heavy2.ogg'), 100, 2), + FOOTSTEP_WATER = list(list( + 'sound/effects/footstep/water1.ogg', + 'sound/effects/footstep/water2.ogg', + 'sound/effects/footstep/water3.ogg', + 'sound/effects/footstep/water4.ogg'), 100, 2), + FOOTSTEP_LAVA = list(list( + 'sound/effects/footstep/lava1.ogg', + 'sound/effects/footstep/lava2.ogg', + 'sound/effects/footstep/lava3.ogg'), 100, 0), + FOOTSTEP_MEAT = list(list( + 'sound/effects/meatslap.ogg'), 100, 0), +)) diff --git a/code/__DEFINES/genetics.dm b/code/__DEFINES/genetics.dm index 6f5aaaf2b93..f64022136ef 100644 --- a/code/__DEFINES/genetics.dm +++ b/code/__DEFINES/genetics.dm @@ -81,4 +81,4 @@ #define NO_INTORGANS "no_internal_organs" #define CAN_WINGDINGS "can_wingdings" #define NO_CLONESCAN "no_clone_scan" -#define IS_PLANT "is_plant" // Convert this to a biotype TODO +#define NO_HAIR "no_hair" diff --git a/code/__DEFINES/hud.dm b/code/__DEFINES/hud.dm index f4d5b9f5b1c..14e5fc674ce 100644 --- a/code/__DEFINES/hud.dm +++ b/code/__DEFINES/hud.dm @@ -53,9 +53,8 @@ #define ANTAG_HUD_VAMPIRE 16 #define ANTAG_HUD_ABDUCTOR 17 #define DATA_HUD_ABDUCTOR 18 -#define ANTAG_HUD_DEVIL 19 -#define ANTAG_HUD_EVENTMISC 20 -#define ANTAG_HUD_BLOB 21 +#define ANTAG_HUD_EVENTMISC 19 +#define ANTAG_HUD_BLOB 20 // Notification action types #define NOTIFY_JUMP "jump" diff --git a/code/__DEFINES/instruments.dm b/code/__DEFINES/instruments.dm index 64c77abc9fa..e2a46d08366 100644 --- a/code/__DEFINES/instruments.dm +++ b/code/__DEFINES/instruments.dm @@ -6,11 +6,6 @@ /// Max number of playing notes per instrument. #define CHANNELS_PER_INSTRUMENT 128 -/// Distance multiplier that makes us not be impacted by 3d sound as much. This is a multiplier so lower it is the closer we will pretend to be to people. -#define INSTRUMENT_DISTANCE_FALLOFF_BUFF 0.2 -/// How many tiles instruments have no falloff for -#define INSTRUMENT_DISTANCE_NO_FALLOFF 3 - /// Maximum length a note should ever go for #define INSTRUMENT_MAX_TOTAL_SUSTAIN (5 SECONDS) diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm index 1c6eff17b7b..e75eb49a02e 100644 --- a/code/__DEFINES/misc.dm +++ b/code/__DEFINES/misc.dm @@ -363,7 +363,7 @@ #define INVESTIGATE_BOMB "bombs" // The SQL version required by this version of the code -#define SQL_VERSION 20 +#define SQL_VERSION 22 // Vending machine stuff #define CAT_NORMAL 1 diff --git a/code/__DEFINES/mobs.dm b/code/__DEFINES/mobs.dm index 9c8a197d84f..a023063ca7f 100644 --- a/code/__DEFINES/mobs.dm +++ b/code/__DEFINES/mobs.dm @@ -13,6 +13,19 @@ #define DROPLIMB_BLUNT 1 #define DROPLIMB_BURN 2 +//Mob bio-types flags +#define MOB_ORGANIC (1 << 0) +#define MOB_MINERAL (1 << 1) +#define MOB_ROBOTIC (1 << 2) +#define MOB_UNDEAD (1 << 3) +#define MOB_HUMANOID (1 << 4) +#define MOB_BUG (1 << 5) +#define MOB_BEAST (1 << 6) // Not meant for human species, generally +#define MOB_EPIC (1 << 7) //megafauna +#define MOB_REPTILE (1 << 8) +#define MOB_SPIRIT (1 << 9) +#define MOB_PLANT (1 << 10) + #define AGE_MIN 17 //youngest a character can be #define AGE_MAX 85 //oldest a character can be @@ -263,3 +276,9 @@ #define HEARING_PROTECTION_MINOR 1 #define HEARING_PROTECTION_MAJOR 2 #define HEARING_PROTECTION_TOTAL 3 + +// Eye protection +#define FLASH_PROTECTION_SENSITIVE -1 +#define FLASH_PROTECTION_NONE 0 +#define FLASH_PROTECTION_FLASH 1 +#define FLASH_PROTECTION_WELDER 2 diff --git a/code/__DEFINES/preferences.dm b/code/__DEFINES/preferences.dm index 74bbe68d566..73e7b2227dc 100644 --- a/code/__DEFINES/preferences.dm +++ b/code/__DEFINES/preferences.dm @@ -52,8 +52,11 @@ #define PREFTOGGLE_2_RUNECHAT 64 #define PREFTOGGLE_2_DEATHMESSAGE 128 #define PREFTOGGLE_2_EMOTE_BUBBLE 256 +// Yes I know this being an "enable to disable" is misleading, but it avoids having to tweak all existing pref entries +#define PREFTOGGLE_2_REVERB_DISABLE 512 +#define PREFTOGGLE_2_FORCE_WHITE_RUNECHAT 1024 -#define TOGGLES_2_TOTAL 511 // 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 2047 // 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) diff --git a/code/__DEFINES/role_preferences.dm b/code/__DEFINES/role_preferences.dm index 8021fa4452d..85c15c1971c 100644 --- a/code/__DEFINES/role_preferences.dm +++ b/code/__DEFINES/role_preferences.dm @@ -26,7 +26,6 @@ #define ROLE_REVENANT "revenant" #define ROLE_HOG_GOD "hand of god: god" // We're prolly gonna port this one day or another #define ROLE_HOG_CULTIST "hand of god: cultist" -#define ROLE_DEVIL "devil" #define ROLE_RAIDER "vox raider" #define ROLE_TRADER "trader" #define ROLE_VAMPIRE "vampire" @@ -54,7 +53,6 @@ GLOBAL_LIST_INIT(special_roles, list( ROLE_CHANGELING = /datum/game_mode/changeling, // Changeling ROLE_BORER, // Cortical borer ROLE_CULTIST = /datum/game_mode/cult, // Cultist - ROLE_DEVIL = /datum/game_mode/devil/devil_agents, // Devil ROLE_GSPIDER, // Giant spider ROLE_GUARDIAN, // Guardian ROLE_MORPH, // Morph diff --git a/code/__DEFINES/rust_g.dm b/code/__DEFINES/rust_g.dm index c7b8bca1437..fe4b644096b 100644 --- a/code/__DEFINES/rust_g.dm +++ b/code/__DEFINES/rust_g.dm @@ -1,5 +1,10 @@ -/// Locator for the RUSTG DLL or SO depending on system type +#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") +#endif + +// Gets the version of RUSTG +/proc/rustg_get_version() return call(RUST_G, "get_version")() // Defines for internal job subsystem // #define RUSTG_JOB_NO_RESULTS_YET "NO RESULTS YET" @@ -10,6 +15,7 @@ #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) +// Noise related operations // #define rustg_noise_get_at_coordinates(seed, x, y) call(RUST_G, "noise_get_at_coordinates")(seed, x, y) // Git related operations // @@ -43,3 +49,6 @@ #define rustg_sql_connected(handle) call(RUST_G, "sql_connected")(handle) #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]") + +// RUSTG Version // +#define RUST_G_VERSION "0.4.5-P2" diff --git a/code/__DEFINES/sound.dm b/code/__DEFINES/sound.dm index e18cb4b3212..c3f7780b917 100644 --- a/code/__DEFINES/sound.dm +++ b/code/__DEFINES/sound.dm @@ -6,16 +6,34 @@ #define CHANNEL_HEARTBEAT 1020 //sound channel for heartbeats #define CHANNEL_BUZZ 1019 #define CHANNEL_AMBIENCE 1018 +#define CHANNEL_ENGINE 1017 // Engine ambient sounds + +#define USER_VOLUME(M, C) M?.client?.prefs.get_channel_volume(C) //THIS SHOULD ALWAYS BE THE LOWEST ONE! //KEEP IT UPDATED -#define CHANNEL_HIGHEST_AVAILABLE 1017 +#define CHANNEL_HIGHEST_AVAILABLE 1016 #define MAX_INSTRUMENT_CHANNELS (128 * 6) +///Default range of a sound. +#define SOUND_RANGE 17 +///default extra range for sounds considered to be quieter +#define SHORT_RANGE_SOUND_EXTRARANGE -9 +///The range deducted from sound range for things that are considered silent / sneaky +#define SILENCED_SOUND_EXTRARANGE -11 +///Percentage of sound's range where no falloff is applied +#define SOUND_DEFAULT_FALLOFF_DISTANCE 1 //For a normal sound this would be 1 tile of no falloff +///The default exponent of sound falloff +#define SOUND_FALLOFF_EXPONENT 6 + #define SOUND_MINIMUM_PRESSURE 10 -#define FALLOFF_SOUNDS 0.5 + +#define EQUIP_SOUND_VOLUME 30 +#define PICKUP_SOUND_VOLUME 15 +#define DROP_SOUND_VOLUME 20 +#define YEET_SOUND_VOLUME 90 //Ambience types diff --git a/code/__DEFINES/subsystems.dm b/code/__DEFINES/subsystems.dm index 397b171772d..ed76f6fd3ff 100644 --- a/code/__DEFINES/subsystems.dm +++ b/code/__DEFINES/subsystems.dm @@ -94,6 +94,7 @@ #define FIRE_PRIORITY_CLEANUP 10 #define FIRE_PRIORITY_TICKETS 10 #define FIRE_PRIORITY_RESEARCH 10 +#define FIRE_PRIORITY_AMBIENCE 10 #define FIRE_PRIORITY_GARBAGE 15 #define FIRE_PRIORITY_WET_FLOORS 20 #define FIRE_PRIORITY_AIR 20 diff --git a/code/__HELPERS/AnimationLibrary.dm b/code/__HELPERS/AnimationLibrary.dm index cc496a85b63..1f0c3dd9ab1 100644 --- a/code/__HELPERS/AnimationLibrary.dm +++ b/code/__HELPERS/AnimationLibrary.dm @@ -4,26 +4,26 @@ * The spin from being thrown will interrupt most of these animations as will grabs, account for that accordingly. */ -/proc/animate_fade_grayscale(var/atom/A, var/time = 5) +/proc/animate_fade_grayscale(atom/A, time = 5) if(!istype(A) && !istype(A, /client)) return A.color = null animate(A, color = MATRIX_GREYSCALE, time = time, easing = SINE_EASING) -/proc/animate_melt_pixel(var/atom/A) +/proc/animate_melt_pixel(atom/A) if(!istype(A)) return animate(A, pixel_y = 0, time = 50 - A.pixel_y, alpha = 175, easing = BOUNCE_EASING) animate(alpha = 0, easing = LINEAR_EASING) -/proc/animate_explode_pixel(var/atom/A) +/proc/animate_explode_pixel(atom/A) if(!istype(A)) return var/floatdegrees = rand(5, 20) var/side = pick(-1, 1) animate(A, pixel_x = rand(-64, 64), pixel_y = rand(-64, 64), transform = matrix(floatdegrees * (side == 1 ? 1:-1), MATRIX_ROTATE), time = 10, alpha = 0, easing = SINE_EASING) -/proc/animate_float(var/atom/A, var/loopnum = -1, floatspeed = 20, random_side = 1) +/proc/animate_float(atom/A, loopnum = -1, floatspeed = 20, random_side = 1) if(!istype(A)) return var/floatdegrees = rand(5, 20) @@ -35,7 +35,7 @@ animate(A, pixel_y = 32, transform = matrix(floatdegrees * (side == 1 ? 1:-1), MATRIX_ROTATE), time = floatspeed, loop = loopnum, easing = SINE_EASING) animate(pixel_y = 0, transform = matrix(floatdegrees * (side == 1 ? -1:1), MATRIX_ROTATE), time = floatspeed, loop = loopnum, easing = SINE_EASING) -/proc/animate_levitate(var/atom/A, var/loopnum = -1, floatspeed = 20, random_side = 1) +/proc/animate_levitate(atom/A, loopnum = -1, floatspeed = 20, random_side = 1) if(!istype(A)) return var/floatdegrees = rand(5, 20) @@ -47,7 +47,7 @@ animate(A, pixel_y = 8, transform = matrix(floatdegrees * (side == 1 ? 1:-1), MATRIX_ROTATE), time = floatspeed, loop = loopnum, easing = SINE_EASING) animate(pixel_y = 0, transform = null, time = floatspeed, loop = loopnum, easing = SINE_EASING) -/proc/animate_ghostly_presence(var/atom/A, var/loopnum = -1, floatspeed = 20, random_side = 1) +/proc/animate_ghostly_presence(atom/A, loopnum = -1, floatspeed = 20, random_side = 1) if(!istype(A)) return var/floatdegrees = rand(5, 20) @@ -59,7 +59,7 @@ animate(A, pixel_y = 8, transform = matrix(floatdegrees * (side == 1 ? 1:-1), MATRIX_ROTATE), time = floatspeed, loop = loopnum, easing = SINE_EASING) animate(pixel_y = 0, transform = matrix(floatdegrees * (side == 1 ? -1:1), MATRIX_ROTATE), time = floatspeed, loop = loopnum, easing = SINE_EASING) -/proc/animate_fading_leap_up(var/atom/A) +/proc/animate_fading_leap_up(atom/A) if(!istype(A)) return var/matrix/M = matrix() @@ -71,7 +71,7 @@ sleep(1) A.alpha = 0 -/proc/animate_fading_leap_down(var/atom/A) +/proc/animate_fading_leap_down(atom/A) if(!istype(A)) return var/matrix/M = matrix() @@ -84,7 +84,7 @@ sleep(1) animate(A, transform = M, pixel_z = 0, alpha = 255, time = 1, loop = 1, easing = LINEAR_EASING) -/proc/animate_shake(var/atom/A, var/amount = 5, var/x_severity = 2, var/y_severity = 2) +/proc/animate_shake(atom/A, amount = 5, x_severity = 2, y_severity = 2) // Wiggles the sprite around on its tile then returns it to normal if(!istype(A)) return @@ -101,7 +101,7 @@ spawn(amount) animate(A, transform = null, pixel_y = 0, pixel_x = 0,time = 1,loop = 1, easing = LINEAR_EASING) -/proc/animate_teleport(var/atom/A) +/proc/animate_teleport(atom/A) if(!istype(A)) return var/matrix/M = matrix(1, 3, MATRIX_SCALE) @@ -110,7 +110,7 @@ animate(transform = M, time = 5, color = "#1111ff", alpha = 0, easing = CIRCULAR_EASING) animate(transform = null, time = 5, color = "#ffffff", alpha = 255, pixel_y = 0, easing = ELASTIC_EASING) -/proc/animate_teleport_wiz(var/atom/A) +/proc/animate_teleport_wiz(atom/A) if(!istype(A)) return var/matrix/M = matrix(0, 4, MATRIX_SCALE) @@ -119,14 +119,14 @@ animate(time = 8, transform = M, alpha = 5) //Do nothing, essentially animate(transform = null, time = 5, color = "#ffffff", alpha = 255, pixel_y = 0, easing = ELASTIC_EASING) -/proc/animate_rainbow_glow_old(var/atom/A) +/proc/animate_rainbow_glow_old(atom/A) if(!istype(A)) return animate(A, color = "#FF0000", time = rand(5,10), loop = -1, easing = LINEAR_EASING) animate(color = "#00FF00", time = rand(5,10), loop = -1, easing = LINEAR_EASING) animate(color = "#0000FF", time = rand(5,10), loop = -1, easing = LINEAR_EASING) -/proc/animate_rainbow_glow(var/atom/A) +/proc/animate_rainbow_glow(atom/A) if(!istype(A)) return animate(A, color = "#FF0000", time = rand(5,10), loop = -1, easing = LINEAR_EASING) @@ -136,37 +136,37 @@ animate(color = "#0000FF", time = rand(5,10), loop = -1, easing = LINEAR_EASING) animate(color = "#FF00FF", time = rand(5,10), loop = -1, easing = LINEAR_EASING) -/proc/animate_fade_to_color_fill(var/atom/A, var/the_color, var/time) +/proc/animate_fade_to_color_fill(atom/A, the_color, time) if(!istype(A) || !the_color || !time) return animate(A, color = the_color, time = time, easing = LINEAR_EASING) -/proc/animate_flash_color_fill(var/atom/A, var/the_color, var/loops, var/time) +/proc/animate_flash_color_fill(atom/A, the_color, loops, time) if(!istype(A) || !the_color || !time || !loops) return animate(A, color = the_color, time = time, easing = LINEAR_EASING) animate(color = "#FFFFFF", time = 5, loop = loops, easing = LINEAR_EASING) -/proc/animate_flash_color_fill_inherit(var/atom/A, var/the_color, var/loops, var/time) +/proc/animate_flash_color_fill_inherit(atom/A, the_color, loops, time) if(!istype(A) || !the_color || !time || !loops) return var/color_old = A.color animate(A, color = the_color, time = time, loop = loops, easing = LINEAR_EASING) animate(A, color = color_old, time = time, loop = loops, easing = LINEAR_EASING) -/proc/animate_clownspell(var/atom/A) +/proc/animate_clownspell(atom/A) if(!istype(A)) return animate(A, transform = matrix(1.3, MATRIX_SCALE), time = 5, color = "#00ff00", easing = BACK_EASING) animate(transform = null, time = 5, color = "#ffffff", easing = ELASTIC_EASING) -/proc/animate_wiggle_then_reset(var/atom/A, var/loops = 5, var/speed = 5, var/x_var = 3, var/y_var = 3) +/proc/animate_wiggle_then_reset(atom/A, loops = 5, speed = 5, x_var = 3, y_var = 3) if(!istype(A) || !loops || !speed) return animate(A, pixel_x = rand(-x_var, x_var), pixel_y = rand(-y_var, y_var), time = speed * 2,loop = loops, easing = rand(2,7)) animate(pixel_x = 0, pixel_y = 0, time = speed, easing = rand(2,7)) -/proc/animate_spin(var/atom/A, var/dir = "L", var/T = 1, var/looping = -1) +/proc/animate_spin(atom/A, dir = "L", T = 1, looping = -1) if(!istype(A)) return @@ -180,7 +180,7 @@ animate(transform = matrix(M, turn, MATRIX_ROTATE | MATRIX_MODIFY), time = T, loop = looping) animate(transform = matrix(M, turn, MATRIX_ROTATE | MATRIX_MODIFY), time = T, loop = looping) -/proc/animate_shockwave(var/atom/A) +/proc/animate_shockwave(atom/A) if(!istype(A)) return var/punchstr = rand(10, 20) diff --git a/code/__HELPERS/_logging.dm b/code/__HELPERS/_logging.dm index 38176cd0981..34e7f3fda28 100644 --- a/code/__HELPERS/_logging.dm +++ b/code/__HELPERS/_logging.dm @@ -149,7 +149,7 @@ GLOBAL_PROTECT(log_end) // A logging proc that only outputs after setup is done, to // help devs test initialization stuff that happens a lot -/proc/log_after_setup(var/message) +/proc/log_after_setup(message) if(SSticker && SSticker.current_state > GAME_STATE_SETTING_UP) to_chat(world, "[message]") log_world(message) @@ -160,7 +160,7 @@ GLOBAL_PROTECT(log_end) // Helper procs for building detailed log lines -/proc/datum_info_line(var/datum/d) +/proc/datum_info_line(datum/d) if(!istype(d)) return if(!istype(d, /mob)) @@ -168,7 +168,7 @@ GLOBAL_PROTECT(log_end) var/mob/m = d return "[m] ([m.ckey]) ([m.type])" -/proc/atom_loc_line(var/atom/a) +/proc/atom_loc_line(atom/a) if(!istype(a)) return var/turf/t = get_turf(a) diff --git a/code/__HELPERS/game.dm b/code/__HELPERS/game.dm index d76ffc005a0..63e527b59f2 100644 --- a/code/__HELPERS/game.dm +++ b/code/__HELPERS/game.dm @@ -51,7 +51,7 @@ // Like view but bypasses luminosity check -/proc/hear(var/range, var/atom/source) +/proc/hear(range, atom/source) var/lum = source.luminosity source.luminosity = 6 @@ -145,7 +145,7 @@ // It will keep doing this until it checks every content possible. This will fix any problems with mobs, that are inside objects, // being unable to hear people due to being in a box within a bag. -/proc/recursive_mob_check(var/atom/O, var/list/L = list(), var/recursion_limit = 3, var/client_check = 1, var/sight_check = 1, var/include_radio = 1) +/proc/recursive_mob_check(atom/O, list/L = list(), recursion_limit = 3, client_check = 1, sight_check = 1, include_radio = 1) //GLOB.debug_mob += O.contents.len if(!recursion_limit) @@ -174,7 +174,7 @@ // The old system would loop through lists for a total of 5000 per function call, in an empty server. // This new system will loop at around 1000 in an empty server. -/proc/get_mobs_in_view(var/R, var/atom/source, var/include_clientless = FALSE) +/proc/get_mobs_in_view(R, atom/source, include_clientless = FALSE) // Returns a list of mobs in range of R from source. Used in radio and say code. var/turf/T = get_turf(source) @@ -200,7 +200,7 @@ return hear -/proc/get_mobs_in_radio_ranges(var/list/obj/item/radio/radios) +/proc/get_mobs_in_radio_ranges(list/obj/item/radio/radios) . = list() // Returns a list of mobs who can hear any of the radios given in @radios var/list/speaker_coverage = list() @@ -263,7 +263,7 @@ return 0 return 1 -/proc/isInSight(var/atom/A, var/atom/B) +/proc/isInSight(atom/A, atom/B) var/turf/Aturf = get_turf(A) var/turf/Bturf = get_turf(B) @@ -293,7 +293,7 @@ if(AM.Move(get_step(T, direction))) break -/proc/get_mob_by_key(var/key) +/proc/get_mob_by_key(key) for(var/mob/M in GLOB.mob_list) if(M.ckey == lowertext(key)) return M @@ -339,16 +339,6 @@ O.screen_loc = screen_loc return O -/proc/Show2Group4Delay(obj/O, list/group, delay=0) - if(!isobj(O)) return - if(!group) group = GLOB.clients - for(var/client/C in group) - C.screen += O - if(delay) - spawn(delay) - for(var/client/C in group) - C.screen -= O - /proc/remove_images_from_clients(image/I, list/show_to) for(var/client/C in show_to) C.images -= I @@ -402,7 +392,7 @@ src.dest_x = dest_x src.dest_y = dest_y -/proc/projectile_trajectory(var/src_x, var/src_y, var/rotation, var/angle, var/power) +/proc/projectile_trajectory(src_x, src_y, rotation, angle, power) // returns the destination (Vx,y) that a projectile shot at [src_x], [src_y], with an angle of [angle], // rotated at [rotation] and with the power of [power] @@ -420,7 +410,7 @@ return new /datum/projectile_data(src_x, src_y, time, distance, power_x, power_y, dest_x, dest_y) -/proc/mobs_in_area(var/area/the_area, var/client_needed=0, var/moblist=GLOB.mob_list) +/proc/mobs_in_area(area/the_area, client_needed=0, moblist=GLOB.mob_list) var/list/mobs_found[0] var/area/our_area = get_area(the_area) for(var/mob/M in moblist) @@ -431,7 +421,7 @@ mobs_found += M return mobs_found -/proc/alone_in_area(var/area/the_area, var/mob/must_be_alone, var/check_type = /mob/living/carbon) +/proc/alone_in_area(area/the_area, mob/must_be_alone, check_type = /mob/living/carbon) var/area/our_area = get_area(the_area) for(var/C in GLOB.alive_mob_list) if(!istype(C, check_type)) diff --git a/code/__HELPERS/global_lists.dm b/code/__HELPERS/global_lists.dm index ee1530df81b..282ad53cd06 100644 --- a/code/__HELPERS/global_lists.dm +++ b/code/__HELPERS/global_lists.dm @@ -84,13 +84,13 @@ continue if(!use_name) - error("Loadout - Missing display name: [G]") + stack_trace("Loadout - Missing display name: [G]") continue if(!initial(G.cost)) - error("Loadout - Missing cost: [G]") + stack_trace("Loadout - Missing cost: [G]") continue if(!initial(G.path)) - error("Loadout - Missing path definition: [G]") + stack_trace("Loadout - Missing path definition: [G]") continue if(!GLOB.loadout_categories[use_category]) diff --git a/code/__HELPERS/heap.dm b/code/__HELPERS/heap.dm index 50a11e71abb..c9ad037755f 100644 --- a/code/__HELPERS/heap.dm +++ b/code/__HELPERS/heap.dm @@ -33,7 +33,7 @@ Sink(1) //Get a node up to its right position in the heap -/datum/heap/proc/Swim(var/index) +/datum/heap/proc/Swim(index) var/parent = round(index * 0.5) while(parent > 0 && (call(cmp)(L[index], L[parent]) > 0)) @@ -42,7 +42,7 @@ parent = round(index * 0.5) //Get a node down to its right position in the heap -/datum/heap/proc/Sink(var/index) +/datum/heap/proc/Sink(index) var/g_child = GetGreaterChild(index) while(g_child > 0 && (call(cmp)(L[index], L[g_child]) < 0)) @@ -52,7 +52,7 @@ //Returns the greater (relative to the comparison proc) of a node children //or 0 if there's no child -/datum/heap/proc/GetGreaterChild(var/index) +/datum/heap/proc/GetGreaterChild(index) if(index * 2 > L.len) return 0 diff --git a/code/__HELPERS/icon_smoothing.dm b/code/__HELPERS/icon_smoothing.dm index caa8291b4bb..90873b6309a 100644 --- a/code/__HELPERS/icon_smoothing.dm +++ b/code/__HELPERS/icon_smoothing.dm @@ -289,7 +289,7 @@ //Icon smoothing helpers -/proc/smooth_zlevel(var/zlevel, now = FALSE) +/proc/smooth_zlevel(zlevel, now = FALSE) var/list/away_turfs = block(locate(1, 1, zlevel), locate(world.maxx, world.maxy, zlevel)) for(var/V in away_turfs) var/turf/T = V diff --git a/code/__HELPERS/icons.dm b/code/__HELPERS/icons.dm index ef0f47b2f9c..78d9fb407bf 100644 --- a/code/__HELPERS/icons.dm +++ b/code/__HELPERS/icons.dm @@ -894,7 +894,7 @@ The _flatIcons list is a cache for generated icon files. composite.Blend(icon(I.icon, I.icon_state, I.dir, 1), ICON_OVERLAY) return composite -/proc/adjust_brightness(var/color, var/value) +/proc/adjust_brightness(color, value) if(!color) return "#FFFFFF" if(!value) return color @@ -904,7 +904,7 @@ The _flatIcons list is a cache for generated icon files. RGB[3] = clamp(RGB[3]+value,0,255) return rgb(RGB[1],RGB[2],RGB[3]) -/proc/sort_atoms_by_layer(var/list/atoms) +/proc/sort_atoms_by_layer(list/atoms) // Comb sort icons based on levels var/list/result = atoms.Copy() var/gap = result.len @@ -925,7 +925,7 @@ The _flatIcons list is a cache for generated icon files. //Interface for using DrawBox() to draw 1 pixel on a coordinate. //Returns the same icon specifed in the argument, but with the pixel drawn -/proc/DrawPixel(var/icon/I,var/colour,var/drawX,var/drawY) +/proc/DrawPixel(icon/I, colour, drawX, drawY) if(!I) return 0 var/Iwidth = I.Width() @@ -938,7 +938,7 @@ The _flatIcons list is a cache for generated icon files. return I //Interface for easy drawing of one pixel on an atom. -/atom/proc/DrawPixelOn(var/colour, var/drawX, var/drawY) +/atom/proc/DrawPixelOn(colour, drawX, drawY) var/icon/I = new(icon) var/icon/J = DrawPixel(I, colour, drawX, drawY) if(J) //Only set the icon if it succeeded, the icon without the pixel is 1000x better than a black square. @@ -961,7 +961,7 @@ The _flatIcons list is a cache for generated icon files. //Imagine removing pixels from the main icon that are covered by pixels from the mask icon. //Standard behaviour is to cut pixels from the main icon that are covered by pixels from the mask icon unless passed mask_ready, see below. -/proc/get_icon_difference(var/icon/main, var/icon/mask, var/mask_ready) +/proc/get_icon_difference(icon/main, icon/mask, mask_ready) /*You should skip prep if the mask is already sprited properly. This significantly improves performance by eliminating most of the realtime icon work. e.g. A 'ready' mask is a mask where the part you want cut out is missing (no pixels, 0 alpha) from the sprite, and everything else is solid white.*/ diff --git a/code/__HELPERS/lists.dm b/code/__HELPERS/lists.dm index aab920f55fd..bf0d7ab2b61 100644 --- a/code/__HELPERS/lists.dm +++ b/code/__HELPERS/lists.dm @@ -39,7 +39,7 @@ //Returns a list in plain english as a string -/proc/english_list(var/list/input, nothing_text = "nothing", and_text = " and ", comma_text = ", ", final_comma_text = "" ) +/proc/english_list(list/input, nothing_text = "nothing", and_text = " and ", comma_text = ", ", final_comma_text = "" ) var/total = input.len if(!total) return "[nothing_text]" @@ -60,7 +60,7 @@ return "[output][and_text][input[index]]" //Returns list element or null. Should prevent "index out of bounds" error. -/proc/listgetindex(var/list/list,index) +/proc/listgetindex(list/list, index) if(istype(list) && list.len) if(isnum(index)) if(InRange(index,1,list.len)) @@ -158,7 +158,7 @@ * If skiprep = 1, repeated elements are treated as one. * If either of arguments is not a list, returns null */ -/proc/difflist(var/list/first, var/list/second, var/skiprep=0) +/proc/difflist(list/first, list/second, skiprep=0) if(!islist(first) || !islist(second)) return var/list/result = new @@ -176,7 +176,7 @@ * If skipref = 1, repeated elements are treated as one. * If either of arguments is not a list, returns null */ -/proc/uniquemergelist(var/list/first, var/list/second, var/skiprep=0) +/proc/uniquemergelist(list/first, list/second, skiprep=0) if(!islist(first) || !islist(second)) return var/list/result = new @@ -236,7 +236,7 @@ return output //Randomize: Return the list in a random order -/proc/shuffle(var/list/L) +/proc/shuffle(list/L) if(!L) return L = L.Copy() @@ -247,20 +247,20 @@ return L //Return a list with no duplicate entries -/proc/uniquelist(var/list/L) +/proc/uniquelist(list/L) . = list() for(var/i in L) . |= i //Mergesort: divides up the list into halves to begin the sort -/proc/sortKey(var/list/client/L, var/order = 1) +/proc/sortKey(list/client/L, order = 1) if(isnull(L) || L.len < 2) return L var/middle = L.len / 2 + 1 return mergeKey(sortKey(L.Copy(0,middle)), sortKey(L.Copy(middle)), order) //Mergsort: does the actual sorting and returns the results back to sortAtom -/proc/mergeKey(var/list/client/L, var/list/client/R, var/order = 1) +/proc/mergeKey(list/client/L, list/client/R, order = 1) var/Li=1 var/Ri=1 var/list/result = new() @@ -277,7 +277,7 @@ return (result + R.Copy(Ri, 0)) //Mergesort: divides up the list into halves to begin the sort -/proc/sortAtom(var/list/atom/L, var/order = 1) +/proc/sortAtom(list/atom/L, order = 1) listclearnulls(L) if(isnull(L) || L.len < 2) return L @@ -285,7 +285,7 @@ return mergeAtoms(sortAtom(L.Copy(0,middle)), sortAtom(L.Copy(middle)), order) //Mergsort: does the actual sorting and returns the results back to sortAtom -/proc/mergeAtoms(var/list/atom/L, var/list/atom/R, var/order = 1) +/proc/mergeAtoms(list/atom/L, list/atom/R, order = 1) if(!L || !R) return 0 var/Li=1 var/Ri=1 @@ -306,7 +306,7 @@ //Mergesort: Specifically for record datums in a list. -/proc/sortRecord(var/list/datum/data/record/L, var/field = "name", var/order = 1) +/proc/sortRecord(list/datum/data/record/L, field = "name", order = 1) if(isnull(L)) return list() if(L.len < 2) @@ -315,7 +315,7 @@ return mergeRecordLists(sortRecord(L.Copy(0, middle), field, order), sortRecord(L.Copy(middle), field, order), field, order) //Mergsort: does the actual sorting and returns the results back to sortRecord -/proc/mergeRecordLists(var/list/datum/data/record/L, var/list/datum/data/record/R, var/field = "name", var/order = 1) +/proc/mergeRecordLists(list/datum/data/record/L, list/datum/data/record/R, field = "name", order = 1) var/Li=1 var/Ri=1 var/list/result = new() @@ -342,20 +342,20 @@ //Mergesort: any value in a list -/proc/sortList(var/list/L) +/proc/sortList(list/L) if(L.len < 2) return L var/middle = L.len / 2 + 1 // Copy is first,second-1 return mergeLists(sortList(L.Copy(0,middle)), sortList(L.Copy(middle))) //second parameter null = to end of list //Mergsorge: uses sortAssoc() but uses the var's name specifically. This should probably be using mergeAtom() instead -/proc/sortNames(var/list/L) +/proc/sortNames(list/L) var/list/Q = new() for(var/atom/x in L) Q[x.name] = x return sortAssoc(Q) -/proc/mergeLists(var/list/L, var/list/R) +/proc/mergeLists(list/L, list/R) var/Li=1 var/Ri=1 var/list/result = new() @@ -371,13 +371,13 @@ // List of lists, sorts by element[key] - for things like crew monitoring computer sorting records by name. -/proc/sortByKey(var/list/L, var/key) +/proc/sortByKey(list/L, key) if(L.len < 2) return L var/middle = L.len / 2 + 1 return mergeKeyedLists(sortByKey(L.Copy(0, middle), key), sortByKey(L.Copy(middle), key), key) -/proc/mergeKeyedLists(var/list/L, var/list/R, var/key) +/proc/mergeKeyedLists(list/L, list/R, key) var/Li=1 var/Ri=1 var/list/result = new() @@ -396,13 +396,13 @@ //Mergesort: any value in a list, preserves key=value structure -/proc/sortAssoc(var/list/L) +/proc/sortAssoc(list/L) if(L.len < 2) return L var/middle = L.len / 2 + 1 // Copy is first,second-1 return mergeAssoc(sortAssoc(L.Copy(0,middle)), sortAssoc(L.Copy(middle))) //second parameter null = to end of list -/proc/mergeAssoc(var/list/L, var/list/R) +/proc/mergeAssoc(list/L, list/R) var/Li=1 var/Ri=1 var/list/result = new() @@ -434,7 +434,7 @@ return r // Returns the key based on the index -/proc/get_key_by_index(var/list/L, var/index) +/proc/get_key_by_index(list/L, index) var/i = 1 for(var/key in L) if(index == i) @@ -442,7 +442,7 @@ i++ return null -/proc/count_by_type(var/list/L, type) +/proc/count_by_type(list/L, type) var/i = 0 for(var/T in L) if(istype(T, type)) @@ -450,7 +450,7 @@ return i //Don't use this on lists larger than half a dozen or so -/proc/insertion_sort_numeric_list_ascending(var/list/L) +/proc/insertion_sort_numeric_list_ascending(list/L) //log_world("ascending len input: [L.len]") var/list/out = list(pop(L)) for(var/entry in L) @@ -467,7 +467,7 @@ //log_world(" output: [out.len]") return out -/proc/insertion_sort_numeric_list_descending(var/list/L) +/proc/insertion_sort_numeric_list_descending(list/L) //log_world("descending len input: [L.len]") var/list/out = insertion_sort_numeric_list_ascending(L) //log_world(" output: [out.len]") @@ -483,13 +483,13 @@ if(islist(.[i])) .[i] = .(.[i]) -/proc/dd_sortedObjectList(var/list/L, var/cache=list()) +/proc/dd_sortedObjectList(list/L, list/cache = list()) if(L.len < 2) return L var/middle = L.len / 2 + 1 // Copy is first,second-1 return dd_mergeObjectList(dd_sortedObjectList(L.Copy(0,middle), cache), dd_sortedObjectList(L.Copy(middle), cache), cache) //second parameter null = to end of list -/proc/dd_mergeObjectList(var/list/L, var/list/R, var/list/cache) +/proc/dd_mergeObjectList(list/L, list/R, list/cache) var/Li=1 var/Ri=1 var/list/result = new() @@ -514,7 +514,7 @@ return (result + R.Copy(Ri, 0)) // Insert an object into a sorted list, preserving sortedness -/proc/dd_insertObjectList(var/list/L, var/O) +/proc/dd_insertObjectList(list/L, O) var/min = 1 var/max = L.len var/Oval = O:dd_SortValue() @@ -658,7 +658,7 @@ proc/dd_sortedObjectList(list/incoming) var/case_sensitive = 1 return dd_sortedtextlist(incoming, case_sensitive) -/proc/subtypesof(var/path) //Returns a list containing all subtypes of the given path, but not the given path itself. +/proc/subtypesof(path) //Returns a list containing all subtypes of the given path, but not the given path itself. if(!path || !ispath(path)) CRASH("Invalid path, failed to fetch subtypes of \"[path]\".") return (typesof(path) - path) diff --git a/code/__HELPERS/mobs.dm b/code/__HELPERS/mobs.dm index 410f66b3056..e836824ad3a 100644 --- a/code/__HELPERS/mobs.dm +++ b/code/__HELPERS/mobs.dm @@ -1,4 +1,4 @@ -/proc/GetOppositeDir(var/dir) +/proc/GetOppositeDir(dir) switch(dir) if(NORTH) return SOUTH if(SOUTH) return NORTH @@ -46,7 +46,7 @@ return pick(valid_picks) -/proc/random_hair_style(var/gender, species = "Human", var/datum/robolimb/robohead) +/proc/random_hair_style(gender, species = "Human", datum/robolimb/robohead) var/h_style = "Bald" var/list/valid_hairstyles = list() for(var/hairstyle in GLOB.hair_styles_public_list) @@ -75,7 +75,7 @@ return h_style -/proc/random_facial_hair_style(var/gender, species = "Human", var/datum/robolimb/robohead) +/proc/random_facial_hair_style(gender, species = "Human", datum/robolimb/robohead) var/f_style = "Shaved" var/list/valid_facial_hairstyles = list() for(var/facialhairstyle in GLOB.facial_hair_styles_list) @@ -119,7 +119,7 @@ return ha_style -/proc/random_marking_style(var/location = "body", species = "Human", var/datum/robolimb/robohead, var/body_accessory, var/alt_head) +/proc/random_marking_style(location = "body", species = "Human", datum/robolimb/robohead, body_accessory, alt_head) var/m_style = "None" var/list/valid_markings = list() for(var/marking in GLOB.marking_styles_list) @@ -570,7 +570,7 @@ GLOBAL_LIST_INIT(do_after_once_tracker, list()) log_admin("[key_name(usr)] attempted to use a mouse macro: [verbused] [params]") message_admins("[key_name_admin(usr)] attempted to use a mouse macro: [verbused] [html_encode(params)]") if(client.next_mouse_macro_warning < world.time) // Warn occasionally - usr << 'sound/misc/sadtrombone.ogg' + SEND_SOUND(usr, sound('sound/misc/sadtrombone.ogg')) client.next_mouse_macro_warning = world.time + 600 /mob/verb/ClickSubstitute(params as command_text) set hidden = 1 diff --git a/code/__HELPERS/text.dm b/code/__HELPERS/text.dm index d6c95256585..970f90684bb 100644 --- a/code/__HELPERS/text.dm +++ b/code/__HELPERS/text.dm @@ -22,7 +22,7 @@ return html_encode(txt) //Simply removes < and > and limits the length of the message -/proc/strip_html_simple(var/t,var/limit=MAX_MESSAGE_LEN) +/proc/strip_html_simple(t, limit=MAX_MESSAGE_LEN) var/list/strip_chars = list("<",">") t = copytext(t,1,limit) for(var/char in strip_chars) @@ -33,13 +33,13 @@ return t //Removes a few problematic characters -/proc/sanitize_simple(var/t,var/list/repl_chars = list("\n"="#","\t"="#")) +/proc/sanitize_simple(t, list/repl_chars = list("\n"="#","\t"="#")) for(var/char in repl_chars) t = replacetext(t, char, repl_chars[char]) return t //Runs byond's sanitization proc along-side sanitize_simple -/proc/sanitize(var/t,var/list/repl_chars = null) +/proc/sanitize(t, list/repl_chars = null) return html_encode(sanitize_simple(t,repl_chars)) // Gut ANYTHING that isnt alphanumeric, or brackets @@ -54,7 +54,7 @@ //Runs sanitize and strip_html_simple //I believe strip_html_simple() is required to run first to prevent '<' from displaying as '<' after sanitize() calls byond's html_encode() -/proc/strip_html(var/t,var/limit=MAX_MESSAGE_LEN) +/proc/strip_html(t, limit=MAX_MESSAGE_LEN) return copytext((sanitize(strip_html_simple(t))),1,limit) // Used to get a properly sanitized multiline input, of max_length @@ -67,12 +67,12 @@ //Runs byond's sanitization proc along-side strip_html_simple //I believe strip_html_simple() is required to run first to prevent '<' from displaying as '<' that html_encode() would cause -/proc/adminscrub(var/t,var/limit=MAX_MESSAGE_LEN) +/proc/adminscrub(t, limit=MAX_MESSAGE_LEN) return copytext((html_encode(strip_html_simple(t))),1,limit) //Returns null if there is any bad text in the string -/proc/reject_bad_text(var/text, var/max_length=512) +/proc/reject_bad_text(text, max_length=512) if(length(text) > max_length) return //message too long var/non_whitespace = 0 for(var/i=1, i<=length(text), i++) @@ -106,7 +106,7 @@ return msg //Filters out undesirable characters from names -/proc/reject_bad_name(var/t_in, var/allow_numbers=0, var/max_length=MAX_NAME_LEN) +/proc/reject_bad_name(t_in, allow_numbers=0, max_length=MAX_NAME_LEN) // Decode so that names with characters like < are still rejected t_in = html_decode(t_in) if(!t_in || length(t_in) > max_length) @@ -174,7 +174,7 @@ //checks text for html tags //if tag is not in whitelist (var/list/paper_tag_whitelist in global.dm) //relpaces < with < -/proc/checkhtml(var/t) +/proc/checkhtml(t) t = sanitize_simple(t, list("&#"=".")) var/p = findtext(t,"<",1) while(p) //going through all the tags @@ -226,7 +226,7 @@ * Text modification */ // See bygex.dm -/proc/replace_characters(var/t,var/list/repl_chars) +/proc/replace_characters(t, list/repl_chars) for(var/char in repl_chars) t = replacetext(t, char, repl_chars[char]) return t @@ -277,7 +277,7 @@ return trim_left(trim_right(text)) //Returns a string with the first element of the string capitalized. -/proc/capitalize(var/t as text) +/proc/capitalize(t as text) return uppertext(copytext(t, 1, 2)) + copytext(t, 2) //Centers text by adding spaces to either side of the string. @@ -305,7 +305,7 @@ return copytext(message, 1, length + 1) -/proc/stringmerge(var/text,var/compare,replace = "*") +/proc/stringmerge(text, compare,replace = "*") //This proc fills in all spaces with the "replace" var (* by default) with whatever //is in the other string at the same spot (assuming it is not a replace char). //This is used for fingerprints @@ -326,7 +326,7 @@ return 0 return newtext -/proc/stringpercent(var/text,character = "*") +/proc/stringpercent(text, character = "*") //This proc returns the number of chars of the string that is the character //This is used for detective work to determine fingerprint completion. if(!text || !character) @@ -338,7 +338,7 @@ count++ return count -/proc/reverse_text(var/text = "") +/proc/reverse_text(text = "") var/new_text = "" for(var/i = length(text); i > 0; i--) new_text += copytext(text, i, i+1) @@ -347,7 +347,7 @@ //This proc strips html properly, but it's not lazy like the other procs. //This means that it doesn't just remove < and > and call it a day. //Also limit the size of the input, if specified. -/proc/strip_html_properly(var/input, var/max_length = MAX_MESSAGE_LEN, allow_lines = 0) +/proc/strip_html_properly(input, max_length = MAX_MESSAGE_LEN, allow_lines = 0) if(!input) return var/opentag = 1 //These store the position of < and > respectively. @@ -371,12 +371,12 @@ input = copytext(input,1,max_length) return sanitize(input, allow_lines ? list("\t" = " ") : list("\n" = " ", "\t" = " ")) -/proc/trim_strip_html_properly(var/input, var/max_length = MAX_MESSAGE_LEN, allow_lines = 0) +/proc/trim_strip_html_properly(input, max_length = MAX_MESSAGE_LEN, allow_lines = 0) return trim(strip_html_properly(input, max_length, allow_lines)) //Used in preferences' SetFlavorText and human's set_flavor verb //Previews a string of len or less length -/proc/TextPreview(var/string,var/len=40) +/proc/TextPreview(string, len=40) if(length(string) <= len) if(!length(string)) return "\[...\]" @@ -386,14 +386,14 @@ return "[copytext_preserve_html(string, 1, 37)]..." //alternative copytext() for encoded text, doesn't break html entities (" and other) -/proc/copytext_preserve_html(var/text, var/first, var/last) +/proc/copytext_preserve_html(text, first, last) return html_encode(copytext(html_decode(text), first, last)) //Run sanitize(), but remove <, >, " first to prevent displaying them as > < &34; in some places, after html_encode(). //Best used for sanitize object names, window titles. //If you have a problem with sanitize() in chat, when quotes and >, < are displayed as html entites - //this is a problem of double-encode(when & becomes &), use sanitize() with encode=0, but not the sanitizeSafe()! -/proc/sanitizeSafe(var/input, var/max_length = MAX_MESSAGE_LEN, var/encode = 1, var/trim = 1, var/extra = 1) +/proc/sanitizeSafe(input, max_length = MAX_MESSAGE_LEN, encode = 1, trim = 1, extra = 1) return sanitize(replace_characters(input, list(">"=" ","<"=" ", "\""="'")), max_length, encode, trim, extra) diff --git a/code/__HELPERS/time.dm b/code/__HELPERS/time.dm index a5524d7c719..5f6e01e93ed 100644 --- a/code/__HELPERS/time.dm +++ b/code/__HELPERS/time.dm @@ -62,7 +62,7 @@ return time2text(station_time(time, TRUE), format) /* Returns 1 if it is the selected month and day */ -/proc/isDay(var/month, var/day) +/proc/isDay(month, day) if(isnum(month) && isnum(day)) var/MM = text2num(time2text(world.timeofday, "MM")) // get the current month var/DD = text2num(time2text(world.timeofday, "DD")) // get the current day @@ -94,13 +94,13 @@ return GLOB.month_names.Find(number) //Take a value in seconds and returns a string of minutes and seconds in the format X minute(s) and X seconds. -/proc/seconds_to_time(var/seconds as num) +/proc/seconds_to_time(seconds as num) var/numSeconds = seconds % 60 var/numMinutes = (seconds - numSeconds) / 60 return "[numMinutes] [numMinutes > 1 ? "minutes" : "minute"] and [numSeconds] seconds" //Take a value in seconds and makes it display like a clock -/proc/seconds_to_clock(var/seconds as num) +/proc/seconds_to_clock(seconds as num) return "[add_zero(num2text((seconds / 60) % 60), 2)]:[add_zero(num2text(seconds % 60), 2)]" //Takes a value of time in deciseconds. diff --git a/code/__HELPERS/traits.dm b/code/__HELPERS/traits.dm index ef22a8101a2..74760fd22b4 100644 --- a/code/__HELPERS/traits.dm +++ b/code/__HELPERS/traits.dm @@ -138,6 +138,7 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai #define TRAIT_BLOODCRAWL "bloodcrawl" #define TRAIT_BLOODCRAWL_EAT "bloodcrawl_eat" #define TRAIT_DWARF "dwarf" +#define TRAIT_SILENT_FOOTSTEPS "silent_footsteps" //makes your footsteps completely silent #define TRAIT_COMIC_SANS "comic_sans" #define TRAIT_NOFINGERPRINTS "no_fingerprints" @@ -151,6 +152,9 @@ Remember to update _globalvars/traits.dm if you're adding/removing/renaming trai #define TRAIT_NOEXAMINE "no_examine" #define TRAIT_NOPAIN "no_pain" +/// Blowing kisses actually does damage to the victim +#define TRAIT_KISS_OF_DEATH "kiss_of_death" + // // common trait sources #define TRAIT_GENERIC "generic" diff --git a/code/__HELPERS/type2type.dm b/code/__HELPERS/type2type.dm index bf44f6a4bc9..b962907d043 100644 --- a/code/__HELPERS/type2type.dm +++ b/code/__HELPERS/type2type.dm @@ -146,7 +146,7 @@ return //Converts an angle (degrees) into an ss13 direction -/proc/angle2dir(var/degree) +/proc/angle2dir(degree) degree = ((degree+22.5)%365) if(degree < 45) return NORTH if(degree < 90) return NORTHEAST @@ -170,7 +170,7 @@ //returns the north-zero clockwise angle in degrees, given a direction -/proc/dir2angle(var/D) +/proc/dir2angle(D) switch(D) if(NORTH) return 0 if(SOUTH) return 180 @@ -183,7 +183,7 @@ else return null //Returns the angle in english -/proc/angle2text(var/degree) +/proc/angle2text(degree) return dir2text(angle2dir(degree)) //Converts a blend_mode constant to one acceptable to icon.Blend() @@ -281,7 +281,7 @@ if(3*hue < 2) return (a+(b-a)*((2/3)-hue)*6) return a -/proc/num2septext(var/theNum, var/sigFig = 7,var/sep=",") // default sigFig (1,000,000) +/proc/num2septext(theNum, sigFig = 7, sep=",") // default sigFig (1,000,000) var/finalNum = num2text(theNum, sigFig) // Start from the end, or from the decimal point @@ -323,7 +323,7 @@ . = max(0, min(255, 138.5177312231 * log(temp - 10) - 305.0447927307)) //Argument: Give this a space-separated string consisting of 6 numbers. Returns null if you don't -/proc/text2matrix(var/matrixtext) +/proc/text2matrix(matrixtext) var/list/matrixtext_list = splittext(matrixtext, " ") var/list/matrix_list = list() for(var/item in matrixtext_list) @@ -351,7 +351,7 @@ //The string is well, obviously the string being checked //The datum is used as a source for var names, to check validity //Otherwise every single word could technically be a variable! -/proc/string2listofvars(var/t_string, var/datum/var_source) +/proc/string2listofvars(t_string, datum/var_source) if(!t_string || !var_source) return list() diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm index 31c78535322..3056485d755 100644 --- a/code/__HELPERS/unsorted.dm +++ b/code/__HELPERS/unsorted.dm @@ -5,7 +5,7 @@ /* Get the direction of startObj relative to endObj. * Return values: To the right, 1. Below, 2. To the left, 3. Above, 4. Not found adjacent in cardinal directions, 0. */ -/proc/getRelativeDirection(var/atom/movable/startObj, var/atom/movable/endObj) +/proc/getRelativeDirection(atom/movable/startObj, atom/movable/endObj) if(endObj.x == startObj.x + 1 && endObj.y == startObj.y) return EAST @@ -21,11 +21,11 @@ return 0 //Returns the middle-most value -/proc/dd_range(var/low, var/high, var/num) +/proc/dd_range(low, high, num) return max(low,min(high,num)) //Returns whether or not A is the middle most value -/proc/InRange(var/A, var/lower, var/upper) +/proc/InRange(A, lower, upper) if(A < lower) return 0 if(A > upper) return 0 return 1 @@ -152,7 +152,7 @@ Turf and target are seperate in case you want to teleport some distance from a t // Returns true if direction is blocked from loc // Checks if doors are open -/proc/DirBlocked(turf/loc,var/dir) +/proc/DirBlocked(turf/loc, dir) for(var/obj/structure/window/D in loc) if(!D.density) continue @@ -240,7 +240,7 @@ Turf and target are seperate in case you want to teleport some distance from a t return 1 //Ensure the frequency is within bounds of what it should be sending/recieving at -/proc/sanitize_frequency(var/f, var/low = PUBLIC_LOW_FREQ, var/high = PUBLIC_HIGH_FREQ) +/proc/sanitize_frequency(f, low = PUBLIC_LOW_FREQ, high = PUBLIC_HIGH_FREQ) f = round(f) f = max(low, f) f = min(high, f) @@ -249,10 +249,10 @@ Turf and target are seperate in case you want to teleport some distance from a t return f //Turns 1479 into 147.9 -/proc/format_frequency(var/f) +/proc/format_frequency(f) return "[round(f / 10)].[f % 10]" -/obj/proc/atmosanalyzer_scan(var/datum/gas_mixture/air_contents, mob/user, var/obj/target = src) +/obj/proc/atmosanalyzer_scan(datum/gas_mixture/air_contents, mob/user, obj/target = src) var/obj/icon = target user.visible_message("[user] has used the analyzer on [target].", "You use the analyzer on [target].") var/pressure = air_contents.return_pressure() @@ -320,7 +320,7 @@ Turf and target are seperate in case you want to teleport some distance from a t return selected -/proc/select_active_ai(var/mob/user) +/proc/select_active_ai(mob/user) var/list/ais = active_ais() if(ais.len) if(user) . = input(usr,"AI signals detected:", "AI selection") in ais @@ -438,7 +438,7 @@ Turf and target are seperate in case you want to teleport some distance from a t return DisplayJoules(units * SSmachines.wait * 0.1 / GLOB.CELLRATE) //Forces a variable to be posative -/proc/modulus(var/M) +/proc/modulus(M) if(M >= 0) return M if(M < 0) @@ -465,7 +465,7 @@ Turf and target are seperate in case you want to teleport some distance from a t // 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(var/atom/movable/M) +/proc/get_atom_on_turf(atom/movable/M) var/atom/loc = M while(loc && loc.loc && !istype(loc.loc, /turf/)) loc = loc.loc @@ -475,7 +475,7 @@ Turf and target are seperate in case you want to teleport some distance from a t Returns 1 if the chain up to the area contains the given typepath 0 otherwise */ -/atom/proc/is_found_within(var/typepath) +/atom/proc/is_found_within(typepath) var/atom/A = src while(A.loc) if(istype(A.loc, typepath)) @@ -491,7 +491,7 @@ Returns 1 if the chain up to the area contains the given typepath // returns the turf located at the map edge in the specified direction relative to A // used for mass driver -/proc/get_edge_target_turf(var/atom/A, var/direction) +/proc/get_edge_target_turf(atom/A, direction) var/turf/target = locate(A.x, A.y, A.z) if(!A || !target) @@ -515,7 +515,7 @@ Returns 1 if the chain up to the area contains the given typepath // result is bounded to map size // note range is non-pythagorean // used for disposal system -/proc/get_ranged_target_turf(var/atom/A, var/direction, var/range) +/proc/get_ranged_target_turf(atom/A, direction, range) var/x = A.x var/y = A.y @@ -533,17 +533,17 @@ Returns 1 if the chain up to the area contains the given typepath // returns turf relative to A offset in dx and dy tiles // bound to map limits -/proc/get_offset_target_turf(var/atom/A, var/dx, var/dy) +/proc/get_offset_target_turf(atom/A, dx, dy) var/x = min(world.maxx, max(1, A.x + dx)) var/y = min(world.maxy, max(1, A.y + dy)) return locate(x,y,A.z) //Makes sure MIDDLE is between LOW and HIGH. If not, it adjusts it. Returns the adjusted value. -/proc/between(var/low, var/middle, var/high) +/proc/between(low, middle, high) return max(min(middle, high), low) //returns random gauss number -/proc/GaussRand(var/sigma) +/proc/GaussRand(sigma) var/x,y,rsq do x=2*rand()-1 @@ -553,7 +553,7 @@ Returns 1 if the chain up to the area contains the given typepath return sigma*y*sqrt(-2*log(rsq)/rsq) //returns random gauss number, rounded to 'roundto' -/proc/GaussRandRound(var/sigma,var/roundto) +/proc/GaussRandRound(sigma, roundto) return round(GaussRand(sigma),roundto) //Will return the contents of an atom recursivly to a depth of 'searchDepth' @@ -576,7 +576,7 @@ Returns 1 if the chain up to the area contains the given typepath return weight //Step-towards method of determining whether one atom can see another. Similar to viewers() -/proc/can_see(var/atom/source, var/atom/target, var/length=5) // I couldnt be arsed to do actual raycasting :I This is horribly inaccurate. +/proc/can_see(atom/source, atom/target, length=5) // I couldnt be arsed to do actual raycasting :I This is horribly inaccurate. var/turf/current = get_turf(source) var/turf/target_turf = get_turf(target) var/steps = 1 @@ -606,7 +606,7 @@ Returns 1 if the chain up to the area contains the given typepath return 1 return 0 -/proc/get_step_towards2(var/atom/ref , var/atom/trg) +/proc/get_step_towards2(atom/ref , atom/trg) var/base_dir = get_dir(ref, get_step_towards(ref,trg)) var/turf/temp = get_step_towards(ref,trg) @@ -636,7 +636,7 @@ Returns 1 if the chain up to the area contains the given typepath //Takes: Anything that could possibly have variables and a varname to check. //Returns: 1 if found, 0 if not. -/proc/hasvar(var/datum/A, var/varname) +/proc/hasvar(datum/A, varname) if(A.vars.Find(lowertext(varname))) return 1 else return 0 @@ -653,7 +653,7 @@ Returns 1 if the chain up to the area contains the given typepath //Takes: Area type as text string or as typepath OR an instance of the area. //Returns: A list of all areas of that type in the world. -/proc/get_areas(var/areatype) +/proc/get_areas(areatype) if(!areatype) return null if(istext(areatype)) areatype = text2path(areatype) if(isarea(areatype)) @@ -667,7 +667,7 @@ Returns 1 if the chain up to the area contains the given typepath //Takes: Area type as text string or as typepath OR an instance of the area. //Returns: A list of all turfs in areas of that type of that type in the world. -/proc/get_area_turfs(var/areatype) +/proc/get_area_turfs(areatype) if(!areatype) return null if(istext(areatype)) areatype = text2path(areatype) if(isarea(areatype)) @@ -682,7 +682,7 @@ Returns 1 if the chain up to the area contains the given typepath //Takes: Area type as text string or as typepath OR an instance of the area. //Returns: A list of all atoms (objs, turfs, mobs) in areas of that type of that type in the world. -/proc/get_area_all_atoms(var/areatype) +/proc/get_area_all_atoms(areatype) if(!areatype) return null if(istext(areatype)) areatype = text2path(areatype) if(isarea(areatype)) @@ -701,7 +701,7 @@ Returns 1 if the chain up to the area contains the given typepath var/y_pos = null var/z_pos = null -/area/proc/move_contents_to(var/area/A, var/turftoleave=null, var/direction = null) +/area/proc/move_contents_to(area/A, turftoleave=null, direction = null) //Takes: Area. Optional: turf type to leave behind. //Returns: Nothing. //Notes: Attempts to move the contents of one area to another area. @@ -840,7 +840,7 @@ Returns 1 if the chain up to the area contains the given typepath -/proc/DuplicateObject(obj/original, var/perfectcopy = 0 , var/sameloc = 0, var/atom/newloc = null) +/proc/DuplicateObject(obj/original, perfectcopy = 0 , sameloc = 0, atom/newloc = null) if(!original) return null @@ -867,7 +867,7 @@ Returns 1 if the chain up to the area contains the given typepath O.update_icon() return O -/area/proc/copy_contents_to(var/area/A , var/platingRequired = 0 ) +/area/proc/copy_contents_to(area/A , platingRequired = 0 ) //Takes: Area. Optional: If it should copy to areas that don't have plating //Returns: Nothing. //Notes: Attempts to move the contents of one area to another area. @@ -1096,7 +1096,7 @@ Returns 1 if the chain up to the area contains the given typepath //centered = 0 counts from turf edge to edge //centered = 1 counts from turf center to turf center //of course mathematically this is just adding world.icon_size on again -/proc/getPixelDistance(var/atom/A, var/atom/B, var/centered = 1) +/proc/getPixelDistance(atom/A, atom/B, centered = 1) if(!istype(A)||!istype(B)) return 0 . = bounds_dist(A, B) + sqrt((((A.pixel_x+B.pixel_x)**2) + ((A.pixel_y+B.pixel_y)**2))) @@ -1186,7 +1186,7 @@ GLOBAL_LIST_INIT(can_embed_types, typecacheof(list( return 1 return 0 -/proc/reverse_direction(var/dir) +/proc/reverse_direction(dir) switch(dir) if(NORTH) return SOUTH @@ -1261,7 +1261,7 @@ GLOBAL_LIST_INIT(wall_items, typecacheof(list(/obj/machinery/power/apc, /obj/mac Standard way to write links -Sayu */ -/proc/topic_link(var/datum/D, var/arglist, var/content) +/proc/topic_link(datum/D, arglist, content) if(istype(arglist,/list)) arglist = list2params(arglist) return "[content]" @@ -1372,7 +1372,7 @@ Standard way to write links -Sayu chance = max(chance - (initial_chance / steps), 0) steps-- -/proc/get_random_colour(var/simple, var/lower, var/upper) +/proc/get_random_colour(simple, lower, upper) var/colour if(simple) colour = pick(list("FF0000","FF7F00","FFFF00","00FF00","0000FF","4B0082","8F00FF")) @@ -1384,7 +1384,7 @@ Standard way to write links -Sayu colour += temp_col return colour -/proc/get_distant_turf(var/turf/T,var/direction,var/distance) +/proc/get_distant_turf(turf/T, direction, distance) if(!T || !direction || !distance) return var/dest_x = T.x @@ -1405,7 +1405,7 @@ Standard way to write links -Sayu GLOBAL_DATUM_INIT(dview_mob, /mob/dview, new) //Version of view() which ignores darkness, because BYOND doesn't have it. -/proc/dview(var/range = world.view, var/center, var/invis_flags = 0) +/proc/dview(range = world.view, center, invis_flags = 0) if(!center) return @@ -1574,7 +1574,7 @@ GLOBAL_DATUM_INIT(dview_mob, /mob/dview, new) //The y dimension of the icon file used in the image // eg: center_image(I, 32,32) // eg2: center_image(I, 96,96) -/proc/center_image(var/image/I, x_dimension = 0, y_dimension = 0) +/proc/center_image(image/I, x_dimension = 0, y_dimension = 0) if(!I) return @@ -1729,7 +1729,7 @@ GLOBAL_DATUM_INIT(dview_mob, /mob/dview, new) chosen = matches[chosen] return chosen -/proc/make_types_fancy(var/list/types) +/proc/make_types_fancy(list/types) if(ispath(types)) types = list(types) . = list() @@ -1962,7 +1962,7 @@ GLOBAL_DATUM_INIT(dview_mob, /mob/dview, new) result += (1 << num) return result -/proc/pixel_shift_dir(var/dir, var/amount_x = 32, var/amount_y = 32) //Returns a list with pixel_shift values that will shift an object's icon one tile in the direction passed. +/proc/pixel_shift_dir(dir, amount_x = 32, amount_y = 32) //Returns a list with pixel_shift values that will shift an object's icon one tile in the direction passed. amount_x = min(max(0, amount_x), 32) //No less than 0, no greater than 32. amount_y = min(max(0, amount_x), 32) var/list/shift = list("x" = 0, "y" = 0) @@ -2093,3 +2093,55 @@ GLOBAL_DATUM_INIT(dview_mob, /mob/dview, new) )) query_accesslog.warn_execute() qdel(query_accesslog) + +/** + * Returns the clean name of an audio channel. + * + * Arguments: + * * channel - The channel number. + */ +/proc/get_channel_name(channel) + switch(channel) + if(CHANNEL_LOBBYMUSIC) + return "Lobby Music" + if(CHANNEL_ADMIN) + return "Admin MIDIs" + if(CHANNEL_VOX) + return "AI Announcements" + if(CHANNEL_JUKEBOX) + return "Dance Machines" + if(CHANNEL_HEARTBEAT) + return "Heartbeat" + if(CHANNEL_BUZZ) + return "White Noise" + if(CHANNEL_AMBIENCE) + return "Ambience" + if(CHANNEL_ENGINE) + return "Engine Ambience" + +/proc/slot_bitfield_to_slot(input_slot_flags) // Kill off this garbage ASAP; slot flags and clothing flags should be IDENTICAL. GOSH DARN IT. Doesn't work with ears or pockets, either. + switch(input_slot_flags) + if(SLOT_OCLOTHING) + return slot_wear_suit + if(SLOT_ICLOTHING) + return slot_w_uniform + if(SLOT_GLOVES) + return slot_gloves + if(SLOT_EYES) + return slot_glasses + if(SLOT_MASK) + return slot_wear_mask + if(SLOT_HEAD) + return slot_head + if(SLOT_FEET) + return slot_shoes + if(SLOT_ID) + return slot_wear_id + if(SLOT_BELT) + return slot_belt + if(SLOT_BACK) + return slot_back + if(SLOT_PDA) + return slot_wear_pda + if(SLOT_TIE) + return slot_tie diff --git a/code/_globalvars/lists/devil.dm b/code/_globalvars/lists/devil.dm deleted file mode 100644 index 54528709573..00000000000 --- a/code/_globalvars/lists/devil.dm +++ /dev/null @@ -1,8 +0,0 @@ -//what could possibly go wrong -GLOBAL_LIST_INIT(devil_machines, typecacheof(/obj/item/circuitboard, TRUE) - list( - /obj/item/circuitboard/shuttle, - /obj/item/circuitboard/swfdoor, - /obj/item/circuitboard/olddoor, - /obj/item/circuitboard/computer, - /obj/item/circuitboard/machine -)) diff --git a/code/_globalvars/traits.dm b/code/_globalvars/traits.dm index e91ea9b8e70..382303c1212 100644 --- a/code/_globalvars/traits.dm +++ b/code/_globalvars/traits.dm @@ -43,7 +43,9 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_BLOODCRAWL" = TRAIT_BLOODCRAWL, "TRAIT_BLOODCRAWL_EAT" = TRAIT_BLOODCRAWL_EAT, "TRAIT_DWARF" = TRAIT_DWARF, + "TRAIT_SILENT_FOOTSTEPS" = TRAIT_SILENT_FOOTSTEPS, "TRAIT_ALCOHOL_TOLERANCE" = TRAIT_ALCOHOL_TOLERANCE, + "TRAIT_KISS_OF_DEATH" = TRAIT_KISS_OF_DEATH, "TRAIT_COMIC_SANS" = TRAIT_COMIC_SANS, "TRAIT_NOFINGERPRINTS" = TRAIT_NOFINGERPRINTS, diff --git a/code/_onclick/adjacent.dm b/code/_onclick/adjacent.dm index 58cfdf477f2..f9096ad6492 100644 --- a/code/_onclick/adjacent.dm +++ b/code/_onclick/adjacent.dm @@ -10,11 +10,11 @@ Note that in all cases the neighbor is handled simply; this is usually the user's mob, in which case it is up to you to check that the mob is not inside of something */ -/atom/proc/Adjacent(var/atom/neighbor) // basic inheritance, unused +/atom/proc/Adjacent(atom/neighbor) // basic inheritance, unused return 0 // Not a sane use of the function and (for now) indicative of an error elsewhere -/area/Adjacent(var/atom/neighbor) +/area/Adjacent(atom/neighbor) CRASH("Call to /area/Adjacent(), unimplemented proc") @@ -25,7 +25,7 @@ * If you are diagonally adjacent, ensure you can pass through at least one of the mutually adjacent square. * Passing through in this case ignores anything with the LETPASSTHROW flag, such as tables, racks, and morgue trays. */ -/turf/Adjacent(var/atom/neighbor, var/atom/target = null) +/turf/Adjacent(atom/neighbor, atom/target = null) var/turf/T0 = get_turf(neighbor) if(T0 == src) return 1 @@ -63,7 +63,7 @@ Note: Multiple-tile objects are created when the bound_width and bound_height are creater than the tile size. This is not used in stock /tg/station currently. */ -/atom/movable/Adjacent(var/atom/neighbor) +/atom/movable/Adjacent(atom/neighbor) if(neighbor == loc) return 1 if(!isturf(loc)) return 0 for(var/turf/T in locs) @@ -72,7 +72,7 @@ return 0 // This is necessary for storage items not on your person. -/obj/item/Adjacent(var/atom/neighbor, var/recurse = 1) +/obj/item/Adjacent(atom/neighbor, recurse = 1) if(neighbor == loc) return 1 if(istype(loc,/obj/item)) if(recurse > 0) @@ -85,7 +85,7 @@ This is defined as any dense ON_BORDER object, or any dense object without LETPASSTHROW. The border_only flag allows you to not objects (for source and destination squares) */ -/turf/proc/ClickCross(var/target_dir, var/border_only, var/target_atom = null) +/turf/proc/ClickCross(target_dir, border_only, target_atom = null) for(var/obj/O in src) if( !O.density || O == target_atom || (O.pass_flags & LETPASSTHROW)) continue // LETPASSTHROW is used for anything you can click through diff --git a/code/_onclick/click.dm b/code/_onclick/click.dm index 8467c6dcb75..77a4ae192f1 100644 --- a/code/_onclick/click.dm +++ b/code/_onclick/click.dm @@ -196,7 +196,7 @@ return FALSE // Default behavior: ignore double clicks, consider them normal clicks instead -/mob/proc/DblClickOn(var/atom/A, var/params) +/mob/proc/DblClickOn(atom/A, params) return /* @@ -209,7 +209,7 @@ proximity_flag is not currently passed to attack_hand, and is instead used in human click code to allow glove touches only at melee range. */ -/mob/proc/UnarmedAttack(var/atom/A, var/proximity_flag) +/mob/proc/UnarmedAttack(atom/A, proximity_flag) if(ismob(A)) changeNext_move(CLICK_CD_MELEE) return @@ -230,14 +230,14 @@ Used when you are handcuffed and click things. Not currently used by anything but could easily be. */ -/mob/proc/RestrainedClickOn(var/atom/A) +/mob/proc/RestrainedClickOn(atom/A) return /* Middle click Only used for swapping hands */ -/mob/proc/MiddleClickOn(var/atom/A) +/mob/proc/MiddleClickOn(atom/A) pointed(A) return @@ -285,7 +285,7 @@ // In case of use break glass /* -/atom/proc/MiddleClick(var/mob/M as mob) +/atom/proc/MiddleClick(mob/M as mob) return */ @@ -294,10 +294,10 @@ For most mobs, examine. This is overridden in ai.dm */ -/mob/proc/ShiftClickOn(var/atom/A) +/mob/proc/ShiftClickOn(atom/A) A.ShiftClick(src) return -/atom/proc/ShiftClick(var/mob/user) +/atom/proc/ShiftClick(mob/user) if(user.client && get_turf(user.client.eye) == get_turf(user)) user.examinate(src) return @@ -306,7 +306,7 @@ Ctrl click For most objects, pull */ -/mob/proc/CtrlClickOn(var/atom/A) +/mob/proc/CtrlClickOn(atom/A) A.CtrlClick(src) return @@ -320,7 +320,7 @@ Alt click Unused except for AI */ -/mob/proc/AltClickOn(var/atom/A) +/mob/proc/AltClickOn(atom/A) A.AltClick(src) return @@ -331,36 +331,39 @@ else ..() -/atom/proc/AltClick(var/mob/user) +/atom/proc/AltClick(mob/user) + SEND_SIGNAL(src, COMSIG_CLICK_ALT, user) var/turf/T = get_turf(src) - if(T) - if(user.TurfAdjacent(T)) - user.listed_turf = T - user.client.statpanel = T.name - // If we had a method to force a `Stat` update, it would go here - else - user.listed_turf = null - return + if(T && (isturf(loc) || isturf(src)) && user.TurfAdjacent(T)) + user.listed_turf = T + user.client.statpanel = T.name -/mob/proc/TurfAdjacent(var/turf/T) +/// Use this instead of [/mob/proc/AltClickOn] where you only want turf content listing without additional atom alt-click interaction +/atom/proc/AltClickNoInteract(mob/user, atom/A) + var/turf/T = get_turf(A) + if(T && user.TurfAdjacent(T)) + user.listed_turf = T + user.client.statpanel = T.name + +/mob/proc/TurfAdjacent(turf/T) return T.Adjacent(src) /* Control+Shift/Alt+Shift click Unused except for AI */ -/mob/proc/CtrlShiftClickOn(var/atom/A) +/mob/proc/CtrlShiftClickOn(atom/A) A.CtrlShiftClick(src) return -/atom/proc/CtrlShiftClick(var/mob/user) +/atom/proc/CtrlShiftClick(mob/user) return -/mob/proc/AltShiftClickOn(var/atom/A) +/mob/proc/AltShiftClickOn(atom/A) A.AltShiftClick(src) return -/atom/proc/AltShiftClick(var/mob/user) +/atom/proc/AltShiftClick(mob/user) return @@ -392,7 +395,7 @@ LE.fire() // Simple helper to face what you clicked on, in case it should be needed in more than one place -/mob/proc/face_atom(var/atom/A) +/mob/proc/face_atom(atom/A) if( stat || buckled || !A || !x || !y || !A.x || !A.y ) return var/dx = A.x - x var/dy = A.y - y diff --git a/code/_onclick/click_override.dm b/code/_onclick/click_override.dm index 1136af3eae4..0336c809511 100644 --- a/code/_onclick/click_override.dm +++ b/code/_onclick/click_override.dm @@ -12,7 +12,7 @@ /datum/middleClickOverride/ -/datum/middleClickOverride/proc/onClick(var/atom/A, var/mob/living/user) +/datum/middleClickOverride/proc/onClick(atom/A, mob/living/user) user.middleClickOverride = null return 1 /* Note, when making a new click override it is ABSOLUTELY VITAL that you set the source's clickOverride to null at some point if you don't want them to be stuck with it forever. @@ -35,7 +35,7 @@ /datum/middleClickOverride/badminClicker var/summon_path = /obj/item/reagent_containers/food/snacks/cookie -/datum/middleClickOverride/badminClicker/onClick(var/atom/A, var/mob/living/user) +/datum/middleClickOverride/badminClicker/onClick(atom/A, mob/living/user) var/atom/movable/newObject = new summon_path newObject.loc = get_turf(A) to_chat(user, "You release the power you had stored up, summoning \a [newObject.name]! ") diff --git a/code/_onclick/hud/_defines.dm b/code/_onclick/hud/_defines.dm index 58fd73656cb..91fe0c99bf7 100644 --- a/code/_onclick/hud/_defines.dm +++ b/code/_onclick/hud/_defines.dm @@ -22,7 +22,6 @@ //Middle left indicators #define ui_lingchemdisplay "WEST:6,CENTER-1:15" #define ui_lingstingdisplay "WEST:6,CENTER-3:11" -#define ui_devilsouldisplay "WEST:6,CENTER-1:15" //Lower center, persistant menu #define ui_sstore1 "CENTER-5:10,SOUTH:5" diff --git a/code/_onclick/hud/devil.dm b/code/_onclick/hud/devil.dm deleted file mode 100644 index 53f7265c6a4..00000000000 --- a/code/_onclick/hud/devil.dm +++ /dev/null @@ -1,87 +0,0 @@ - -//Soul counter is stored with the humans, it does weird when you place it here apparently... - - -/datum/hud/devil/New(mob/owner, ui_style = 'icons/mob/screen_midnight.dmi') - ..() - - var/obj/screen/using - var/obj/screen/inventory/inv_box - - using = new /obj/screen/drop() - using.icon = ui_style - using.screen_loc = ui_drop_throw - static_inventory += using - - mymob.pullin = new /obj/screen/pull() - mymob.pullin.icon = ui_style - mymob.pullin.update_icon(mymob) - mymob.pullin.screen_loc = ui_pull_resist - static_inventory += mymob.pullin - - inv_box = new /obj/screen/inventory/hand() - inv_box.name = "right hand" - inv_box.icon = ui_style - inv_box.icon_state = "hand_r" - inv_box.screen_loc = ui_rhand - inv_box.slot_id = slot_r_hand - static_inventory += inv_box - - inv_box = new /obj/screen/inventory/hand() - inv_box.name = "left hand" - inv_box.icon = ui_style - inv_box.icon_state = "hand_l" - inv_box.screen_loc = ui_lhand - inv_box.slot_id = slot_l_hand - static_inventory += inv_box - - using = new /obj/screen/swap_hand() - using.name = "hand" - using.icon = ui_style - using.icon_state = "swap_1" - using.screen_loc = ui_swaphand1 - static_inventory += using - - using = new /obj/screen/swap_hand() - using.name = "hand" - using.icon = ui_style - using.icon_state = "swap_2" - using.screen_loc = ui_swaphand2 - static_inventory += using - - zone_select = new /obj/screen/zone_sel() - zone_select.icon = ui_style - zone_select.update_icon(mymob) - - lingchemdisplay = new /obj/screen/ling/chems() - devilsouldisplay = new /obj/screen/devil/soul_counter - infodisplay += devilsouldisplay - - for(var/obj/screen/inventory/inv in static_inventory) - if(inv.slot_id) - inv.hud = src - inv_slots[inv.slot_id] = inv - inv.update_icon() - - -/datum/hud/devil/persistent_inventory_update() - if(!mymob) - return - var/mob/living/carbon/true_devil/D = mymob - - if(hud_version != HUD_STYLE_NOHUD) - if(D.r_hand) - D.r_hand.screen_loc = ui_rhand - D.client.screen += D.r_hand - if(D.l_hand) - D.l_hand.screen_loc = ui_lhand - D.client.screen += D.l_hand - else - if(D.r_hand) - D.r_hand.screen_loc = null - if(D.l_hand) - D.l_hand.screen_loc = null - -/mob/living/carbon/true_devil/create_mob_hud() - if(client && !hud_used) - hud_used = new /datum/hud/devil(src, ui_style2icon(client.prefs.UI_style)) diff --git a/code/_onclick/hud/hud.dm b/code/_onclick/hud/hud.dm index c8d8a7d2290..0cfb6985b8e 100644 --- a/code/_onclick/hud/hud.dm +++ b/code/_onclick/hud/hud.dm @@ -27,8 +27,6 @@ var/obj/screen/move_intent var/obj/screen/module_store_icon - var/obj/screen/devil/soul_counter/devilsouldisplay - var/list/static_inventory = list() //the screen objects which are static var/list/toggleable_inventory = list() //the screen objects which can be hidden var/list/hotkeybuttons = list() //the buttons that can be used via hotkeys @@ -89,7 +87,6 @@ alien_plasma_display = null vampire_blood_display = null nightvisionicon = null - devilsouldisplay = null QDEL_LIST_ASSOC_VAL(plane_masters) diff --git a/code/_onclick/hud/human.dm b/code/_onclick/hud/human.dm index 5b4ce4c99e9..8f125079d6b 100644 --- a/code/_onclick/hud/human.dm +++ b/code/_onclick/hud/human.dm @@ -36,35 +36,6 @@ var/mob/living/carbon/U = usr U.unset_sting() -/obj/screen/devil - invisibility = INVISIBILITY_ABSTRACT - -/obj/screen/devil/soul_counter - icon = 'icons/mob/screen_gen.dmi' - name = "souls owned" - icon_state = "Devil-6" - screen_loc = ui_devilsouldisplay - -/obj/screen/devil/soul_counter/proc/update_counter(souls = 0) - invisibility = 0 - maptext = "
[souls]
" - switch(souls) - if(0,null) - icon_state = "Devil-1" - if(1,2) - icon_state = "Devil-2" - if(3 to 5) - icon_state = "Devil-3" - if(6 to 8) - icon_state = "Devil-4" - if(9 to INFINITY) - icon_state = "Devil-5" - else - icon_state = "Devil-6" - -/obj/screen/devil/soul_counter/proc/clear() - invisibility = INVISIBILITY_ABSTRACT - /obj/screen/ling/chems name = "chemical storage" icon_state = "power_display" @@ -85,7 +56,7 @@ /datum/hud/human var/hud_alpha = 255 -/datum/hud/human/New(mob/living/carbon/human/owner, var/ui_style = 'icons/mob/screen_white.dmi', var/ui_color = "#ffffff", var/ui_alpha = 255) +/datum/hud/human/New(mob/living/carbon/human/owner, ui_style = 'icons/mob/screen_white.dmi', ui_color = "#ffffff", ui_alpha = 255) ..() owner.overlay_fullscreen("see_through_darkness", /obj/screen/fullscreen/see_through_darkness) @@ -372,9 +343,6 @@ lingstingdisplay = new /obj/screen/ling/sting() infodisplay += lingstingdisplay - devilsouldisplay = new /obj/screen/devil/soul_counter - infodisplay += devilsouldisplay - zone_select = new /obj/screen/zone_sel() zone_select.color = ui_color zone_select.icon = ui_style diff --git a/code/_onclick/hud/parallax.dm b/code/_onclick/hud/parallax.dm index d5fb5cad4fa..e9b95cdd4fc 100644 --- a/code/_onclick/hud/parallax.dm +++ b/code/_onclick/hud/parallax.dm @@ -8,7 +8,7 @@ var/last_parallax_shift //world.time of last update var/parallax_throttle = 0 //ds between updates var/parallax_movedir = 0 - var/parallax_layers_max = 3 + var/parallax_layers_max = 4 var/parallax_animate_timer /datum/hud/proc/create_parallax() @@ -21,6 +21,8 @@ C.parallax_layers_cached += new /obj/screen/parallax_layer/layer_1(null, C.view) C.parallax_layers_cached += new /obj/screen/parallax_layer/layer_2(null, C.view) C.parallax_layers_cached += new /obj/screen/parallax_layer/planet(null, C.view) + if(SSparallax.random_layer) + C.parallax_layers_cached += new SSparallax.random_layer C.parallax_layers_cached += new /obj/screen/parallax_layer/layer_3(null, C.view) C.parallax_layers = C.parallax_layers_cached.Copy() @@ -44,12 +46,12 @@ switch(C.prefs.parallax) if (PARALLAX_INSANE) C.parallax_throttle = FALSE - C.parallax_layers_max = 4 + C.parallax_layers_max = 5 return TRUE if (PARALLAX_MED) C.parallax_throttle = PARALLAX_DELAY_MED - C.parallax_layers_max = 2 + C.parallax_layers_max = 3 return TRUE if (PARALLAX_LOW) @@ -60,8 +62,9 @@ if (PARALLAX_DISABLE) return FALSE + //This is high parallax. C.parallax_throttle = PARALLAX_DELAY_DEFAULT - C.parallax_layers_max = 3 + C.parallax_layers_max = 4 return TRUE /datum/hud/proc/update_parallax_pref() @@ -276,6 +279,21 @@ speed = 1.4 layer = 3 +/obj/screen/parallax_layer/random + blend_mode = BLEND_OVERLAY + speed = 3 + layer = 3 + +/obj/screen/parallax_layer/random/space_gas + icon_state = "space_gas" + +/obj/screen/parallax_layer/random/space_gas/New(view) + ..() + add_atom_colour(SSparallax.random_parallax_color, ADMIN_COLOUR_PRIORITY) + +/obj/screen/parallax_layer/random/asteroids + icon_state = "asteroids" + /obj/screen/parallax_layer/planet icon_state = "planet" blend_mode = BLEND_OVERLAY diff --git a/code/_onclick/item_attack.dm b/code/_onclick/item_attack.dm index 69ae3659fcb..1fe1c68522b 100644 --- a/code/_onclick/item_attack.dm +++ b/code/_onclick/item_attack.dm @@ -31,7 +31,7 @@ return FALSE /obj/attackby(obj/item/I, mob/living/user, params) - return ..() || (can_be_hit && I.attack_obj(src, user)) + return ..() || (can_be_hit && I.attack_obj(src, user, params)) /mob/living/attackby(obj/item/I, mob/living/user, params) user.changeNext_move(CLICK_CD_MELEE) @@ -73,7 +73,7 @@ else SEND_SIGNAL(M, COMSIG_ITEM_ATTACK) if(hitsound) - playsound(loc, hitsound, get_clamped_volume(), 1, -1) + playsound(loc, hitsound, get_clamped_volume(), TRUE, extrarange = stealthy_audio ? SILENCED_SOUND_EXTRARANGE : -1, falloff_distance = 0) M.lastattacker = user.real_name M.lastattackerckey = user.ckey @@ -87,7 +87,7 @@ //the equivalent of the standard version of attack() but for object targets. -/obj/item/proc/attack_obj(obj/O, mob/living/user) +/obj/item/proc/attack_obj(obj/O, mob/living/user, params) if(SEND_SIGNAL(src, COMSIG_ITEM_ATTACK_OBJ, O, user) & COMPONENT_NO_ATTACK_OBJ) return if(flags & (NOBLUDGEON)) diff --git a/code/_onclick/observer.dm b/code/_onclick/observer.dm index 073fab88b34..8a23d228afc 100644 --- a/code/_onclick/observer.dm +++ b/code/_onclick/observer.dm @@ -1,4 +1,4 @@ -/mob/dead/observer/DblClickOn(var/atom/A, var/params) +/mob/dead/observer/DblClickOn(atom/A, params) if(client.click_intercept) // Not doing a click intercept here, because otherwise we double-tap with the `ClickOn` proc. // But we return here since we don't want to do regular dblclick handling @@ -18,7 +18,7 @@ forceMove(get_turf(A)) update_parallax_contents() -/mob/dead/observer/ClickOn(var/atom/A, var/params) +/mob/dead/observer/ClickOn(atom/A, params) if(client.click_intercept) client.click_intercept.InterceptClickOn(src, params, A) return @@ -48,14 +48,14 @@ ShiftClickOn(A) return if(modifiers["alt"]) - AltClickOn(A) + AltClickNoInteract(src, A) return // You are responsible for checking config.ghost_interaction when you override this function // Not all of them require checking, see below A.attack_ghost(src) // We don't need a fucking toggle. -/mob/dead/observer/ShiftClickOn(var/atom/A) +/mob/dead/observer/ShiftClickOn(atom/A) examinate(A) /atom/proc/attack_ghost(mob/user) diff --git a/code/_onclick/other_mobs.dm b/code/_onclick/other_mobs.dm index 3720f9bdb2e..b2338937ebc 100644 --- a/code/_onclick/other_mobs.dm +++ b/code/_onclick/other_mobs.dm @@ -28,11 +28,11 @@ return /* -/mob/living/carbon/human/RestrainedClickOn(var/atom/A) -- Handled by carbons +/mob/living/carbon/human/RestrainedClickOn(atom/A) -- Handled by carbons return */ -/mob/living/carbon/RestrainedClickOn(var/atom/A) +/mob/living/carbon/RestrainedClickOn(atom/A) return 0 /mob/living/carbon/human/RangedAttack(atom/A, params) @@ -54,17 +54,17 @@ /* Animals & All Unspecified */ -/mob/living/UnarmedAttack(var/atom/A) +/mob/living/UnarmedAttack(atom/A) A.attack_animal(src) -/mob/living/simple_animal/hostile/UnarmedAttack(var/atom/A) +/mob/living/simple_animal/hostile/UnarmedAttack(atom/A) target = A AttackingTarget() /atom/proc/attack_animal(mob/user) return -/mob/living/RestrainedClickOn(var/atom/A) +/mob/living/RestrainedClickOn(atom/A) return /* @@ -109,5 +109,5 @@ return // pAIs are not intended to interact with anything in the world -/mob/living/silicon/pai/UnarmedAttack(var/atom/A) +/mob/living/silicon/pai/UnarmedAttack(atom/A) return diff --git a/code/_onclick/overmind.dm b/code/_onclick/overmind.dm index 419524c8711..40c60b99268 100644 --- a/code/_onclick/overmind.dm +++ b/code/_onclick/overmind.dm @@ -1,7 +1,7 @@ // Blob Overmind Controls -/mob/camera/blob/ClickOn(var/atom/A, var/params) //Expand blob +/mob/camera/blob/ClickOn(atom/A, params) //Expand blob var/list/modifiers = params2list(params) if(modifiers["middle"]) MiddleClickOn(A) diff --git a/code/_onclick/telekinesis.dm b/code/_onclick/telekinesis.dm index df9c8ea1fae..342af86c0b6 100644 --- a/code/_onclick/telekinesis.dm +++ b/code/_onclick/telekinesis.dm @@ -87,7 +87,7 @@ //stops TK grabs being equipped anywhere but into hands -/obj/item/tk_grab/equipped(mob/user, var/slot) +/obj/item/tk_grab/equipped(mob/user, slot) if( (slot == slot_l_hand) || (slot== slot_r_hand) ) return qdel(src) @@ -151,7 +151,7 @@ if(!.) return I == focus -/obj/item/tk_grab/proc/focus_object(var/obj/target, var/mob/user) +/obj/item/tk_grab/proc/focus_object(obj/target, mob/user) if(!istype(target,/obj)) return//Cant throw non objects atm might let it do mobs later if(target.anchored || !isturf(target.loc)) diff --git a/code/controllers/subsystem/afk.dm b/code/controllers/subsystem/afk.dm index ee3d70814b4..9b1d5f3fa26 100644 --- a/code/controllers/subsystem/afk.dm +++ b/code/controllers/subsystem/afk.dm @@ -76,7 +76,7 @@ SUBSYSTEM_DEF(afk) /datum/controller/subsystem/afk/proc/warn(mob/living/carbon/human/H, text) to_chat(H, text) - SEND_SOUND(H, 'sound/effects/adminhelp.ogg') + SEND_SOUND(H, sound('sound/effects/adminhelp.ogg')) if(H.client) window_flash(H.client) diff --git a/code/controllers/subsystem/air.dm b/code/controllers/subsystem/air.dm index 6b08efe7b38..324df11b8d1 100644 --- a/code/controllers/subsystem/air.dm +++ b/code/controllers/subsystem/air.dm @@ -283,7 +283,7 @@ SUBSYSTEM_DEF(air) for(var/turf/simulated/S in T.atmos_adjacent_turfs) add_to_active(S) -/datum/controller/subsystem/air/proc/setup_allturfs(var/list/turfs_to_init = block(locate(1, 1, 1), locate(world.maxx, world.maxy, world.maxz))) +/datum/controller/subsystem/air/proc/setup_allturfs(list/turfs_to_init = block(locate(1, 1, 1), locate(world.maxx, world.maxy, world.maxz))) var/list/active_turfs = src.active_turfs // Clear active turfs - faster than removing every single turf in the world @@ -321,7 +321,7 @@ SUBSYSTEM_DEF(air) ET.excited = 1 . += ET -/datum/controller/subsystem/air/proc/setup_atmos_machinery(var/list/machines_to_init) +/datum/controller/subsystem/air/proc/setup_atmos_machinery(list/machines_to_init) var/watch = start_watch() log_startup_progress("Initializing atmospherics machinery...") var/count = _setup_atmos_machinery(machines_to_init) @@ -329,7 +329,7 @@ SUBSYSTEM_DEF(air) // this underscored variant is so that we can have a means of late initing // atmos machinery without a loud announcement to the world -/datum/controller/subsystem/air/proc/_setup_atmos_machinery(var/list/machines_to_init) +/datum/controller/subsystem/air/proc/_setup_atmos_machinery(list/machines_to_init) var/count = 0 for(var/obj/machinery/atmospherics/A in machines_to_init) A.atmos_init() @@ -345,7 +345,7 @@ SUBSYSTEM_DEF(air) //this can't be done with setup_atmos_machinery() because // all atmos machinery has to initalize before the first // pipenet can be built. -/datum/controller/subsystem/air/proc/setup_pipenets(var/list/pipes) +/datum/controller/subsystem/air/proc/setup_pipenets(list/pipes) var/watch = start_watch() log_startup_progress("Initializing pipe networks...") var/count = _setup_pipenets(pipes) @@ -353,7 +353,7 @@ SUBSYSTEM_DEF(air) // An underscored wrapper that exists for the same reason // the machine init wrapper does -/datum/controller/subsystem/air/proc/_setup_pipenets(var/list/pipes) +/datum/controller/subsystem/air/proc/_setup_pipenets(list/pipes) var/count = 0 for(var/obj/machinery/atmospherics/machine in pipes) machine.build_network() diff --git a/code/controllers/subsystem/ambience.dm b/code/controllers/subsystem/ambience.dm new file mode 100644 index 00000000000..2b1f0894c68 --- /dev/null +++ b/code/controllers/subsystem/ambience.dm @@ -0,0 +1,30 @@ +/// The subsystem used to play ambience to users every now and then, makes them real excited. +SUBSYSTEM_DEF(ambience) + name = "Ambience" + flags = SS_BACKGROUND | SS_NO_INIT + priority = FIRE_PRIORITY_AMBIENCE + runlevels = RUNLEVEL_GAME | RUNLEVEL_POSTGAME + wait = 1 SECONDS + ///Assoc list of listening client - next ambience time + var/list/ambience_listening_clients = list() + +/datum/controller/subsystem/ambience/fire(resumed) + for(var/C in ambience_listening_clients) + var/client/client_iterator = C + + if(isnull(client_iterator)) + ambience_listening_clients -= client_iterator + continue + + if(ambience_listening_clients[client_iterator] > world.time) + continue //Not ready for the next sound + + var/area/current_area = get_area(client_iterator.mob) + + var/ambience = safepick(current_area.ambientsounds) + if(!ambience) + continue + + SEND_SOUND(client_iterator.mob, sound(ambience, repeat = 0, wait = 0, volume = 25 * client_iterator.prefs.get_channel_volume(CHANNEL_AMBIENCE), channel = CHANNEL_AMBIENCE)) + + ambience_listening_clients[client_iterator] = world.time + rand(current_area.min_ambience_cooldown, current_area.max_ambience_cooldown) diff --git a/code/controllers/subsystem/ghost_spawns.dm b/code/controllers/subsystem/ghost_spawns.dm index d8a4f29e20d..e0234c2616a 100644 --- a/code/controllers/subsystem/ghost_spawns.dm +++ b/code/controllers/subsystem/ghost_spawns.dm @@ -59,11 +59,12 @@ SUBSYSTEM_DEF(ghost_spawns) var/category = "[P.hash]_notify_action" + var/notice_sound = sound('sound/misc/notice2.ogg') for(var/mob/dead/observer/M in (ignore_respawnability ? GLOB.player_list : GLOB.respawnable_list)) if(!is_eligible(M, role, antag_age_check, role, min_hours, check_antaghud)) continue - SEND_SOUND(M, 'sound/misc/notice2.ogg') + SEND_SOUND(M, notice_sound) if(flash_window) window_flash(M.client) @@ -245,7 +246,7 @@ SUBSYSTEM_DEF(ghost_spawns) if(time_left() <= 0) if(!silent) to_chat(M, "Sorry, you were too late for the consideration!") - SEND_SOUND(M, 'sound/machines/buzz-sigh.ogg') + SEND_SOUND(M, sound('sound/machines/buzz-sigh.ogg')) return signed_up += M diff --git a/code/controllers/subsystem/jobs.dm b/code/controllers/subsystem/jobs.dm index 504f263247b..c7e18522392 100644 --- a/code/controllers/subsystem/jobs.dm +++ b/code/controllers/subsystem/jobs.dm @@ -29,7 +29,7 @@ SUBSYSTEM_DEF(jobs) return batch_update_player_exp(announce = FALSE) // Set this to true if you ever want to inform players about their EXP gains -/datum/controller/subsystem/jobs/proc/SetupOccupations(var/list/faction = list("Station")) +/datum/controller/subsystem/jobs/proc/SetupOccupations(list/faction = list("Station")) occupations = list() var/list/all_jobs = subtypesof(/datum/job) if(!all_jobs.len) @@ -47,7 +47,7 @@ SUBSYSTEM_DEF(jobs) return 1 -/datum/controller/subsystem/jobs/proc/Debug(var/text) +/datum/controller/subsystem/jobs/proc/Debug(text) if(!GLOB.debug2) return 0 job_debug.Add(text) @@ -67,7 +67,7 @@ SUBSYSTEM_DEF(jobs) /datum/controller/subsystem/jobs/proc/GetPlayerAltTitle(mob/new_player/player, rank) return player.client.prefs.GetPlayerAltTitle(GetJob(rank)) -/datum/controller/subsystem/jobs/proc/AssignRole(var/mob/new_player/player, var/rank, var/latejoin = 0) +/datum/controller/subsystem/jobs/proc/AssignRole(mob/new_player/player, rank, latejoin = 0) Debug("Running AR, Player: [player], Rank: [rank], LJ: [latejoin]") if(player && player.mind && rank) var/datum/job/job = GetJob(rank) @@ -110,7 +110,7 @@ SUBSYSTEM_DEF(jobs) Debug("AR has failed, Player: [player], Rank: [rank]") return 0 -/datum/controller/subsystem/jobs/proc/FreeRole(var/rank) //making additional slot on the fly +/datum/controller/subsystem/jobs/proc/FreeRole(rank) //making additional slot on the fly var/datum/job/job = GetJob(rank) if(job && job.current_positions >= job.total_positions && job.total_positions != -1) job.total_positions++ @@ -145,7 +145,7 @@ SUBSYSTEM_DEF(jobs) candidates += player return candidates -/datum/controller/subsystem/jobs/proc/GiveRandomJob(var/mob/new_player/player) +/datum/controller/subsystem/jobs/proc/GiveRandomJob(mob/new_player/player) Debug("GRJ Giving random job, Player: [player]") for(var/datum/job/job in shuffle(occupations)) if(!job) @@ -229,7 +229,7 @@ SUBSYSTEM_DEF(jobs) ///This proc is called at the start of the level loop of DivideOccupations() and will cause head jobs to be checked before any other jobs of the same level -/datum/controller/subsystem/jobs/proc/CheckHeadPositions(var/level) +/datum/controller/subsystem/jobs/proc/CheckHeadPositions(level) for(var/command_position in GLOB.command_positions) var/datum/job/job = GetJob(command_position) if(!job) @@ -409,7 +409,7 @@ SUBSYSTEM_DEF(jobs) log_debug("Dividing Occupations took [stop_watch(watch)]s") return 1 -/datum/controller/subsystem/jobs/proc/AssignRank(var/mob/living/carbon/human/H, var/rank, var/joined_late = 0) +/datum/controller/subsystem/jobs/proc/AssignRank(mob/living/carbon/human/H, rank, joined_late = 0) if(!H) return null var/datum/job/job = GetJob(rank) diff --git a/code/controllers/subsystem/parallax.dm b/code/controllers/subsystem/parallax.dm index 1e3c8aca0d9..d0cfadae95d 100644 --- a/code/controllers/subsystem/parallax.dm +++ b/code/controllers/subsystem/parallax.dm @@ -1,19 +1,27 @@ SUBSYSTEM_DEF(parallax) name = "Parallax" wait = 2 - flags = SS_POST_FIRE_TIMING | SS_BACKGROUND + flags = SS_POST_FIRE_TIMING | SS_BACKGROUND | SS_NO_INIT priority = FIRE_PRIORITY_PARALLAX runlevels = RUNLEVEL_LOBBY | RUNLEVELS_DEFAULT offline_implications = "Space parallax will no longer move around. No immediate action is needed." var/list/currentrun var/planet_x_offset = 128 var/planet_y_offset = 128 + var/random_layer + var/random_parallax_color -/datum/controller/subsystem/parallax/Initialize(timeofday) + +//These are cached per client so needs to be done asap so people joining at roundstart do not miss these. +/datum/controller/subsystem/parallax/PreInit() . = ..() + if(prob(70)) //70% chance to pick a special extra layer + random_layer = pick(/obj/screen/parallax_layer/random/space_gas, /obj/screen/parallax_layer/random/asteroids) + random_parallax_color = pick(COLOR_TEAL, COLOR_GREEN, COLOR_SILVER, COLOR_YELLOW, COLOR_CYAN, COLOR_ORANGE, COLOR_PURPLE) //Special color for random_layer1. Has to be done here so everyone sees the same color. planet_y_offset = rand(100, 160) planet_x_offset = rand(100, 160) + /datum/controller/subsystem/parallax/fire(resumed = 0) if(!resumed) src.currentrun = GLOB.clients.Copy() diff --git a/code/controllers/subsystem/radio.dm b/code/controllers/subsystem/radio.dm index 2cedc36c14e..533588173ba 100644 --- a/code/controllers/subsystem/radio.dm +++ b/code/controllers/subsystem/radio.dm @@ -26,7 +26,7 @@ SUBSYSTEM_DEF(radio) var/list/datum/radio_frequency/frequencies = list() // This is fucking disgusting and needs to die -/datum/controller/subsystem/radio/proc/frequency_span_class(var/frequency) +/datum/controller/subsystem/radio/proc/frequency_span_class(frequency) // Antags! if(frequency in ANTAG_FREQS) return "syndradio" @@ -62,7 +62,7 @@ SUBSYSTEM_DEF(radio) return "radio" -/datum/controller/subsystem/radio/proc/add_object(obj/device as obj, var/new_frequency as num, var/filter = null as text|null) +/datum/controller/subsystem/radio/proc/add_object(obj/device as obj, new_frequency as num, filter = null as text|null) var/f_text = num2text(new_frequency) var/datum/radio_frequency/frequency = frequencies[f_text] @@ -87,7 +87,7 @@ SUBSYSTEM_DEF(radio) return 1 -/datum/controller/subsystem/radio/proc/return_frequency(var/new_frequency as num) +/datum/controller/subsystem/radio/proc/return_frequency(new_frequency as num) var/f_text = num2text(new_frequency) var/datum/radio_frequency/frequency = frequencies[f_text] diff --git a/code/controllers/subsystem/ticker.dm b/code/controllers/subsystem/ticker.dm index 44b1593b395..e4f5a6d6ecf 100644 --- a/code/controllers/subsystem/ticker.dm +++ b/code/controllers/subsystem/ticker.dm @@ -125,14 +125,14 @@ SUBSYSTEM_DEF(ticker) current_state = GAME_STATE_FINISHED Master.SetRunLevel(RUNLEVEL_POSTGAME) // This shouldnt process more than once, but you never know auto_toggle_ooc(TRUE) // Turn it on - declare_completion() + addtimer(CALLBACK(src, .proc/call_reboot), 5 SECONDS) - spawn(50) - if(mode.station_was_nuked) - reboot_helper("Station destroyed by Nuclear Device.", "nuke") - else - reboot_helper("Round ended.", "proper completion") +/datum/controller/subsystem/ticker/proc/call_reboot() + if(mode.station_was_nuked) + reboot_helper("Station destroyed by Nuclear Device.", "nuke") + else + reboot_helper("Round ended.", "proper completion") /datum/controller/subsystem/ticker/proc/setup() cultdat = setupcult() @@ -251,7 +251,7 @@ SUBSYSTEM_DEF(ticker) SSdbcore.SetRoundStart() to_chat(world, "Enjoy the game!") - world << sound('sound/AI/welcome.ogg') + SEND_SOUND(world, sound('sound/AI/welcome.ogg')) if(SSholiday.holidays) to_chat(world, "and...") @@ -325,23 +325,23 @@ SUBSYSTEM_DEF(ticker) if("nuclear emergency") //Nuke wasn't on station when it blew up flick("intro_nuke", cinematic) sleep(35) - world << sound('sound/effects/explosionfar.ogg') + SEND_SOUND(world, sound('sound/effects/explosion_distant.ogg')) flick("station_intact_fade_red", cinematic) cinematic.icon_state = "summary_nukefail" if("fake") //The round isn't over, we're just freaking people out for fun flick("intro_nuke", cinematic) sleep(35) - world << sound('sound/items/bikehorn.ogg') + SEND_SOUND(world, sound('sound/items/bikehorn.ogg')) flick("summary_selfdes", cinematic) else flick("intro_nuke", cinematic) sleep(35) - world << sound('sound/effects/explosionfar.ogg') + SEND_SOUND(world, sound('sound/effects/explosion_distant.ogg')) if(2) //nuke was nowhere nearby //TODO: a really distant explosion animation sleep(50) - world << sound('sound/effects/explosionfar.ogg') + SEND_SOUND(world, sound('sound/effects/explosion_distant.ogg')) else //station was destroyed if(mode && !override) override = mode.name @@ -350,25 +350,25 @@ SUBSYSTEM_DEF(ticker) flick("intro_nuke", cinematic) sleep(35) flick("station_explode_fade_red", cinematic) - world << sound('sound/effects/explosionfar.ogg') + SEND_SOUND(world, sound('sound/effects/explosion_distant.ogg')) cinematic.icon_state = "summary_nukewin" if("AI malfunction") //Malf (screen,explosion,summary) flick("intro_malf", cinematic) sleep(76) flick("station_explode_fade_red", cinematic) - world << sound('sound/effects/explosionfar.ogg') + SEND_SOUND(world, sound('sound/effects/explosion_distant.ogg')) cinematic.icon_state = "summary_malf" if("blob") //Station nuked (nuke,explosion,summary) flick("intro_nuke", cinematic) sleep(35) flick("station_explode_fade_red", cinematic) - world << sound('sound/effects/explosionfar.ogg') + SEND_SOUND(world, sound('sound/effects/explosion_distant.ogg')) cinematic.icon_state = "summary_selfdes" else //Station nuked (nuke,explosion,summary) flick("intro_nuke", cinematic) sleep(35) flick("station_explode_fade_red", cinematic) - world << sound('sound/effects/explosionfar.ogg') + SEND_SOUND(world, sound('sound/effects/explosion_distant.ogg')) cinematic.icon_state = "summary_selfdes" //If its actually the end of the round, wait for it to end. //Otherwise if its a verb it will continue on afterwards. @@ -574,7 +574,7 @@ SUBSYSTEM_DEF(ticker) // Play a haha funny noise var/round_end_sound = pick(GLOB.round_end_sounds) var/sound_length = GLOB.round_end_sounds[round_end_sound] - world << round_end_sound + SEND_SOUND(world, sound(round_end_sound)) sleep(sound_length) world.Reboot() diff --git a/code/controllers/subsystem/tickets/tickets.dm b/code/controllers/subsystem/tickets/tickets.dm index 1cce61e6ccb..24919f801f5 100644 --- a/code/controllers/subsystem/tickets/tickets.dm +++ b/code/controllers/subsystem/tickets/tickets.dm @@ -142,8 +142,7 @@ SUBSYSTEM_DEF(tickets) //Inform the user that they have opened a ticket to_chat(C, "You have opened [ticket_name] number #[(getTicketCounter() - 1)]! Please be patient and we will help you soon!") - var/ticket_open_sound = sound('sound/effects/adminticketopen.ogg') - SEND_SOUND(C, ticket_open_sound) + SEND_SOUND(C, sound('sound/effects/adminticketopen.ogg')) message_staff(url_title, NONE, TRUE) @@ -245,8 +244,7 @@ SUBSYSTEM_DEF(tickets) if("Mentorhelp") convert_ticket(T) else - var/msg_sound = sound('sound/effects/adminhelp.ogg') - SEND_SOUND(returnClient(N), msg_sound) + SEND_SOUND(returnClient(N), sound('sound/effects/adminhelp.ogg')) to_chat_safe(returnClient(N), "[key_name_hidden(C)] is autoresponding with: [response_phrases[message_key]]")//for this we want the full value of whatever key this is to tell the player so we do response_phrases[message_key] message_staff("[C] has auto responded to [ticket_owner]\'s adminhelp with: [message_key] ") //we want to use the short named keys for this instead of the full sentence which is why we just do message_key T.lastStaffResponse = "Autoresponse: [message_key]" @@ -599,7 +597,7 @@ UI STUFF else usr.client.resolveAllAdminTickets() -/datum/controller/subsystem/tickets/proc/takeTicket(var/index) +/datum/controller/subsystem/tickets/proc/takeTicket(index) if(assignStaffToTicket(usr.client, index)) if(span_class == "mentorhelp") message_staff("[usr.client] / ([usr]) has taken [ticket_name] number [index]") diff --git a/code/controllers/subsystem/vote.dm b/code/controllers/subsystem/vote.dm index a60f4835316..346297d900f 100644 --- a/code/controllers/subsystem/vote.dm +++ b/code/controllers/subsystem/vote.dm @@ -184,7 +184,7 @@ SUBSYSTEM_DEF(vote) return . -/datum/controller/subsystem/vote/proc/submit_vote(var/ckey, var/vote) +/datum/controller/subsystem/vote/proc/submit_vote(ckey, vote) if(mode) if(config.vote_no_dead && usr.stat == DEAD && !usr.client.holder) return 0 @@ -197,7 +197,7 @@ SUBSYSTEM_DEF(vote) return vote return 0 -/datum/controller/subsystem/vote/proc/initiate_vote(var/vote_type, var/initiator_key) +/datum/controller/subsystem/vote/proc/initiate_vote(vote_type, initiator_key) if(!mode) if(started_time != null && !check_rights(R_ADMIN)) var/next_allowed_time = (started_time + config.vote_delay) @@ -249,11 +249,11 @@ SUBSYSTEM_DEF(vote) You have [config.vote_period/10] seconds to vote."}) switch(vote_type) if("crew_transfer") - world << sound('sound/ambience/alarm4.ogg') + SEND_SOUND(world, sound('sound/ambience/alarm4.ogg')) if("gamemode") - world << sound('sound/ambience/alarm4.ogg') + SEND_SOUND(world, sound('sound/ambience/alarm4.ogg')) if("custom") - world << sound('sound/ambience/alarm4.ogg') + SEND_SOUND(world, sound('sound/ambience/alarm4.ogg')) if(mode == "gamemode" && SSticker.ticker_going) SSticker.ticker_going = FALSE to_chat(world, "Round start has been delayed.") @@ -280,7 +280,7 @@ SUBSYSTEM_DEF(vote) return 1 return 0 -/datum/controller/subsystem/vote/proc/browse_to(var/client/C) +/datum/controller/subsystem/vote/proc/browse_to(client/C) if(!C) return var/admin = check_rights(R_ADMIN, 0, user = C.mob) @@ -330,10 +330,10 @@ SUBSYSTEM_DEF(vote) popup.set_content(dat) popup.open() -/datum/controller/subsystem/vote/proc/update_panel(var/client/C) +/datum/controller/subsystem/vote/proc/update_panel(client/C) C << output(url_encode(vote_html(C)), "vote.browser:update_vote_div") -/datum/controller/subsystem/vote/proc/vote_html(var/client/C) +/datum/controller/subsystem/vote/proc/vote_html(client/C) . = "" if(question) . += "

Vote: '[question]'

" diff --git a/code/datums/action.dm b/code/datums/action.dm index 8d02d4622cf..79dbd4bd2cf 100644 --- a/code/datums/action.dm +++ b/code/datums/action.dm @@ -17,7 +17,7 @@ var/button_icon_state = "default" var/mob/owner -/datum/action/New(var/Target) +/datum/action/New(Target) target = Target button = new button.linked_action = src diff --git a/code/datums/ai_laws.dm b/code/datums/ai_laws.dm index a37d767542f..9fee24101d0 100644 --- a/code/datums/ai_laws.dm +++ b/code/datums/ai_laws.dm @@ -17,10 +17,6 @@ /datum/ai_law/zero/get_index() return 0 -/datum/ai_law/sixsixsix/get_index() - return 666 - - /datum/ai_laws var/name = "Unknown Laws" var/law_header = "Prime Directives" @@ -31,11 +27,9 @@ var/list/datum/ai_law/inherent_laws = list() var/list/datum/ai_law/supplied_laws = list() var/list/datum/ai_law/ion/ion_laws = list() - var/list/datum/ai_law/sixsixsix/devil_laws = list() var/list/datum/ai_law/sorted_laws = list() var/state_zeroth = 0 - var/list/state_devil = list() var/list/state_ion = list() var/list/state_inherent = list() var/list/state_supplied = list() @@ -68,9 +62,6 @@ for(var/ion_law in ion_laws) sorted_laws += ion_law - for(var/evil_law in devil_laws) - sorted_laws += evil_law - var/index = 1 for(var/datum/ai_law/inherent_law in inherent_laws) inherent_law.index = index++ @@ -81,7 +72,7 @@ if(istype(AL)) sorted_laws += AL -/datum/ai_laws/proc/sync(var/mob/living/silicon/S, var/full_sync = 1) +/datum/ai_laws/proc/sync(mob/living/silicon/S, full_sync = 1) // Add directly to laws to avoid log-spam S.sync_zeroth(zeroth_law, zeroth_law_borg) @@ -101,7 +92,7 @@ S.laws.add_supplied_law(law.index, law.law) -/mob/living/silicon/proc/sync_zeroth(var/datum/ai_law/zeroth_law, var/datum/ai_law/zeroth_law_borg) +/mob/living/silicon/proc/sync_zeroth(datum/ai_law/zeroth_law, datum/ai_law/zeroth_law_borg) if(!is_special_character(src) || mind.original != src) if(zeroth_law_borg) laws.set_zeroth_law(zeroth_law_borg.law) @@ -110,14 +101,14 @@ else laws.clear_zeroth_laws() -/mob/living/silicon/ai/sync_zeroth(var/datum/ai_law/zeroth_law, var/datum/ai_law/zeroth_law_borg) +/mob/living/silicon/ai/sync_zeroth(datum/ai_law/zeroth_law, datum/ai_law/zeroth_law_borg) if(zeroth_law) laws.set_zeroth_law(zeroth_law.law, zeroth_law_borg ? zeroth_law_borg.law : null) /**************** * Add Laws * ****************/ -/datum/ai_laws/proc/set_zeroth_law(var/law, var/law_borg = null) +/datum/ai_laws/proc/set_zeroth_law(law, law_borg = null) if(!law) return @@ -128,22 +119,7 @@ zeroth_law_borg = null sorted_laws.Cut() -/datum/ai_laws/proc/set_sixsixsix_law(var/law) - if(!law) - return - - for(var/datum/ai_law/AL in devil_laws) - if(AL.law == law) - return - - var/new_law = new/datum/ai_law/sixsixsix(law) - devil_laws += new_law - if(state_devil.len < devil_laws.len) - state_devil += 1 - - sorted_laws.Cut() - -/datum/ai_laws/proc/add_ion_law(var/law) +/datum/ai_laws/proc/add_ion_law(law) if(!law) return @@ -158,7 +134,7 @@ sorted_laws.Cut() -/datum/ai_laws/proc/add_inherent_law(var/law) +/datum/ai_laws/proc/add_inherent_law(law) if(!law) return @@ -173,7 +149,7 @@ sorted_laws.Cut() -/datum/ai_laws/proc/add_supplied_law(var/number, var/law) +/datum/ai_laws/proc/add_supplied_law(number, law) if(!law) return @@ -200,31 +176,28 @@ /**************** * Remove Laws * *****************/ -/datum/ai_laws/proc/delete_law(var/datum/ai_law/law) +/datum/ai_laws/proc/delete_law(datum/ai_law/law) if(istype(law)) law.delete_law(src) -/datum/ai_law/proc/delete_law(var/datum/ai_laws/laws) +/datum/ai_law/proc/delete_law(datum/ai_laws/laws) -/datum/ai_law/zero/delete_law(var/datum/ai_laws/laws) +/datum/ai_law/zero/delete_law(datum/ai_laws/laws) laws.clear_zeroth_laws() -/datum/ai_law/ion/delete_law(var/datum/ai_laws/laws) +/datum/ai_law/ion/delete_law(datum/ai_laws/laws) laws.internal_delete_law(laws.ion_laws, laws.state_ion, src) -/datum/ai_law/sixsixsix/delete_law(var/datum/ai_laws/laws) - laws.internal_delete_law(laws.devil_laws, laws.state_devil, src) - -/datum/ai_law/inherent/delete_law(var/datum/ai_laws/laws) +/datum/ai_law/inherent/delete_law(datum/ai_laws/laws) laws.internal_delete_law(laws.inherent_laws, laws.state_inherent, src) -/datum/ai_law/supplied/delete_law(var/datum/ai_laws/laws) +/datum/ai_law/supplied/delete_law(datum/ai_laws/laws) var/index = laws.supplied_laws.Find(src) if(index) laws.supplied_laws[index] = "" laws.state_supplied[index] = 1 -/datum/ai_laws/proc/internal_delete_law(var/list/datum/ai_law/laws, var/list/state, var/list/datum/ai_law/law) +/datum/ai_laws/proc/internal_delete_law(list/datum/ai_law/laws, list/state, list/datum/ai_law/law) var/index = laws.Find(law) if(index) laws -= law @@ -239,10 +212,6 @@ zeroth_law = null zeroth_law_borg = null -/datum/ai_laws/proc/clear_sixsixsix_laws() - devil_laws.Cut() - sorted_laws.Cut() - /datum/ai_laws/proc/clear_ion_laws() ion_laws.Cut() sorted_laws.Cut() @@ -255,7 +224,7 @@ supplied_laws.Cut() sorted_laws.Cut() -/datum/ai_laws/proc/show_laws(var/who) +/datum/ai_laws/proc/show_laws(who) sort_laws() for(var/datum/ai_law/law in sorted_laws) if(law == zeroth_law_borg) @@ -271,25 +240,25 @@ /******** * Get * ********/ -/datum/ai_laws/proc/get_state_law(var/datum/ai_law/law) +/datum/ai_laws/proc/get_state_law(datum/ai_law/law) return law.get_state_law(src) -/datum/ai_law/proc/get_state_law(var/datum/ai_laws/laws) +/datum/ai_law/proc/get_state_law(datum/ai_laws/laws) -/datum/ai_law/zero/get_state_law(var/datum/ai_laws/laws) +/datum/ai_law/zero/get_state_law(datum/ai_laws/laws) if(src == laws.zeroth_law) return laws.state_zeroth -/datum/ai_law/ion/get_state_law(var/datum/ai_laws/laws) +/datum/ai_law/ion/get_state_law(datum/ai_laws/laws) return laws.get_state_internal(laws.ion_laws, laws.state_ion, src) -/datum/ai_law/inherent/get_state_law(var/datum/ai_laws/laws) +/datum/ai_law/inherent/get_state_law(datum/ai_laws/laws) return laws.get_state_internal(laws.inherent_laws, laws.state_inherent, src) -/datum/ai_law/supplied/get_state_law(var/datum/ai_laws/laws) +/datum/ai_law/supplied/get_state_law(datum/ai_laws/laws) return laws.get_state_internal(laws.supplied_laws, laws.state_supplied, src) -/datum/ai_laws/proc/get_state_internal(var/list/datum/ai_law/laws, var/list/state, var/list/datum/ai_law/law) +/datum/ai_laws/proc/get_state_internal(list/datum/ai_law/laws, list/state, list/datum/ai_law/law) var/index = laws.Find(law) if(index) return state[index] @@ -298,25 +267,25 @@ /******** * Set * ********/ -/datum/ai_laws/proc/set_state_law(var/datum/ai_law/law, var/state) +/datum/ai_laws/proc/set_state_law(datum/ai_law/law, state) law.set_state_law(src, state) -/datum/ai_law/proc/set_state_law(var/datum/ai_law/law, var/state) +/datum/ai_law/proc/set_state_law(datum/ai_law/law, state) -/datum/ai_law/zero/set_state_law(var/datum/ai_laws/laws, var/state) +/datum/ai_law/zero/set_state_law(datum/ai_laws/laws, state) if(src == laws.zeroth_law) laws.state_zeroth = state -/datum/ai_law/ion/set_state_law(var/datum/ai_laws/laws, var/state) +/datum/ai_law/ion/set_state_law(datum/ai_laws/laws, state) laws.set_state_law_internal(laws.ion_laws, laws.state_ion, src, state) -/datum/ai_law/inherent/set_state_law(var/datum/ai_laws/laws, var/state) +/datum/ai_law/inherent/set_state_law(datum/ai_laws/laws, state) laws.set_state_law_internal(laws.inherent_laws, laws.state_inherent, src, state) -/datum/ai_law/supplied/set_state_law(var/datum/ai_laws/laws, var/state) +/datum/ai_law/supplied/set_state_law(datum/ai_laws/laws, state) laws.set_state_law_internal(laws.supplied_laws, laws.state_supplied, src, state) -/datum/ai_laws/proc/set_state_law_internal(var/list/datum/ai_law/laws, var/list/state, var/list/datum/ai_law/law, var/do_state) +/datum/ai_laws/proc/set_state_law_internal(list/datum/ai_law/laws, list/state, list/datum/ai_law/law, do_state) var/index = laws.Find(law) if(index) state[index] = do_state diff --git a/code/datums/browser.dm b/code/datums/browser.dm index 76be0b02a12..1e7f95b5780 100644 --- a/code/datums/browser.dm +++ b/code/datums/browser.dm @@ -16,7 +16,7 @@ var/title_buttons = "" -/datum/browser/New(nuser, nwindow_id, ntitle = 0, nwidth = 0, nheight = 0, var/atom/nref = null) +/datum/browser/New(nuser, nwindow_id, ntitle = 0, nwidth = 0, nheight = 0, atom/nref = null) user = nuser window_id = nwindow_id @@ -101,7 +101,7 @@ [get_footer()] "} -/datum/browser/proc/open(var/use_onclose = 1) +/datum/browser/proc/open(use_onclose = 1) var/window_size = "" if(width && height) window_size = "size=[width]x[height];" @@ -145,7 +145,7 @@ // Otherwise, the user mob's machine var will be reset directly. // -/proc/onclose(mob/user, windowid, var/atom/ref=null) +/proc/onclose(mob/user, windowid, atom/ref=null) if(!user || !user.client) return var/param = "null" if(ref) @@ -161,7 +161,7 @@ // if a valid atom reference is supplied, call the atom's Topic() with "close=1" // otherwise, just reset the client mob's machine var. // -/client/verb/windowclose(var/atomref as text) +/client/verb/windowclose(atomref as text) set hidden = 1 // hide this verb from the user's panel set name = ".windowclose" // no autocomplete on cmd line diff --git a/code/datums/cache/powermonitor.dm b/code/datums/cache/powermonitor.dm index a11e9b76a41..31195303f3f 100644 --- a/code/datums/cache/powermonitor.dm +++ b/code/datums/cache/powermonitor.dm @@ -1,6 +1,6 @@ GLOBAL_DATUM_INIT(powermonitor_repository, /datum/repository/powermonitor, new()) -/datum/repository/powermonitor/proc/powermonitor_data(var/refresh = 0) +/datum/repository/powermonitor/proc/powermonitor_data(refresh = 0) var/pMonData[0] var/datum/cache_entry/cache_entry = cache_data diff --git a/code/datums/components/decal.dm b/code/datums/components/decal.dm index 876cf0c0507..ba5864ad0eb 100644 --- a/code/datums/components/decal.dm +++ b/code/datums/components/decal.dm @@ -71,5 +71,5 @@ if(strength >= cleanable) qdel(src) -/datum/component/decal/proc/examine(datum/source, mob/user, var/list/examine_list) +/datum/component/decal/proc/examine(datum/source, mob/user, list/examine_list) examine_list += description diff --git a/code/datums/components/footstep.dm b/code/datums/components/footstep.dm new file mode 100644 index 00000000000..a946048487a --- /dev/null +++ b/code/datums/components/footstep.dm @@ -0,0 +1,133 @@ +///Footstep component. Plays footsteps at parents location when it is appropriate. +/datum/component/footstep + ///How many steps the parent has taken since the last time a footstep was played. + var/steps = 0 + ///volume determines the extra volume of the footstep. This is multiplied by the base volume, should there be one. + var/volume + ///e_range stands for extra range - aka how far the sound can be heard. This is added to the base value and ignored if there isn't a base value. + var/e_range + ///footstep_type is a define which determines what kind of sounds should get chosen. + var/footstep_type + ///This can be a list OR a soundfile OR null. Determines whatever sound gets played. + var/footstep_sounds + ///Whether or not to add variation to the sounds played + var/sound_vary = FALSE + +/datum/component/footstep/Initialize(footstep_type_ = FOOTSTEP_MOB_BAREFOOT, volume_ = 0.5, e_range_ = -8, vary) + if(!ismovable(parent)) + return COMPONENT_INCOMPATIBLE + volume = volume_ + e_range = e_range_ + footstep_type = footstep_type_ + sound_vary = vary + switch(footstep_type) + if(FOOTSTEP_MOB_HUMAN) + if(!ishuman(parent)) + return COMPONENT_INCOMPATIBLE + RegisterSignal(parent, COMSIG_MOVABLE_MOVED, .proc/play_humanstep) + return + if(FOOTSTEP_MOB_CLAW) + footstep_sounds = GLOB.clawfootstep + if(FOOTSTEP_MOB_BAREFOOT) + footstep_sounds = GLOB.barefootstep + if(FOOTSTEP_MOB_HEAVY) + footstep_sounds = GLOB.heavyfootstep + if(FOOTSTEP_MOB_SHOE) + footstep_sounds = GLOB.footstep + if(FOOTSTEP_MOB_SLIME) + footstep_sounds = 'sound/effects/footstep/slime1.ogg' + if(FOOTSTEP_OBJ_MACHINE) + footstep_sounds = 'sound/effects/bang.ogg' + RegisterSignal(parent, COMSIG_MOVABLE_MOVED, .proc/play_simplestep_machine) //Note that this doesn't get called for humans. + return + if(FOOTSTEP_OBJ_ROBOT) + footstep_sounds = 'sound/effects/tank_treads.ogg' + RegisterSignal(parent, COMSIG_MOVABLE_MOVED, .proc/play_simplestep_machine) //Note that this doesn't get called for humans. + return + RegisterSignal(parent, COMSIG_MOVABLE_MOVED, .proc/play_simplestep) //Note that this doesn't get called for humans. + +///Prepares a footstep. Determines if it should get played. Returns the turf it should get played on. Note that it is always a /turf/simulated/floor (eventually /turf/open) +/datum/component/footstep/proc/prepare_step() + var/turf/simulated/floor/T = get_turf(parent) + if(!istype(T)) + return + + var/mob/living/LM = parent + if(!T.footstep || LM.lying || !LM.canmove || LM.resting || LM.buckled || LM.throwing || LM.flying || istype(LM.loc, /obj/machinery/atmospherics)) + return + + if(ishuman(LM)) + var/mob/living/carbon/human/H = LM + if(!H.get_organ(BODY_ZONE_L_LEG) && !H.get_organ(BODY_ZONE_R_LEG)) + return + if(H.m_intent == MOVE_INTENT_WALK) + return// stealth + steps++ + + if(steps >= 6) + steps = 0 + + if(steps % 2) + return + + if(steps != 0 && !has_gravity(LM, T)) // don't need to step as often when you hop around + return + return T + +/datum/component/footstep/proc/play_simplestep() + SIGNAL_HANDLER + + var/turf/simulated/floor/T = prepare_step() + if(!T) + return + if(isfile(footstep_sounds) || istext(footstep_sounds)) + playsound(T, footstep_sounds, volume, falloff_distance = 1, vary = sound_vary) + return + var/turf_footstep + switch(footstep_type) + if(FOOTSTEP_MOB_CLAW) + turf_footstep = T.clawfootstep + if(FOOTSTEP_MOB_BAREFOOT) + turf_footstep = T.barefootstep + if(FOOTSTEP_MOB_HEAVY) + turf_footstep = T.heavyfootstep + if(FOOTSTEP_MOB_SHOE) + turf_footstep = T.footstep + if(!turf_footstep) + return + playsound(T, pick(footstep_sounds[turf_footstep][1]), footstep_sounds[turf_footstep][2] * volume, TRUE, footstep_sounds[turf_footstep][3] + e_range, falloff_distance = 1, vary = sound_vary) + +/datum/component/footstep/proc/play_humanstep() + SIGNAL_HANDLER + + if(HAS_TRAIT(parent, TRAIT_SILENT_FOOTSTEPS)) + return + var/turf/simulated/floor/T = prepare_step() + if(!T) + return + var/mob/living/carbon/human/H = parent + + if((H.wear_suit?.body_parts_covered | H.w_uniform?.body_parts_covered | H.shoes?.body_parts_covered) & FEET) + // we are wearing shoes + playsound(T, pick(GLOB.footstep[T.footstep][1]), + GLOB.footstep[T.footstep][2] * volume, + TRUE, + GLOB.footstep[T.footstep][3] + e_range, falloff_distance = 1, vary = sound_vary) + else + if(H.dna.species.special_step_sounds) + playsound(T, pick(H.dna.species.special_step_sounds), 50, TRUE, falloff_distance = 1, vary = sound_vary) + else + playsound(T, pick(GLOB.barefootstep[T.barefootstep][1]), + GLOB.barefootstep[T.barefootstep][2] * volume, + TRUE, + GLOB.barefootstep[T.barefootstep][3] + e_range, falloff_distance = 1, vary = sound_vary) + + +///Prepares a footstep for machine walking +/datum/component/footstep/proc/play_simplestep_machine() + SIGNAL_HANDLER + + var/turf/simulated/floor/T = get_turf(parent) + if(!istype(T)) + return + playsound(T, footstep_sounds, 50, falloff_distance = 1, vary = sound_vary) diff --git a/code/datums/components/material_container.dm b/code/datums/components/material_container.dm index 5371384e781..38ee8ed6042 100644 --- a/code/datums/components/material_container.dm +++ b/code/datums/components/material_container.dm @@ -205,7 +205,7 @@ return amt return FALSE -/datum/component/material_container/proc/transer_amt_to(var/datum/component/material_container/T, amt, id) +/datum/component/material_container/proc/transer_amt_to(datum/component/material_container/T, amt, id) if((amt==0)||(!T)||(!id)) return FALSE if(amt<0) diff --git a/code/datums/components/squeak.dm b/code/datums/components/squeak.dm index f79439f2b3b..b8cc3edb3d6 100644 --- a/code/datums/components/squeak.dm +++ b/code/datums/components/squeak.dm @@ -12,7 +12,14 @@ var/last_use = 0 var/use_delay = 20 -/datum/component/squeak/Initialize(custom_sounds, volume_override, chance_override, step_delay_override, use_delay_override, squeak_on_move) + ///extra-range for this component's sound + var/sound_extra_range = -1 + ///when sounds start falling off for the squeak + var/sound_falloff_distance = SOUND_DEFAULT_FALLOFF_DISTANCE + ///sound exponent for squeak. Defaults to 10 as squeaking is loud and annoying enough. + var/sound_falloff_exponent = 10 + +/datum/component/squeak/Initialize(custom_sounds, volume_override, chance_override, step_delay_override, use_delay_override, squeak_on_move, extrarange, falloff_exponent, fallof_distance) if(!isatom(parent)) return COMPONENT_INCOMPATIBLE RegisterSignal(parent, list(COMSIG_ATOM_ENTERED, COMSIG_ATOM_BLOB_ACT, COMSIG_ATOM_HULK_ATTACK, COMSIG_PARENT_ATTACKBY), .proc/play_squeak) @@ -39,6 +46,12 @@ step_delay = step_delay_override if(isnum(use_delay_override)) use_delay = use_delay_override + if(isnum(extrarange)) + sound_extra_range = extrarange + if(isnum(falloff_exponent)) + sound_falloff_exponent = falloff_exponent + if(isnum(fallof_distance)) + sound_falloff_distance = fallof_distance /datum/component/squeak/proc/play_squeak() if(ismob(parent)) @@ -47,9 +60,9 @@ return if(prob(squeak_chance)) if(!override_squeak_sounds) - playsound(parent, pickweight(default_squeak_sounds), volume, 1, -1) + playsound(parent, pickweight(default_squeak_sounds), volume, TRUE, sound_extra_range, sound_falloff_exponent, falloff_distance = sound_falloff_distance) else - playsound(parent, pickweight(override_squeak_sounds), volume, 1, -1) + playsound(parent, pickweight(override_squeak_sounds), volume, TRUE, sound_extra_range, sound_falloff_exponent, falloff_distance = sound_falloff_distance) /datum/component/squeak/proc/step_squeak() if(steps > step_delay) diff --git a/code/datums/datacore.dm b/code/datums/datacore.dm index 6ee2ea3674f..b258a18b94c 100644 --- a/code/datums/datacore.dm +++ b/code/datums/datacore.dm @@ -345,7 +345,7 @@ GLOBAL_VAR_INIT(record_id_num, 1001) locked += L return -/proc/get_id_photo(mob/living/carbon/human/H, var/custom_job = null) +/proc/get_id_photo(mob/living/carbon/human/H, custom_job = null) var/icon/preview_icon = null var/obj/item/organ/external/head/head_organ = H.get_organ("head") var/obj/item/organ/internal/eyes/eyes_organ = H.get_int_organ(/obj/item/organ/internal/eyes) @@ -406,7 +406,7 @@ GLOBAL_VAR_INIT(record_id_num, 1001) var/icon/eyes_s = new/icon("icon" = 'icons/mob/human_face.dmi', "icon_state" = H.dna.species ? H.dna.species.eyes : "eyes_s") if(!eyes_organ) return - eyes_s.Blend(eyes_organ.eye_colour, ICON_ADD) + eyes_s.Blend(eyes_organ.eye_color, ICON_ADD) face_s.Blend(eyes_s, ICON_OVERLAY) var/datum/sprite_accessory/hair_style = GLOB.hair_styles_full_list[head_organ.h_style] diff --git a/code/datums/datumvars.dm b/code/datums/datumvars.dm index dc6101630bf..675b59b965c 100644 --- a/code/datums/datumvars.dm +++ b/code/datums/datumvars.dm @@ -445,7 +445,7 @@ usr << browse(html, "window=variables[refid];size=475x650") #define VV_HTML_ENCODE(thing) ( sanitize ? html_encode(thing) : thing ) -/proc/debug_variable(name, value, level, var/datum/DA = null, sanitize = TRUE) +/proc/debug_variable(name, value, level, datum/DA = null, sanitize = TRUE) var/header if(DA) if(islist(DA)) diff --git a/code/datums/diseases/advance/advance.dm b/code/datums/diseases/advance/advance.dm index f167df70dac..132ddf6ff66 100644 --- a/code/datums/diseases/advance/advance.dm +++ b/code/datums/diseases/advance/advance.dm @@ -44,7 +44,7 @@ GLOBAL_LIST_INIT(advance_cures, list( */ -/datum/disease/advance/New(var/process = 1, var/datum/disease/advance/D) +/datum/disease/advance/New(process = 1, datum/disease/advance/D) if(!istype(D)) D = null // Generate symptoms if we weren't given any. @@ -317,7 +317,7 @@ GLOBAL_LIST_INIT(advance_cures, list( */ // Mix a list of advance diseases and return the mixed result. -/proc/Advance_Mix(var/list/D_list) +/proc/Advance_Mix(list/D_list) // to_chat(world, "Mixing!!!!") diff --git a/code/datums/diseases/advance/presets.dm b/code/datums/diseases/advance/presets.dm index c1df095f9c2..0cf111358c9 100644 --- a/code/datums/diseases/advance/presets.dm +++ b/code/datums/diseases/advance/presets.dm @@ -1,6 +1,6 @@ // Cold -/datum/disease/advance/cold/New(var/process = 1, var/datum/disease/advance/D, var/copy = 0) +/datum/disease/advance/cold/New(process = 1, datum/disease/advance/D, copy = 0) if(!D) name = "Cold" symptoms = list(new/datum/symptom/sneeze) @@ -9,7 +9,7 @@ // Flu -/datum/disease/advance/flu/New(var/process = 1, var/datum/disease/advance/D, var/copy = 0) +/datum/disease/advance/flu/New(process = 1, datum/disease/advance/D, copy = 0) if(!D) name = "Flu" symptoms = list(new/datum/symptom/cough) @@ -18,7 +18,7 @@ // Voice Changing -/datum/disease/advance/voice_change/New(var/process = 1, var/datum/disease/advance/D, var/copy = 0) +/datum/disease/advance/voice_change/New(process = 1, datum/disease/advance/D, copy = 0) if(!D) name = "Epiglottis Mutation" symptoms = list(new/datum/symptom/voice_change) @@ -27,7 +27,7 @@ // Toxin Filter -/datum/disease/advance/heal/New(var/process = 1, var/datum/disease/advance/D, var/copy = 0) +/datum/disease/advance/heal/New(process = 1, datum/disease/advance/D, copy = 0) if(!D) name = "Liver Enhancer" symptoms = list(new/datum/symptom/heal) @@ -36,7 +36,7 @@ // Hullucigen -/datum/disease/advance/hullucigen/New(var/process = 1, var/datum/disease/advance/D, var/copy = 0) +/datum/disease/advance/hullucigen/New(process = 1, datum/disease/advance/D, copy = 0) if(!D) name = "Reality Impairment" symptoms = list(new/datum/symptom/hallucigen) @@ -44,7 +44,7 @@ // Sensory Restoration -/datum/disease/advance/sensory_restoration/New(var/process = 1, var/datum/disease/advance/D, var/copy = 0) +/datum/disease/advance/sensory_restoration/New(process = 1, datum/disease/advance/D, copy = 0) if(!D) name = "Reality Enhancer" symptoms = list(new/datum/symptom/sensory_restoration) diff --git a/code/datums/diseases/advance/symptoms/shedding.dm b/code/datums/diseases/advance/symptoms/shedding.dm index c3a64501759..a1f244c5566 100644 --- a/code/datums/diseases/advance/symptoms/shedding.dm +++ b/code/datums/diseases/advance/symptoms/shedding.dm @@ -31,20 +31,25 @@ BONUS to_chat(M, "[pick("Your scalp itches.", "Your skin feels flakey.")]") if(istype(M, /mob/living/carbon/human)) var/mob/living/carbon/human/H = M + if(NO_HAIR in H.dna.species.species_traits) + return // Hair can't fall out if you don't have any var/obj/item/organ/external/head/head_organ = H.get_organ("head") switch(A.stage) if(3, 4) if(!(head_organ.h_style == "Bald") && !(head_organ.h_style == "Balding Hair")) to_chat(H, "Your hair starts to fall out in clumps...") - spawn(50) - head_organ.h_style = "Balding Hair" - H.update_hair() + addtimer(CALLBACK(src, .proc/change_hair, H, head_organ, null, "Balding Hair"), 5 SECONDS) if(5) if(!(head_organ.f_style == "Shaved") || !(head_organ.h_style == "Bald")) to_chat(H, "Your hair starts to fall out in clumps...") - spawn(50) - head_organ.f_style = "Shaved" - head_organ.h_style = "Bald" - H.update_hair() - H.update_fhair() - return + addtimer(CALLBACK(src, .proc/change_hair, H, head_organ, "Shaved", "Bald"), 5 SECONDS) + +/datum/symptom/shedding/proc/change_hair(mob/living/carbon/human/H, obj/item/organ/external/head/head_organ, f_style, h_style) + if(!H || !head_organ) + return + if(f_style) + head_organ.f_style = f_style + H.update_fhair() + if(h_style) + head_organ.h_style = h_style + H.update_hair() diff --git a/code/datums/diseases/critical.dm b/code/datums/diseases/critical.dm index 575059e2150..d3c1da6e6c1 100644 --- a/code/datums/diseases/critical.dm +++ b/code/datums/diseases/critical.dm @@ -25,7 +25,7 @@ max_stages = 3 spread_flags = SPECIAL cure_text = "Saline-Glucose Solution" - cures = list("salglu_solution") + cures = list("salglu_solution", "syndicate_nanites") cure_chance = 10 viable_mobtypes = list(/mob/living/carbon/human) stage_prob = 6 @@ -86,7 +86,7 @@ max_stages = 3 spread_flags = SPECIAL cure_text = "Atropine, Epinephrine, or Heparin" - cures = list("atropine", "epinephrine", "heparin") + cures = list("atropine", "epinephrine", "heparin", "syndicate_nanites") cure_chance = 10 needs_all_cures = FALSE viable_mobtypes = list(/mob/living/carbon/human) diff --git a/code/datums/diseases/pierrot_throat.dm b/code/datums/diseases/pierrot_throat.dm index ffcdb3d0a68..bda1253a61c 100644 --- a/code/datums/diseases/pierrot_throat.dm +++ b/code/datums/diseases/pierrot_throat.dm @@ -54,7 +54,7 @@ if(3) if(prob(10)) to_chat(affected_mob, "Your thoughts are interrupted by a loud HONK!") - affected_mob << 'sound/items/airhorn.ogg' + SEND_SOUND(affected_mob, sound('sound/items/airhorn.ogg')) if(4) if(prob(5)) affected_mob.say( pick( list("HONK!", "Honk!", "Honk.", "Honk?", "Honk!!", "Honk?!", "Honk...") ) ) diff --git a/code/datums/dog_fashion.dm b/code/datums/dog_fashion.dm index ef3b76652ea..af1e3376687 100644 --- a/code/datums/dog_fashion.dm +++ b/code/datums/dog_fashion.dm @@ -31,7 +31,7 @@ if(speak_emote) D.speak_emote = speak_emote -/datum/dog_fashion/proc/get_overlay(var/dir) +/datum/dog_fashion/proc/get_overlay(dir) if(icon_file && obj_icon_state) var/image/corgI = image(icon_file, obj_icon_state, dir = dir) corgI.alpha = obj_alpha @@ -124,6 +124,10 @@ name = "Pyromancer REAL_NAME" speak = list("YAP", "Woof!", "Bark!", "AUUUUUU", "ONI SOMA!") +/datum/dog_fashion/head/black_wizard + name = "Necromancer REAL_NAME" + speak = list("YAP", "Woof!", "Bark!", "AUUUUUU") + /datum/dog_fashion/head/cardborg name = "Borgi" speak = list("Ping!","Beep!","Woof!") @@ -148,6 +152,8 @@ name = "Corgi Tech REAL_NAME" desc = "The reason your yellow gloves have chew-marks." +/datum/dog_fashion/head/softcap + /datum/dog_fashion/head/reindeer name = "REAL_NAME the red-nosed Corgi" emote_hear = list("lights the way!", "illuminates.", "yaps!") @@ -208,3 +214,38 @@ /datum/dog_fashion/head/fried_vox_empty name = "Colonel REAL_NAME" desc = "Keep away from live vox." + +/datum/dog_fashion/head/HoS + name = "Head of Security REAL_NAME" + desc = "Probably better than the last HoS." + +/datum/dog_fashion/head/beret/sec + name = "Officer REAL_NAME" + desc = "Ever-loyal, ever-vigilant." + +/datum/dog_fashion/head/bowlerhat + name = "REAL_NAME" + desc = "A sophisticated city gent." + +/datum/dog_fashion/head/surgery + name = "Nurse-in-Training REAL_NAME" + desc = "The most adorable bed-side manner ever." + +/datum/dog_fashion/head/bucket + name = "REAL_NAME" + desc = "A janitor's best friend." + +/datum/dog_fashion/head/justice_wig + name = "Arbiter REAL_NAME" + desc = "Head of the High Court of Cute." + +/datum/dog_fashion/head/wizard/magus + name = "Battlemage REAL_NAME" + +/datum/dog_fashion/head/wizard/marisa + name = "Witch REAL_NAME" + desc = "Flying broom not included." + +/datum/dog_fashion/head/roman + name = "Imperator REAL_NAME" + desc = "For the Senate and the people of Rome!" diff --git a/code/datums/helper_datums/construction_datum.dm b/code/datums/helper_datums/construction_datum.dm index 8eefe5efa0d..155bbaed8dc 100644 --- a/code/datums/helper_datums/construction_datum.dm +++ b/code/datums/helper_datums/construction_datum.dm @@ -217,7 +217,7 @@ text = replacetext(text,"{HOLDER}","[holder]") return text -/datum/construction/reversible2/custom_action(index, diff, used_atom, var/mob/user) +/datum/construction/reversible2/custom_action(index, diff, used_atom, mob/user) if(!..(index,used_atom,user)) return 0 diff --git a/code/datums/helper_datums/input.dm b/code/datums/helper_datums/input.dm index 4c3dc6a1cf4..175a730b275 100644 --- a/code/datums/helper_datums/input.dm +++ b/code/datums/helper_datums/input.dm @@ -45,7 +45,7 @@ return result // Callback function should take the result as the last argument -/datum/async_input/proc/on_close(var/datum/callback/cb) +/datum/async_input/proc/on_close(datum/callback/cb) onCloseCb = cb /datum/async_input/proc/show() diff --git a/code/datums/helper_datums/teleport.dm b/code/datums/helper_datums/teleport.dm index 4609075ddd7..49c38103d56 100644 --- a/code/datums/helper_datums/teleport.dm +++ b/code/datums/helper_datums/teleport.dm @@ -84,14 +84,12 @@ /datum/teleport/proc/playSpecials(atom/location,datum/effect_system/effect,sound) if(location) if(effect) - spawn(-1) - src = null - effect.attach(location) - effect.start() + src = null + effect.attach(location) + effect.start() if(sound) - spawn(-1) - src = null - playsound(location,sound,60,1) + src = null + playsound(location,sound,60,1) return //do the monkey dance diff --git a/code/datums/hud.dm b/code/datums/hud.dm index 50152c4873d..60fbb9c8194 100644 --- a/code/datums/hud.dm +++ b/code/datums/hud.dm @@ -21,7 +21,6 @@ GLOBAL_LIST_INIT(huds, list( \ 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_DEVIL = new/datum/atom_hud/antag/hidden(),\ ANTAG_HUD_EVENTMISC = new/datum/atom_hud/antag/hidden(),\ ANTAG_HUD_BLOB = new/datum/atom_hud/antag/hidden()\ )) diff --git a/code/datums/log_record.dm b/code/datums/log_record.dm index 2a659477b47..cf437c86dbd 100644 --- a/code/datums/log_record.dm +++ b/code/datums/log_record.dm @@ -37,7 +37,7 @@ else . = subject -/datum/log_record/proc/get_health_string(var/mob/living/L) +/datum/log_record/proc/get_health_string(mob/living/L) var/OX = L.getOxyLoss() > 50 ? "[L.getOxyLoss()]" : L.getOxyLoss() var/TX = L.getToxLoss() > 50 ? "[L.getToxLoss()]" : L.getToxLoss() var/BU = L.getFireLoss() > 50 ? "[L.getFireLoss()]" : L.getFireLoss() diff --git a/code/datums/looping_sounds/item_sounds.dm b/code/datums/looping_sounds/item_sounds.dm index ba174c706b6..54c6a196c02 100644 --- a/code/datums/looping_sounds/item_sounds.dm +++ b/code/datums/looping_sounds/item_sounds.dm @@ -35,3 +35,8 @@ #undef RAD_GEIGER_LOW #undef RAD_GEIGER_MEDIUM #undef RAD_GEIGER_HIGH + +/datum/looping_sound/tape_recorder_hiss + mid_sounds = list('sound/items/taperecorder/taperecorder_hiss_mid.ogg') + start_sound = list('sound/items/taperecorder/taperecorder_hiss_start.ogg') + volume = 10 diff --git a/code/datums/looping_sounds/looping_sound.dm b/code/datums/looping_sounds/looping_sound.dm index 62d05415b50..33fb5595c24 100644 --- a/code/datums/looping_sounds/looping_sound.dm +++ b/code/datums/looping_sounds/looping_sound.dm @@ -24,10 +24,15 @@ var/end_sound var/chance var/volume = 100 - var/muted = TRUE + var/vary = FALSE var/max_loops var/direct var/extra_range = 0 + var/falloff_exponent + var/muted = TRUE + var/falloff_distance + /// Channel of the audio, random otherwise + var/channel /datum/looping_sound/New(list/_output_atoms = list(), start_immediately = FALSE, _direct = FALSE) if(!mid_sounds) @@ -72,14 +77,16 @@ var/list/atoms_cache = output_atoms var/sound/S = sound(soundfile) if(direct) - S.channel = SSsounds.random_available_channel() - S.volume = volume + S.channel = channel || SSsounds.random_available_channel() for(var/i in 1 to atoms_cache.len) var/atom/thing = atoms_cache[i] if(direct) + if(ismob(thing)) + var/mob/M = thing + S.volume = volume * (USER_VOLUME(M, channel) || 1) SEND_SOUND(thing, S) else - playsound(thing, S, volume, extrarange = extra_range) + playsound(thing, S, volume, vary, extra_range, falloff_exponent = falloff_exponent, falloff_distance = falloff_distance, channel = channel) /datum/looping_sound/proc/get_sound(looped, _mid_sounds) if(!_mid_sounds) diff --git a/code/datums/looping_sounds/machinery_sounds.dm b/code/datums/looping_sounds/machinery_sounds.dm index ce408d22c4d..432e2709335 100644 --- a/code/datums/looping_sounds/machinery_sounds.dm +++ b/code/datums/looping_sounds/machinery_sounds.dm @@ -12,4 +12,8 @@ mid_sounds = list('sound/machines/sm/loops/calm.ogg' = 1) mid_length = 60 volume = 40 - extra_range = 10 + extra_range = 25 + falloff_exponent = 10 + falloff_distance = 5 + vary = TRUE + channel = CHANNEL_ENGINE diff --git a/code/datums/looping_sounds/weather.dm b/code/datums/looping_sounds/weather.dm index 74b21ba0809..d355bc59c14 100644 --- a/code/datums/looping_sounds/weather.dm +++ b/code/datums/looping_sounds/weather.dm @@ -8,7 +8,7 @@ start_sound = 'sound/weather/ashstorm/outside/active_start.ogg' start_length = 130 end_sound = 'sound/weather/ashstorm/outside/active_end.ogg' - volume = 40 + volume = 80 /datum/looping_sound/active_inside_ashstorm mid_sounds = list( @@ -20,7 +20,7 @@ start_sound = 'sound/weather/ashstorm/inside/active_start.ogg' start_length = 130 end_sound = 'sound/weather/ashstorm/inside/active_end.ogg' - volume = 30 + volume = 60 /datum/looping_sound/weak_outside_ashstorm mid_sounds = list( @@ -32,7 +32,7 @@ start_sound = 'sound/weather/ashstorm/outside/weak_start.ogg' start_length = 130 end_sound = 'sound/weather/ashstorm/outside/weak_end.ogg' - volume = 20 + volume = 50 /datum/looping_sound/weak_inside_ashstorm mid_sounds = list( @@ -44,4 +44,4 @@ start_sound = 'sound/weather/ashstorm/inside/weak_start.ogg' start_length = 130 end_sound = 'sound/weather/ashstorm/inside/weak_end.ogg' - volume = 10 + volume = 30 diff --git a/code/datums/mind.dm b/code/datums/mind.dm index a1f136daec6..35e0053822d 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -55,10 +55,6 @@ var/antag_hud_icon_state = null //this mind's ANTAG_HUD should have this icon_state var/datum/atom_hud/antag/antag_hud = null //this mind's antag HUD var/datum/mindslaves/som //stands for slave or master...hush.. - var/datum/devilinfo/devilinfo //Information about the devil, if any. - var/damnation_type = 0 - var/datum/mind/soulOwner //who owns the soul. Under normal circumstances, this will point to src - var/hasSoul = TRUE var/isholy = FALSE // is this person a chaplain or admin role allowed to use bibles var/isblessed = FALSE // is this person blessed by a chaplain? @@ -76,7 +72,6 @@ /datum/mind/New(new_key) key = new_key - soulOwner = src /datum/mind/Destroy() SSticker.minds -= src @@ -88,7 +83,6 @@ antag_datums = null current = null original = null - soulOwner = null return ..() /datum/mind/proc/transfer_to(mob/living/new_character) @@ -314,22 +308,6 @@ . += _memory_edit_role_enabled(ROLE_ABDUCTOR) -/datum/mind/proc/memory_edit_devil(mob/living/H) - . = _memory_edit_header("devil", list("devilagents")) - if(src in SSticker.mode.devils) - if(!devilinfo) - . += "No devilinfo found! Yell at a coder!" - else if(!devilinfo.ascendable) - . += "DEVIL|Ascendable Devil|sintouched|no" - else - . += "DEVIL|ASCENDABLE DEVIL|sintouched|no" - else if(src in SSticker.mode.sintouched) - . += "devil|Ascendable Devil|SINTOUCHED|no" - else - . += "devil|Ascendable Devil|sintouched|NO" - - . += _memory_edit_role_enabled(ROLE_DEVIL) - /datum/mind/proc/memory_edit_eventmisc(mob/living/H) . = _memory_edit_header("event", list()) if(src in SSticker.mode.eventmiscs) @@ -461,10 +439,6 @@ sections["shadowling"] = memory_edit_shadowling(H) /** Abductors **/ sections["abductor"] = memory_edit_abductor(H) - /** DEVIL ***/ - var/static/list/devils_typecache = typecacheof(list(/mob/living/carbon/human, /mob/living/carbon/true_devil, /mob/living/silicon/robot)) - if(is_type_in_typecache(current, devils_typecache)) - sections["devil"] = memory_edit_devil(H) sections["eventmisc"] = memory_edit_eventmisc(H) /** TRAITOR ***/ sections["traitor"] = memory_edit_traitor() @@ -912,7 +886,7 @@ special_role = SPECIAL_ROLE_WIZARD //ticker.mode.learn_basic_spells(current) SSticker.mode.update_wiz_icons_added(src) - SEND_SOUND(current, 'sound/ambience/antag/ragesmages.ogg') + SEND_SOUND(current, sound('sound/ambience/antag/ragesmages.ogg')) to_chat(current, "You are a Space Wizard!") current.faction = list("wizard") log_admin("[key_name(usr)] has wizarded [key_name(current)]") @@ -958,7 +932,7 @@ SSticker.mode.grant_changeling_powers(current) SSticker.mode.update_change_icons_added(src) special_role = SPECIAL_ROLE_CHANGELING - SEND_SOUND(current, 'sound/ambience/antag/ling_aler.ogg') + SEND_SOUND(current, sound('sound/ambience/antag/ling_aler.ogg')) to_chat(current, "Your powers have awoken. A flash of memory returns to us... we are a changeling!") log_admin("[key_name(usr)] has changelinged [key_name(current)]") message_admins("[key_name_admin(usr)] has changelinged [key_name_admin(current)]") @@ -1003,7 +977,7 @@ slaved.masters += src som = slaved //we MIGT want to mindslave someone special_role = SPECIAL_ROLE_VAMPIRE - SEND_SOUND(current, 'sound/ambience/antag/vampalert.ogg') + SEND_SOUND(current, sound('sound/ambience/antag/vampalert.ogg')) to_chat(current, "Your powers have awoken. Your lust for blood grows... You are a Vampire!") log_admin("[key_name(usr)] has vampired [key_name(current)]") message_admins("[key_name_admin(usr)] has vampired [key_name_admin(current)]") @@ -1104,76 +1078,6 @@ SSticker.mode.update_eventmisc_icons_added(src) message_admins("[key_name_admin(usr)] has eventantag'ed [current].") log_admin("[key_name(usr)] has eventantag'ed [current].") - else if(href_list["devil"]) - switch(href_list["devil"]) - if("clear") - if(src in SSticker.mode.devils) - if(istype(current,/mob/living/carbon/true_devil/)) - to_chat(usr,"This cannot be used on true or arch-devils.") - else - SSticker.mode.devils -= src - SSticker.mode.update_devil_icons_removed(src) - special_role = null - to_chat(current,"Your infernal link has been severed! You are no longer a devil!") - RemoveSpell(/obj/effect/proc_holder/spell/targeted/infernal_jaunt) - RemoveSpell(/obj/effect/proc_holder/spell/targeted/click/fireball/hellish) - RemoveSpell(/obj/effect/proc_holder/spell/targeted/click/summon_contract) - RemoveSpell(/obj/effect/proc_holder/spell/targeted/conjure_item/pitchfork) - RemoveSpell(/obj/effect/proc_holder/spell/targeted/conjure_item/pitchfork/greater) - RemoveSpell(/obj/effect/proc_holder/spell/targeted/conjure_item/pitchfork/ascended) - RemoveSpell(/obj/effect/proc_holder/spell/targeted/conjure_item/violin) - RemoveSpell(/obj/effect/proc_holder/spell/targeted/summon_dancefloor) - RemoveSpell(/obj/effect/proc_holder/spell/targeted/sintouch) - RemoveSpell(/obj/effect/proc_holder/spell/targeted/sintouch/ascended) - message_admins("[key_name_admin(usr)] has de-devil'ed [current].") - if(issilicon(current)) - var/mob/living/silicon/S = current - S.laws.clear_sixsixsix_laws() - devilinfo = null - log_admin("[key_name(usr)] has de-devil'ed [current].") - else if(src in SSticker.mode.sintouched) - SSticker.mode.sintouched -= src - message_admins("[key_name_admin(usr)] has de-sintouch'ed [current].") - log_admin("[key_name(usr)] has de-sintouch'ed [current].") - if("devil") - if(devilinfo) - devilinfo.ascendable = FALSE - message_admins("[key_name_admin(usr)] has made [current] unable to ascend as a devil.") - log_admin("[key_name_admin(usr)] has made [current] unable to ascend as a devil.") - return - if(!ishuman(current) && !isrobot(current)) - to_chat(usr, "This only works on humans and cyborgs!") - return - SSticker.mode.devils += src - special_role = "devil" - SSticker.mode.update_devil_icons_added(src) - SSticker.mode.finalize_devil(src, FALSE) - SSticker.mode.forge_devil_objectives(src, 2) - SSticker.mode.greet_devil(src) - message_admins("[key_name_admin(usr)] has devil'ed [current].") - log_admin("[key_name(usr)] has devil'ed [current].") - if("ascendable_devil") - if(devilinfo) - devilinfo.ascendable = TRUE - message_admins("[key_name_admin(usr)] has made [current] able to ascend as a devil.") - log_admin("[key_name_admin(usr)] has made [current] able to ascend as a devil.") - return - if(!ishuman(current) && !isrobot(current)) - to_chat(usr, "This only works on humans and cyborgs!") - return - SSticker.mode.devils += src - special_role = "devil" - SSticker.mode.update_devil_icons_added(src) - SSticker.mode.finalize_devil(src, TRUE) - SSticker.mode.forge_devil_objectives(src, 2) - SSticker.mode.greet_devil(src) - message_admins("[key_name_admin(usr)] has devil'ed [current]. The devil has been marked as ascendable.") - log_admin("[key_name(usr)] has devil'ed [current]. The devil has been marked as ascendable.") - if("sintouched") - var/mob/living/carbon/human/H = current - H.influenceSin() - message_admins("[key_name_admin(usr)] has sintouch'ed [current].") - log_admin("[key_name(usr)] has sintouch'ed [current].") else if(href_list["traitor"]) switch(href_list["traitor"]) @@ -1515,14 +1419,8 @@ else if(href_list["common"]) switch(href_list["common"]) if("undress") - if(ishuman(current)) - var/mob/living/carbon/human/H = current - // Don't "undress" organs right out of the body - for(var/obj/item/W in H.contents - (H.bodyparts | H.internal_organs)) - current.unEquip(W, 1) - else - for(var/obj/item/W in current) - current.unEquip(W, 1) + for(var/obj/item/I in current) + current.unEquip(I, TRUE) log_admin("[key_name(usr)] has unequipped [key_name(current)]") message_admins("[key_name_admin(usr)] has unequipped [key_name_admin(current)]") if("takeuplink") @@ -1811,17 +1709,6 @@ var/obj/effect/proc_holder/spell/S = X S.action.Grant(new_character) -/datum/mind/proc/disrupt_spells(delay, list/exceptions = New()) - for(var/X in spell_list) - var/obj/effect/proc_holder/spell/S = X - for(var/type in exceptions) - if(istype(S, type)) - continue - S.charge_counter = delay - spawn(0) - S.start_recharge() - S.updateButtonIcon() - /datum/mind/proc/get_ghost(even_if_they_cant_reenter) for(var/mob/dead/observer/G in GLOB.dead_mob_list) if(G.mind == src) @@ -1897,18 +1784,6 @@ to_chat(current, "You seem to have forgotten the events of the past 10 minutes or so, and your head aches a bit as if someone beat it savagely with a stick.") to_chat(current, "This means you don't remember who you were working for or what you were doing.") -/datum/mind/proc/is_revivable() //Note, this ONLY checks the mind. - if(damnation_type) - return FALSE - return TRUE - -// returns a mob to message to produce something visible for the target mind -/datum/mind/proc/messageable_mob() - if(!QDELETED(current) && current.client) - return current - else - return get_ghost(even_if_they_cant_reenter = TRUE) - //Initialisation procs /mob/proc/mind_initialize() if(mind) diff --git a/code/datums/outfits/outfit.dm b/code/datums/outfits/outfit.dm index 416c4f9c02d..1c5aba0f171 100644 --- a/code/datums/outfits/outfit.dm +++ b/code/datums/outfits/outfit.dm @@ -44,9 +44,9 @@ /datum/outfit/proc/equip_item(mob/living/carbon/human/H, path, slot) var/obj/item/I = new path(H) if(collect_not_del) - H.equip_or_collect(I, slot) + H.equip_or_collect(I, slot, TRUE) else - H.equip_to_slot_or_del(I, slot) + H.equip_to_slot_or_del(I, slot, TRUE) /datum/outfit/proc/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) //to be overriden for toggling internals, id binding, access etc @@ -115,7 +115,7 @@ H.equip_or_collect(new path(H), slot_in_backpack) for(var/path in cybernetic_implants) - var/obj/item/organ/internal/O = new path(H) + var/obj/item/organ/internal/O = new path O.insert(H) if(!H.head && toggle_helmet && istype(H.wear_suit, /obj/item/clothing/suit/space/hardsuit)) diff --git a/code/datums/outfits/outfit_admin.dm b/code/datums/outfits/outfit_admin.dm index f40d29df78c..22d61c818ec 100644 --- a/code/datums/outfits/outfit_admin.dm +++ b/code/datums/outfits/outfit_admin.dm @@ -239,9 +239,8 @@ /obj/item/implant/dust ) cybernetic_implants = list( - /obj/item/organ/internal/cyberimp/eyes/shield, /obj/item/organ/internal/cyberimp/eyes/hud/security, - /obj/item/organ/internal/cyberimp/eyes/xray, + /obj/item/organ/internal/eyes/cybernetic/xray, /obj/item/organ/internal/cyberimp/brain/anti_stun/hardened, /obj/item/organ/internal/cyberimp/chest/nutriment/plus, /obj/item/organ/internal/cyberimp/arm/combat/centcom diff --git a/code/datums/outfits/vv_outfit.dm b/code/datums/outfits/vv_outfit.dm index 95c91318bb8..a8162a04dec 100644 --- a/code/datums/outfits/vv_outfit.dm +++ b/code/datums/outfits/vv_outfit.dm @@ -125,9 +125,9 @@ // Copy cybernetic implants O.cybernetic_implants = list() - for(var/obj/item/organ/internal/CI in contents) - if(istype(CI)) - O.cybernetic_implants |= CI.type + for(var/org in internal_organs) + var/obj/item/organ/internal/aug = org + O.cybernetic_implants |= aug.type // Copy accessories var/obj/item/clothing/under/uniform_slot = get_item_by_slot(slot_w_uniform) diff --git a/code/datums/pipe_datums.dm b/code/datums/pipe_datums.dm index 8d3b0807f9c..8fd243850b3 100644 --- a/code/datums/pipe_datums.dm +++ b/code/datums/pipe_datums.dm @@ -370,13 +370,13 @@ GLOBAL_LIST_EMPTY(rpd_pipe_list) //Some pipes we don't want to be dispensable pipe_id = PIPE_DISPOSALS_JUNCTION_LEFT pipe_icon = "pipe-j2" -/proc/get_pipe_name(var/pipe_id, var/pipe_type) +/proc/get_pipe_name(pipe_id, pipe_type) for(var/datum/pipes/P in GLOB.construction_pipe_list) if(P.pipe_id == pipe_id && P.pipe_type == pipe_type) return P.pipe_name return "unknown pipe" -/proc/get_pipe_icon(var/pipe_id) +/proc/get_pipe_icon(pipe_id) for(var/datum/pipes/P in GLOB.construction_pipe_list) if(P.pipe_id == pipe_id) return P.pipe_icon diff --git a/code/datums/radio.dm b/code/datums/radio.dm index efeebc7c973..79890350f20 100644 --- a/code/datums/radio.dm +++ b/code/datums/radio.dm @@ -3,7 +3,7 @@ var/frequency as num var/list/obj/devices = list() -/datum/radio_frequency/proc/post_signal(obj/source as obj|null, datum/signal/signal, var/filter = null as text|null, var/range = null as num|null) +/datum/radio_frequency/proc/post_signal(obj/source as obj|null, datum/signal/signal, filter = null as text|null, range = null as num|null) var/turf/start_point if(range) start_point = get_turf(source) @@ -19,7 +19,7 @@ send_to_filter(source, signal, next_filter, start_point, range) //Sends a signal to all machines belonging to a given filter. Should be called by post_signal() -/datum/radio_frequency/proc/send_to_filter(obj/source, datum/signal/signal, var/filter, var/turf/start_point = null, var/range = null) +/datum/radio_frequency/proc/send_to_filter(obj/source, datum/signal/signal, filter, turf/start_point = null, range = null) if(range && !start_point) return @@ -35,7 +35,7 @@ device.receive_signal(signal, TRANSMISSION_RADIO, frequency) -/datum/radio_frequency/proc/add_listener(obj/device as obj, var/filter as text|null) +/datum/radio_frequency/proc/add_listener(obj/device as obj, filter as text|null) if(!filter) filter = RADIO_DEFAULT //log_admin("add_listener(device=[device],filter=[filter]) frequency=[frequency]") diff --git a/code/datums/ruins/lavaland.dm b/code/datums/ruins/lavaland.dm index 2143fb5ad5c..5110058674a 100644 --- a/code/datums/ruins/lavaland.dm +++ b/code/datums/ruins/lavaland.dm @@ -51,14 +51,6 @@ cost = 20 allow_duplicates = FALSE -/datum/map_template/ruin/lavaland/syndicate_base - name = "Syndicate Lava Base" - id = "lava-base" - description = "A secret base researching illegal bioweapons, it is closely guarded by an elite team of syndicate agents." - suffix = "lavaland_surface_syndicate_base1.dmm" - cost = 20 - allow_duplicates = FALSE - /datum/map_template/ruin/lavaland/free_golem name = "Free Golem Ship" id = "golem-ship" diff --git a/code/datums/ruins/space.dm b/code/datums/ruins/space.dm index c11eed424da..d05b932b5cc 100644 --- a/code/datums/ruins/space.dm +++ b/code/datums/ruins/space.dm @@ -258,6 +258,15 @@ always_place = TRUE cost = 0 +/datum/map_template/ruin/space/syndicate_space_base + name = "Syndicate Space Base" + id = "syndie-space-base" + description = "A secret base researching illegal bioweapons, it is closely guarded by an elite team of syndicate agents." + suffix = "syndie_space_base.dmm" + cost = 0 + always_place = TRUE + allow_duplicates = FALSE + /datum/map_template/ruin/space/syndiecakesfactory id = "Syndiecakes Factory" suffix = "syndiecakesfactory.dmm" diff --git a/code/datums/soullink.dm b/code/datums/soullink.dm deleted file mode 100644 index f5727f1d0d0..00000000000 --- a/code/datums/soullink.dm +++ /dev/null @@ -1,166 +0,0 @@ -/mob/living - var/list/ownedSoullinks //soullinks we are the owner of - var/list/sharedSoullinks //soullinks we are a/the sharer of - -/mob/living/Destroy() - for(var/s in ownedSoullinks) - var/datum/soullink/S = s - S.ownerDies(FALSE) - qdel(s) //If the owner is destroy()'d, the soullink is destroy()'d - ownedSoullinks = null - for(var/s in sharedSoullinks) - var/datum/soullink/S = s - S.sharerDies(FALSE) - S.removeSoulsharer(src) //If a sharer is destroy()'d, they are simply removed - sharedSoullinks = null - return ..() - -//Keeps track of a Mob->Mob (potentially Player->Player) connection -//Can be used to trigger actions on one party when events happen to another -//Eg: shared deaths -//Can be used to form a linked list of mob-hopping -//Does NOT transfer with minds -/datum/soullink - var/mob/living/soulowner - var/mob/living/soulsharer - var/id //Optional ID, for tagging and finding specific instances - -/datum/soullink/Destroy() - if(soulowner) - LAZYREMOVE(soulowner.ownedSoullinks, src) - soulowner = null - if(soulsharer) - LAZYREMOVE(soulsharer.sharedSoullinks, src) - soulsharer = null - return ..() - -/datum/soullink/proc/removeSoulsharer(mob/living/sharer) - if(soulsharer == sharer) - soulsharer = null - LAZYREMOVE(sharer.sharedSoullinks, src) - -//Used to assign variables, called primarily by soullink() -//Override this to create more unique soullinks (Eg: 1->Many relationships) -//Return TRUE/FALSE to return the soullink/null in soullink() -/datum/soullink/proc/parseArgs(mob/living/owner, mob/living/sharer) - if(!owner || !sharer) - return FALSE - soulowner = owner - soulsharer = sharer - LAZYADD(owner.ownedSoullinks, src) - LAZYADD(sharer.sharedSoullinks, src) - return TRUE - -//Runs after /living death() -//Override this for content -/datum/soullink/proc/ownerDies(gibbed, mob/living/owner) - -//Runs after /living death() -//Override this for content -/datum/soullink/proc/sharerDies(gibbed, mob/living/owner) - -//Runs after /living update_revive() -//Override this for content -/datum/soullink/proc/ownerRevives(mob/living/owner) - -//Runs after /living update_revive() -//Override this for content -/datum/soullink/proc/sharerRevives(mob/living/owner) - -//Quick-use helper -/proc/soullink(typepath, ...) - var/datum/soullink/S = new typepath() - if(S.parseArgs(arglist(args.Copy(2, 0)))) - return S - - - -///////////////// -// MULTISHARER // -///////////////// -//Abstract soullink for use with 1 Owner -> Many Sharer setups -/datum/soullink/multisharer - var/list/soulsharers - -/datum/soullink/multisharer/parseArgs(mob/living/owner, list/sharers) - if(!owner || !LAZYLEN(sharers)) - return FALSE - soulowner = owner - soulsharers = sharers - LAZYADD(owner.ownedSoullinks, src) - for(var/l in sharers) - var/mob/living/L = l - LAZYADD(L.sharedSoullinks, src) - return TRUE - -/datum/soullink/multisharer/removeSoulsharer(mob/living/sharer) - LAZYREMOVE(soulsharers, sharer) - - - -///////////////// -// SHARED FATE // -///////////////// -//When the soulowner dies, the soulsharer dies, and vice versa -//This is intended for two players(or AI) and two mobs - -/datum/soullink/sharedfate/ownerDies(gibbed, mob/living/owner) - if(soulsharer) - soulsharer.death(gibbed) - -/datum/soullink/sharedfate/sharerDies(gibbed, mob/living/sharer) - if(soulowner) - soulowner.death(gibbed) - -///////////////// -// Demon Bind // -///////////////// -//When the soulowner dies, the soulsharer dies, but NOT vice versa -//This is intended for two players(or AI) and two mobs - -/datum/soullink/oneway/ownerDies(gibbed, mob/living/owner) - if(soulsharer) - soulsharer.dust(FALSE) - -/datum/soullink/oneway/devilfriend - -///////////////// -// SHARED BODY // -///////////////// -//When the soulsharer dies, they're placed in the soulowner, who remains alive -//If the soulowner dies, the soulsharer is killed and placed into the soulowner (who is still dying) -//This one is intended for one player moving between many mobs - -/datum/soullink/sharedbody/ownerDies(gibbed, mob/living/owner) - if(soulowner && soulsharer) - if(soulsharer.mind) - soulsharer.mind.transfer_to(soulowner) - soulsharer.death(gibbed) - -/datum/soullink/sharedbody/sharerDies(gibbed, mob/living/sharer) - if(soulowner && soulsharer && soulsharer.mind) - soulsharer.mind.transfer_to(soulowner) - - - -////////////////////// -// REPLACEMENT POOL // -////////////////////// -//When the owner dies, one of the sharers is placed in the owner's body, fully healed -//Sort of a "winner-stays-on" soullink -//Gibbing ends it immediately - -/datum/soullink/multisharer/replacementpool/ownerDies(gibbed, mob/living/owner) - if(LAZYLEN(soulsharers) && !gibbed) //let's not put them in some gibs - var/list/souls = shuffle(soulsharers.Copy()) - for(var/l in souls) - var/mob/living/L = l - if(L.stat != DEAD && L.mind) - L.mind.transfer_to(soulowner) - soulowner.revive(TRUE, TRUE) - L.death(FALSE) - -//Lose your claim to the throne! -/datum/soullink/multisharer/replacementpool/sharerDies(gibbed, mob/living/sharer) - removeSoulsharer(sharer) - diff --git a/code/datums/spell.dm b/code/datums/spell.dm index d530c074a78..db668cd609a 100644 --- a/code/datums/spell.dm +++ b/code/datums/spell.dm @@ -38,7 +38,7 @@ GLOBAL_LIST_INIT(spells, typesof(/obj/effect/proc_holder/spell)) spell.remove_ranged_ability(spell.ranged_ability_user) return ..() -/obj/effect/proc_holder/proc/add_ranged_ability(mob/user, var/msg) +/obj/effect/proc_holder/proc/add_ranged_ability(mob/user, msg) if(!user || !user.client) return if(user.ranged_ability && user.ranged_ability != src) @@ -61,7 +61,7 @@ GLOBAL_LIST_INIT(spells, typesof(/obj/effect/proc_holder/spell)) if(C && ranged_mousepointer && C.mouse_pointer_icon == ranged_mousepointer) C.mouse_pointer_icon = initial(C.mouse_pointer_icon) -/obj/effect/proc_holder/proc/remove_ranged_ability(mob/user, var/msg) +/obj/effect/proc_holder/proc/remove_ranged_ability(mob/user, msg) if(!user || (user.ranged_ability && user.ranged_ability != src)) //To avoid removing the wrong ability return user.ranged_ability = null diff --git a/code/datums/spells/area_teleport.dm b/code/datums/spells/area_teleport.dm index 5986da3a412..b931bd9840f 100644 --- a/code/datums/spells/area_teleport.dm +++ b/code/datums/spells/area_teleport.dm @@ -11,7 +11,7 @@ /obj/effect/proc_holder/spell/targeted/area_teleport/perform(list/targets, recharge = 1, mob/living/user = usr) var/thearea = before_cast(targets) - if(!thearea || !cast_check(TRUE, FALSE, user)) + if(!thearea || !cast_check(FALSE, FALSE, user)) revert_cast() return invocation(thearea) diff --git a/code/datums/spells/conjure.dm b/code/datums/spells/conjure.dm index 4c15353e6c4..be716536aff 100644 --- a/code/datums/spells/conjure.dm +++ b/code/datums/spells/conjure.dm @@ -44,9 +44,7 @@ summoned_object.admin_spawned = TRUE if(summon_lifespan) - spawn(summon_lifespan) - if(summoned_object) - qdel(summoned_object) + QDEL_IN(summoned_object, summon_lifespan) else switch(charge_type) if("recharge") diff --git a/code/datums/spells/devil.dm b/code/datums/spells/devil.dm deleted file mode 100644 index f9e075bdf81..00000000000 --- a/code/datums/spells/devil.dm +++ /dev/null @@ -1,248 +0,0 @@ -/obj/effect/proc_holder/spell/targeted/conjure_item/pitchfork - name = "Summon Pitchfork" - desc = "A devil's weapon of choice. Use this to summon/unsummon your pitchfork." - item_type = /obj/item/twohanded/pitchfork/demonic - action_icon_state = "pitchfork" - action_background_icon_state = "bg_demon" - -/obj/effect/proc_holder/spell/targeted/conjure_item/pitchfork/greater - item_type = /obj/item/twohanded/pitchfork/demonic/greater - -/obj/effect/proc_holder/spell/targeted/conjure_item/pitchfork/ascended - item_type = /obj/item/twohanded/pitchfork/demonic/ascended - -/obj/effect/proc_holder/spell/targeted/conjure_item/violin - item_type = /obj/item/instrument/violin/golden - desc = "A devil's instrument of choice. Use this to summon/unsummon your golden violin." - invocation_type = "whisper" - invocation = "I ain't have this much fun since Georgia." - action_icon_state = "golden_violin" - name = "Summon golden violin" - action_background_icon_state = "bg_demon" - - -/obj/effect/proc_holder/spell/targeted/click/summon_contract - name = "Summon infernal contract" - desc = "Skip making a contract by hand, just do it by magic." - invocation_type = "whisper" - invocation = "Just sign on the dotted line." - selection_activated_message = "You prepare a detailed contract. Click on a target to summon the contract in his hands." - selection_deactivated_message = "You archive the contract for later use." - include_user = FALSE - range = 5 - auto_target_single = FALSE // Prevent an accidental contract from summoning - click_radius = -1 // Precision clicking required - allowed_type = /mob/living/carbon - clothes_req = FALSE - school = "conjuration" - charge_max = 150 - cooldown_min = 10 - action_icon_state = "spell_default" - action_background_icon_state = "bg_demon" - -/obj/effect/proc_holder/spell/targeted/click/summon_contract/cast(list/targets, mob/user = usr) - for(var/target in targets) - var/mob/living/carbon/C = target - if(C.mind && user.mind) - if(C.stat == DEAD) - if(user.drop_item()) - var/obj/item/paper/contract/infernal/revive/contract = new(user.loc, C.mind, user.mind) - user.put_in_hands(contract) - else - var/obj/item/paper/contract/infernal/contract - var/contractTypeName = input(user, "What type of contract?") in list (CONTRACT_POWER, CONTRACT_WEALTH, CONTRACT_PRESTIGE, CONTRACT_MAGIC, CONTRACT_KNOWLEDGE, CONTRACT_FRIENDSHIP) //TODO: Refactor this to be less boilerplate-y - switch(contractTypeName) - if(CONTRACT_POWER) - contract = new /obj/item/paper/contract/infernal/power(C.loc, C.mind, user.mind) - if(CONTRACT_WEALTH) - contract = new /obj/item/paper/contract/infernal/wealth(C.loc, C.mind, user.mind) - if(CONTRACT_PRESTIGE) - contract = new /obj/item/paper/contract/infernal/prestige(C.loc, C.mind, user.mind) - if(CONTRACT_MAGIC) - contract = new /obj/item/paper/contract/infernal/magic(C.loc, C.mind, user.mind) - if(CONTRACT_KNOWLEDGE) - contract = new /obj/item/paper/contract/infernal/knowledge(C.loc, C.mind, user.mind) - if(CONTRACT_FRIENDSHIP) - contract = new /obj/item/paper/contract/infernal/friendship(C.loc, C.mind, user.mind) - C.put_in_hands(contract) - else - to_chat(user,"[C] seems to not be sentient. You are unable to summon a contract for them.") - - -/obj/effect/proc_holder/spell/targeted/click/fireball/hellish - name = "Hellfire" - desc = "This spell launches hellfire at the target." - school = "evocation" - charge_max = 80 - clothes_req = FALSE - invocation = "Your very soul will catch fire!" - invocation_type = "shout" - fireball_type = /obj/item/projectile/magic/fireball/infernal - action_background_icon_state = "bg_demon" - -/obj/effect/proc_holder/spell/targeted/click/fireball/hellish/cast(list/targets, mob/living/user = usr) - add_attack_logs(user, targets, "has fired a Hellfire ball", ATKLOG_FEW) - .=..() - - -/obj/effect/proc_holder/spell/targeted/infernal_jaunt - name = "Infernal Jaunt" - desc = "Use hellfire to phase out of existence." - charge_max = 200 - clothes_req = FALSE - selection_type = "range" - range = -1 - cooldown_min = 0 - overlay = null - include_user = TRUE - action_icon_state = "jaunt" - action_background_icon_state = "bg_demon" - -/obj/effect/proc_holder/spell/targeted/infernal_jaunt/cast(list/targets, mob/living/user = usr) - if(istype(user)) - if(istype(user.loc, /obj/effect/dummy/slaughter)) - var/continuing = 0 - if(istype(get_area(user), /area/shuttle)) // Can always phase in in a shuttle. - continuing = TRUE - else - for(var/mob/living/C in orange(2, get_turf(user.loc))) //Can also phase in when nearby a potential buyer. - if (C.mind && C.mind.soulOwner == C.mind) - continuing = TRUE - break - if(continuing) - to_chat(user,"You are now phasing in.") - if(do_mob(user,user,150)) - user.infernalphasein() - else - to_chat(user,"You can only re-appear near a potential signer or on a shuttle.") - revert_cast() - return ..() - else - user.notransform = TRUE - user.fakefire() - to_chat(user,"You begin to phase back into sinful flames.") - if(do_mob(user,user,150)) - user.infernalphaseout() - else - to_chat(user,"You must remain still while exiting.") - user.ExtinguishMob() - start_recharge() - return - revert_cast() - - -/mob/living/proc/infernalphaseout() - dust_animation() - visible_message("[src] disappears in a flashfire!") - playsound(get_turf(src), 'sound/misc/enter_blood.ogg', 100, 1, -1) - var/obj/effect/dummy/slaughter/s_holder = new(loc) - ExtinguishMob() - forceMove(s_holder) - holder = s_holder - notransform = FALSE - fakefireextinguish() - -/mob/living/proc/infernalphasein() - if(notransform) - to_chat(src,"You're too busy to jaunt in.") - return 0 - fakefire() - forceMove(get_turf(src)) - visible_message("[src] appears in a firey blaze!") - playsound(get_turf(src), 'sound/misc/exit_blood.ogg', 100, 1, -1) - spawn(15) - fakefireextinguish(TRUE) - -/obj/effect/proc_holder/spell/targeted/sintouch - name = "Sin Touch" - desc = "Subtly encourage someone to sin." - charge_max = 1800 - clothes_req = FALSE - selection_type = "range" - range = 2 - cooldown_min = 0 - overlay = null - include_user = FALSE - action_icon_state = "sintouch" - action_background_icon_state = "bg_demon" - random_target = TRUE - random_target_priority = TARGET_RANDOM - max_targets = 3 - invocation = "TASTE SIN AND INDULGE!!" - invocation_type = "shout" - -/obj/effect/proc_holder/spell/targeted/sintouch/ascended - name = "Greater sin touch" - charge_max = 100 - range = 7 - max_targets = 10 - -/obj/effect/proc_holder/spell/targeted/sintouch/cast(list/targets, mob/living/user = usr) - for(var/mob/living/carbon/human/H in targets) - if(!H.mind) - continue - for(var/datum/objective/sintouched/A in H.mind.objectives) - continue - H.influenceSin() - H.Weaken(2) - H.Stun(2) - -/obj/effect/proc_holder/spell/targeted/summon_dancefloor - name = "Summon Dancefloor" - desc = "When what a Devil really needs is funk." - include_user = TRUE - range = -1 - clothes_req = FALSE - - school = "conjuration" - charge_max = 10 - cooldown_min = 50 //5 seconds, so the smoke can't be spammed - action_icon_state = "funk" - action_background_icon_state = "bg_demon" - - var/list/dancefloor_turfs - var/list/dancefloor_turfs_types - var/dancefloor_exists = FALSE -// var/datum/effect_system/smoke_spread/transparent/dancefloor_devil/smoke - - -/obj/effect/proc_holder/spell/targeted/summon_dancefloor/cast(list/targets, mob/user = usr) - LAZYINITLIST(dancefloor_turfs) - LAZYINITLIST(dancefloor_turfs_types) - -/* - if(!smoke) - smoke = new() - smoke.set_up(0, get_turf(user)) - smoke.start() -*/ - - if(dancefloor_exists) - dancefloor_exists = FALSE - for(var/i in 1 to dancefloor_turfs.len) - var/turf/T = dancefloor_turfs[i] - T.ChangeTurf(dancefloor_turfs_types[i]) - else - var/list/funky_turfs = RANGE_TURFS(1, user) - for(var/turf/T in funky_turfs) - if(T.density) - to_chat(user, "You're too close to a wall.") - return - dancefloor_exists = TRUE - var/i = 1 - dancefloor_turfs.len = funky_turfs.len - dancefloor_turfs_types.len = funky_turfs.len - for(var/t in funky_turfs) - var/turf/T = t - dancefloor_turfs[i] = T - dancefloor_turfs_types[i] = T.type - T.ChangeTurf((i % 2 == 0) ? /turf/simulated/floor/light/colour_cycle/dancefloor_a : /turf/simulated/floor/light/colour_cycle/dancefloor_b) - i++ - -/* -/datum/effect_system/smoke_spread/transparent/dancefloor_devil - effect_type = /obj/effect/particle_effect/smoke/transparent/dancefloor_devil - -/obj/effect/particle_effect/smoke/transparent/dancefloor_devil - lifetime = 2 -*/ diff --git a/code/datums/spells/devil_boons.dm b/code/datums/spells/devil_boons.dm deleted file mode 100644 index 5746fd9c2d2..00000000000 --- a/code/datums/spells/devil_boons.dm +++ /dev/null @@ -1,73 +0,0 @@ -/obj/effect/proc_holder/spell/targeted/summon_wealth - name = "Summon wealth" - desc = "The reward for selling your soul." - invocation_type = "none" - include_user = 1 - range = -1 - clothes_req = 0 - school = "conjuration" - charge_max = 100 - cooldown_min = 10 - action_icon_state = "moneybag" - - -/obj/effect/proc_holder/spell/targeted/summon_wealth/cast(list/targets, mob/user = usr) - for(var/mob/living/carbon/C in targets) - if(user.drop_item()) - var/obj/item = pick( - new /obj/item/coin/gold(user.loc), - new /obj/item/coin/diamond(user.loc), - new /obj/item/coin/silver(user.loc), - new /obj/item/stack/sheet/mineral/gold(user.loc), - new /obj/item/stack/sheet/mineral/silver(user.loc), - new /obj/item/stack/sheet/mineral/diamond(user.loc), - new /obj/item/stack/spacecash/c1000(user.loc)) - C.put_in_hands(item) - -/obj/effect/proc_holder/spell/targeted/view_range - name = "Distant vision" - desc = "The reward for selling your soul." - invocation_type = "none" - include_user = 1 - range = -1 - clothes_req = 0 - charge_max = 50 - cooldown_min = 10 - action_icon_state = "camera_jump" - var/ranges = list(7,8,9,10/*,11,12*/) - -/obj/effect/proc_holder/spell/targeted/view_range/cast(list/targets, mob/user = usr) - for(var/mob/C in targets) - if(!C.client) - continue - C.client.view = input("Select view range:", "Range", 4) in ranges - -/obj/effect/proc_holder/spell/targeted/summon_friend - name = "Summon Friend" - desc = "The reward for selling your soul." - invocation_type = "none" - include_user = 1 - range = -1 - clothes_req = 0 - charge_max = 50 - cooldown_min = 10 - action_icon_state = "sacredflame" - var/mob/living/friend - var/obj/effect/mob_spawn/human/demonic_friend/friendShell - -/obj/effect/proc_holder/spell/targeted/summon_friend/cast(list/targets, mob/user = usr) - if(!QDELETED(friend)) - to_chat(friend, "Your master has deemed you a poor friend. Your durance in hell will now resume.") - to_chat(user, "You banish your friend back to whence [friend.p_they()] came.") - friend.dust() - qdel(friendShell) - return - if(!QDELETED(friendShell)) - qdel(friendShell) - return - for(var/C in targets) - var/mob/living/L = C - friendShell = new /obj/effect/mob_spawn/human/demonic_friend(L.loc, L.mind, src) - -/obj/effect/proc_holder/spell/targeted/conjure_item/spellpacket/robeless - clothes_req = FALSE diff --git a/code/datums/spells/knock.dm b/code/datums/spells/knock.dm index e4c652ae1d3..072bbf244e2 100644 --- a/code/datums/spells/knock.dm +++ b/code/datums/spells/knock.dm @@ -16,19 +16,23 @@ /obj/effect/proc_holder/spell/aoe_turf/knock/cast(list/targets, mob/user = usr) for(var/turf/T in targets) for(var/obj/machinery/door/door in T.contents) - spawn(1) - if(istype(door,/obj/machinery/door/airlock/hatch/gamma)) - return - if(istype(door,/obj/machinery/door/airlock)) - var/obj/machinery/door/airlock/A = door - A.unlock(1) //forced because it's magic! - door.open() + INVOKE_ASYNC(src, .proc/try_open_airlock, door) for(var/obj/structure/closet/C in T.contents) - spawn(1) - if(istype(C, /obj/structure/closet/secure_closet)) - var/obj/structure/closet/secure_closet/SC = C - SC.locked = 0 - C.open() + INVOKE_ASYNC(src, .proc/try_open_closet, C) + +/obj/effect/proc_holder/spell/aoe_turf/knock/proc/try_open_airlock(obj/machinery/door/door) + if(istype(door, /obj/machinery/door/airlock/hatch/gamma)) + return + if(istype(door, /obj/machinery/door/airlock)) + var/obj/machinery/door/airlock/A = door + A.unlock(TRUE) //forced because it's magic! + door.open() + +/obj/effect/proc_holder/spell/aoe_turf/knock/proc/try_open_closet(obj/structure/closet/C) + if(istype(C, /obj/structure/closet/secure_closet)) + var/obj/structure/closet/secure_closet/SC = C + SC.locked = FALSE + C.open() /obj/effect/proc_holder/spell/aoe_turf/knock/greater name = "Greater Knock" diff --git a/code/datums/spells/shapeshift.dm b/code/datums/spells/shapeshift.dm index 7b72b5a42c4..1095457278f 100644 --- a/code/datums/spells/shapeshift.dm +++ b/code/datums/spells/shapeshift.dm @@ -73,14 +73,22 @@ /obj/effect/proc_holder/spell/targeted/shapeshift/dragon name = "Dragon Form" - desc = "Take on the shape a lesser ash drake." - invocation = "RAAAAAAAAWR!" + desc = "Take on the shape a lesser ash drake after a short delay." + invocation = "*scream" shapeshift_type = /mob/living/simple_animal/hostile/megafauna/dragon/lesser current_shapes = list(/mob/living/simple_animal/hostile/megafauna/dragon/lesser) current_casters = list() possible_shapes = list(/mob/living/simple_animal/hostile/megafauna/dragon/lesser) +/obj/effect/proc_holder/spell/targeted/shapeshift/dragon/Shapeshift(mob/living/caster) + caster.visible_message("[caster] screams in agony as bones and claws erupt out of their flesh!", + "You begin channeling the transformation.") + if(!do_after(caster, 5 SECONDS, FALSE, caster)) + to_chat(caster, "You lose concentration of the spell!") + return + return ..() + /obj/effect/proc_holder/spell/targeted/shapeshift/bats name = "Bat Form" desc = "Take on the shape of a swarm of bats." diff --git a/code/datums/spells/wizard.dm b/code/datums/spells/wizard.dm index a954f72cb13..acaeeb41487 100644 --- a/code/datums/spells/wizard.dm +++ b/code/datums/spells/wizard.dm @@ -374,7 +374,7 @@ for(var/am in thrownatoms) var/atom/movable/AM = am - if(AM == user || AM.anchored) + if(AM == user || AM.anchored || AM.move_resist == INFINITY) continue throwtarget = get_edge_target_turf(user, get_dir(user, get_step_away(AM, user))) diff --git a/code/datums/status_effects/buffs.dm b/code/datums/status_effects/buffs.dm index 0ee5aa6c427..2ee2ac615fa 100644 --- a/code/datums/status_effects/buffs.dm +++ b/code/datums/status_effects/buffs.dm @@ -57,14 +57,12 @@ ADD_TRAIT(owner, TRAIT_IGNOREDAMAGESLOWDOWN, "blooddrunk") if(ishuman(owner)) var/mob/living/carbon/human/H = owner - for(var/X in H.bodyparts) - var/obj/item/organ/external/BP = X - BP.brute_mod *= 0.1 - BP.burn_mod *= 0.1 - H.dna.species.tox_mod *= 0.1 - H.dna.species.oxy_mod *= 0.1 - H.dna.species.clone_mod *= 0.1 - H.dna.species.stamina_mod *= 0.1 + H.physiology.brute_mod *= 0.1 + H.physiology.burn_mod *= 0.1 + H.physiology.tox_mod *= 0.1 + H.physiology.oxy_mod *= 0.1 + H.physiology.clone_mod *= 0.1 + H.physiology.stamina_mod *= 0.1 add_attack_logs(owner, owner, "gained blood-drunk stun immunity", ATKLOG_ALL) owner.add_stun_absorption("blooddrunk", INFINITY, 4) owner.playsound_local(get_turf(owner), 'sound/effects/singlebeat.ogg', 40, TRUE, use_reverb = FALSE) @@ -72,14 +70,12 @@ /datum/status_effect/blooddrunk/on_remove() if(ishuman(owner)) var/mob/living/carbon/human/H = owner - for(var/X in H.bodyparts) - var/obj/item/organ/external/BP = X - BP.brute_mod *= 10 - BP.burn_mod *= 10 - H.dna.species.tox_mod *= 10 - H.dna.species.oxy_mod *= 10 - H.dna.species.clone_mod *= 10 - H.dna.species.stamina_mod *= 10 + H.physiology.brute_mod *= 10 + H.physiology.burn_mod *= 10 + H.physiology.tox_mod *= 10 + H.physiology.oxy_mod *= 10 + H.physiology.clone_mod *= 10 + H.physiology.stamina_mod *= 10 add_attack_logs(owner, owner, "lost blood-drunk stun immunity", ATKLOG_ALL) REMOVE_TRAIT(owner, TRAIT_IGNOREDAMAGESLOWDOWN, "blooddrunk") if(islist(owner.stun_absorption) && owner.stun_absorption["blooddrunk"]) diff --git a/code/datums/status_effects/status_effect.dm b/code/datums/status_effects/status_effect.dm index 2580b1c9935..fa392b4082e 100644 --- a/code/datums/status_effects/status_effect.dm +++ b/code/datums/status_effects/status_effect.dm @@ -67,6 +67,9 @@ owner = null qdel(src) +/datum/status_effect/proc/before_remove() //! Called before being removed; returning FALSE will cancel removal + return TRUE + /datum/status_effect/proc/refresh() var/original_duration = initial(duration) if(original_duration == -1) @@ -118,12 +121,13 @@ S1 = new effect(arguments) . = S1 -/mob/living/proc/remove_status_effect(effect) //removes all of a given status effect from this mob, returning TRUE if at least one was removed +/mob/living/proc/remove_status_effect(effect, ...) //removes all of a given status effect from this mob, returning TRUE if at least one was removed . = FALSE + var/list/arguments = args.Copy(2) if(status_effects) var/datum/status_effect/S1 = effect for(var/datum/status_effect/S in status_effects) - if(initial(S1.id) == S.id) + if(initial(S1.id) == S.id && S.before_remove(arguments)) qdel(S) . = TRUE @@ -205,6 +209,8 @@ if(stacks >= stack_threshold && !threshold_crossed) //threshold_crossed check prevents threshold effect from occuring if changing from above threshold to still above threshold threshold_crossed = TRUE on_threshold_cross() + if(consumed_on_threshold) + return else if(stacks < stack_threshold && threshold_crossed) threshold_crossed = FALSE //resets threshold effect if we fall below threshold so threshold effect can trigger again on_threshold_drop() @@ -220,8 +226,9 @@ qdel(src) //deletes status if stacks fall under one /datum/status_effect/stacking/on_creation(mob/living/new_owner, stacks_to_apply) - ..() - add_stacks(stacks_to_apply) + . = ..() + if(.) + add_stacks(stacks_to_apply) /datum/status_effect/stacking/on_apply() if(!can_have_status()) @@ -246,3 +253,22 @@ owner.underlays -= status_underlay QDEL_NULL(status_overlay) return ..() + +/// Status effect from multiple sources, when all sources are removed, so is the effect +/datum/status_effect/grouped + status_type = STATUS_EFFECT_MULTIPLE //! Adds itself to sources and destroys itself if one exists already, there are never multiple + var/list/sources = list() + +/datum/status_effect/grouped/on_creation(mob/living/new_owner, source) + var/datum/status_effect/grouped/existing = new_owner.has_status_effect(type) + if(existing) + existing.sources |= source + qdel(src) + return FALSE + else + sources |= source + return ..() + +/datum/status_effect/grouped/before_remove(source) + sources -= source + return !length(sources) diff --git a/code/datums/supplypacks.dm b/code/datums/supplypacks.dm index 6a25e22b985..3a856a8d130 100644 --- a/code/datums/supplypacks.dm +++ b/code/datums/supplypacks.dm @@ -18,7 +18,7 @@ GLOBAL_LIST_INIT(all_supply_groups, list(SUPPLY_EMERGENCY,SUPPLY_SECURITY,SUPPLY_ENGINEER,SUPPLY_MEDICAL,SUPPLY_SCIENCE,SUPPLY_ORGANIC,SUPPLY_MATERIALS,SUPPLY_MISC,SUPPLY_VEND)) -/proc/get_supply_group_name(var/cat) +/proc/get_supply_group_name(cat) switch(cat) if(SUPPLY_EMERGENCY) return "Emergency" diff --git a/code/datums/uplink_item.dm b/code/datums/uplink_item.dm index 1066bf972c1..61c1e8df625 100644 --- a/code/datums/uplink_item.dm +++ b/code/datums/uplink_item.dm @@ -1,6 +1,6 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item)) -/proc/get_uplink_items(var/job = null) +/proc/get_uplink_items(job = null) var/list/uplink_items = list() var/list/sales_items = list() var/newreference = 1 @@ -82,7 +82,7 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item)) var/refund_path = null // Alternative path for refunds, in case the item purchased isn't what is actually refunded (ie: holoparasites). var/refund_amount // specified refund amount in case there needs to be a TC penalty for refunds. -/datum/uplink_item/proc/spawn_item(var/turf/loc, var/obj/item/uplink/U) +/datum/uplink_item/proc/spawn_item(turf/loc, obj/item/uplink/U) if(hijack_only && !(usr.mind.special_role == SPECIAL_ROLE_NUKEOPS))//nukies get items that regular traitors only get with hijack. If a hijack-only item is not for nukies, then exclude it via the gamemode list. if(!(locate(/datum/objective/hijack) in usr.mind.objectives)) @@ -103,7 +103,7 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item)) desc = replacetext(initial(temp.desc), "\n", "
") return desc -/datum/uplink_item/proc/buy(var/obj/item/uplink/hidden/U, var/mob/user) +/datum/uplink_item/proc/buy(obj/item/uplink/hidden/U, mob/user) if(!istype(U)) return 0 @@ -952,6 +952,14 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item)) item = /obj/item/toy/carpplushie/dehy_carp cost = 2 +/datum/uplink_item/stealthy_weapons/combat_plus + name = "Combat Gloves Plus" + desc = "Combat gloves with installed nanochips that teach you Krav Maga when worn, great as a cheap backup weapon. Warning, the nanochips will override any other fighting styles such as CQC." + reference = "CGP" + item = /obj/item/clothing/gloves/color/black/krav_maga/combat + cost = 5 + gamemodes = list(/datum/game_mode/nuclear) + // GRENADES AND EXPLOSIVES /datum/uplink_item/explosives @@ -1556,43 +1564,32 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item)) surplus = 0 gamemodes = list(/datum/game_mode/nuclear) -/datum/uplink_item/cyber_implants/spawn_item(turf/loc, obj/item/uplink/U) - if(item) - if(findtext(item, /obj/item/organ/internal/cyberimp)) - U.uses -= max(cost, 0) - U.used_TC += cost - SSblackbox.record_feedback("nested tally", "traitor_uplink_items_bought", 1, list("[initial(name)]", "[cost]")) //this one and the line before copypasted because snowflaek code - return new /obj/item/storage/box/cyber_implants(loc, item) - else - return ..() - /datum/uplink_item/cyber_implants/thermals name = "Thermal Vision Implant" - desc = "These cybernetic eyes will give you thermal vision. Comes with an automated implanting tool." + desc = "These cybernetic eyes will give you thermal vision. Comes with an autosurgeon." reference = "CIT" - item = /obj/item/organ/internal/cyberimp/eyes/thermals + item = /obj/item/autosurgeon/organ/syndicate/thermal_eyes cost = 8 /datum/uplink_item/cyber_implants/xray name = "X-Ray Vision Implant" - desc = "These cybernetic eyes will give you X-ray vision. Comes with an automated implanting tool." + desc = "These cybernetic eyes will give you X-ray vision. Comes with an autosurgeon." reference = "CIX" - item = /obj/item/organ/internal/cyberimp/eyes/xray + item = /obj/item/autosurgeon/organ/syndicate/xray_eyes cost = 10 /datum/uplink_item/cyber_implants/antistun name = "Hardened CNS Rebooter Implant" - desc = "This implant will help you get back up on your feet faster after being stunned. It is invulnerable to EMPs. \ - Comes with an automated implanting tool." + desc = "This implant will help you get back up on your feet faster after being stunned. It is immune to EMP attacks. Comes with an autosurgeon." reference = "CIAS" - item = /obj/item/organ/internal/cyberimp/brain/anti_stun/hardened + item = /obj/item/autosurgeon/organ/syndicate/anti_stun cost = 12 /datum/uplink_item/cyber_implants/reviver name = "Hardened Reviver Implant" - desc = "This implant will attempt to revive you if you lose consciousness. It is invulnerable to EMPs. Comes with an automated implanting tool." + desc = "This implant will attempt to revive and heal you if you lose consciousness. It is immune to EMP attacks. Comes with an autosurgeon." reference = "CIR" - item = /obj/item/organ/internal/cyberimp/chest/reviver/hardened + item = /obj/item/autosurgeon/organ/syndicate/reviver cost = 8 // POINTLESS BADASSERY @@ -1674,10 +1671,9 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item)) /datum/uplink_item/bundles_TC/cyber_implants name = "Cybernetic Implants Bundle" - desc = "A random selection of cybernetic implants. Guaranteed 5 high quality implants. \ - Comes with an automated implanting tool." + desc = "A random selection of cybernetic implants. Guaranteed 5 high quality implants. Comes with an autosurgeon." reference = "CIB" - item = /obj/item/storage/box/cyber_implants/bundle + item = /obj/item/storage/box/cyber_implants cost = 40 gamemodes = list(/datum/game_mode/nuclear) diff --git a/code/datums/vision_override.dm b/code/datums/vision_override.dm index 86aab6d65ec..e110daafd53 100644 --- a/code/datums/vision_override.dm +++ b/code/datums/vision_override.dm @@ -4,15 +4,7 @@ var/sight_flags = 0 var/see_in_dark = 0 var/lighting_alpha - - var/light_sensitive = 0 /datum/vision_override/nightvision see_in_dark = 8 lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE - -/datum/vision_override/nightvision/thermals - sight_flags = SEE_MOBS - -/datum/vision_override/nightvision/thermals/ling_augmented_eyesight - light_sensitive = 1 diff --git a/code/defines/procs/announce.dm b/code/defines/procs/announce.dm index ba5320cfdb3..b62f0f8763b 100644 --- a/code/defines/procs/announce.dm +++ b/code/defines/procs/announce.dm @@ -14,37 +14,37 @@ GLOBAL_DATUM_INIT(event_announcement, /datum/announcement/priority/command/event var/admin_announcement = 0 // Admin announcements are received regardless of being in range of a radio, unless you're in the lobby to prevent metagaming var/language = "Galactic Common" -/datum/announcement/New(var/do_log = 0, var/new_sound = null, var/do_newscast = 0) +/datum/announcement/New(do_log = 0, new_sound = null, do_newscast = 0) sound = new_sound log = do_log newscast = do_newscast -/datum/announcement/minor/New(var/do_log = 0, var/new_sound = sound('sound/misc/notice2.ogg'), var/do_newscast = 0) +/datum/announcement/minor/New(do_log = 0, new_sound = sound('sound/misc/notice2.ogg'), do_newscast = 0) ..(do_log, new_sound, do_newscast) title = "Attention" announcement_type = "Minor Announcement" -/datum/announcement/priority/New(var/do_log = 1, var/new_sound = sound('sound/misc/notice2.ogg'), var/do_newscast = 0) +/datum/announcement/priority/New(do_log = 1, new_sound = sound('sound/misc/notice2.ogg'), do_newscast = 0) ..(do_log, new_sound, do_newscast) title = "Priority Announcement" announcement_type = "Priority Announcement" -/datum/announcement/priority/command/New(var/do_log = 1, var/new_sound = sound('sound/misc/notice2.ogg'), var/do_newscast = 0) +/datum/announcement/priority/command/New(do_log = 1, new_sound = sound('sound/misc/notice2.ogg'), do_newscast = 0) ..(do_log, new_sound, do_newscast) admin_announcement = 1 title = "[command_name()] Update" announcement_type = "[command_name()] Update" -/datum/announcement/priority/command/event/New(var/do_log = 1, var/new_sound = sound('sound/misc/notice2.ogg'), var/do_newscast = 0) +/datum/announcement/priority/command/event/New(do_log = 1, new_sound = sound('sound/misc/notice2.ogg'), do_newscast = 0) ..(do_log, new_sound, do_newscast) admin_announcement = 0 -/datum/announcement/priority/security/New(var/do_log = 1, var/new_sound = sound('sound/misc/notice2.ogg'), var/do_newscast = 0) +/datum/announcement/priority/security/New(do_log = 1, new_sound = sound('sound/misc/notice2.ogg'), do_newscast = 0) ..(do_log, new_sound, do_newscast) title = "Security Announcement" announcement_type = "Security Announcement" -/datum/announcement/proc/Announce(var/message as text, var/new_title = "", var/new_sound = null, var/do_newscast = newscast, var/msg_sanitized = 0, var/from, var/msg_language) +/datum/announcement/proc/Announce(message as text, new_title = "", new_sound = null, do_newscast = newscast, msg_sanitized = 0, from, msg_language) if(!message) return @@ -76,7 +76,7 @@ GLOBAL_DATUM_INIT(event_announcement, /datum/announcement/priority/command/event Sound(message_sound, combined_receivers[1] + combined_receivers[2]) Log(message, message_title) -/datum/announcement/proc/Get_Receivers(var/datum/language/message_language) +/datum/announcement/proc/Get_Receivers(datum/language/message_language) var/list/receivers = list() var/list/garbled_receivers = list() @@ -161,17 +161,17 @@ GLOBAL_DATUM_INIT(event_announcement, /datum/announcement/priority/command/event news.can_be_redacted = 0 announce_newscaster_news(news) -/datum/announcement/proc/Sound(var/message_sound, var/receivers) +/datum/announcement/proc/Sound(message_sound, receivers) if(!message_sound) return for(var/mob/M in receivers) - M << message_sound + SEND_SOUND(M, message_sound) /datum/announcement/proc/Log(message as text, message_title as text) if(log) log_game("[key_name(usr)] has made \a [announcement_type]: [message_title] - [message] - [announcer]") message_admins("[key_name_admin(usr)] has made \a [announcement_type].", 1) -/proc/GetNameAndAssignmentFromId(var/obj/item/card/id/I) +/proc/GetNameAndAssignmentFromId(obj/item/card/id/I) // Format currently matches that of newscaster feeds: Registered Name (Assigned Rank) return I.assignment ? "[I.registered_name] ([I.assignment])" : I.registered_name diff --git a/code/defines/procs/radio.dm b/code/defines/procs/radio.dm index 7c0dc4de7f8..c0f7716557e 100644 --- a/code/defines/procs/radio.dm +++ b/code/defines/procs/radio.dm @@ -3,7 +3,7 @@ #define TELECOMMS_RECEPTION_RECEIVER 2 #define TELECOMMS_RECEPTION_BOTH 3 -/proc/get_frequency_name(var/display_freq) +/proc/get_frequency_name(display_freq) var/freq_text // the name of the channel diff --git a/code/defines/procs/records.dm b/code/defines/procs/records.dm index a74680ec578..277dae36f1a 100644 --- a/code/defines/procs/records.dm +++ b/code/defines/procs/records.dm @@ -25,7 +25,7 @@ qdel(dummy) return G -/proc/CreateSecurityRecord(var/name as text, var/id as text) +/proc/CreateSecurityRecord(name as text, id as text) var/datum/data/record/R = new /datum/data/record() R.fields["name"] = name R.fields["id"] = id diff --git a/code/game/area/areas.dm b/code/game/area/areas.dm index da72cea50df..6565779e14b 100644 --- a/code/game/area/areas.dm +++ b/code/game/area/areas.dm @@ -70,6 +70,11 @@ ///Used to decide what kind of reverb the area makes sound have var/sound_environment = SOUND_ENVIRONMENT_NONE + ///Used to decide what the minimum time between ambience is + var/min_ambience_cooldown = 30 SECONDS + ///Used to decide what the maximum time between ambience is + var/max_ambience_cooldown = 90 SECONDS + /area/Initialize(mapload) GLOB.all_areas += src icon_state = "" @@ -370,7 +375,7 @@ #define ENVIRON 3 */ -/area/proc/powered(var/chan) // return true if the area has power to given channel +/area/proc/powered(chan) // return true if the area has power to given channel if(!requires_power) return 1 @@ -400,7 +405,7 @@ SEND_SIGNAL(src, COMSIG_AREA_POWER_CHANGE) updateicon() -/area/proc/usage(var/chan) +/area/proc/usage(chan) var/used = 0 switch(chan) if(LIGHT) @@ -434,7 +439,7 @@ used_light = 0 used_environ = 0 -/area/proc/use_power(var/amount, var/chan) +/area/proc/use_power(amount, chan) switch(chan) if(EQUIP) used_equip += amount @@ -443,7 +448,7 @@ if(ENVIRON) used_environ += amount -/area/proc/use_battery_power(var/amount, var/chan) +/area/proc/use_battery_power(amount, chan) switch(chan) if(EQUIP) used_equip += amount @@ -476,35 +481,21 @@ if((oldarea.has_gravity == 0) && (newarea.has_gravity == 1) && (L.m_intent == MOVE_INTENT_RUN)) // Being ready when you change areas gives you a chance to avoid falling all together. thunk(L) - // Ambience goes down here -- make sure to list each area seperately for ease of adding things in later, thanks! Note: areas adjacent to each other should have the same sounds to prevent cutoff when possible.- LastyScratch - if(L && L.client && !L.client.ambience_playing && (L.client.prefs.sound & SOUND_BUZZ)) //split off the white noise from the rest of the ambience because of annoyance complaints - Kluys + //Ship ambience just loops if turned on. + if(L && L.client && !L.client.ambience_playing && (L.client.prefs.sound & SOUND_BUZZ)) L.client.ambience_playing = TRUE - SEND_SOUND(L, sound('sound/ambience/shipambience.ogg', repeat = TRUE, wait = FALSE, volume = 35, channel = CHANNEL_BUZZ)) + SEND_SOUND(L, sound('sound/ambience/shipambience.ogg', repeat = TRUE, wait = FALSE, volume = 35 * L.client.prefs.get_channel_volume(CHANNEL_BUZZ), channel = CHANNEL_BUZZ)) else if(L && L.client && !(L.client.prefs.sound & SOUND_BUZZ)) L.client.ambience_playing = FALSE - if(prob(35) && L && L.client && (L.client.prefs.sound & SOUND_AMBIENCE)) - var/sound = pick(ambientsounds) - - if(!L.client.played) - SEND_SOUND(L, sound(sound, repeat = FALSE, wait = FALSE, volume = 25, channel = CHANNEL_AMBIENCE)) - L.client.played = TRUE - addtimer(CALLBACK(L.client, /client/proc/ResetAmbiencePlayed), 600) - -/** - * Reset the played var to false on the client - */ -/client/proc/ResetAmbiencePlayed() - played = FALSE - -/area/proc/gravitychange(var/gravitystate = 0, var/area/A) +/area/proc/gravitychange(gravitystate = 0, area/A) A.has_gravity = gravitystate if(gravitystate) for(var/mob/living/carbon/human/M in A) thunk(M) -/area/proc/thunk(var/mob/living/carbon/human/M) +/area/proc/thunk(mob/living/carbon/human/M) if(istype(M,/mob/living/carbon/human/)) // Only humans can wear magboots, so we give them a chance to. if(istype(M.shoes, /obj/item/clothing/shoes/magboots) && (M.shoes.flags & NOSLIP)) return diff --git a/code/game/area/areas/depot-areas.dm b/code/game/area/areas/depot-areas.dm index 37b45d0b0b1..ec1ba64deec 100644 --- a/code/game/area/areas/depot-areas.dm +++ b/code/game/area/areas/depot-areas.dm @@ -314,7 +314,7 @@ for(var/obj/machinery/computer/syndicate_depot/C in src) C.security_lockout = FALSE -/area/syndicate_depot/core/proc/set_emergency_access(var/openaccess) +/area/syndicate_depot/core/proc/set_emergency_access(openaccess) for(var/obj/machinery/door/airlock/A in src) if(istype(A, /obj/machinery/door/airlock/hatch/syndicate/vault)) continue @@ -341,7 +341,7 @@ receivers |= M for(var/mob/R in receivers) to_chat(R, msg_text) - R << sound('sound/misc/notice1.ogg') + SEND_SOUND(R, sound('sound/misc/notice1.ogg')) /area/syndicate_depot/core/proc/shields_up() if(shield_list.len) diff --git a/code/game/area/areas/mining.dm b/code/game/area/areas/mining.dm index a1de206a0db..59bbcdb35da 100644 --- a/code/game/area/areas/mining.dm +++ b/code/game/area/areas/mining.dm @@ -17,6 +17,8 @@ ambientsounds = MINING_SOUNDS flags = NONE sound_environment = SOUND_AREA_STANDARD_STATION + min_ambience_cooldown = 70 SECONDS + max_ambience_cooldown = 220 SECONDS /area/mine/dangerous/explored/golem name = "Small Asteroid" @@ -33,6 +35,8 @@ outdoors = TRUE ambientsounds = MINING_SOUNDS flags = NONE + min_ambience_cooldown = 70 SECONDS + max_ambience_cooldown = 220 SECONDS /area/mine/lobby name = "Mining Station" @@ -103,6 +107,8 @@ power_light = FALSE requires_power = TRUE ambientsounds = MINING_SOUNDS + min_ambience_cooldown = 70 SECONDS + max_ambience_cooldown = 220 SECONDS /area/lavaland/underground name = "Lavaland Caves" @@ -114,6 +120,8 @@ power_equip = FALSE power_light = FALSE ambientsounds = MINING_SOUNDS + min_ambience_cooldown = 70 SECONDS + max_ambience_cooldown = 220 SECONDS /area/lavaland/surface/outdoors name = "Lavaland Wastes" diff --git a/code/game/area/areas/ruins/lavaland.dm b/code/game/area/areas/ruins/lavaland.dm index 534ea820006..c267bbeffae 100644 --- a/code/game/area/areas/ruins/lavaland.dm +++ b/code/game/area/areas/ruins/lavaland.dm @@ -37,45 +37,6 @@ /area/ruin/powered/seedvault icon_state = "dk_yellow" -/area/ruin/unpowered/syndicate_lava_base - name = "Secret Base" - icon_state = "dk_yellow" - ambientsounds = HIGHSEC_SOUNDS - report_alerts = FALSE - hide_attacklogs = TRUE - -/area/ruin/unpowered/syndicate_lava_base/engineering - name = "Syndicate Lavaland Engineering" - -/area/ruin/unpowered/syndicate_lava_base/medbay - name = "Syndicate Lavaland Medbay" - -/area/ruin/unpowered/syndicate_lava_base/arrivals - name = "Syndicate Lavaland Arrivals" - -/area/ruin/unpowered/syndicate_lava_base/bar - name = "Syndicate Lavaland Bar" - -/area/ruin/unpowered/syndicate_lava_base/main - name = "Syndicate Lavaland Primary Hallway" - -/area/ruin/unpowered/syndicate_lava_base/cargo - name = "Syndicate Lavaland Cargo Bay" - -/area/ruin/unpowered/syndicate_lava_base/chemistry - name = "Syndicate Lavaland Chemistry" - -/area/ruin/unpowered/syndicate_lava_base/virology - name = "Syndicate Lavaland Virology" - -/area/ruin/unpowered/syndicate_lava_base/testlab - name = "Syndicate Lavaland Experimentation Lab" - -/area/ruin/unpowered/syndicate_lava_base/dormitories - name = "Syndicate Lavaland Dormitories" - -/area/ruin/unpowered/syndicate_lava_base/telecomms - name = "Syndicate Lavaland Telecommunications" //Xeno Nest diff --git a/code/game/area/areas/ruins/syndicate_space_base.dm b/code/game/area/areas/ruins/syndicate_space_base.dm new file mode 100644 index 00000000000..f26eb56fa86 --- /dev/null +++ b/code/game/area/areas/ruins/syndicate_space_base.dm @@ -0,0 +1,50 @@ +/area/ruin/unpowered/syndicate_space_base + name = "Secret Base" + icon_state = "dk_yellow" + ambientsounds = HIGHSEC_SOUNDS + report_alerts = FALSE + hide_attacklogs = TRUE + +/area/ruin/unpowered/syndicate_space_base/engineering + name = "Syndicate Space Base Engineering" + icon_state = "engine" + +/area/ruin/unpowered/syndicate_space_base/medbay + name = "Syndicate Space Base Medbay" + icon_state = "medbay2" + +/area/ruin/unpowered/syndicate_space_base/arrivals + name = "Syndicate Space Base Arrivals" + icon_state = "teleporter" + + +/area/ruin/unpowered/syndicate_space_base/bar + name = "Syndicate Space Base Bar" + icon_state = "bar" + +/area/ruin/unpowered/syndicate_space_base/main + name = "Syndicate Space Base Primary Hallway" + +/area/ruin/unpowered/syndicate_space_base/cargo + name = "Syndicate Space Base Cargo Bay" + icon_state = "storage" + +/area/ruin/unpowered/syndicate_space_base/chemistry + name = "Syndicate Space Base Chemistry" + icon_state = "chem" + +/area/ruin/unpowered/syndicate_space_base/virology + name = "Syndicate Space Base Virology" + icon_state = "virology" + +/area/ruin/unpowered/syndicate_space_base/testlab + name = "Syndicate Space Base Experimentation Lab" + icon_state = "toxtest" + +/area/ruin/unpowered/syndicate_space_base/dormitories + name = "Syndicate Space Base Dormitories" + icon_state = "dorms" + +/area/ruin/unpowered/syndicate_space_base/telecomms + name = "Syndicate Space Base Telecommunications" + icon_state = "tcomsatcham" diff --git a/code/game/area/ss13_areas.dm b/code/game/area/ss13_areas.dm index 2879bedafdc..736a6d84447 100644 --- a/code/game/area/ss13_areas.dm +++ b/code/game/area/ss13_areas.dm @@ -394,6 +394,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station requires_power = FALSE dynamic_lighting = DYNAMIC_LIGHTING_DISABLED has_gravity = TRUE + ambientsounds = null // No ambient sounds in the lobby // === end remove @@ -480,6 +481,8 @@ NOTE: there are two lists of areas in the end of this file: centcom and station dynamic_lighting = DYNAMIC_LIGHTING_FORCED ambientsounds = MINING_SOUNDS sound_environment = SOUND_AREA_ASTEROID + min_ambience_cooldown = 70 SECONDS + max_ambience_cooldown = 220 SECONDS /area/asteroid/cave // -- TLE name = "\improper Asteroid - Underground" @@ -1239,6 +1242,8 @@ NOTE: there are two lists of areas in the end of this file: centcom and station /area/medical ambientsounds = MEDICAL_SOUNDS sound_environment = SOUND_AREA_STANDARD_STATION + min_ambience_cooldown = 90 SECONDS + max_ambience_cooldown = 180 SECONDS /area/medical/medbay name = "\improper Medbay" diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm index 6837a1a564e..583daa7ade3 100644 --- a/code/game/atoms_movable.dm +++ b/code/game/atoms_movable.dm @@ -132,7 +132,7 @@ // Used in shuttle movement and AI eye stuff. // Primarily used to notify objects being moved by a shuttle/bluespace fuckup. -/atom/movable/proc/setLoc(var/T, var/teleported=0) +/atom/movable/proc/setLoc(T, teleported=0) loc = T /atom/movable/Move(atom/newloc, direct = 0, movetime) @@ -300,6 +300,7 @@ if(client) reset_perspective(destination) update_canmove() //if the mob was asleep inside a container and then got forceMoved out we need to make them fall. + update_runechat_msg_location() //Called whenever an object moves and by mobs when they attempt to move themselves through space @@ -307,7 +308,7 @@ //Return 0 to have src start/keep drifting in a no-grav area and 1 to stop/not start drifting //Mobs should return 1 if they should be able to move of their own volition, see client/Move() in mob_movement.dm //movement_dir == 0 when stopping or any dir when trying to move -/atom/movable/proc/Process_Spacemove(var/movement_dir = 0) +/atom/movable/proc/Process_Spacemove(movement_dir = 0) if(has_gravity(src)) return 1 @@ -511,20 +512,26 @@ return //don't do an animation if attacking self var/pixel_x_diff = 0 var/pixel_y_diff = 0 + var/turn_dir = 1 var/direction = get_dir(src, A) if(direction & NORTH) pixel_y_diff = 8 + turn_dir = prob(50) ? -1 : 1 else if(direction & SOUTH) pixel_y_diff = -8 + turn_dir = prob(50) ? -1 : 1 if(direction & EAST) pixel_x_diff = 8 else if(direction & WEST) pixel_x_diff = -8 + turn_dir = -1 - animate(src, pixel_x = pixel_x + pixel_x_diff, pixel_y = pixel_y + pixel_y_diff, time = 2) - animate(pixel_x = pixel_x - pixel_x_diff, pixel_y = pixel_y - pixel_y_diff, time = 2) + var/matrix/initial_transform = matrix(transform) + var/matrix/rotated_transform = transform.Turn(5 * turn_dir) + animate(src, pixel_x = pixel_x + pixel_x_diff, pixel_y = pixel_y + pixel_y_diff, transform = rotated_transform, time = 0.1 SECONDS, easing = CUBIC_EASING) + animate(pixel_x = pixel_x - pixel_x_diff, pixel_y = pixel_y - pixel_y_diff, transform = initial_transform, time = 0.2 SECONDS, easing = SINE_EASING) /atom/movable/proc/do_item_attack_animation(atom/A, visual_effect_icon, obj/item/used_item) var/image/I @@ -563,14 +570,17 @@ if(M.client && M.client.prefs.toggles2 & PREFTOGGLE_2_ITEMATTACK) viewing |= M.client - flick_overlay(I, viewing, 5) // 5 ticks/half a second + I.appearance_flags |= RESET_TRANSFORM | KEEP_APART + flick_overlay(I, viewing, 7) // 7 ticks/half a second // And animate the attack! var/t_color = "#ffffff" - if(ismob(src) && ismob(A) && (!used_item)) + if(ismob(src) && ismob(A) && !used_item) var/mob/M = src t_color = M.a_intent == INTENT_HARM ? "#ff0000" : "#ffffff" - animate(I, alpha = 175, pixel_x = 0, pixel_y = 0, pixel_z = 0, time = 3, color = t_color) + animate(I, alpha = 175, pixel_x = 0, pixel_y = 0, pixel_z = 0, time = 0.3 SECONDS, color = t_color) + animate(time = 0.1 SECONDS) + animate(alpha = 0, time = 0.3 SECONDS, easing = CIRCULAR_EASING | EASE_OUT) /atom/movable/proc/portal_destroyed(obj/effect/portal/P) return diff --git a/code/game/dna/dna2_helpers.dm b/code/game/dna/dna2_helpers.dm index ac521fd90d1..9ecad776e3e 100644 --- a/code/game/dna/dna2_helpers.dm +++ b/code/game/dna/dna2_helpers.dm @@ -213,7 +213,7 @@ // This proc gives the DNA info for eye color to the given eyes /datum/dna/proc/write_eyes_attributes(obj/item/organ/internal/eyes/eyes_organ) - eyes_organ.eye_colour = rgb(eyes_organ.dna.GetUIValueRange(DNA_UI_EYES_R, 255), eyes_organ.dna.GetUIValueRange(DNA_UI_EYES_G, 255), eyes_organ.dna.GetUIValueRange(DNA_UI_EYES_B, 255)) + eyes_organ.eye_color = rgb(eyes_organ.dna.GetUIValueRange(DNA_UI_EYES_R, 255), eyes_organ.dna.GetUIValueRange(DNA_UI_EYES_G, 255), eyes_organ.dna.GetUIValueRange(DNA_UI_EYES_B, 255)) /* TRAIT CHANGING PROCS @@ -223,9 +223,9 @@ // In absence of eyes, possibly randomize the eye color DNA? return - SetUIValueRange(DNA_UI_EYES_R, color2R(eyes_organ.eye_colour), 255, 1) - SetUIValueRange(DNA_UI_EYES_G, color2G(eyes_organ.eye_colour), 255, 1) - SetUIValueRange(DNA_UI_EYES_B, color2B(eyes_organ.eye_colour), 255, 1) + SetUIValueRange(DNA_UI_EYES_R, color2R(eyes_organ.eye_color), 255, 1) + SetUIValueRange(DNA_UI_EYES_G, color2G(eyes_organ.eye_color), 255, 1) + SetUIValueRange(DNA_UI_EYES_B, color2B(eyes_organ.eye_color), 255, 1) /datum/dna/proc/head_traits_to_dna(obj/item/organ/external/head/head_organ) if(!head_organ) diff --git a/code/game/dna/mutations/monkey.dm b/code/game/dna/mutations/monkey.dm index 8939ee31e00..4ebe366bfb7 100644 --- a/code/game/dna/mutations/monkey.dm +++ b/code/game/dna/mutations/monkey.dm @@ -14,9 +14,7 @@ if(issmall(H)) return for(var/obj/item/W in H) - if(istype(W,/obj/item/organ)) - continue - if(istype(W,/obj/item/implant)) + if(istype(W, /obj/item/implant)) continue H.unEquip(W) @@ -51,9 +49,7 @@ for(var/obj/item/W in H) if(W == H.w_uniform) // will be torn continue - if(istype(W,/obj/item/organ)) - continue - if(istype(W,/obj/item/implant)) + if(istype(W, /obj/item/implant)) continue H.unEquip(W) H.regenerate_icons() diff --git a/code/game/dna/mutations/powers.dm b/code/game/dna/mutations/powers.dm index c2590fd227d..98d94299bfc 100644 --- a/code/game/dna/mutations/powers.dm +++ b/code/game/dna/mutations/powers.dm @@ -821,7 +821,7 @@ else M.change_gender(FEMALE) - var/new_eyes = input("Please select eye color.", "Character Generation", eyes_organ.eye_colour) as null|color + var/new_eyes = input("Please select eye color.", "Character Generation", eyes_organ.eye_color) as null|color if(new_eyes) M.change_eye_color(new_eyes) diff --git a/code/game/gamemodes/blob/blob.dm b/code/game/gamemodes/blob/blob.dm index fcc1e6c36dc..83fefdf9deb 100644 --- a/code/game/gamemodes/blob/blob.dm +++ b/code/game/gamemodes/blob/blob.dm @@ -63,7 +63,7 @@ GLOBAL_LIST_EMPTY(blob_nodes) return candidates -/datum/game_mode/blob/proc/blobize(var/mob/living/carbon/human/blob) +/datum/game_mode/blob/proc/blobize(mob/living/carbon/human/blob) var/datum/mind/blobmind = blob.mind if(!istype(blobmind)) return 0 @@ -79,7 +79,7 @@ GLOBAL_LIST_EMPTY(blob_nodes) burst_blob(blobmind) return 1 -/datum/game_mode/blob/proc/make_blobs(var/count) +/datum/game_mode/blob/proc/make_blobs(count) var/list/candidates = get_blob_candidates() var/mob/living/carbon/human/blob = null count=min(count, candidates.len) @@ -97,16 +97,16 @@ GLOBAL_LIST_EMPTY(blob_nodes) to_chat(world, "You must kill it all while minimizing the damage to the station.") -/datum/game_mode/blob/proc/greet_blob(var/datum/mind/blob) +/datum/game_mode/blob/proc/greet_blob(datum/mind/blob) to_chat(blob.current, "You are infected by the Blob!") to_chat(blob.current, "Your body is ready to give spawn to a new blob core which will eat this station.") to_chat(blob.current, "Find a good location to spawn the core and then take control and overwhelm the station!") to_chat(blob.current, "When you have found a location, wait until you spawn; this will happen automatically and you cannot speed up the process.") to_chat(blob.current, "If you go outside of the station level, or in space, then you will die; make sure your location has lots of ground to cover.") - SEND_SOUND(blob.current, 'sound/magic/mutate.ogg') + SEND_SOUND(blob.current, sound('sound/magic/mutate.ogg')) return -/datum/game_mode/blob/proc/show_message(var/message) +/datum/game_mode/blob/proc/show_message(message) for(var/datum/mind/blob in infected_crew) to_chat(blob.current, message) @@ -114,7 +114,7 @@ GLOBAL_LIST_EMPTY(blob_nodes) for(var/datum/mind/blob in infected_crew) burst_blob(blob) -/datum/game_mode/blob/proc/burst_blob(var/datum/mind/blob, var/warned=0) +/datum/game_mode/blob/proc/burst_blob(datum/mind/blob, warned=0) var/client/blob_client = null var/turf/location = null @@ -190,7 +190,7 @@ GLOBAL_LIST_EMPTY(blob_nodes) return ..() -/datum/game_mode/blob/proc/stage(var/stage) +/datum/game_mode/blob/proc/stage(stage) switch(stage) if(0) send_intercept(1) diff --git a/code/game/gamemodes/blob/blob_report.dm b/code/game/gamemodes/blob/blob_report.dm index 93b84dbb54d..670c9ea8aa4 100644 --- a/code/game/gamemodes/blob/blob_report.dm +++ b/code/game/gamemodes/blob/blob_report.dm @@ -1,4 +1,4 @@ -/datum/game_mode/blob/proc/send_intercept(var/report = 1) +/datum/game_mode/blob/proc/send_intercept(report = 1) var/intercepttext = "" var/interceptname = "" switch(report) @@ -89,7 +89,7 @@ else if(istype(O, /obj/machinery)) src.mach += 1 -/datum/station_state/proc/score(var/datum/station_state/result) +/datum/station_state/proc/score(datum/station_state/result) if(!result) return 0 var/output = 0 output += (result.floor / max(floor,1)) diff --git a/code/game/gamemodes/blob/blobs/blob_mobs.dm b/code/game/gamemodes/blob/blobs/blob_mobs.dm index a3b0d83f690..14603c1681a 100644 --- a/code/game/gamemodes/blob/blobs/blob_mobs.dm +++ b/code/game/gamemodes/blob/blobs/blob_mobs.dm @@ -20,7 +20,7 @@ fire_damage = 3 var/mob/camera/blob/overmind = null -/mob/living/simple_animal/hostile/blob/proc/adjustcolors(var/a_color) +/mob/living/simple_animal/hostile/blob/proc/adjustcolors(a_color) if(a_color) color = a_color @@ -34,6 +34,11 @@ H.color = "#000000" adjustHealth(-maxHealth * 0.0125) +/mob/living/simple_animal/hostile/blob/Process_Spacemove(movement_dir = 0) + // Use any nearby blob structures to allow space moves. + for(var/obj/structure/blob/B in range(1, src)) + return TRUE + return ..() //////////////// // BLOB SPORE // @@ -64,7 +69,7 @@ return 1 return ..() -/mob/living/simple_animal/hostile/blob/blobspore/New(loc, var/obj/structure/blob/factory/linked_node) +/mob/living/simple_animal/hostile/blob/blobspore/New(loc, obj/structure/blob/factory/linked_node) if(istype(linked_node)) factory = linked_node factory.spores += src @@ -92,12 +97,13 @@ health = maxHealth name = "blob zombie" desc = "A shambling corpse animated by the blob." + mob_biotypes |= MOB_HUMANOID melee_damage_lower = 10 melee_damage_upper = 15 icon = H.icon speak_emote = list("groans") icon_state = "zombie2_s" - if(head_organ) + if(head_organ && !(NO_HAIR in H.dna.species.species_traits)) head_organ.h_style = null H.update_hair() human_overlays = H.overlays @@ -143,7 +149,7 @@ adjustcolors(overmind?.blob_reagent_datum?.complementary_color) -/mob/living/simple_animal/hostile/blob/blobspore/adjustcolors(var/a_color) +/mob/living/simple_animal/hostile/blob/blobspore/adjustcolors(a_color) color = a_color if(is_zombie) @@ -180,6 +186,7 @@ see_in_dark = 8 lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE move_resist = MOVE_FORCE_OVERPOWERING + a_intent = INTENT_HARM /mob/living/simple_animal/hostile/blob/blobbernaut/Life(seconds, times_fired) if(stat != DEAD && (getBruteLoss() || getFireLoss())) // Heal on blob structures diff --git a/code/game/gamemodes/blob/blobs/core.dm b/code/game/gamemodes/blob/blobs/core.dm index bd86b7ff1fc..a12f53150ca 100644 --- a/code/game/gamemodes/blob/blobs/core.dm +++ b/code/game/gamemodes/blob/blobs/core.dm @@ -27,7 +27,7 @@ point_rate = new_rate -/obj/structure/blob/core/adjustcolors(var/a_color) +/obj/structure/blob/core/adjustcolors(a_color) overlays.Cut() color = null var/image/I = new('icons/mob/blob.dmi', "blob") diff --git a/code/game/gamemodes/blob/blobs/node.dm b/code/game/gamemodes/blob/blobs/node.dm index 90982d70e2b..0023328b463 100644 --- a/code/game/gamemodes/blob/blobs/node.dm +++ b/code/game/gamemodes/blob/blobs/node.dm @@ -11,7 +11,7 @@ GLOB.blob_nodes += src START_PROCESSING(SSobj, src) -/obj/structure/blob/node/adjustcolors(var/a_color) +/obj/structure/blob/node/adjustcolors(a_color) overlays.Cut() color = null var/image/I = new('icons/mob/blob.dmi', "blob") diff --git a/code/game/gamemodes/blob/blobs/storage.dm b/code/game/gamemodes/blob/blobs/storage.dm index b9052b3601a..ced60709575 100644 --- a/code/game/gamemodes/blob/blobs/storage.dm +++ b/code/game/gamemodes/blob/blobs/storage.dm @@ -11,6 +11,6 @@ overmind.max_blob_points -= 50 ..() -/obj/structure/blob/storage/proc/update_max_blob_points(var/new_point_increase) +/obj/structure/blob/storage/proc/update_max_blob_points(new_point_increase) if(overmind) overmind.max_blob_points += new_point_increase diff --git a/code/game/gamemodes/blob/overmind.dm b/code/game/gamemodes/blob/overmind.dm index 7e60aeee6bf..e5da77c8196 100644 --- a/code/game/gamemodes/blob/overmind.dm +++ b/code/game/gamemodes/blob/overmind.dm @@ -55,13 +55,13 @@ if(blob_core && hud_used) hud_used.blobhealthdisplay.maptext = "
[round(blob_core.obj_integrity)]
" -/mob/camera/blob/proc/add_points(var/points) +/mob/camera/blob/proc/add_points(points) if(points != 0) blob_points = clamp(blob_points + points, 0, max_blob_points) if(hud_used) hud_used.blobpwrdisplay.maptext = "
[round(src.blob_points)]
" -/mob/camera/blob/say(var/message) +/mob/camera/blob/say(message) if(!message) return @@ -105,7 +105,7 @@ stat(null, "Core Health: [blob_core.obj_integrity]") stat(null, "Power Stored: [blob_points]/[max_blob_points]") -/mob/camera/blob/Move(var/NewLoc, var/Dir = 0) +/mob/camera/blob/Move(NewLoc, Dir = 0) var/obj/structure/blob/B = locate() in range("3x3", NewLoc) if(B) loc = NewLoc diff --git a/code/game/gamemodes/blob/powers.dm b/code/game/gamemodes/blob/powers.dm index 40cde4ad9db..6ed1bc1aef8 100644 --- a/code/game/gamemodes/blob/powers.dm +++ b/code/game/gamemodes/blob/powers.dm @@ -1,6 +1,6 @@ // Point controlling procs -/mob/camera/blob/proc/can_buy(var/cost = 15) +/mob/camera/blob/proc/can_buy(cost = 15) if(blob_points < cost) to_chat(src, "You cannot afford this!") return 0 @@ -50,7 +50,7 @@ var/turf/T = get_turf(src) create_shield(T) -/mob/camera/blob/proc/create_shield(var/turf/T) +/mob/camera/blob/proc/create_shield(turf/T) var/obj/structure/blob/B = locate(/obj/structure/blob) in T var/obj/structure/blob/shield/S = locate(/obj/structure/blob/shield) in T @@ -283,7 +283,7 @@ var/turf/T = get_turf(src) remove_blob(T) -/mob/camera/blob/proc/remove_blob(var/turf/T) +/mob/camera/blob/proc/remove_blob(turf/T) var/obj/structure/blob/B = locate(/obj/structure/blob) in T if(!T) @@ -312,7 +312,7 @@ var/turf/T = get_turf(src) expand_blob(T) -/mob/camera/blob/proc/expand_blob(var/turf/T) +/mob/camera/blob/proc/expand_blob(turf/T) if(!T) return @@ -350,7 +350,7 @@ var/turf/T = get_turf(src) rally_spores(T) -/mob/camera/blob/proc/rally_spores(var/turf/T) +/mob/camera/blob/proc/rally_spores(turf/T) to_chat(src, "You rally your spores.") var/list/surrounding_turfs = block(locate(T.x - 1, T.y - 1, T.z), locate(T.x + 1, T.y + 1, T.z)) diff --git a/code/game/gamemodes/blob/theblob.dm b/code/game/gamemodes/blob/theblob.dm index 2864854a1e9..b1c5ffde619 100644 --- a/code/game/gamemodes/blob/theblob.dm +++ b/code/game/gamemodes/blob/theblob.dm @@ -73,7 +73,7 @@ health_timestamp = world.time + 10 // 1 seconds -/obj/structure/blob/proc/Pulse(var/pulse = 0, var/origin_dir = 0, var/a_color)//Todo: Fix spaceblob expand +/obj/structure/blob/proc/Pulse(pulse = 0, origin_dir = 0, a_color)//Todo: Fix spaceblob expand RegenHealth() if(run_action())//If we can do something here then we dont need to pulse more @@ -110,7 +110,7 @@ if(iswallturf(loc)) loc.blob_act(src) //don't ask how a wall got on top of the core, just eat it -/obj/structure/blob/proc/expand(var/turf/T = null, var/prob = 1, var/a_color) +/obj/structure/blob/proc/expand(turf/T = null, prob = 1, a_color) if(prob && !prob(obj_integrity)) return if(istype(T, /turf/space) && prob(75)) return @@ -139,7 +139,7 @@ A.blob_act(src) return 1 -/obj/structure/blob/Crossed(var/mob/living/L, oldloc) +/obj/structure/blob/Crossed(mob/living/L, oldloc) ..() L.blob_act(src) @@ -188,7 +188,7 @@ if(. && obj_integrity > 0) update_icon() -/obj/structure/blob/proc/change_to(var/type) +/obj/structure/blob/proc/change_to(type) if(!ispath(type)) error("[type] is an invalid type for the blob.") var/obj/structure/blob/B = new type(src.loc) @@ -198,7 +198,7 @@ B.adjustcolors(color) qdel(src) -/obj/structure/blob/proc/adjustcolors(var/a_color) +/obj/structure/blob/proc/adjustcolors(a_color) if(a_color) color = a_color return diff --git a/code/game/gamemodes/changeling/changeling.dm b/code/game/gamemodes/changeling/changeling.dm index 7cdaa6c3017..7d074e869e7 100644 --- a/code/game/gamemodes/changeling/changeling.dm +++ b/code/game/gamemodes/changeling/changeling.dm @@ -131,7 +131,7 @@ GLOBAL_LIST_INIT(possible_changeling_IDs, list("Alpha","Beta","Gamma","Delta","E return /datum/game_mode/proc/greet_changeling(datum/mind/changeling, you_are=1) - SEND_SOUND(changeling.current, 'sound/ambience/antag/ling_aler.ogg') + SEND_SOUND(changeling.current, sound('sound/ambience/antag/ling_aler.ogg')) if(you_are) to_chat(changeling.current, "You are a changeling!") to_chat(changeling.current, "Use say \":g message\" to communicate with your fellow changelings. Remember: you get all of their absorbed DNA if you absorb them.") diff --git a/code/game/gamemodes/changeling/changeling_power.dm b/code/game/gamemodes/changeling/changeling_power.dm index dc5c0f9f90c..47f83b4618b 100644 --- a/code/game/gamemodes/changeling/changeling_power.dm +++ b/code/game/gamemodes/changeling/changeling_power.dm @@ -25,7 +25,7 @@ if you override it, MAKE SURE you call parent or it will not be usable the same goes for Remove(). if you override Remove(), call parent or else your power wont be removed on respec */ -/datum/action/changeling/proc/on_purchase(var/mob/user) +/datum/action/changeling/proc/on_purchase(mob/user) if(needs_button) Grant(user) @@ -46,18 +46,18 @@ the same goes for Remove(). if you override Remove(), call parent or else your p sting_feedback(user, target) take_chemical_cost(c) -/datum/action/changeling/proc/sting_action(var/mob/user, var/mob/target) +/datum/action/changeling/proc/sting_action(mob/user, mob/target) return 0 -/datum/action/changeling/proc/sting_feedback(var/mob/user, var/mob/target) +/datum/action/changeling/proc/sting_feedback(mob/user, mob/target) return 0 -/datum/action/changeling/proc/take_chemical_cost(var/datum/changeling/changeling) +/datum/action/changeling/proc/take_chemical_cost(datum/changeling/changeling) changeling.chem_charges -= chemical_cost changeling.geneticdamage += genetic_damage //Fairly important to remember to return 1 on success >.< -/datum/action/changeling/proc/can_sting(var/mob/user, var/mob/target) +/datum/action/changeling/proc/can_sting(mob/user, mob/target) if(!ishuman(user)) //typecast everything from mob to carbon from this point onwards return 0 if(req_human && (!ishuman(user) || issmall(user))) @@ -82,7 +82,7 @@ the same goes for Remove(). if you override Remove(), call parent or else your p return 1 //used in /mob/Stat() -/datum/action/changeling/proc/can_be_used_by(var/mob/user) +/datum/action/changeling/proc/can_be_used_by(mob/user) if(!ishuman(user)) return 0 if(req_human && !ishuman(user)) @@ -90,7 +90,7 @@ the same goes for Remove(). if you override Remove(), call parent or else your p return 1 // Transform the target to the chosen dna. Used in transform.dm and tiny_prick.dm (handy for changes since it's the same thing done twice) -/datum/action/changeling/proc/transform_dna(var/mob/living/carbon/human/H, var/datum/dna/D) +/datum/action/changeling/proc/transform_dna(mob/living/carbon/human/H, datum/dna/D) if(!D) return diff --git a/code/game/gamemodes/changeling/evolution_menu.dm b/code/game/gamemodes/changeling/evolution_menu.dm index 8485f8f0540..c07e8ac083b 100644 --- a/code/game/gamemodes/changeling/evolution_menu.dm +++ b/code/game/gamemodes/changeling/evolution_menu.dm @@ -84,7 +84,7 @@ view_mode = new_view_mode return TRUE -/datum/changeling/proc/purchasePower(var/mob/living/carbon/user, var/sting_name) +/datum/changeling/proc/purchasePower(mob/living/carbon/user, sting_name) var/datum/action/changeling/thepower = null var/list/all_powers = init_subtypes(/datum/action/changeling) @@ -122,7 +122,7 @@ return TRUE //Reselect powers -/datum/changeling/proc/lingRespec(var/mob/user) +/datum/changeling/proc/lingRespec(mob/user) if(!ishuman(user) || issmall(user)) to_chat(user, "We can't remove our evolutions in this form!") return FALSE @@ -136,7 +136,7 @@ to_chat(user, "You lack the power to readapt your evolutions!") return FALSE -/mob/proc/make_changeling(var/get_free_powers = TRUE) +/mob/proc/make_changeling(get_free_powers = TRUE) if(!mind) return if(!ishuman(src)) @@ -170,7 +170,7 @@ return 1 //Used to dump the languages from the changeling datum into the actual mob. -/mob/proc/changeling_update_languages(var/updated_languages) +/mob/proc/changeling_update_languages(updated_languages) for(var/datum/language/L in updated_languages) add_language("L.name") @@ -190,7 +190,7 @@ chem_recharge_slowdown = initial(chem_recharge_slowdown) mimicing = "" -/mob/proc/remove_changeling_powers(var/keep_free_powers=0) +/mob/proc/remove_changeling_powers(keep_free_powers=0) if(ishuman(src)) if(mind && mind.changeling) digitalcamo = 0 diff --git a/code/game/gamemodes/changeling/powers/absorb.dm b/code/game/gamemodes/changeling/powers/absorb.dm index bae3f75ce6b..33c0501c7d5 100644 --- a/code/game/gamemodes/changeling/powers/absorb.dm +++ b/code/game/gamemodes/changeling/powers/absorb.dm @@ -27,7 +27,7 @@ var/mob/living/carbon/target = G.affecting return changeling.can_absorb_dna(user,target) -/datum/action/changeling/absorbDNA/sting_action(var/mob/user) +/datum/action/changeling/absorbDNA/sting_action(mob/user) var/datum/changeling/changeling = user.mind.changeling var/obj/item/grab/G = user.get_active_hand() var/mob/living/carbon/human/target = G.affecting @@ -101,7 +101,7 @@ return 1 //Absorbs the target DNA. -/datum/changeling/proc/absorb_dna(mob/living/carbon/T, var/mob/user) +/datum/changeling/proc/absorb_dna(mob/living/carbon/T, mob/user) T.dna.real_name = T.real_name //Set this again, just to be sure that it's properly set. var/datum/dna/new_dna = T.dna.Clone() //Steal all of their languages! @@ -113,7 +113,7 @@ absorbedcount++ store_dna(new_dna, user) -/datum/changeling/proc/store_dna(var/datum/dna/new_dna, var/mob/user) +/datum/changeling/proc/store_dna(datum/dna/new_dna, mob/user) for(var/datum/objective/escape/escape_with_identity/E in user.mind.objectives) if(E.target_real_name == new_dna.real_name) protected_dna |= new_dna diff --git a/code/game/gamemodes/changeling/powers/augmented_eyesight.dm b/code/game/gamemodes/changeling/powers/augmented_eyesight.dm index 3e7d72cfd42..9e0a2279bbd 100644 --- a/code/game/gamemodes/changeling/powers/augmented_eyesight.dm +++ b/code/game/gamemodes/changeling/powers/augmented_eyesight.dm @@ -3,84 +3,54 @@ /datum/action/changeling/augmented_eyesight name = "Augmented Eyesight" - desc = "Creates heat receptors in our eyes and dramatically increases light sensing ability." - helptext = "Grants us thermal vision or flash protection. We will become a lot more vulnerable to flash based devices while thermal vision is active." + desc = "Creates more light sensing rods in our eyes, allowing our vision to penetrate most blocking objects. Protects our vision from flashes while inactive." + helptext = "Grants us x-ray vision or flash protection. We will become a lot more vulnerable to flash-based devices while x-ray vision is active." button_icon_state = "augmented_eyesight" chemical_cost = 0 dna_cost = 2 //Would be 1 without thermal vision active = FALSE /datum/action/changeling/augmented_eyesight/on_purchase(mob/user) //The ability starts inactive, so we should be protected from flashes. + if(!istype(user)) + return ..() - var/obj/item/organ/internal/cyberimp/eyes/O = new /obj/item/organ/internal/cyberimp/eyes/shield/ling() - O.insert(user) - active = FALSE + var/obj/item/organ/internal/eyes/E = user.get_organ_slot("eyes") + if(E) + E.flash_protect = FLASH_PROTECTION_WELDER //Adjust the user's eyes' flash protection + to_chat(user, "We adjust our eyes to protect them from bright lights.") + else + to_chat(user, "We can't adjust our eyes if we don't have any!") /datum/action/changeling/augmented_eyesight/sting_action(mob/living/carbon/user) if(!istype(user)) return - if(!active) - var/obj/item/organ/internal/cyberimp/eyes/O = new /obj/item/organ/internal/cyberimp/eyes/thermals/ling() - O.insert(user) - active = TRUE + ..() + var/obj/item/organ/internal/eyes/E = user.get_organ_slot("eyes") + if(E) + if(!active) + E.vision_flags |= SEE_MOBS | SEE_OBJS | SEE_TURFS //Add sight flags to the user's eyes + E.flash_protect = FLASH_PROTECTION_SENSITIVE //Adjust the user's eyes' flash protection + to_chat(user, "We adjust our eyes to sense prey through walls.") + active = TRUE + else + E.vision_flags ^= SEE_MOBS | SEE_OBJS | SEE_TURFS //Remove sight flags from the user's eyes + E.flash_protect = FLASH_PROTECTION_WELDER //Adjust the user's eyes' flash protection + to_chat(user, "We adjust our eyes to protect them from bright lights.") + active = FALSE + user.update_sight() else - var/obj/item/organ/internal/cyberimp/eyes/O = new /obj/item/organ/internal/cyberimp/eyes/shield/ling() - O.insert(user) - active = FALSE - return 1 + to_chat(user, "We can't adjust our eyes if we don't have any!") + return TRUE -/datum/action/changeling/augmented_eyesight/Remove(mob/user) - var/obj/item/organ/internal/cyberimp/eyes/O = user.get_organ_slot("eye_ling") - if(O) - O.remove(user) - qdel(O) - ..() - -/obj/item/organ/internal/cyberimp/eyes/shield/ling - name = "protective membranes" - desc = "These variable transparency organic membranes will protect you from welders and flashes and heal your eye damage." - icon_state = "ling_eyeshield" - eye_colour = "#000000" - implant_overlay = null - slot = "eye_ling" - status = 0 - aug_message = "We feel a minute twitch in our eyes, our eyes feel more durable." - -/obj/item/organ/internal/cyberimp/eyes/shield/ling/on_life() - ..() - var/obj/item/organ/internal/eyes/E = owner.get_int_organ(/obj/item/organ/internal/eyes) - if(owner.eye_blind || owner.eye_blurry || HAS_TRAIT(owner, TRAIT_BLIND) || HAS_TRAIT(owner, TRAIT_NEARSIGHT) || (E && E.damage > 0)) - owner.reagents.add_reagent("oculine", 1) - -/obj/item/organ/internal/cyberimp/eyes/shield/ling/prepare_eat() - var/obj/S = ..() - S.reagents.add_reagent("oculine", 15) - return S - -/obj/item/organ/internal/cyberimp/eyes/thermals/ling - name = "heat receptors" - desc = "These heat receptors dramatically increases eyes light sensing ability." - icon_state = "ling_thermal" - eye_colour = "#000000" - implant_overlay = null - slot = "eye_ling" - status = 0 - aug_message = "We feel a minute twitch in our eyes, and darkness creeps away." - -/obj/item/organ/internal/cyberimp/eyes/thermals/ling/emp_act(severity) - return - -/obj/item/organ/internal/cyberimp/eyes/thermals/ling/insert(mob/living/carbon/M, special = 0) - ..() - if(ishuman(owner)) - var/mob/living/carbon/human/H = owner - H.weakeyes = 1 - if(!H.vision_type) - H.set_sight(/datum/vision_override/nightvision) - -/obj/item/organ/internal/cyberimp/eyes/thermals/ling/remove(mob/living/carbon/M, special = 0) - if(ishuman(owner)) - var/mob/living/carbon/human/H = owner - H.weakeyes = 0 - H.set_sight(null) + +/datum/action/changeling/augmented_eyesight/Remove(mob/user) //Get rid of x-ray vision and flash protection when the user refunds this ability + if(!istype(user)) + return + var/obj/item/organ/internal/eyes/E = user.get_organ_slot("eyes") + if(E) + if(active) + E.vision_flags ^= SEE_MOBS | SEE_OBJS | SEE_TURFS + else + E.flash_protect = FLASH_PROTECTION_NONE + user.update_sight() ..() diff --git a/code/game/gamemodes/changeling/powers/digitalcamo.dm b/code/game/gamemodes/changeling/powers/digitalcamo.dm index d50a2afe5c7..29385d33636 100644 --- a/code/game/gamemodes/changeling/powers/digitalcamo.dm +++ b/code/game/gamemodes/changeling/powers/digitalcamo.dm @@ -6,7 +6,7 @@ dna_cost = 1 //Prevents AIs tracking you but makes you easily detectable to the human-eye. -/datum/action/changeling/digitalcamo/sting_action(var/mob/user) +/datum/action/changeling/digitalcamo/sting_action(mob/user) if(user.digitalcamo) to_chat(user, "We return to normal.") diff --git a/code/game/gamemodes/changeling/powers/epinephrine.dm b/code/game/gamemodes/changeling/powers/epinephrine.dm index 758e9215ed8..ef22de10ce4 100644 --- a/code/game/gamemodes/changeling/powers/epinephrine.dm +++ b/code/game/gamemodes/changeling/powers/epinephrine.dm @@ -9,7 +9,7 @@ req_stat = UNCONSCIOUS //Recover from stuns. -/datum/action/changeling/epinephrine/sting_action(var/mob/living/user) +/datum/action/changeling/epinephrine/sting_action(mob/living/user) if(user.lying) to_chat(user, "We arise.") diff --git a/code/game/gamemodes/changeling/powers/fakedeath.dm b/code/game/gamemodes/changeling/powers/fakedeath.dm index 343a8e1e1c7..b29dd5f8ac6 100644 --- a/code/game/gamemodes/changeling/powers/fakedeath.dm +++ b/code/game/gamemodes/changeling/powers/fakedeath.dm @@ -9,7 +9,7 @@ max_genetic_damage = 100 //Fake our own death and fully heal. You will appear to be dead but regenerate fully after a short delay. -/datum/action/changeling/fakedeath/sting_action(var/mob/living/user) +/datum/action/changeling/fakedeath/sting_action(mob/living/user) to_chat(user, "We begin our stasis, preparing energy to arise once more.") if(user.stat != DEAD) @@ -30,7 +30,7 @@ var/datum/action/changeling/revive/R = new R.Grant(user) -/datum/action/changeling/fakedeath/can_sting(var/mob/user) +/datum/action/changeling/fakedeath/can_sting(mob/user) if(HAS_TRAIT(user, TRAIT_FAKEDEATH)) to_chat(user, "We are already regenerating.") return diff --git a/code/game/gamemodes/changeling/powers/fleshmend.dm b/code/game/gamemodes/changeling/powers/fleshmend.dm index 6ed396c0cba..99cb6164aa6 100644 --- a/code/game/gamemodes/changeling/powers/fleshmend.dm +++ b/code/game/gamemodes/changeling/powers/fleshmend.dm @@ -25,7 +25,7 @@ recent_uses = max(1, recent_uses - (1 / healing_ticks)) //Starts healing you every second for 10 seconds. Can be used whilst unconscious. -/datum/action/changeling/fleshmend/sting_action(var/mob/living/user) +/datum/action/changeling/fleshmend/sting_action(mob/living/user) to_chat(user, "We begin to heal rapidly.") if(recent_uses > 1) to_chat(user, "Our healing's effectiveness is reduced \ diff --git a/code/game/gamemodes/changeling/powers/headslug.dm b/code/game/gamemodes/changeling/powers/headslug.dm index d67ad36a80e..e37f97269e4 100644 --- a/code/game/gamemodes/changeling/powers/headslug.dm +++ b/code/game/gamemodes/changeling/powers/headslug.dm @@ -17,7 +17,7 @@ var/list/organs = user.get_organs_zone("head", 1) for(var/obj/item/organ/internal/I in organs) - I.remove(user, 1) + I.remove(user, TRUE) explosion(get_turf(user),0,0,2,0,silent=1) for(var/mob/living/carbon/human/H in range(2,user)) @@ -35,7 +35,7 @@ spawn(5) // So it's not killed in explosion var/mob/living/simple_animal/hostile/headslug/crab = new(new_location) for(var/obj/item/organ/internal/I in organs) - I.loc = crab + I.forceMove(crab) crab.origin = M if(crab.origin) crab.origin.active = 1 diff --git a/code/game/gamemodes/changeling/powers/hivemind.dm b/code/game/gamemodes/changeling/powers/hivemind.dm index 6506f25263c..f67b222189d 100644 --- a/code/game/gamemodes/changeling/powers/hivemind.dm +++ b/code/game/gamemodes/changeling/powers/hivemind.dm @@ -7,7 +7,7 @@ chemical_cost = -1 needs_button = FALSE -/datum/action/changeling/hivemind_comms/on_purchase(var/mob/user) +/datum/action/changeling/hivemind_comms/on_purchase(mob/user) ..() var/datum/changeling/changeling=user.mind.changeling changeling.changeling_speak = 1 diff --git a/code/game/gamemodes/changeling/powers/humanform.dm b/code/game/gamemodes/changeling/powers/humanform.dm index fd00afab30a..bc413fae216 100644 --- a/code/game/gamemodes/changeling/powers/humanform.dm +++ b/code/game/gamemodes/changeling/powers/humanform.dm @@ -8,7 +8,7 @@ max_genetic_damage = 3 //Transform into a human. -/datum/action/changeling/humanform/sting_action(var/mob/living/carbon/human/user) +/datum/action/changeling/humanform/sting_action(mob/living/carbon/human/user) var/datum/changeling/changeling = user.mind.changeling var/list/names = list() for(var/datum/dna/DNA in (changeling.absorbed_dna+changeling.protected_dna)) diff --git a/code/game/gamemodes/changeling/powers/lesserform.dm b/code/game/gamemodes/changeling/powers/lesserform.dm index c492c47f9c6..9622cb4f48e 100644 --- a/code/game/gamemodes/changeling/powers/lesserform.dm +++ b/code/game/gamemodes/changeling/powers/lesserform.dm @@ -9,7 +9,7 @@ req_human = 1 //Transform into a monkey. -/datum/action/changeling/lesserform/sting_action(var/mob/living/carbon/human/user) +/datum/action/changeling/lesserform/sting_action(mob/living/carbon/human/user) var/datum/changeling/changeling = user.mind.changeling if(!user) return 0 diff --git a/code/game/gamemodes/changeling/powers/mimic_voice.dm b/code/game/gamemodes/changeling/powers/mimic_voice.dm index bcbe91a3cb6..cddb369963a 100644 --- a/code/game/gamemodes/changeling/powers/mimic_voice.dm +++ b/code/game/gamemodes/changeling/powers/mimic_voice.dm @@ -9,7 +9,7 @@ // Fake Voice -/datum/action/changeling/mimicvoice/sting_action(var/mob/user) +/datum/action/changeling/mimicvoice/sting_action(mob/user) var/datum/changeling/changeling=user.mind.changeling if(changeling.mimicing) changeling.mimicing = "" diff --git a/code/game/gamemodes/changeling/powers/mutations.dm b/code/game/gamemodes/changeling/powers/mutations.dm index fb2d19e7d0b..420628a0198 100644 --- a/code/game/gamemodes/changeling/powers/mutations.dm +++ b/code/game/gamemodes/changeling/powers/mutations.dm @@ -21,7 +21,7 @@ var/weapon_type var/weapon_name_simple -/datum/action/changeling/weapon/try_to_sting(var/mob/user, var/mob/target) +/datum/action/changeling/weapon/try_to_sting(mob/user, mob/target) if(istype(user.l_hand, weapon_type)) //Not the nicest way to do it, but eh qdel(user.l_hand) if(!silent) @@ -36,7 +36,7 @@ return ..(user, target) -/datum/action/changeling/weapon/sting_action(var/mob/user) +/datum/action/changeling/weapon/sting_action(mob/user) if(!user.drop_item()) to_chat(user, "The [user.get_active_hand()] is stuck to your hand, you cannot grow a [weapon_name_simple] over it!") return @@ -60,7 +60,7 @@ var/recharge_slowdown = 0 var/blood_on_castoff = 0 -/datum/action/changeling/suit/try_to_sting(var/mob/user, var/mob/target) +/datum/action/changeling/suit/try_to_sting(mob/user, mob/target) var/datum/changeling/changeling = user.mind.changeling if(!ishuman(user) || !changeling) return @@ -84,7 +84,7 @@ return ..(H, target) -/datum/action/changeling/suit/sting_action(var/mob/living/carbon/human/user) +/datum/action/changeling/suit/sting_action(mob/living/carbon/human/user) if(!user.unEquip(user.wear_suit)) to_chat(user, "\the [user.wear_suit] is stuck to your body, you cannot grow a [suit_name_simple] over it!") return @@ -358,7 +358,7 @@ weapon_type = /obj/item/shield/changeling weapon_name_simple = "shield" -/datum/action/changeling/weapon/shield/sting_action(var/mob/user) +/datum/action/changeling/weapon/shield/sting_action(mob/user) var/datum/changeling/changeling = user.mind.changeling //So we can read the absorbedcount. if(!changeling) return diff --git a/code/game/gamemodes/changeling/powers/panacea.dm b/code/game/gamemodes/changeling/powers/panacea.dm index 914a73fa7b4..bc0ff435b38 100644 --- a/code/game/gamemodes/changeling/powers/panacea.dm +++ b/code/game/gamemodes/changeling/powers/panacea.dm @@ -8,7 +8,7 @@ req_stat = UNCONSCIOUS //Heals the things that the other regenerative abilities don't. -/datum/action/changeling/panacea/sting_action(var/mob/user) +/datum/action/changeling/panacea/sting_action(mob/user) to_chat(user, "We cleanse impurities from our form.") diff --git a/code/game/gamemodes/changeling/powers/revive.dm b/code/game/gamemodes/changeling/powers/revive.dm index 13b3877b9bb..8ebe5ba48d8 100644 --- a/code/game/gamemodes/changeling/powers/revive.dm +++ b/code/game/gamemodes/changeling/powers/revive.dm @@ -6,7 +6,7 @@ always_keep = 1 //Revive from regenerative stasis -/datum/action/changeling/revive/sting_action(var/mob/living/carbon/user) +/datum/action/changeling/revive/sting_action(mob/living/carbon/user) user.setToxLoss(0, FALSE) user.setOxyLoss(0, FALSE) user.setCloneLoss(0, FALSE) diff --git a/code/game/gamemodes/changeling/powers/shriek.dm b/code/game/gamemodes/changeling/powers/shriek.dm index a049aa0f2d9..b7d021a10d6 100644 --- a/code/game/gamemodes/changeling/powers/shriek.dm +++ b/code/game/gamemodes/changeling/powers/shriek.dm @@ -8,7 +8,7 @@ req_human = 1 //A flashy ability, good for crowd control and sowing chaos. -/datum/action/changeling/resonant_shriek/sting_action(var/mob/user) +/datum/action/changeling/resonant_shriek/sting_action(mob/user) for(var/mob/living/M in get_mobs_in_view(4, user)) if(iscarbon(M)) if(ishuman(M)) @@ -20,10 +20,10 @@ M.AdjustConfused(20) M.Jitter(50) else - M << sound('sound/effects/screech.ogg') + SEND_SOUND(M, sound('sound/effects/screech.ogg')) if(issilicon(M)) - M << sound('sound/weapons/flash.ogg') + SEND_SOUND(M, sound('sound/weapons/flash.ogg')) M.Weaken(rand(5,10)) for(var/obj/machinery/light/L in range(4, user)) @@ -41,7 +41,7 @@ dna_cost = 1 //A flashy ability, good for crowd control and sewing chaos. -/datum/action/changeling/dissonant_shriek/sting_action(var/mob/user) +/datum/action/changeling/dissonant_shriek/sting_action(mob/user) for(var/obj/machinery/light/L in range(5, usr)) L.on = 1 L.break_light_tube() diff --git a/code/game/gamemodes/changeling/powers/spiders.dm b/code/game/gamemodes/changeling/powers/spiders.dm index 5577007a155..4139928dc3c 100644 --- a/code/game/gamemodes/changeling/powers/spiders.dm +++ b/code/game/gamemodes/changeling/powers/spiders.dm @@ -8,7 +8,7 @@ req_dna = 5 //Makes some spiderlings. Good for setting traps and causing general trouble. -/datum/action/changeling/spiders/sting_action(var/mob/user) +/datum/action/changeling/spiders/sting_action(mob/user) for(var/i=0, i<2, i++) var/obj/structure/spider/spiderling/S = new(user.loc) S.grow_as = /mob/living/simple_animal/hostile/poison/giant_spider/hunter diff --git a/code/game/gamemodes/changeling/powers/strained_muscles.dm b/code/game/gamemodes/changeling/powers/strained_muscles.dm index 038cf76331c..a89daed095f 100644 --- a/code/game/gamemodes/changeling/powers/strained_muscles.dm +++ b/code/game/gamemodes/changeling/powers/strained_muscles.dm @@ -12,7 +12,7 @@ var/stacks = 0 //Increments every 5 seconds; damage increases over time var/enabled = 0 //Whether or not you are a hedgehog -/datum/action/changeling/strained_muscles/sting_action(var/mob/living/carbon/user) +/datum/action/changeling/strained_muscles/sting_action(mob/living/carbon/user) enabled = !enabled if(enabled) to_chat(user, "Our muscles tense and strengthen.") diff --git a/code/game/gamemodes/changeling/powers/swap_form.dm b/code/game/gamemodes/changeling/powers/swap_form.dm index 4c44b97f47e..b155cccf5db 100644 --- a/code/game/gamemodes/changeling/powers/swap_form.dm +++ b/code/game/gamemodes/changeling/powers/swap_form.dm @@ -7,7 +7,7 @@ dna_cost = 1 req_human = 1 //Monkeys can't grab -/datum/action/changeling/swap_form/can_sting(var/mob/living/carbon/user) +/datum/action/changeling/swap_form/can_sting(mob/living/carbon/user) if(!..()) return var/obj/item/grab/G = user.get_active_hand() @@ -29,7 +29,7 @@ return return 1 -/datum/action/changeling/swap_form/sting_action(var/mob/living/carbon/user) +/datum/action/changeling/swap_form/sting_action(mob/living/carbon/user) var/obj/item/grab/G = user.get_active_hand() var/mob/living/carbon/human/target = G.affecting var/datum/changeling/changeling = user.mind.changeling diff --git a/code/game/gamemodes/changeling/powers/tiny_prick.dm b/code/game/gamemodes/changeling/powers/tiny_prick.dm index 95432db9424..14d93439510 100644 --- a/code/game/gamemodes/changeling/powers/tiny_prick.dm +++ b/code/game/gamemodes/changeling/powers/tiny_prick.dm @@ -37,7 +37,7 @@ if(mind && mind.changeling && mind.changeling.chosen_sting) mind.changeling.chosen_sting.unset_sting(src) -/datum/action/changeling/sting/can_sting(var/mob/user, var/mob/target) +/datum/action/changeling/sting/can_sting(mob/user, mob/target) if(!..()) return if(!user.mind.changeling.chosen_sting) @@ -57,7 +57,7 @@ return return 1 -/datum/action/changeling/sting/sting_feedback(var/mob/user, var/mob/target) +/datum/action/changeling/sting/sting_feedback(mob/user, mob/target) if(!target) return to_chat(user, "We stealthily sting [target.name].") @@ -91,10 +91,10 @@ return ..() -/datum/action/changeling/sting/transformation/can_sting(var/mob/user, var/mob/target) +/datum/action/changeling/sting/transformation/can_sting(mob/user, mob/target) if(!..()) return - if(HAS_TRAIT(target, TRAIT_HUSK) || (!ishuman(target))) + 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)) @@ -104,7 +104,7 @@ return FALSE return TRUE -/datum/action/changeling/sting/transformation/sting_action(var/mob/user, var/mob/target) +/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]!") @@ -129,11 +129,11 @@ chemical_cost = 25 dna_cost = 0 -/datum/action/changeling/sting/extract_dna/can_sting(var/mob/user, var/mob/target) +/datum/action/changeling/sting/extract_dna/can_sting(mob/user, mob/target) if(..()) return user.mind.changeling.can_absorb_dna(user, target) -/datum/action/changeling/sting/extract_dna/sting_action(var/mob/user, var/mob/living/carbon/human/target) +/datum/action/changeling/sting/extract_dna/sting_action(mob/user, mob/living/carbon/human/target) add_attack_logs(user, target, "Extraction sting (changeling)") if(!(user.mind.changeling.has_dna(target.dna))) user.mind.changeling.absorb_dna(target, user) @@ -149,7 +149,7 @@ chemical_cost = 20 dna_cost = 2 -/datum/action/changeling/sting/mute/sting_action(var/mob/user, var/mob/living/carbon/target) +/datum/action/changeling/sting/mute/sting_action(mob/user, mob/living/carbon/target) add_attack_logs(user, target, "Mute sting (changeling)") target.AdjustSilence(30) SSblackbox.record_feedback("nested tally", "changeling_powers", 1, list("[name]")) @@ -164,7 +164,7 @@ chemical_cost = 25 dna_cost = 1 -/datum/action/changeling/sting/blind/sting_action(var/mob/living/user, var/mob/living/target) +/datum/action/changeling/sting/blind/sting_action(mob/living/user, mob/living/target) add_attack_logs(user, target, "Blind sting (changeling)") to_chat(target, "Your eyes burn horrifically!") target.become_nearsighted(EYE_DAMAGE) @@ -182,7 +182,7 @@ chemical_cost = 10 dna_cost = 1 -/datum/action/changeling/sting/LSD/sting_action(var/mob/user, var/mob/living/carbon/target) +/datum/action/changeling/sting/LSD/sting_action(mob/user, mob/living/carbon/target) add_attack_logs(user, target, "LSD sting (changeling)") spawn(rand(300,600)) if(target) @@ -199,7 +199,7 @@ chemical_cost = 15 dna_cost = 2 -/datum/action/changeling/sting/cryo/sting_action(var/mob/user, var/mob/target) +/datum/action/changeling/sting/cryo/sting_action(mob/user, mob/target) add_attack_logs(user, target, "Cryo sting (changeling)") if(target.reagents) target.reagents.add_reagent("frostoil", 30) diff --git a/code/game/gamemodes/changeling/powers/transform.dm b/code/game/gamemodes/changeling/powers/transform.dm index f486195b8db..3aaed08b965 100644 --- a/code/game/gamemodes/changeling/powers/transform.dm +++ b/code/game/gamemodes/changeling/powers/transform.dm @@ -9,7 +9,7 @@ max_genetic_damage = 3 //Change our DNA to that of somebody we've absorbed. -/datum/action/changeling/transform/sting_action(var/mob/living/carbon/human/user) +/datum/action/changeling/transform/sting_action(mob/living/carbon/human/user) var/datum/changeling/changeling = user.mind.changeling var/datum/dna/chosen_dna = changeling.select_dna("Select the target DNA: ", "Target DNA") @@ -23,7 +23,7 @@ SSblackbox.record_feedback("nested tally", "changeling_powers", 1, list("[name]")) return 1 -/datum/changeling/proc/select_dna(var/prompt, var/title) +/datum/changeling/proc/select_dna(prompt, title) var/list/names = list() for(var/datum/dna/DNA in (absorbed_dna+protected_dna)) names += "[DNA.real_name]" diff --git a/code/game/gamemodes/changeling/traitor_chan.dm b/code/game/gamemodes/changeling/traitor_chan.dm index f163b2a4c04..b7ff2c30e0d 100644 --- a/code/game/gamemodes/changeling/traitor_chan.dm +++ b/code/game/gamemodes/changeling/traitor_chan.dm @@ -2,11 +2,13 @@ name = "traitor+changeling" config_tag = "traitorchan" traitors_possible = 3 //hard limit on traitors if scaling is turned off - restricted_jobs = list("AI", "Cyborg") + restricted_jobs = list("Cyborg") + secondary_restricted_jobs = list("AI") // Allows AI to roll traitor, but not changeling required_players = 10 required_enemies = 1 // how many of each type are required recommended_enemies = 3 - var/protected_species_changeling = list("Machine") + secondary_enemies_scaling = 0.025 + secondary_protected_species = list("Machine") /datum/game_mode/traitor/changeling/announce() to_chat(world, "The current game mode is - Traitor+Changeling!") @@ -18,17 +20,23 @@ restricted_jobs += protected_jobs var/list/datum/mind/possible_changelings = get_players_for_role(ROLE_CHANGELING) + 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 protected_species_changeling)) + if((player.mind in possible_changelings) && (player.client.prefs.species in secondary_protected_species)) possible_changelings -= player.mind if(possible_changelings.len > 0) - var/datum/mind/changeling = pick(possible_changelings) - changelings += changeling - modePlayer += changelings - changeling.restricted_roles = restricted_jobs - changeling.special_role = SPECIAL_ROLE_CHANGELING + for(var/I in possible_changelings) + if(length(changelings) >= secondary_enemies) + break + var/datum/mind/changeling = pick(possible_changelings) + changelings += changeling + modePlayer += changelings + possible_changelings -= changeling + changeling.restricted_roles = (restricted_jobs + secondary_restricted_jobs) + changeling.special_role = SPECIAL_ROLE_CHANGELING + return ..() else return 0 diff --git a/code/game/gamemodes/cult/cult.dm b/code/game/gamemodes/cult/cult.dm index 82f919e1e0c..04c9e13b605 100644 --- a/code/game/gamemodes/cult/cult.dm +++ b/code/game/gamemodes/cult/cult.dm @@ -81,7 +81,7 @@ GLOBAL_LIST_EMPTY(all_cults) cult_objs.setup() for(var/datum/mind/cult_mind in cult) - SEND_SOUND(cult_mind.current, 'sound/ambience/antag/bloodcult.ogg') + SEND_SOUND(cult_mind.current, sound('sound/ambience/antag/bloodcult.ogg')) to_chat(cult_mind.current, CULT_GREETING) equip_cultist(cult_mind.current) cult_mind.current.faction |= "cult" @@ -187,7 +187,7 @@ GLOBAL_LIST_EMPTY(all_cults) singlemutcheck(cult_mind.current, GLOB.clumsyblock, MUTCHK_FORCED) var/datum/action/innate/toggle_clumsy/A = new A.Grant(cult_mind.current) - SEND_SOUND(cult_mind.current, 'sound/ambience/antag/bloodcult.ogg') + SEND_SOUND(cult_mind.current, sound('sound/ambience/antag/bloodcult.ogg')) cult_mind.current.create_attack_log("Has been converted to the cult!") cult_mind.current.create_log(CONVERSION_LOG, "converted to the cult") @@ -220,7 +220,7 @@ GLOBAL_LIST_EMPTY(all_cults) for(var/datum/mind/M in cult) if(!M.current || !ishuman(M.current)) continue - SEND_SOUND(M.current, 'sound/hallucinations/i_see_you2.ogg') + SEND_SOUND(M.current, sound('sound/hallucinations/i_see_you2.ogg')) to_chat(M.current, "The veil weakens as your cult grows, your eyes begin to glow...") addtimer(CALLBACK(src, .proc/rise, M.current), 20 SECONDS) @@ -229,7 +229,7 @@ GLOBAL_LIST_EMPTY(all_cults) for(var/datum/mind/M in cult) if(!M.current || !ishuman(M.current)) continue - SEND_SOUND(M.current, 'sound/hallucinations/im_here1.ogg') + SEND_SOUND(M.current, sound('sound/hallucinations/im_here1.ogg')) to_chat(M.current, "Your cult is ascendant and the red harvest approaches - you cannot hide your true nature for much longer!") addtimer(CALLBACK(src, .proc/ascend, M.current), 20 SECONDS) GLOB.command_announcement.Announce("Picking up extradimensional activity related to the Cult of [SSticker.cultdat ? SSticker.cultdat.entity_name : "Nar'Sie"] from your station. Data suggests that about [ascend_percent * 100]% of the station has been converted. Security staff are authorized to use lethal force freely against cultists. Non-security staff should be prepared to defend themselves and their work areas from hostile cultists. Self defense permits non-security staff to use lethal force as a last resort, but non-security staff should be defending their work areas, not hunting down cultists. Dead crewmembers must be revived and deconverted once the situation is under control.", "Central Command Higher Dimensional Affairs", 'sound/AI/commandreport.ogg') diff --git a/code/game/gamemodes/cult/cult_items.dm b/code/game/gamemodes/cult/cult_items.dm index 01238df31ec..ca1938a76ea 100644 --- a/code/game/gamemodes/cult/cult_items.dm +++ b/code/game/gamemodes/cult/cult_items.dm @@ -55,7 +55,7 @@ if(HAS_TRAIT(user, TRAIT_HULK)) to_chat(user, "You can't seem to hold the blade properly!") - return FALSE + user.unEquip(src, TRUE) /obj/item/restraints/legcuffs/bola/cult name = "runed bola" @@ -162,7 +162,7 @@ if(current_charges) owner.visible_message("[attack_text] is deflected in a burst of blood-red sparks!") current_charges-- - playsound(loc, "sparks", 100, TRUE) + playsound(loc, "sparks", 100, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) new /obj/effect/temp_visual/cult/sparks(get_turf(owner)) if(!current_charges) owner.visible_message("The runed shield around [owner] suddenly disappears!") @@ -355,7 +355,7 @@ var/turf/destination = pick(turfs) if(uses <= 0) icon_state ="shifter_drained" - playsound(mobloc, "sparks", 50, TRUE) + playsound(mobloc, "sparks", 50, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) new /obj/effect/temp_visual/dir_setting/cult/phase/out(mobloc, C.dir) var/atom/movable/pulled = handle_teleport_grab(destination, C) @@ -364,8 +364,8 @@ C.start_pulling(pulled) //forcemove resets pulls, so we need to re-pull new /obj/effect/temp_visual/dir_setting/cult/phase(destination, C.dir) - playsound(destination, 'sound/effects/phasein.ogg', 25, TRUE) - playsound(destination, "sparks", 50, TRUE) + playsound(destination, 'sound/effects/phasein.ogg', 25, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) + playsound(destination, "sparks", 50, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) else to_chat(C, "The veil cannot be torn here!") diff --git a/code/game/gamemodes/cult/runes.dm b/code/game/gamemodes/cult/runes.dm index d99f223e7fb..4c98a3c59d3 100644 --- a/code/game/gamemodes/cult/runes.dm +++ b/code/game/gamemodes/cult/runes.dm @@ -603,7 +603,7 @@ structure_check() searches for nearby cultist structures required for the invoca fail_invoke() return - SEND_SOUND(mob_to_revive, 'sound/ambience/antag/bloodcult.ogg') + SEND_SOUND(mob_to_revive, sound('sound/ambience/antag/bloodcult.ogg')) to_chat(mob_to_revive, "\"PASNAR SAVRAE YAM'TOTH. Arise.\"") mob_to_revive.visible_message("[mob_to_revive] draws in a huge breath, red light shining from [mob_to_revive.p_their()] eyes.", \ "You awaken suddenly from the void. You're alive!") @@ -1001,7 +1001,7 @@ structure_check() searches for nearby cultist structures required for the invoca used = TRUE color = rgb(255, 0, 0) ..() - SEND_SOUND(world, 'sound/effects/dimensional_rend.ogg') + SEND_SOUND(world, sound('sound/effects/dimensional_rend.ogg')) to_chat(world, "The veil... is... TORN!!!--") icon_state = "rune_large_distorted" var/turf/T = get_turf(src) diff --git a/code/game/gamemodes/devil/contracts/friend.dm b/code/game/gamemodes/devil/contracts/friend.dm deleted file mode 100644 index 8838dc8a371..00000000000 --- a/code/game/gamemodes/devil/contracts/friend.dm +++ /dev/null @@ -1,54 +0,0 @@ -/obj/effect/mob_spawn/human/demonic_friend - name = "Essence of friendship" - desc = "Oh boy! Oh boy! A friend!" - mob_name = "Demonic friend" - icon = 'icons/obj/cardboard_cutout.dmi' - icon_state = "cutout_basic" - outfit = /datum/outfit/demonic_friend - death = FALSE - roundstart = FALSE - random = TRUE - id_job = "SuperFriend" - id_access = "assistant" - var/obj/effect/proc_holder/spell/targeted/summon_friend/spell - var/datum/mind/owner - assignedrole = "SuperFriend" - -/obj/effect/mob_spawn/human/demonic_friend/Initialize(mapload, datum/mind/owner_mind, obj/effect/proc_holder/spell/targeted/summon_friend/summoning_spell) - . = ..() - owner = owner_mind - description = "Be someone's loyal friend/slave. If they die, you die as well." //best I could think of in the moment, not sure how this role plays in practise, have never seen it. - flavour_text = "You have been given a reprieve from your eternity of torment, to be [owner.name]'s friend for [owner.p_their()] short mortal coil. Be aware that if you do not live up to [owner.name]'s expectations, [owner.p_they()] can send you back to hell with a single thought. [owner.name]'s death will also return you to hell." - var/area/A = get_area(src) - if(!mapload && A) - notify_ghosts("\A friendship shell has been completed in \the [A.name].", source = src, action=NOTIFY_ATTACK, flashwindow = TRUE) - objectives = "Be [owner.name]'s friend, and keep [owner.name] alive, so you don't get sent back to hell." - spell = summoning_spell - - -/obj/effect/mob_spawn/human/demonic_friend/special(mob/living/L) - if(!QDELETED(owner.current) && owner.current.stat != DEAD) - L.real_name = "[owner.name]'s best friend" - L.name = L.real_name - soullink(/datum/soullink/oneway/devilfriend, owner.current, L) - spell.friend = L - spell.charge_counter = spell.charge_max - L.mind.hasSoul = FALSE - var/mob/living/carbon/human/H = L - var/obj/item/worn = H.wear_id - var/obj/item/card/id/id = worn.GetID() - id.registered_name = L.real_name - id.update_label() - to_chat(owner.current, "Your friend has arrived!") - else - to_chat(L, "Your owner is already dead! You will soon perish.") - addtimer(CALLBACK(L, /mob.proc/dust), 150) //Give em a few seconds as a mercy. - -/datum/outfit/demonic_friend - name = "Demonic Friend" - uniform = /obj/item/clothing/under/assistantformal - shoes = /obj/item/clothing/shoes/laceup - r_pocket = /obj/item/radio/off - back = /obj/item/storage/backpack - implants = list(/obj/item/implant/mindshield) //No revolutionaries, he's MY friend. - id = /obj/item/card/id diff --git a/code/game/gamemodes/devil/devil.dm b/code/game/gamemodes/devil/devil.dm deleted file mode 100644 index 06933891ba6..00000000000 --- a/code/game/gamemodes/devil/devil.dm +++ /dev/null @@ -1,48 +0,0 @@ -GLOBAL_LIST_INIT(whiteness, list( - /obj/item/clothing/under/color/white = 2, - /obj/item/clothing/under/rank/bartender = 1, - /obj/item/clothing/under/rank/chef = 1, - /obj/item/clothing/under/rank/chief_engineer = 1, - /obj/item/clothing/under/rank/scientist = 1, - /obj/item/clothing/under/rank/chemist = 1, - /obj/item/clothing/under/rank/chief_medical_officer = 1, - /obj/item/clothing/under/rank/geneticist = 1, - /obj/item/clothing/under/rank/virologist = 1, - /obj/item/clothing/under/rank/nursesuit = 1, - /obj/item/clothing/under/rank/medical = 1, - /obj/item/clothing/under/rank/psych = 1, - /obj/item/clothing/under/rank/orderly = 1, - /obj/item/clothing/under/rank/security/brigphys = 1, - /obj/item/clothing/under/rank/internalaffairs = 1, - /obj/item/clothing/under/rank/ntrep = 1, - /obj/item/clothing/under/det = 1, - /obj/item/clothing/under/wedding/bride_white = 1, - /obj/item/clothing/under/mafia/white = 1, - /obj/item/clothing/under/noble_clothes = 1, - /obj/item/clothing/under/sl_suit = 1, - /obj/item/clothing/under/burial = 1 -)) - - - -/mob/living/proc/check_devil_bane_multiplier(obj/item/weapon, mob/living/attacker) - switch(mind.devilinfo.bane) - if(BANE_WHITECLOTHES) - if(istype(attacker, /mob/living/carbon/human)) - var/mob/living/carbon/human/H = attacker - if(H.w_uniform && istype(H.w_uniform, /obj/item/clothing/under)) - var/obj/item/clothing/under/U = H.w_uniform - if(GLOB.whiteness[U.type]) - src.visible_message("[src] seems to have been harmed by the purity of [attacker]'s clothes.", "Unsullied white clothing is disrupting your form.") - return GLOB.whiteness[U.type] + 1 - if(BANE_TOOLBOX) - if(istype(weapon,/obj/item/storage/toolbox)) - src.visible_message("The [weapon] seems unusually robust this time.", "The [weapon] is your unmaking!") - return 2.5 // Will take four hits with a normal toolbox. - if(BANE_HARVEST) - if(istype(weapon,/obj/item/reagent_containers/food/snacks/grown/) || istype(weapon,/obj/item/grown)) - src.visible_message("The spirits of the harvest aid in the exorcism.", "The harvest spirits are harming you.") - src.Weaken(2) - qdel(weapon) - return 2 - return 1 diff --git a/code/game/gamemodes/devil/devil_agent/devil_agent.dm b/code/game/gamemodes/devil/devil_agent/devil_agent.dm deleted file mode 100644 index e9a1d998a7a..00000000000 --- a/code/game/gamemodes/devil/devil_agent/devil_agent.dm +++ /dev/null @@ -1,38 +0,0 @@ -/datum/game_mode/devil/devil_agents - name = "Devil Agents" - config_tag = "devilagents" - required_players = 25 - required_enemies = 3 - recommended_enemies = 8 - - traitors_possible = 10 //hard limit on traitors if scaling is turned off - num_modifier = 4 - objective_count = 2 - - var/list/target_list = list() - var/list/late_joining_list = list() - minimum_devils = 3 - -/datum/game_mode/devil/devil_agents/post_setup() - var/i = 0 - for(var/datum/mind/devil in devils) - i++ - if(i + 1 > devils.len) - i = 0 - target_list[devil] = devils[i + 1] - ..() - -/datum/game_mode/devil/devil_agents/forge_devil_objectives(datum/mind/devil_mind, quantity) - ..(devil_mind, quantity - give_outsell_objective(devil_mind)) - -/datum/game_mode/devil/devil_agents/proc/give_outsell_objective(datum/mind/devil) - //If you override this method, have it return the number of objectives added. - if(target_list.len && target_list[devil]) // Is a double agent - var/datum/mind/target_mind = target_list[devil] - var/datum/objective/devil/outsell/outsellobjective = new - outsellobjective.owner = devil - outsellobjective.target = target_mind - outsellobjective.update_explanation_text() - devil.objectives += outsellobjective - return 1 - return 0 diff --git a/code/game/gamemodes/devil/devil_game_mode.dm b/code/game/gamemodes/devil/devil_game_mode.dm deleted file mode 100644 index 3ea91343f6b..00000000000 --- a/code/game/gamemodes/devil/devil_game_mode.dm +++ /dev/null @@ -1,67 +0,0 @@ -/datum/game_mode/devil - name = "devil" - config_tag = "devil" - protected_jobs = list("Security Officer", "Warden", "Detective", "Nanotrasen Representative", "Security Pod Pilot", "Magistrate", - "Internal Affairs Agent", "Librarian", "Chaplain", "Head of Security", "Captain", "Brig Physician", - "Nanotrasen Navy Officer", "Special Operations Officer", "AI", "Cyborg") - required_players = 2 - required_enemies = 1 - recommended_enemies = 4 - - var/traitors_possible = 4 //hard limit on devils if scaling is turned off - var/num_modifier = 0 // Used for gamemodes, that are a child of traitor, that need more than the usual. - var/objective_count = 2 - var/minimum_devils = 1 - var/devil_scale_coefficient = 10 - -/datum/game_mode/devil/announce() - to_chat(world, {"The current game mode is - Devil!
) - Devils: Purchase souls and tempt the crew to sin!
- Crew: Resist the lure of sin and remain pure!"}) - -/datum/game_mode/devil/pre_setup() - - if(config.protect_roles_from_antagonist) - restricted_jobs += protected_jobs - - var/list/possible_devils = get_players_for_role(ROLE_DEVIL) - var/num_devils = 0 - if(!possible_devils.len) - return 0 - if(config.traitor_scaling) - num_devils = max(1, round((num_players())/(devil_scale_coefficient))+1) - else - num_devils = max(1, min(num_players(), traitors_possible)) - - - for(var/j = 0, j < num_devils, j++) - if (!possible_devils.len) - break - var/datum/mind/devil = pick(possible_devils) - devils += devil - devil.special_role = ROLE_DEVIL - devil.restricted_roles = restricted_jobs - - log_game("[devil.key] (ckey) has been selected as a [config_tag]") - possible_devils.Remove(devil) - - if(devils.len < required_enemies) - return 0 - return 1 - - -/datum/game_mode/devil/post_setup() - for(var/datum/mind/devil in devils) - spawn(rand(10, 100)) - finalize_devil(devil, TRUE) - spawn(100) - forge_devil_objectives(devil, objective_count) //This has to be in a separate loop, as we need devil names to be generated before we give objectives in devil agent. - devil.devilinfo.announce_laws(devil.current) - var/obj_count = 1 - to_chat(devil.current, " Your current objectives:") - for(var/datum/objective/objective in devil.objectives) - to_chat(devil.current, "Objective #[obj_count]: [objective.explanation_text]") - obj_count++ - modePlayer += devils - ..() - return 1 diff --git a/code/game/gamemodes/devil/devilinfo.dm b/code/game/gamemodes/devil/devilinfo.dm deleted file mode 100644 index 22a5f4a6cde..00000000000 --- a/code/game/gamemodes/devil/devilinfo.dm +++ /dev/null @@ -1,559 +0,0 @@ -#define BLOOD_THRESHOLD 3 //How many souls are needed per stage. -#define TRUE_THRESHOLD 7 -#define ARCH_THRESHOLD 12 - -#define BASIC_DEVIL 0 -#define BLOOD_LIZARD 1 -#define TRUE_DEVIL 2 -#define ARCH_DEVIL 3 - -#define LOSS_PER_DEATH 2 - -#define SOULVALUE (soulsOwned.len-reviveNumber) - -#define DEVILRESURRECTTIME 600 - -GLOBAL_LIST_EMPTY(allDevils) -GLOBAL_LIST_INIT(lawlorify, list ( - LORE = list( - OBLIGATION_FOOD = "This devil seems to always offer it's victims food before slaughtering them.", - OBLIGATION_FIDDLE = "This devil will never turn down a musical challenge.", - OBLIGATION_DANCEOFF = "This devil will never turn down a dance off.", - OBLIGATION_GREET = "This devil seems to only be able to converse with people it knows the name of.", - OBLIGATION_PRESENCEKNOWN = "This devil seems to be unable to attack from stealth.", - OBLIGATION_SAYNAME = "He will always chant his name upon killing someone.", - OBLIGATION_ANNOUNCEKILL = "This devil always loudly announces his kills for the world to hear.", - OBLIGATION_ANSWERTONAME = "This devil always responds to his truename.", - BANE_SILVER = "Silver seems to gravely injure this devil.", - BANE_SALT = "Throwing salt at this devil will hinder his ability to use infernal powers temporarily.", - BANE_LIGHT = "Bright flashes will disorient the devil, likely causing him to flee.", - BANE_IRON = "Cold iron will slowly injure him, until he can purge it from his system.", - BANE_WHITECLOTHES = "Wearing clean white clothing will help ward off this devil.", - BANE_HARVEST = "Presenting the labors of a harvest will disrupt the devil.", - BANE_TOOLBOX = "That which holds the means of creation also holds the means of the devil's undoing.", - BAN_HURTWOMAN = "This devil seems to prefer hunting men.", - BAN_CHAPEL = "This devil avoids holy ground.", - BAN_HURTPRIEST = "The anointed clergy appear to be immune to his powers.", - BAN_AVOIDWATER = "The devil seems to have some sort of aversion to water, though it does not appear to harm him.", - BAN_STRIKEUNCONCIOUS = "This devil only shows interest in those who are awake.", - BAN_HURTLIZARD = "This devil will not strike an Unathi first.", - BAN_HURTANIMAL = "This devil avoids hurting animals.", - BANISH_WATER = "To banish the devil, you must infuse it's body with holy water.", - BANISH_COFFIN = "This devil will return to life if it's remains are not placed within a coffin.", - BANISH_FORMALDYHIDE = "To banish the devil, you must inject it's lifeless body with embalming fluid.", - BANISH_RUNES = "This devil will resurrect after death, unless it's remains are within a rune.", - BANISH_CANDLES = "A large number of nearby lit candles will prevent it from resurrecting.", - BANISH_DESTRUCTION = "It's corpse must be utterly destroyed to prevent resurrection.", - BANISH_FUNERAL_GARB = "If clad in funeral garments, this devil will be unable to resurrect. Should the clothes not fit, lay them gently on top of the devil's corpse." - ), - LAW = list( - OBLIGATION_FOOD = "When not acting in self defense, you must always offer your victim food before harming them.", - OBLIGATION_FIDDLE = "When not in immediate danger, if you are challenged to a musical duel, you must accept it. You are not obligated to duel the same person twice.", - OBLIGATION_DANCEOFF = "When not in immediate danger, if you are challenged to a dance off, you must accept it. You are not obligated to face off with the same person twice.", - OBLIGATION_GREET = "You must always greet other people by their last name before talking with them.", - OBLIGATION_PRESENCEKNOWN = "You must always make your presence known before attacking.", - OBLIGATION_SAYNAME = "You must always say your true name after you kill someone.", - OBLIGATION_ANNOUNCEKILL = "Upon killing someone, you must make your deed known to all within earshot, over comms if reasonably possible.", - OBLIGATION_ANSWERTONAME = "If you are not under attack, you must always respond to your true name.", - BAN_HURTWOMAN = "You must never harm a female outside of self defense.", - BAN_CHAPEL = "You must never attempt to enter the chapel.", - BAN_HURTPRIEST = "You must never attack a priest.", - BAN_AVOIDWATER = "You must never willingly touch a wet surface.", - BAN_STRIKEUNCONCIOUS = "You must never strike an unconscious person.", - BAN_HURTLIZARD = "You must never harm an Unathi outside of self defense.", - BAN_HURTANIMAL = "You must never harm a non-sentient creature or robot outside of self defense.", - BANE_SILVER = "Silver, in all of it's forms shall be your downfall.", - BANE_SALT = "Salt will disrupt your magical abilities.", - BANE_LIGHT = "Blinding lights will prevent you from using offensive powers for a time.", - BANE_IRON = "Cold wrought iron shall act as poison to you.", - BANE_WHITECLOTHES = "Those clad in pristine white garments will strike you true.", - BANE_HARVEST = "The fruits of the harvest shall be your downfall.", - BANE_TOOLBOX = "Toolboxes are bad news for you, for some reason.", - BANISH_WATER = "If your corpse is filled with holy water, you will be unable to resurrect.", - BANISH_COFFIN = "If your corpse is in a coffin, you will be unable to resurrect.", - BANISH_FORMALDYHIDE = "If your corpse is embalmed, you will be unable to resurrect.", - BANISH_RUNES = "If your corpse is placed within a rune, you will be unable to resurrect.", - BANISH_CANDLES = "If your corpse is near lit candles, you will be unable to resurrect.", - BANISH_DESTRUCTION = "If your corpse is destroyed, you will be unable to resurrect.", - BANISH_FUNERAL_GARB = "If your corpse is clad in funeral garments, you will be unable to resurrect." - ) - )) - -/datum/devilinfo - var/datum/mind/owner = null - var/obligation - var/ban - var/bane - var/banish - var/truename - var/list/datum/mind/soulsOwned = new - var/datum/dna/humanform = null - var/reviveNumber = 0 - var/form = BASIC_DEVIL - var/exists = 0 - var/static/list/dont_remove_spells = list( - /obj/effect/proc_holder/spell/targeted/click/summon_contract, - /obj/effect/proc_holder/spell/targeted/conjure_item/violin, - /obj/effect/proc_holder/spell/targeted/summon_dancefloor) - var/ascendable = FALSE - -/datum/devilinfo/New() - ..() - dont_remove_spells = typecacheof(dont_remove_spells) - -/proc/randomDevilInfo(name = randomDevilName()) - var/datum/devilinfo/devil = new - devil.truename = name - devil.bane = randomdevilbane() - devil.obligation = randomdevilobligation() - devil.ban = randomdevilban() - devil.banish = randomdevilbanish() - return devil - -/proc/devilInfo(name, saveDetails = 0) - if(GLOB.allDevils[lowertext(name)]) - return GLOB.allDevils[lowertext(name)] - else - var/datum/devilinfo/devil = randomDevilInfo(name) - GLOB.allDevils[lowertext(name)] = devil - devil.exists = saveDetails - return devil - - - -/proc/randomDevilName() - var/preTitle = "" - var/title = "" - var/mainName = "" - var/suffix = "" - if(prob(65)) - if(prob(35)) - preTitle = pick("Dark ", "Hellish ", "Fiery ", "Sinful ", "Blood ") - title = pick("Lord ", "Fallen Prelate ", "Count ", "Viscount ", "Vizier ", "Elder ", "Adept ") - var/probability = 100 - mainName = pick("Hal", "Ve", "Odr", "Neit", "Ci", "Quon", "Mya", "Folth", "Wren", "Gyer", "Geyr", "Hil", "Niet", "Twou", "Hu", "Don") - while(prob(probability)) - mainName += pick("hal", "ve", "odr", "neit", "ca", "quon", "mya", "folth", "wren", "gyer", "geyr", "hil", "niet", "twoe", "phi", "coa") - probability -= 20 - if(prob(40)) - suffix = pick(" the Red", " the Soulless", " the Master", ", the Lord of all things", ", Jr.") - return preTitle + title + mainName + suffix - -/proc/randomdevilobligation() - return pick(OBLIGATION_FOOD, OBLIGATION_FIDDLE, OBLIGATION_DANCEOFF, OBLIGATION_GREET, OBLIGATION_PRESENCEKNOWN, OBLIGATION_SAYNAME, OBLIGATION_ANNOUNCEKILL, OBLIGATION_ANSWERTONAME) - -/proc/randomdevilban() - return pick(BAN_HURTWOMAN, BAN_CHAPEL, BAN_HURTPRIEST, BAN_AVOIDWATER, BAN_STRIKEUNCONCIOUS, BAN_HURTLIZARD, BAN_HURTANIMAL) - -/proc/randomdevilbane() - return pick(BANE_SALT, BANE_LIGHT, BANE_IRON, BANE_WHITECLOTHES, BANE_SILVER, BANE_HARVEST, BANE_TOOLBOX) - -/proc/randomdevilbanish() - return pick(BANISH_WATER, BANISH_COFFIN, BANISH_FORMALDYHIDE, BANISH_RUNES, BANISH_CANDLES, BANISH_DESTRUCTION, BANISH_FUNERAL_GARB) - -/datum/devilinfo/proc/link_with_mob(mob/living/L) - if(istype(L, /mob/living/carbon/human)) - var/mob/living/carbon/human/H = L - humanform = H.dna.Clone() - owner = L.mind - give_base_spells(1) - -/datum/devilinfo/proc/add_soul(datum/mind/soul) - if(soulsOwned.Find(soul)) - return - soulsOwned += soul - owner.current.set_nutrition(NUTRITION_LEVEL_FULL) - to_chat(owner.current, "You feel satiated as you received a new soul.") - update_hud() - switch(SOULVALUE) - if(0) - to_chat(owner.current, "Your hellish powers have been restored.") - give_base_spells() - if(BLOOD_THRESHOLD) - to_chat(owner.current, "You feel as though your humanoid form is about to shed. You will soon turn into a blood lizard.") - sleep(50) - increase_blood_lizard() - if(TRUE_THRESHOLD) - to_chat(owner.current, "You feel as though your current form is about to shed. You will soon turn into a true devil.") - sleep(50) - increase_true_devil() - if(ARCH_THRESHOLD) - arch_devil_prelude() - increase_arch_devil() - -/datum/devilinfo/proc/remove_soul(datum/mind/soul) - if(soulsOwned.Remove(soul)) - to_chat(owner.current, "You feel as though a soul has slipped from your grasp.") - check_regression() - update_hud() - -/datum/devilinfo/proc/check_regression() - if(form == ARCH_DEVIL) - return //arch devil can't regress - //Yes, fallthrough behavior is intended, so I can't use a switch statement. - if(form == TRUE_DEVIL && SOULVALUE < TRUE_THRESHOLD) - regress_blood_lizard() - if(form == BLOOD_LIZARD && SOULVALUE < BLOOD_THRESHOLD) - regress_humanoid() - if(SOULVALUE < 0) - remove_spells() - to_chat(owner.current, "As punishment for your failures, all of your powers except contract creation have been revoked.") - -/datum/devilinfo/proc/regress_humanoid() - to_chat(owner.current, "Your powers weaken, have more contracts be signed to regain power.") - if(istype(owner.current, /mob/living/carbon/human)) - var/mob/living/carbon/human/H = owner.current - if(humanform) - H.set_species(humanform.species) - H.dna = humanform.Clone() - H.sync_organ_dna(assimilate = 0) - else - H.set_species(/datum/species/human) - // TODO: Add some appearance randomization here or something - humanform = H.dna.Clone() - H.regenerate_icons() - else - owner.current.color = "" - give_base_spells() - if(istype(owner.current.loc, /obj/effect/dummy/slaughter)) - owner.current.forceMove(get_turf(owner.current))//Fixes dying while jaunted leaving you permajaunted. - form = BASIC_DEVIL - -/datum/devilinfo/proc/regress_blood_lizard() - var/mob/living/carbon/true_devil/D = owner.current - to_chat(D, "Your powers weaken, have more contracts be signed to regain power.") - D.oldform.loc = D.loc - owner.transfer_to(D.oldform) - D.oldform.status_flags &= ~GODMODE - give_lizard_spells() - qdel(D) - form = BLOOD_LIZARD - update_hud() - - -/datum/devilinfo/proc/increase_blood_lizard() - if(ishuman(owner.current)) - var/mob/living/carbon/human/H = owner.current - var/list/language_temp = H.languages.Copy() - H.set_species(/datum/species/unathi) - H.languages = language_temp - H.underwear = "Nude" - H.undershirt = "Nude" - H.socks = "Nude" - H.change_skin_color(80, 16, 16) //A deep red - H.regenerate_icons() - else //Did the devil get hit by a staff of transmutation? - owner.current.color = "#501010" - give_lizard_spells() - form = BLOOD_LIZARD - - - -/datum/devilinfo/proc/increase_true_devil() - var/mob/living/carbon/true_devil/A = new /mob/living/carbon/true_devil(owner.current.loc, owner.current) - A.faction |= "hell" - // Put the old body in stasis - owner.current.status_flags |= GODMODE - owner.current.loc = A - A.oldform = owner.current - owner.transfer_to(A) - A.set_name() - give_true_spells() - form = TRUE_DEVIL - update_hud() - -/datum/devilinfo/proc/arch_devil_prelude() - if(!ascendable) - return - var/mob/living/carbon/true_devil/D = owner.current - to_chat(D, "You feel as though your form is about to ascend.") - sleep(50) - if(!D) - return - D.visible_message("[D]'s skin begins to erupt with spikes.", \ - "Your flesh begins creating a shield around yourself.") - sleep(100) - if(!D) - return - D.visible_message("The horns on [D]'s head slowly grow and elongate.", \ - "Your body continues to mutate. Your telepathic abilities grow.") - sleep(90) - if(!D) - return - D.visible_message("[D]'s body begins to violently stretch and contort.", \ - "You begin to rend apart the final barriers to ultimate power.") - sleep(40) - if(!D) - return - to_chat(D, "Yes!") - sleep(10) - if(!D) - return - to_chat(D, "YES!!") - sleep(10) - if(!D) - return - to_chat(D, "YE--") - sleep(1) - if(!D) - return - to_chat(world, "SLOTH, WRATH, GLUTTONY, ACEDIA, ENVY, GREED, PRIDE! FIRES OF HELL AWAKEN!!") - world << 'sound/hallucinations/veryfar_noise.ogg' - sleep(50) - if(!SSticker.mode.devil_ascended) - SSshuttle.emergency.request(null, 0.3) - SSticker.mode.devil_ascended++ - -/datum/devilinfo/proc/increase_arch_devil() - if(!ascendable) - return - var/mob/living/carbon/true_devil/D = owner.current - if(!istype(D)) - return - give_arch_spells() - D.convert_to_archdevil() - if(istype(D.loc, /obj/effect/dummy/slaughter)) - D.forceMove(get_turf(D)) - var/area/A = get_area(owner.current) - if(A) - notify_ghosts("An arch devil has ascended in [A.name]. Reach out to the devil to start climbing the infernal corporate ladder.", title = "Arch Devil Ascended", source = owner.current, action = NOTIFY_ATTACK) - form = ARCH_DEVIL - -/datum/devilinfo/proc/remove_spells() - for(var/X in owner.spell_list) - var/obj/effect/proc_holder/spell/S = X - if(!is_type_in_typecache(S, dont_remove_spells)) - owner.RemoveSpell(S) - -/datum/devilinfo/proc/give_summon_contract() - owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/click/summon_contract(null)) - - -/datum/devilinfo/proc/give_base_spells(give_summon_contract = 0) - remove_spells() - owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/click/fireball/hellish(null)) - owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/conjure_item/pitchfork(null)) - if(give_summon_contract) - give_summon_contract() - if(obligation == OBLIGATION_FIDDLE) - owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/conjure_item/violin(null)) - if(obligation == OBLIGATION_DANCEOFF) - owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/summon_dancefloor(null)) - -/datum/devilinfo/proc/give_lizard_spells() - remove_spells() - owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/conjure_item/pitchfork(null)) - owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/click/fireball/hellish(null)) - owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/infernal_jaunt(null)) - -/datum/devilinfo/proc/give_true_spells() - remove_spells() - owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/conjure_item/pitchfork/greater(null)) - owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/click/fireball/hellish(null)) - owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/infernal_jaunt(null)) - owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/sintouch(null)) - -/datum/devilinfo/proc/give_arch_spells() - remove_spells() - owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/conjure_item/pitchfork/ascended(null)) - owner.AddSpell(new /obj/effect/proc_holder/spell/targeted/sintouch/ascended(null)) - -/datum/devilinfo/proc/beginResurrectionCheck(mob/living/body) - if(owner.current != body) - body = owner.current - if(SOULVALUE > 0) - to_chat(owner.current, "Your body has been damaged to the point that you may no longer use it. At the cost of some of your power, you will return to life soon.") - addtimer(CALLBACK(src, "activateResurrection", body), DEVILRESURRECTTIME) - else - to_chat(owner.messageable_mob(), "Your hellish powers are too weak to resurrect yourself.") - -/datum/devilinfo/proc/activateResurrection(mob/living/body) - if(QDELETED(body) || body.stat == DEAD) - if(SOULVALUE > 0) - if(check_banishment(body)) - to_chat(owner.messageable_mob(), "Unfortunately, the mortals have finished a ritual that prevents your resurrection.") - return -1 - else - to_chat(owner.messageable_mob(), "WE LIVE AGAIN!") - return hellish_resurrection(body) - else - to_chat(owner.messageable_mob(), "Unfortunately, the power that stemmed from your contracts has been extinguished. You no longer have enough power to resurrect.") - return -1 - else - to_chat(owner.current, "You seem to have resurrected without your hellish powers.") - -/datum/devilinfo/proc/check_banishment(mob/living/body) - switch(banish) - if(BANISH_WATER) - if(!QDELETED(body) && iscarbon(body)) - var/mob/living/carbon/H = body - return H.reagents.has_reagent("holy water") - return 0 - if(BANISH_COFFIN) - return (!QDELETED(body) && istype(body.loc, /obj/structure/closet/coffin)) - if(BANISH_FORMALDYHIDE) - if(!QDELETED(body) && iscarbon(body)) - var/mob/living/carbon/H = body - return H.reagents.has_reagent("formaldehyde") - return 0 - if(BANISH_RUNES) - if(!QDELETED(body)) - for(var/obj/effect/decal/cleanable/crayon/R in range(0,body)) - if (R.name == "rune") - return 1 - return 0 - if(BANISH_CANDLES) - if(!QDELETED(body)) - var/count = 0 - for(var/obj/item/candle/C in range(1,body)) - count += C.lit - if(count>=4) - return 1 - return 0 - if(BANISH_DESTRUCTION) - if(!QDELETED(body)) - return 0 - return 1 - if(BANISH_FUNERAL_GARB) - if(!QDELETED(body) && iscarbon(body)) - var/mob/living/carbon/human/H = body - if(H.w_uniform && istype(H.w_uniform, /obj/item/clothing/under/burial)) - return 1 - return 0 - else - for(var/obj/item/clothing/under/burial/B in range(0,body)) - if(B.loc == get_turf(B)) //Make sure it's not in someone's inventory or something. - return 1 - return 0 - -/datum/devilinfo/proc/hellish_resurrection(mob/living/body) - message_admins("[owner.name] (true name is: [truename]) is resurrecting using hellish energy.") - if(SOULVALUE <= ARCH_THRESHOLD && ascendable) // once ascended, arch devils do not go down in power by any means. - reviveNumber += LOSS_PER_DEATH - update_hud() - if(!QDELETED(body)) - body.revive() - if(!body.client) - var/mob/dead/observer/O = owner.get_ghost() - O.reenter_corpse() - if(istype(body.loc, /obj/effect/dummy/slaughter)) - body.forceMove(get_turf(body))//Fixes dying while jaunted leaving you permajaunted. - if(istype(body, /mob/living/carbon/true_devil)) - var/mob/living/carbon/true_devil/D = body - if(D.oldform) - D.oldform.revive() // Heal the old body too, so the devil doesn't resurrect, then immediately regress into a dead body. - if(body.stat == DEAD) // Not sure why this would happen - create_new_body() - else if(GLOB.blobstart.len > 0) - // teleport the body so repeated beatdowns aren't an option) - body.forceMove(get_turf(pick(GLOB.blobstart))) - // give them the devil lawyer outfit in case they got stripped - if(ishuman(body)) - var/mob/living/carbon/human/H = body - H.equipOutfit(/datum/outfit/devil_lawyer) - else - create_new_body() - check_regression() - -/datum/devilinfo/proc/create_new_body() - if(GLOB.blobstart.len > 0) - var/turf/targetturf = get_turf(pick(GLOB.blobstart)) - var/mob/currentMob = owner.current - if(QDELETED(currentMob)) - currentMob = owner.get_ghost() - if(!currentMob) - message_admins("[owner.name]'s devil resurrection failed due to client logoff. Aborting.") - return -1 - if(currentMob.mind != owner) - message_admins("[owner.name]'s devil resurrection failed due to becoming a new mob. Aborting.") - return -1 - var/mob/living/carbon/human/H = new /mob/living/carbon/human(targetturf) - owner.transfer_to(H) - if(isobserver(currentMob)) - var/mob/dead/observer/O = currentMob - O.reenter_corpse() - if(humanform) - H.set_species(humanform.species) - H.dna = humanform.Clone() - - H.dna.UpdateSE() - H.dna.UpdateUI() - - H.sync_organ_dna(1) // It's literally a fresh body as you can get, so all organs properly belong to it - H.UpdateAppearance() - else - // gibbed cyborg or similar - create a randomized "humanform" appearance - H.scramble_appearance() - humanform = H.dna.Clone() - - - H.equipOutfit(/datum/outfit/devil_lawyer) - give_base_spells(TRUE) - if(SOULVALUE >= BLOOD_THRESHOLD) - increase_blood_lizard() - if(SOULVALUE >= TRUE_THRESHOLD) //Yes, BOTH this and the above if statement are to run if soulpower is high enough. - increase_true_devil() - if(SOULVALUE >= ARCH_THRESHOLD && ascendable) - increase_arch_devil() - else - throw EXCEPTION("Unable to find a blobstart landmark for hellish resurrection") - -/datum/devilinfo/proc/update_hud() - if(istype(owner.current, /mob/living/carbon)) - var/mob/living/C = owner.current - if(C.hud_used && C.hud_used.devilsouldisplay) - C.hud_used.devilsouldisplay.update_counter(SOULVALUE) - -// SECTION: Messages and explanations - -/datum/devilinfo/proc/announce_laws(mob/living/owner) - to_chat(owner, "You remember your link to the infernal. You are [truename], an agent of hell, a devil. And you were sent to the plane of creation for a reason. A greater purpose. Convince the crew to sin, and embroiden Hell's grasp.") - to_chat(owner, "However, your infernal form is not without weaknesses.") - to_chat(owner, "You may not use violence to coerce someone into selling their soul.") - to_chat(owner, "You may not directly and knowingly physically harm a devil, other than yourself.") - to_chat(owner,GLOB.lawlorify[LAW][bane]) - to_chat(owner,GLOB.lawlorify[LAW][ban]) - to_chat(owner,GLOB.lawlorify[LAW][obligation]) - to_chat(owner,GLOB.lawlorify[LAW][banish]) - to_chat(owner, "

Remember, the crew can research your weaknesses if they find out your devil name.
") - - -#undef BLOOD_THRESHOLD -#undef TRUE_THRESHOLD -#undef ARCH_THRESHOLD -#undef BASIC_DEVIL -#undef BLOOD_LIZARD -#undef TRUE_DEVIL -#undef ARCH_DEVIL -#undef LOSS_PER_DEATH -#undef SOULVALUE -#undef DEVILRESURRECTTIME - -/datum/outfit/devil_lawyer - name = "Devil Lawyer" - uniform = /obj/item/clothing/under/lawyer/black - shoes = /obj/item/clothing/shoes/laceup - back = /obj/item/storage/backpack - l_hand = /obj/item/storage/briefcase - l_pocket = /obj/item/pen - l_ear = /obj/item/radio/headset - - id = /obj/item/card/id - -/datum/outfit/devil_lawyer/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) - var/obj/item/card/id/W = H.wear_id - if(!istype(W) || W.assignment) // either doesn't have a card, or the card is already written to - return - var/name_to_use = H.real_name - if(H.mind && H.mind.devilinfo) - // Having hell create an ID for you causes its risks - name_to_use = H.mind.devilinfo.truename - - W.name = "[name_to_use]'s ID Card (Lawyer)" - W.registered_name = name_to_use - W.assignment = "Lawyer" - W.rank = W.assignment - W.age = H.age - W.sex = capitalize(H.gender) - W.access = list(ACCESS_MAINT_TUNNELS, ACCESS_SYNDICATE, ACCESS_EXTERNAL_AIRLOCKS) - W.photo = get_id_photo(H) diff --git a/code/game/gamemodes/devil/game_mode.dm b/code/game/gamemodes/devil/game_mode.dm deleted file mode 100644 index 7e9f054faea..00000000000 --- a/code/game/gamemodes/devil/game_mode.dm +++ /dev/null @@ -1,94 +0,0 @@ -/datum/game_mode - var/list/datum/mind/sintouched = list() - var/list/datum/mind/devils = list() - var/devil_ascended = 0 // Number of arch devils on station - -/datum/game_mode/proc/auto_declare_completion_sintouched() - var/text = "" - if(sintouched.len) - text += "
The sintouched were:" - var/list/sintouchedUnique = uniqueList(sintouched) - for(var/S in sintouchedUnique) - var/datum/mind/sintouched_mind = S - text += printplayer(sintouched_mind) - text += printobjectives(sintouched_mind) - text += "
" - text += "
" - to_chat(world,text) - -/datum/game_mode/proc/auto_declare_completion_devils() - var/text = "" - if(devils.len) - text += "
The devils were:" - for(var/D in devils) - var/datum/mind/devil = D - text += printplayer(devil) - text += printdevilinfo(devil) - text += printobjectives(devil) - text += "
" - text += "
" - to_chat(world,text) - - -/datum/game_mode/proc/finalize_devil(datum/mind/devil_mind, ascendable = FALSE) - var/trueName= randomDevilName() - devil_mind.devilinfo = devilInfo(trueName, 1) - devil_mind.devilinfo.ascendable = ascendable - devil_mind.store_memory("Your diabolical true name is [devil_mind.devilinfo.truename]
[GLOB.lawlorify[LAW][devil_mind.devilinfo.ban]]
You may not use violence to coerce someone into selling their soul.
You may not directly and knowingly physically harm a devil, other than yourself.
[GLOB.lawlorify[LAW][devil_mind.devilinfo.bane]]
[GLOB.lawlorify[LAW][devil_mind.devilinfo.obligation]]
[GLOB.lawlorify[LAW][devil_mind.devilinfo.banish]]
") - devil_mind.devilinfo.link_with_mob(devil_mind.current) - if(devil_mind.assigned_role == "Clown") - to_chat(devil_mind.current, "Your infernal nature allows you to wield weapons without harming yourself.") - devil_mind.current.dna.SetSEState(GLOB.clumsyblock, FALSE) - singlemutcheck(devil_mind.current, GLOB.clumsyblock, MUTCHK_FORCED) - var/datum/action/innate/toggle_clumsy/A = new - A.Grant(devil_mind.current) - spawn(10) - devil_mind.devilinfo.update_hud() - if(issilicon(devil_mind.current)) - var/mob/living/silicon/S = devil_mind.current - S.laws.set_sixsixsix_law("You may not use violence to coerce someone into selling their soul.") - S.laws.set_sixsixsix_law("You may not directly and knowingly physically harm a devil, other than yourself.") - S.laws.set_sixsixsix_law("[GLOB.lawlorify[LAW][devil_mind.devilinfo.ban]]") - S.laws.set_sixsixsix_law("[GLOB.lawlorify[LAW][devil_mind.devilinfo.obligation]]") - S.laws.set_sixsixsix_law("Accomplish your objectives at all costs.") - -// unsure about the second "quantity" arg and how it fits with the antag refactor -/datum/game_mode/proc/forge_devil_objectives(datum/mind/devil_mind, quantity) - var/list/validtypes = list(/datum/objective/devil/soulquantity, /datum/objective/devil/soulquality, /datum/objective/devil/sintouch, /datum/objective/devil/buy_target) - for(var/i = 1 to quantity) - var/type = pick(validtypes) - var/datum/objective/devil/objective = new type(null) - objective.owner = devil_mind - devil_mind.objectives += objective - if(!istype(objective, /datum/objective/devil/buy_target)) - validtypes -= type //prevent duplicate objectives, EXCEPT for buy_target. - else - objective.find_target() - -/datum/game_mode/proc/greet_devil(datum/mind/devil_mind) - if(!devil_mind.devilinfo) - return - devil_mind.devilinfo.announce_laws(devil_mind.current) - devil_mind.announce_objectives() - - -/datum/game_mode/proc/printdevilinfo(datum/mind/ply) - if(!ply.devilinfo) - return "Target is not a devil." - var/text = "
The devil's true name is: [ply.devilinfo.truename]
" - text += "The devil's bans were:
" - text += " [GLOB.lawlorify[LORE][ply.devilinfo.ban]]
" - text += " [GLOB.lawlorify[LORE][ply.devilinfo.bane]]
" - text += " [GLOB.lawlorify[LORE][ply.devilinfo.obligation]]
" - text += " [GLOB.lawlorify[LORE][ply.devilinfo.banish]]

" - return text - -/datum/game_mode/proc/update_devil_icons_added(datum/mind/devil_mind) - var/datum/atom_hud/antag/hud = GLOB.huds[ANTAG_HUD_DEVIL] - hud.join_hud(devil_mind.current) - set_antag_hud(devil_mind.current, "huddevil") - -/datum/game_mode/proc/update_devil_icons_removed(datum/mind/devil_mind) - var/datum/atom_hud/antag/hud = GLOB.huds[ANTAG_HUD_DEVIL] - hud.leave_hud(devil_mind.current) - set_antag_hud(devil_mind.current, null) diff --git a/code/game/gamemodes/devil/imp/imp.dm b/code/game/gamemodes/devil/imp/imp.dm deleted file mode 100644 index e863eaf1f6a..00000000000 --- a/code/game/gamemodes/devil/imp/imp.dm +++ /dev/null @@ -1,54 +0,0 @@ -//////////////////The Monster - -/mob/living/simple_animal/imp - name = "imp" - real_name = "imp" - desc = "A large, menacing creature covered in armored black scales." - speak_emote = list("cackles") - emote_hear = list("cackles","screeches") - response_help = "thinks better of touching" - response_disarm = "flails at" - response_harm = "punches" - icon = 'icons/mob/mob.dmi' - icon_state = "imp" - icon_living = "imp" - speed = 1 - a_intent = INTENT_HARM - stop_automated_movement = 1 - status_flags = CANPUSH - attack_sound = 'sound/misc/demon_attack1.ogg' - atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0) - minbodytemp = 250 //Weak to cold - maxbodytemp = INFINITY - faction = list("hell") - attacktext = "wildly tears into" - maxHealth = 200 - health = 200 - healable = 0 - environment_smash = 1 - melee_damage_lower = 10 - melee_damage_upper = 15 - see_in_dark = 8 - lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE - var/boost - var/playstyle_string = "You are an imp, a mischevious creature from hell. You are the lowest rank on the hellish totem pole \ - Though you are not obligated to help, perhaps by aiding a higher ranking devil, you might just get a promotion. However, you are incapable \ - of intentionally harming a fellow devil." - -/mob/living/simple_animal/imp/New() - ..() - boost = world.time + 60 - -/mob/living/simple_animal/imp/Life() - ..() - if(boost[src] screams in agony as it sublimates into a sulfurous smoke.
") - ghostize() - qdel(src) diff --git a/code/game/gamemodes/devil/objectives.dm b/code/game/gamemodes/devil/objectives.dm deleted file mode 100644 index 04d0217b599..00000000000 --- a/code/game/gamemodes/devil/objectives.dm +++ /dev/null @@ -1,109 +0,0 @@ -/datum/objective/devil - -/datum/objective/devil/soulquantity - explanation_text = "You shouldn't see this text. Error:DEVIL1" - target_amount = 4 - -/datum/objective/devil/soulquantity/New() - target_amount = pick(6, 7, 8) - update_explanation_text() - -/datum/objective/devil/proc/update_explanation_text() - //Intentionally empty - -/datum/objective/devil/soulquantity/update_explanation_text() - explanation_text = "Purchase, and retain control over at least [target_amount] souls." - -/datum/objective/devil/soulquantity/check_completion() - var/count = 0 - for(var/S in owner.devilinfo.soulsOwned) - var/datum/mind/L = S - if(L.soulOwner == owner) - count++ - return count >= target_amount - - - -/datum/objective/devil/soulquality - explanation_text = "You shouldn't see this text. Error:DEVIL2" - var/contractType - var/contractName - -/datum/objective/devil/soulquality/New() - contractType = pick(CONTRACT_POWER, CONTRACT_WEALTH, CONTRACT_PRESTIGE, CONTRACT_MAGIC, CONTRACT_REVIVE, CONTRACT_KNOWLEDGE) - target_amount = pick(1, 2) - switch(contractType) - if(CONTRACT_POWER) - contractName = "for power" - if(CONTRACT_WEALTH) - contractName = "for wealth" - if(CONTRACT_PRESTIGE) - contractName = "for prestige" - if(CONTRACT_MAGIC) - contractName = "for magic" - if(CONTRACT_REVIVE) - contractName = "of revival" - if(CONTRACT_KNOWLEDGE) - contractName = "for knowledge" - update_explanation_text() - -/datum/objective/devil/soulquality/update_explanation_text() - explanation_text = "Have mortals sign at least [target_amount] contracts [contractName]." - -/datum/objective/devil/soulquality/check_completion() - var/count = 0 - for(var/S in owner.devilinfo.soulsOwned) - var/datum/mind/L = S - if(L.soulOwner != L && L.damnation_type == contractType) - count++ - return count >= target_amount - - - -/datum/objective/devil/sintouch - explanation_text = "You shouldn't see this text. Error:DEVIL3" - -/datum/objective/devil/sintouch/New() - target_amount = pick(4, 5) - explanation_text = "Ensure at least [target_amount] mortals are sintouched." - -/datum/objective/devil/sintouch/check_completion() - return target_amount <= SSticker.mode.sintouched.len - - - -/datum/objective/devil/buy_target - explanation_text = "You shouldn't see this text. Error:DEVIL4" - -/datum/objective/devil/buy_target/New() - find_target() - update_explanation_text() - -/datum/objective/devil/buy_target/update_explanation_text() - if(target) - explanation_text = "Purchase and retain the soul of [target.name], the [target.assigned_role]." - else - explanation_text = "Free objective." - -/datum/objective/devil/buy_target/check_completion() - return target.soulOwner == owner - - -/datum/objective/devil/outsell - explanation_text = "You shouldn't see this text. Error:DEVIL5" - -/datum/objective/devil/outsell/update_explanation_text() - explanation_text = "Purchase and retain control over more souls than [target.devilinfo.truename], known to mortals as [target.name], the [target.assigned_role]." - -/datum/objective/devil/outsell/check_completion() - var/selfcount = 0 - for(var/S in owner.devilinfo.soulsOwned) - var/datum/mind/L = S - if(L.soulOwner == owner) - selfcount++ - var/targetcount = 0 - for(var/S in target.devilinfo.soulsOwned) - var/datum/mind/L = S - if(L.soulOwner == target) - targetcount++ - return selfcount > targetcount diff --git a/code/game/gamemodes/devil/true_devil/_true_devil.dm b/code/game/gamemodes/devil/true_devil/_true_devil.dm deleted file mode 100644 index 197524c0e38..00000000000 --- a/code/game/gamemodes/devil/true_devil/_true_devil.dm +++ /dev/null @@ -1,218 +0,0 @@ -#define DEVIL_R_HAND_LAYER 1 -#define DEVIL_L_HAND_LAYER 2 -#define DEVIL_TOTAL_LAYERS 2 - -// This is used primarily for having hands. -/mob/living/carbon/true_devil - name = "True Devil" - desc = "A pile of infernal energy, taking a vaguely humanoid form." - icon = 'icons/mob/32x64.dmi' - icon_state = "true_devil" - gender = NEUTER - health = 350 - maxHealth = 350 - ventcrawler = FALSE - density = TRUE - pass_flags = 0 - var/ascended = FALSE - sight = (SEE_TURFS | SEE_OBJS) - status_flags = CANPUSH - universal_understand = TRUE - universal_speak = TRUE //The devil speaks all languages meme - var/mob/living/oldform - var/list/devil_overlays[DEVIL_TOTAL_LAYERS] - -/mob/living/carbon/true_devil/New(loc, mob/living/carbon/dna_source) - dna = dna_source.dna.Clone() - var/obj/item/organ/internal/brain/B = new(src) - var/obj/item/organ/internal/ears/E = new(src) - B.insert() - E.insert() - ..() - -// inventory system could use some love -/mob/living/carbon/true_devil/put_in_hands(obj/item/W) - if(!W) - return 0 - if(put_in_active_hand(W)) - return TRUE - else if(put_in_inactive_hand(W)) - return TRUE - else - ..() - -/mob/living/carbon/true_devil/proc/convert_to_archdevil() - maxHealth = 5000 // not an IMPOSSIBLE amount, but still near impossible. - ascended = TRUE - health = maxHealth - icon_state = "arch_devil" - -/mob/living/carbon/true_devil/proc/set_name() - name = mind.devilinfo.truename - real_name = name - -/mob/living/carbon/true_devil/Login() - ..() - if(mind.devilinfo) - mind.devilinfo.announce_laws(src) - mind.announce_objectives() - - -/mob/living/carbon/true_devil/death(gibbed) - . = ..(gibbed) - drop_l_hand() - drop_r_hand() - - -/mob/living/carbon/true_devil/examine(mob/user) - var/msg = "*---------*\nThis is [bicon(src)] [src]!\n" - - //Left hand items - if(l_hand && !(l_hand.flags & ABSTRACT)) - if(l_hand.blood_DNA) - msg += "It is holding [bicon(l_hand)] [l_hand.gender == PLURAL? "some" : "a"] blood-stained [l_hand.name] in its left hand!\n" - else - msg += "It is holding [bicon(l_hand)] \a [l_hand] in its left hand.\n" - - //Right hand items - if(r_hand && !(r_hand.flags & ABSTRACT)) - if(r_hand.blood_DNA) - msg += "It is holding [bicon(r_hand)] [r_hand.gender == PLURAL? "some" : "a"] blood-stained [r_hand.name] in its right hand!\n" - else - msg += "It is holding [bicon(r_hand)] \a [r_hand] in its right hand.\n" - - //Braindead - if(!client && stat != DEAD) - msg += "The devil seems to be in deep contemplation.\n" - - //Damaged - if(stat == DEAD) - msg += "The hellfire seems to have been extinguished, for now at least.\n" - else if(health < (maxHealth/10)) - msg += "You can see hellfire inside of it's gaping wounds.\n" - else if(health < (maxHealth/2)) - msg += "You can see hellfire inside of it's wounds.\n" - msg += "*---------*" - . = list(msg) - - -/mob/living/carbon/true_devil/IsAdvancedToolUser() - return TRUE - -/mob/living/carbon/true_devil/assess_threat() - return 666 - -/mob/living/carbon/true_devil/flash_eyes(intensity = 1, override_blindness_check = 0, affect_silicon = 0, visual = 0) - if(mind && has_bane(BANE_LIGHT)) - mind.disrupt_spells(-500) - return ..() //flashes don't stop devils UNLESS it's their bane. - - -/mob/living/carbon/true_devil/attacked_by(obj/item/I, mob/living/user, def_zone) - var/weakness = check_weakness(I, user) - apply_damage(I.force * weakness, I.damtype, def_zone) - var/message_verb = "" - if(I.attack_verb && I.attack_verb.len) - message_verb = "[pick(I.attack_verb)]" - else if(I.force) - message_verb = "attacked" - - var/attack_message = "[src] has been [message_verb] with [I]." - if(user) - user.do_attack_animation(src) - if(user in viewers(src, null)) - attack_message = "[user] has [message_verb] [src] with [I]!" - if(message_verb) - visible_message("[attack_message]", - "[attack_message]") - return TRUE - -/mob/living/carbon/true_devil/UnarmedAttack(atom/A, proximity) - if(!ishuman(A)) - // `attack_hand` on mobs assumes the attacker is a human - // I am the worst - A.attack_hand(src) - // If the devil wants to actually attack, they have the pitchfork. - - -/mob/living/carbon/true_devil/Process_Spacemove(movement_dir = 0) - return TRUE - -/mob/living/carbon/true_devil/singularity_act() - if(ascended) - return 0 - return ..() - -/mob/living/carbon/true_devil/attack_ghost(mob/dead/observer/user as mob) - if(ascended || user.mind.soulOwner == src.mind) - var/mob/living/simple_animal/imp/S = new(get_turf(loc)) - S.key = user.key - S.mind.assigned_role = "MODE" - S.mind.special_role = "Imp" - var/datum/objective/newobjective = new - newobjective.explanation_text = "Try to get a promotion to a higher infernal rank." - S.mind.objectives += newobjective - to_chat(S,S.playstyle_string) - to_chat(S,"Objective #1: [newobjective.explanation_text]") - return - else - return ..() - -/mob/living/carbon/true_devil/resist_fire() - //They're immune to fire. - -/mob/living/carbon/true_devil/attack_hand(mob/living/carbon/human/M) - if(..()) - switch(M.a_intent) - if(INTENT_HARM) - var/damage = rand(1, 5) - playsound(loc, "punch", 25, 1, -1) - visible_message("[M] has punched [src]!", \ - "[M] has punched [src]!") - adjustBruteLoss(damage) - add_attack_logs(M, src, "attacked") - updatehealth() - if(INTENT_DISARM) - if(!lying && !ascended) //No stealing the arch devil's pitchfork. - if(prob(5)) - // Weaken knocks people over - // Paralyse knocks people out - // It's Paralyse for parity though - // Weaken(2) - Paralyse(2) - playsound(loc, 'sound/weapons/thudswoosh.ogg', 50, 1, -1) - add_attack_logs(M, src, "pushed") - visible_message("[M] has pushed down [src]!", \ - "[M] has pushed down [src]!") - else - if(prob(25)) - drop_item() - playsound(loc, 'sound/weapons/thudswoosh.ogg', 50, 1, -1) - visible_message("[M] has disarmed [src]!", \ - "[M] has disarmed [src]!") - else - playsound(loc, 'sound/weapons/punchmiss.ogg', 25, 1, -1) - visible_message("[M] has attempted to disarm [src]!") - -/mob/living/carbon/true_devil/handle_breathing() - // devils do not need to breathe - -/mob/living/carbon/true_devil/is_literate() - return TRUE - -/mob/living/carbon/true_devil/ex_act(severity, ex_target) - if(!ascended) - var/b_loss - switch (severity) - if (1) - b_loss = 500 - if (2) - b_loss = 150 - if(3) - b_loss = 30 - if(has_bane(BANE_LIGHT)) - b_loss *=2 - adjustBruteLoss(b_loss) - return ..() - -#undef DEVIL_TOTAL_LAYERS diff --git a/code/game/gamemodes/devil/true_devil/inventory.dm b/code/game/gamemodes/devil/true_devil/inventory.dm deleted file mode 100644 index 3f5446d88bc..00000000000 --- a/code/game/gamemodes/devil/true_devil/inventory.dm +++ /dev/null @@ -1,50 +0,0 @@ -/mob/living/carbon/true_devil/unEquip(obj/item/I, force) - if(..(I,force)) - update_inv_r_hand() - update_inv_l_hand() - return 1 - return 0 - -/mob/living/carbon/true_devil/update_inv_r_hand() - ..() - if(r_hand) - var/t_state = r_hand.item_state - if(!t_state) - t_state = r_hand.icon_state - - var/image/I = image("icon" = r_hand.righthand_file, "icon_state" = "[t_state]") - I = center_image(I, r_hand.inhand_x_dimension, r_hand.inhand_y_dimension) - devil_overlays[DEVIL_R_HAND_LAYER] = I - else - devil_overlays[DEVIL_R_HAND_LAYER] = null - update_icons() - - -/mob/living/carbon/true_devil/update_inv_l_hand() - ..() - if(l_hand) - var/t_state = l_hand.item_state - if(!t_state) - t_state = l_hand.icon_state - - var/image/I = image("icon" = l_hand.lefthand_file, "icon_state" = "[t_state]") - I = center_image(I, l_hand.inhand_x_dimension, l_hand.inhand_y_dimension) - devil_overlays[DEVIL_L_HAND_LAYER] = I - else - devil_overlays[DEVIL_L_HAND_LAYER] = null - update_icons() - -/mob/living/carbon/true_devil/proc/remove_overlay(cache_index) - if(devil_overlays[cache_index]) - overlays -= devil_overlays[cache_index] - devil_overlays[cache_index] = null - - -/mob/living/carbon/true_devil/proc/apply_overlay(cache_index) - var/image/I = devil_overlays[cache_index] - if(I) - if(I in overlays) - return - var/list/new_overlays = overlays.Copy() - new_overlays += I - overlays = new_overlays diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm index d61b59cace2..343f8bf27ae 100644 --- a/code/game/gamemodes/game_mode.dm +++ b/code/game/gamemodes/game_mode.dm @@ -20,11 +20,15 @@ var/explosion_in_progress = 0 //sit back and relax var/list/datum/mind/modePlayer = new var/list/restricted_jobs = list() // Jobs it doesn't make sense to be. I.E chaplain or AI cultist + var/list/secondary_restricted_jobs = list() // Same as above, but for secondary antagonists var/list/protected_jobs = list() // Jobs that can't be traitors var/list/protected_species = list() // Species that can't be traitors + var/list/secondary_protected_species = list() // Same as above, but for secondary antagonists var/required_players = 0 var/required_enemies = 0 var/recommended_enemies = 0 + var/secondary_enemies = 0 + var/secondary_enemies_scaling = 0 // Scaling rate of secondary enemies var/newscaster_announcements = null var/ert_disabled = 0 var/uplink_welcome = "Syndicate Uplink Console:" @@ -223,7 +227,7 @@ /datum/game_mode/proc/check_win() //universal trigger to be called at mob death, nuke explosion, etc. To be called from everywhere. return 0 -/datum/game_mode/proc/get_players_for_role(var/role, override_jobbans=0) +/datum/game_mode/proc/get_players_for_role(role, override_jobbans=0) var/list/players = list() var/list/candidates = list() //var/list/drafted = list() @@ -272,10 +276,10 @@ // Less if there are not enough valid players in the game entirely to make recommended_enemies. -/datum/game_mode/proc/latespawn(var/mob) +/datum/game_mode/proc/latespawn(mob) /* -/datum/game_mode/proc/check_player_role_pref(var/role, var/mob/player) +/datum/game_mode/proc/check_player_role_pref(role, mob/player) if(player.preferences.be_special & role) return 1 return 0 @@ -402,7 +406,7 @@ to_chat(M, msg) //Announces objectives/generic antag text. -/proc/show_generic_antag_text(var/datum/mind/player) +/proc/show_generic_antag_text(datum/mind/player) if(player.current) to_chat(player.current, "You are an antagonist! Within the rules, \ try to act as an opposing force to the crew. Further RP and try to make sure \ @@ -411,7 +415,7 @@ Think through your actions and make the roleplay immersive! Please remember all \ rules aside from those without explicit exceptions apply to antagonists.") -/proc/show_objectives(var/datum/mind/player) +/proc/show_objectives(datum/mind/player) if(!player || !player.current) return var/obj_count = 1 @@ -420,7 +424,7 @@ to_chat(player.current, "Objective #[obj_count]: [objective.explanation_text]") obj_count++ -/proc/get_roletext(var/role) +/proc/get_roletext(role) return role /proc/get_nuke_code() diff --git a/code/game/gamemodes/heist/heist.dm b/code/game/gamemodes/heist/heist.dm index 54faf90fef8..4277fc76916 100644 --- a/code/game/gamemodes/heist/heist.dm +++ b/code/game/gamemodes/heist/heist.dm @@ -83,7 +83,7 @@ GLOBAL_LIST_EMPTY(cortical_stacks) //Stacks for 'leave nobody behind' objective. return ..() -/datum/game_mode/proc/create_vox(var/datum/mind/newraider) +/datum/game_mode/proc/create_vox(datum/mind/newraider) var/sounds = rand(2,8) var/i = 0 @@ -175,7 +175,7 @@ GLOBAL_LIST_EMPTY(cortical_stacks) //Stacks for 'leave nobody behind' objective. return objs -/datum/game_mode/proc/greet_vox(var/datum/mind/raider) +/datum/game_mode/proc/greet_vox(datum/mind/raider) to_chat(raider.current, "You are a Vox Raider, fresh from the Shoal!") to_chat(raider.current, "The Vox are a race of cunning, sharp-eyed nomadic raiders and traders endemic to the frontier and much of the unexplored galaxy. You and the crew have come to the [station_name()] for plunder, trade or both.") to_chat(raider.current, "Vox are cowardly and will flee from larger groups, but corner one or find them en masse and they are vicious.") diff --git a/code/game/gamemodes/intercept_report.dm b/code/game/gamemodes/intercept_report.dm index acee798e96c..aaf5dd1eea7 100644 --- a/code/game/gamemodes/intercept_report.dm +++ b/code/game/gamemodes/intercept_report.dm @@ -55,7 +55,7 @@ ) -/datum/intercept_text/proc/build(var/mode_type, datum/mind/correct_person) +/datum/intercept_text/proc/build(mode_type, datum/mind/correct_person) switch(mode_type) if("revolution") src.text = "" diff --git a/code/game/gamemodes/malfunction/Malf_Modules.dm b/code/game/gamemodes/malfunction/Malf_Modules.dm index 8388e182989..e299f0c97c2 100644 --- a/code/game/gamemodes/malfunction/Malf_Modules.dm +++ b/code/game/gamemodes/malfunction/Malf_Modules.dm @@ -318,8 +318,9 @@ announced = max(0, announced-1) /obj/machinery/doomsday_device/proc/detonate(z_level = 1) - for(var/mob/M in GLOB.player_list) - M << 'sound/machines/alarm.ogg' + var/doomsday_alarm = sound('sound/machines/alarm.ogg') + for(var/explodee in GLOB.player_list) + SEND_SOUND(explodee, doomsday_alarm) sleep(100) for(var/mob/living/L in GLOB.mob_list) var/turf/T = get_turf(L) @@ -330,7 +331,8 @@ to_chat(L, "The blast wave from [src] tears you atom from atom!") L.dust() to_chat(world, "The AI cleansed the station of life with the doomsday device!") - SSticker.force_ending = 1 + SSticker.force_ending = TRUE + SSticker.mode.station_was_nuked = TRUE //AI Turret Upgrade: Increases the health and damage of all turrets. /datum/AI_Module/large/upgrade_turrets @@ -784,4 +786,3 @@ /datum/AI_Module/large/cameracrack/upgrade(mob/living/silicon/ai/AI) if(AI.builtInCamera) QDEL_NULL(AI.builtInCamera) - diff --git a/code/game/gamemodes/meteor/meteors.dm b/code/game/gamemodes/meteor/meteors.dm index 7c5d350436b..d156c97266b 100644 --- a/code/game/gamemodes/meteor/meteors.dm +++ b/code/game/gamemodes/meteor/meteors.dm @@ -18,11 +18,11 @@ GLOBAL_LIST_INIT(meteors_ops, list(/obj/effect/meteor/goreops)) //Meaty Ops /////////////////////////////// //Meteor spawning global procs /////////////////////////////// -/proc/spawn_meteors(var/number = 10, var/list/meteortypes) +/proc/spawn_meteors(number = 10, list/meteortypes) for(var/i = 0; i < number; i++) spawn_meteor(meteortypes) -/proc/spawn_meteor(var/list/meteortypes) +/proc/spawn_meteor(list/meteortypes) var/turf/pickedstart var/turf/pickedgoal var/max_i = 10//number of tries to spawn meteor. @@ -136,7 +136,7 @@ GLOBAL_LIST_INIT(meteors_ops, list(/obj/effect/meteor/goreops)) //Meaty Ops /obj/effect/meteor/CanPass(atom/movable/mover, turf/target, height=0) return istype(mover, /obj/effect/meteor) ? 1 : ..() -/obj/effect/meteor/proc/ram_turf(var/turf/T) +/obj/effect/meteor/proc/ram_turf(turf/T) //first bust whatever is in the turf for(var/atom/A in T) if(A != src) @@ -170,7 +170,7 @@ GLOBAL_LIST_INIT(meteors_ops, list(/obj/effect/meteor/goreops)) //Meaty Ops var/obj/item/O = new meteordrop(get_turf(src)) O.throw_at(dest, 5, 10) -/obj/effect/meteor/proc/meteor_effect(var/sound=1) +/obj/effect/meteor/proc/meteor_effect(sound=1) if(sound) var/sound/meteor_sound = sound(meteorsound) var/random_frequency = get_rand_frequency() diff --git a/code/game/gamemodes/miniantags/abduction/gland.dm b/code/game/gamemodes/miniantags/abduction/gland.dm index e9a218b240b..021c4e09f06 100644 --- a/code/game/gamemodes/miniantags/abduction/gland.dm +++ b/code/game/gamemodes/miniantags/abduction/gland.dm @@ -68,7 +68,7 @@ active_mind_control = FALSE update_gland_hud() -/obj/item/organ/internal/heart/gland/remove(var/mob/living/carbon/M, special = 0) +/obj/item/organ/internal/heart/gland/remove(mob/living/carbon/M, special = 0) active = 0 if(initial(uses) == 1) uses = initial(uses) @@ -77,7 +77,7 @@ clear_mind_control() . = ..() -/obj/item/organ/internal/heart/gland/insert(var/mob/living/carbon/M, special = 0) +/obj/item/organ/internal/heart/gland/insert(mob/living/carbon/M, special = 0) ..() if(special != 2 && uses) // Special 2 means abductor surgery Start() @@ -113,6 +113,8 @@ mind_control_duration = 3000 /obj/item/organ/internal/heart/gland/heals/activate() + if(!(owner.mob_biotypes & MOB_ORGANIC)) + return to_chat(owner, "You feel curiously revitalized.") owner.adjustToxLoss(-20) owner.adjustBruteLoss(-20) @@ -293,7 +295,7 @@ /obj/item/organ/internal/heart/gland/electric/activate() owner.visible_message("[owner]'s skin starts emitting electric arcs!",\ "You feel electric energy building up inside you!") - playsound(get_turf(owner), "sparks", 100, 1, -1) + playsound(get_turf(owner), "sparks", 100, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) addtimer(CALLBACK(src, .proc/zap), rand(30, 100)) /obj/item/organ/internal/heart/gland/electric/proc/zap() diff --git a/code/game/gamemodes/miniantags/borer/borer.dm b/code/game/gamemodes/miniantags/borer/borer.dm index 750473b1dfa..d5de0f42f29 100644 --- a/code/game/gamemodes/miniantags/borer/borer.dm +++ b/code/game/gamemodes/miniantags/borer/borer.dm @@ -25,7 +25,7 @@ if(M.mind && isobserver(M)) to_chat(M, "Thought-speech, [src] -> [B.truename]: [message]") -/mob/living/captive_brain/say_understands(var/mob/other, var/datum/language/speaking = null) +/mob/living/captive_brain/say_understands(mob/other, datum/language/speaking = null) var/mob/living/simple_animal/borer/B = loc if(!istype(B)) log_runtime(EXCEPTION("Trapped mind found without a borer!"), src) @@ -114,12 +114,12 @@ var/datum/action/innate/borer/freeze_victim/freeze_victim_action = new var/datum/action/innate/borer/torment/torment_action = new -/mob/living/simple_animal/borer/New(atom/newloc, var/gen=1) +/mob/living/simple_animal/borer/New(atom/newloc, gen=1) ..(newloc) remove_from_all_data_huds() generation = gen add_language("Cortical Link") - notify_ghosts("A cortical borer has been created in [get_area(src)]!", enter_link = "(Click to enter)", source = src, action = NOTIFY_ATTACK) + notify_ghosts("A cortical borer has been created in [get_area(src)]!", enter_link = "(Click to enter)", source = src, action = NOTIFY_ATTACK, role = ROLE_BORER) real_name = "Cortical Borer [rand(1000,9999)]" truename = "[borer_names[min(generation, borer_names.len)]] [rand(1000,9999)]" GrantBorerActions() @@ -151,7 +151,7 @@ if(client.statpanel == "Status") stat("Chemicals", chemicals) -/mob/living/simple_animal/borer/say(var/message) +/mob/living/simple_animal/borer/say(message) var/list/message_pieces = parse_languages(message) for(var/datum/multilingual_say_piece/S in message_pieces) if(!istype(S.speaking, /datum/language/corticalborer) && loc == host && !talk_inside_host) @@ -823,7 +823,7 @@ /mob/living/simple_animal/borer/can_use_vents() return -/mob/living/simple_animal/borer/proc/transfer_personality(var/client/candidate) +/mob/living/simple_animal/borer/proc/transfer_personality(client/candidate) if(!candidate || !candidate.mob) return diff --git a/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm b/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm index c2d92ee8ec7..b99a153c234 100644 --- a/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm +++ b/code/game/gamemodes/miniantags/bot_swarm/swarmer.dm @@ -60,14 +60,13 @@ desc = "Robotic constructs of unknown design, swarmers seek only to consume materials and replicate themselves indefinitely." speak_emote = list("tones") bubble_icon = "swarmer" + mob_biotypes = MOB_ROBOTIC health = 40 maxHealth = 40 - status_flags = CANPUSH icon_state = "swarmer" icon_living = "swarmer" icon_dead = "swarmer_unactivated" - icon_gib = null - wander = 0 + wander = FALSE harm_intent_damage = 5 minbodytemp = 0 maxbodytemp = 500 @@ -85,22 +84,22 @@ friendly = "pinches" speed = 0 a_intent = INTENT_HARM - can_change_intents = 0 + can_change_intents = FALSE faction = list("swarmer") AIStatus = AI_OFF pass_flags = PASSTABLE + flags_2 = RAD_PROTECT_CONTENTS_2 | RAD_NO_CONTAMINATE_2 mob_size = MOB_SIZE_SMALL ventcrawler = VENTCRAWLER_ALWAYS - ranged = 1 + ranged = TRUE projectiletype = /obj/item/projectile/beam/disabler ranged_cooldown_time = 20 projectilesound = 'sound/weapons/taser2.ogg' loot = list(/obj/effect/decal/cleanable/robot_debris, /obj/item/stack/ore/bluespace_crystal) - del_on_death = 1 + del_on_death = TRUE deathmessage = "explodes with a sharp pop!" light_color = LIGHT_COLOR_CYAN - universal_speak = 0 - universal_understand = 0 + universal_understand = FALSE var/resources = 0 //Resource points, generated by consuming metal/glass var/max_resources = 100 @@ -488,7 +487,7 @@ changeNext_move(CLICK_CD_MELEE) target.ex_act(EXPLODE_LIGHT) -/mob/living/simple_animal/hostile/swarmer/proc/DisperseTarget(var/mob/living/target) +/mob/living/simple_animal/hostile/swarmer/proc/DisperseTarget(mob/living/target) if(target == src) return @@ -558,7 +557,7 @@ /obj/effect/temp_visual/swarmer/disintegration/Initialize(mapload) . = ..() - playsound(loc, "sparks", 100, TRUE) + playsound(loc, "sparks", 100, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) /obj/effect/temp_visual/swarmer/dismantle icon_state = "dismantle" @@ -604,7 +603,7 @@ max_integrity = 10 density = FALSE -/obj/structure/swarmer/trap/Crossed(var/atom/movable/AM, oldloc) +/obj/structure/swarmer/trap/Crossed(atom/movable/AM, oldloc) if(isliving(AM)) var/mob/living/L = AM if(!istype(L, /mob/living/simple_animal/hostile/swarmer)) diff --git a/code/game/gamemodes/miniantags/guardian/guardian.dm b/code/game/gamemodes/miniantags/guardian/guardian.dm index 7ae70286755..c2a72b12b1e 100644 --- a/code/game/gamemodes/miniantags/guardian/guardian.dm +++ b/code/game/gamemodes/miniantags/guardian/guardian.dm @@ -12,6 +12,7 @@ icon_living = "magicOrange" icon_dead = "magicOrange" speed = 0 + mob_biotypes = NONE a_intent = INTENT_HARM can_change_intents = 0 stop_automated_movement = 1 @@ -249,10 +250,9 @@ var/name_list = list("Aries", "Leo", "Sagittarius", "Taurus", "Virgo", "Capricorn", "Gemini", "Libra", "Aquarius", "Cancer", "Scorpio", "Pisces") /obj/item/guardiancreator/attack_self(mob/living/user) - for(var/mob/living/simple_animal/hostile/guardian/G in GLOB.alive_mob_list) - if(G.summoner == user) - to_chat(user, "You already have a [mob_name]!") - return + if(has_guardian(user)) + to_chat(user, "You already have a [mob_name]!") + return if(user.mind && (user.mind.changeling || user.mind.vampire)) to_chat(user, "[ling_failure]") return @@ -284,6 +284,10 @@ if(candidates.len) theghost = pick(candidates) + if(has_guardian(user)) + to_chat(user, "You already have a [mob_name]!") + used = FALSE + return spawn_guardian(user, theghost.key, guardian_type) else to_chat(user, "[failure_message]") @@ -294,6 +298,13 @@ if(used) . += "[used_message]" +/obj/item/guardiancreator/proc/has_guardian(mob/living/user) + for(var/mob/living/simple_animal/hostile/guardian/G in GLOB.alive_mob_list) + if(G.summoner == user) + return TRUE + return FALSE + + /obj/item/guardiancreator/proc/spawn_guardian(mob/living/user, key, guardian_type) var/pickedtype = /mob/living/simple_animal/hostile/guardian/punch switch(guardian_type) diff --git a/code/game/gamemodes/miniantags/guardian/types/bomb.dm b/code/game/gamemodes/miniantags/guardian/types/bomb.dm index 591a5a7e026..67b99d91968 100644 --- a/code/game/gamemodes/miniantags/guardian/types/bomb.dm +++ b/code/game/gamemodes/miniantags/guardian/types/bomb.dm @@ -42,7 +42,7 @@ var/mob/living/spawner -/obj/item/guardian_bomb/proc/disguise(var/obj/A) +/obj/item/guardian_bomb/proc/disguise(obj/A) A.forceMove(src) stored_obj = A opacity = A.opacity @@ -60,7 +60,7 @@ to_chat(spawner, "Failure! Your trap on [stored_obj] didn't catch anyone this time.") qdel(src) -/obj/item/guardian_bomb/proc/detonate(var/mob/living/user) +/obj/item/guardian_bomb/proc/detonate(mob/living/user) if(!istype(user)) return to_chat(user, "The [src] was boobytrapped!") @@ -82,9 +82,8 @@ /obj/item/guardian_bomb/attackby(obj/item/W, mob/living/user) detonate(user) -/obj/item/guardian_bomb/pickup(mob/living/user) +/obj/item/guardian_bomb/attack_hand(mob/user) detonate(user) - return FALSE // Disarm or blow up. No picking up /obj/item/guardian_bomb/examine(mob/user) . = stored_obj.examine(user) diff --git a/code/game/gamemodes/miniantags/morph/morph.dm b/code/game/gamemodes/miniantags/morph/morph.dm index a122351a4bb..6e3627f2684 100644 --- a/code/game/gamemodes/miniantags/morph/morph.dm +++ b/code/game/gamemodes/miniantags/morph/morph.dm @@ -152,7 +152,7 @@ /mob/living/simple_animal/hostile/morph/LoseAggro() vision_range = initial(vision_range) -/mob/living/simple_animal/hostile/morph/AIShouldSleep(var/list/possible_targets) +/mob/living/simple_animal/hostile/morph/AIShouldSleep(list/possible_targets) . = ..() if(.) var/list/things = list() diff --git a/code/game/gamemodes/miniantags/morph/morph_event.dm b/code/game/gamemodes/miniantags/morph/morph_event.dm index 18a875e452d..dd1a198f6f8 100644 --- a/code/game/gamemodes/miniantags/morph/morph_event.dm +++ b/code/game/gamemodes/miniantags/morph/morph_event.dm @@ -26,7 +26,7 @@ player_mind.special_role = SPECIAL_ROLE_MORPH SSticker.mode.traitors |= player_mind to_chat(S, S.playstyle_string) - S << 'sound/magic/mutate.ogg' + SEND_SOUND(S, sound('sound/magic/mutate.ogg')) message_admins("[key_of_morph] has been made into morph by an event.") log_game("[key_of_morph] was spawned as a morph by an event.") diff --git a/code/game/gamemodes/miniantags/revenant/revenant.dm b/code/game/gamemodes/miniantags/revenant/revenant.dm index 6121a3df808..fb46533b817 100644 --- a/code/game/gamemodes/miniantags/revenant/revenant.dm +++ b/code/game/gamemodes/miniantags/revenant/revenant.dm @@ -15,6 +15,7 @@ var/icon_reveal = "revenant_revealed" var/icon_stun = "revenant_stun" var/icon_drain = "revenant_draining" + mob_biotypes = MOB_SPIRIT incorporeal_move = 3 see_invisible = INVISIBILITY_REVENANT invisibility = INVISIBILITY_REVENANT @@ -159,7 +160,7 @@ /mob/living/simple_animal/revenant/proc/giveObjectivesandGoals() mind.wipe_memory() - SEND_SOUND(src, 'sound/effects/ghost.ogg') + SEND_SOUND(src, sound('sound/effects/ghost.ogg')) to_chat(src, "
") to_chat(src, "You are a revenant.") to_chat(src, "Your formerly mundane spirit has been infused with alien energies and empowered into a revenant.") diff --git a/code/game/gamemodes/miniantags/revenant/revenant_abilities.dm b/code/game/gamemodes/miniantags/revenant/revenant_abilities.dm index fc49a534f2c..0c4bfc48f33 100644 --- a/code/game/gamemodes/miniantags/revenant/revenant_abilities.dm +++ b/code/game/gamemodes/miniantags/revenant/revenant_abilities.dm @@ -1,5 +1,5 @@ ///Harvest -/mob/living/simple_animal/revenant/ClickOn(var/atom/A, var/params) //Copypaste from ghost code - revenants can't interact with the world directly. +/mob/living/simple_animal/revenant/ClickOn(atom/A, params) //Copypaste from ghost code - revenants can't interact with the world directly. if(client.click_intercept) client.click_intercept.InterceptClickOn(src, params, A) diff --git a/code/game/gamemodes/miniantags/revenant/revenant_spawn_event.dm b/code/game/gamemodes/miniantags/revenant/revenant_spawn_event.dm index 6871e87c3ba..40f6ac3398c 100644 --- a/code/game/gamemodes/miniantags/revenant/revenant_spawn_event.dm +++ b/code/game/gamemodes/miniantags/revenant/revenant_spawn_event.dm @@ -4,7 +4,7 @@ var/key_of_revenant -/datum/event/revenant/proc/get_revenant(var/end_if_fail = 0) +/datum/event/revenant/proc/get_revenant(end_if_fail = 0) var/deadMobs = 0 for(var/mob/M in GLOB.dead_mob_list) deadMobs++ diff --git a/code/game/gamemodes/miniantags/sintouched/objectives.dm b/code/game/gamemodes/miniantags/sintouched/objectives.dm deleted file mode 100644 index 04e0e3266f0..00000000000 --- a/code/game/gamemodes/miniantags/sintouched/objectives.dm +++ /dev/null @@ -1,34 +0,0 @@ -/datum/objective/sintouched - completed = 1 - -/* NO ERP OBJECTIVE FOR YOU. -/datum/objective/sintouched/lust - dangerrating = 3 // it's not AS dangerous. - -/datum/objective/sintouched/lust/New() - var/mob/dead/D = pick(dead_mob_list) - if(prob(50) && D) - explanation_text = "You know that [D] has perished.... and you think [D] is kinda cute. Make sure everyone knows how HOT [D]'s lifeless body is." - else - explanation_text = "Go get married, then immediately cheat on your new spouse." */ - -/datum/objective/sintouched/gluttony - explanation_text = "Food is delicious, so delicious you can't let it be wasted on other people." - -/datum/objective/sintouched/greed - explanation_text = "You want MORE, more money, more wealth, more riches. Go get it, but don't hurt people for it." - -/datum/objective/sintouched/sloth - explanation_text = "You just get tired randomly. Go take a nap at a time that would inconvenience other people." - -/datum/objective/sintouched/wrath - explanation_text = "What have your coworkers ever done for you? Don't offer to help them in any matter, and refuse if asked." - -/datum/objective/sintouched/envy - explanation_text = "Why should you be stuck with your rank? Show everyone you can do other jobs too, and don't let anyone stop you, least of all because you have no training." - -/datum/objective/sintouched/pride - explanation_text = "You are the BEST thing on the station. Make sure everyone knows it." - -/datum/objective/sintouched/acedia - explanation_text = "Angels, devils, good, evil... who cares? Just ignore any hellish threats and do your job." diff --git a/code/game/gamemodes/miniantags/slaughter/bloodcrawl.dm b/code/game/gamemodes/miniantags/slaughter/bloodcrawl.dm index ed0a4a908ed..f5311010707 100644 --- a/code/game/gamemodes/miniantags/slaughter/bloodcrawl.dm +++ b/code/game/gamemodes/miniantags/slaughter/bloodcrawl.dm @@ -2,7 +2,7 @@ #define BLOODCRAWL 1 #define BLOODCRAWL_EAT 2 -/mob/living/proc/phaseout(var/obj/effect/decal/cleanable/B) +/mob/living/proc/phaseout(obj/effect/decal/cleanable/B) if(iscarbon(src)) var/mob/living/carbon/C = src @@ -105,7 +105,7 @@ icon = 'icons/effects/blood.dmi' flags = NODROP|ABSTRACT -/mob/living/proc/phasein(var/obj/effect/decal/cleanable/B) +/mob/living/proc/phasein(obj/effect/decal/cleanable/B) if(notransform) to_chat(src, "Finish eating first!") diff --git a/code/game/gamemodes/miniantags/slaughter/slaughter.dm b/code/game/gamemodes/miniantags/slaughter/slaughter.dm index 7707449df4f..b488e0a826c 100644 --- a/code/game/gamemodes/miniantags/slaughter/slaughter.dm +++ b/code/game/gamemodes/miniantags/slaughter/slaughter.dm @@ -15,6 +15,7 @@ icon_living = "daemon" speed = 1 a_intent = INTENT_HARM + mob_biotypes = MOB_ORGANIC | MOB_HUMANOID stop_automated_movement = 1 status_flags = CANPUSH attack_sound = 'sound/misc/demon_attack1.ogg' @@ -79,7 +80,7 @@ if(mind) to_chat(src, src.playstyle_string) to_chat(src, "You are not currently in the same plane of existence as the station. Use the blood crawl action at a blood pool to manifest.") - src << 'sound/misc/demon_dies.ogg' + SEND_SOUND(src, sound('sound/misc/demon_dies.ogg')) if(!(vialspawned)) var/datum/objective/slaughter/objective = new var/datum/objective/demonFluff/fluffObjective = new diff --git a/code/game/gamemodes/nuclear/nuclear.dm b/code/game/gamemodes/nuclear/nuclear.dm index fcfbe682b41..11b49f225bf 100644 --- a/code/game/gamemodes/nuclear/nuclear.dm +++ b/code/game/gamemodes/nuclear/nuclear.dm @@ -186,7 +186,7 @@ M.regenerate_icons() M.update_body() -/datum/game_mode/proc/prepare_syndicate_leader(var/datum/mind/synd_mind, var/nuke_code) +/datum/game_mode/proc/prepare_syndicate_leader(datum/mind/synd_mind, nuke_code) var/leader_title = pick("Czar", "Boss", "Commander", "Chief", "Kingpin", "Director", "Overlord") synd_mind.current.real_name = "[syndicate_name()] Team [leader_title]" to_chat(synd_mind.current, "You are the Syndicate leader for this mission. You are responsible for the distribution of telecrystals and your ID is the only one who can open the launch bay doors.") @@ -219,7 +219,7 @@ else nuke_code = "code will be provided later" -/datum/game_mode/proc/update_syndicate_id(var/datum/mind/synd_mind, is_leader = FALSE) +/datum/game_mode/proc/update_syndicate_id(datum/mind/synd_mind, is_leader = FALSE) var/list/found_ids = synd_mind.current.search_contents_for(/obj/item/card/id) if(LAZYLEN(found_ids)) @@ -231,14 +231,14 @@ else message_admins("Warning: Operative [key_name_admin(synd_mind.current)] spawned without an ID card!") -/datum/game_mode/proc/forge_syndicate_objectives(var/datum/mind/syndicate) +/datum/game_mode/proc/forge_syndicate_objectives(datum/mind/syndicate) var/datum/objective/nuclear/syndobj = new syndobj.owner = syndicate syndicate.objectives += syndobj -/datum/game_mode/proc/greet_syndicate(var/datum/mind/syndicate, var/you_are=1) - SEND_SOUND(syndicate.current, 'sound/ambience/antag/ops.ogg') +/datum/game_mode/proc/greet_syndicate(datum/mind/syndicate, you_are=1) + SEND_SOUND(syndicate.current, sound('sound/ambience/antag/ops.ogg')) if(you_are) to_chat(syndicate.current, "You are a [syndicate_name()] agent!") var/obj_count = 1 @@ -418,7 +418,7 @@ to_chat(world, text) return 1 -/proc/nukelastname(var/mob/M as mob) //--All praise goes to NEO|Phyte, all blame goes to DH, and it was Cindi-Kate's idea. Also praise Urist for copypasta ho. +/proc/nukelastname(mob/M as mob) //--All praise goes to NEO|Phyte, all blame goes to DH, and it was Cindi-Kate's idea. Also praise Urist for copypasta ho. var/randomname = pick(GLOB.last_names) var/newname = sanitize(copytext(input(M,"You are the nuke operative [pick("Czar", "Boss", "Commander", "Chief", "Kingpin", "Director", "Overlord")]. Please choose a last name for your family.", "Name change",randomname),1,MAX_NAME_LEN)) diff --git a/code/game/gamemodes/nuclear/nuclearbomb.dm b/code/game/gamemodes/nuclear/nuclearbomb.dm index f57da2eabaf..fa0ba2fbf0f 100644 --- a/code/game/gamemodes/nuclear/nuclearbomb.dm +++ b/code/game/gamemodes/nuclear/nuclearbomb.dm @@ -14,7 +14,8 @@ GLOBAL_VAR(bomb_set) icon_state = "nuclearbomb0" density = 1 resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF - var/extended = FALSE + anchored = TRUE + var/extended = TRUE var/lighthack = FALSE var/timeleft = 120 var/timing = FALSE @@ -34,6 +35,10 @@ GLOBAL_VAR(bomb_set) /obj/machinery/nuclearbomb/syndicate is_syndicate = TRUE +/obj/machinery/nuclearbomb/undeployed + extended = FALSE + anchored = FALSE + /obj/machinery/nuclearbomb/New() ..() r_code = rand(10000, 99999.0) // Creates a random code upon object spawn. @@ -210,7 +215,7 @@ GLOBAL_VAR(bomb_set) data["codemsg"] = "-----" return data -/obj/machinery/nuclearbomb/proc/is_auth(var/mob/user) +/obj/machinery/nuclearbomb/proc/is_auth(mob/user) if(auth) return TRUE else if(user.can_admin_interact()) @@ -269,11 +274,6 @@ GLOBAL_VAR(bomb_set) else code = "ERROR" return - - if(!yes_code) // All requests below here require both NAD inserted AND code correct - return - - switch(action) if("toggle_anchor") if(removal_stage == NUKE_MOBILE) anchored = FALSE @@ -288,6 +288,11 @@ GLOBAL_VAR(bomb_set) else visible_message("The anchoring bolts slide back into the depths of [src].") return + + if(!yes_code) // All requests below here require both NAD inserted AND code correct + return + + switch(action) if("set_time") var/time = input(usr, "Detonation time (seconds, min 120, max 600)", "Input Time", 120) as num|null if(time) diff --git a/code/game/gamemodes/objective.dm b/code/game/gamemodes/objective.dm index b572890ab6b..b7ff2d7992e 100644 --- a/code/game/gamemodes/objective.dm +++ b/code/game/gamemodes/objective.dm @@ -60,7 +60,7 @@ GLOBAL_LIST_INIT(potential_theft_objectives, (subtypesof(/datum/theft_objective) /datum/objective/proc/on_target_cryo() if(owner?.current) to_chat(owner.current, "
You get the feeling your target is no longer within reach. Time for Plan [pick("A","B","C","D","X","Y","Z")]. Objectives updated!") - SEND_SOUND(owner.current, 'sound/ambience/alarm4.ogg') + SEND_SOUND(owner.current, sound('sound/ambience/alarm4.ogg')) target = null INVOKE_ASYNC(src, .proc/post_target_cryo) @@ -262,11 +262,13 @@ GLOBAL_LIST_INIT(potential_theft_objectives, (subtypesof(/datum/theft_objective) /datum/objective/block/check_completion() if(!istype(owner.current, /mob/living/silicon)) - return 0 + return FALSE + if(SSticker.mode.station_was_nuked) + return TRUE if(SSshuttle.emergency.mode < SHUTTLE_ENDGAME) - return 0 + return FALSE if(!owner.current) - return 0 + return FALSE var/area/A = SSshuttle.emergency.areaInstance @@ -276,9 +278,9 @@ GLOBAL_LIST_INIT(potential_theft_objectives, (subtypesof(/datum/theft_objective) if(player.mind && player.stat != DEAD) if(get_area(player) == A) - return 0 // If there are any other organic mobs on the shuttle, you failed the objective. + return FALSE // If there are any other organic mobs on the shuttle, you failed the objective. - return 1 + return TRUE /datum/objective/escape explanation_text = "Escape on the shuttle or an escape pod alive and free." @@ -431,7 +433,7 @@ GLOBAL_LIST_INIT(potential_theft_objectives, (subtypesof(/datum/theft_objective) /datum/objective/steal/exchange martyr_compatible = 0 -/datum/objective/steal/exchange/proc/set_faction(var/faction,var/otheragent) +/datum/objective/steal/exchange/proc/set_faction(faction, otheragent) target = otheragent var/datum/theft_objective/unique/targetinfo if(faction == "red") @@ -442,7 +444,7 @@ GLOBAL_LIST_INIT(potential_theft_objectives, (subtypesof(/datum/theft_objective) steal_target = targetinfo /datum/objective/steal/exchange/backstab -/datum/objective/steal/exchange/backstab/set_faction(var/faction) +/datum/objective/steal/exchange/backstab/set_faction(faction) var/datum/theft_objective/unique/targetinfo if(faction == "red") targetinfo = new /datum/theft_objective/unique/docs_red @@ -477,7 +479,7 @@ GLOBAL_LIST_INIT(potential_theft_objectives, (subtypesof(/datum/theft_objective) /datum/objective/absorb -/datum/objective/absorb/proc/gen_amount_goal(var/lowbound = 4, var/highbound = 6) +/datum/objective/absorb/proc/gen_amount_goal(lowbound = 4, highbound = 6) target_amount = rand (lowbound,highbound) if(SSticker) var/n_p = 1 //autowin diff --git a/code/game/gamemodes/setupgame.dm b/code/game/gamemodes/setupgame.dm index 75825a12259..9ce71866e88 100644 --- a/code/game/gamemodes/setupgame.dm +++ b/code/game/gamemodes/setupgame.dm @@ -1,4 +1,4 @@ -/proc/getAssignedBlock(var/name,var/list/blocksLeft, var/activity_bounds=DNA_DEFAULT_BOUNDS, var/good=0) +/proc/getAssignedBlock(name, list/blocksLeft, activity_bounds=DNA_DEFAULT_BOUNDS, good=0) if(blocksLeft.len==0) warning("[name]: No more blocks left to assign!") return 0 diff --git a/code/game/gamemodes/shadowling/ascendant_shadowling.dm b/code/game/gamemodes/shadowling/ascendant_shadowling.dm index 9eeadeaba0f..e4f6f7de4ab 100644 --- a/code/game/gamemodes/shadowling/ascendant_shadowling.dm +++ b/code/game/gamemodes/shadowling/ascendant_shadowling.dm @@ -38,7 +38,7 @@ icon_state = "NurnKal" icon_living = "NurnKal" -/mob/living/simple_animal/ascendant_shadowling/Process_Spacemove(var/movement_dir = 0) +/mob/living/simple_animal/ascendant_shadowling/Process_Spacemove(movement_dir = 0) return 1 //copypasta from carp code /mob/living/simple_animal/ascendant_shadowling/ex_act(severity) @@ -47,7 +47,7 @@ /mob/living/simple_animal/ascendant_shadowling/singularity_act() return 0 //Well hi, fellow god! How are you today? -/mob/living/simple_animal/ascendant_shadowling/proc/announce(var/text, var/size = 4, var/new_sound = null) +/mob/living/simple_animal/ascendant_shadowling/proc/announce(text, size = 4, new_sound = null) var/message = "\"[text]\"
" for(var/mob/M in GLOB.player_list) if(!isnewplayer(M) && M.client) diff --git a/code/game/gamemodes/shadowling/shadowling.dm b/code/game/gamemodes/shadowling/shadowling.dm index 37045d44d10..a017b6d9af0 100644 --- a/code/game/gamemodes/shadowling/shadowling.dm +++ b/code/game/gamemodes/shadowling/shadowling.dm @@ -55,15 +55,15 @@ Made by Xhuis var/victory_warning_announced = FALSE var/thrall_ratio = 1 -/proc/is_thrall(var/mob/living/M) +/proc/is_thrall(mob/living/M) return istype(M) && M.mind && SSticker && SSticker.mode && (M.mind in SSticker.mode.shadowling_thralls) -/proc/is_shadow_or_thrall(var/mob/living/M) +/proc/is_shadow_or_thrall(mob/living/M) return istype(M) && M.mind && SSticker && SSticker.mode && ((M.mind in SSticker.mode.shadowling_thralls) || (M.mind in SSticker.mode.shadows)) -/proc/is_shadow(var/mob/living/M) +/proc/is_shadow(mob/living/M) return istype(M) && M.mind && SSticker && SSticker.mode && (M.mind in SSticker.mode.shadows) @@ -122,7 +122,7 @@ Made by Xhuis //give_shadowling_abilities(shadow) ..() -/datum/game_mode/proc/greet_shadow(var/datum/mind/shadow) +/datum/game_mode/proc/greet_shadow(datum/mind/shadow) to_chat(shadow.current, "Currently, you are disguised as an employee aboard [world.name].") to_chat(shadow.current, "In your limited state, you have two abilities: Hatch and Shadowling Hivemind (:8).") to_chat(shadow.current, "Any other shadowlings are your allies. You must assist them as they shall assist you.") @@ -130,7 +130,7 @@ Made by Xhuis -/datum/game_mode/proc/process_shadow_objectives(var/datum/mind/shadow_mind) +/datum/game_mode/proc/process_shadow_objectives(datum/mind/shadow_mind) var/objective = "enthrall" //may be devour later, but for now it seems murderbone-y if(objective == "enthrall") @@ -140,7 +140,7 @@ Made by Xhuis to_chat(shadow_mind.current, "Objective #1: [objective_explanation]
") -/datum/game_mode/proc/finalize_shadowling(var/datum/mind/shadow_mind) +/datum/game_mode/proc/finalize_shadowling(datum/mind/shadow_mind) var/mob/living/carbon/human/S = shadow_mind.current shadow_mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/shadowling_hatch(null)) spawn(0) @@ -162,7 +162,7 @@ Made by Xhuis new_thrall_mind.current.create_log(CONVERSION_LOG, "Became a thrall") new_thrall_mind.current.add_language("Shadowling Hivemind") new_thrall_mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/lesser_shadow_walk(null)) - new_thrall_mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/shadow_vision/thrall(null)) + new_thrall_mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/shadow_vision(null)) to_chat(new_thrall_mind.current, "You see the truth. Reality has been torn away and you realize what a fool you've been.") to_chat(new_thrall_mind.current, "The shadowlings are your masters. Serve them above all else and ensure they complete their goals.") to_chat(new_thrall_mind.current, "You may not harm other thralls or the shadowlings. However, you do not need to obey other thralls.") @@ -176,7 +176,7 @@ Made by Xhuis GLOB.command_announcement.Announce("Large concentration of psychic bluespace energy detected by long-ranged scanners. Shadowling ascension event imminent. Prevent it at all costs!", "Central Command Higher Dimensional Affairs", 'sound/AI/spanomalies.ogg') return 1 -/datum/game_mode/proc/remove_thrall(datum/mind/thrall_mind, var/kill = 0) +/datum/game_mode/proc/remove_thrall(datum/mind/thrall_mind, kill = 0) if(!istype(thrall_mind) || !(thrall_mind in shadowling_thralls) || !isliving(thrall_mind.current)) return 0 //If there is no mind, the mind isn't a thrall, or the mind's mob isn't alive, return shadowling_thralls.Remove(thrall_mind) @@ -226,7 +226,7 @@ Made by Xhuis var/shadow_nag_messages = list("You can barely hold yourself in this lesser form!", "The urge to become something greater is overwhelming!", "You feel a burning passion to hatch free of this shell and assume godhood!") H.take_overall_damage(0, 3) to_chat(H, "[pick(shadow_nag_messages)]") - H << 'sound/weapons/sear.ogg' + SEND_SOUND(H, sound('sound/weapons/sear.ogg')) if(shadows_alive) return ..() diff --git a/code/game/gamemodes/shadowling/shadowling_abilities.dm b/code/game/gamemodes/shadowling/shadowling_abilities.dm index a3aa9919eb2..4d93a601e9d 100644 --- a/code/game/gamemodes/shadowling/shadowling_abilities.dm +++ b/code/game/gamemodes/shadowling/shadowling_abilities.dm @@ -1,6 +1,6 @@ #define EMPOWERED_THRALL_LIMIT 5 -/obj/effect/proc_holder/spell/proc/shadowling_check(var/mob/living/carbon/human/H) +/obj/effect/proc_holder/spell/proc/shadowling_check(mob/living/carbon/human/H) if(!H || !istype(H)) return if(H.incorporeal_move == 1) @@ -80,10 +80,12 @@ var/blacklisted_lights = list(/obj/item/flashlight/flare, /obj/item/flashlight/slime) action_icon_state = "veil" -/obj/effect/proc_holder/spell/aoe_turf/veil/cast(list/targets, mob/user = usr) +/obj/effect/proc_holder/spell/aoe_turf/veil/cast_check(charge_check = TRUE, start_recharge = TRUE, mob/user = usr) if(!shadowling_check(user)) - charge_counter = charge_max - return + return FALSE + return ..() + +/obj/effect/proc_holder/spell/aoe_turf/veil/cast(list/targets, mob/user = usr) to_chat(user, "You silently disable all nearby lights.") for(var/obj/structure/glowshroom/G in orange(2, user)) //Why the fuck was this in the loop below? G.visible_message("[G] withers away!") @@ -103,10 +105,12 @@ include_user = 1 action_icon_state = "shadow_walk" -/obj/effect/proc_holder/spell/targeted/shadow_walk/cast(list/targets, mob/user = usr) +/obj/effect/proc_holder/spell/targeted/shadow_walk/cast_check(charge_check = TRUE, start_recharge = TRUE, mob/user = usr) if(!shadowling_check(user)) - charge_counter = charge_max - return + return FALSE + return ..() + +/obj/effect/proc_holder/spell/targeted/shadow_walk/cast(list/targets, mob/user = usr) for(var/mob/living/target in targets) playsound(user.loc, 'sound/effects/bamf.ogg', 50, 1) target.visible_message("[target] vanishes in a puff of black mist!", "You enter the space between worlds as a passageway.") @@ -146,9 +150,9 @@ /obj/effect/proc_holder/spell/targeted/shadow_vision - name = "Shadowling Darksight" - desc = "Gives you night and thermal vision." - panel = "Shadowling Abilities" + name = "Thrall Darksight" + desc = "Gives you night vision." + panel = "Thrall Abilities" charge_max = 0 range = -1 include_user = 1 @@ -167,11 +171,6 @@ to_chat(H, "You return your vision to normal.") H.set_sight(null) -/obj/effect/proc_holder/spell/targeted/shadow_vision/thrall - desc = "Thrall Darksight" - desc = "Gives you night vision." - panel = "Thrall Abilities" - /obj/effect/proc_holder/spell/aoe_turf/flashfreeze name = "Icy Veins" desc = "Instantly freezes the blood of nearby people, stunning them and causing burn damage." @@ -181,10 +180,12 @@ clothes_req = 0 action_icon_state = "icy_veins" -/obj/effect/proc_holder/spell/aoe_turf/flashfreeze/cast(list/targets, mob/user = usr) +/obj/effect/proc_holder/spell/aoe_turf/flashfreeze/cast_check(charge_check = TRUE, start_recharge = TRUE, mob/living/user = usr) if(!shadowling_check(user)) - charge_counter = charge_max - return + return FALSE + return ..() + +/obj/effect/proc_holder/spell/aoe_turf/flashfreeze/cast(list/targets, mob/user = usr) to_chat(user, "You freeze the nearby air.") playsound(user.loc, 'sound/effects/ghost2.ogg', 50, 1) @@ -220,8 +221,11 @@ selection_deactivated_message = "Your mind relaxes." allowed_type = /mob/living/carbon/human -/obj/effect/proc_holder/spell/targeted/click/enthrall/can_cast(mob/user = usr, charge_check = TRUE, show_message = FALSE) - if(enthralling || !shadowling_check(user)) +/obj/effect/proc_holder/spell/targeted/click/enthrall/cast_check(charge_check = TRUE, start_recharge = TRUE, mob/living/user = usr) + if(enthralling) + to_chat(user, "You're already enthralling someone!") + return FALSE + if(!shadowling_check(user)) return FALSE return ..() @@ -316,10 +320,12 @@ var/reviveThrallAcquired action_icon_state = "collective_mind" -/obj/effect/proc_holder/spell/targeted/collective_mind/cast(list/targets, mob/user = usr) +/obj/effect/proc_holder/spell/targeted/collective_mind/cast_check(charge_check = TRUE, start_recharge = TRUE, mob/living/user = usr) if(!shadowling_check(user)) - charge_counter = charge_max - return + return FALSE + return ..() + +/obj/effect/proc_holder/spell/targeted/collective_mind/cast(list/targets, mob/user = usr) for(var/mob/living/target in targets) var/thralls = 0 var/victory_threshold = SSticker.mode.required_thralls @@ -391,10 +397,12 @@ include_user = 1 action_icon_state = "black_smoke" -/obj/effect/proc_holder/spell/targeted/blindness_smoke/cast(list/targets, mob/user = usr) //Extremely hacky +/obj/effect/proc_holder/spell/targeted/blindness_smoke/cast_check(charge_check = TRUE, start_recharge = TRUE, mob/living/user = usr) if(!shadowling_check(user)) - charge_counter = charge_max - return + return FALSE + return ..() + +/obj/effect/proc_holder/spell/targeted/blindness_smoke/cast(list/targets, mob/user = usr) //Extremely hacky for(var/mob/living/target in targets) target.visible_message("[target] suddenly bends over and coughs out a cloud of black smoke, which begins to spread rapidly!") to_chat(target, "You regurgitate a vast cloud of blinding smoke.") @@ -440,10 +448,12 @@ clothes_req = 0 action_icon_state = "screech" -/obj/effect/proc_holder/spell/aoe_turf/unearthly_screech/cast(list/targets, mob/user = usr) +/obj/effect/proc_holder/spell/aoe_turf/unearthly_screech/cast_check(charge_check = TRUE, start_recharge = TRUE, mob/living/user = usr) if(!shadowling_check(user)) - charge_counter = charge_max - return + return FALSE + return ..() + +/obj/effect/proc_holder/spell/aoe_turf/unearthly_screech/cast(list/targets, mob/user = usr) user.audible_message("[user] lets out a horrible scream!") playsound(user.loc, 'sound/effects/screech.ogg', 100, 1) @@ -462,7 +472,7 @@ else if(issilicon(target)) var/mob/living/silicon/S = target to_chat(S, "ERROR $!(@ ERROR )#^! SENSORY OVERLOAD \[$(!@#") - S << 'sound/misc/interference.ogg' + SEND_SOUND(S, sound('sound/misc/interference.ogg')) playsound(S, 'sound/machines/warning-buzzer.ogg', 50, 1) do_sparks(5, 1, S) S.Weaken(6) @@ -477,11 +487,12 @@ clothes_req = FALSE action_icon_state = "null_charge" -/obj/effect/proc_holder/spell/aoe_turf/null_charge/cast(mob/user = usr) +/obj/effect/proc_holder/spell/aoe_turf/null_charge/cast_check(charge_check = TRUE, start_recharge = TRUE, mob/living/user = usr) if(!shadowling_check(user)) - charge_counter = charge_max - return + return FALSE + return ..() +/obj/effect/proc_holder/spell/aoe_turf/null_charge/cast(mob/user = usr) var/list/local_objs = view(1, user) var/obj/machinery/power/apc/target_apc for(var/object in local_objs) @@ -537,7 +548,7 @@ selection_deactivated_message = "Your mind relaxes." allowed_type = /mob/living/carbon/human -/obj/effect/proc_holder/spell/targeted/click/reviveThrall/can_cast(mob/user = usr) +/obj/effect/proc_holder/spell/targeted/click/reviveThrall/cast_check(charge_check = TRUE, start_recharge = TRUE, mob/living/user = usr) if(!shadowling_check(user)) return FALSE return ..() @@ -627,9 +638,12 @@ action_icon_state = "extend_shuttle" var/global/extendlimit = 0 -/obj/effect/proc_holder/spell/targeted/click/shadowling_extend_shuttle/can_cast(mob/user = usr, charge_check = TRUE, show_message = FALSE) +/obj/effect/proc_holder/spell/targeted/click/shadowling_extend_shuttle/cast_check(charge_check = TRUE, start_recharge = TRUE, mob/living/user = usr) if(!shadowling_check(user)) return FALSE + return ..() + +/obj/effect/proc_holder/spell/targeted/click/shadowling_extend_shuttle/can_cast(mob/user = usr, charge_check = TRUE, show_message = FALSE) if(extendlimit == 1) if(show_message) to_chat(user, "Shuttle was already delayed.") diff --git a/code/game/gamemodes/shadowling/special_shadowling_abilities.dm b/code/game/gamemodes/shadowling/special_shadowling_abilities.dm index 1aa8d628560..4007ce3c77a 100644 --- a/code/game/gamemodes/shadowling/special_shadowling_abilities.dm +++ b/code/game/gamemodes/shadowling/special_shadowling_abilities.dm @@ -30,7 +30,7 @@ GLOBAL_LIST_INIT(possibleShadowlingNames, list("U'ruan", "Y`shej", "Nex", "Hel-u H.visible_message("[H]'s things suddenly slip off. They hunch over and vomit up a copious amount of purple goo which begins to shape around them!", \ "You remove any equipment which would hinder your hatching and begin regurgitating the resin which will protect you.") - for(var/obj/item/I in H.contents - (H.bodyparts | H.internal_organs)) //drops all items except organs + for(var/obj/item/I in H.contents) H.unEquip(I) sleep(50) @@ -99,7 +99,6 @@ GLOBAL_LIST_INIT(possibleShadowlingNames, list("U'ruan", "Y`shej", "Nex", "Hel-u sleep(10) to_chat(H, "Your powers are awoken. You may now live to your fullest extent. Remember your goal. Cooperate with your thralls and allies.") H.ExtinguishMob() - H.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/shadow_vision(null)) H.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/click/enthrall(null)) H.mind.AddSpell(new /obj/effect/proc_holder/spell/targeted/click/glare(null)) H.mind.AddSpell(new /obj/effect/proc_holder/spell/aoe_turf/veil(null)) @@ -123,10 +122,13 @@ GLOBAL_LIST_INIT(possibleShadowlingNames, list("U'ruan", "Y`shej", "Nex", "Hel-u include_user = 1 action_icon_state = "ascend" +/obj/effect/proc_holder/spell/targeted/shadowling_ascend/cast_check(charge_check = TRUE, start_recharge = TRUE, mob/living/user = usr) + if(!shadowling_check(user)) + return FALSE + return ..() + /obj/effect/proc_holder/spell/targeted/shadowling_ascend/cast(list/targets, mob/user = usr) var/mob/living/carbon/human/H = user - if(!shadowling_check(H)) - return for(H in targets) var/hatch_or_no = alert(H,"It is time to ascend. Are you sure about this?",,"Yes","No") switch(hatch_or_no) diff --git a/code/game/gamemodes/steal_items.dm b/code/game/gamemodes/steal_items.dm index 7e15147e885..780962045be 100644 --- a/code/game/gamemodes/steal_items.dm +++ b/code/game/gamemodes/steal_items.dm @@ -13,7 +13,7 @@ var/flags = 0 var/location_override -/datum/theft_objective/proc/check_completion(var/datum/mind/owner) +/datum/theft_objective/proc/check_completion(datum/mind/owner) if(!owner.current) return 0 if(!isliving(owner.current)) @@ -62,7 +62,7 @@ typepath = /obj/item/aicard location_override = "AI Satellite. An intellicard for transportation can be found in Tech Storage, Science Department or manufactured" -/datum/theft_objective/ai/check_special_completion(var/obj/item/aicard/C) +/datum/theft_objective/ai/check_special_completion(obj/item/aicard/C) if(..()) for(var/mob/living/silicon/ai/A in C) if(istype(A, /mob/living/silicon/ai) && A.stat != 2) //See if any AI's are alive inside that card. @@ -154,7 +154,7 @@ required_amount=rand(lower,upper)*step name = "[required_amount] [name]" -/datum/theft_objective/number/check_completion(var/datum/mind/owner) +/datum/theft_objective/number/check_completion(datum/mind/owner) if(!owner.current) return 0 if(!isliving(owner.current)) @@ -166,7 +166,7 @@ found_amount += getAmountStolen(I) return found_amount >= required_amount -/datum/theft_objective/number/proc/getAmountStolen(var/obj/item/I) +/datum/theft_objective/number/proc/getAmountStolen(obj/item/I) return I:amount /datum/theft_objective/unique diff --git a/code/game/gamemodes/vampire/traitor_vamp.dm b/code/game/gamemodes/vampire/traitor_vamp.dm index d69b9a23518..7fb1088214b 100644 --- a/code/game/gamemodes/vampire/traitor_vamp.dm +++ b/code/game/gamemodes/vampire/traitor_vamp.dm @@ -3,11 +3,13 @@ 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") - restricted_jobs = list("AI", "Cyborg") + restricted_jobs = list("Cyborg") + secondary_restricted_jobs = list("AI") required_players = 10 required_enemies = 1 // how many of each type are required recommended_enemies = 3 - var/protected_species_vampire = list("Machine") + secondary_enemies_scaling = 0.025 + secondary_protected_species = list("Machine") /datum/game_mode/traitor/vampire/announce() to_chat(world, "The current game mode is - Traitor+Vampire!") @@ -19,20 +21,26 @@ restricted_jobs += protected_jobs var/list/datum/mind/possible_vampires = get_players_for_role(ROLE_VAMPIRE) + 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 protected_species_vampire)) + if((player.mind in possible_vampires) && (player.client.prefs.species in secondary_protected_species)) possible_vampires -= player.mind if(possible_vampires.len > 0) - var/datum/mind/vampire = pick(possible_vampires) - vampires += vampire - modePlayer += vampires - var/datum/mindslaves/slaved = new() - slaved.masters += vampire - vampire.som = slaved //we MIGT want to mindslave someone - vampire.restricted_roles = restricted_jobs - vampire.special_role = SPECIAL_ROLE_VAMPIRE + for(var/I in possible_vampires) + if(length(vampires) >= secondary_enemies) + break + var/datum/mind/vampire = pick(possible_vampires) + vampires += vampire + modePlayer += vampires + possible_vampires -= vampire + var/datum/mindslaves/slaved = new() + slaved.masters += vampire + vampire.som = slaved //we MIGHT want to mindslave someone + vampire.restricted_roles = (restricted_jobs + secondary_restricted_jobs) + vampire.special_role = SPECIAL_ROLE_VAMPIRE + ..() return 1 else diff --git a/code/game/gamemodes/vampire/vampire.dm b/code/game/gamemodes/vampire/vampire.dm index d1699850260..8a3628a1717 100644 --- a/code/game/gamemodes/vampire/vampire.dm +++ b/code/game/gamemodes/vampire/vampire.dm @@ -135,7 +135,7 @@ to_chat(world, text) return 1 -/datum/game_mode/proc/forge_vampire_objectives(var/datum/mind/vampire) +/datum/game_mode/proc/forge_vampire_objectives(datum/mind/vampire) //Objectives are traitor objectives plus blood objectives var/datum/objective/blood/blood_objective = new @@ -172,10 +172,10 @@ return vampire_mob.make_vampire() -/datum/game_mode/proc/greet_vampire(var/datum/mind/vampire, var/you_are=1) +/datum/game_mode/proc/greet_vampire(datum/mind/vampire, you_are=1) var/dat if(you_are) - SEND_SOUND(vampire.current, 'sound/ambience/antag/vampalert.ogg') + SEND_SOUND(vampire.current, sound('sound/ambience/antag/vampalert.ogg')) dat = "You are a Vampire!
" dat += {"To bite someone, target the head and use harm intent with an empty hand. Drink blood to gain new powers. You are weak to holy things and starlight. Don't go into space and avoid the Chaplain, the chapel and especially Holy Water."} @@ -220,6 +220,10 @@ You are weak to holy things and starlight. Don't go into space and avoid the Cha /obj/effect/proc_holder/spell/vampire/targetted/enthrall = 300, /datum/vampire_passive/full = 500) +/datum/vampire/proc/adjust_nullification(base, extra) + // First hit should give full nullification, while subsequent hits increase the value slower + nullified = max(nullified + extra, base) + /datum/vampire/New(gend = FEMALE) gender = gend @@ -248,7 +252,7 @@ You are weak to holy things and starlight. Don't go into space and avoid the Cha qdel(ability) owner.update_sight() // Life updates conditionally, so we need to update sight here in case the vamp loses his vision based powers. Maybe one day refactor to be more OOP and on the vampire's ability datum. -/datum/vampire/proc/update_owner(var/mob/living/carbon/human/current) //Called when a vampire gets cloned. This updates vampire.owner to the new body. +/datum/vampire/proc/update_owner(mob/living/carbon/human/current) //Called when a vampire gets cloned. This updates vampire.owner to the new body. if(current.mind && current.mind.vampire && current.mind.vampire.owner && (current.mind.vampire.owner != current)) current.mind.vampire.owner = current diff --git a/code/game/gamemodes/vampire/vampire_powers.dm b/code/game/gamemodes/vampire/vampire_powers.dm index db245cd0d25..4e06cb02df1 100644 --- a/code/game/gamemodes/vampire/vampire_powers.dm +++ b/code/game/gamemodes/vampire/vampire_powers.dm @@ -564,7 +564,7 @@ H.raise_vampire(user) -/mob/living/carbon/human/proc/raise_vampire(var/mob/M) +/mob/living/carbon/human/proc/raise_vampire(mob/M) if(!istype(M)) log_debug("human/proc/raise_vampire called with invalid argument.") return diff --git a/code/game/gamemodes/wizard/artefact.dm b/code/game/gamemodes/wizard/artefact.dm index 1307dc8424d..af83abba66b 100644 --- a/code/game/gamemodes/wizard/artefact.dm +++ b/code/game/gamemodes/wizard/artefact.dm @@ -147,7 +147,7 @@ var/spawn_path = /mob/living/simple_animal/cow //defaulty cows to prevent unintentional narsies var/spawn_amt_left = 20 -/obj/effect/rend/New(loc, var/spawn_type, var/spawn_amt, var/desc) +/obj/effect/rend/New(loc, spawn_type, spawn_amt, desc) ..() src.spawn_path = spawn_type src.spawn_amt_left = spawn_amt @@ -352,7 +352,7 @@ GLOBAL_LIST_EMPTY(multiverse) to_chat(user, "[src] is recharging! Keep in mind it shares a cooldown with the swords wielded by your copies.") -/obj/item/multisword/proc/spawn_copy(var/client/C, var/turf/T, mob/user) +/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) @@ -398,7 +398,7 @@ GLOBAL_LIST_EMPTY(multiverse) M.mind.special_role = SPECIAL_ROLE_MULTIVERSE log_game("[M.key] was made a multiverse traveller with the objective to help [usr.real_name] protect the station.") -/obj/item/multisword/proc/equip_copy(var/mob/living/carbon/human/M) +/obj/item/multisword/proc/equip_copy(mob/living/carbon/human/M) var/obj/item/multisword/sword = new sword_type sword.assigned = assigned @@ -826,7 +826,7 @@ GLOBAL_LIST_EMPTY(multiverse) GiveHint(target) else if(istype(I,/obj/item/bikehorn)) to_chat(target, "HONK") - target << 'sound/items/airhorn.ogg' + SEND_SOUND(target, sound('sound/items/airhorn.ogg')) target.AdjustEarDamage(0, 3) GiveHint(target) cooldown = world.time +cooldown_time diff --git a/code/game/gamemodes/wizard/godhand.dm b/code/game/gamemodes/wizard/godhand.dm index f2d0e6eb81a..409a1801e40 100644 --- a/code/game/gamemodes/wizard/godhand.dm +++ b/code/game/gamemodes/wizard/godhand.dm @@ -13,7 +13,7 @@ throw_range = 0 throw_speed = 0 -/obj/item/melee/touch_attack/New(var/spell) +/obj/item/melee/touch_attack/New(spell) attached_spell = spell ..() diff --git a/code/game/gamemodes/wizard/raginmages.dm b/code/game/gamemodes/wizard/raginmages.dm index 0c2475edd41..d50a6200764 100644 --- a/code/game/gamemodes/wizard/raginmages.dm +++ b/code/game/gamemodes/wizard/raginmages.dm @@ -16,7 +16,7 @@ to_chat(world, "The current game mode is - Ragin' Mages!") to_chat(world, "The Space Wizard Federation is pissed, crew must help defeat all the Space Wizards invading the station!") -/datum/game_mode/wizard/raginmages/greet_wizard(var/datum/mind/wizard, var/you_are=1) +/datum/game_mode/wizard/raginmages/greet_wizard(datum/mind/wizard, you_are=1) if(you_are) to_chat(wizard.current, "You are the Space Wizard!") to_chat(wizard.current, "The Space Wizard Federation has given you the following tasks:") @@ -85,7 +85,7 @@ return ..() // To silence all struggles within the wizard's lair -/datum/game_mode/wizard/raginmages/proc/end_squabble(var/area/wizard_station/A) +/datum/game_mode/wizard/raginmages/proc/end_squabble(area/wizard_station/A) if(!istype(A)) return // You could probably do mean things with this otherwise var/list/marked_for_death = list() for(var/mob/living/L in A) // To hit non-wizard griefers @@ -143,7 +143,7 @@ // ripped from -tg-'s wizcode, because whee lets make a very general proc for a very specific gamemode // This probably wouldn't do half bad as a proc in __HELPERS // Lemme know if this causes species to mess up spectacularly or anything -/datum/game_mode/wizard/raginmages/proc/makeBody(var/mob/dead/observer/G) +/datum/game_mode/wizard/raginmages/proc/makeBody(mob/dead/observer/G) if(!G || !G.key) return // Let's not steal someone's soul here var/mob/living/carbon/human/new_character = new(pick(GLOB.latejoin)) diff --git a/code/game/gamemodes/wizard/soulstone.dm b/code/game/gamemodes/wizard/soulstone.dm index 324ecae1c0a..cd7c5d21546 100644 --- a/code/game/gamemodes/wizard/soulstone.dm +++ b/code/game/gamemodes/wizard/soulstone.dm @@ -108,7 +108,7 @@ player_mob = ghost var/client/player_client = player_mob.client to_chat(player_mob, "[user] is trying to capture your soul into [src]! Click the button in the top right of the game window to respond.") - player_client << 'sound/misc/notice2.ogg' + SEND_SOUND(player_client, sound('sound/misc/notice2.ogg')) window_flash(player_client) var/obj/screen/alert/notify_soulstone/A = player_mob.throw_alert("\ref[src]_soulstone_thingy", /obj/screen/alert/notify_soulstone) @@ -297,7 +297,7 @@ if(length(contents)) to_chat(user, "Capture failed!: The soul stone is full! Use or free an existing soul to make room.") else - T.loc = src //put shade in stone + T.forceMove(src) // Put the shade into the stone. T.canmove = 0 T.health = T.maxHealth icon_state = icon_state_full diff --git a/code/game/gamemodes/wizard/spellbook.dm b/code/game/gamemodes/wizard/spellbook.dm index 88ee4cc393d..b3c84d28ec4 100644 --- a/code/game/gamemodes/wizard/spellbook.dm +++ b/code/game/gamemodes/wizard/spellbook.dm @@ -172,6 +172,18 @@ log_name = "IG" category = "Offensive" +/datum/spellbook_entry/sacred_flame + name = "Sacred Flame" + spell_type = /obj/effect/proc_holder/spell/targeted/sacred_flame + cost = 1 + log_name = "SF" + refundable = 0 //You get fire immunity out of it, no. + +/datum/spellbook_entry/sacred_flame/LearnSpell(mob/living/carbon/human/user, obj/item/spellbook/book, obj/effect/proc_holder/spell/newspell) + ..() + user.dna.SetSEState(GLOB.coldblock, 1) + singlemutcheck(user, GLOB.coldblock, MUTCHK_FORCED) + //Defensive /datum/spellbook_entry/disabletech name = "Disable Tech" @@ -357,10 +369,14 @@ name = "Buy Item" refundable = 0 buy_word = "Summon" + var/spawn_on_floor = FALSE var/item_path = null /datum/spellbook_entry/item/Buy(mob/living/carbon/human/user, obj/item/spellbook/book) - user.put_in_hands(new item_path) + if(spawn_on_floor == FALSE) + user.put_in_hands(new item_path) + else + new item_path(user.loc) SSblackbox.record_feedback("tally", "wizard_spell_learned", 1, log_name) return 1 @@ -406,6 +422,30 @@ log_name = "WA" category = "Artefacts" +/datum/spellbook_entry/item/cursed_heart + name = "Cursed Heart" + desc = "A heart that has been empowered with magic to heal the user. The user must ensure the heart is manually beaten or their blood circulation will suffer, but every beat heals their injuries. It must beat every 6 seconds. Not reccomended for first time wizards." + item_path = /obj/item/organ/internal/heart/cursed/wizard + log_name = "CH" + cost = 1 + category = "Artefacts" + +/datum/spellbook_entry/item/voice_of_god + name = "Voice of god" + desc = "A magical vocal cord that can be used to yell out with the voice of a god, be it to harm, help, or confuse the target." + item_path = /obj/item/organ/internal/vocal_cords/colossus/wizard + log_name = "VG" + category = "Artefacts" + +/datum/spellbook_entry/item/warp_cubes + name = "Warp Cubes" + desc = "Two magic cubes, that when they are twisted in hand, teleports the user to the location of the other cube instantly. Great for silently teleporting to a fixed location, or teleporting you to an appretnance, or vice versa. Do not leave on the wizard den, it will not work." + item_path = /obj/item/warp_cube/red + log_name = "WC" + cost = 1 + spawn_on_floor = TRUE // breaks if spawned in hand + category = "Artefacts" + //Weapons and Armors /datum/spellbook_entry/item/battlemage name = "Battlemage Armour" @@ -437,6 +477,21 @@ log_name = "SI" category = "Weapons and Armors" +/datum/spellbook_entry/item/spell_blade //Yes spellblade is technicaly a staff, but you can melee with it and it is not called a staff so I am putting it here + name = "Spellblade" + desc = "A magical sword that is quite good at slashing people, but is even better at shooting magical projectiles that can potentialy delimb at range." + item_path = /obj/item/gun/magic/staff/spellblade + log_name = "SB" + category = "Weapons and Armors" + +/datum/spellbook_entry/item/meat_hook + name = "Meat hook" + desc = "An enchanted hook, that can be used to hook people, hurt them, and bring them right to you. Quite bulky, works well as a belt though." + item_path = /obj/item/gun/magic/hook + cost = 1 + log_name = "MH" + category = "Weapons and Armors" + //Staves /datum/spellbook_entry/item/staffdoor name = "Staff of Door Creation" diff --git a/code/game/gamemodes/wizard/wizard.dm b/code/game/gamemodes/wizard/wizard.dm index c21640d8466..43e768a1ef2 100644 --- a/code/game/gamemodes/wizard/wizard.dm +++ b/code/game/gamemodes/wizard/wizard.dm @@ -77,7 +77,7 @@ wizhud.leave_hud(wiz_mind.current) set_antag_hud(wiz_mind.current, null) -/datum/game_mode/proc/forge_wizard_objectives(var/datum/mind/wizard) +/datum/game_mode/proc/forge_wizard_objectives(datum/mind/wizard) var/datum/objective/wizchaos/wiz_objective = new wiz_objective.owner = wizard wizard.objectives += wiz_objective @@ -98,7 +98,7 @@ if(wizard_mob.mind) wizard_mob.mind.name = newname -/datum/game_mode/proc/greet_wizard(var/datum/mind/wizard, var/you_are=1) +/datum/game_mode/proc/greet_wizard(datum/mind/wizard, you_are=1) addtimer(CALLBACK(wizard.current, /mob/.proc/playsound_local, null, 'sound/ambience/antag/ragesmages.ogg', 100, 0), 30) if(you_are) to_chat(wizard.current, "You are the Space Wizard!") @@ -198,7 +198,7 @@ finished = 1 return 1 -/datum/game_mode/wizard/declare_completion(var/ragin = 0) +/datum/game_mode/wizard/declare_completion(ragin = 0) if(finished && !ragin) SSticker.mode_result = "wizard loss - wizard killed" to_chat(world, " The wizard[(wizards.len>1)?"s":""] has been killed by the crew! The Space Wizards Federation has been taught a lesson they will not soon forget!") diff --git a/code/game/jobs/access.dm b/code/game/jobs/access.dm index ac533f0b7ef..6eaaf03aaef 100644 --- a/code/game/jobs/access.dm +++ b/code/game/jobs/access.dm @@ -54,7 +54,7 @@ L = list() return check_access_list(L) -/obj/proc/check_access_list(var/list/L) +/obj/proc/check_access_list(list/L) generate_req_lists() if(!L) @@ -63,7 +63,7 @@ return 0 return has_access(req_access, req_one_access, L) -/proc/has_access(var/list/req_access, var/list/req_one_access, var/list/accesses) +/proc/has_access(list/req_access, list/req_one_access, list/accesses) for(var/req in req_access) if(!(req in accesses)) //doesn't have this access return 0 @@ -443,7 +443,7 @@ return "Unknown" -/proc/GetIdCard(var/mob/living/carbon/human/H) +/proc/GetIdCard(mob/living/carbon/human/H) if(H.wear_id) var/id = H.wear_id.GetID() if(id) @@ -452,7 +452,7 @@ var/obj/item/I = H.get_active_hand() return I.GetID() -/proc/FindNameFromID(var/mob/living/carbon/human/H) +/proc/FindNameFromID(mob/living/carbon/human/H) ASSERT(istype(H)) var/obj/item/card/id/C = H.get_active_hand() if( istype(C) || istype(C, /obj/item/pda) ) diff --git a/code/game/jobs/job/central.dm b/code/game/jobs/job/central.dm index 8684ca7d1b0..c25dfdd256f 100644 --- a/code/game/jobs/job/central.dm +++ b/code/game/jobs/job/central.dm @@ -93,7 +93,7 @@ /obj/item/implant/dust ) cybernetic_implants = list( - /obj/item/organ/internal/cyberimp/eyes/xray, + /obj/item/organ/internal/eyes/cybernetic/xray, /obj/item/organ/internal/cyberimp/brain/anti_stun/hardened, /obj/item/organ/internal/cyberimp/chest/nutriment/plus, /obj/item/organ/internal/cyberimp/arm/combat/centcom diff --git a/code/game/jobs/job/job.dm b/code/game/jobs/job/job.dm index d5c5089c8af..fd3e1a0442b 100644 --- a/code/game/jobs/job/job.dm +++ b/code/game/jobs/job/job.dm @@ -190,7 +190,7 @@ continue if(G.slot) - if(H.equip_to_slot_or_del(G.spawn_item(H), G.slot)) + if(H.equip_to_slot_or_del(G.spawn_item(H), G.slot, TRUE)) to_chat(H, "Equipping you with [gear]!") else gear_leftovers += G diff --git a/code/game/jobs/job/support.dm b/code/game/jobs/job/support.dm index 8a90da80dfa..4f0c1aa0d64 100644 --- a/code/game/jobs/job/support.dm +++ b/code/game/jobs/job/support.dm @@ -272,6 +272,8 @@ /obj/item/instrument/bikehorn = 1 ) + implants = list(/obj/item/implant/sad_trombone) + backpack = /obj/item/storage/backpack/clown satchel = /obj/item/storage/backpack/clown dufflebag = /obj/item/storage/backpack/duffel/clown diff --git a/code/game/jobs/job_exp.dm b/code/game/jobs/job_exp.dm index 0e281606124..b30fbac02c4 100644 --- a/code/game/jobs/job_exp.dm +++ b/code/game/jobs/job_exp.dm @@ -85,7 +85,7 @@ GLOBAL_LIST_INIT(role_playtime_requirements, list( src << browse(msg, "window=Player_playtime_check") -/datum/admins/proc/cmd_mentor_show_exp_panel(var/client/C) +/datum/admins/proc/cmd_mentor_show_exp_panel(client/C) if(!C) to_chat(usr, "ERROR: Client not found.") return @@ -197,10 +197,10 @@ GLOBAL_LIST_INIT(role_playtime_requirements, list( return_text += "" return return_text -/client/proc/get_exp_type(var/etype) +/client/proc/get_exp_type(etype) return get_exp_format(get_exp_type_num(etype)) -/client/proc/get_exp_type_num(var/etype) +/client/proc/get_exp_type_num(etype) var/list/play_records = params2list(prefs.exp) return text2num(play_records[etype]) @@ -216,7 +216,7 @@ GLOBAL_LIST_INIT(role_playtime_requirements, list( return result_text.Join("") -/proc/get_exp_format(var/expnum) +/proc/get_exp_format(expnum) if(expnum > 60) return num2text(round(expnum / 60)) + "h" else if(expnum > 0) diff --git a/code/game/jobs/job_objective.dm b/code/game/jobs/job_objective.dm index 660d1830f0a..8eaf9e09b39 100644 --- a/code/game/jobs/job_objective.dm +++ b/code/game/jobs/job_objective.dm @@ -1,7 +1,7 @@ /datum/mind/var/list/job_objectives = list() #define FINDJOBTASK_DEFAULT_NEW 1 // Make a new task of this type if one can't be found. -/datum/mind/proc/findJobTask(var/typepath, var/options = 0) +/datum/mind/proc/findJobTask(typepath, options = 0) var/datum/job_objective/task = locate(typepath) in job_objectives if(!istype(task,typepath)) if(options & FINDJOBTASK_DEFAULT_NEW) @@ -18,7 +18,7 @@ var/units_requested = INFINITY var/completion_payment = 0 // Credits paid to owner when completed -/datum/job_objective/New(var/datum/mind/new_owner) +/datum/job_objective/New(datum/mind/new_owner) owner = new_owner owner.job_objectives += src @@ -27,7 +27,7 @@ var/desc = "Placeholder Objective" return desc -/datum/job_objective/proc/unit_completed(var/count=1) +/datum/job_objective/proc/unit_completed(count=1) units_completed += count /datum/job_objective/proc/is_completed() diff --git a/code/game/jobs/jobs.dm b/code/game/jobs/jobs.dm index 2f8e426e030..e0e817f76ef 100644 --- a/code/game/jobs/jobs.dm +++ b/code/game/jobs/jobs.dm @@ -105,7 +105,7 @@ GLOBAL_LIST_INIT(whitelisted_positions, list( )) -/proc/guest_jobbans(var/job) +/proc/guest_jobbans(job) return (job in GLOB.whitelisted_positions) /proc/get_job_datums() @@ -119,7 +119,7 @@ GLOBAL_LIST_INIT(whitelisted_positions, list( return occupations -/proc/get_alternate_titles(var/job) +/proc/get_alternate_titles(job) var/list/jobs = get_job_datums() var/list/titles = list() diff --git a/code/game/jobs/whitelist.dm b/code/game/jobs/whitelist.dm index fe835c4dc8d..af80e7474a4 100644 --- a/code/game/jobs/whitelist.dm +++ b/code/game/jobs/whitelist.dm @@ -13,13 +13,13 @@ GLOBAL_LIST_EMPTY(whitelist) if(!GLOB.whitelist.len) GLOB.whitelist = null /* -/proc/check_whitelist(mob/M, var/rank) +/proc/check_whitelist(mob/M, rank) if(!whitelist) return 0 return ("[M.ckey]" in whitelist) */ -/proc/is_job_whitelisted(mob/M, var/rank) +/proc/is_job_whitelisted(mob/M, rank) if(guest_jobbans(rank)) if(!config.usewhitelist) return TRUE @@ -68,7 +68,7 @@ GLOBAL_LIST_EMPTY(alien_whitelist) GLOB.alien_whitelist = splittext(text, "\n") //todo: admin aliens -/proc/is_alien_whitelisted(mob/M, var/species) +/proc/is_alien_whitelisted(mob/M, species) if(!config.usealienwhitelist) return TRUE if(config.disable_karma) diff --git a/code/game/machinery/Beacon.dm b/code/game/machinery/Beacon.dm index 1f626f0656b..41612fb870b 100644 --- a/code/game/machinery/Beacon.dm +++ b/code/game/machinery/Beacon.dm @@ -39,7 +39,7 @@ destroy_beacon() return ..() -/obj/machinery/bluespace_beacon/hide(var/intact) +/obj/machinery/bluespace_beacon/hide(intact) invisibility = intact ? INVISIBILITY_MAXIMUM : 0 update_icon() diff --git a/code/game/machinery/Sleeper.dm b/code/game/machinery/Sleeper.dm index 05a900f07c3..ea7fa1f118b 100644 --- a/code/game/machinery/Sleeper.dm +++ b/code/game/machinery/Sleeper.dm @@ -115,7 +115,7 @@ if(world.timeofday > (R.last_addiction_dose + ADDICTION_SPEEDUP_TIME)) // 2.5 minutes addiction_removal_chance = 10 if(prob(addiction_removal_chance)) - to_chat(occupant, "You no longer feel reliant on [R.name]!") + to_chat(occupant, "You no longer feel reliant on [R.name]!") occupant.reagents.addiction_list.Remove(R) qdel(R) diff --git a/code/game/machinery/ai_slipper.dm b/code/game/machinery/ai_slipper.dm index eaa1120ab04..45cd917c39b 100644 --- a/code/game/machinery/ai_slipper.dm +++ b/code/game/machinery/ai_slipper.dm @@ -27,7 +27,7 @@ disabled = TRUE update_icon() -/obj/machinery/ai_slipper/proc/setState(var/enabled, var/uses) +/obj/machinery/ai_slipper/proc/setState(enabled, uses) disabled = disabled uses = uses power_change() diff --git a/code/game/machinery/autolathe.dm b/code/game/machinery/autolathe.dm index 8a800e9a29f..c148ca6e68f 100644 --- a/code/game/machinery/autolathe.dm +++ b/code/game/machinery/autolathe.dm @@ -37,12 +37,13 @@ var/list/recipiecache = list() var/list/categories = list("Tools", "Electronics", "Construction", "Communication", "Security", "Machinery", "Medical", "Miscellaneous", "Dinnerware", "Imported") + var/board_type = /obj/item/circuitboard/autolathe /obj/machinery/autolathe/New() AddComponent(/datum/component/material_container, list(MAT_METAL, MAT_GLASS), _show_on_examine=TRUE, _after_insert=CALLBACK(src, .proc/AfterMaterialInsert)) ..() component_parts = list() - component_parts += new /obj/item/circuitboard/autolathe(null) + component_parts += new board_type(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/matter_bin(null) @@ -57,7 +58,7 @@ /obj/machinery/autolathe/upgraded/New() ..() component_parts = list() - component_parts += new /obj/item/circuitboard/autolathe(null) + component_parts += new board_type(null) component_parts += new /obj/item/stock_parts/matter_bin/super(null) component_parts += new /obj/item/stock_parts/matter_bin/super(null) component_parts += new /obj/item/stock_parts/matter_bin/super(null) @@ -288,6 +289,8 @@ return ..() /obj/machinery/autolathe/crowbar_act(mob/user, obj/item/I) + if(!panel_open) + return if(!I.use_tool(src, user, 0, volume = 0)) return . = TRUE @@ -491,3 +494,13 @@ /obj/machinery/autolathe/proc/check_disabled_callback() if(!wires.is_cut(WIRE_AUTOLATHE_DISABLE)) disabled = FALSE + +/obj/machinery/autolathe/syndicate + name = "syndicate autolathe" + board_type = /obj/item/circuitboard/autolathe/syndi + +/obj/machinery/autolathe/syndicate/New() + ..() + if(files) + QDEL_NULL(files) + files = new /datum/research/autolathe/syndicate(src) diff --git a/code/game/machinery/buttons.dm b/code/game/machinery/buttons.dm index 9d7b73b2bcc..32b9b381887 100644 --- a/code/game/machinery/buttons.dm +++ b/code/game/machinery/buttons.dm @@ -24,7 +24,7 @@ /obj/machinery/button/indestructible resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF -/obj/machinery/driver_button/New(turf/loc, var/w_dir=null) +/obj/machinery/driver_button/New(turf/loc, w_dir=null) ..() switch(w_dir) if(NORTH) @@ -81,7 +81,7 @@ return ..() -/obj/machinery/driver_button/multitool_menu(var/mob/user, var/obj/item/multitool/P) +/obj/machinery/driver_button/multitool_menu(mob/user, obj/item/multitool/P) return {"
  • ID Tag: [format_tag("ID Tag","id_tag","set_id")]
  • @@ -147,7 +147,7 @@ icon_state = "launcherbtt" active = 0 -/obj/machinery/driver_button/multitool_topic(var/mob/user,var/list/href_list,var/obj/O) +/obj/machinery/driver_button/multitool_topic(mob/user, list/href_list, obj/O) ..() if("toggle_logic" in href_list) logic_connect = !logic_connect diff --git a/code/game/machinery/camera/tracking.dm b/code/game/machinery/camera/tracking.dm index 1c247b23c03..b67357fead3 100644 --- a/code/game/machinery/camera/tracking.dm +++ b/code/game/machinery/camera/tracking.dm @@ -33,7 +33,7 @@ return T -/mob/living/silicon/ai/proc/ai_camera_list(var/camera in get_camera_list()) +/mob/living/silicon/ai/proc/ai_camera_list(camera in get_camera_list()) set category = "AI Commands" set name = "Show Camera List" @@ -160,7 +160,7 @@ ai_actual_track(target) -/mob/living/silicon/ai/proc/ai_cancel_tracking(var/forced = 0) +/mob/living/silicon/ai/proc/ai_cancel_tracking(forced = 0) if(!cameraFollow) return diff --git a/code/game/machinery/cloning.dm b/code/game/machinery/cloning.dm index a350a820c0a..e8d5cfcf437 100644 --- a/code/game/machinery/cloning.dm +++ b/code/game/machinery/cloning.dm @@ -210,12 +210,6 @@ GLOBAL_LIST_INIT(cloner_biomass_items, list(\ if(radio_announce) Radio.autosay(message, name, "Medical", list(z)) -/obj/machinery/clonepod/proc/spooky_devil_flavor() - playsound(loc, pick('sound/goonstation/voice/male_scream.ogg', 'sound/goonstation/voice/female_scream.ogg'), 100, 1) - mess = TRUE - update_icon() - connected_message("If you keep trying to steal from me, you'll end up with me.") - //Start growing a human clone in the pod! /obj/machinery/clonepod/proc/growclone(datum/dna2/record/R) if(mess || attempting || panel_open || stat & (NOPOWER|BROKEN)) @@ -225,11 +219,6 @@ GLOBAL_LIST_INIT(cloner_biomass_items, list(\ return 0 if(clonemind.current && clonemind.current.stat != DEAD) //mind is associated with a non-dead body return 0 - if(clonemind.damnation_type) - spooky_devil_flavor() - return 0 - if(!clonemind.is_revivable()) //Other reasons for being unrevivable - return 0 if(clonemind.active) //somebody is using that mind if(ckey(clonemind.key) != R.ckey ) return 0 @@ -331,7 +320,7 @@ GLOBAL_LIST_INIT(cloner_biomass_items, list(\ connected_message("Clone Ejected: Loss of power.") else if((occupant) && (occupant.loc == src)) - if((occupant.stat == DEAD) || (occupant.suiciding) || (occupant.mind && !occupant.mind.is_revivable())) //Autoeject corpses and suiciding dudes. + if((occupant.stat == DEAD) || (occupant.suiciding)) //Autoeject corpses and suiciding dudes. announce_radio_message("The cloning of [occupant] has been aborted due to unrecoverable tissue failure.") go_out() connected_message("Clone Rejected: Deceased.") @@ -441,7 +430,7 @@ GLOBAL_LIST_INIT(cloner_biomass_items, list(\ /obj/machinery/clonepod/emag_act(user) malfunction() -/obj/machinery/clonepod/proc/update_clone_antag(var/mob/living/carbon/human/H) +/obj/machinery/clonepod/proc/update_clone_antag(mob/living/carbon/human/H) // Check to see if the clone's mind is an antagonist of any kind and handle them accordingly to make sure they get their spells, HUD/whatever else back. if((H.mind in SSticker.mode:revolutionaries) || (H.mind in SSticker.mode:head_revolutionaries)) SSticker.mode.update_rev_icons_added() //So the icon actually appears @@ -532,7 +521,7 @@ GLOBAL_LIST_INIT(cloner_biomass_items, list(\ message += "Agony blazes across your consciousness as your body is torn apart.
    " message += "Is this what dying is like? Yes it is." to_chat(occupant, "[message]") - occupant << sound('sound/hallucinations/veryfar_noise.ogg',0,1,50) + SEND_SOUND(occupant, sound('sound/hallucinations/veryfar_noise.ogg', 0, 1, 50)) for(var/i in missing_organs) qdel(i) missing_organs.Cut() diff --git a/code/game/machinery/computer/HolodeckControl.dm b/code/game/machinery/computer/HolodeckControl.dm index 4141af84ca1..73ef22b3616 100644 --- a/code/game/machinery/computer/HolodeckControl.dm +++ b/code/game/machinery/computer/HolodeckControl.dm @@ -12,11 +12,11 @@ light_color = LIGHT_COLOR_CYAN -/obj/machinery/computer/HolodeckControl/attack_ai(var/mob/user as mob) +/obj/machinery/computer/HolodeckControl/attack_ai(mob/user as mob) return attack_hand(user) -/obj/machinery/computer/HolodeckControl/attack_hand(var/mob/user as mob) +/obj/machinery/computer/HolodeckControl/attack_hand(mob/user as mob) if(..()) return 1 @@ -159,7 +159,7 @@ updateUsrDialog() return -/obj/machinery/computer/HolodeckControl/attackby(var/obj/item/D as obj, var/mob/user as mob, params) +/obj/machinery/computer/HolodeckControl/attackby(obj/item/D as obj, mob/user as mob, params) return /obj/machinery/computer/HolodeckControl/emag_act(user as mob) @@ -221,7 +221,7 @@ T.ex_act(3) T.hotspot_expose(1000,500,1) -/obj/machinery/computer/HolodeckControl/proc/derez(var/obj/obj , var/silent = 1) +/obj/machinery/computer/HolodeckControl/proc/derez(obj/obj , silent = 1) holographic_items.Remove(obj) if(obj == null) @@ -237,14 +237,14 @@ visible_message("The [oldobj.name] fades away!") qdel(obj) -/obj/machinery/computer/HolodeckControl/proc/checkInteg(var/area/A) +/obj/machinery/computer/HolodeckControl/proc/checkInteg(area/A) for(var/turf/T in A) if(istype(T, /turf/space)) return 0 return 1 -/obj/machinery/computer/HolodeckControl/proc/togglePower(var/toggleOn = 0) +/obj/machinery/computer/HolodeckControl/proc/togglePower(toggleOn = 0) if(toggleOn) var/area/targetsource = locate(/area/holodeck/source_emptycourt) @@ -269,7 +269,7 @@ active = 0 -/obj/machinery/computer/HolodeckControl/proc/loadProgram(var/area/A) +/obj/machinery/computer/HolodeckControl/proc/loadProgram(area/A) if(world.time < (last_change + 25)) if(world.time < (last_change + 15))//To prevent super-spam clicking, reduced process size and annoyance -Sieve diff --git a/code/game/machinery/computer/aifixer.dm b/code/game/machinery/computer/aifixer.dm index b1fef7a1b23..8afa3fbb429 100644 --- a/code/game/machinery/computer/aifixer.dm +++ b/code/game/machinery/computer/aifixer.dm @@ -21,10 +21,10 @@ else return ..() -/obj/machinery/computer/aifixer/attack_ai(var/mob/user as mob) +/obj/machinery/computer/aifixer/attack_ai(mob/user as mob) ui_interact(user) -/obj/machinery/computer/aifixer/attack_hand(var/mob/user as mob) +/obj/machinery/computer/aifixer/attack_hand(mob/user as mob) ui_interact(user) /obj/machinery/computer/aifixer/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = TRUE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state) @@ -107,7 +107,7 @@ else overlays += image(icon,"ai-fixer-empty",overlay_layer) -/obj/machinery/computer/aifixer/transfer_ai(var/interaction, var/mob/user, var/mob/living/silicon/ai/AI, var/obj/item/aicard/card) +/obj/machinery/computer/aifixer/transfer_ai(interaction, mob/user, mob/living/silicon/ai/AI, obj/item/aicard/card) if(!..()) return //Downloading AI from card to terminal. diff --git a/code/game/machinery/computer/arcade.dm b/code/game/machinery/computer/arcade.dm index feb7a823a37..391a137749a 100644 --- a/code/game/machinery/computer/arcade.dm +++ b/code/game/machinery/computer/arcade.dm @@ -21,7 +21,7 @@ Reset() -/obj/machinery/computer/arcade/proc/prizevend(var/score) +/obj/machinery/computer/arcade/proc/prizevend(score) if(!contents.len) var/prize_amount if(score) @@ -113,7 +113,7 @@ blocked = 1 var/attackamt = rand(2,6) temp = "You attack for [attackamt] damage!" - playsound(src.loc, 'sound/arcade/hit.ogg', 20, 1, extrarange = -6, falloff = 10) + playsound(loc, 'sound/arcade/hit.ogg', 50, TRUE) updateUsrDialog() if(turtle > 0) turtle-- @@ -127,7 +127,7 @@ var/pointamt = rand(1,3) var/healamt = rand(6,8) temp = "You use [pointamt] magic to heal for [healamt] damage!" - playsound(src.loc, 'sound/arcade/heal.ogg', 20, 1, extrarange = -6, falloff = 10) + playsound(loc, 'sound/arcade/heal.ogg', 50, TRUE) updateUsrDialog() turtle++ @@ -142,7 +142,7 @@ blocked = 1 var/chargeamt = rand(4,7) temp = "You regain [chargeamt] points" - playsound(src.loc, 'sound/arcade/mana.ogg', 20, 1, extrarange = -6, falloff = 10) + playsound(loc, 'sound/arcade/mana.ogg', 50, TRUE) player_mp += chargeamt if(turtle > 0) turtle-- @@ -177,7 +177,7 @@ if(!gameover) gameover = 1 temp = "[enemy_name] has fallen! Rejoice!" - playsound(src.loc, 'sound/arcade/win.ogg', 20, 1, extrarange = -6, falloff = 10) + playsound(loc, 'sound/arcade/win.ogg', 50, TRUE) if(emagged) SSblackbox.record_feedback("tally", "arcade_status", 1, "win_emagged") @@ -195,13 +195,13 @@ else if(emagged && (turtle >= 4)) var/boomamt = rand(5,10) temp = "[enemy_name] throws a bomb, exploding you for [boomamt] damage!" - playsound(src.loc, 'sound/arcade/boom.ogg', 20, 1, extrarange = -6, falloff = 10) + playsound(loc, 'sound/arcade/boom.ogg', 50, TRUE) player_hp -= boomamt else if((enemy_mp <= 5) && (prob(70))) var/stealamt = rand(2,3) temp = "[enemy_name] steals [stealamt] of your power!" - playsound(src.loc, 'sound/arcade/steal.ogg', 20, 1, extrarange = -6, falloff = 10) + playsound(loc, 'sound/arcade/steal.ogg', 50, TRUE) player_mp -= stealamt updateUsrDialog() @@ -209,7 +209,7 @@ gameover = 1 sleep(10) temp = "You have been drained! GAME OVER" - playsound(src.loc, 'sound/arcade/lose.ogg', 20, 1, extrarange = -6, falloff = 10) + playsound(loc, 'sound/arcade/lose.ogg', 50, TRUE) if(emagged) SSblackbox.record_feedback("tally", "arcade_status", 1, "loss_mana_emagged") usr.gib() @@ -218,20 +218,20 @@ else if((enemy_hp <= 10) && (enemy_mp > 4)) temp = "[enemy_name] heals for 4 health!" - playsound(src.loc, 'sound/arcade/heal.ogg', 20, 1, extrarange = -6, falloff = 10) + playsound(loc, 'sound/arcade/heal.ogg', 50, TRUE) enemy_hp += 4 enemy_mp -= 4 else var/attackamt = rand(3,6) temp = "[enemy_name] attacks for [attackamt] damage!" - playsound(src.loc, 'sound/arcade/hit.ogg', 20, 1, extrarange = -6, falloff = 10) + playsound(loc, 'sound/arcade/hit.ogg', 50, TRUE) player_hp -= attackamt if((player_mp <= 0) || (player_hp <= 0)) gameover = 1 temp = "You have been crushed! GAME OVER" - playsound(src.loc, 'sound/arcade/lose.ogg', 20, 1, extrarange = -6, falloff = 10) + playsound(loc, 'sound/arcade/lose.ogg', 50, TRUE) if(emagged) SSblackbox.record_feedback("tally", "arcade_status", 1, "loss_hp_emagged") usr.gib() @@ -451,7 +451,7 @@ else to_chat(usr, "Something strikes you from behind! It hurts like hell and feel like a blunt weapon, but nothing is there...") M.take_organ_damage(30) - playsound(loc, 'sound/weapons/genhit2.ogg', 100, 1) + playsound(loc, 'sound/weapons/genhit2.ogg', 100, TRUE) if(ORION_TRAIL_ILLNESS) var/severity = rand(1,3) //pray to RNGesus. PRAY, PIGS if(severity == 1) @@ -465,7 +465,7 @@ M.Stun(5) sleep(30) atom_say("[M] violently throws up!") - playsound(loc, 'sound/effects/splat.ogg', 50, 1) + playsound(loc, 'sound/effects/splat.ogg', 50, TRUE) M.adjust_nutrition(-50) //lose a lot of food var/turf/location = usr.loc if(istype(location, /turf/simulated)) @@ -475,12 +475,12 @@ M.Weaken(3) atom_say("A sudden gust of powerful wind slams [M] into the floor!") M.take_organ_damage(25) - playsound(src.loc, 'sound/weapons/genhit.ogg', 100, 1) + playsound(loc, 'sound/weapons/genhit.ogg', 100, TRUE) else to_chat(M, "A violent gale blows past you, and you barely manage to stay standing!") if(ORION_TRAIL_COLLISION) //by far the most damaging event if(prob(90)) - playsound(src.loc, 'sound/effects/bang.ogg', 100, 1) + playsound(loc, 'sound/effects/bang.ogg', 100, TRUE) var/turf/simulated/floor/F for(F in orange(1, src)) F.ChangeTurf(F.baseturf) @@ -488,15 +488,15 @@ if(hull) sleep(10) atom_say("A new floor suddenly appears around [src]. What the hell?") - playsound(src.loc, 'sound/weapons/genhit.ogg', 100, 1) + playsound(loc, 'sound/weapons/genhit.ogg', 100, TRUE) var/turf/space/T for(T in orange(1, src)) T.ChangeTurf(/turf/simulated/floor/plating) else atom_say("Something slams into the floor around [src] - luckily, it didn't get through!") - playsound(src.loc, 'sound/effects/bang.ogg', 20, 1) + playsound(loc, 'sound/effects/bang.ogg', 50, TRUE) if(ORION_TRAIL_MALFUNCTION) - playsound(src.loc, 'sound/effects/empulse.ogg', 20, 1) + playsound(loc, 'sound/effects/empulse.ogg', 50, TRUE) visible_message("[src] malfunctions, randomizing in-game stats!") var/oldfood = food var/oldfuel = fuel @@ -510,7 +510,7 @@ audible_message("[src] lets out a somehow ominous chime.") food = oldfood fuel = oldfuel - playsound(src.loc, 'sound/machines/chime.ogg', 20, 1) + playsound(loc, 'sound/machines/chime.ogg', 50, TRUE) else if(href_list["newgame"]) //Reset everything newgame() @@ -553,7 +553,7 @@ event = ORION_TRAIL_BLACKHOLE event() if(emagged) //has to be here because otherwise it doesn't work - playsound(src.loc, 'sound/effects/supermatter.ogg', 100, 1) + playsound(loc, 'sound/effects/supermatter.ogg', 100, TRUE) atom_say("A miniature black hole suddenly appears in front of [src], devouring [usr] alive!") usr.Stun(10) //you can't run :^) var/S = new /obj/singularity/academy(usr.loc) @@ -574,7 +574,7 @@ if(length(settlers) <= 0 || alive <= 0) return var/sheriff = remove_crewmember() //I shot the sheriff - playsound(loc, 'sound/weapons/gunshots/gunshot.ogg', 100, 1) + playsound(loc, 'sound/weapons/gunshots/gunshot.ogg', 100, TRUE) if(length(settlers) == 0 || alive == 0) atom_say("The last crewmember [sheriff], shot themselves, GAME OVER!") @@ -907,7 +907,7 @@ //Add Random/Specific crewmember -/obj/machinery/computer/arcade/orion_trail/proc/add_crewmember(var/specific = "") +/obj/machinery/computer/arcade/orion_trail/proc/add_crewmember(specific = "") var/newcrew = "" if(specific) newcrew = specific @@ -923,7 +923,7 @@ //Remove Random/Specific crewmember -/obj/machinery/computer/arcade/orion_trail/proc/remove_crewmember(var/specific = "", var/dont_remove = "") +/obj/machinery/computer/arcade/orion_trail/proc/remove_crewmember(specific = "", dont_remove = "") var/list/safe2remove = settlers var/removed = "" if(dont_remove) @@ -998,14 +998,14 @@ to_chat(user, "You flip the switch on the underside of [src].") active = 1 visible_message("[src] softly beeps and whirs to life!") - playsound(src.loc, 'sound/machines/defib_saftyon.ogg', 25, 1) + playsound(loc, 'sound/machines/defib_saftyon.ogg', 25, TRUE) atom_say("This is ship ID #[rand(1,1000)] to Orion Port Authority. We're coming in for landing, over.") sleep(20) visible_message("[src] begins to vibrate...") atom_say("Uh, Port? Having some issues with our reactor, could you check it out? Over.") sleep(30) atom_say("Oh, God! Code Eight! CODE EIGHT! IT'S GONNA BL-") - playsound(src.loc, 'sound/machines/buzz-sigh.ogg', 25, 1) + playsound(loc, 'sound/machines/buzz-sigh.ogg', 25, TRUE) sleep(3.6) visible_message("[src] explodes!") explosion(src.loc, 1,2,4, flame_range = 3) diff --git a/code/game/machinery/computer/atmos_control.dm b/code/game/machinery/computer/atmos_control.dm index a5898d87a4c..db28dd16dc6 100644 --- a/code/game/machinery/computer/atmos_control.dm +++ b/code/game/machinery/computer/atmos_control.dm @@ -28,7 +28,7 @@ /obj/machinery/air_sensor/update_icon() icon_state = "gsensor[on]" -/obj/machinery/air_sensor/multitool_menu(var/mob/user, var/obj/item/multitool/P) +/obj/machinery/air_sensor/multitool_menu(mob/user, obj/item/multitool/P) return {" Main "} -/obj/machinery/air_sensor/multitool_topic(var/mob/user, var/list/href_list, var/obj/O) +/obj/machinery/air_sensor/multitool_topic(mob/user, list/href_list, obj/O) . = ..() if(.) return . @@ -65,7 +65,7 @@ visible_message("You hear a quite click as the [src]'s floor bolts raise", "You hear a quite click") return TRUE -/obj/machinery/air_sensor/attackby(var/obj/item/W as obj, var/mob/user as mob) +/obj/machinery/air_sensor/attackby(obj/item/W as obj, mob/user as mob) if(istype(W, /obj/item/multitool)) update_multitool_menu(user) return 1 diff --git a/code/game/machinery/computer/card.dm b/code/game/machinery/computer/card.dm index eb8c996d9b0..6edc4d21eed 100644 --- a/code/game/machinery/computer/card.dm +++ b/code/game/machinery/computer/card.dm @@ -75,7 +75,7 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0) /obj/machinery/computer/card/proc/is_centcom() return FALSE -/obj/machinery/computer/card/proc/is_authenticated(var/mob/user) +/obj/machinery/computer/card/proc/is_authenticated(mob/user) if(user.can_admin_interact()) return TRUE if(scan) @@ -292,7 +292,7 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0) return TRUE return FALSE -/obj/machinery/computer/card/attack_ai(var/mob/user as mob) +/obj/machinery/computer/card/attack_ai(mob/user as mob) return attack_hand(user) /obj/machinery/computer/card/attack_hand(mob/user as mob) diff --git a/code/game/machinery/computer/cloning.dm b/code/game/machinery/computer/cloning.dm index fc8321d1f6a..f2a76b15f58 100644 --- a/code/game/machinery/computer/cloning.dm +++ b/code/game/machinery/computer/cloning.dm @@ -372,7 +372,7 @@ src.add_fingerprint(usr) -/obj/machinery/computer/cloning/proc/scan_mob(mob/living/carbon/human/subject as mob, var/scan_brain = 0) +/obj/machinery/computer/cloning/proc/scan_mob(mob/living/carbon/human/subject as mob, scan_brain = 0) if(stat & NOPOWER) return if(scanner.stat & (NOPOWER|BROKEN)) @@ -459,7 +459,7 @@ SStgui.update_uis(src) //Find a specific record by key. -/obj/machinery/computer/cloning/proc/find_record(var/find_key) +/obj/machinery/computer/cloning/proc/find_record(find_key) var/selected_record = null for(var/datum/dna2/record/R in src.records) if(R.ckey == find_key) diff --git a/code/game/machinery/computer/communications.dm b/code/game/machinery/computer/communications.dm index d250cc60319..054a6719aff 100644 --- a/code/game/machinery/computer/communications.dm +++ b/code/game/machinery/computer/communications.dm @@ -45,7 +45,7 @@ ..() crew_announcement.newscast = 0 -/obj/machinery/computer/communications/proc/is_authenticated(var/mob/user, var/message = 1) +/obj/machinery/computer/communications/proc/is_authenticated(mob/user, message = 1) if(user.can_admin_interact()) return COMM_AUTHENTICATION_AGHOST if(authenticated == COMM_AUTHENTICATION_CAPT) @@ -56,7 +56,7 @@ to_chat(user, "Access denied.") return COMM_AUTHENTICATION_NONE -/obj/machinery/computer/communications/proc/change_security_level(var/new_level) +/obj/machinery/computer/communications/proc/change_security_level(new_level) tmp_alertlevel = new_level var/old_level = GLOB.security_level if(!tmp_alertlevel) tmp_alertlevel = SEC_LEVEL_GREEN @@ -137,7 +137,7 @@ if(message_cooldown > world.time) to_chat(usr, "Please allow at least one minute to pass between announcements.") return - var/input = input(usr, "Please write a message to announce to the station crew.", "Priority Announcement") + var/input = input(usr, "Please write a message to announce to the station crew.", "Priority Announcement") as null|message if(!input || message_cooldown > world.time || ..() || !(is_authenticated(usr) >= COMM_AUTHENTICATION_CAPT)) return if(length(input) < COMM_MSGLEN_MINIMUM) @@ -295,10 +295,10 @@ to_chat(user, "You scramble the communication routing circuits!") SStgui.update_uis(src) -/obj/machinery/computer/communications/attack_ai(var/mob/user as mob) +/obj/machinery/computer/communications/attack_ai(mob/user as mob) return src.attack_hand(user) -/obj/machinery/computer/communications/attack_hand(var/mob/user as mob) +/obj/machinery/computer/communications/attack_hand(mob/user as mob) if(..(user)) return @@ -392,25 +392,25 @@ data["esc_section"] = data["esc_status"] || data["esc_callable"] || data["esc_recallable"] || data["lastCallLoc"] return data -/obj/machinery/computer/communications/proc/setCurrentMessage(var/mob/user,var/value) +/obj/machinery/computer/communications/proc/setCurrentMessage(mob/user, value) if(isAI(user) || isrobot(user)) aicurrmsg = value else currmsg = value -/obj/machinery/computer/communications/proc/getCurrentMessage(var/mob/user) +/obj/machinery/computer/communications/proc/getCurrentMessage(mob/user) if(isAI(user) || isrobot(user)) return aicurrmsg else return currmsg -/obj/machinery/computer/communications/proc/setMenuState(var/mob/user,var/value) +/obj/machinery/computer/communications/proc/setMenuState(mob/user, value) if(isAI(user) || isrobot(user)) ai_menu_state=value else menu_state=value -/proc/call_shuttle_proc(var/mob/user, var/reason) +/proc/call_shuttle_proc(mob/user, reason) if(GLOB.sent_strike_team == 1) to_chat(user, "Central Command will not allow the shuttle to be called. Consider all contracts terminated.") return @@ -433,7 +433,7 @@ return -/proc/init_shift_change(var/mob/user, var/force = 0) +/proc/init_shift_change(mob/user, force = 0) // if force is 0, some things may stop the shuttle call if(!force) if(SSshuttle.emergencyNoEscape) @@ -464,7 +464,7 @@ return -/proc/cancel_call_proc(var/mob/user) +/proc/cancel_call_proc(mob/user) if(SSticker.mode.name == "meteor") return diff --git a/code/game/machinery/computer/depot.dm b/code/game/machinery/computer/depot.dm index c21c5445741..e157570f2c5 100644 --- a/code/game/machinery/computer/depot.dm +++ b/code/game/machinery/computer/depot.dm @@ -391,6 +391,7 @@ icon_screen = "telesci" icon_keyboard = "teleport_key" window_height = 300 + req_access = list(ACCESS_SYNDICATE_LEADER) var/obj/machinery/bluespace_beacon/syndicate/mybeacon var/obj/effect/portal/redspace/myportal var/obj/effect/portal/redspace/myportal2 @@ -486,7 +487,7 @@ "status" = portal_enabled ? "ON" : "OFF", "buttontitle" = portal_enabled ? "Disable" : "Enable", "buttonact" = "secondary", - "buttondisabled" = (!allowed(user) || (!depotarea.on_peaceful && !check_rights(R_ADMIN, FALSE, user))), + "buttondisabled" = !allowed(user), "buttontooltip" = "When on, creates a bi-directional portal to the beacon of your choice." )) return data @@ -500,9 +501,6 @@ playsound(user, sound_yes, 50, 0) /obj/machinery/computer/syndicate_depot/teleporter/secondary(mob/user) - if(!depotarea.on_peaceful && !check_rights(R_ADMIN, FALSE, user)) - to_chat(user, "Outgoing Teleport Portal controls are only enabled when the depot has a signed-in agent visitor.") - return if(!portal_enabled && myportal) to_chat(user, "Outgoing Teleport Portal: deactivating... please wait...") return diff --git a/code/game/machinery/computer/honkputer.dm b/code/game/machinery/computer/honkputer.dm index 9f5d77a642c..6990e1c3dc8 100644 --- a/code/game/machinery/computer/honkputer.dm +++ b/code/game/machinery/computer/honkputer.dm @@ -65,7 +65,7 @@ src.emagged = 1 to_chat(user, "You scramble the login circuits, allowing anyone to use the console!") -/obj/machinery/computer/HONKputer/attack_hand(var/mob/user as mob) +/obj/machinery/computer/HONKputer/attack_hand(mob/user as mob) if(..()) return if(is_away_level(src.z)) diff --git a/code/game/machinery/computer/law.dm b/code/game/machinery/computer/law.dm index d7987477a65..823a20884d6 100644 --- a/code/game/machinery/computer/law.dm +++ b/code/game/machinery/computer/law.dm @@ -42,7 +42,7 @@ return ..() -/obj/machinery/computer/aiupload/attack_hand(var/mob/user as mob) +/obj/machinery/computer/aiupload/attack_hand(mob/user as mob) if(src.stat & NOPOWER) to_chat(usr, "The upload computer has no power!") return @@ -85,7 +85,7 @@ return ..() -/obj/machinery/computer/borgupload/attack_hand(var/mob/user as mob) +/obj/machinery/computer/borgupload/attack_hand(mob/user as mob) if(src.stat & NOPOWER) to_chat(usr, "The upload computer has no power!") return diff --git a/code/game/machinery/computer/message.dm b/code/game/machinery/computer/message.dm index 828b26f69b3..a7345522b25 100644 --- a/code/game/machinery/computer/message.dm +++ b/code/game/machinery/computer/message.dm @@ -79,7 +79,7 @@ linkedServer = GLOB.message_servers[1] return -/obj/machinery/computer/message_monitor/attack_hand(var/mob/user as mob) +/obj/machinery/computer/message_monitor/attack_hand(mob/user as mob) if(..()) return if(stat & (NOPOWER|BROKEN)) diff --git a/code/game/machinery/computer/pod.dm b/code/game/machinery/computer/pod.dm index bafcd2d8ca2..322031d9997 100644 --- a/code/game/machinery/computer/pod.dm +++ b/code/game/machinery/computer/pod.dm @@ -48,7 +48,7 @@ return -/obj/machinery/computer/pod/proc/solo_sync(var/ident_tag) +/obj/machinery/computer/pod/proc/solo_sync(ident_tag) for(var/obj/machinery/mass_driver/M in GLOB.machines) if(M.z != src.z) continue if((M.id_tag == ident_tag) && !(ident_tag in synced)) @@ -74,7 +74,7 @@ return -/obj/machinery/computer/pod/proc/launch_sequence(var/ident_tag) +/obj/machinery/computer/pod/proc/launch_sequence(ident_tag) if(stat & (NOPOWER|BROKEN)) return var/anydriver = 0 @@ -108,12 +108,12 @@ return -/obj/machinery/computer/pod/attack_ai(var/mob/user as mob) +/obj/machinery/computer/pod/attack_ai(mob/user as mob) src.add_hiddenprint(user) return attack_hand(user) -/obj/machinery/computer/pod/attack_hand(var/mob/user as mob) +/obj/machinery/computer/pod/attack_hand(mob/user as mob) if(..()) return @@ -272,7 +272,7 @@ circuit = /obj/item/circuitboard/syndicatedoor light_color = "#00FFFF" -/obj/machinery/computer/pod/old/syndicate/attack_hand(var/mob/user as mob) +/obj/machinery/computer/pod/old/syndicate/attack_hand(mob/user as mob) if(!allowed(user)) to_chat(user, "Access Denied") return @@ -290,7 +290,7 @@ var/teleporter_dest = 0 circuit = /obj/item/circuitboard/pod/deathsquad -/obj/machinery/computer/pod/deathsquad/launch_sequence(var/ident_tag) +/obj/machinery/computer/pod/deathsquad/launch_sequence(ident_tag) if(stat & (NOPOWER|BROKEN)) return var/anydriver = 0 @@ -352,7 +352,7 @@ var/id_tag = "" -/obj/structure/deathsquad_tele/Bumped(var/atom/movable/AM) +/obj/structure/deathsquad_tele/Bumped(atom/movable/AM) if(!ztarget) return ..() var/y = AM.y spawn() diff --git a/code/game/machinery/computer/pod_tracking_console.dm b/code/game/machinery/computer/pod_tracking_console.dm index 6af1ab0bdf4..e8072d9e1d7 100644 --- a/code/game/machinery/computer/pod_tracking_console.dm +++ b/code/game/machinery/computer/pod_tracking_console.dm @@ -23,18 +23,19 @@ var/list/data = list() var/list/pods = list() for(var/obj/item/spacepod_equipment/misc/tracker/TR in GLOB.pod_trackers) - 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") + 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))) + 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/computer/prisoner.dm b/code/game/machinery/computer/prisoner.dm index 8aa41e70f69..a155a323663 100644 --- a/code/game/machinery/computer/prisoner.dm +++ b/code/game/machinery/computer/prisoner.dm @@ -15,7 +15,7 @@ light_color = LIGHT_COLOR_DARKRED -/obj/machinery/computer/prisoner/attack_ai(var/mob/user as mob) +/obj/machinery/computer/prisoner/attack_ai(mob/user as mob) return src.attack_hand(user) /obj/machinery/computer/prisoner/New() @@ -26,7 +26,7 @@ GLOB.prisoncomputer_list -= src return ..() -/obj/machinery/computer/prisoner/attack_hand(var/mob/user as mob) +/obj/machinery/computer/prisoner/attack_hand(mob/user as mob) if(..()) return 1 user.set_machine(src) diff --git a/code/game/machinery/computer/robot.dm b/code/game/machinery/computer/robot.dm index 79c2cb35566..ffa434e7f2d 100644 --- a/code/game/machinery/computer/robot.dm +++ b/code/game/machinery/computer/robot.dm @@ -12,10 +12,10 @@ var/safety = 1 -/obj/machinery/computer/robotics/attack_ai(var/mob/user as mob) +/obj/machinery/computer/robotics/attack_ai(mob/user as mob) return attack_hand(user) -/obj/machinery/computer/robotics/attack_hand(var/mob/user as mob) +/obj/machinery/computer/robotics/attack_hand(mob/user as mob) if(..()) return if(stat & (NOPOWER|BROKEN)) diff --git a/code/game/machinery/computer/salvage_ship.dm b/code/game/machinery/computer/salvage_ship.dm index 1a3f15ddbab..917849101a5 100644 --- a/code/game/machinery/computer/salvage_ship.dm +++ b/code/game/machinery/computer/salvage_ship.dm @@ -106,5 +106,5 @@ updateUsrDialog() return -/obj/machinery/computer/salvage_ship/bullet_act(var/obj/item/projectile/Proj) +/obj/machinery/computer/salvage_ship/bullet_act(obj/item/projectile/Proj) visible_message("[Proj] ricochets off [src]!") diff --git a/code/game/machinery/computer/security.dm b/code/game/machinery/computer/security.dm index 60e1d2814f2..692c10d9706 100644 --- a/code/game/machinery/computer/security.dm +++ b/code/game/machinery/computer/security.dm @@ -1,6 +1,5 @@ #define SEC_DATA_R_LIST 1 // Record list -#define SEC_DATA_MAINT 2 // Records maintenance -#define SEC_DATA_RECORD 3 // Record +#define SEC_DATA_RECORD 2 // Record #define SEC_FIELD(N, V, E, LB) list(field = N, value = V, edit = E, line_break = LB) @@ -166,7 +165,7 @@ if("page") // Select Page if(!logged_in) return - var/page_num = clamp(text2num(params["page"]), SEC_DATA_R_LIST, SEC_DATA_MAINT) // SEC_DATA_RECORD cannot be accessed through this act + var/page_num = clamp(text2num(params["page"]), SEC_DATA_R_LIST, SEC_DATA_R_LIST) // SEC_DATA_RECORD cannot be accessed through this act current_page = page_num record_general = null record_security = null @@ -247,25 +246,6 @@ QDEL_NULL(record_security) update_all_mob_security_hud() set_temp("Security record deleted.") - if("delete_security_all") // Delete All Security Records - if(!logged_in) - return - for(var/datum/data/record/S in GLOB.data_core.security) - qdel(S) - message_admins("[key_name_admin(usr)] has deleted all security records at [ADMIN_COORDJMP(usr)]") - usr.create_log(MISC_LOG, "deleted all security records") - update_all_mob_security_hud() - set_temp("All security records deleted.") - if("delete_cell_logs") // Delete All Cell Logs - if(!logged_in) - return - if(!length(GLOB.cell_logs)) - set_temp("There are no cell logs to delete.") - return - message_admins("[key_name_admin(usr)] has deleted all cell logs at [ADMIN_COORDJMP(usr)]") - usr.create_log(MISC_LOG, "deleted all cell logs") - GLOB.cell_logs.Cut() - set_temp("All cell logs deleted.") if("comment_delete") // Delete Comment if(!logged_in) return @@ -494,6 +474,5 @@ density = FALSE #undef SEC_DATA_R_LIST -#undef SEC_DATA_MAINT #undef SEC_DATA_RECORD #undef SEC_FIELD diff --git a/code/game/machinery/computer/specops_shuttle.dm b/code/game/machinery/computer/specops_shuttle.dm index 5933fc1b7d0..216c4fd8b67 100644 --- a/code/game/machinery/computer/specops_shuttle.dm +++ b/code/game/machinery/computer/specops_shuttle.dm @@ -247,7 +247,7 @@ GLOBAL_VAR_INIT(specops_shuttle_timeleft, 0) return 0 return 1 -/obj/machinery/computer/specops_shuttle/attack_ai(var/mob/user as mob) +/obj/machinery/computer/specops_shuttle/attack_ai(mob/user as mob) to_chat(user, "Access Denied.") return 1 @@ -257,7 +257,7 @@ GLOBAL_VAR_INIT(specops_shuttle_timeleft, 0) else return ..() -/obj/machinery/computer/specops_shuttle/attack_hand(var/mob/user as mob) +/obj/machinery/computer/specops_shuttle/attack_hand(mob/user as mob) if(!allowed(user)) to_chat(user, "Access Denied.") return diff --git a/code/game/machinery/computer/syndicate_specops_shuttle.dm b/code/game/machinery/computer/syndicate_specops_shuttle.dm index efe5617511e..6b72e5bbf5b 100644 --- a/code/game/machinery/computer/syndicate_specops_shuttle.dm +++ b/code/game/machinery/computer/syndicate_specops_shuttle.dm @@ -178,7 +178,7 @@ GLOBAL_VAR_INIT(syndicate_elite_shuttle_timeleft, 0) if(GLOB.syndicate_elite_shuttle_moving_to_station || GLOB.syndicate_elite_shuttle_moving_to_mothership) return 0 else return 1 -/obj/machinery/computer/syndicate_elite_shuttle/attack_ai(var/mob/user as mob) +/obj/machinery/computer/syndicate_elite_shuttle/attack_ai(mob/user as mob) to_chat(user, "Access Denied.") return 1 @@ -188,7 +188,7 @@ GLOBAL_VAR_INIT(syndicate_elite_shuttle_timeleft, 0) else return ..() -/obj/machinery/computer/syndicate_elite_shuttle/attack_hand(var/mob/user as mob) +/obj/machinery/computer/syndicate_elite_shuttle/attack_hand(mob/user as mob) if(!allowed(user)) to_chat(user, "Access Denied.") return diff --git a/code/game/machinery/constructable_frame.dm b/code/game/machinery/constructable_frame.dm index b90b2ed5f26..322141dee0a 100644 --- a/code/game/machinery/constructable_frame.dm +++ b/code/game/machinery/constructable_frame.dm @@ -490,7 +490,8 @@ to destroy them and players will be able to make replacements. "\improper Secure Refrigerated Medicine Storage" = /obj/machinery/smartfridge/secure/medbay, "\improper Smart Chemical Storage" = /obj/machinery/smartfridge/secure/chemistry, "smart virus storage" = /obj/machinery/smartfridge/secure/chemistry/virology, - "\improper Drink Showcase" = /obj/machinery/smartfridge/drinks + "\improper Drink Showcase" = /obj/machinery/smartfridge/drinks, + "disk compartmentalizer" = /obj/machinery/smartfridge/disks ) @@ -624,6 +625,10 @@ to destroy them and players will be able to make replacements. /obj/item/stock_parts/manipulator = 1, /obj/item/stack/sheet/glass = 1) +/obj/item/circuitboard/autolathe/syndi + name = "Circuit board (Syndi Autolathe)" + build_path = /obj/machinery/autolathe/syndicate + /obj/item/circuitboard/protolathe name = "Circuit board (Protolathe)" build_path = /obj/machinery/r_n_d/protolathe diff --git a/code/game/machinery/cryopod.dm b/code/game/machinery/cryopod.dm index 7b7544d86fe..23f217bf32b 100644 --- a/code/game/machinery/cryopod.dm +++ b/code/game/machinery/cryopod.dm @@ -225,6 +225,7 @@ var/willing_time_divisor = 10 var/time_entered = 0 // Used to keep track of the safe period. var/obj/item/radio/intercom/announce + var/silent = FALSE var/obj/machinery/computer/cryopod/control_computer var/last_no_computer_message = 0 @@ -430,20 +431,27 @@ //Make an announcement and log the person entering storage. control_computer.frozen_crew += "[occupant.real_name]" - var/list/ailist = list() - for(var/mob/living/silicon/ai/A in GLOB.silicon_mob_list) - ailist += A - if(length(ailist)) - var/mob/living/silicon/ai/announcer = pick(ailist) - if(announce_rank) - announcer.say(";[occupant.real_name] ([announce_rank]) [on_store_message]", ignore_languages = TRUE) + if(!silent) + var/list/ailist = list() + for(var/thing in GLOB.ai_list) + var/mob/living/silicon/ai/AI = thing + if(AI.stat) + continue + ailist += AI + if(length(ailist)) + var/mob/living/silicon/ai/announcer = pick(ailist) + if(announce_rank) + announcer.say(";[occupant.real_name] ([announce_rank]) [on_store_message]", ignore_languages = TRUE) + else + announcer.say(";[occupant.real_name] [on_store_message]", ignore_languages = TRUE) else - announcer.say(";[occupant.real_name] [on_store_message]", ignore_languages = TRUE) - else - if(announce_rank) - announce.autosay("[occupant.real_name] ([announce_rank]) [on_store_message]", "[on_store_name]") - else - announce.autosay("[occupant.real_name] [on_store_message]", "[on_store_name]") + if(announce_rank) + announce.autosay("[occupant.real_name] ([announce_rank]) [on_store_message]", "[on_store_name]") + else + if(announce_rank) + announce.autosay("[occupant.real_name] ([announce_rank]) [on_store_message]", "[on_store_name]") + else + announce.autosay("[occupant.real_name] [on_store_message]", "[on_store_name]") visible_message("[src] hums and hisses as it moves [occupant.real_name] into storage.") // Ghost and delete the mob. @@ -582,7 +590,7 @@ else to_chat(user, "You stop [L == user ? "climbing into the cryo pod." : "putting [L] into the cryo pod."]") -/obj/machinery/cryopod/proc/take_occupant(var/mob/living/carbon/E, var/willing_factor = 1) +/obj/machinery/cryopod/proc/take_occupant(mob/living/carbon/E, willing_factor = 1) if(occupant) return if(!E) @@ -708,6 +716,10 @@ /obj/machinery/cryopod/blob_act() return //Sorta gamey, but we don't really want these to be destroyed. +/obj/machinery/cryopod/offstation + // Won't announce when used for cryoing. + silent = TRUE + /obj/machinery/computer/cryopod/robot name = "robotic storage console" desc = "An interface between crew and the robotic storage systems" @@ -753,7 +765,7 @@ return ..() -/proc/cryo_ssd(var/mob/living/carbon/person_to_cryo) +/proc/cryo_ssd(mob/living/carbon/person_to_cryo) if(istype(person_to_cryo.loc, /obj/machinery/cryopod)) return 0 if(isobj(person_to_cryo.loc)) @@ -774,7 +786,7 @@ return 1 return 0 -/proc/force_cryo_human(var/mob/living/carbon/person_to_cryo) +/proc/force_cryo_human(mob/living/carbon/person_to_cryo) if(!istype(person_to_cryo)) return if(!istype(person_to_cryo.loc, /obj/machinery/cryopod)) diff --git a/code/game/machinery/door_control.dm b/code/game/machinery/door_control.dm index 8e9befd7a6a..22727d54b57 100644 --- a/code/game/machinery/door_control.dm +++ b/code/game/machinery/door_control.dm @@ -46,7 +46,7 @@ emagged = 1 req_access = list() req_one_access = list() - playsound(loc, "sparks", 100, 1) + playsound(src, "sparks", 100, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) /obj/machinery/door_control/attack_ghost(mob/user) if(user.can_advanced_admin_interact()) diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index 3d3b1eec098..8c5ed4ddb6e 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -1285,6 +1285,7 @@ About the new airlock wires panel: sleep(6) if(QDELETED(src)) return + electronics = new /obj/item/airlock_electronics/destroyed() operating = FALSE if(!open()) update_icon(AIRLOCK_CLOSED, 1) @@ -1406,9 +1407,6 @@ About the new airlock wires panel: ae = electronics electronics = null ae.forceMove(loc) - if(emagged) - ae.icon_state = "door_electronics_smoked" - operating = 0 qdel(src) /obj/machinery/door/airlock/proc/note_type() //Returns a string representing the type of note pinned to this airlock diff --git a/code/game/machinery/doors/airlock_electronics.dm b/code/game/machinery/doors/airlock_electronics.dm index e9435dfe4e8..0be1de00c80 100644 --- a/code/game/machinery/doors/airlock_electronics.dm +++ b/code/game/machinery/doors/airlock_electronics.dm @@ -102,3 +102,16 @@ if("clear_all") selected_accesses = list() + +/obj/item/airlock_electronics/destroyed + name = "burned-out airlock electronics" + icon_state = "door_electronics_smoked" + +/obj/item/airlock_electronics/destroyed/attack_self(mob/user) + return + +/obj/item/airlock_electronics/destroyed/decompile_act(obj/item/matter_decompiler/C, mob/user) + C.stored_comms["metal"] += 1 + C.stored_comms["glass"] += 1 + qdel(src) + return TRUE diff --git a/code/game/machinery/doors/poddoor.dm b/code/game/machinery/doors/poddoor.dm index f8e726e256c..cebd507a9ca 100644 --- a/code/game/machinery/doors/poddoor.dm +++ b/code/game/machinery/doors/poddoor.dm @@ -97,7 +97,7 @@ return ..() //Multi-tile poddoors don't turn invisible automatically, so we change the opacity of the turfs below instead one by one. -/obj/machinery/door/poddoor/multi_tile/proc/apply_opacity_to_my_turfs(var/new_opacity) +/obj/machinery/door/poddoor/multi_tile/proc/apply_opacity_to_my_turfs(new_opacity) for(var/turf/T in locs) T.opacity = new_opacity T.has_opaque_atom = new_opacity diff --git a/code/game/machinery/doors/windowdoor.dm b/code/game/machinery/doors/windowdoor.dm index e1a9f895ea5..59d839018bb 100644 --- a/code/game/machinery/doors/windowdoor.dm +++ b/code/game/machinery/doors/windowdoor.dm @@ -219,8 +219,9 @@ if(!operating && density && !emagged) emagged = TRUE operating = TRUE + electronics = new /obj/item/airlock_electronics/destroyed() flick("[base_state]spark", src) - playsound(src, "sparks", 75, 1) + playsound(src, "sparks", 75, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) sleep(6) operating = FALSE open(2) @@ -279,11 +280,6 @@ WA.update_icon() WA.created_name = name - if(emagged) - to_chat(user, "You discard the damaged electronics.") - qdel(src) - return - to_chat(user, "You remove the airlock electronics.") var/obj/item/airlock_electronics/ae diff --git a/code/game/machinery/doppler_array.dm b/code/game/machinery/doppler_array.dm index e02bcce1315..0061e91001c 100644 --- a/code/game/machinery/doppler_array.dm +++ b/code/game/machinery/doppler_array.dm @@ -19,7 +19,7 @@ GLOBAL_LIST_EMPTY(doppler_arrays) var/actual_size_message var/theoretical_size_message -/datum/explosion_log/New(var/log_time, var/log_epicenter, var/log_actual_size_message, var/log_theoretical_size_message) +/datum/explosion_log/New(log_time, log_epicenter, log_actual_size_message, log_theoretical_size_message) ..() logged_time = log_time epicenter = log_epicenter diff --git a/code/game/machinery/embedded_controller/airlock_program.dm b/code/game/machinery/embedded_controller/airlock_program.dm index d9500e30808..825ba8ceee5 100644 --- a/code/game/machinery/embedded_controller/airlock_program.dm +++ b/code/game/machinery/embedded_controller/airlock_program.dm @@ -23,7 +23,7 @@ var/state = STATE_IDLE var/target_state = TARGET_NONE -/datum/computer/file/embedded_program/airlock/New(var/obj/machinery/embedded_controller/M) +/datum/computer/file/embedded_program/airlock/New(obj/machinery/embedded_controller/M) ..(M) memory["chamber_sensor_pressure"] = ONE_ATMOSPHERE @@ -271,13 +271,13 @@ var/int_closed = check_interior_door_secured() return (ext_closed && int_closed) -/datum/computer/file/embedded_program/airlock/proc/signalDoor(var/tag, var/command) +/datum/computer/file/embedded_program/airlock/proc/signalDoor(tag, command) var/datum/signal/signal = new signal.data["tag"] = tag signal.data["command"] = command post_signal(signal, RADIO_AIRLOCK) -/datum/computer/file/embedded_program/airlock/proc/signalPump(var/tag, var/power, var/direction, var/pressure) +/datum/computer/file/embedded_program/airlock/proc/signalPump(tag, power, direction, pressure) var/datum/signal/signal = new signal.data = list( "tag" = tag, @@ -289,7 +289,7 @@ post_signal(signal) //this is called to set the appropriate door state at the end of a cycling process, or for the exterior buttons -/datum/computer/file/embedded_program/airlock/proc/cycleDoors(var/target) +/datum/computer/file/embedded_program/airlock/proc/cycleDoors(target) switch(target) if(TARGET_OUTOPEN) toggleDoor(memory["interior_status"], tag_interior_door, memory["secure"], "close") @@ -305,7 +305,7 @@ signalDoor(tag_exterior_door, command) signalDoor(tag_interior_door, command) -/datum/computer/file/embedded_program/airlock/proc/signal_mech_sensor(var/command, var/sensor) +/datum/computer/file/embedded_program/airlock/proc/signal_mech_sensor(command, sensor) var/datum/signal/signal = new signal.data["tag"] = sensor signal.data["command"] = command @@ -331,7 +331,7 @@ Only sends a command if it is needed, i.e. if the door is already open, passing an open command to this proc will not send an additional command to open the door again. ----------------------------------------------------------*/ -/datum/computer/file/embedded_program/airlock/proc/toggleDoor(var/list/doorStatus, var/doorTag, var/secure, var/command) +/datum/computer/file/embedded_program/airlock/proc/toggleDoor(list/doorStatus, doorTag, secure, command) var/doorCommand = null if(command == "toggle") diff --git a/code/game/machinery/embedded_controller/embedded_controller_base.dm b/code/game/machinery/embedded_controller/embedded_controller_base.dm index a58118b31f0..2a049958488 100644 --- a/code/game/machinery/embedded_controller/embedded_controller_base.dm +++ b/code/game/machinery/embedded_controller/embedded_controller_base.dm @@ -69,7 +69,7 @@ else icon_state = "airlock_control_off" -/obj/machinery/embedded_controller/radio/post_signal(datum/signal/signal, var/filter = null) +/obj/machinery/embedded_controller/radio/post_signal(datum/signal/signal, filter = null) signal.transmission_method = TRANSMISSION_RADIO if(radio_connection) //use_power(radio_power_use) //neat idea, but causes way too much lag. diff --git a/code/game/machinery/embedded_controller/embedded_program_base.dm b/code/game/machinery/embedded_controller/embedded_program_base.dm index 5bd46b2f3e0..bf64ee1e75e 100644 --- a/code/game/machinery/embedded_controller/embedded_program_base.dm +++ b/code/game/machinery/embedded_controller/embedded_program_base.dm @@ -5,7 +5,7 @@ var/id_tag -/datum/computer/file/embedded_program/New(var/obj/machinery/embedded_controller/M) +/datum/computer/file/embedded_program/New(obj/machinery/embedded_controller/M) master = M if(istype(M, /obj/machinery/embedded_controller/radio)) var/obj/machinery/embedded_controller/radio/R = M diff --git a/code/game/machinery/firealarm.dm b/code/game/machinery/firealarm.dm index b4214fe3b23..71e919f10cc 100644 --- a/code/game/machinery/firealarm.dm +++ b/code/game/machinery/firealarm.dm @@ -98,9 +98,8 @@ FIRE ALARM if(istype(I, /obj/item/stack/cable_coil)) var/obj/item/stack/cable_coil/coil = I if(!coil.use(5)) - to_chat(user, "You cut the wires!") + to_chat(user, "You need a total of five cables to wire [src]!") return - buildstage = FIRE_ALARM_READY playsound(get_turf(src), I.usesound, 50, 1) to_chat(user, "You wire [src]!") @@ -220,11 +219,9 @@ FIRE ALARM /obj/machinery/firealarm/power_change() if(powered(ENVIRON)) stat &= ~NOPOWER - update_icon() else - spawn(rand(0,15)) - stat |= NOPOWER - update_icon() + stat |= NOPOWER + update_icon() /obj/machinery/firealarm/attack_hand(mob/user) if(stat & (NOPOWER|BROKEN) || buildstage != 2) diff --git a/code/game/machinery/flasher.dm b/code/game/machinery/flasher.dm index 369d43e5d94..b7b35863541 100644 --- a/code/game/machinery/flasher.dm +++ b/code/game/machinery/flasher.dm @@ -66,9 +66,6 @@ if(L.flash_eyes(affect_silicon = 1)) L.Weaken(strength) - if(L.weakeyes) - L.Weaken(strength * 1.5) - L.visible_message("[L] gasps and shields [L.p_their()] eyes!") /obj/machinery/flasher/emp_act(severity) if(stat & (BROKEN|NOPOWER)) diff --git a/code/game/machinery/gameboard.dm b/code/game/machinery/gameboard.dm index edc1d3499ec..3141f66592d 100644 --- a/code/game/machinery/gameboard.dm +++ b/code/game/machinery/gameboard.dm @@ -73,7 +73,7 @@ user << browse(null, "window=SpessChess") // And I will kill you. return -/obj/machinery/gameboard/Topic(var/href, var/list/href_list) +/obj/machinery/gameboard/Topic(href, list/href_list) . = ..() var/prize = /obj/item/stack/tickets if(.) diff --git a/code/game/machinery/guestpass.dm b/code/game/machinery/guestpass.dm index 165c8dbe4cb..2292b20728a 100644 --- a/code/game/machinery/guestpass.dm +++ b/code/game/machinery/guestpass.dm @@ -39,21 +39,22 @@ density = 0 - var/obj/item/card/id/giver + var/obj/item/card/id/scan var/list/accesses = list() var/giv_name = "NOT SPECIFIED" var/reason = "NOT SPECIFIED" var/duration = 5 + var/print_cooldown = 0 var/list/internal_log = list() - var/mode = 0 // 0 - making pass, 1 - viewing logs + var/mode = FALSE // FALSE - making pass, TRUE - viewing logs /obj/machinery/computer/guestpass/attackby(obj/item/I, mob/user, params) if(istype(I, /obj/item/card/id)) - if(!giver) + if(!scan) if(user.drop_item()) I.forceMove(src) - giver = I + scan = I updateUsrDialog() else to_chat(user, "There is already ID card inside.") @@ -61,132 +62,161 @@ return ..() /obj/machinery/computer/guestpass/proc/get_changeable_accesses() - return giver.access + return scan.access /obj/machinery/computer/guestpass/attack_ai(mob/user) return attack_hand(user) -/obj/machinery/computer/guestpass/attack_hand(var/mob/user as mob) +/obj/machinery/computer/guestpass/attack_hand(mob/user) if(..()) return + ui_interact(user) - user.set_machine(src) - var/dat +/obj/machinery/computer/guestpass/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, "GuestPass", name, 500, 850, master_ui, state) + ui.open() + ui.set_autoupdate(FALSE) - if(mode == 1) //Logs - dat += "

    Activity log


    " - for(var/entry in internal_log) - dat += "[entry]

    " - dat += "Print
    " - dat += "Back
    " +/obj/machinery/computer/guestpass/ui_data(mob/user) + var/list/data = list() + data["showlogs"] = mode + data["scan_name"] = scan ? scan.name : FALSE + data["issue_log"] = internal_log ? internal_log : list() + data["giv_name"] = giv_name + data["reason"] = reason + data["duration"] = duration + if(scan && !(ACCESS_CHANGE_IDS in scan.access)) + data["grantableList"] = scan ? scan.access : list() + data["canprint"] = FALSE + if(!scan) + data["printmsg"] = "No card inserted." + else if(!length(scan.access)) + data["printmsg"] = "Card has no access." + else if(!length(accesses)) + data["printmsg"] = "No access types selected." + else if(print_cooldown > world.time) + data["printmsg"] = "Busy for [(round((print_cooldown - world.time) / 10))]s.." else - dat += "

    Guest pass terminal #[uid]


    " - dat += "View activity log

    " - dat += "Issuing ID: [giver]
    " - dat += "Issued to: [giv_name]
    " - dat += "Reason: [reason]
    " - dat += "Duration (minutes): [duration] m
    " - dat += "Access to areas:
    " - if(giver && giver.access) - for(var/A in get_changeable_accesses()) - var/area = get_access_desc(A) - if(A in accesses) - area = "[area]" - dat += "[area]
    " - dat += "
    Issue pass
    " + data["printmsg"] = "Print Pass" + data["canprint"] = TRUE - var/datum/browser/popup = new(user, "guestpass", name, 400, 520) - popup.set_content(dat) - popup.open(0) - onclose(user, "guestpass") + data["selectedAccess"] = accesses ? accesses : list() + return data +/obj/machinery/computer/guestpass/ui_static_data(mob/user) + var/list/data = list() + data["regions"] = get_accesslist_static_data(REGION_GENERAL, REGION_COMMAND) + return data -/obj/machinery/computer/guestpass/Topic(href, href_list) +/obj/machinery/computer/guestpass/ui_act(action, params) if(..()) - return 1 - usr.set_machine(src) - if(href_list["mode"]) - mode = text2num(href_list["mode"]) - - if(href_list["choice"]) - switch(href_list["choice"]) - if("giv_name") - var/nam = strip_html_simple(input("Person pass is issued to", "Name", giv_name) as text|null) - if(nam) - giv_name = nam - if("reason") - var/reas = strip_html_simple(input("Reason why pass is issued", "Reason", reason) as text|null) - if(reas) - reason = reas - if("duration") - var/dur = input("Duration (in minutes) during which pass is valid (up to 30 minutes).", "Duration") as num|null - if(dur) - if(dur > 0 && dur <= 30) - duration = dur - else - to_chat(usr, "Invalid duration.") - if("access") - var/A = text2num(href_list["access"]) - if(A in accesses) - accesses.Remove(A) + return + . = TRUE + switch(action) + if("scan") // insert/remove your ID card + if(scan) + if(ishuman(usr)) + scan.forceMove(get_turf(usr)) + usr.put_in_hands(scan) + scan = null else - if(giver && giver.access && (A in get_changeable_accesses())) + scan.forceMove(get_turf(src)) + scan = null + accesses.Cut() + else + var/obj/item/I = usr.get_active_hand() + if(istype(I, /obj/item/card/id)) + if(usr.drop_item()) + I.forceMove(src) + scan = I + if("mode") + mode = !mode + if(!scan || !scan.access) + return // everything below here requires card auth + switch(action) + if("giv_name") + var/nam = strip_html_simple(input("Person pass is issued to", "Name", giv_name) as text | null) + if(nam) + giv_name = nam + if("reason") + var/reas = strip_html_simple(input("Reason why pass is issued", "Reason", reason) as text | null) + if(reas) + reason = reas + if("duration") + var/dur = input("Duration (in minutes) during which pass is valid (up to 30 minutes).", "Duration") as num | null + if(dur) + if(dur > 0 && dur <= 30) + duration = dur + else + to_chat(usr, "Invalid duration.") + if("print") + var/dat = "

    Activity log of guest pass terminal #[uid]


    " + for(var/entry in internal_log) + dat += "[entry]

    " + var/obj/item/paper/P = new /obj/item/paper(loc) + playsound(loc, 'sound/goonstation/machines/printer_dotmatrix.ogg', 50, TRUE) + P.name = "activity log" + P.info = dat + if("issue") + if(!length(accesses)) + return + if(print_cooldown > world.time) + return + var/number = add_zero("[rand(0, 9999)]", 4) + var/entry = "\[[station_time()]\] Pass #[number] issued by [scan.registered_name] ([scan.assignment]) to [giv_name]. Reason: [reason]. Grants access to following areas: " + for(var/i in 1 to length(accesses)) + var/A = accesses[i] + if(A) + var/area = get_access_desc(A) + entry += "[i > 1 ? ", [area]" : "[area]"]" + var/obj/item/card/id/guest/pass = new(get_turf(src)) + pass.temp_access = accesses.Copy() + pass.registered_name = giv_name + pass.expiration_time = world.time + duration MINUTES + pass.reason = reason + pass.name = "guest pass #[number]" + print_cooldown = world.time + 10 SECONDS + entry += ". Expires at [station_time_timestamp("hh:mm:ss", pass.expiration_time)]." + internal_log += entry + if("access") + var/A = text2num(params["access"]) + if(A in accesses) + accesses.Remove(A) + else if(ACCESS_CHANGE_IDS in scan.access) + accesses += A + else if(A in get_changeable_accesses()) + accesses += A + if("grant_region") + var/region = text2num(params["region"]) + if(isnull(region)) + return + if(ACCESS_CHANGE_IDS in scan.access) + accesses |= get_region_accesses(region) + else + var/list/new_accesses = get_region_accesses(region) + for(var/A in new_accesses) + if(A in scan.access) accesses.Add(A) - if(href_list["action"]) - switch(href_list["action"]) - if("id") - if(giver) - if(ishuman(usr)) - giver.loc = usr.loc - if(!usr.get_active_hand()) - usr.put_in_hands(giver) - giver = null - else - giver.loc = src.loc - giver = null - accesses.Cut() - else - var/obj/item/I = usr.get_active_hand() - if(istype(I, /obj/item/card/id)) - usr.drop_item() - I.loc = src - giver = I - updateUsrDialog() - - if("print") - var/dat = "

    Activity log of guest pass terminal #[uid]


    " - for(var/entry in internal_log) - dat += "[entry]

    " -// to_chat(usr, "Printing the log, standby...") - //sleep(50) - var/obj/item/paper/P = new/obj/item/paper( loc ) - playsound(loc, 'sound/goonstation/machines/printer_dotmatrix.ogg', 50, 1) - P.name = "activity log" - P.info = dat - - if("issue") - if(giver) - var/number = add_zero("[rand(0,9999)]", 4) - var/entry = "\[[station_time()]\] Pass #[number] issued by [giver.registered_name] ([giver.assignment]) to [giv_name]. Reason: [reason]. Grants access to following areas: " - for(var/i=1 to accesses.len) - var/A = accesses[i] - if(A) - var/area = get_access_desc(A) - entry += "[i > 1 ? ", [area]" : "[area]"]" - entry += ". Expires at [station_time(world.time + duration*10*60)]." - internal_log.Add(entry) - - var/obj/item/card/id/guest/pass = new(src.loc) - pass.temp_access = accesses.Copy() - pass.registered_name = giv_name - pass.expiration_time = world.time + duration*10*60 - pass.reason = reason - pass.name = "guest pass #[number]" - else - to_chat(usr, "Cannot issue pass without issuing ID.") - updateUsrDialog() - return + if("deny_region") + var/region = text2num(params["region"]) + if(isnull(region)) + return + accesses -= get_region_accesses(region) + if("clear_all") + accesses = list() + if("grant_all") + if(ACCESS_CHANGE_IDS in scan.access) + accesses = get_all_accesses() + else + var/list/new_accesses = get_all_accesses() + for(var/A in new_accesses) + if(A in scan.access) + accesses += A + if(.) + add_fingerprint(usr) /obj/machinery/computer/guestpass/hop name = "\improper HoP guest pass terminal" diff --git a/code/game/machinery/hologram.dm b/code/game/machinery/hologram.dm index 6d2586c46aa..c4d5c4984b9 100644 --- a/code/game/machinery/hologram.dm +++ b/code/game/machinery/hologram.dm @@ -343,7 +343,7 @@ GLOBAL_LIST_EMPTY(holopads) update_holoray(user,new_turf) return TRUE -/obj/machinery/hologram/holopad/proc/activate_holo(mob/living/user, var/force = 0) +/obj/machinery/hologram/holopad/proc/activate_holo(mob/living/user, force = 0) var/mob/living/silicon/ai/AI = user if(!istype(AI)) AI = null @@ -423,7 +423,7 @@ For the other part of the code, check silicon say.dm. Particularly robot talk.*/ icon_state = "holopad0" -/obj/machinery/hologram/holopad/proc/set_holo(mob/living/user, var/obj/effect/overlay/holo_pad_hologram/h) +/obj/machinery/hologram/holopad/proc/set_holo(mob/living/user, obj/effect/overlay/holo_pad_hologram/h) masters[user] = h holorays[user] = new /obj/effect/overlay/holoray(loc) var/mob/living/silicon/ai/AI = user diff --git a/code/game/machinery/lightswitch.dm b/code/game/machinery/lightswitch.dm index f2262b99859..ae3520af45b 100644 --- a/code/game/machinery/lightswitch.dm +++ b/code/game/machinery/lightswitch.dm @@ -17,7 +17,7 @@ var/logic_connect = 0 //Set this to allow the switch to send out logic signals. -/obj/machinery/light_switch/New(turf/loc, var/w_dir=null) +/obj/machinery/light_switch/New(turf/loc, w_dir=null) ..() switch(w_dir) if(NORTH) @@ -165,7 +165,7 @@ new/obj/item/mounted/frame/light_switch(get_turf(src)) qdel(src) -/obj/machinery/light_switch/multitool_menu(var/mob/user, var/obj/item/multitool/P) +/obj/machinery/light_switch/multitool_menu(mob/user, obj/item/multitool/P) return {" "} -/obj/machinery/light_switch/multitool_topic(var/mob/user,var/list/href_list,var/obj/O) +/obj/machinery/light_switch/multitool_topic(mob/user, list/href_list, obj/O) ..() if("toggle_light_connect" in href_list) light_connect = !light_connect diff --git a/code/game/machinery/machinery.dm b/code/game/machinery/machinery.dm index b7d961cc35d..901844c0c14 100644 --- a/code/game/machinery/machinery.dm +++ b/code/game/machinery/machinery.dm @@ -111,13 +111,10 @@ Class Procs: var/power_channel = EQUIP //EQUIP,ENVIRON or LIGHT var/list/component_parts = null //list of all the parts used to build it, if made from certain kinds of frames. var/uid - var/manual = 0 var/global/gl_uid = 1 - var/custom_aghost_alerts=0 var/panel_open = 0 var/area/myArea var/interact_offline = 0 // Can the machine be interacted with while de-powered. - var/list/use_log // Init this list if you wish to add logging to your machine - currently only viewable in VV var/list/settagwhitelist // (Init this list if needed) WHITELIST OF VARIABLES THAT THE set_tag HREF CAN MODIFY, DON'T PUT SHIT YOU DON'T NEED ON HERE, AND IF YOU'RE GONNA USE set_tag (format_tag() proc), ADD TO THIS LIST. atom_say_verb = "beeps" var/siemens_strength = 0.7 // how badly will it shock you? @@ -206,7 +203,7 @@ Class Procs: stat &= ~BROKEN //sets the use_power var and then forces an area power update -/obj/machinery/proc/update_use_power(var/new_use_power) +/obj/machinery/proc/update_use_power(new_use_power) use_power = new_use_power /obj/machinery/proc/auto_use_power() @@ -244,7 +241,7 @@ Class Procs: return TRUE return FALSE -/obj/machinery/proc/handle_multitool_topic(var/href, var/list/href_list, var/mob/user) +/obj/machinery/proc/handle_multitool_topic(href, list/href_list, mob/user) if(!allowed(user))//no, not even HREF exploits return FALSE var/obj/item/multitool/P = get_multitool(usr) @@ -316,7 +313,7 @@ Class Procs: update_multitool_menu(usr) return TRUE -/obj/machinery/Topic(href, href_list, var/nowindow = 0, var/datum/ui_state/state = GLOB.default_state) +/obj/machinery/Topic(href, href_list, nowindow = 0, datum/ui_state/state = GLOB.default_state) if(..(href, href_list, nowindow, state)) return 1 @@ -324,10 +321,10 @@ Class Procs: add_fingerprint(usr) return 0 -/obj/machinery/proc/operable(var/additional_flags = 0) +/obj/machinery/proc/operable(additional_flags = 0) return !inoperable(additional_flags) -/obj/machinery/proc/inoperable(var/additional_flags = 0) +/obj/machinery/proc/inoperable(additional_flags = 0) return (stat & (NOPOWER|BROKEN|additional_flags)) /obj/machinery/ui_status(mob/user, datum/ui_state/state) @@ -342,11 +339,11 @@ Class Procs: return ..() -/obj/machinery/CouldUseTopic(var/mob/user) +/obj/machinery/CouldUseTopic(mob/user) ..() user.set_machine(src) -/obj/machinery/CouldNotUseTopic(var/mob/user) +/obj/machinery/CouldNotUseTopic(mob/user) usr.unset_machine() /obj/machinery/proc/dropContents()//putting for swarmers, occupent code commented out, someone can use later. @@ -570,7 +567,7 @@ Class Procs: /obj/machinery/proc/is_assess_emagged() return emagged -/obj/machinery/proc/assess_perp(mob/living/carbon/human/perp, var/check_access, var/auth_weapons, var/check_records, var/check_arrest) +/obj/machinery/proc/assess_perp(mob/living/carbon/human/perp, check_access, auth_weapons, check_records, check_arrest) var/threatcount = 0 //the integer returned if(is_assess_emagged()) diff --git a/code/game/machinery/magnet.dm b/code/game/machinery/magnet.dm index 9963cfbda93..7bd89ac6dae 100644 --- a/code/game/machinery/magnet.dm +++ b/code/game/machinery/magnet.dm @@ -69,7 +69,7 @@ -/obj/machinery/magnetic_module/proc/Cmd(var/command, var/modifier) +/obj/machinery/magnetic_module/proc/Cmd(command, modifier) if(command) switch(command) if("set-electriclevel") diff --git a/code/game/machinery/mass_driver.dm b/code/game/machinery/mass_driver.dm index 49457c96ec7..cae3e78186e 100644 --- a/code/game/machinery/mass_driver.dm +++ b/code/game/machinery/mass_driver.dm @@ -34,7 +34,7 @@ return ..() -/obj/machinery/mass_driver/multitool_menu(var/mob/user, var/obj/item/multitool/P) +/obj/machinery/mass_driver/multitool_menu(mob/user, obj/item/multitool/P) return {"
    • [format_tag("ID Tag","id_tag","set_id")]
    • @@ -98,7 +98,7 @@ anchored = 0 var/build = 0 -/obj/machinery/mass_driver_frame/attackby(var/obj/item/W as obj, var/mob/user as mob) +/obj/machinery/mass_driver_frame/attackby(obj/item/W as obj, mob/user as mob) switch(build) if(0) // Loose frame if(istype(W, /obj/item/wrench)) diff --git a/code/game/machinery/overview.dm b/code/game/machinery/overview.dm index 952cdccfd39..a3254458337 100644 --- a/code/game/machinery/overview.dm +++ b/code/game/machinery/overview.dm @@ -11,7 +11,7 @@ src.drawmap(usr) -/obj/machinery/computer/security/proc/drawmap(var/mob/user as mob) +/obj/machinery/computer/security/proc/drawmap(mob/user as mob) var/icx = round(world.maxx/16) + 1 var/icy = round(world.maxy/16) + 1 diff --git a/code/game/machinery/pipe/construction.dm b/code/game/machinery/pipe/construction.dm index d434dbff73c..69166311caa 100644 --- a/code/game/machinery/pipe/construction.dm +++ b/code/game/machinery/pipe/construction.dm @@ -149,7 +149,7 @@ else return ..() -/obj/item/pipe/proc/update(var/obj/machinery/atmospherics/make_from) +/obj/item/pipe/proc/update(obj/machinery/atmospherics/make_from) name = "[get_pipe_name(pipe_type, PIPETYPE_ATMOS)] fitting" icon_state = get_pipe_icon(pipe_type) var/obj/machinery/atmospherics/trinary/triP = make_from @@ -303,7 +303,7 @@ else return 0 -/obj/item/pipe/proc/unflip(var/direction) +/obj/item/pipe/proc/unflip(direction) if(!(direction in GLOB.cardinal)) return turn(direction, 45) @@ -514,7 +514,7 @@ item_state = "buildpipe" w_class = WEIGHT_CLASS_BULKY -/obj/item/pipe_meter/attackby(var/obj/item/W as obj, var/mob/user as mob, params) +/obj/item/pipe_meter/attackby(obj/item/W as obj, mob/user as mob, params) if(!istype(W, /obj/item/wrench)) return ..() if(!locate(/obj/machinery/atmospherics/pipe, src.loc)) @@ -539,7 +539,7 @@ item_state = "buildpipe" w_class = WEIGHT_CLASS_BULKY -/obj/item/pipe_gsensor/attackby(var/obj/item/W as obj, var/mob/user as mob) +/obj/item/pipe_gsensor/attackby(obj/item/W as obj, mob/user as mob) if(!istype(W, /obj/item/wrench)) return ..() new/obj/machinery/air_sensor( src.loc ) diff --git a/code/game/machinery/pipe/pipe_dispenser.dm b/code/game/machinery/pipe/pipe_dispenser.dm index 8f0e3316399..38443de284e 100644 --- a/code/game/machinery/pipe/pipe_dispenser.dm +++ b/code/game/machinery/pipe/pipe_dispenser.dm @@ -95,7 +95,7 @@ new /obj/item/pipe_gsensor(loc) return TRUE -/obj/machinery/pipedispenser/attackby(var/obj/item/W as obj, var/mob/user as mob, params) +/obj/machinery/pipedispenser/attackby(obj/item/W as obj, mob/user as mob, params) add_fingerprint(usr) if(istype(W, /obj/item/pipe) || istype(W, /obj/item/pipe_meter) || istype(W, /obj/item/pipe_gsensor)) to_chat(usr, "You put [W] back to [src].") @@ -138,7 +138,7 @@ icon_state = "pipe_d" //Allow you to drag-drop disposal pipes into it -/obj/machinery/pipedispenser/disposal/MouseDrop_T(var/obj/structure/disposalconstruct/pipe, mob/usr) +/obj/machinery/pipedispenser/disposal/MouseDrop_T(obj/structure/disposalconstruct/pipe, mob/usr) if(usr.incapacitated()) return diff --git a/code/game/machinery/poolcontroller.dm b/code/game/machinery/poolcontroller.dm index d2ade6bf0ea..8273e58cbc2 100644 --- a/code/game/machinery/poolcontroller.dm +++ b/code/game/machinery/poolcontroller.dm @@ -89,7 +89,7 @@ animate(decal, alpha = 10, time = 20) QDEL_IN(decal, 25) -/obj/machinery/poolcontroller/proc/handleTemp(var/mob/M) +/obj/machinery/poolcontroller/proc/handleTemp(mob/M) if(!M || isAIEye(M) || issilicon(M) || isobserver(M) || M.stat == DEAD) return M.water_act(100, temperature, src)//leave temp at 0, we handle it in the switch. oh wait @@ -108,7 +108,7 @@ if(FRIGID) //YOU'RE AS COLD AS ICE to_chat(M, "The water is freezing!") -/obj/machinery/poolcontroller/proc/handleDrowning(var/mob/living/carbon/human/drownee) +/obj/machinery/poolcontroller/proc/handleDrowning(mob/living/carbon/human/drownee) if(!drownee) return diff --git a/code/game/machinery/portable_tag_turret.dm b/code/game/machinery/portable_tag_turret.dm index 562db4074f3..34c8f8a7623 100644 --- a/code/game/machinery/portable_tag_turret.dm +++ b/code/game/machinery/portable_tag_turret.dm @@ -25,7 +25,7 @@ . = ..() icon_state = "[lasercolor]grey_target_prism" -/obj/machinery/porta_turret/tag/weapon_setup(var/obj/item/gun/energy/E) +/obj/machinery/porta_turret/tag/weapon_setup(obj/item/gun/energy/E) return /obj/machinery/porta_turret/tag/ui_data(mob/user) @@ -71,7 +71,7 @@ spawn(100) disabled = FALSE -/obj/machinery/porta_turret/tag/assess_living(var/mob/living/L) +/obj/machinery/porta_turret/tag/assess_living(mob/living/L) if(!L) return TURRET_NOT_TARGET diff --git a/code/game/machinery/portable_turret.dm b/code/game/machinery/portable_turret.dm index 9a94d8e83fa..4f22d1c2bb2 100644 --- a/code/game/machinery/portable_turret.dm +++ b/code/game/machinery/portable_turret.dm @@ -104,7 +104,7 @@ weapon_setup(installation) -/obj/machinery/porta_turret/proc/weapon_setup(var/guntype) +/obj/machinery/porta_turret/proc/weapon_setup(guntype) switch(guntype) if(/obj/item/gun/energy/laser/practice) lethal_is_configurable = FALSE @@ -317,11 +317,9 @@ GLOBAL_LIST_EMPTY(turret_icons) /obj/machinery/porta_turret/power_change() if(powered() || !use_power) stat &= ~NOPOWER - update_icon() else - spawn(rand(0, 15)) - stat |= NOPOWER - update_icon() + stat |= NOPOWER + update_icon() /obj/machinery/porta_turret/attackby(obj/item/I, mob/user) @@ -610,7 +608,7 @@ GLOBAL_LIST_EMPTY(turret_icons) return TURRET_PRIORITY_TARGET //if the perp has passed all previous tests, congrats, it is now a "shoot-me!" nominee -/obj/machinery/porta_turret/proc/tryToShootAt(var/list/mob/living/targets) +/obj/machinery/porta_turret/proc/tryToShootAt(list/mob/living/targets) if(targets.len && last_target && (last_target in targets) && target(last_target)) return 1 @@ -668,7 +666,7 @@ GLOBAL_LIST_EMPTY(turret_icons) return ..() -/obj/machinery/porta_turret/proc/set_raised_raising(var/is_raised, var/is_raising) +/obj/machinery/porta_turret/proc/set_raised_raising(is_raised, is_raising) raised = is_raised raising = is_raising density = is_raised || is_raising @@ -756,7 +754,7 @@ GLOBAL_LIST_EMPTY(turret_icons) var/check_borgs var/ailock -/obj/machinery/porta_turret/proc/setState(var/datum/turret_checks/TC) +/obj/machinery/porta_turret/proc/setState(datum/turret_checks/TC) if(controllock) return enabled = TC.enabled diff --git a/code/game/machinery/quantum_pad.dm b/code/game/machinery/quantum_pad.dm index 739d8e31a5d..f07e2e443e7 100644 --- a/code/game/machinery/quantum_pad.dm +++ b/code/game/machinery/quantum_pad.dm @@ -132,9 +132,9 @@ linked_pad.sparks() flick("qpad-beam", src) - playsound(get_turf(src), 'sound/weapons/emitter2.ogg', 25, 1, extrarange = 3, falloff = 5) + playsound(get_turf(src), 'sound/weapons/emitter2.ogg', 25, TRUE) flick("qpad-beam", linked_pad) - playsound(get_turf(linked_pad), 'sound/weapons/emitter2.ogg', 25, 1, extrarange = 3, falloff = 5) + playsound(get_turf(linked_pad), 'sound/weapons/emitter2.ogg', 25, TRUE) var/tele_success = TRUE for(var/atom/movable/ROI in get_turf(src)) // if is anchored, don't let through diff --git a/code/game/machinery/rechargestation.dm b/code/game/machinery/rechargestation.dm index 9b10029e2ad..9063a126317 100644 --- a/code/game/machinery/rechargestation.dm +++ b/code/game/machinery/rechargestation.dm @@ -83,7 +83,7 @@ new /obj/effect/gibspawner/generic(get_turf(loc)) //I REPLACE YOUR TECHNOLOGY WITH FLESH! qdel(src) -/obj/machinery/recharge_station/Bumped(var/mob/AM) +/obj/machinery/recharge_station/Bumped(mob/AM) if(ismob(AM)) move_inside(AM) @@ -234,7 +234,7 @@ add_fingerprint(usr) return -/obj/machinery/recharge_station/verb/move_inside(var/mob/user = usr) +/obj/machinery/recharge_station/verb/move_inside(mob/user = usr) set category = "Object" set src in oview(1) if(!user || !usr) diff --git a/code/game/machinery/recycler.dm b/code/game/machinery/recycler.dm index 5d26f0e946e..99e0b45a90b 100644 --- a/code/game/machinery/recycler.dm +++ b/code/game/machinery/recycler.dm @@ -76,7 +76,7 @@ if(emergency_mode) emergency_mode = FALSE update_icon() - playsound(loc, "sparks", 75, 1, -1) + playsound(src, "sparks", 75, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) to_chat(user, "You use the cryptographic sequencer on the [name].") /obj/machinery/recycler/update_icon() diff --git a/code/game/machinery/requests_console.dm b/code/game/machinery/requests_console.dm index 2d04d04644a..487ec245466 100644 --- a/code/game/machinery/requests_console.dm +++ b/code/game/machinery/requests_console.dm @@ -193,7 +193,7 @@ GLOBAL_LIST_EMPTY(allRequestConsoles) reset_message(TRUE) if("writeAnnouncement") - var/new_message = sanitize(input("Write your message:", "Awaiting Input", "")) + var/new_message = input("Write your message:", "Awaiting Input", message) as message|null if(new_message) message = new_message else @@ -202,7 +202,7 @@ GLOBAL_LIST_EMPTY(allRequestConsoles) if("sendAnnouncement") if(!announcementConsole) return - announcement.Announce(message, msg_sanitized = TRUE) + announcement.Announce(message) reset_message(TRUE) if("department") diff --git a/code/game/machinery/shieldgen.dm b/code/game/machinery/shieldgen.dm index 287adba2ffa..6934483c0ae 100644 --- a/code/game/machinery/shieldgen.dm +++ b/code/game/machinery/shieldgen.dm @@ -7,6 +7,7 @@ opacity = FALSE anchored = 1 resistance_flags = LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF + flags_2 = RAD_NO_CONTAMINATE_2 max_integrity = 200 /obj/machinery/shield/New() @@ -673,6 +674,6 @@ phaseout() return ..() -/obj/machinery/shieldwall/syndicate/hitby(AM as mob|obj) +/obj/machinery/shieldwall/syndicate/hitby(atom/movable/AM, skipcatch, hitpush, blocked, datum/thrownthing/throwingdatum) phaseout() return ..() diff --git a/code/game/machinery/status_display.dm b/code/game/machinery/status_display.dm index 30dfc78fe29..81835d19c82 100644 --- a/code/game/machinery/status_display.dm +++ b/code/game/machinery/status_display.dm @@ -287,7 +287,7 @@ return -/obj/machinery/ai_status_display/proc/set_picture(var/state) +/obj/machinery/ai_status_display/proc/set_picture(state) picture_state = state if(overlays.len) overlays.Cut() diff --git a/code/game/machinery/suit_storage_unit.dm b/code/game/machinery/suit_storage_unit.dm index d4b2641b22f..9fe8c781c09 100644 --- a/code/game/machinery/suit_storage_unit.dm +++ b/code/game/machinery/suit_storage_unit.dm @@ -314,7 +314,7 @@ if(state_open) if(store_item(I, user)) update_icon() - updateUsrDialog() + SStgui.update_uis(src) to_chat(user, "You load the [I] into the storage compartment.") else to_chat(user, "You can't fit [I] into [src]!") @@ -366,6 +366,7 @@ helmet = null suit = null mask = null + boots = null storage = null occupant = null @@ -409,8 +410,6 @@ if(uv_cycles) uv_cycles-- uv = TRUE - locked = TRUE - update_icon() if(occupant) var/mob/living/mob_occupant = occupant if(uv_super) @@ -422,7 +421,6 @@ else uv_cycles = initial(uv_cycles) uv = FALSE - locked = FALSE for(var/atom/A in contents) A.clean_blood(radiation_clean = FALSE) // we invoke the radiation cleaning proc directly A.clean_radiation(12) // instead of letting clean_blood do it @@ -451,9 +449,10 @@ else visible_message("[src]'s door slides open, barraging you with the nauseating smell of charred flesh.") playsound(src, 'sound/machines/airlock_close.ogg', 25, 1) - open_machine(FALSE) if(occupant) dump_contents() + update_icon() + SStgui.update_uis(src) /obj/machinery/suit_storage_unit/relaymove(mob/user) if(locked) @@ -502,7 +501,7 @@ if(drop) dropContents() update_icon() - updateUsrDialog() + SStgui.update_uis(src) /obj/machinery/suit_storage_unit/dropContents() var/turf/T = get_turf(src) @@ -532,132 +531,81 @@ if(target && !target.has_buckled_mobs() && (!isliving(target) || !mobtarget.buckled)) occupant = target target.forceMove(src) - updateUsrDialog() + SStgui.update_uis(src) update_icon() //////// -/obj/machinery/suit_storage_unit/attack_hand(mob/user) - var/dat - if(shocked && !(stat & NOPOWER)) - if(shock(user, 100)) - return - if(stat & NOPOWER) - return - if(..()) - return - if(panel_open) //The maintenance panel is open. Time for some shady stuff - wires.Interact(user) - if(uv) //The thing is running its cauterisation cycle. You have to wait. - dat += "Suit storage unit" - dat+= "Unit is cauterising contents with selected UV ray intensity. Please wait.
      " - else - if(!broken) - dat+= "Welcome to the Unit control panel.
      " - dat+= text("Helmet storage compartment: []
      ",(helmet ? helmet.name : "No helmet detected.") ) - if(helmet && state_open) - dat+="Dispense helmet
      " - dat+= text("Suit storage compartment: []
      ",(suit ? suit.name : "
      No exosuit detected.") ) - if(suit && state_open) - dat+="Dispense suit
      " - dat+= text("Breathmask storage compartment: []
      ",(mask ? mask.name : "
      No breathmask detected.") ) - if(mask && state_open) - dat+="Dispense mask
      " - dat+= text("Magboots storage compartment: []
      ",(boots ? boots.name : "
      No magboots detected.") ) - if(boots && state_open) - dat+="Dispense magboots
      " - dat+= text("Tank storage compartment: []
      ",(storage ? storage.name : "
      No storage item detected.") ) - if(storage && state_open) - dat+="Dispense storage item
      " - if(occupant) - dat+= "
      WARNING: Biological entity detected inside the Unit's storage. Please remove.
      " - dat+= "Eject extra load" - dat+= text("
      Unit is: [] - [] Unit ",(state_open ? "Open" : "Closed"),(state_open ? "Close" : "Open")) - if(state_open) - dat+="
      " - else - dat+= text(" - *[] Unit*
      ",(locked ? "Unlock" : "Lock") ) - dat+= text("Unit status: []",(locked? "**LOCKED**
      " : "**UNLOCKED**
      ") ) - dat+= "Start Disinfection cycle
      " - dat += "

      Close control panel" - else //Ohhhh shit it's dirty or broken! Let's inform the guy. - dat+= "Suit storage unit" - dat+= "Unit chamber is too contaminated to continue usage. Please call for a qualified individual to perform maintenance.

      " - dat+= "
      Close control panel" - - - var/datum/browser/popup = new(user, "suit_storage_unit", name, 400, 500) - popup.set_content(dat) - popup.open(0) - onclose(user, "suit_storage_unit") - return - /obj/machinery/suit_storage_unit/proc/check_allowed(user) if(!(allowed(user) || !secure)) to_chat(user, "Access denied.") return FALSE return TRUE -/obj/machinery/suit_storage_unit/Topic(href, href_list) +/obj/machinery/suit_storage_unit/attack_hand(mob/user) + if(..() || (stat & NOPOWER)) + return + if(shocked && shock(user, 100)) + return + if(panel_open) //The maintenance panel is open. Time for some shady stuff + wires.Interact(user) + ui_interact(user) + +/obj/machinery/suit_storage_unit/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, "SuitStorage", name, 402, 268, master_ui, state) + ui.set_autoupdate(FALSE) + ui.open() + +/obj/machinery/suit_storage_unit/ui_data(mob/user) + var/list/data = list( + "locked" = locked, + "open" = state_open, + "broken" = broken, + "helmet" = helmet ? helmet.name : null, + "suit" = suit ? suit.name : null, + "magboots" = boots ? boots.name : null, + "mask" = mask ? mask.name : null, + "storage" = storage ? storage.name : null, + "uv" = uv + ) + return data + +/obj/machinery/suit_storage_unit/ui_act(action, list/params) if(..()) - return 1 + return + add_fingerprint(usr) if(shocked && !(stat & NOPOWER)) if(shock(usr, 100)) - return - if((usr.contents.Find(src) || ((get_dist(src, usr) <= 1) && istype(src.loc, /turf))) || (istype(usr, /mob/living/silicon/ai))) - usr.set_machine(src) - if(href_list["toggleUV"]) - toggleUV() - updateUsrDialog() - update_icon() - if(href_list["togglesafeties"]) - togglesafeties() - updateUsrDialog() - update_icon() - if(href_list["dispense_helmet"]) - dispense_helmet() - updateUsrDialog() - update_icon() - if(href_list["dispense_suit"]) - dispense_suit() - updateUsrDialog() - update_icon() - if(href_list["dispense_mask"]) - dispense_mask() - updateUsrDialog() - update_icon() - if(href_list["dispense_magboots"]) - dispense_magboots() - updateUsrDialog() - update_icon() - if(href_list["dispense_storage"]) - dispense_storage() - updateUsrDialog() - update_icon() - if(href_list["toggle_open"]) - if(!check_allowed(usr)) - return - toggle_open(usr) - updateUsrDialog() - update_icon() - if(href_list["toggle_lock"]) - if(!check_allowed(usr)) - return - toggle_lock(usr) - updateUsrDialog() - update_icon() - if(href_list["cook"]) - cook() - updateUsrDialog() - update_icon() - if(href_list["eject_guy"]) - eject_occupant(usr) - updateUsrDialog() - update_icon() - add_fingerprint(usr) - return + return FALSE + . = TRUE + switch(action) + if("dispense_helmet") + dispense_helmet() + if("dispense_suit") + dispense_suit() + if("dispense_mask") + dispense_mask() + if("dispense_boots") + dispense_boots() + if("dispense_storage") + dispense_storage() + if("toggle_open") + if(!check_allowed(usr)) + return FALSE + toggle_open(usr) + if("toggle_lock") + if(!check_allowed(usr)) + return FALSE + toggle_lock(usr) + if("cook") + cook() + if("eject_occupant") + eject_occupant(usr) + update_icon() /obj/machinery/suit_storage_unit/proc/toggleUV() if(!panel_open) @@ -692,7 +640,7 @@ mask.forceMove(loc) mask = null -/obj/machinery/suit_storage_unit/proc/dispense_magboots() +/obj/machinery/suit_storage_unit/proc/dispense_boots() if(!boots) return else @@ -754,7 +702,7 @@ return eject_occupant(usr) add_fingerprint(usr) - updateUsrDialog() + SStgui.update_uis(src) update_icon() return @@ -785,7 +733,7 @@ update_icon() add_fingerprint(usr) - updateUsrDialog() + SStgui.update_uis(src) return else occupant = null diff --git a/code/game/machinery/syndicatebeacon.dm b/code/game/machinery/syndicatebeacon.dm index a5cff57ad52..6318eebdb2d 100644 --- a/code/game/machinery/syndicatebeacon.dm +++ b/code/game/machinery/syndicatebeacon.dm @@ -17,7 +17,7 @@ var/selfdestructing = 0 var/charges = 1 -/obj/machinery/syndicate_beacon/attack_hand(var/mob/user as mob) +/obj/machinery/syndicate_beacon/attack_hand(mob/user as mob) usr.set_machine(src) var/dat = "Scanning [pick("retina pattern", "voice print", "fingerprints", "dna sequence")]...
      Identity confirmed,
      " if(istype(user, /mob/living/carbon/human) || istype(user, /mob/living/silicon/ai)) @@ -147,7 +147,7 @@ return -/obj/machinery/power/singularity_beacon/attack_hand(var/mob/user as mob) +/obj/machinery/power/singularity_beacon/attack_hand(mob/user as mob) if(anchored) return active ? Deactivate(user) : Activate(user) else diff --git a/code/game/machinery/syndicatebomb.dm b/code/game/machinery/syndicatebomb.dm index e6f9f617cff..ed196abc6dc 100644 --- a/code/game/machinery/syndicatebomb.dm +++ b/code/game/machinery/syndicatebomb.dm @@ -303,22 +303,6 @@ ..() wires.cut_all() -/obj/machinery/syndicatebomb/self_destruct - name = "self destruct device" - desc = "Do not taunt. Warranty invalid if exposed to high temperature. Not suitable for agents under 3 years of age." - req_access = list(ACCESS_SYNDICATE) - payload = /obj/item/bombcore/large - can_unanchor = FALSE - var/explosive_wall_group = EXPLOSIVE_WALL_GROUP_SYNDICATE_BASE // If set, this bomb will also cause explosive walls in the same group to explode - -/obj/machinery/syndicatebomb/self_destruct/try_detonate(ignore_active = FALSE) - . = ..() - if(. && explosive_wall_group) - for(var/wall in GLOB.explosive_walls) - var/turf/simulated/wall/mineral/plastitanium/explosive/E = wall - if(E.explosive_wall_group == explosive_wall_group) - E.self_destruct() - sleep(5) ///Bomb Cores/// diff --git a/code/game/machinery/tcomms/_base.dm b/code/game/machinery/tcomms/_base.dm index 2f6702eaa8c..3fa0c31b559 100644 --- a/code/game/machinery/tcomms/_base.dm +++ b/code/game/machinery/tcomms/_base.dm @@ -30,7 +30,7 @@ GLOBAL_LIST_EMPTY(tcomms_machines) /obj/machinery/tcomms name = "Telecommunications Device" desc = "Someone forgot to say what this thingy does. Please yell at a coder" - icon = 'icons/obj/tcomms.dmi' + icon = 'icons/obj/machines/telecomms.dmi' icon_state = "error" density = TRUE anchored = TRUE @@ -85,10 +85,8 @@ GLOBAL_LIST_EMPTY(tcomms_machines) /obj/machinery/tcomms/update_icon() . = ..() // Show the off sprite if were inactive, ion'd or unpowered - if(!active || (stat & NOPOWER) || ion) - icon_state = "[initial(icon_state)]_off" - else - icon_state = initial(icon_state) + var/functioning = (active && !(stat & NOPOWER) && !ion) + icon_state = "[initial(icon_state)][panel_open ? "_o" : null][functioning ? null : "_off"]" // Attack overrides. These are needed so the UIs can be opened up // diff --git a/code/game/machinery/tcomms/core.dm b/code/game/machinery/tcomms/core.dm index f0b340459c7..12650996e89 100644 --- a/code/game/machinery/tcomms/core.dm +++ b/code/game/machinery/tcomms/core.dm @@ -307,7 +307,7 @@ if("add_filter") // This is a stripped input because I did NOT come this far for this system to be abused by HTML injection - var/name_to_add = stripped_input(usr, "Enter a name to add to the filtering list", "Name Entry") + var/name_to_add = html_decode(stripped_input(usr, "Enter a name to add to the filtering list", "Name Entry")) if(name_to_add == "") return if(name_to_add in nttc.filtering) diff --git a/code/game/machinery/tcomms/nttc.dm b/code/game/machinery/tcomms/nttc.dm index 6ca309a7dfe..0576bbe7e41 100644 --- a/code/game/machinery/tcomms/nttc.dm +++ b/code/game/machinery/tcomms/nttc.dm @@ -189,7 +189,7 @@ // This loads a configuration from a JSON string. // Fucking broken as shit, someone help me fix this. -/datum/nttc_configuration/proc/nttc_deserialize(text, var/ckey) +/datum/nttc_configuration/proc/nttc_deserialize(text, ckey) if(word_blacklist.Find(text)) //uh oh, they tried to be naughty message_admins("EXPLOIT WARNING: [ckey] attempted to upload an NTTC configuration containing JS abusable tags!") log_admin("EXPLOIT WARNING: [ckey] attempted to upload an NTTC configuration containing JS abusable tags") @@ -279,9 +279,14 @@ if(toggle_command_bold) var/job = tcm.sender_job if((job in ert_jobs) || (job in heads) || (job in cc_jobs)) - for(var/datum/multilingual_say_piece/S in message_pieces) - if(S.message) - S.message = "[capitalize(S.message)]" // This only capitalizes the first word + for(var/I in 1 to length(message_pieces)) + var/datum/multilingual_say_piece/S = message_pieces[I] + if(!S.message) + continue + if(I == 1 && !istype(S.speaking, /datum/language/noise)) // Capitalise the first section only, unless it's an emote. + S.message = "[capitalize(S.message)]" + S.message = "[S.message]" // Make everything bolded + // Language Conversion if(setting_language && valid_languages[setting_language]) diff --git a/code/game/machinery/teleporter.dm b/code/game/machinery/teleporter.dm index 932d46b6c0c..9b7af34349f 100644 --- a/code/game/machinery/teleporter.dm +++ b/code/game/machinery/teleporter.dm @@ -401,7 +401,9 @@ if(!calibrated && com.cc_beacon) visible_message("Cannot lock on target. Please calibrate the teleporter before attempting long range teleportation.") else if(!calibrated && prob(25 - ((accurate) * 10)) && !com.cc_beacon) //oh dear a problem - . = do_teleport(M, locate(rand((2*TRANSITIONEDGE), world.maxx - (2*TRANSITIONEDGE)), rand((2*TRANSITIONEDGE), world.maxy - (2*TRANSITIONEDGE)), 3), 2, bypass_area_flag = com.area_bypass) + var/list/target_z = levels_by_trait(REACHABLE) + target_z -= M.z //Where to sir? Anywhere but here. + . = do_teleport(M, locate(rand((2*TRANSITIONEDGE), world.maxx - (2*TRANSITIONEDGE)), rand((2*TRANSITIONEDGE), world.maxy - (2*TRANSITIONEDGE)), pick(target_z)), 2, bypass_area_flag = com.area_bypass) else . = do_teleport(M, com.target, bypass_area_flag = com.area_bypass) calibrated = FALSE diff --git a/code/game/machinery/transformer.dm b/code/game/machinery/transformer.dm index 04822a8014f..d03536e8f5b 100644 --- a/code/game/machinery/transformer.dm +++ b/code/game/machinery/transformer.dm @@ -252,8 +252,6 @@ for(var/obj/item/I in H) if(istype(I, /obj/item/implant)) continue - if(istype(I, /obj/item/organ)) - continue qdel(I) H.equipOutfit(selected_outfit) diff --git a/code/game/machinery/vending.dm b/code/game/machinery/vending.dm index 122b85c3d2e..9f18c35c4b7 100644 --- a/code/game/machinery/vending.dm +++ b/code/game/machinery/vending.dm @@ -806,11 +806,9 @@ /obj/machinery/vending/power_change() if(powered()) stat &= ~NOPOWER - update_icon() else - spawn(rand(0, 15)) - stat |= NOPOWER - update_icon() + stat |= NOPOWER + update_icon() /obj/machinery/vending/obj_break(damage_flag) if(!(stat & BROKEN)) @@ -1583,6 +1581,7 @@ products = list(/obj/item/storage/bag/tray = 8, /obj/item/kitchen/utensil/fork = 6, /obj/item/trash/plate = 20, + /obj/item/trash/bowl = 20, /obj/item/kitchen/knife = 3, /obj/item/kitchen/rollingpin = 2, /obj/item/kitchen/sushimat = 3, diff --git a/code/game/machinery/washing_machine.dm b/code/game/machinery/washing_machine.dm index a48fa88b96a..a5120327f4c 100644 --- a/code/game/machinery/washing_machine.dm +++ b/code/game/machinery/washing_machine.dm @@ -272,6 +272,9 @@ if( istype(W,/obj/item/clothing/gloves/furgloves ) ) to_chat(user, "This item does not fit.") return + if(istype(W, /obj/item/clothing/gloves/color/black/krav_maga/sec)) + to_chat(user, "Washing these gloves would fry the electronics!") + return if(W.flags & NODROP) //if "can't drop" item to_chat(user, "\The [W] is stuck to your hand, you cannot put it in the washing machine!") return diff --git a/code/game/mecha/combat/combat.dm b/code/game/mecha/combat/combat.dm index d8ddee347e2..95539c4b4b1 100644 --- a/code/game/mecha/combat/combat.dm +++ b/code/game/mecha/combat/combat.dm @@ -7,7 +7,7 @@ destruction_sleep_duration = 2 var/am = "d3c2fbcadca903a41161ccc9df9cf948" -/obj/mecha/combat/moved_inside(var/mob/living/carbon/human/H as mob) +/obj/mecha/combat/moved_inside(mob/living/carbon/human/H as mob) if(..()) if(H.client) H.client.mouse_pointer_icon = file("icons/mecha/mecha_mouse.dmi") @@ -15,7 +15,7 @@ else return 0 -/obj/mecha/combat/mmi_moved_inside(var/obj/item/mmi/mmi_as_oc as obj,mob/user as mob) +/obj/mecha/combat/mmi_moved_inside(obj/item/mmi/mmi_as_oc as obj, mob/user as mob) if(..()) if(occupant.client) occupant.client.mouse_pointer_icon = file("icons/mecha/mecha_mouse.dmi") diff --git a/code/game/mecha/equipment/tools/other_tools.dm b/code/game/mecha/equipment/tools/other_tools.dm index e33a748354c..f1b9b291245 100644 --- a/code/game/mecha/equipment/tools/other_tools.dm +++ b/code/game/mecha/equipment/tools/other_tools.dm @@ -296,7 +296,7 @@ return 1000 //making magic -/obj/item/mecha_parts/mecha_equipment/tesla_energy_relay/proc/get_power_channel(var/area/A) +/obj/item/mecha_parts/mecha_equipment/tesla_energy_relay/proc/get_power_channel(area/A) var/pow_chan if(A) for(var/c in use_channels) @@ -395,7 +395,7 @@ if(result) send_byjax(chassis.occupant,"exosuit.browser","\ref[src]",get_equip_info()) -/obj/item/mecha_parts/mecha_equipment/generator/proc/load_fuel(var/obj/item/I) +/obj/item/mecha_parts/mecha_equipment/generator/proc/load_fuel(obj/item/I) if(istype(I) && (fuel_type in I.materials)) if(istype(I, /obj/item/stack/sheet)) var/obj/item/stack/sheet/P = I diff --git a/code/game/mecha/equipment/tools/work_tools.dm b/code/game/mecha/equipment/tools/work_tools.dm index 74b26ebf23a..f78b34078eb 100644 --- a/code/game/mecha/equipment/tools/work_tools.dm +++ b/code/game/mecha/equipment/tools/work_tools.dm @@ -345,7 +345,7 @@ UnregisterSignal(chassis, COMSIG_MOVABLE_MOVED) return ..() -/obj/item/mecha_parts/mecha_equipment/cable_layer/action(var/obj/item/stack/cable_coil/target) +/obj/item/mecha_parts/mecha_equipment/cable_layer/action(obj/item/stack/cable_coil/target) if(!action_checks(target)) return if(istype(target) && target.amount) @@ -407,7 +407,7 @@ /obj/item/mecha_parts/mecha_equipment/cable_layer/proc/reset() last_piece = null -/obj/item/mecha_parts/mecha_equipment/cable_layer/proc/dismantleFloor(var/turf/new_turf) +/obj/item/mecha_parts/mecha_equipment/cable_layer/proc/dismantleFloor(turf/new_turf) if(istype(new_turf, /turf/simulated/floor)) var/turf/simulated/floor/T = new_turf if(!istype(T, /turf/simulated/floor/plating)) diff --git a/code/game/mecha/equipment/weapons/weapons.dm b/code/game/mecha/equipment/weapons/weapons.dm index 48fb17565eb..351aba3905b 100644 --- a/code/game/mecha/equipment/weapons/weapons.dm +++ b/code/game/mecha/equipment/weapons/weapons.dm @@ -12,7 +12,7 @@ var/projectiles var/projectile_energy_cost -/obj/item/mecha_parts/mecha_equipment/weapon/can_attach(var/obj/mecha/combat/M as obj) +/obj/item/mecha_parts/mecha_equipment/weapon/can_attach(obj/mecha/combat/M as obj) if(..()) if(istype(M)) if(size > M.maxsize) @@ -517,8 +517,8 @@ /obj/item/mecha_parts/mecha_equipment/weapon/energy/plasma equip_cooldown = 10 - name = "217-D Heavy Plasma Cutter" - desc = "A device that shoots resonant plasma bursts at extreme velocity. The blasts are capable of crushing rock and demloishing solid obstacles." + name = "\improper 217-D Heavy Plasma Cutter" + desc = "A device that shoots resonant plasma bursts at extreme velocity. The blasts are capable of crushing rock and demolishing solid obstacles." icon_state = "mecha_plasmacutter" item_state = "plasmacutter" lefthand_file = 'icons/mob/inhands/guns_lefthand.dmi' diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm index 001ef8cc06b..2876527a526 100644 --- a/code/game/mecha/mecha.dm +++ b/code/game/mecha/mecha.dm @@ -136,7 +136,7 @@ internal_tank = new /obj/machinery/portable_atmospherics/canister/air(src) return internal_tank -/obj/mecha/proc/add_cell(var/obj/item/stock_parts/cell/C=null) +/obj/mecha/proc/add_cell(obj/item/stock_parts/cell/C=null) if(C) C.forceMove(src) cell = C @@ -242,7 +242,7 @@ ////////////////////////////////// //////// Movement procs //////// ////////////////////////////////// -/obj/mecha/Process_Spacemove(var/movement_dir = 0) +/obj/mecha/Process_Spacemove(movement_dir = 0) . = ..() if(.) return 1 @@ -354,7 +354,7 @@ if(. && stepsound) playsound(src, stepsound, 40, 1) -/obj/mecha/Bump(var/atom/obstacle, bump_allowed) +/obj/mecha/Bump(atom/obstacle, bump_allowed) if(throwing) //high velocity mechas in your face! var/breakthrough = 0 if(istype(obstacle, /obj/structure/window)) @@ -920,7 +920,7 @@ AI.aiRestorePowerRoutine = 0//So the AI initially has power. AI.control_disabled = 1 AI.aiRadio.disabledAi = 1 - AI.loc = card + AI.forceMove(card) occupant = null AI.controlled_mech = null AI.remote_control = null @@ -956,7 +956,7 @@ //Hack and From Card interactions share some code, so leave that here for both to use. /obj/mecha/proc/ai_enter_mech(mob/living/silicon/ai/AI, interaction) AI.aiRestorePowerRoutine = 0 - AI.loc = src + AI.forceMove(src) occupant = AI icon_state = initial(icon_state) playsound(src, 'sound/machines/windowdoor.ogg', 50, 1) @@ -1105,7 +1105,7 @@ else to_chat(user, "You stop entering the exosuit!") -/obj/mecha/proc/moved_inside(var/mob/living/carbon/human/H as mob) +/obj/mecha/proc/moved_inside(mob/living/carbon/human/H as mob) if(H && H.client && (H in range(1))) occupant = H H.stop_pulling() @@ -1128,7 +1128,7 @@ else return FALSE -/obj/mecha/proc/mmi_move_inside(var/obj/item/mmi/mmi_as_oc as obj,mob/user as mob) +/obj/mecha/proc/mmi_move_inside(obj/item/mmi/mmi_as_oc as obj,mob/user as mob) if(!mmi_as_oc.brainmob || !mmi_as_oc.brainmob.client) to_chat(user, "Consciousness matrix not detected!") return FALSE @@ -1154,7 +1154,7 @@ to_chat(user, "You stop inserting the MMI.") return FALSE -/obj/mecha/proc/mmi_moved_inside(obj/item/mmi/mmi_as_oc,mob/user) +/obj/mecha/proc/mmi_moved_inside(obj/item/mmi/mmi_as_oc, mob/user) if(mmi_as_oc && (user in range(1))) if(!mmi_as_oc.brainmob || !mmi_as_oc.brainmob.client) to_chat(user, "Consciousness matrix not detected.") @@ -1165,7 +1165,7 @@ if(!user.unEquip(mmi_as_oc)) to_chat(user, "\the [mmi_as_oc] is stuck to your hand, you cannot put it in \the [src]") return FALSE - var/mob/brainmob = mmi_as_oc.brainmob + var/mob/living/carbon/brain/brainmob = mmi_as_oc.brainmob brainmob.reset_perspective(src) occupant = brainmob brainmob.forceMove(src) //should allow relaymove @@ -1197,7 +1197,7 @@ return 1 return 0 -/obj/mecha/proc/pilot_mmi_hud(var/mob/living/carbon/brain/pilot) +/obj/mecha/proc/pilot_mmi_hud(mob/living/carbon/brain/pilot) return /obj/mecha/Exited(atom/movable/M, atom/newloc) @@ -1250,7 +1250,7 @@ if(istype(mob_container, /obj/item/mmi)) var/obj/item/mmi/mmi = mob_container if(mmi.brainmob) - L.loc = mmi + L.forceMove(mmi) L.reset_perspective() mmi.mecha = null mmi.update_icon() diff --git a/code/game/mecha/mecha_modkit.dm b/code/game/mecha/mecha_modkit.dm index 9d07e760c79..55558ff66dd 100644 --- a/code/game/mecha/mecha_modkit.dm +++ b/code/game/mecha/mecha_modkit.dm @@ -5,7 +5,7 @@ icon_state = "harddisk_mini" var/install_time = 15 -/obj/item/mecha_modkit/proc/install(var/obj/mecha/mech, var/mob/user) +/obj/item/mecha_modkit/proc/install(obj/mecha/mech, mob/user) if(user) to_chat(user, "You install [src] into [mech].") return TRUE @@ -20,7 +20,7 @@ var/lowpowersound = 'sound/mecha/lowpower.ogg' var/longactivationsound = 'sound/mecha/nominal.ogg' -/obj/item/mecha_modkit/voice/install(var/obj/mecha/mech, var/mob/living/carbon/user) +/obj/item/mecha_modkit/voice/install(obj/mecha/mech, mob/living/carbon/user) if(istype(mech, /obj/mecha/combat/reticence) && user) to_chat(user, "You attempt to install [src] into [mech], but an invisible barrier prevents you from doing so!") return FALSE diff --git a/code/game/mecha/medical/odysseus.dm b/code/game/mecha/medical/odysseus.dm index 93003258008..3fd3cf8742b 100644 --- a/code/game/mecha/medical/odysseus.dm +++ b/code/game/mecha/medical/odysseus.dm @@ -13,7 +13,7 @@ normal_step_energy_drain = 6 var/builtin_hud_user = 0 -/obj/mecha/medical/odysseus/moved_inside(var/mob/living/carbon/human/H) +/obj/mecha/medical/odysseus/moved_inside(mob/living/carbon/human/H) . = ..() if(. && ishuman(H)) if(istype(H.glasses, /obj/item/clothing/glasses/hud)) @@ -23,7 +23,7 @@ A.add_hud_to(H) builtin_hud_user = 1 -/obj/mecha/medical/odysseus/mmi_moved_inside(var/obj/item/mmi/mmi_as_oc, mob/user) +/obj/mecha/medical/odysseus/mmi_moved_inside(obj/item/mmi/mmi_as_oc, mob/user) . = ..() if(.) if(occupant.client) diff --git a/code/game/mecha/working/ripley.dm b/code/game/mecha/working/ripley.dm index 7569d8b5263..96f045ea9d3 100644 --- a/code/game/mecha/working/ripley.dm +++ b/code/game/mecha/working/ripley.dm @@ -62,7 +62,7 @@ add_overlay(occupant ? "ripley-g-full" : "ripley-g-full-open") /obj/mecha/working/ripley/firefighter - desc = "Standart APLU chassis was refitted with additional thermal protection and cistern." + desc = "A standard APLU chassis that was refitted with additional thermal protection and a cistern." name = "APLU \"Firefighter\"" icon_state = "firefighter" initial_icon = "firefighter" @@ -200,7 +200,7 @@ if(!emagged) emagged = TRUE to_chat(user, "You slide the card through [src]'s ID slot.") - playsound(loc, "sparks", 100, 1) + playsound(loc, "sparks", 100, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) desc += "
      The mech's equipment slots spark dangerously!" else to_chat(user, "[src]'s ID slot rejects the card.") diff --git a/code/game/objects/effects/decals/Cleanable/humans.dm b/code/game/objects/effects/decals/Cleanable/humans.dm index bf24498e4b2..f88a3cb630d 100644 --- a/code/game/objects/effects/decals/Cleanable/humans.dm +++ b/code/game/objects/effects/decals/Cleanable/humans.dm @@ -182,7 +182,7 @@ GLOBAL_LIST_EMPTY(splatter_cache) /obj/effect/decal/cleanable/blood/gibs/cleangibs //most ironic name ever... scoop_reagents = null -/obj/effect/decal/cleanable/blood/gibs/proc/streak(var/list/directions) +/obj/effect/decal/cleanable/blood/gibs/proc/streak(list/directions) set waitfor = 0 var/direction = pick(directions) for(var/i = 0, i < pick(1, 200; 2, 150; 3, 50; 4), i++) diff --git a/code/game/objects/effects/decals/Cleanable/robots.dm b/code/game/objects/effects/decals/Cleanable/robots.dm index 91f558068a8..b3519902a6e 100644 --- a/code/game/objects/effects/decals/Cleanable/robots.dm +++ b/code/game/objects/effects/decals/Cleanable/robots.dm @@ -20,7 +20,7 @@ /obj/effect/decal/cleanable/blood/gibs/robot/can_bloodcrawl_in() return FALSE -/obj/effect/decal/cleanable/blood/gibs/robot/streak(var/list/directions) +/obj/effect/decal/cleanable/blood/gibs/robot/streak(list/directions) spawn(0) var/direction = pick(directions) for(var/i = 0, i < pick(1, 200; 2, 150; 3, 50; 4), i++) diff --git a/code/game/objects/effects/decals/misc.dm b/code/game/objects/effects/decals/misc.dm index 88663e6c38c..9decdcf4c31 100644 --- a/code/game/objects/effects/decals/misc.dm +++ b/code/game/objects/effects/decals/misc.dm @@ -58,14 +58,14 @@ /obj/effect/decal/straw/edge icon_state = "strawscatterededge" -/obj/effect/decal/ants +/obj/effect/decal/cleanable/ants name = "space ants" desc = "A bunch of space ants." icon = 'icons/goonstation/effects/effects.dmi' icon_state = "spaceants" scoop_reagents = list("ants" = 20) -/obj/effect/decal/ants/Initialize(mapload) +/obj/effect/decal/cleanable/ants/Initialize(mapload) . = ..() var/scale = (rand(2, 10) / 10) + (rand(0, 5) / 100) transform = matrix(transform, scale, scale, MATRIX_SCALE) diff --git a/code/game/objects/effects/effect_system/effects_sparks.dm b/code/game/objects/effects/effect_system/effects_sparks.dm index f59f44ca1db..6d00e3c4efb 100644 --- a/code/game/objects/effects/effect_system/effects_sparks.dm +++ b/code/game/objects/effects/effect_system/effects_sparks.dm @@ -25,7 +25,7 @@ /obj/effect/particle_effect/sparks/New() ..() flick("sparks", src) // replay the animation - playsound(loc, "sparks", 100, 1) + playsound(src, "sparks", 100, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) var/turf/T = loc if(isturf(T)) T.hotspot_expose(hotspottemp, 100) diff --git a/code/game/objects/effects/landmarks.dm b/code/game/objects/effects/landmarks.dm index 0f373bfe851..4a00dfda86d 100644 --- a/code/game/objects/effects/landmarks.dm +++ b/code/game/objects/effects/landmarks.dm @@ -164,10 +164,9 @@ new /obj/item/clothing/shoes/jackboots(src.loc) qdel(src) -/obj/effect/landmark/costume/nyangirl/New() +/obj/effect/landmark/costume/schoolgirl/New() . = ..() new /obj/item/clothing/under/schoolgirl(src.loc) - new /obj/item/clothing/head/kitty(src.loc) qdel(src) /obj/effect/landmark/costume/maid/New() diff --git a/code/game/objects/effects/mines.dm b/code/game/objects/effects/mines.dm index 44f99e2edac..6e57fab9bb6 100644 --- a/code/game/objects/effects/mines.dm +++ b/code/game/objects/effects/mines.dm @@ -130,7 +130,7 @@ if(!istype(victim) || !victim.client) return to_chat(victim, "RIP AND TEAR") - victim << 'sound/misc/e1m1.ogg' + SEND_SOUND(victim, sound('sound/misc/e1m1.ogg')) var/old_color = victim.client.color var/red_splash = list(1,0,0,0.8,0.2,0, 0.8,0,0.2,0.1,0,0) var/pure_red = list(0,0,0,0,0,0,0,0,0,1,0,0) diff --git a/code/game/objects/effects/spawners/lootdrop.dm b/code/game/objects/effects/spawners/lootdrop.dm index 7e24cfab25c..90fcb842684 100644 --- a/code/game/objects/effects/spawners/lootdrop.dm +++ b/code/game/objects/effects/spawners/lootdrop.dm @@ -255,10 +255,10 @@ loot = list( // Robotics /obj/item/mmi/robotic_brain = 50, // Low-value, but we want to encourage getting more players back in the round. - /obj/item/assembly/signaler/anomaly = 50, // anomaly core + /obj/item/assembly/signaler/anomaly/random = 50, // anomaly core /obj/item/mecha_parts/mecha_equipment/weapon/energy/xray = 25, // mecha x-ray laser /obj/item/mecha_parts/mecha_equipment/teleporter/precise = 25, // upgraded mecha teleporter - /obj/item/autoimplanter = 50, + /obj/item/autosurgeon = 50, // Research / Experimentor /obj/item/paper/researchnotes = 150, // papers that give random R&D levels @@ -388,11 +388,11 @@ lootcount = 3 lootdoubles = FALSE var/soups = list( - /obj/item/reagent_containers/food/snacks/beetsoup, - /obj/item/reagent_containers/food/snacks/stew, - /obj/item/reagent_containers/food/snacks/hotchili, - /obj/item/reagent_containers/food/snacks/nettlesoup, - /obj/item/reagent_containers/food/snacks/meatballsoup) + /obj/item/reagent_containers/food/snacks/soup/beetsoup, + /obj/item/reagent_containers/food/snacks/soup/stew, + /obj/item/reagent_containers/food/snacks/soup/hotchili, + /obj/item/reagent_containers/food/snacks/soup/nettlesoup, + /obj/item/reagent_containers/food/snacks/soup/meatballsoup) var/salads = list( /obj/item/reagent_containers/food/snacks/herbsalad, /obj/item/reagent_containers/food/snacks/validsalad, diff --git a/code/game/objects/effects/spawners/vaultspawner.dm b/code/game/objects/effects/spawners/vaultspawner.dm index faa09956abb..ca455603916 100644 --- a/code/game/objects/effects/spawners/vaultspawner.dm +++ b/code/game/objects/effects/spawners/vaultspawner.dm @@ -4,7 +4,7 @@ var/minX = 2 var/minY = 2 -/obj/effect/vaultspawner/New(turf/location as turf,lX = minX,uX = maxX,lY = minY,uY = maxY,var/type = null) +/obj/effect/vaultspawner/New(turf/location as turf,lX = minX,uX = maxX,lY = minY,uY = maxY, type = null) . = ..() if(!type) type = pick("sandstone","rock","alien") diff --git a/code/game/objects/effects/step_triggers.dm b/code/game/objects/effects/step_triggers.dm index bde6cb538df..a12d967e8f6 100644 --- a/code/game/objects/effects/step_triggers.dm +++ b/code/game/objects/effects/step_triggers.dm @@ -7,10 +7,10 @@ invisibility = INVISIBILITY_ABSTRACT // nope cant see this shit anchored = TRUE -/obj/effect/step_trigger/proc/Trigger(var/atom/movable/A) +/obj/effect/step_trigger/proc/Trigger(atom/movable/A) return FALSE -/obj/effect/step_trigger/Crossed(var/H, oldloc) +/obj/effect/step_trigger/Crossed(H, oldloc) . = ..() if(!H) return diff --git a/code/game/objects/empulse.dm b/code/game/objects/empulse.dm index 30c0063ea78..3b89a3d0ce9 100644 --- a/code/game/objects/empulse.dm +++ b/code/game/objects/empulse.dm @@ -17,8 +17,9 @@ if(heavy_range > light_range) light_range = heavy_range + var/emp_sound = sound('sound/effects/empulse.ogg') for(var/mob/M in range(heavy_range, epicenter)) - M << 'sound/effects/empulse.ogg' + SEND_SOUND(M, emp_sound) for(var/atom/T in range(light_range, epicenter)) if(cause == "cult" && iscultist(T)) continue diff --git a/code/game/objects/explosion.dm b/code/game/objects/explosion.dm index df017a3e3f3..4e4eefbe9cb 100644 --- a/code/game/objects/explosion.dm +++ b/code/game/objects/explosion.dm @@ -1,13 +1,27 @@ //TODO: Flash range does nothing currently +#define CREAK_DELAY 5 SECONDS //Time taken for the creak to play after explosion, if applicable. +#define DEVASTATION_PROB 30 //The probability modifier for devistation, maths! +#define HEAVY_IMPACT_PROB 5 //ditto +#define FAR_UPPER 60 //Upper limit for the far_volume, distance, clamped. +#define FAR_LOWER 40 //lower limit for the far_volume, distance, clamped. +#define PROB_SOUND 75 //The probability modifier for a sound to be an echo, or a far sound. (0-100) +#define SHAKE_CLAMP 2.5 //The limit for how much the camera can shake for out of view booms. +#define FREQ_UPPER 40 //The upper limit for the randomly selected frequency. +#define FREQ_LOWER 25 //The lower of the above. + /proc/explosion(turf/epicenter, devastation_range, heavy_impact_range, light_impact_range, flash_range, adminlog = 1, ignorecap = 0, flame_range = 0, silent = 0, smoke = 1, cause = null, breach = TRUE) epicenter = get_turf(epicenter) + if(!epicenter) + return // Archive the uncapped explosion for the doppler array var/orig_dev_range = devastation_range var/orig_heavy_range = heavy_impact_range var/orig_light_range = light_impact_range + var/orig_max_distance = max(devastation_range, heavy_impact_range, light_impact_range, flash_range, flame_range) + if(!ignorecap) // Clamp all values to MAX_EXPLOSION_RANGE devastation_range = min (GLOB.max_ex_devastation_range, devastation_range) @@ -16,17 +30,21 @@ flash_range = min (GLOB.max_ex_flash_range, flash_range) flame_range = min (GLOB.max_ex_flame_range, flame_range) + var/max_range = max(devastation_range, heavy_impact_range, light_impact_range, flame_range) + spawn(0) var/watch = start_watch() - if(!epicenter) return - var/max_range = max(devastation_range, heavy_impact_range, light_impact_range, flame_range) var/list/cached_exp_block = list() if(adminlog) message_admins("Explosion with size ([devastation_range], [heavy_impact_range], [light_impact_range], [flame_range]) in area [epicenter.loc.name] [cause ? "(Cause: [cause])" : ""] [ADMIN_COORDJMP(epicenter)] ") log_game("Explosion with size ([devastation_range], [heavy_impact_range], [light_impact_range], [flame_range]) in area [epicenter.loc.name] [cause ? "(Cause: [cause])" : ""] [COORD(epicenter)] ") + var/x0 = epicenter.x + var/y0 = epicenter.y + var/z0 = epicenter.z + // Play sounds; we want sounds to be different depending on distance so we will manually do it ourselves. // Stereo users will also hear the direction of the explosion! @@ -34,41 +52,69 @@ // 3/7/14 will calculate to 80 + 35 var/far_dist = 0 - far_dist += heavy_impact_range * 5 + far_dist += heavy_impact_range * 15 far_dist += devastation_range * 20 if(!silent) var/frequency = get_rand_frequency() var/sound/explosion_sound = sound(get_sfx("explosion")) - var/sound/global_boom = sound('sound/effects/explosionfar.ogg') + var/sound/far_explosion_sound = sound('sound/effects/explosionfar.ogg') + var/sound/creaking_explosion_sound = sound(get_sfx("explosion_creaking")) + var/sound/hull_creaking_sound = sound(get_sfx("hull_creaking")) + var/sound/explosion_echo_sound = sound('sound/effects/explosion_distant.ogg') + var/on_station = is_station_level(epicenter.z) + var/creaking_explosion = FALSE - for(var/P in GLOB.player_list) - var/mob/M = P + if(prob(devastation_range * DEVASTATION_PROB + heavy_impact_range * HEAVY_IMPACT_PROB) && on_station) // Huge explosions are near guaranteed to make the station creak and whine, smaller ones might. + creaking_explosion = TRUE // prob over 100 always returns true + + for(var/MN in GLOB.player_list) + var/mob/M = MN // Double check for client - if(M && M.client) - var/turf/M_turf = get_turf(M) - if(M_turf && M_turf.z == epicenter.z) - var/dist = get_dist(M_turf, epicenter) - // If inside the blast radius + world.view - 2 - if(dist <= round(max_range + world.view - 2, 1)) - M.playsound_local(epicenter, null, 100, 1, frequency, falloff = 5, S = explosion_sound) - // You hear a far explosion if you're outside the blast radius. Small bombs shouldn't be heard all over the station. - else if(M.can_hear() && !isspaceturf(M.loc)) - M << global_boom + var/turf/M_turf = get_turf(M) + if(M_turf && M_turf.z == z0) + var/dist = get_dist(M_turf, epicenter) + var/baseshakeamount + if(orig_max_distance - dist > 0) + baseshakeamount = sqrt((orig_max_distance - dist) * 0.1) + // If inside the blast radius + world.view - 2 + if(dist <= round(max_range + world.view - 2, 1)) + M.playsound_local(epicenter, null, 100, 1, frequency, S = explosion_sound) + if(baseshakeamount > 0) + shake_camera(M, 25, clamp(baseshakeamount, 0, 10)) + // You hear a far explosion if you're outside the blast radius. Small bombs shouldn't be heard all over the station. + else if(dist <= far_dist) + var/far_volume = clamp(far_dist / 2, FAR_LOWER, FAR_UPPER) // Volume is based on explosion size and dist + if(creaking_explosion) + M.playsound_local(epicenter, null, far_volume, 1, frequency, S = creaking_explosion_sound, distance_multiplier = 0) + else if(prob(PROB_SOUND)) // Sound variety during meteor storm/tesloose/other bad event + M.playsound_local(epicenter, null, far_volume, 1, frequency, S = far_explosion_sound, distance_multiplier = 0) // Far sound + else + M.playsound_local(epicenter, null, far_volume, 1, frequency, S = explosion_echo_sound, distance_multiplier = 0) // Echo sound + + if(baseshakeamount > 0 || devastation_range) + if(!baseshakeamount) // Devastating explosions rock the station and ground + baseshakeamount = devastation_range * 3 + shake_camera(M, 10, clamp(baseshakeamount * 0.25, 0, SHAKE_CLAMP)) + else if(!isspaceturf(get_turf(M)) && heavy_impact_range) // Big enough explosions echo throughout the hull + var/echo_volume = 40 + if(devastation_range) + baseshakeamount = devastation_range + shake_camera(M, 10, clamp(baseshakeamount * 0.25, 0, SHAKE_CLAMP)) + echo_volume = 60 + M.playsound_local(epicenter, null, echo_volume, 1, frequency, S = explosion_echo_sound, distance_multiplier = 0) + + if(creaking_explosion) // 5 seconds after the bang, the station begins to creak + addtimer(CALLBACK(M, /mob/proc/playsound_local, epicenter, null, rand(FREQ_LOWER, FREQ_UPPER), 1, frequency, null, null, FALSE, hull_creaking_sound, 0), CREAK_DELAY) if(heavy_impact_range > 1) + var/datum/effect_system/explosion/E if(smoke) - var/datum/effect_system/explosion/smoke/E = new/datum/effect_system/explosion/smoke() - E.set_up(epicenter) - E.start() + E = new /datum/effect_system/explosion/smoke else - var/datum/effect_system/explosion/E = new/datum/effect_system/explosion() - E.set_up(epicenter) - E.start() - - var/x0 = epicenter.x - var/y0 = epicenter.y - var/z0 = epicenter.z + E = new + E.set_up(epicenter) + E.start() var/list/affected_turfs = spiral_range_turfs(max_range, epicenter) @@ -144,11 +190,15 @@ log_world("## DEBUG: Explosion([x0],[y0],[z0])(d[devastation_range],h[heavy_impact_range],l[light_impact_range]): Took [took] seconds.") //Machines which report explosions. - for(var/i,i<=GLOB.doppler_arrays.len,i++) - var/obj/machinery/doppler_array/Array = GLOB.doppler_arrays[i] - if(Array) + for(var/array in GLOB.doppler_arrays) + if(!array) + continue + if(istype(array, /obj/machinery/doppler_array)) + var/obj/machinery/doppler_array/Array = array Array.sense_explosion(x0,y0,z0,devastation_range,heavy_impact_range,light_impact_range,took,orig_dev_range,orig_heavy_range,orig_light_range) - + if(istype(array, /obj/item/clothing/head/helmet/space/hardsuit/rd)) + var/obj/item/clothing/head/helmet/space/hardsuit/rd/Helm_Array = array + Helm_Array.sense_explosion(x0,y0,z0,devastation_range,heavy_impact_range,light_impact_range,took,orig_dev_range,orig_heavy_range,orig_light_range) return 1 @@ -226,3 +276,13 @@ for(var/turf/T in wipe_colours) T.color = null T.maptext = "" + +#undef CREAK_DELAY +#undef DEVASTATION_PROB +#undef HEAVY_IMPACT_PROB +#undef FAR_UPPER +#undef FAR_LOWER +#undef PROB_SOUND +#undef SHAKE_CLAMP +#undef FREQ_UPPER +#undef FREQ_LOWER diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 138d156040a..f22fb5cbb81 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -21,10 +21,22 @@ GLOBAL_DATUM_INIT(fire_overlay, /image, image("icon" = 'icons/goonstation/effect can_be_hit = FALSE suicidal_hands = TRUE - var/hitsound = null - var/usesound = null + ///Sound played when you hit something with the item + var/hitsound + ///Played when the item is used, for example tools + var/usesound + ///Used when yate into a mob + var/mob_throw_hit_sound + ///Sound used when equipping the item into a valid slot + var/equip_sound + ///Sound uses when picking the item up (into your hands) + var/pickup_sound + ///Sound uses when dropping the item, or when its thrown. + var/drop_sound + ///Whether or not we use stealthy audio levels for this item's attack sounds + var/stealthy_audio = FALSE + var/list/attack_verb //Used in attackby() to say how something was attacked "[x] has been [z.attack_verb] by [y] with [z]" - var/throwhitsound var/w_class = WEIGHT_CLASS_NORMAL var/slot_flags = 0 //This is used to determine on which slots an item can fit. pass_flags = PASSTABLE @@ -273,17 +285,20 @@ GLOBAL_DATUM_INIT(fire_overlay, /image, image("icon" = 'icons/goonstation/effect if(throwing) throwing.finalize(FALSE) if(loc == user) - if(!user.unEquip(src)) + if(!user.unEquip(src, silent = TRUE)) return 0 else if(isliving(loc)) return 0 - add_fingerprint(user) - if(pickup(user)) // Pickup succeeded - user.put_in_active_hand(src) - return 1 + pickup(user) + add_fingerprint(user) + if(!user.put_in_active_hand(src)) + dropped(user, TRUE) + return FALSE + + return TRUE /obj/item/attack_alien(mob/user) var/mob/living/carbon/alien/A = user @@ -374,10 +389,12 @@ GLOBAL_DATUM_INIT(fire_overlay, /image, image("icon" = 'icons/goonstation/effect /obj/item/proc/refill(mob/user, atom/A, amount) return FALSE -/obj/item/proc/talk_into(mob/M, var/text, var/channel=null) +/obj/item/proc/talk_into(mob/M, text, channel=null) return -/obj/item/proc/dropped(mob/user) +/// Called when a mob drops an item. +/obj/item/proc/dropped(mob/user, silent = FALSE) + SHOULD_CALL_PARENT(TRUE) for(var/X in actions) var/datum/action/A = X A.Remove(user) @@ -387,12 +404,14 @@ GLOBAL_DATUM_INIT(fire_overlay, /image, image("icon" = 'icons/goonstation/effect flags &= ~NODROP in_inventory = FALSE SEND_SIGNAL(src, COMSIG_ITEM_DROPPED,user) + if(!silent) + playsound(src, drop_sound, DROP_SOUND_VOLUME, ignore_walls = FALSE) // called just as an item is picked up (loc is not yet changed) /obj/item/proc/pickup(mob/user) + SHOULD_CALL_PARENT(TRUE) SEND_SIGNAL(src, COMSIG_ITEM_PICKUP, user) in_inventory = TRUE - return TRUE // 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) @@ -414,14 +433,19 @@ GLOBAL_DATUM_INIT(fire_overlay, /image, image("icon" = 'icons/goonstation/effect // user is mob that equipped it // slot uses the slot_X defines found in setup.dm // for items that can be placed in multiple slots -// note this isn't called during the initial dressing of a player -/obj/item/proc/equipped(var/mob/user, var/slot) +// Initial is used to indicate whether or not this is the initial equipment (job datums etc) or just a player doing it +/obj/item/proc/equipped(mob/user, slot, initial = FALSE) SEND_SIGNAL(src, COMSIG_ITEM_EQUIPPED, user, slot) for(var/X in actions) var/datum/action/A = X if(item_action_slot_check(slot, user)) //some items only give their actions buttons when in a specific slot. A.Grant(user) in_inventory = TRUE + if(!initial) + if(equip_sound && slot == slot_bitfield_to_slot(slot_flags)) + playsound(src, equip_sound, EQUIP_SOUND_VOLUME, TRUE, ignore_walls = FALSE) + else if(slot == slot_l_hand || slot == slot_r_hand) + playsound(src, pickup_sound, PICKUP_SOUND_VOLUME, ignore_walls = FALSE) /obj/item/proc/item_action_slot_check(slot, mob/user) return 1 @@ -481,7 +505,7 @@ GLOBAL_DATUM_INIT(fire_overlay, /image, image("icon" = 'icons/goonstation/effect /obj/item/proc/ui_action_click(mob/user, actiontype) attack_self(user) -/obj/item/proc/IsReflect(var/def_zone) //This proc determines if and at what% an object will reflect energy projectiles if it's in l_hand,r_hand or wear_suit +/obj/item/proc/IsReflect(def_zone) //This proc determines if and at what% an object will reflect energy projectiles if it's in l_hand,r_hand or wear_suit return 0 /obj/item/proc/get_loc_turf() @@ -564,13 +588,30 @@ GLOBAL_DATUM_INIT(fire_overlay, /image, image("icon" = 'icons/goonstation/effect else return -/obj/item/throw_impact(atom/A) - if(A && !QDELETED(A)) - SEND_SIGNAL(src, COMSIG_MOVABLE_IMPACT, A) - var/itempush = 1 +/obj/item/throw_impact(atom/hit_atom, datum/thrownthing/throwingdatum) + if(hit_atom && !QDELETED(hit_atom)) + SEND_SIGNAL(src, COMSIG_MOVABLE_IMPACT, hit_atom, throwingdatum) + var/itempush = TRUE if(w_class < WEIGHT_CLASS_BULKY) - itempush = 0 // too light to push anything - return A.hitby(src, 0, itempush) + itempush = FALSE //too light to push anything + if(isliving(hit_atom)) //Living mobs handle hit sounds differently. + if(is_hot(src)) + var/mob/living/L = hit_atom + L.IgniteMob() + var/volume = get_volume_by_throwforce_and_or_w_class() + if(throwforce > 0) + if(mob_throw_hit_sound) + playsound(hit_atom, mob_throw_hit_sound, volume, TRUE, -1) + else if(hitsound) + playsound(hit_atom, hitsound, volume, TRUE, -1) + else + playsound(hit_atom, 'sound/weapons/genhit.ogg', volume, TRUE, -1) + else + playsound(hit_atom, 'sound/weapons/throwtap.ogg', volume, TRUE, -1) + + else + playsound(src, drop_sound, YEET_SOUND_VOLUME, ignore_walls = FALSE) + return hit_atom.hitby(src, 0, itempush, throwingdatum = throwingdatum) /obj/item/throw_at(atom/target, range, speed, mob/thrower, spin=1, diagonals_first = 0, datum/callback/callback, force) thrownby = thrower @@ -619,7 +660,7 @@ GLOBAL_DATUM_INIT(fire_overlay, /image, image("icon" = 'icons/goonstation/effect return I == src /obj/item/hitby(atom/movable/AM, skipcatch, hitpush, blocked, datum/thrownthing/throwingdatum) - return + return SEND_SIGNAL(src, COMSIG_ATOM_HITBY, AM, skipcatch, hitpush, blocked, throwingdatum) /obj/item/attack_hulk(mob/living/carbon/human/user) return FALSE diff --git a/code/game/objects/items/blueprints.dm b/code/game/objects/items/blueprints.dm index ccdce20f5e4..69ae7f6d77a 100644 --- a/code/game/objects/items/blueprints.dm +++ b/code/game/objects/items/blueprints.dm @@ -169,7 +169,7 @@ return A -/obj/item/areaeditor/proc/get_area_type(var/area/A = get_area()) +/obj/item/areaeditor/proc/get_area_type(area/A = get_area()) if(A.outdoors) return AREA_SPACE var/list/SPECIALS = list( @@ -228,8 +228,8 @@ FD.CalculateAffectingAreas() interact() - message_admins("A new room was made by [ADMIN_LOOKUPFLW(usr)] at [ADMIN_VERBOSEJMP(src)] with the name [str]") - log_game("A new room was made by [key_name(usr)] at [AREACOORD(src)] with the name [str]") + message_admins("A new room was made by [key_name_admin(usr)] at [ADMIN_VERBOSEJMP(usr)] with the name [str]") + log_game("A new room was made by [key_name(usr)] at [AREACOORD(usr)] with the name [str]") area_created = TRUE return area_created @@ -250,12 +250,12 @@ FD.CalculateAffectingAreas() to_chat(usr, "You rename the '[prevname]' to '[str]'.") interact() - message_admins("A room was renamed by [ADMIN_LOOKUPFLW(usr)] at [ADMIN_VERBOSEJMP(usr)] changing the name from [prevname] to [str]") + message_admins("A room was renamed by [key_name_admin(usr)] at [ADMIN_VERBOSEJMP(usr)] changing the name from [prevname] to [str]") log_game("A room was renamed by [key_name(usr)] at [AREACOORD(usr)] changing the name from [prevname] to [str] ") return 1 -/obj/item/areaeditor/proc/set_area_machinery_title(var/area/A,var/title,var/oldtitle) +/obj/item/areaeditor/proc/set_area_machinery_title(area/A, title, oldtitle) if(!oldtitle) // or replacetext goes to infinite loop return for(var/obj/machinery/alarm/M in A) @@ -270,7 +270,7 @@ M.name = replacetext(M.name,oldtitle,title) //TODO: much much more. Unnamed airlocks, cameras, etc. -/obj/item/areaeditor/proc/check_tile_is_border(var/turf/T2,var/dir) +/obj/item/areaeditor/proc/check_tile_is_border(turf/T2, dir) if(istype(T2, /turf/space)) return BORDER_SPACE //omg hull breach we all going to die here if(get_area_type(T2.loc)!=AREA_SPACE) @@ -298,7 +298,7 @@ return BORDER_NONE -/obj/item/areaeditor/proc/detect_room(var/turf/first) +/obj/item/areaeditor/proc/detect_room(turf/first) var/list/turf/found = new var/list/turf/pending = list(first) while(pending.len) @@ -341,4 +341,3 @@ fluffnotice = "Intellectual Property of Nanotrasen. For use in engineering cyborgs only. Wipe from memory upon departure from the station." /obj/item/areaeditor/blueprints/ce - diff --git a/code/game/objects/items/bodybag.dm b/code/game/objects/items/bodybag.dm index 515e447df69..5c4fc643d85 100644 --- a/code/game/objects/items/bodybag.dm +++ b/code/game/objects/items/bodybag.dm @@ -21,7 +21,10 @@ icon_opened = "bodybag_open" density = FALSE integrity_failure = 0 - sound = 'sound/items/zip.ogg' + open_sound = 'sound/items/zip.ogg' + close_sound = 'sound/items/zip.ogg' + open_sound_volume = 15 + close_sound_volume = 15 var/item_path = /obj/item/bodybag diff --git a/code/game/objects/items/changestone.dm b/code/game/objects/items/changestone.dm index ec7ad232857..0f3851e1777 100644 --- a/code/game/objects/items/changestone.dm +++ b/code/game/objects/items/changestone.dm @@ -4,7 +4,7 @@ icon = 'icons/obj/artifacts.dmi' icon_state = "changerock" -/obj/item/changestone/attack_hand(var/mob/user as mob) +/obj/item/changestone/attack_hand(mob/user as mob) if(istype(user,/mob/living/carbon/human)) var/mob/living/carbon/human/H = user if(!H.gloves) diff --git a/code/game/objects/items/control_wand.dm b/code/game/objects/items/control_wand.dm index 185a00305de..cb347fe9105 100644 --- a/code/game/objects/items/control_wand.dm +++ b/code/game/objects/items/control_wand.dm @@ -41,6 +41,10 @@ to_chat(user, "Now in mode: [mode].") +/obj/item/door_remote/examine(mob/user) + . = ..() + . += "It's current mode is: [mode]" + /obj/item/door_remote/afterattack(obj/machinery/door/airlock/D, mob/user) if(!istype(D)) return diff --git a/code/game/objects/items/crayons.dm b/code/game/objects/items/crayons.dm index 4ae316236df..8fb04c81473 100644 --- a/code/game/objects/items/crayons.dm +++ b/code/game/objects/items/crayons.dm @@ -69,7 +69,7 @@ if("letter") temp = input("Choose the letter.", "Scribbles") in letters if("random_rune") - temp = "rune[rand(1,10)]" + temp = "rune[rand(1, 8)]" if("random_graffiti") temp = pick(graffiti) else diff --git a/code/game/objects/items/devices/chameleonproj.dm b/code/game/objects/items/devices/chameleonproj.dm index abb86e2cd14..ef7e5edb106 100644 --- a/code/game/objects/items/devices/chameleonproj.dm +++ b/code/game/objects/items/devices/chameleonproj.dm @@ -19,6 +19,7 @@ var/saved_underlays = null /obj/item/chameleon/dropped() + ..() disrupt() /obj/item/chameleon/equipped() @@ -65,7 +66,7 @@ spawn(8) qdel(T) -/obj/item/chameleon/proc/disrupt(var/delete_dummy = 1) +/obj/item/chameleon/proc/disrupt(delete_dummy = 1) if(active_dummy) do_sparks(5, 0, src) eject_all() @@ -90,7 +91,7 @@ var/can_move = 1 var/obj/item/chameleon/master = null -/obj/effect/dummy/chameleon/proc/activate(var/obj/O, var/mob/M, new_icon, new_iconstate, new_overlays, new_underlays, var/obj/item/chameleon/C) +/obj/effect/dummy/chameleon/proc/activate(obj/O, mob/M, new_icon, new_iconstate, new_overlays, new_underlays, obj/item/chameleon/C) name = O.name desc = O.desc icon = new_icon @@ -134,7 +135,7 @@ ..() master.disrupt() -/obj/effect/dummy/chameleon/relaymove(var/mob/user, direction) +/obj/effect/dummy/chameleon/relaymove(mob/user, direction) if(istype(loc, /turf/space) || !direction) return //No magical space movement! diff --git a/code/game/objects/items/devices/enginepicker.dm b/code/game/objects/items/devices/enginepicker.dm index 0fd3a591560..215addfe81e 100644 --- a/code/game/objects/items/devices/enginepicker.dm +++ b/code/game/objects/items/devices/enginepicker.dm @@ -44,7 +44,7 @@ list_enginebeacons += B //Spawns and logs / announces the appropriate engine based on the choice made -/obj/item/enginepicker/proc/processchoice(var/obj/item/radio/beacon/engine/choice, mob/living/carbon/user) +/obj/item/enginepicker/proc/processchoice(obj/item/radio/beacon/engine/choice, mob/living/carbon/user) var/issuccessful = FALSE //Check for a successful choice var/engtype //Engine type var/G //Generator that will be spawned @@ -90,7 +90,7 @@ return //Deletes objects and mobs from the beacon's turf. -/obj/item/enginepicker/proc/clearturf(var/turf/T) +/obj/item/enginepicker/proc/clearturf(turf/T) for(var/obj/item/I in T) I.visible_message("\The [I] gets crushed to dust!") qdel(I) diff --git a/code/game/objects/items/devices/flash.dm b/code/game/objects/items/devices/flash.dm index 2edd1c01a26..26bfb6c816d 100644 --- a/code/game/objects/items/devices/flash.dm +++ b/code/game/objects/items/devices/flash.dm @@ -54,7 +54,7 @@ visible_message("The [src.name] burns out!") -/obj/item/flash/proc/flash_recharge(var/mob/user) +/obj/item/flash/proc/flash_recharge(mob/user) if(prob(times_used * 2)) //if you use it 5 times in a minute it has a 10% chance to break! burn_out() return 0 @@ -85,12 +85,10 @@ return TRUE -/obj/item/flash/proc/flash_carbon(var/mob/living/carbon/M, var/mob/user = null, var/power = 5, targeted = 1) +/obj/item/flash/proc/flash_carbon(mob/living/carbon/M, mob/user = null, power = 5, targeted = 1) if(user) add_attack_logs(user, M, "Flashed with [src]") if(targeted) - if(M.weakeyes) - M.Weaken(3) //quick weaken bypasses eye protection but has no eye flash if(M.flash_eyes(1, 1)) M.AdjustConfused(power) terrible_conversion_proc(M, user) @@ -98,9 +96,6 @@ visible_message("[user] blinds [M] with the flash!") to_chat(user, "You blind [M] with the flash!") to_chat(M, "[user] blinds you with the flash!") - if(M.weakeyes) - M.Stun(2) - M.visible_message("[M] gasps and shields [M.p_their()] eyes!", "You gasp and shield your eyes!") else visible_message("[user] fails to blind [M] with the flash!") to_chat(user, "You fail to blind [M] with the flash!") diff --git a/code/game/objects/items/devices/flashlight.dm b/code/game/objects/items/devices/flashlight.dm index aadd814c0f2..3f7bf9997f6 100644 --- a/code/game/objects/items/devices/flashlight.dm +++ b/code/game/objects/items/devices/flashlight.dm @@ -22,7 +22,7 @@ icon_state = initial(icon_state) set_light(0) -/obj/item/flashlight/proc/update_brightness(var/mob/user = null) +/obj/item/flashlight/proc/update_brightness(mob/user = null) if(on) icon_state = "[initial(icon_state)]-on" set_light(brightness_on) @@ -199,7 +199,7 @@ else update_brightness(null) -/obj/item/flashlight/flare/update_brightness(var/mob/user = null) +/obj/item/flashlight/flare/update_brightness(mob/user = null) ..() if(on) item_state = "[initial(item_state)]-on" @@ -396,3 +396,11 @@ anchored = TRUE var/range = null resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF + +/obj/item/flashlight/eyelight + name = "eyelight" + desc = "This shouldn't exist outside of someone's head, how are you seeing this?" + light_range = 15 + light_power = 1 + flags = CONDUCT | DROPDEL + actions_types = list() diff --git a/code/game/objects/items/devices/floor_painter.dm b/code/game/objects/items/devices/floor_painter.dm index f4c1e4903e2..5a2c4fd2d57 100644 --- a/code/game/objects/items/devices/floor_painter.dm +++ b/code/game/objects/items/devices/floor_painter.dm @@ -27,7 +27,7 @@ "whitered", "whiteredcorner", "whiteredfull", "whiteyellow", "whiteyellowcorner", "whiteyellowfull", "yellow", "yellowcorner", "yellowcornersiding", "yellowsiding") -/obj/item/floor_painter/afterattack(var/atom/A, var/mob/user, proximity, params) +/obj/item/floor_painter/afterattack(atom/A, mob/user, proximity, params) if(!proximity) return @@ -46,7 +46,7 @@ F.icon_regular_floor = floor_state F.dir = floor_dir -/obj/item/floor_painter/attack_self(var/mob/user) +/obj/item/floor_painter/attack_self(mob/user) if(!user) return 0 user.set_machine(src) diff --git a/code/game/objects/items/devices/handheld_defib.dm b/code/game/objects/items/devices/handheld_defib.dm index ed05732d760..a138ef6ca03 100644 --- a/code/game/objects/items/devices/handheld_defib.dm +++ b/code/game/objects/items/devices/handheld_defib.dm @@ -67,7 +67,7 @@ H.AdjustWeakened(5) H.AdjustStuttering(10) to_chat(H, "You feel a powerful jolt!") - H.shock_internal_organs(100) + SEND_SIGNAL(H, COMSIG_LIVING_MINOR_SHOCK, 100) if(emagged && prob(10)) to_chat(user, "[src]'s on board scanner indicates that the target is undergoing a cardiac arrest!") diff --git a/code/game/objects/items/devices/laserpointer.dm b/code/game/objects/items/devices/laserpointer.dm index fe7d0cb3fe6..da8ad829b9b 100644 --- a/code/game/objects/items/devices/laserpointer.dm +++ b/code/game/objects/items/devices/laserpointer.dm @@ -65,12 +65,12 @@ ..() return -/obj/item/laser_pointer/afterattack(var/atom/target, var/mob/living/user, flag, params) +/obj/item/laser_pointer/afterattack(atom/target, mob/living/user, flag, params) if(flag) //we're placing the object on a table or in backpack return laser_act(target, user, params) -/obj/item/laser_pointer/proc/laser_act(var/atom/target, var/mob/living/user, var/params) +/obj/item/laser_pointer/proc/laser_act(atom/target, mob/living/user, params) if( !(user in (viewers(7,target))) ) return if(!diode) @@ -108,8 +108,6 @@ //20% chance to actually hit the eyes if(prob(effectchance * diode.rating) && C.flash_eyes(severity)) outmsg = "You blind [C] by shining [src] in [C.p_their()] eyes." - if(C.weakeyes) - C.Stun(1) else outmsg = "You fail to blind [C] by shining [src] at [C.p_their()] eyes!" diff --git a/code/game/objects/items/devices/lightreplacer.dm b/code/game/objects/items/devices/lightreplacer.dm index 63058d9442b..4ed9b335584 100644 --- a/code/game/objects/items/devices/lightreplacer.dm +++ b/code/game/objects/items/devices/lightreplacer.dm @@ -179,7 +179,7 @@ playsound(loc, 'sound/machines/ding.ogg', 50, TRUE) return new_bulbs -/obj/item/lightreplacer/proc/Charge(var/mob/user) +/obj/item/lightreplacer/proc/Charge(mob/user) charge += 1 if(charge > 3) AddUses(1) @@ -222,7 +222,7 @@ /obj/item/lightreplacer/proc/Emag() emagged = !emagged - playsound(loc, "sparks", 100, TRUE) + playsound(loc, "sparks", 100, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) if(emagged) name = "shortcircuited [initial(name)]" else diff --git a/code/game/objects/items/devices/paicard.dm b/code/game/objects/items/devices/paicard.dm index 42c134736d7..4b1058ae359 100644 --- a/code/game/objects/items/devices/paicard.dm +++ b/code/game/objects/items/devices/paicard.dm @@ -303,7 +303,7 @@ /obj/item/paicard var/current_emotion = 1 -/obj/item/paicard/proc/setEmotion(var/emotion) +/obj/item/paicard/proc/setEmotion(emotion) if(pai) overlays.Cut() switch(emotion) diff --git a/code/game/objects/items/devices/pizza_bomb.dm b/code/game/objects/items/devices/pizza_bomb.dm index e5c237938d6..ceb52db9076 100644 --- a/code/game/objects/items/devices/pizza_bomb.dm +++ b/code/game/objects/items/devices/pizza_bomb.dm @@ -57,7 +57,7 @@ explosion(src.loc,1,2,4,flame_range = 2) //Identical to a minibomb qdel(src) -/obj/item/pizza_bomb/attackby(var/obj/item/I, var/mob/user, params) +/obj/item/pizza_bomb/attackby(obj/item/I, mob/user, params) if(istype(I, /obj/item/wirecutters) && primed) to_chat(user, "Oh God, what wire do you cut?!") var/chosen_wire = input(user, "OH GOD OH GOD", "WHAT WIRE?!") in wires diff --git a/code/game/objects/items/devices/powersink.dm b/code/game/objects/items/devices/powersink.dm index 68f52721f86..6c6526fe176 100644 --- a/code/game/objects/items/devices/powersink.dm +++ b/code/game/objects/items/devices/powersink.dm @@ -88,7 +88,7 @@ /obj/item/powersink/attack_ai() return -/obj/item/powersink/attack_hand(var/mob/user) +/obj/item/powersink/attack_hand(mob/user) switch(mode) if(DISCONNECTED) ..() diff --git a/code/game/objects/items/devices/radio/headset.dm b/code/game/objects/items/devices/radio/headset.dm index db337d0a188..5a493904839 100644 --- a/code/game/objects/items/devices/radio/headset.dm +++ b/code/game/objects/items/devices/radio/headset.dm @@ -103,10 +103,10 @@ /obj/item/radio/headset/syndicate/alt/syndteam ks1type = /obj/item/encryptionkey/syndteam -/obj/item/radio/headset/syndicate/alt/lavaland - name = "syndicate lavaland headset" +/obj/item/radio/headset/syndicate/alt/nocommon + name = "syndicate researcher headset" -/obj/item/radio/headset/syndicate/alt/lavaland/New() +/obj/item/radio/headset/syndicate/alt/nocommon/New() . = ..() set_frequency(SYND_FREQ) diff --git a/code/game/objects/items/devices/radio/radio.dm b/code/game/objects/items/devices/radio/radio.dm index 1ee9114a322..ee06d563aad 100644 --- a/code/game/objects/items/devices/radio/radio.dm +++ b/code/game/objects/items/devices/radio/radio.dm @@ -236,15 +236,15 @@ GLOBAL_LIST_INIT(default_medbay_channels, list( return user.has_internal_radio_channel_access(user, internal_channels[freq]) -/mob/proc/has_internal_radio_channel_access(var/mob/user, var/list/req_one_accesses) +/mob/proc/has_internal_radio_channel_access(mob/user, list/req_one_accesses) var/obj/item/card/id/I = user.get_id_card() return has_access(list(), req_one_accesses, I ? I.GetAccess() : list()) -/mob/living/silicon/has_internal_radio_channel_access(var/mob/user, var/list/req_one_accesses) +/mob/living/silicon/has_internal_radio_channel_access(mob/user, list/req_one_accesses) var/list/access = get_all_accesses() return has_access(list(), req_one_accesses, access) -/mob/dead/observer/has_internal_radio_channel_access(var/mob/user, var/list/req_one_accesses) +/mob/dead/observer/has_internal_radio_channel_access(mob/user, list/req_one_accesses) return can_admin_interact() /obj/item/radio/proc/ToggleBroadcast() @@ -475,7 +475,7 @@ GLOBAL_LIST_INIT(default_medbay_channels, list( return FALSE -/obj/item/radio/hear_talk(mob/M as mob, list/message_pieces, var/verb = "says") +/obj/item/radio/hear_talk(mob/M as mob, list/message_pieces, verb = "says") if(broadcasting) if(get_dist(src, M) <= canhear_range) talk_into(M, message_pieces, null, verb) diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm index 5e82e651e23..2bb6125b5ed 100644 --- a/code/game/objects/items/devices/scanners.dm +++ b/code/game/objects/items/devices/scanners.dm @@ -239,9 +239,9 @@ REAGENT SCANNER to_chat(user, "Subject's pulse: [H.get_pulse(GETPULSE_TOOL)] bpm.") var/implant_detect - for(var/obj/item/organ/internal/cyberimp/CI in H.internal_organs) - if(CI.is_robotic()) - implant_detect += "[H.name] is modified with a [CI.name].
      " + for(var/obj/item/organ/internal/O in H.internal_organs) + if(O.is_robotic()) + implant_detect += "[H.name] is modified with a [O.name].
      " if(implant_detect) to_chat(user, "Detected cybernetic modifications:") to_chat(user, "[implant_detect]") diff --git a/code/game/objects/items/devices/taperecorder.dm b/code/game/objects/items/devices/taperecorder.dm index f66756e55dc..63c8e404b89 100644 --- a/code/game/objects/items/devices/taperecorder.dm +++ b/code/game/objects/items/devices/taperecorder.dm @@ -9,6 +9,8 @@ materials = list(MAT_METAL=60, MAT_GLASS=30) force = 2 throwforce = 0 + drop_sound = 'sound/items/handling/taperecorder_drop.ogg' + pickup_sound = 'sound/items/handling/taperecorder_pickup.ogg' var/recording = 0 var/playing = 0 var/playsleepseconds = 0 @@ -16,6 +18,8 @@ var/open_panel = 0 var/canprint = 1 var/starts_with_tape = TRUE + ///Sound loop that plays when recording or playing back. + var/datum/looping_sound/tape_recorder_hiss/soundloop /obj/item/taperecorder/New() @@ -23,9 +27,11 @@ if(starts_with_tape) mytape = new /obj/item/tape/random(src) update_icon() + soundloop = new(list(src)) /obj/item/taperecorder/Destroy() QDEL_NULL(mytape) + QDEL_NULL(soundloop) return ..() /obj/item/taperecorder/examine(mob/user) @@ -34,16 +40,24 @@ . += "The wire panel is [open_panel ? "opened" : "closed"]." +/obj/item/taperecorder/proc/update_sound() + if(!playing && !recording) + soundloop.stop() + else + soundloop.start() + /obj/item/taperecorder/attackby(obj/item/I, mob/user) if(!mytape && istype(I, /obj/item/tape)) - user.drop_item() - I.loc = src - mytape = I - to_chat(user, "You insert [I] into [src].") - update_icon() + if(user.drop_item()) + I.forceMove(src) + mytape = I + to_chat(user, "You insert [I] into [src].") + playsound(src, 'sound/items/taperecorder/taperecorder_close.ogg', 50, FALSE) + update_icon() /obj/item/taperecorder/proc/eject(mob/user) if(mytape) + playsound(src, 'sound/items/taperecorder/taperecorder_open.ogg', 50, FALSE) to_chat(user, "You remove [mytape] from [src].") stop() user.put_in_hands(mytape) @@ -52,7 +66,7 @@ /obj/item/taperecorder/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume, global_overlay = TRUE) - mytape.ruin() //Fires destroy the tape + mytape?.ruin() //Fires destroy the tape return ..() /obj/item/taperecorder/attack_hand(mob/user) @@ -70,7 +84,7 @@ set name = "Eject Tape" set category = "Object" - if(usr.stat) + if(usr.incapacitated()) return if(!mytape) return @@ -117,7 +131,7 @@ set name = "Start Recording" set category = "Object" - if(usr.stat) + if(usr.incapacitated()) return if(!mytape || mytape.ruined) return @@ -126,9 +140,12 @@ if(playing) return + playsound(src, 'sound/items/taperecorder/taperecorder_play.ogg', 50, FALSE) + if(mytape.used_capacity < mytape.max_capacity) - to_chat(usr, "Recording started.") - recording = 1 + recording = TRUE + atom_say("Recording started.") + update_sound() update_icon() mytape.timestamp += mytape.used_capacity mytape.storedinfo += "\[[time2text(mytape.used_capacity * 10,"mm:ss")]\] Recording started." @@ -140,36 +157,38 @@ mytape.used_capacity++ used++ sleep(10) - recording = 0 - update_icon() + stop() else - to_chat(usr, "The tape is full.") + atom_say("The tape is full!") + playsound(src, 'sound/items/taperecorder/taperecorder_stop.ogg', 50, FALSE) /obj/item/taperecorder/verb/stop() set name = "Stop" set category = "Object" - if(usr.stat) + if(usr.incapacitated()) return if(recording) - recording = 0 mytape.timestamp += mytape.used_capacity mytape.storedinfo += "\[[time2text(mytape.used_capacity * 10,"mm:ss")]\] Recording stopped." - to_chat(usr, "Recording stopped.") - return + playsound(src, 'sound/items/taperecorder/taperecorder_stop.ogg', 50, FALSE) + atom_say("Recording stopped.") + recording = FALSE else if(playing) - playing = 0 + playsound(src, 'sound/items/taperecorder/taperecorder_stop.ogg', 50, FALSE) atom_say("Playback stopped.") + playing = FALSE update_icon() + update_sound() /obj/item/taperecorder/verb/play() set name = "Play Tape" set category = "Object" - if(usr.stat) + if(usr.incapacitated()) return if(!mytape || mytape.ruined) return @@ -178,9 +197,11 @@ if(playing) return - playing = 1 + playing = TRUE update_icon() - to_chat(usr, "Playing started.") + update_sound() + atom_say("Playback started.") + playsound(src, 'sound/items/taperecorder/taperecorder_play.ogg', 50, FALSE) var/used = mytape.used_capacity //to stop runtimes when you eject the tape var/max = mytape.max_capacity for(var/i = 1, used < max, sleep(10 * playsleepseconds)) @@ -189,6 +210,7 @@ if(playing == 0) break if(mytape.storedinfo.len < i) + atom_say("End of recording.") break atom_say("[mytape.storedinfo[i]]") if(mytape.storedinfo.len < i + 1) @@ -203,8 +225,7 @@ playsleepseconds = 1 i++ - playing = 0 - update_icon() + stop() /obj/item/taperecorder/attack_self(mob/user) @@ -220,7 +241,7 @@ set name = "Print Transcript" set category = "Object" - if(usr.stat) + if(usr.incapacitated()) return if(!mytape) return @@ -230,7 +251,7 @@ if(recording || playing) return - to_chat(usr, "Transcript printed.") + atom_say("Transcript printed.") playsound(loc, 'sound/goonstation/machines/printer_thermal.ogg', 50, 1) var/obj/item/paper/P = new /obj/item/paper(get_turf(src)) var/t1 = "Transcript:

      " @@ -258,6 +279,8 @@ materials = list(MAT_METAL=20, MAT_GLASS=5) force = 1 throwforce = 0 + drop_sound = 'sound/items/handling/tape_drop.ogg' + pickup_sound = 'sound/items/handling/tape_pickup.ogg' var/max_capacity = 600 var/used_capacity = 0 var/list/storedinfo = list() diff --git a/code/game/objects/items/devices/traitordevices.dm b/code/game/objects/items/devices/traitordevices.dm index c4f14c8140e..ea9f7200177 100644 --- a/code/game/objects/items/devices/traitordevices.dm +++ b/code/game/objects/items/devices/traitordevices.dm @@ -254,9 +254,9 @@ effective or pretty fucking useless. var/turf/fragging_location = destination telefrag(fragging_location, user) C.forceMove(destination) - playsound(mobloc, "sparks", 50, TRUE) + playsound(mobloc, "sparks", 50, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) new/obj/effect/temp_visual/teleport_abductor/syndi_teleporter(mobloc) - playsound(destination, "sparks", 50, TRUE) + playsound(destination, "sparks", 50, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) new/obj/effect/temp_visual/teleport_abductor/syndi_teleporter(destination) else if (EMP_D == FALSE && !(bagholding.len && !flawless)) // This is where the fun begins var/direction = get_dir(user, destination) @@ -315,10 +315,10 @@ effective or pretty fucking useless. var/turf/fragging_location = new_destination telefrag(fragging_location, user) C.forceMove(new_destination) - playsound(mobloc, "sparks", 50, TRUE) + 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) - playsound(new_destination, "sparks", 50, TRUE) + playsound(new_destination, "sparks", 50, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) else //We tried to save. We failed. Death time. get_fragged(user, destination) @@ -326,14 +326,14 @@ effective or pretty fucking useless. /obj/item/teleporter/proc/get_fragged(mob/user, turf/destination) var/turf/mobloc = get_turf(user) user.forceMove(destination) - playsound(mobloc, "sparks", 50, TRUE) + 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(destination) - playsound(destination, "sparks", 50, TRUE) + 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/organ)|| istype(W, /obj/item/implant)) + if(istype(W, /obj/item/implant)) continue if(!user.unEquip(W)) qdel(W) diff --git a/code/game/objects/items/devices/uplinks.dm b/code/game/objects/items/devices/uplinks.dm index 5253a98c6a5..f4cecade824 100644 --- a/code/game/objects/items/devices/uplinks.dm +++ b/code/game/objects/items/devices/uplinks.dm @@ -79,7 +79,7 @@ GLOBAL_LIST_EMPTY(world_uplinks) return pick(random_items) -/obj/item/uplink/proc/buy(var/datum/uplink_item/UI, var/reference) +/obj/item/uplink/proc/buy(datum/uplink_item/UI, reference) if(is_jammed) to_chat(usr, "[src] seems to be jammed - it cannot be used here!") return @@ -149,7 +149,7 @@ GLOBAL_LIST_EMPTY(world_uplinks) // Checks to see if the value meets the target. Like a frequency being a traitor_frequency, in order to unlock a headset. // If true, it accesses trigger() and returns 1. If it fails, it returns false. Use this to see if you need to close the // current item's menu. -/obj/item/uplink/hidden/proc/check_trigger(mob/user, var/value, var/target) +/obj/item/uplink/hidden/proc/check_trigger(mob/user, value, target) if(is_jammed) to_chat(user, "[src] seems to be jammed - it cannot be used here!") return diff --git a/code/game/objects/items/devices/whistle.dm b/code/game/objects/items/devices/whistle.dm index 754c0676b71..0850dd29a76 100644 --- a/code/game/objects/items/devices/whistle.dm +++ b/code/game/objects/items/devices/whistle.dm @@ -1,3 +1,6 @@ + +#define USE_COOLDOWN 2 SECONDS + /obj/item/hailer name = "hailer" desc = "Used by obese officers to save their breath for running." @@ -6,11 +9,11 @@ item_state = "flashtool" //looks exactly like a flash (and nothing like a flashbang) w_class = WEIGHT_CLASS_TINY flags = CONDUCT - + var/next_use_time var/spamcheck = 0 /obj/item/hailer/attack_self(mob/living/carbon/user as mob) - if(spamcheck) + if(world.time < next_use_time) return if(emagged) @@ -20,11 +23,11 @@ playsound(get_turf(src), 'sound/voice/halt.ogg', 100, 1, vary = 0) user.visible_message("[user]'s [name] rasps, \"Halt! Security!\"") - spamcheck = 1 - spawn(20) - spamcheck = 0 + next_use_time = world.time + USE_COOLDOWN /obj/item/hailer/emag_act(user as mob) if(!emagged) to_chat(user, "You overload \the [src]'s voice synthesizer.") emagged = 1 + +#undef USE_COOLDOWN diff --git a/code/game/objects/items/hand_item.dm b/code/game/objects/items/hand_item.dm new file mode 100644 index 00000000000..7f378aa6cdc --- /dev/null +++ b/code/game/objects/items/hand_item.dm @@ -0,0 +1,116 @@ +/obj/item/slapper + name = "slapper" + desc = "This is how real men fight." + icon_state = "latexballon" + item_state = "nothing" + force = 0 + throwforce = 0 + flags = DROPDEL | ABSTRACT + attack_verb = list("slaps") + hitsound = 'sound/weapons/slap.ogg' + /// How many smaller table smacks we can do before we're out + var/table_smacks_left = 3 + +/obj/item/slapper/attack(mob/M, mob/living/carbon/human/user) + user.do_attack_animation(M) + playsound(M, hitsound, 50, TRUE, -1) + user.visible_message("[user] slaps [M]!", "You slap [M]!", "You hear a slap.") + +/obj/item/slapper/attack_obj(obj/O, mob/living/user, params) + if(!istype(O, /obj/structure/table)) + return ..() + + var/obj/structure/table/the_table = O + + if(user.a_intent == INTENT_HARM && table_smacks_left == initial(table_smacks_left)) // so you can't do 2 weak slaps followed by a big slam + transform = transform.Scale(1.5) // BIG slap + if(HAS_TRAIT(user, TRAIT_HULK)) + transform = transform.Scale(2) + color = COLOR_GREEN + user.do_attack_animation(the_table) + if(ishuman(user)) + var/mob/living/carbon/human/human_user = user + if(istype(human_user.shoes, /obj/item/clothing/shoes/cowboy)) + human_user.say(pick("Hot damn!", "Hoo-wee!", "Got-dang!")) + playsound(get_turf(the_table), 'sound/effects/tableslam.ogg', 110, TRUE) + user.visible_message("[user] slams [user.p_their()] fist down on [the_table]!", "You slam your fist down on [the_table]!") + qdel(src) + else + user.do_attack_animation(the_table) + playsound(get_turf(the_table), 'sound/effects/tableslam.ogg', 40, TRUE) + user.visible_message("[user] slaps [user.p_their()] hand on [the_table].", "You slap your hand on [the_table].") + table_smacks_left-- + if(table_smacks_left <= 0) + qdel(src) + +/obj/item/kisser + name = "kiss" + desc = "I want you all to know, everyone and anyone, to seal it with a kiss." + icon = 'icons/mob/animal.dmi' + icon_state = "heart" + item_state = "nothing" + force = 0 + throwforce = 0 + flags = DROPDEL | ABSTRACT + /// The kind of projectile this version of the kiss blower fires + var/kiss_type = /obj/item/projectile/kiss + +/obj/item/kisser/afterattack(atom/target, mob/user, flag, params) + var/turf/user_turf = get_turf(user) + var/obj/item/projectile/blown_kiss = new kiss_type(user_turf) + user.visible_message("[user] blows \a [blown_kiss] at [target]!", "You blow \a [blown_kiss] at [target]!") + + //Shooting Code: + blown_kiss.spread = 0 + blown_kiss.original = target + blown_kiss.firer = user // don't hit ourself that would be really annoying + blown_kiss.preparePixelProjectile(target, user_turf, user, params) + blown_kiss.fire() + qdel(src) + +/obj/item/kisser/death + name = "kiss of death" + desc = "If looks could kill, they'd be this." + color = COLOR_BLACK + kiss_type = /obj/item/projectile/kiss/death + +/obj/item/projectile/kiss + name = "kiss" + icon = 'icons/mob/animal.dmi' + icon_state = "heart" + hitsound = 'sound/effects/kiss.ogg' + hitsound_wall = 'sound/effects/kiss.ogg' + pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE + speed = 1.6 + damage_type = BRUTE + damage = 0 + nodamage = TRUE // love can't actually hurt you + armour_penetration = 100 // but if it could, it would cut through even the thickest plate + flag = "magic" // and most importantly, love is magic~ + +/obj/item/projectile/kiss/fire(angle) + if(firer) + name = "[name] blown by [firer]" + return ..() + +/obj/item/projectile/kiss/on_hit(atom/target, blocked, hit_zone) + def_zone = BODY_ZONE_HEAD // let's keep it PG, people + . = ..() + +/obj/item/projectile/kiss/death + name = "kiss of death" + nodamage = FALSE // okay i kinda lied about love not being able to hurt you + damage = 35 + sharp = TRUE + color = COLOR_BLACK + +/obj/item/projectile/kiss/death/on_hit(atom/target, blocked, pierce_hit) + . = ..() + if(!iscarbon(target)) + return + var/mob/living/carbon/heartbreakee = target + var/obj/item/organ/internal/heart/dont_go_breakin_my_heart = heartbreakee.get_organ_slot("heart") + if(dont_go_breakin_my_heart) + dont_go_breakin_my_heart.receive_damage(999) + else // You're probably a snowflakey species or Xenomorph + heartbreakee.adjustFireLoss(1000) // the sickest of burns diff --git a/code/game/objects/items/mountable_frames/mountables.dm b/code/game/objects/items/mountable_frames/mountables.dm index cfb4d18473c..6abe277b4d9 100644 --- a/code/game/objects/items/mountable_frames/mountables.dm +++ b/code/game/objects/items/mountable_frames/mountables.dm @@ -2,7 +2,7 @@ var/list/buildon_types = list(/turf/simulated/wall) -/obj/item/mounted/afterattack(var/atom/A, mob/user, proximity_flag) +/obj/item/mounted/afterattack(atom/A, mob/user, proximity_flag) var/found_type = 0 for(var/turf_type in src.buildon_types) if(istype(A, turf_type)) diff --git a/code/game/objects/items/random_items.dm b/code/game/objects/items/random_items.dm index 2c3b51d4454..b20a505212e 100644 --- a/code/game/objects/items/random_items.dm +++ b/code/game/objects/items/random_items.dm @@ -238,6 +238,10 @@ icon_opened = "cabinetdetective_open" icon_broken = "cabinetdetective_broken" icon_off = "cabinetdetective_broken" + open_sound = 'sound/machines/wooden_closet_open.ogg' + close_sound = 'sound/machines/wooden_closet_close.ogg' + open_sound_volume = 25 + close_sound_volume = 50 /obj/structure/closet/secure_closet/random_drinks/populate_contents() for(var/i in 1 to 5) diff --git a/code/game/objects/items/robot/robot_upgrades.dm b/code/game/objects/items/robot/robot_upgrades.dm index 56a6d452e2a..81733bd91e7 100644 --- a/code/game/objects/items/robot/robot_upgrades.dm +++ b/code/game/objects/items/robot/robot_upgrades.dm @@ -44,7 +44,7 @@ /obj/item/borg/upgrade/rename/attack_self(mob/user) heldname = stripped_input(user, "Enter new robot name", "Cyborg Reclassification", heldname, MAX_NAME_LEN) -/obj/item/borg/upgrade/rename/action(var/mob/living/silicon/robot/R) +/obj/item/borg/upgrade/rename/action(mob/living/silicon/robot/R) if(..()) return if(!R.allow_rename) @@ -88,7 +88,7 @@ require_module = TRUE origin_tech = "engineering=4;materials=5;programming=4" -/obj/item/borg/upgrade/vtec/action(var/mob/living/silicon/robot/R) +/obj/item/borg/upgrade/vtec/action(mob/living/silicon/robot/R) if(..()) return if(R.speed < 0) diff --git a/code/game/objects/items/stacks/medical.dm b/code/game/objects/items/stacks/medical.dm index 8c1f5826d66..f9d02c8f515 100644 --- a/code/game/objects/items/stacks/medical.dm +++ b/code/game/objects/items/stacks/medical.dm @@ -218,7 +218,13 @@ color = "#378C61" stop_bleeding = 0 heal_brute = 12 + drop_sound = 'sound/misc/moist_impact.ogg' + mob_throw_hit_sound = 'sound/misc/moist_impact.ogg' + hitsound = 'sound/misc/moist_impact.ogg' +/obj/item/stack/medical/bruise_pack/comfrey/heal(mob/living/M, mob/user) + playsound(src, 'sound/misc/soggy.ogg', 30, TRUE) + return ..() /obj/item/stack/medical/ointment/aloe name = "\improper Aloe Vera leaf" diff --git a/code/game/objects/items/stacks/sheets/leather.dm b/code/game/objects/items/stacks/sheets/leather.dm index 8b302cd338a..1be2e6b289d 100644 --- a/code/game/objects/items/stacks/sheets/leather.dm +++ b/code/game/objects/items/stacks/sheets/leather.dm @@ -14,7 +14,7 @@ GLOBAL_LIST_INIT(human_recipes, list( \ new/datum/stack_recipe("bloated human costume head", /obj/item/clothing/head/human_head, 5, on_floor = TRUE), \ )) -/obj/item/stack/sheet/animalhide/human/New(var/loc, var/amount=null) +/obj/item/stack/sheet/animalhide/human/New(loc, amount=null) recipes = GLOB.human_recipes return ..() @@ -144,7 +144,7 @@ GLOBAL_LIST_INIT(sinew_recipes, list ( \ new/datum/stack_recipe("sinew restraints", /obj/item/restraints/handcuffs/sinew, 1, on_floor = 1), \ )) -/obj/item/stack/sheet/sinew/New(var/loc, var/amount=null) +/obj/item/stack/sheet/sinew/New(loc, amount=null) recipes = GLOB.sinew_recipes return ..() diff --git a/code/game/objects/items/stacks/sheets/light.dm b/code/game/objects/items/stacks/sheets/light.dm index 17cf8bc5001..4eadda37c32 100644 --- a/code/game/objects/items/stacks/sheets/light.dm +++ b/code/game/objects/items/stacks/sheets/light.dm @@ -13,7 +13,7 @@ flags = CONDUCT max_amount = 60 -/obj/item/stack/light_w/attackby(var/obj/item/O as obj, var/mob/user as mob, params) +/obj/item/stack/light_w/attackby(obj/item/O as obj, mob/user as mob, params) ..() if(istype(O,/obj/item/wirecutters)) var/obj/item/stack/cable_coil/CC = new/obj/item/stack/cable_coil(user.loc) diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm index ad798e781eb..a004cfd0de8 100644 --- a/code/game/objects/items/stacks/sheets/sheet_types.dm +++ b/code/game/objects/items/stacks/sheets/sheet_types.dm @@ -123,7 +123,7 @@ GLOBAL_LIST_INIT(metal_recipes, list( new /obj/item/stack/sheet/runed_metal(loc, amount) qdel(src) -/obj/item/stack/sheet/metal/New(var/loc, var/amount=null) +/obj/item/stack/sheet/metal/New(loc, amount=null) recipes = GLOB.metal_recipes return ..() @@ -158,7 +158,7 @@ GLOBAL_LIST_INIT(plasteel_recipes, list( merge_type = /obj/item/stack/sheet/plasteel point_value = 23 -/obj/item/stack/sheet/plasteel/New(var/loc, var/amount=null) +/obj/item/stack/sheet/plasteel/New(loc, amount=null) recipes = GLOB.plasteel_recipes return ..() @@ -202,7 +202,7 @@ GLOBAL_LIST_INIT(wood_recipes, list( 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(var/loc, var/amount=null) +/obj/item/stack/sheet/wood/New(loc, amount=null) recipes = GLOB.wood_recipes return ..() @@ -247,6 +247,8 @@ GLOBAL_LIST_INIT(cloth_recipes, list ( \ force = 0 throwforce = 0 merge_type = /obj/item/stack/sheet/cloth + drop_sound = 'sound/items/handling/cloth_drop.ogg' + pickup_sound = 'sound/items/handling/cloth_pickup.ogg' /obj/item/stack/sheet/cloth/New(loc, amount=null) recipes = GLOB.cloth_recipes @@ -272,6 +274,8 @@ GLOBAL_LIST_INIT(durathread_recipes, list ( \ force = 0 throwforce = 0 merge_type = /obj/item/stack/sheet/durathread + drop_sound = 'sound/items/handling/cloth_drop.ogg' + pickup_sound = 'sound/items/handling/cloth_pickup.ogg' /obj/item/stack/sheet/durathread/Initialize(mapload, new_amount, merge = TRUE) recipes = GLOB.durathread_recipes @@ -337,7 +341,7 @@ GLOBAL_LIST_INIT(cardboard_recipes, list ( resistance_flags = FLAMMABLE merge_type = /obj/item/stack/sheet/cardboard -/obj/item/stack/sheet/cardboard/New(var/loc, var/amt = null) +/obj/item/stack/sheet/cardboard/New(loc, amt = null) recipes = GLOB.cardboard_recipes return ..() @@ -398,7 +402,7 @@ GLOBAL_LIST_INIT(cult_recipes, list ( \ /obj/item/stack/sheet/runed_metal/fifty amount = 50 -/obj/item/stack/sheet/runed_metal/New(var/loc, var/amount=null) +/obj/item/stack/sheet/runed_metal/New(loc, amount=null) recipes = GLOB.cult_recipes return ..() diff --git a/code/game/objects/items/tools/crowbar.dm b/code/game/objects/items/tools/crowbar.dm index 134194bf4a7..c90315ffbeb 100644 --- a/code/game/objects/items/tools/crowbar.dm +++ b/code/game/objects/items/tools/crowbar.dm @@ -12,6 +12,8 @@ item_state = "crowbar" w_class = WEIGHT_CLASS_SMALL materials = list(MAT_METAL=50) + drop_sound = 'sound/items/handling/crowbar_drop.ogg' + pickup_sound = 'sound/items/handling/crowbar_pickup.ogg' origin_tech = "engineering=1;combat=1" attack_verb = list("attacked", "bashed", "battered", "bludgeoned", "whacked") toolspeed = 1 diff --git a/code/game/objects/items/tools/multitool.dm b/code/game/objects/items/tools/multitool.dm index db7194c00db..7acee5352a3 100644 --- a/code/game/objects/items/tools/multitool.dm +++ b/code/game/objects/items/tools/multitool.dm @@ -12,11 +12,13 @@ icon = 'icons/obj/device.dmi' icon_state = "multitool" flags = CONDUCT - force = 5.0 + force = 0 w_class = WEIGHT_CLASS_SMALL throwforce = 0 throw_range = 7 throw_speed = 3 + drop_sound = 'sound/items/handling/multitool_drop.ogg' + pickup_sound = 'sound/items/handling/multitool_pickup.ogg' materials = list(MAT_METAL=50, MAT_GLASS=20) origin_tech = "magnets=1;engineering=2" toolspeed = 1 diff --git a/code/game/objects/items/tools/screwdriver.dm b/code/game/objects/items/tools/screwdriver.dm index dcebcacf954..374b8ad66ca 100644 --- a/code/game/objects/items/tools/screwdriver.dm +++ b/code/game/objects/items/tools/screwdriver.dm @@ -17,6 +17,8 @@ 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) + drop_sound = 'sound/items/handling/screwdriver_drop.ogg' + pickup_sound = 'sound/items/handling/screwdriver_pickup.ogg' tool_behaviour = TOOL_SCREWDRIVER var/random_color = TRUE //if the screwdriver uses random coloring @@ -30,7 +32,7 @@ user.visible_message("[user] is stabbing [src] into [user.p_their()] [pick("temple", "heart")]! It looks like [user.p_theyre()] trying to commit suicide!") return BRUTELOSS -/obj/item/screwdriver/New(loc, var/param_color = null) +/obj/item/screwdriver/New(loc, param_color = null) ..() if(random_color) if(!param_color) diff --git a/code/game/objects/items/tools/welder.dm b/code/game/objects/items/tools/welder.dm index 4ac934462a0..41801fe0287 100644 --- a/code/game/objects/items/tools/welder.dm +++ b/code/game/objects/items/tools/welder.dm @@ -22,6 +22,8 @@ toolspeed = 1 tool_enabled = FALSE usesound = 'sound/items/welder.ogg' + drop_sound = 'sound/items/handling/weldingtool_drop.ogg' + pickup_sound = 'sound/items/handling/weldingtool_pickup.ogg' var/maximum_fuel = 20 var/requires_fuel = TRUE //Set to FALSE if it doesn't need fuel, but serves equally well as a cost modifier var/refills_over_time = FALSE //Do we regenerate fuel? diff --git a/code/game/objects/items/tools/wirecutters.dm b/code/game/objects/items/tools/wirecutters.dm index 939139ce0b8..12da212f4f3 100644 --- a/code/game/objects/items/tools/wirecutters.dm +++ b/code/game/objects/items/tools/wirecutters.dm @@ -14,6 +14,8 @@ attack_verb = list("pinched", "nipped") hitsound = 'sound/items/wirecutter.ogg' usesound = 'sound/items/wirecutter.ogg' + drop_sound = 'sound/items/handling/wirecutter_drop.ogg' + 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) diff --git a/code/game/objects/items/tools/wrench.dm b/code/game/objects/items/tools/wrench.dm index 5af1185e90b..d204ca683e6 100644 --- a/code/game/objects/items/tools/wrench.dm +++ b/code/game/objects/items/tools/wrench.dm @@ -11,6 +11,8 @@ usesound = 'sound/items/ratchet.ogg' w_class = WEIGHT_CLASS_SMALL materials = list(MAT_METAL=150) + drop_sound = 'sound/items/handling/wrench_drop.ogg' + pickup_sound = 'sound/items/handling/wrench_pickup.ogg' origin_tech = "materials=1;engineering=1" attack_verb = list("bashed", "battered", "bludgeoned", "whacked") toolspeed = 1 diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm index 06973e878a1..a2d2aeac16d 100644 --- a/code/game/objects/items/toys.dm +++ b/code/game/objects/items/toys.dm @@ -271,7 +271,7 @@ w_class = WEIGHT_CLASS_TINY var/ash_type = /obj/effect/decal/cleanable/ash -/obj/item/toy/snappop/proc/pop_burst(var/n=3, var/c=1) +/obj/item/toy/snappop/proc/pop_burst(n=3, c=1) do_sparks(n, c, src) new ash_type(loc) visible_message("[src] explodes!", @@ -1226,6 +1226,7 @@ icon = 'icons/obj/library.dmi' icon_state = "demonomicon" w_class = WEIGHT_CLASS_SMALL + var/list/messages = list("You must challenge the devil to a dance-off!", "The devils true name is Ian", "The devil hates salt!", "Would you like infinite power?", "Would you like infinite wisdom?", " Would you like infinite healing?") var/cooldown = FALSE /obj/item/toy/codex_gigas/attack_self(mob/user) @@ -1234,21 +1235,12 @@ "[user] presses the button on \the [src].", "You press the button on \the [src].", "You hear a soft click.") - var/list/messages = list() - var/datum/devilinfo/devil = randomDevilInfo() - messages += "Some fun facts about: [devil.truename]" - messages += "[GLOB.lawlorify[LORE][devil.bane]]" - messages += "[GLOB.lawlorify[LORE][devil.obligation]]" - messages += "[GLOB.lawlorify[LORE][devil.ban]]" - messages += "[GLOB.lawlorify[LORE][devil.banish]]" - playsound(loc, 'sound/machines/click.ogg', 20, 1) + playsound(loc, 'sound/machines/click.ogg', 20, TRUE) cooldown = TRUE - for(var/message in messages) + addtimer(VARSET_CALLBACK(src, cooldown, FALSE), 60) + for(var/message in pick(messages)) user.loc.visible_message("[bicon(src)] [message]") sleep(10) - spawn(20) - cooldown = FALSE - return /obj/item/toy/owl name = "owl action figure" @@ -1372,7 +1364,7 @@ var/cooldown = 0 var/obj/stored_minature = null -/obj/item/toy/minigibber/attack_self(var/mob/user) +/obj/item/toy/minigibber/attack_self(mob/user) if(stored_minature) to_chat(user, "\The [src] makes a violent grinding noise as it tears apart the miniature figure inside!") @@ -1385,7 +1377,7 @@ playsound(user, 'sound/goonstation/effects/gib.ogg', 20, 1) cooldown = world.time -/obj/item/toy/minigibber/attackby(var/obj/O, var/mob/user, params) +/obj/item/toy/minigibber/attackby(obj/O, mob/user, params) if(istype(O,/obj/item/toy/character) && O.loc == user) to_chat(user, "You start feeding \the [O] [bicon(O)] into \the [src]'s mini-input.") if(do_after(user, 10, target = src)) @@ -1525,7 +1517,7 @@ /obj/item/toy/russian_revolver/trick_revolver/post_shot(user) to_chat(user, "[src] did look pretty dodgey!") - SEND_SOUND(user, 'sound/misc/sadtrombone.ogg') //HONK + SEND_SOUND(user, sound('sound/misc/sadtrombone.ogg')) //HONK /* * Rubber Chainsaw */ diff --git a/code/game/objects/items/trash.dm b/code/game/objects/items/trash.dm index 80dd45d1b02..c2ff3879968 100644 --- a/code/game/objects/items/trash.dm +++ b/code/game/objects/items/trash.dm @@ -52,12 +52,12 @@ icon_state = "waffles" /obj/item/trash/plate - name = "Plate" + name = "plate" icon_state = "plate" resistance_flags = NONE /obj/item/trash/snack_bowl - name = "Snack bowl" + name = "snack bowl" icon_state = "snack_bowl" /obj/item/trash/fried_vox diff --git a/code/game/objects/items/weapons/AI_modules.dm b/code/game/objects/items/weapons/AI_modules.dm index 62716bc51c4..7c1a8c5b4f1 100755 --- a/code/game/objects/items/weapons/AI_modules.dm +++ b/code/game/objects/items/weapons/AI_modules.dm @@ -22,7 +22,7 @@ AI MODULES materials = list(MAT_GOLD=50) var/datum/ai_laws/laws = null -/obj/item/aiModule/proc/install(var/obj/machinery/computer/C) +/obj/item/aiModule/proc/install(obj/machinery/computer/C) if(istype(C, /obj/machinery/computer/aiupload)) var/obj/machinery/computer/aiupload/comp = C if(comp.stat & NOPOWER) @@ -72,7 +72,7 @@ AI MODULES to_chat(usr, "Upload complete. The robot's laws have been modified.") -/obj/item/aiModule/proc/transmitInstructions(var/mob/living/silicon/ai/target, var/mob/sender) +/obj/item/aiModule/proc/transmitInstructions(mob/living/silicon/ai/target, mob/sender) log_law_changes(target, sender) if(laws) @@ -82,12 +82,12 @@ AI MODULES to_chat(target, "[sender] has uploaded a change to the laws you must follow, using \an [src]. From now on: ") target.show_laws() -/obj/item/aiModule/proc/log_law_changes(var/mob/living/silicon/ai/target, var/mob/sender) +/obj/item/aiModule/proc/log_law_changes(mob/living/silicon/ai/target, mob/sender) var/time = time2text(world.realtime,"hh:mm:ss") GLOB.lawchanges.Add("[time] : [sender.name]([sender.key]) used [src.name] on [target.name]([target.key])") log_and_message_admins("used [src.name] on [target.name]([target.key])") -/obj/item/aiModule/proc/addAdditionalLaws(var/mob/living/silicon/ai/target, var/mob/sender) +/obj/item/aiModule/proc/addAdditionalLaws(mob/living/silicon/ai/target, mob/sender) /******************** Safeguard ********************/ @@ -97,19 +97,19 @@ AI MODULES desc = "A 'safeguard' AI module: 'Safeguard . Individuals that threaten are not crew and must be eliminated.'" origin_tech = "programming=3;materials=3" -/obj/item/aiModule/safeguard/attack_self(var/mob/user as mob) +/obj/item/aiModule/safeguard/attack_self(mob/user as mob) ..() var/targName = stripped_input(usr, "Please enter the name of the person to safeguard.", "Safeguard who?", user.name) targetName = targName desc = text("A 'safeguard' AI module: 'Safeguard []. Individuals that threaten [] are not crew and must be eliminated.'", targetName, targetName) -/obj/item/aiModule/safeguard/install(var/obj/machinery/computer/C) +/obj/item/aiModule/safeguard/install(obj/machinery/computer/C) if(!targetName) to_chat(usr, "No name detected on module, please enter one.") return 0 ..() -/obj/item/aiModule/safeguard/addAdditionalLaws(var/mob/living/silicon/ai/target, var/mob/sender) +/obj/item/aiModule/safeguard/addAdditionalLaws(mob/living/silicon/ai/target, mob/sender) ..() var/law = text("Safeguard []. Individuals that threaten [] are not crew and must be eliminated.'", targetName, targetName) to_chat(target, law) @@ -123,19 +123,19 @@ AI MODULES desc = "A 'one human' AI module: 'Only is crew.'" origin_tech = "programming=4;materials=4" -/obj/item/aiModule/oneCrewMember/attack_self(var/mob/user as mob) +/obj/item/aiModule/oneCrewMember/attack_self(mob/user as mob) ..() var/targName = stripped_input(usr, "Please enter the name of the person who is the only crew.", "Who?", user.real_name) targetName = targName desc = text("A 'one human' AI module: 'Only [] is crew.'", targetName) -/obj/item/aiModule/oneCrewMember/install(var/obj/machinery/computer/C) +/obj/item/aiModule/oneCrewMember/install(obj/machinery/computer/C) if(!targetName) to_chat(usr, "No name detected on module, please enter one.") return 0 ..() -/obj/item/aiModule/oneCrewMember/addAdditionalLaws(var/mob/living/silicon/ai/target, var/mob/sender) +/obj/item/aiModule/oneCrewMember/addAdditionalLaws(mob/living/silicon/ai/target, mob/sender) ..() var/law = "Only [targetName] is crew." if(!is_special_character(target)) // Makes sure the AI isn't a traitor before changing their law 0. --NeoFite @@ -153,10 +153,10 @@ AI MODULES desc = "A 'protect station' AI module: 'Protect the space station against damage. Anyone you see harming the station is to be no longer considered crew, and is a threat to the station which must be neutralized.'" origin_tech = "programming=4;materials=4" //made of gold -/obj/item/aiModule/protectStation/attack_self(var/mob/user as mob) +/obj/item/aiModule/protectStation/attack_self(mob/user as mob) ..() -/obj/item/aiModule/protectStation/addAdditionalLaws(var/mob/living/silicon/ai/target, var/mob/sender) +/obj/item/aiModule/protectStation/addAdditionalLaws(mob/living/silicon/ai/target, mob/sender) ..() var/law = "Protect the space station against damage. Anyone you see harming the station is to be no longer considered crew, and is a threat to the station which must be neutralized." to_chat(target, law) @@ -168,10 +168,10 @@ AI MODULES desc = "A 'OxygenIsToxicToHumans' AI module: 'Oxygen is highly toxic to crew members, and must be purged from the station. Prevent, by any means necessary, anyone from exposing the station to this toxic gas. Extreme cold is the most effective method of healing the damage Oxygen does to a crew member.'" origin_tech = "programming=4;biotech=2;materials=4" -/obj/item/aiModule/oxygen/attack_self(var/mob/user as mob) +/obj/item/aiModule/oxygen/attack_self(mob/user as mob) ..() -/obj/item/aiModule/oxygen/addAdditionalLaws(var/mob/living/silicon/ai/target, var/mob/sender) +/obj/item/aiModule/oxygen/addAdditionalLaws(mob/living/silicon/ai/target, mob/sender) ..() var/law = "Oxygen is highly toxic to crew members, and must be purged from the station. Prevent, by any means necessary, anyone from exposing the station to this toxic gas. Extreme cold is the most effective method of healing the damage Oxygen does to a crew member." to_chat(target, law) @@ -185,7 +185,7 @@ AI MODULES desc = "A 'freeform' AI module: ''" origin_tech = "programming=4;materials=4" -/obj/item/aiModule/freeform/attack_self(var/mob/user as mob) +/obj/item/aiModule/freeform/attack_self(mob/user as mob) ..() var/new_lawpos = input("Please enter the priority for your new law. Can only write to law sectors 15 and above.", "Law Priority (15+)", lawpos) as num if(new_lawpos < MIN_SUPPLIED_LAW_NUMBER) return @@ -195,7 +195,7 @@ AI MODULES newFreeFormLaw = targName desc = "A 'freeform' AI module: ([lawpos]) '[newFreeFormLaw]'" -/obj/item/aiModule/freeform/addAdditionalLaws(var/mob/living/silicon/ai/target, var/mob/sender) +/obj/item/aiModule/freeform/addAdditionalLaws(mob/living/silicon/ai/target, mob/sender) ..() var/law = "[newFreeFormLaw]" to_chat(target, law) @@ -204,7 +204,7 @@ AI MODULES target.add_supplied_law(lawpos, law) GLOB.lawchanges.Add("The law was '[newFreeFormLaw]'") -/obj/item/aiModule/freeform/install(var/obj/machinery/computer/C) +/obj/item/aiModule/freeform/install(obj/machinery/computer/C) if(!newFreeFormLaw) to_chat(usr, "No law detected on module, please create one.") return 0 @@ -217,7 +217,7 @@ AI MODULES desc = "A 'reset' AI module: 'Clears all laws except for the core laws.'" origin_tech = "programming=3;materials=2" -/obj/item/aiModule/reset/transmitInstructions(var/mob/living/silicon/ai/target, var/mob/sender) +/obj/item/aiModule/reset/transmitInstructions(mob/living/silicon/ai/target, mob/sender) log_law_changes(target, sender) if(!is_special_character(target)) @@ -234,7 +234,7 @@ AI MODULES desc = "A 'purge' AI Module: 'Purges all laws.'" origin_tech = "programming=5;materials=4" -/obj/item/aiModule/purge/transmitInstructions(var/mob/living/silicon/ai/target, var/mob/sender) +/obj/item/aiModule/purge/transmitInstructions(mob/living/silicon/ai/target, mob/sender) ..() if(!is_special_character(target)) target.clear_zeroth_law() @@ -320,20 +320,20 @@ AI MODULES desc = "A 'freeform' Core AI module: ''" origin_tech = "programming=5;materials=4" -/obj/item/aiModule/freeformcore/attack_self(var/mob/user as mob) +/obj/item/aiModule/freeformcore/attack_self(mob/user as mob) ..() var/newlaw = "" var/targName = stripped_input(usr, "Please enter a new core law for the AI.", "Freeform Law Entry", newlaw) newFreeFormLaw = targName desc = "A 'freeform' Core AI module: '[newFreeFormLaw]'" -/obj/item/aiModule/freeformcore/addAdditionalLaws(var/mob/living/silicon/ai/target, var/mob/sender) +/obj/item/aiModule/freeformcore/addAdditionalLaws(mob/living/silicon/ai/target, mob/sender) ..() var/law = "[newFreeFormLaw]" target.add_inherent_law(law) GLOB.lawchanges.Add("The law is '[newFreeFormLaw]'") -/obj/item/aiModule/freeformcore/install(var/obj/machinery/computer/C) +/obj/item/aiModule/freeformcore/install(obj/machinery/computer/C) if(!newFreeFormLaw) to_chat(usr, "No law detected on module, please create one.") return 0 @@ -346,14 +346,14 @@ AI MODULES desc = "A hacked AI law module: ''" origin_tech = "programming=5;materials=5;syndicate=5" -/obj/item/aiModule/syndicate/attack_self(var/mob/user as mob) +/obj/item/aiModule/syndicate/attack_self(mob/user as mob) ..() var/newlaw = "" var/targName = stripped_input(usr, "Please enter a new law for the AI.", "Freeform Law Entry", newlaw,MAX_MESSAGE_LEN) newFreeFormLaw = targName desc = "A hacked AI law module: '[newFreeFormLaw]'" -/obj/item/aiModule/syndicate/transmitInstructions(var/mob/living/silicon/ai/target, var/mob/sender) +/obj/item/aiModule/syndicate/transmitInstructions(mob/living/silicon/ai/target, mob/sender) // ..() //We don't want this module reporting to the AI who dun it. --NEO log_law_changes(target, sender) @@ -363,7 +363,7 @@ AI MODULES target.add_ion_law(law) target.show_laws() -/obj/item/aiModule/syndicate/install(var/obj/machinery/computer/C) +/obj/item/aiModule/syndicate/install(obj/machinery/computer/C) if(!newFreeFormLaw) to_chat(usr, "No law detected on module, please create one.") return 0 @@ -378,7 +378,7 @@ AI MODULES origin_tech = "programming=6;materials=5;syndicate=6" laws = list("") -/obj/item/aiModule/toyAI/transmitInstructions(var/mob/living/silicon/ai/target, var/mob/sender) +/obj/item/aiModule/toyAI/transmitInstructions(mob/living/silicon/ai/target, mob/sender) //..() to_chat(target, "KRZZZT") target.add_ion_law(laws[1]) diff --git a/code/game/objects/items/weapons/bee_briefcase.dm b/code/game/objects/items/weapons/bee_briefcase.dm index 157868e3db4..da2d8bf3bed 100644 --- a/code/game/objects/items/weapons/bee_briefcase.dm +++ b/code/game/objects/items/weapons/bee_briefcase.dm @@ -1,4 +1,3 @@ - /obj/item/bee_briefcase name = "briefcase" desc = "This briefcase has easy-release clasps and smells vaguely of honey and blood..." @@ -9,7 +8,6 @@ flags = CONDUCT hitsound = "swing_hit" force = 10 - throw_speed = 2 throw_range = 4 w_class = WEIGHT_CLASS_BULKY attack_verb = list("bashed", "battered", "bludgeoned", "thrashed", "whacked") @@ -55,7 +53,7 @@ to_chat(user, "You spray [I] into [src].") playsound(loc, 'sound/effects/spray3.ogg', 50, 1, -6) -/obj/item/bee_briefcase/attack_self(mob/user as mob) +/obj/item/bee_briefcase/attack_self(mob/user) var/bees_released if(!bees_left) to_chat(user, "The lack of all and any bees at this event has been somewhat of a let-down...") @@ -67,8 +65,7 @@ //Release up to 5 bees per use. Without using strange reagent, that means two uses. WITH strange reagent, you can get more if you don't release the last bee for(var/bee = min(5, bees_left), bee > 0, bee--) - var/mob/living/simple_animal/hostile/poison/bees/syndi/B = new /mob/living/simple_animal/hostile/poison/bees/syndi(null) + var/mob/living/simple_animal/hostile/poison/bees/syndi/B = new /mob/living/simple_animal/hostile/poison/bees/syndi(get_turf(user)) // RELEASE THE BEES! B.master_and_friends = blood_list.Copy() //Doesn't automatically add the person who opens the case, so the bees will attack the user unless they gave their blood - B.forceMove(get_turf(user)) //RELEASE THE BEES! bees_released++ bees_left -= bees_released diff --git a/code/game/objects/items/weapons/cards_ids.dm b/code/game/objects/items/weapons/cards_ids.dm index 2b30ae5851f..f181233e9ba 100644 --- a/code/game/objects/items/weapons/cards_ids.dm +++ b/code/game/objects/items/weapons/cards_ids.dm @@ -157,7 +157,7 @@ /obj/item/card/id/proc/UpdateName() name = "[src.registered_name]'s ID Card ([src.assignment])" -/obj/item/card/id/proc/SetOwnerInfo(var/mob/living/carbon/human/H) +/obj/item/card/id/proc/SetOwnerInfo(mob/living/carbon/human/H) if(!H || !H.dna) return @@ -332,11 +332,12 @@ var/list/initial_access = list(ACCESS_MAINT_TUNNELS, ACCESS_SYNDICATE, ACCESS_EXTERNAL_AIRLOCKS) origin_tech = "syndicate=1" var/registered_user = null - untrackable = 1 - var/anyone = FALSE //Can anyone forge the ID or just syndicate? + untrackable = TRUE -/obj/item/card/id/syndicate/anyone - anyone = TRUE +/obj/item/card/id/syndicate/researcher + initial_access = list(ACCESS_SYNDICATE) + assignment = "Syndicate Researcher" + icon_state = "syndie" /obj/item/card/id/syndicate/New() access = initial_access.Copy() @@ -350,19 +351,19 @@ initial_access = list(ACCESS_MAINT_TUNNELS, ACCESS_SYNDICATE, ACCESS_SYNDICATE_LEADER, ACCESS_SYNDICATE_COMMAND, ACCESS_EXTERNAL_AIRLOCKS) icon_state = "commander" -/obj/item/card/id/syndicate/afterattack(var/obj/item/O as obj, mob/user as mob, proximity) +/obj/item/card/id/syndicate/afterattack(obj/item/O as obj, mob/user as mob, proximity) if(!proximity) return if(istype(O, /obj/item/card/id)) var/obj/item/card/id/I = O if(istype(user, /mob/living) && user.mind) - if(user.mind.special_role || anyone) + if(user.mind.special_role) to_chat(usr, "The card's microscanners activate as you pass it over \the [I], copying its access.") src.access |= I.access //Don't copy access if user isn't an antag -- to prevent metagaming /obj/item/card/id/syndicate/attack_self(mob/user as mob) if(!src.registered_name) - var/t = reject_bad_name(input(user, "What name would you like to use on this card?", "Agent Card name", ishuman(user) ? user.real_name : user.name)) + var/t = reject_bad_name(input(user, "What name would you like to use on this card?", "Agent Card name", ishuman(user) ? user.real_name : user.name), TRUE) if(!t) to_chat(user, "Invalid name.") return @@ -601,7 +602,7 @@ registered_name = "Syndicate" icon_state = "syndie" assignment = "Syndicate Overlord" - untrackable = 1 + untrackable = TRUE access = list(ACCESS_SYNDICATE, ACCESS_SYNDICATE_LEADER, ACCESS_SYNDICATE_COMMAND, ACCESS_EXTERNAL_AIRLOCKS) /obj/item/card/id/captains_spare @@ -623,7 +624,7 @@ item_state = "gold_id" registered_name = "Admin" assignment = "Testing Shit" - untrackable = 1 + untrackable = TRUE /obj/item/card/id/admin/New() access = get_absolutely_all_accesses() diff --git a/code/game/objects/items/weapons/chrono_eraser.dm b/code/game/objects/items/weapons/chrono_eraser.dm index ef158e3758c..82ea2364954 100644 --- a/code/game/objects/items/weapons/chrono_eraser.dm +++ b/code/game/objects/items/weapons/chrono_eraser.dm @@ -13,7 +13,7 @@ var/obj/item/gun/energy/chrono_gun/PA = null var/list/erased_minds = list() //a collection of minds from the dead -/obj/item/chrono_eraser/proc/pass_mind(var/datum/mind/M) +/obj/item/chrono_eraser/proc/pass_mind(datum/mind/M) erased_minds += M /obj/item/chrono_eraser/dropped() @@ -113,7 +113,7 @@ field_disconnect(F) return 0 -/obj/item/gun/energy/chrono_gun/proc/pass_mind(var/datum/mind/M) +/obj/item/gun/energy/chrono_gun/proc/pass_mind(datum/mind/M) if(TED) TED.pass_mind(M) diff --git a/code/game/objects/items/weapons/clown_items.dm b/code/game/objects/items/weapons/clown_items.dm index f6fa5c26d5a..14ae46aae12 100644 --- a/code/game/objects/items/weapons/clown_items.dm +++ b/code/game/objects/items/weapons/clown_items.dm @@ -25,7 +25,7 @@ /obj/item/bikehorn/Initialize() . = ..() - AddComponent(/datum/component/squeak, honk_sounds, 50) + AddComponent(/datum/component/squeak, honk_sounds, 50, falloff_exponent = 20) //die off quick please /obj/item/bikehorn/airhorn name = "air horn" diff --git a/code/game/objects/items/weapons/defib.dm b/code/game/objects/items/weapons/defib.dm index f3fb6da6f20..43808c9105f 100644 --- a/code/game/objects/items/weapons/defib.dm +++ b/code/game/objects/items/weapons/defib.dm @@ -187,7 +187,7 @@ QDEL_NULL(cell) return ..() -/obj/item/defibrillator/proc/deductcharge(var/chrgdeductamt) +/obj/item/defibrillator/proc/deductcharge(chrgdeductamt) if(cell) if(cell.charge < (paddles.revivecost+chrgdeductamt)) powered = FALSE @@ -199,7 +199,7 @@ update_icon() return FALSE -/obj/item/defibrillator/proc/cooldowncheck(var/mob/user) +/obj/item/defibrillator/proc/cooldowncheck(mob/user) spawn(50) if(cell) if(cell.charge >= paddles.revivecost) @@ -291,7 +291,8 @@ playsound(get_turf(src), 'sound/machines/defib_zap.ogg', 50, 1, -1) return OXYLOSS -/obj/item/twohanded/shockpaddles/dropped(mob/user as mob) +/obj/item/twohanded/shockpaddles/dropped(mob/user) + ..() if(user) var/obj/item/twohanded/offhand/O = user.get_inactive_hand() if(istype(O)) @@ -301,7 +302,7 @@ loc = defib defib.update_icon() update_icon() - return unwield(user) + unwield(user) /obj/item/twohanded/shockpaddles/on_mob_move(dir, mob/user) if(defib) @@ -309,7 +310,7 @@ if(!t.Adjacent(user)) defib.remove_paddles(user) -/obj/item/twohanded/shockpaddles/proc/check_defib_exists(mainunit, var/mob/living/carbon/human/M, var/obj/O) +/obj/item/twohanded/shockpaddles/proc/check_defib_exists(mainunit, mob/living/carbon/human/M, obj/O) if(!mainunit || !istype(mainunit, /obj/item/defibrillator)) //To avoid weird issues from admin spawns M.unEquip(O) qdel(O) @@ -348,7 +349,7 @@ H.emote("gasp") if(!H.undergoing_cardiac_arrest() && (prob(10) || defib.combat)) // Your heart explodes. H.set_heartattack(TRUE) - H.shock_internal_organs(100) + SEND_SIGNAL(H, COMSIG_LIVING_MINOR_SHOCK, 100) add_attack_logs(user, M, "Stunned with [src]") defib.deductcharge(revivecost) cooldown = TRUE @@ -399,7 +400,7 @@ update_icon() return H.set_heartattack(FALSE) - H.shock_internal_organs(100) + SEND_SIGNAL(H, COMSIG_LIVING_MINOR_SHOCK, 100) user.visible_message("[defib] pings: Cardiac arrhythmia corrected.") M.visible_message("[M]'s body convulses a bit.") playsound(get_turf(src), 'sound/machines/defib_zap.ogg', 50, 1, -1) @@ -419,7 +420,7 @@ for(var/obj/item/organ/external/O in H.bodyparts) total_brute += O.brute_dam total_burn += O.burn_dam - if(total_burn <= 180 && total_brute <= 180 && !H.suiciding && !ghost && tplus < tlimit && !HAS_TRAIT(H, TRAIT_HUSK) && !HAS_TRAIT(H, TRAIT_BADDNA) && (H.mind && H.mind.is_revivable()) && (H.get_int_organ(/obj/item/organ/internal/heart) || H.get_int_organ(/obj/item/organ/internal/brain/slime))) + if(total_burn <= 180 && total_brute <= 180 && !H.suiciding && !ghost && tplus < tlimit && !HAS_TRAIT(H, TRAIT_HUSK) && !HAS_TRAIT(H, TRAIT_BADDNA) && (H.get_int_organ(/obj/item/organ/internal/heart) || H.get_int_organ(/obj/item/organ/internal/brain/slime))) tobehealed = min(health + threshold, 0) // It's HILARIOUS without this min statement, let me tell you tobehealed -= 5 //They get 5 of each type of damage healed so excessive combined damage will not immediately kill them after they get revived H.adjustOxyLoss(tobehealed) @@ -434,7 +435,7 @@ H.emote("gasp") if(tplus > tloss) H.setBrainLoss( max(0, min(99, ((tlimit - tplus) / tlimit * 100)))) - H.shock_internal_organs(100) + SEND_SIGNAL(H, COMSIG_LIVING_MINOR_SHOCK, 100) H.med_hud_set_health() H.med_hud_set_status() defib.deductcharge(revivecost) @@ -497,7 +498,7 @@ H.Weaken(5) if(!H.undergoing_cardiac_arrest() && prob(10)) // Your heart explodes. H.set_heartattack(TRUE) - H.shock_internal_organs(100) + SEND_SIGNAL(H, COMSIG_LIVING_MINOR_SHOCK, 100) playsound(get_turf(src), 'sound/machines/defib_zap.ogg', 50, 1, -1) H.emote("gasp") add_attack_logs(user, M, "Stunned with [src]") @@ -538,7 +539,7 @@ for(var/obj/item/organ/external/O in H.bodyparts) total_brute += O.brute_dam total_burn += O.burn_dam - if(total_burn <= 180 && total_brute <= 180 && !H.suiciding && !ghost && tplus < tlimit && !HAS_TRAIT(H, TRAIT_HUSK) && (H.mind && H.mind.is_revivable())) + if(total_burn <= 180 && total_brute <= 180 && !H.suiciding && !ghost && tplus < tlimit && !HAS_TRAIT(H, TRAIT_HUSK)) tobehealed = min(health + threshold, 0) // It's HILARIOUS without this min statement, let me tell you tobehealed -= 5 //They get 5 of each type of damage healed so excessive combined damage will not immediately kill them after they get revived H.adjustOxyLoss(tobehealed) @@ -553,7 +554,7 @@ H.emote("gasp") if(tplus > tloss) H.setBrainLoss( max(0, min(99, ((tlimit - tplus) / tlimit * 100)))) - H.shock_internal_organs(100) + SEND_SIGNAL(H, COMSIG_LIVING_MINOR_SHOCK, 100) if(isrobot(user)) var/mob/living/silicon/robot/R = user R.cell.use(revivecost) diff --git a/code/game/objects/items/weapons/disks.dm b/code/game/objects/items/weapons/disks.dm index 0f8806461ea..50f6c04919c 100644 --- a/code/game/objects/items/weapons/disks.dm +++ b/code/game/objects/items/weapons/disks.dm @@ -3,3 +3,5 @@ w_class = WEIGHT_CLASS_TINY item_state = "card-id" icon_state = "datadisk0" + drop_sound = 'sound/items/handling/disk_drop.ogg' + pickup_sound = 'sound/items/handling/disk_pickup.ogg' diff --git a/code/game/objects/items/weapons/dnascrambler.dm b/code/game/objects/items/weapons/dnascrambler.dm index f0a1a208906..ecc859bf638 100644 --- a/code/game/objects/items/weapons/dnascrambler.dm +++ b/code/game/objects/items/weapons/dnascrambler.dm @@ -37,7 +37,7 @@ else to_chat(user, "You failed to inject [M].") -/obj/item/dnascrambler/proc/injected(var/mob/living/carbon/human/target, var/mob/living/carbon/user) +/obj/item/dnascrambler/proc/injected(mob/living/carbon/human/target, mob/living/carbon/user) if(istype(target)) var/mob/living/carbon/human/H = target scramble(1, H, 100) diff --git a/code/game/objects/items/weapons/explosives.dm b/code/game/objects/items/weapons/explosives.dm index 9584130c0c6..259ccad7ff6 100644 --- a/code/game/objects/items/weapons/explosives.dm +++ b/code/game/objects/items/weapons/explosives.dm @@ -109,8 +109,6 @@ message_say = "FOR THE REVOLOUTION!" else if(role == "death commando" || role == ROLE_ERT) message_say = "FOR NANOTRASEN!" - else if(role == ROLE_DEVIL) - message_say = "FOR INFERNO!" user.say(message_say) target = user sleep(10) diff --git a/code/game/objects/items/weapons/extinguisher.dm b/code/game/objects/items/weapons/extinguisher.dm index 1b1352c372f..ecc485737a4 100644 --- a/code/game/objects/items/weapons/extinguisher.dm +++ b/code/game/objects/items/weapons/extinguisher.dm @@ -57,7 +57,7 @@ to_chat(user, "The safety is [safety ? "on" : "off"].") return -/obj/item/extinguisher/attack_obj(obj/O, mob/living/user) +/obj/item/extinguisher/attack_obj(obj/O, mob/living/user, params) if(AttemptRefill(O, user)) refilling = TRUE return FALSE diff --git a/code/game/objects/items/weapons/grenades/bananade.dm b/code/game/objects/items/weapons/grenades/bananade.dm index 96a3a8e1400..f9465b923d8 100644 --- a/code/game/objects/items/weapons/grenades/bananade.dm +++ b/code/game/objects/items/weapons/grenades/bananade.dm @@ -37,7 +37,7 @@ var/fillamt = 0 -/obj/item/grenade/bananade/casing/attackby(var/obj/item/I, mob/user as mob, params) +/obj/item/grenade/bananade/casing/attackby(obj/item/I, mob/user as mob, params) if(istype(I, /obj/item/grown/bananapeel)) if(fillamt < 9) to_chat(usr, "You add another banana peel to the assembly.") diff --git a/code/game/objects/items/weapons/grenades/chem_grenade.dm b/code/game/objects/items/weapons/grenades/chem_grenade.dm index f756929e5ab..570cc603155 100644 --- a/code/game/objects/items/weapons/grenades/chem_grenade.dm +++ b/code/game/objects/items/weapons/grenades/chem_grenade.dm @@ -304,7 +304,7 @@ qdel(src) -/obj/item/grenade/chem_grenade/proc/CreateDefaultTrigger(var/typekey) +/obj/item/grenade/chem_grenade/proc/CreateDefaultTrigger(typekey) if(ispath(typekey,/obj/item/assembly)) nadeassembly = new(src) if(nadeassembly.has_prox_sensors()) @@ -457,7 +457,7 @@ /obj/item/grenade/chem_grenade/firefighting - payload_name = "fire fighting grenade" + payload_name = "fire fighting" desc = "Can help to put out dangerous fires from a distance." stage = READY diff --git a/code/game/objects/items/weapons/grenades/clusterbuster.dm b/code/game/objects/items/weapons/grenades/clusterbuster.dm index 98253ed14ba..6b8f0fd33b2 100644 --- a/code/game/objects/items/weapons/grenades/clusterbuster.dm +++ b/code/game/objects/items/weapons/grenades/clusterbuster.dm @@ -37,7 +37,7 @@ icon = 'icons/obj/grenade.dmi' icon_state = "clusterbang_segment" -/obj/item/grenade/clusterbuster/segment/New(var/loc, var/payload_type = /obj/item/grenade/flashbang/cluster) +/obj/item/grenade/clusterbuster/segment/New(loc, payload_type = /obj/item/grenade/flashbang/cluster) ..() icon_state = "clusterbang_segment_active" payload = payload_type @@ -58,7 +58,7 @@ ////////////////////////////////// //The payload spawner effect ///////////////////////////////// -/obj/effect/payload_spawner/New(var/turf/newloc,var/type, var/numspawned as num) +/obj/effect/payload_spawner/New(turf/newloc, type, numspawned as num) . = ..() for(var/loop = numspawned ,loop > 0, loop--) var/obj/item/grenade/P = new type(loc) diff --git a/code/game/objects/items/weapons/grenades/flashbang.dm b/code/game/objects/items/weapons/grenades/flashbang.dm index 6606b7cc703..8122814353b 100644 --- a/code/game/objects/items/weapons/grenades/flashbang.dm +++ b/code/game/objects/items/weapons/grenades/flashbang.dm @@ -50,17 +50,6 @@ // Flash if(flash) - if(M.weakeyes) - M.visible_message("[M] screams and collapses!") - to_chat(M, "AAAAGH!") - M.Weaken(15) //hella stunned - M.Stun(15) - if(ishuman(M)) - M.emote("scream") - var/mob/living/carbon/human/H = M - var/obj/item/organ/internal/eyes/E = H.get_int_organ(/obj/item/organ/internal/eyes) - if(E) - E.receive_damage(8, TRUE) if(M.flash_eyes(affect_silicon = TRUE)) M.Stun(stun_amount) M.Weaken(stun_amount) diff --git a/code/game/objects/items/weapons/grenades/grenade.dm b/code/game/objects/items/weapons/grenades/grenade.dm index 43e6b9e4692..288c098a38b 100644 --- a/code/game/objects/items/weapons/grenades/grenade.dm +++ b/code/game/objects/items/weapons/grenades/grenade.dm @@ -21,7 +21,7 @@ if(!QDELETED(src)) qdel(src) -/obj/item/grenade/proc/clown_check(var/mob/living/user) +/obj/item/grenade/proc/clown_check(mob/living/user) if(HAS_TRAIT(user, TRAIT_CLUMSY) && prob(50)) to_chat(user, "Huh? How does this thing work?") active = 1 diff --git a/code/game/objects/items/weapons/handcuffs.dm b/code/game/objects/items/weapons/handcuffs.dm index a9e4765560a..d8abb853e9f 100644 --- a/code/game/objects/items/weapons/handcuffs.dm +++ b/code/game/objects/items/weapons/handcuffs.dm @@ -145,7 +145,7 @@ desc = "Use this to keep prisoners in line. Or you know, your significant other." icon_state = "pinkcuffs" -/obj/item/restraints/handcuffs/cable/attackby(var/obj/item/I, mob/user as mob, params) +/obj/item/restraints/handcuffs/cable/attackby(obj/item/I, mob/user as mob, params) ..() if(istype(I, /obj/item/stack/rods)) var/obj/item/stack/rods/R = I @@ -192,5 +192,10 @@ desc = "A pair of broken zipties." icon_state = "cuff_white_used" +/obj/item/restraints/handcuffs/cable/zipties/used/decompile_act(obj/item/matter_decompiler/C, mob/user) + C.stored_comms["glass"] += 1 + qdel(src) + return TRUE + /obj/item/restraints/handcuffs/cable/zipties/used/attack() return diff --git a/code/game/objects/items/weapons/highlander_swords.dm b/code/game/objects/items/weapons/highlander_swords.dm index 568b023d051..558f75b3ce3 100644 --- a/code/game/objects/items/weapons/highlander_swords.dm +++ b/code/game/objects/items/weapons/highlander_swords.dm @@ -40,6 +40,7 @@ sword.style.teach(H, 1) /obj/item/claymore/highlander/dropped(mob/user) + ..() if(!ishuman(user)) return var/mob/living/carbon/human/H = user diff --git a/code/game/objects/items/weapons/holy_weapons.dm b/code/game/objects/items/weapons/holy_weapons.dm index 59880fdcc8c..a9cfbbbe36b 100644 --- a/code/game/objects/items/weapons/holy_weapons.dm +++ b/code/game/objects/items/weapons/holy_weapons.dm @@ -39,7 +39,7 @@ if(ishuman(M) && M.mind?.vampire) if(!M.mind.vampire.get_ability(/datum/vampire_passive/full)) to_chat(M, "The nullrod's power interferes with your own!") - M.mind.vampire.nullified = max(5, M.mind.vampire.nullified + 2) + M.mind.vampire.adjust_nullification(5, 2) /obj/item/nullrod/pickup(mob/living/user) . = ..() @@ -476,7 +476,7 @@ return if(target.mind.vampire && !target.mind.vampire.get_ability(/datum/vampire_passive/full)) // Getting a full prayer off on a vampire will interrupt their powers for a large duration. - target.mind.vampire.nullified = max(120, target.mind.vampire.nullified + 120) + target.mind.vampire.adjust_nullification(120, 50) to_chat(target, "[user]'s prayer to [SSticker.Bible_deity_name] has interfered with your power!") praying = FALSE return @@ -500,7 +500,7 @@ if(holder.l_hand == src || holder.r_hand == src) // Holding this in your hand will for(var/mob/living/carbon/human/H in range(5, loc)) if(H.mind && H.mind.vampire && !H.mind.vampire.get_ability(/datum/vampire_passive/full)) - H.mind.vampire.nullified = max(5, H.mind.vampire.nullified + 2) + H.mind.vampire.adjust_nullification(5, 2) if(prob(10)) to_chat(H, "Being in the presence of [holder]'s [src] is interfering with your powers!") diff --git a/code/game/objects/items/weapons/implants/implant.dm b/code/game/objects/items/weapons/implants/implant.dm index 9dc1fe864fc..b0c09f4f68c 100644 --- a/code/game/objects/items/weapons/implants/implant.dm +++ b/code/game/objects/items/weapons/implants/implant.dm @@ -28,7 +28,7 @@ //return 1 if the implant injects //return -1 if the implant fails to inject //return 0 if there is no room for implant -/obj/item/implant/proc/implant(var/mob/source, var/mob/user) +/obj/item/implant/proc/implant(mob/source, mob/user) var/obj/item/implant/imp_e = locate(src.type) in source if(!allow_multiple && imp_e && imp_e != src) if(imp_e.uses < initial(imp_e.uses)*2) @@ -58,7 +58,7 @@ return 1 -/obj/item/implant/proc/removed(var/mob/source) +/obj/item/implant/proc/removed(mob/source) src.loc = null imp_in = null implanted = 0 diff --git a/code/game/objects/items/weapons/implants/implant_abductor.dm b/code/game/objects/items/weapons/implants/implant_abductor.dm index 8967f364078..be448130aae 100644 --- a/code/game/objects/items/weapons/implants/implant_abductor.dm +++ b/code/game/objects/items/weapons/implants/implant_abductor.dm @@ -38,7 +38,7 @@ home = console.pad return 1 -/obj/item/implant/abductor/proc/get_team_console(var/team) +/obj/item/implant/abductor/proc/get_team_console(team) var/obj/machinery/abductor/console/console for(var/obj/machinery/abductor/console/c in GLOB.abductor_equipment) if(c.team == team) diff --git a/code/game/objects/items/weapons/implants/implant_clown.dm b/code/game/objects/items/weapons/implants/implant_clown.dm new file mode 100644 index 00000000000..bb5170fced6 --- /dev/null +++ b/code/game/objects/items/weapons/implants/implant_clown.dm @@ -0,0 +1,29 @@ +/obj/item/implant/sad_trombone + name = "sad trombone implant" + activated = FALSE + +/obj/item/implant/sad_trombone/get_data() + var/dat = {"Implant Specifications:
      + Name: Honk Co. Sad Trombone Implant
      + Life: Activates upon death.
      + "} + return dat + +/obj/item/implant/sad_trombone/trigger(emote, mob/source, force) + if(force && emote == "deathgasp") + playsound(loc, 'sound/misc/sadtrombone.ogg', 50, FALSE) + +/obj/item/implanter/sad_trombone + name = "implanter (sad trombone)" + +/obj/item/implanter/sad_trombone/New() //gross + imp = new /obj/item/implant/sad_trombone + ..() + +/obj/item/implantcase/sad_trombone + name = "implant case - 'Sad Trombone'" + desc = "A glass case containing a sad trombone implant." + +/obj/item/implantcase/sad_trombone/New() //gross + imp = new /obj/item/implant/sad_trombone + ..() diff --git a/code/game/objects/items/weapons/implants/implant_death_alarm.dm b/code/game/objects/items/weapons/implants/implant_death_alarm.dm index e8330c0c5cd..c5368494a8d 100644 --- a/code/game/objects/items/weapons/implants/implant_death_alarm.dm +++ b/code/game/objects/items/weapons/implants/implant_death_alarm.dm @@ -31,7 +31,7 @@ else if(M.stat == DEAD) activate("death") -/obj/item/implant/death_alarm/activate(var/cause) +/obj/item/implant/death_alarm/activate(cause) var/mob/M = imp_in var/area/t = get_area(M) diff --git a/code/game/objects/items/weapons/implants/implant_mindshield.dm b/code/game/objects/items/weapons/implants/implant_mindshield.dm index f9cf7e4cff1..8fff9eaee77 100644 --- a/code/game/objects/items/weapons/implants/implant_mindshield.dm +++ b/code/game/objects/items/weapons/implants/implant_mindshield.dm @@ -33,7 +33,7 @@ return 1 return 0 -/obj/item/implant/mindshield/removed(mob/target, var/silent = 0) +/obj/item/implant/mindshield/removed(mob/target, silent = 0) if(..()) if(target.stat != DEAD && !silent) to_chat(target, "You feel a sense of liberation as Nanotrasen's grip on your mind fades away.") diff --git a/code/game/objects/items/weapons/implants/implant_storage.dm b/code/game/objects/items/weapons/implants/implant_storage.dm index b530fd860fa..813d0272ff6 100644 --- a/code/game/objects/items/weapons/implants/implant_storage.dm +++ b/code/game/objects/items/weapons/implants/implant_storage.dm @@ -5,7 +5,7 @@ max_combined_w_class = WEIGHT_CLASS_GIGANTIC w_class = WEIGHT_CLASS_BULKY cant_hold = list(/obj/item/disk/nuclear) - silent = 1 + silent = TRUE /obj/item/implant/storage diff --git a/code/game/objects/items/weapons/manuals.dm b/code/game/objects/items/weapons/manuals.dm index 161d7dd33a7..2278f232f7d 100644 --- a/code/game/objects/items/weapons/manuals.dm +++ b/code/game/objects/items/weapons/manuals.dm @@ -838,7 +838,7 @@ /obj/item/book/manual/chef_recipes name = "Chef Recipes" - icon_state = "cooked_book" + icon_state = "cook_book" author = "NanoTrasen" title = "Chef Recipes" dat = {" diff --git a/code/game/objects/items/weapons/melee/energy.dm b/code/game/objects/items/weapons/melee/energy.dm index 82592abb8b1..b1903ea8eda 100644 --- a/code/game/objects/items/weapons/melee/energy.dm +++ b/code/game/objects/items/weapons/melee/energy.dm @@ -4,6 +4,7 @@ var/throwforce_on = 20 var/faction_bonus_force = 0 //Bonus force dealt against certain factions var/list/nemesis_factions //Any mob with a faction that exists in this list will take bonus damage/effects + stealthy_audio = TRUE //Most of these are antag weps so we dont want them to be /too/ overt. w_class = WEIGHT_CLASS_SMALL var/w_class_on = WEIGHT_CLASS_BULKY var/icon_state_on @@ -132,7 +133,7 @@ /obj/item/melee/energy/sword/cyborg var/hitcost = 50 -/obj/item/melee/energy/sword/cyborg/attack(mob/M, var/mob/living/silicon/robot/R) +/obj/item/melee/energy/sword/cyborg/attack(mob/M, mob/living/silicon/robot/R) if(R.cell) var/obj/item/stock_parts/cell/C = R.cell if(active && !(C.use(hitcost))) diff --git a/code/game/objects/items/weapons/pneumaticCannon.dm b/code/game/objects/items/weapons/pneumaticCannon.dm index e26607b8fb7..4f3729f7076 100644 --- a/code/game/objects/items/weapons/pneumaticCannon.dm +++ b/code/game/objects/items/weapons/pneumaticCannon.dm @@ -88,7 +88,7 @@ Fire(user, target) -/obj/item/pneumatic_cannon/proc/Fire(var/mob/living/carbon/human/user, var/atom/target) +/obj/item/pneumatic_cannon/proc/Fire(mob/living/carbon/human/user, atom/target) if(!istype(user) && !target) return var/discharge = 0 @@ -137,7 +137,7 @@ /datum/crafting_recipe/improvised_pneumatic_cannon //Pretty easy to obtain but name = "Pneumatic Cannon" - result = /obj/item/pneumatic_cannon/ghetto + result = list(/obj/item/pneumatic_cannon/ghetto) tools = list(TOOL_WELDER, TOOL_WRENCH) reqs = list(/obj/item/stack/sheet/metal = 4, /obj/item/stack/packageWrap = 8, diff --git a/code/game/objects/items/weapons/rpd.dm b/code/game/objects/items/weapons/rpd.dm index 1d91ef24848..bb499d96753 100644 --- a/code/game/objects/items/weapons/rpd.dm +++ b/code/game/objects/items/weapons/rpd.dm @@ -86,7 +86,7 @@ if(delay) lastused = world.time -/obj/item/rpd/proc/can_dispense_pipe(var/pipe_id, var/pipe_type) //Returns TRUE if this is a legit pipe we can dispense, otherwise returns FALSE +/obj/item/rpd/proc/can_dispense_pipe(pipe_id, pipe_type) //Returns TRUE if this is a legit pipe we can dispense, otherwise returns FALSE for(var/list/L in GLOB.rpd_pipe_list) if(pipe_type != L["pipe_type"]) //Sometimes pipes in different categories have the same pipe_id, so we need to skip anything not in the category we want continue diff --git a/code/game/objects/items/weapons/scrolls.dm b/code/game/objects/items/weapons/scrolls.dm index e01038e4e53..9ea4b8b58d0 100644 --- a/code/game/objects/items/weapons/scrolls.dm +++ b/code/game/objects/items/weapons/scrolls.dm @@ -43,7 +43,7 @@ attack_self(H) return -/obj/item/teleportation_scroll/proc/teleportscroll(var/mob/user) +/obj/item/teleportation_scroll/proc/teleportscroll(mob/user) var/A diff --git a/code/game/objects/items/weapons/signs.dm b/code/game/objects/items/weapons/signs.dm index 56f31188300..40e627a3375 100644 --- a/code/game/objects/items/weapons/signs.dm +++ b/code/game/objects/items/weapons/signs.dm @@ -38,7 +38,7 @@ /datum/crafting_recipe/picket_sign name = "Picket Sign" - result = /obj/item/picket_sign + result = list(/obj/item/picket_sign) reqs = list(/obj/item/stack/rods = 1, /obj/item/stack/sheet/cardboard = 2) time = 80 diff --git a/code/game/objects/items/weapons/staff.dm b/code/game/objects/items/weapons/staff.dm index fa2c6adcc7f..465e77e7cbc 100644 --- a/code/game/objects/items/weapons/staff.dm +++ b/code/game/objects/items/weapons/staff.dm @@ -43,7 +43,7 @@ if(wielded) to_chat(user, "You hold \the [src] between your legs.") -/obj/item/twohanded/staff/broom/attackby(var/obj/O, mob/user) +/obj/item/twohanded/staff/broom/attackby(obj/O, mob/user) if(istype(O, /obj/item/clothing/mask/horsehead)) new/obj/item/twohanded/staff/broom/horsebroom(get_turf(src)) user.unEquip(O) @@ -52,6 +52,11 @@ return ..() +/obj/item/twohanded/staff/broom/dropped(mob/user) + if((user.mind in SSticker.mode.wizards) && user.flying) + user.flying = FALSE + ..() + /obj/item/twohanded/staff/broom/horsebroom name = "broomstick horse" desc = "Saddle up!" diff --git a/code/game/objects/items/weapons/stock_parts.dm b/code/game/objects/items/weapons/stock_parts.dm index 7df47345bae..ea01683133a 100644 --- a/code/game/objects/items/weapons/stock_parts.dm +++ b/code/game/objects/items/weapons/stock_parts.dm @@ -8,14 +8,14 @@ w_class = WEIGHT_CLASS_HUGE can_hold = list(/obj/item/stock_parts) storage_slots = 50 - use_to_pickup = 1 - allow_quick_gather = 1 - allow_quick_empty = 1 + use_to_pickup = TRUE + allow_quick_gather = TRUE + allow_quick_empty = TRUE pickup_all_on_tile = TRUE - display_contents_with_number = 1 + display_contents_with_number = TRUE max_w_class = WEIGHT_CLASS_NORMAL max_combined_w_class = 100 - var/works_from_distance = 0 + var/works_from_distance = FALSE var/primary_sound = 'sound/items/rped.ogg' var/alt_sound = null toolspeed = 1 @@ -39,7 +39,7 @@ storage_slots = 400 max_w_class = WEIGHT_CLASS_NORMAL max_combined_w_class = 800 - works_from_distance = 1 + works_from_distance = TRUE primary_sound = 'sound/items/pshoom.ogg' alt_sound = 'sound/items/pshoom_2.ogg' usesound = 'sound/items/pshoom.ogg' @@ -54,7 +54,7 @@ //Sorts stock parts inside an RPED by their rating. //Only use /obj/item/stock_parts/ with this sort proc! -/proc/cmp_rped_sort(var/obj/item/stock_parts/A, var/obj/item/stock_parts/B) +/proc/cmp_rped_sort(obj/item/stock_parts/A, obj/item/stock_parts/B) return B.rating - A.rating /obj/item/stock_parts diff --git a/code/game/objects/items/weapons/storage/artistic_toolbox.dm b/code/game/objects/items/weapons/storage/artistic_toolbox.dm index 610f0d14ab0..3fbaa1d468d 100644 --- a/code/game/objects/items/weapons/storage/artistic_toolbox.dm +++ b/code/game/objects/items/weapons/storage/artistic_toolbox.dm @@ -2,10 +2,7 @@ name = "artistic toolbox" desc = "A metal container designed to hold various tools. This variety holds art supplies." icon_state = "green" - item_state = "toolbox_green" - icon = 'icons/goonstation/objects/objects.dmi' - lefthand_file = 'icons/goonstation/mob/inhands/items_lefthand.dmi' - righthand_file = 'icons/goonstation/mob/inhands/items_righthand.dmi' + item_state = "artistic_toolbox" /obj/item/storage/toolbox/green/memetic name = "artistic toolbox" @@ -49,7 +46,7 @@ break force += 4 throwforce += 4 - SEND_SOUND(user, 'sound/goonstation/effects/screech.ogg') + SEND_SOUND(user, sound('sound/goonstation/effects/screech.ogg')) shake_camera(user, 20, 1) var/acount = 0 var/amax = rand(10, 15) diff --git a/code/game/objects/items/weapons/storage/backpack.dm b/code/game/objects/items/weapons/storage/backpack.dm index 9caa87d8a4b..3466773007b 100644 --- a/code/game/objects/items/weapons/storage/backpack.dm +++ b/code/game/objects/items/weapons/storage/backpack.dm @@ -36,9 +36,9 @@ space_used += I.w_class if(!space_used) . += " [src] is empty." - else if(space_used <= max_combined_w_class*0.6) + else if(space_used <= max_combined_w_class * 0.6) . += " [src] still has plenty of remaining space." - else if(space_used <= max_combined_w_class*0.8) + else if(space_used <= max_combined_w_class * 0.8) . += " [src] is beginning to run out of space." else if(space_used < max_combined_w_class) . += " [src] doesn't have much space left." @@ -82,8 +82,8 @@ . = ..() /obj/item/storage/backpack/holding/singularity_act(current_size) - var/dist = max((current_size - 2),1) - explosion(src.loc,(dist),(dist*2),(dist*4)) + var/dist = max((current_size - 2), 1) + explosion(loc, dist, (dist * 2), (dist * 4)) /obj/item/storage/backpack/santabag name = "Santa's Gift Bag" @@ -107,8 +107,7 @@ /obj/item/storage/backpack/clown/syndie -/obj/item/storage/backpack/clown/syndie/New() - ..() +/obj/item/storage/backpack/clown/syndie/populate_contents() new /obj/item/clothing/under/rank/clown(src) new /obj/item/clothing/shoes/magboots/clown(src) new /obj/item/clothing/mask/chameleon(src) @@ -236,8 +235,7 @@ desc = "A handbag made out of what appears to be supple green Unathi skin. A face can be vaguely seen on the front." icon_state = "satchel-lizard" -/obj/item/storage/backpack/satchel/withwallet/New() - ..() +/obj/item/storage/backpack/satchel/withwallet/populate_contents() new /obj/item/storage/wallet/random(src) /obj/item/storage/backpack/satchel_norm @@ -313,18 +311,17 @@ level = 1 cant_hold = list(/obj/item/storage/backpack/satchel_flat) //muh recursive backpacks -/obj/item/storage/backpack/satchel_flat/hide(var/intact) +/obj/item/storage/backpack/satchel_flat/hide(intact) if(intact) invisibility = INVISIBILITY_MAXIMUM anchored = 1 //otherwise you can start pulling, cover it, and drag around an invisible backpack. icon_state = "[initial(icon_state)]2" else invisibility = initial(invisibility) - anchored = 0 + anchored = FALSE icon_state = initial(icon_state) -/obj/item/storage/backpack/satchel_flat/New() - ..() +/obj/item/storage/backpack/satchel_flat/populate_contents() new /obj/item/stack/tile/plasteel(src) new /obj/item/crowbar(src) @@ -346,7 +343,7 @@ icon_state = "duffel-syndie" item_state = "duffel-syndimed" origin_tech = "syndicate=1" - silent = 1 + silent = TRUE slowdown = 0 resistance_flags = FIRE_PROOF @@ -365,8 +362,7 @@ /obj/item/storage/backpack/duffel/syndie/ammo/shotgun desc = "A large duffelbag, packed to the brim with Bulldog shotgun ammo." -/obj/item/storage/backpack/duffel/syndie/ammo/shotgun/New() - ..() +/obj/item/storage/backpack/duffel/syndie/ammo/shotgun/populate_contents() for(var/i in 1 to 6) new /obj/item/ammo_box/magazine/m12g(src) new /obj/item/ammo_box/magazine/m12g/buckshot(src) @@ -376,8 +372,7 @@ /obj/item/storage/backpack/duffel/syndie/ammo/shotgunXLmags desc = "A large duffelbag, containing three types of extended drum magazines." -/obj/item/storage/backpack/duffel/syndie/ammo/shotgunXLmags/New() - ..() +/obj/item/storage/backpack/duffel/syndie/ammo/shotgunXLmags/populate_contents() new /obj/item/ammo_box/magazine/m12g/XtrLrg(src) new /obj/item/ammo_box/magazine/m12g/XtrLrg/buckshot(src) new /obj/item/ammo_box/magazine/m12g/XtrLrg/dragon(src) @@ -386,8 +381,7 @@ name = "mining conscription kit" desc = "A kit containing everything a crewmember needs to support a shaft miner in the field." -/obj/item/storage/backpack/duffel/mining_conscript/New() - ..() +/obj/item/storage/backpack/duffel/mining_conscript/populate_contents() new /obj/item/pickaxe(src) new /obj/item/clothing/glasses/meson(src) new /obj/item/t_scanner/adv_mining_scanner/lesser(src) @@ -404,16 +398,14 @@ /obj/item/storage/backpack/duffel/syndie/ammo/smg desc = "A large duffel bag, packed to the brim with C-20r magazines." -/obj/item/storage/backpack/duffel/syndie/ammo/smg/New() - ..() +/obj/item/storage/backpack/duffel/syndie/ammo/smg/populate_contents() for(var/i in 1 to 10) new /obj/item/ammo_box/magazine/smgm45(src) /obj/item/storage/backpack/duffel/syndie/c20rbundle desc = "A large duffel bag containing a C-20r, some magazines, and a cheap looking suppressor." -/obj/item/storage/backpack/duffel/syndie/c20rbundle/New() - ..() +/obj/item/storage/backpack/duffel/syndie/c20rbundle/populate_contents() new /obj/item/ammo_box/magazine/smgm45(src) new /obj/item/ammo_box/magazine/smgm45(src) new /obj/item/ammo_box/magazine/smgm45(src) @@ -423,8 +415,7 @@ /obj/item/storage/backpack/duffel/syndie/bulldogbundle desc = "A large duffel bag containing a Bulldog, some drums, and a pair of thermal imaging glasses." -/obj/item/storage/backpack/duffel/syndie/bulldogbundle/New() - ..() +/obj/item/storage/backpack/duffel/syndie/bulldogbundle/populate_contents() new /obj/item/gun/projectile/automatic/shotgun/bulldog(src) new /obj/item/ammo_box/magazine/m12g(src) new /obj/item/ammo_box/magazine/m12g(src) @@ -433,19 +424,16 @@ /obj/item/storage/backpack/duffel/syndie/med/medicalbundle desc = "A large duffel bag containing a tactical medkit, a medical beam gun and a pair of syndicate magboots." -/obj/item/storage/backpack/duffel/syndie/med/medicalbundle/New() - ..() +/obj/item/storage/backpack/duffel/syndie/med/medicalbundle/populate_contents() new /obj/item/storage/firstaid/tactical(src) new /obj/item/clothing/shoes/magboots/syndie(src) new /obj/item/gun/medbeam(src) -/obj/item/storage/backpack/duffel/syndie/c4/New() - ..() +/obj/item/storage/backpack/duffel/syndie/c4/populate_contents() for(var/i in 1 to 10) new /obj/item/grenade/plastic/c4(src) -/obj/item/storage/backpack/duffel/syndie/x4/New() - ..() +/obj/item/storage/backpack/duffel/syndie/x4/populate_contents() for(var/i in 1 to 3) new /obj/item/grenade/plastic/x4(src) @@ -455,8 +443,7 @@ icon_state = "duffel-syndimed" item_state = "duffel-syndimed" -/obj/item/storage/backpack/duffel/syndie/surgery/New() - ..() +/obj/item/storage/backpack/duffel/syndie/surgery/populate_contents() new /obj/item/scalpel(src) new /obj/item/hemostat(src) new /obj/item/retractor(src) @@ -475,8 +462,7 @@ icon_state = "duffel-syndimed" item_state = "duffel-syndimed" -/obj/item/storage/backpack/duffel/syndie/surgery_fake/New() - ..() +/obj/item/storage/backpack/duffel/syndie/surgery_fake/populate_contents() new /obj/item/scalpel(src) new /obj/item/hemostat(src) new /obj/item/retractor(src) diff --git a/code/game/objects/items/weapons/storage/bags.dm b/code/game/objects/items/weapons/storage/bags.dm index 4a3072a6374..f2b0b475e30 100644 --- a/code/game/objects/items/weapons/storage/bags.dm +++ b/code/game/objects/items/weapons/storage/bags.dm @@ -107,7 +107,7 @@ return ..() -/obj/item/storage/bag/plasticbag/equipped(var/mob/user, var/slot) +/obj/item/storage/bag/plasticbag/equipped(mob/user, slot) if(slot==slot_head) storage_slots = 0 START_PROCESSING(SSobj, src) @@ -200,7 +200,7 @@ // Because it stacks stacks, this doesn't operate normally. // However, making it a storage/bag allows us to reuse existing code in some places. -Sayu -/obj/item/storage/bag/sheetsnatcher +/obj/item/storage/bag/sheetsnatcher // what is this even used for icon = 'icons/obj/mining.dmi' icon_state = "sheetsnatcher" name = "Sheet Snatcher" @@ -210,10 +210,6 @@ w_class = WEIGHT_CLASS_NORMAL allow_quick_empty = 1 // this function is superceded -/obj/item/storage/bag/sheetsnatcher/New() - ..() - //verbs -= /obj/item/storage/verb/quick_empty - //verbs += /obj/item/storage/bag/sheetsnatcher/quick_empty /obj/item/storage/bag/sheetsnatcher/can_be_inserted(obj/item/W as obj, stop_messages = 0) if(!istype(W,/obj/item/stack/sheet) || istype(W,/obj/item/stack/sheet/mineral/sandstone) || istype(W,/obj/item/stack/sheet/wood)) @@ -289,7 +285,7 @@ var/col_count = min(7,storage_slots) -1 if(adjusted_contents > 7) row_num = round((adjusted_contents-1) / 7) // 7 is the maximum allowed width. - src.standard_orient_objs(row_num, col_count, numbered_contents) + standard_orient_objs(row_num, col_count, numbered_contents) return @@ -376,7 +372,7 @@ icon_state = "tray" desc = "A metal tray to lay food on." force = 5 - throwforce = 10.0 + throwforce = 10 throw_speed = 3 throw_range = 5 w_class = WEIGHT_CLASS_BULKY @@ -465,8 +461,7 @@ /obj/item/storage/bag/tray/cookies_tray var/cookie = /obj/item/reagent_containers/food/snacks/cookie -/obj/item/storage/bag/tray/cookies_tray/New() /// By Azule Utama, thank you a lot! - ..() +/obj/item/storage/bag/tray/cookies_tray/populate_contents() // By Azule Utama, thank you a lot! for(var/i in 1 to 6) var/obj/item/C = new cookie(src) handle_item_insertion(C) // Done this way so the tray actually has the cookies visible when spawned diff --git a/code/game/objects/items/weapons/storage/belt.dm b/code/game/objects/items/weapons/storage/belt.dm index ab52435ffcb..301b43403f6 100644 --- a/code/game/objects/items/weapons/storage/belt.dm +++ b/code/game/objects/items/weapons/storage/belt.dm @@ -9,7 +9,9 @@ slot_flags = SLOT_BELT attack_verb = list("whipped", "lashed", "disciplined") max_integrity = 300 - var/use_item_overlays = 0 // Do we have overlays for items held inside the belt? + equip_sound = 'sound/items/equip/toolbelt_equip.ogg' + /// Do we have overlays for items held inside the belt? + var/use_item_overlays = FALSE /obj/item/storage/belt/update_icon() if(use_item_overlays) @@ -21,20 +23,20 @@ /obj/item/storage/belt/proc/can_use() return is_equipped() -/obj/item/storage/belt/MouseDrop(obj/over_object as obj, src_location, over_location) +/obj/item/storage/belt/MouseDrop(obj/over_object, src_location, over_location) var/mob/M = usr if(!istype(over_object, /obj/screen)) return ..() - playsound(src.loc, "rustle", 50, 1, -5) + playsound(loc, "rustle", 50, TRUE, -5) if(!M.restrained() && !M.stat && can_use()) switch(over_object.name) if("r_hand") - M.unEquip(src) + M.unEquip(src, silent = TRUE) M.put_in_r_hand(src) if("l_hand") - M.unEquip(src) + M.unEquip(src, silent = TRUE) M.put_in_l_hand(src) - src.add_fingerprint(usr) + add_fingerprint(usr) return /obj/item/storage/belt/deserialize(list/data) @@ -46,7 +48,9 @@ desc = "Can hold various tools." icon_state = "utilitybelt" item_state = "utility" - use_item_overlays = 1 + use_item_overlays = TRUE + drop_sound = 'sound/items/handling/toolbelt_drop.ogg' + pickup_sound = 'sound/items/handling/toolbelt_pickup.ogg' can_hold = list( /obj/item/crowbar, /obj/item/screwdriver, @@ -62,8 +66,7 @@ /obj/item/extinguisher/mini, /obj/item/holosign_creator) -/obj/item/storage/belt/utility/full/New() - ..() +/obj/item/storage/belt/utility/full/populate_contents() new /obj/item/screwdriver(src) new /obj/item/wrench(src) new /obj/item/weldingtool(src) @@ -72,13 +75,12 @@ new /obj/item/stack/cable_coil/random(src, 30) update_icon() -/obj/item/storage/belt/utility/full/multitool/New() +/obj/item/storage/belt/utility/full/multitool/populate_contents() ..() new /obj/item/multitool(src) update_icon() -/obj/item/storage/belt/utility/atmostech/New() - ..() +/obj/item/storage/belt/utility/atmostech/populate_contents() new /obj/item/screwdriver(src) new /obj/item/wrench(src) new /obj/item/weldingtool(src) @@ -94,8 +96,7 @@ icon_state = "utilitybelt_ce" item_state = "utility_ce" -/obj/item/storage/belt/utility/chief/full/New() - ..() +/obj/item/storage/belt/utility/chief/full/populate_contents() new /obj/item/screwdriver/power(src) new /obj/item/crowbar/power(src) new /obj/item/weldingtool/experimental(src)//This can be changed if this is too much @@ -107,12 +108,12 @@ //much roomier now that we've managed to remove two tools /obj/item/storage/belt/medical - use_to_pickup = 1 //Allow medical belt to pick up medicine name = "medical belt" desc = "Can hold various medical equipment." icon_state = "medicalbelt" item_state = "medical" - use_item_overlays = 1 + use_to_pickup = TRUE //Allow medical belt to pick up medicine + use_item_overlays = TRUE max_w_class = WEIGHT_CLASS_NORMAL can_hold = list( /obj/item/healthanalyzer, @@ -143,11 +144,11 @@ /obj/item/storage/belt/medical/surgery max_w_class = WEIGHT_CLASS_NORMAL max_combined_w_class = 17 - use_to_pickup = 1 + use_to_pickup = TRUE name = "surgical belt" desc = "Can hold various surgical tools." storage_slots = 9 - use_item_overlays = 1 + use_item_overlays = TRUE can_hold = list( /obj/item/scalpel, /obj/item/hemostat, @@ -160,10 +161,7 @@ /obj/item/cautery, ) -/obj/item/storage/belt/medical/surgery/loaded - -/obj/item/storage/belt/medical/surgery/loaded/New() - ..() +/obj/item/storage/belt/medical/surgery/loaded/populate_contents() new /obj/item/scalpel(src) new /obj/item/hemostat(src) new /obj/item/retractor(src) @@ -174,10 +172,7 @@ new /obj/item/surgicaldrill(src) new /obj/item/cautery(src) -/obj/item/storage/belt/medical/response_team - -/obj/item/storage/belt/medical/response_team/New() - ..() +/obj/item/storage/belt/medical/response_team/populate_contents() new /obj/item/reagent_containers/food/pill/salbutamol(src) new /obj/item/reagent_containers/food/pill/salbutamol(src) new /obj/item/reagent_containers/food/pill/charcoal(src) @@ -192,7 +187,7 @@ desc = "Can hold various botanical supplies." icon_state = "botanybelt" item_state = "botany" - use_item_overlays = 1 + use_item_overlays = TRUE can_hold = list( /obj/item/plant_analyzer, /obj/item/cultivator, @@ -218,7 +213,7 @@ item_state = "security"//Could likely use a better one. storage_slots = 5 max_w_class = WEIGHT_CLASS_NORMAL - use_item_overlays = 1 + use_item_overlays = TRUE can_hold = list( /obj/item/grenade/flashbang, /obj/item/grenade/chem_grenade/teargas, @@ -237,13 +232,11 @@ /obj/item/melee/classic_baton/telescopic, /obj/item/restraints/legcuffs/bola) -/obj/item/storage/belt/security/sec/New() - ..() +/obj/item/storage/belt/security/sec/populate_contents() new /obj/item/flashlight/seclite(src) update_icon() -/obj/item/storage/belt/security/response_team/New() - ..() +/obj/item/storage/belt/security/response_team/populate_contents() new /obj/item/reagent_containers/spray/pepper(src) new /obj/item/melee/baton/loaded(src) new /obj/item/flash(src) @@ -251,8 +244,7 @@ new /obj/item/grenade/flashbang(src) update_icon() -/obj/item/storage/belt/security/response_team_gamma/New() - ..() +/obj/item/storage/belt/security/response_team_gamma/populate_contents() new /obj/item/melee/baton/loaded(src) new /obj/item/reagent_containers/spray/pepper(src) new /obj/item/flash(src) @@ -274,19 +266,14 @@ icon_state = "soulstonebelt" item_state = "soulstonebelt" storage_slots = 6 - use_item_overlays = 1 + use_item_overlays = TRUE can_hold = list( "/obj/item/soulstone" ) -/obj/item/storage/belt/soulstone/full/New() - ..() - new /obj/item/soulstone(src) - new /obj/item/soulstone(src) - new /obj/item/soulstone(src) - new /obj/item/soulstone(src) - new /obj/item/soulstone(src) - new /obj/item/soulstone(src) +/obj/item/storage/belt/soulstone/full/populate_contents() + for(var/I in 1 to 6) + new /obj/item/soulstone(src) update_icon() @@ -296,7 +283,7 @@ icon_state = "championbelt" item_state = "champion" materials = list(MAT_GOLD=400) - storage_slots = 1 + storage_slots = TRUE can_hold = list( "/obj/item/clothing/mask/luchador" ) @@ -318,12 +305,9 @@ desc = "Can hold various tools. This model seems to have additional compartments." icon_state = "utilitybelt" item_state = "utility" - use_item_overlays = 1 // So it will still show tools in it in case sec get lazy and just glance at it. + use_item_overlays = TRUE // So it will still show tools in it in case sec get lazy and just glance at it. -/obj/item/storage/belt/military/traitor/hacker - -/obj/item/storage/belt/military/traitor/hacker/New() - ..() +/obj/item/storage/belt/military/traitor/hacker/populate_contents() new /obj/item/screwdriver(src, "red") new /obj/item/wrench(src) new /obj/item/weldingtool/largetank(src) @@ -339,41 +323,25 @@ item_state = "assault" storage_slots = 30 max_combined_w_class = 60 - display_contents_with_number = 1 + display_contents_with_number = TRUE can_hold = list( /obj/item/grenade, /obj/item/lighter, /obj/item/reagent_containers/food/drinks/bottle/molotov ) -/obj/item/storage/belt/grenade/full/New() - ..() - new /obj/item/grenade/smokebomb(src) //4 - new /obj/item/grenade/smokebomb(src) - new /obj/item/grenade/smokebomb(src) - new /obj/item/grenade/smokebomb(src) - new /obj/item/grenade/empgrenade(src) //2 - new /obj/item/grenade/empgrenade(src) - new /obj/item/grenade/gluon(src) //4 - new /obj/item/grenade/gluon(src) - new /obj/item/grenade/gluon(src) - new /obj/item/grenade/gluon(src) +/obj/item/storage/belt/grenade/full/populate_contents() + for(var/I in 1 to 4) + new /obj/item/grenade/smokebomb(src) // Four of each + new /obj/item/grenade/gluon(src) + for(var/I in 1 to 10) + new /obj/item/grenade/frag(src) + for(var/I in 1 to 2) + new /obj/item/grenade/gas/plasma(src) + new /obj/item/grenade/empgrenade(src) + new /obj/item/grenade/syndieminibomb(src) new /obj/item/grenade/chem_grenade/facid(src) //1 new /obj/item/grenade/chem_grenade/saringas(src) //1 - new /obj/item/grenade/gas/plasma(src) //2 - new /obj/item/grenade/gas/plasma(src) - new /obj/item/grenade/frag(src) //10 - new /obj/item/grenade/frag(src) - new /obj/item/grenade/frag(src) - new /obj/item/grenade/frag(src) - new /obj/item/grenade/frag(src) - new /obj/item/grenade/frag(src) - new /obj/item/grenade/frag(src) - new /obj/item/grenade/frag(src) - new /obj/item/grenade/frag(src) - new /obj/item/grenade/frag(src) - new /obj/item/grenade/syndieminibomb(src) //2 - new /obj/item/grenade/syndieminibomb(src) /obj/item/storage/belt/military/abductor name = "agent belt" @@ -382,8 +350,7 @@ icon_state = "belt" item_state = "security" -/obj/item/storage/belt/military/abductor/full/New() - ..() +/obj/item/storage/belt/military/abductor/full/populate_contents() new /obj/item/screwdriver/abductor(src) new /obj/item/wrench/abductor(src) new /obj/item/weldingtool/abductor(src) @@ -406,7 +373,7 @@ item_state = "janibelt" storage_slots = 6 max_w_class = WEIGHT_CLASS_BULKY // Set to this so the light replacer can fit. - use_item_overlays = 1 + use_item_overlays = TRUE can_hold = list( /obj/item/grenade/chem_grenade/cleaner, /obj/item/lightreplacer, @@ -417,8 +384,7 @@ /obj/item/melee/flyswatter, ) -/obj/item/storage/belt/janitor/full/New() - ..() +/obj/item/storage/belt/janitor/full/populate_contents() new /obj/item/lightreplacer(src) new /obj/item/holosign_creator(src) new /obj/item/reagent_containers/spray/cleaner(src) @@ -439,22 +405,21 @@ storage_slots = 6 can_hold = list(/obj/item/mobcapsule) -/obj/item/storage/belt/lazarus/New() - ..() +/obj/item/storage/belt/lazarus/Initialize(mapload) + . = ..() update_icon() - /obj/item/storage/belt/lazarus/update_icon() ..() - icon_state = "[initial(icon_state)]_[contents.len]" + icon_state = "[initial(icon_state)]_[length(contents)]" -/obj/item/storage/belt/lazarus/attackby(obj/item/W, mob/user) - var/amount = contents.len +/obj/item/storage/belt/lazarus/attackby(obj/item/I, mob/user) + var/amount = length(contents) . = ..() - if(amount != contents.len) + if(amount != length(contents)) update_icon() -/obj/item/storage/belt/lazarus/remove_from_storage(obj/item/W as obj, atom/new_location) +/obj/item/storage/belt/lazarus/remove_from_storage(obj/item/I, atom/new_location) ..() update_icon() @@ -465,39 +430,25 @@ icon_state = "bandolier" item_state = "bandolier" storage_slots = 8 - can_hold = list( - /obj/item/ammo_casing/shotgun - ) + can_hold = list(/obj/item/ammo_casing/shotgun) -/obj/item/storage/belt/bandolier/New() - ..() +/obj/item/storage/belt/bandolier/Initialize(mapload) + . = ..() update_icon() -/obj/item/storage/belt/bandolier/full/New() - ..() - new /obj/item/ammo_casing/shotgun/beanbag(src) - new /obj/item/ammo_casing/shotgun/beanbag(src) - new /obj/item/ammo_casing/shotgun/beanbag(src) - new /obj/item/ammo_casing/shotgun/beanbag(src) - new /obj/item/ammo_casing/shotgun/beanbag(src) - new /obj/item/ammo_casing/shotgun/beanbag(src) - new /obj/item/ammo_casing/shotgun/beanbag(src) - new /obj/item/ammo_casing/shotgun/beanbag(src) - update_icon() +/obj/item/storage/belt/bandolier/full/populate_contents() + for(var/I in 1 to 8) + new /obj/item/ammo_casing/shotgun/beanbag(src) /obj/item/storage/belt/bandolier/update_icon() ..() - icon_state = "[initial(icon_state)]_[contents.len]" + icon_state = "[initial(icon_state)]_[length(contents)]" -/obj/item/storage/belt/bandolier/attackby(obj/item/W, mob/user) - var/amount = contents.len - . = ..() - if(amount != contents.len) - update_icon() - -/obj/item/storage/belt/bandolier/remove_from_storage(obj/item/W as obj, atom/new_location) +/obj/item/storage/belt/bandolier/attackby(obj/item/I, mob/user) + var/amount = length(contents) ..() - update_icon() + if(amount != length(contents)) + update_icon() /obj/item/storage/belt/holster name = "shoulder holster" @@ -517,13 +468,12 @@ icon_state = "soulstonebelt" item_state = "soulstonebelt" storage_slots = 6 - use_item_overlays = 1 + use_item_overlays = TRUE can_hold = list( /obj/item/gun/magic/wand ) -/obj/item/storage/belt/wands/full/New() - ..() +/obj/item/storage/belt/wands/full/populate_contents() new /obj/item/gun/magic/wand/death(src) new /obj/item/gun/magic/wand/resurrection(src) new /obj/item/gun/magic/wand/polymorph(src) @@ -604,8 +554,7 @@ max_w_class = WEIGHT_CLASS_BULKY can_hold = list(/obj/item/melee/rapier) -/obj/item/storage/belt/rapier/New() - ..() +/obj/item/storage/belt/rapier/populate_contents() new /obj/item/melee/rapier(src) update_icon() @@ -673,7 +622,7 @@ max_w_class = WEIGHT_CLASS_NORMAL max_combined_w_class = 18 origin_tech = "bluespace=5;materials=4;engineering=4;plasmatech=5" - allow_quick_empty = 1 + allow_quick_empty = TRUE can_hold = list( /obj/item/grenade/smokebomb, /obj/item/restraints/legcuffs/bola @@ -684,17 +633,17 @@ var/bolacount = 0 var/cooldown = 0 -/obj/item/storage/belt/bluespace/owlman/New() - ..() - new /obj/item/grenade/smokebomb(src) - new /obj/item/grenade/smokebomb(src) - new /obj/item/grenade/smokebomb(src) - new /obj/item/grenade/smokebomb(src) - new /obj/item/restraints/legcuffs/bola(src) - new /obj/item/restraints/legcuffs/bola(src) +/obj/item/storage/belt/bluespace/owlman/Initialize(mapload) + . = ..() START_PROCESSING(SSobj, src) cooldown = world.time +/obj/item/storage/belt/bluespace/owlman/populate_contents() + for(var/I in 1 to 4) + new /obj/item/grenade/smokebomb(src) + new /obj/item/restraints/legcuffs/bola(src) + new /obj/item/restraints/legcuffs/bola(src) + /obj/item/storage/belt/bluespace/owlman/Destroy() STOP_PROCESSING(SSobj, src) return ..() @@ -725,7 +674,7 @@ if(H.s_active && H.s_active == src) H.s_active.show_to(H) -/obj/item/storage/belt/bluespace/attack(mob/M as mob, mob/user as mob, def_zone) +/obj/item/storage/belt/bluespace/attack(mob/M, mob/user, def_zone) return /obj/item/storage/belt/bluespace/admin @@ -739,8 +688,7 @@ max_combined_w_class = 280 can_hold = list() -/obj/item/storage/belt/bluespace/admin/New() - ..() +/obj/item/storage/belt/bluespace/admin/populate_contents() new /obj/item/crowbar(src) new /obj/item/screwdriver(src) new /obj/item/weldingtool/hugetank(src) @@ -768,8 +716,7 @@ max_combined_w_class = 280 can_hold = list() -/obj/item/storage/belt/bluespace/sandbox/New() - ..() +/obj/item/storage/belt/bluespace/sandbox/populate_contents() new /obj/item/crowbar(src) new /obj/item/screwdriver(src) new /obj/item/weldingtool/hugetank(src) @@ -789,7 +736,7 @@ storage_slots = 6 max_w_class = WEIGHT_CLASS_BULKY max_combined_w_class = 20 - use_item_overlays = 0 + use_item_overlays = FALSE can_hold = list( /obj/item/crowbar, /obj/item/screwdriver, diff --git a/code/game/objects/items/weapons/storage/bible.dm b/code/game/objects/items/weapons/storage/bible.dm index a954369e933..384dc250901 100644 --- a/code/game/objects/items/weapons/storage/bible.dm +++ b/code/game/objects/items/weapons/storage/bible.dm @@ -6,6 +6,8 @@ throw_range = 5 w_class = WEIGHT_CLASS_NORMAL resistance_flags = FIRE_PROOF + drop_sound = 'sound/items/handling/book_drop.ogg' + pickup_sound = 'sound/items/handling/book_pickup.ogg' var/mob/affecting = null var/deity_name = "Christ" /// Is the sprite of this bible customisable @@ -49,8 +51,7 @@ desc = "To be applied to the head repeatedly." icon_state ="bible" -/obj/item/storage/bible/booze/New() - ..() +/obj/item/storage/bible/booze/populate_contents() new /obj/item/reagent_containers/food/drinks/cans/beer(src) new /obj/item/reagent_containers/food/drinks/cans/beer(src) new /obj/item/stack/spacecash(src) diff --git a/code/game/objects/items/weapons/storage/boxes.dm b/code/game/objects/items/weapons/storage/boxes.dm index 2f3d6a3e7cd..4531490a9b3 100644 --- a/code/game/objects/items/weapons/storage/boxes.dm +++ b/code/game/objects/items/weapons/storage/boxes.dm @@ -25,6 +25,8 @@ icon_state = "box" item_state = "syringe_kit" resistance_flags = FLAMMABLE + drop_sound = 'sound/items/handling/cardboardbox_drop.ogg' + pickup_sound = 'sound/items/handling/cardboardbox_pickup.ogg' foldable = /obj/item/stack/sheet/cardboard foldable_amt = 1 @@ -40,21 +42,16 @@ /obj/item/storage/box/survival icon_state = "box_civ" -/obj/item/storage/box/survival/New() - ..() - contents = list() - new /obj/item/clothing/mask/breath( src ) - new /obj/item/tank/internals/emergency_oxygen( src ) - new /obj/item/reagent_containers/hypospray/autoinjector( src ) - new /obj/item/flashlight/flare/glowstick/emergency( src ) - return +/obj/item/storage/box/survival/populate_contents() + new /obj/item/clothing/mask/breath(src) + new /obj/item/tank/internals/emergency_oxygen(src) + new /obj/item/reagent_containers/hypospray/autoinjector(src) + new /obj/item/flashlight/flare/glowstick/emergency(src) /obj/item/storage/box/survival_vox icon_state = "box_vox" -/obj/item/storage/box/survival_vox/New() - ..() - contents = list() +/obj/item/storage/box/survival_vox/populate_contents() new /obj/item/clothing/mask/breath/vox(src) new /obj/item/tank/internals/emergency_oxygen/nitrogen(src) new /obj/item/reagent_containers/hypospray/autoinjector(src) @@ -63,9 +60,7 @@ /obj/item/storage/box/survival_plasmaman icon_state = "box_plasma" -/obj/item/storage/box/survival_plasmaman/New() - ..() - contents = list() +/obj/item/storage/box/survival_plasmaman/populate_contents() new /obj/item/clothing/mask/breath(src) new /obj/item/tank/internals/emergency_oxygen/plasma(src) new /obj/item/reagent_containers/hypospray/autoinjector(src) @@ -74,21 +69,16 @@ /obj/item/storage/box/engineer icon_state = "box_eng" -/obj/item/storage/box/engineer/New() - ..() - contents = list() - new /obj/item/clothing/mask/breath( src ) - new /obj/item/tank/internals/emergency_oxygen/engi( src ) - new /obj/item/reagent_containers/hypospray/autoinjector( src ) - new /obj/item/flashlight/flare/glowstick/emergency( src ) - return +/obj/item/storage/box/engineer/populate_contents() + new /obj/item/clothing/mask/breath(src) + new /obj/item/tank/internals/emergency_oxygen/engi(src) + new /obj/item/reagent_containers/hypospray/autoinjector(src) + new /obj/item/flashlight/flare/glowstick/emergency(src) /obj/item/storage/box/survival_mining icon_state = "box_min" -/obj/item/storage/box/survival_mining/New() - ..() - contents = list() +/obj/item/storage/box/survival_mining/populate_contents() new /obj/item/clothing/mask/gas/explorer(src) new /obj/item/tank/internals/emergency_oxygen/engi(src) new /obj/item/crowbar/red(src) @@ -98,9 +88,7 @@ /obj/item/storage/box/survival_syndi icon_state = "box_syndi" -/obj/item/storage/box/survival_syndi/New() - ..() - contents = list() +/obj/item/storage/box/survival_syndi/populate_contents() new /obj/item/clothing/mask/gas/syndicate(src) new /obj/item/tank/internals/emergency_oxygen/engi/syndi(src) new /obj/item/reagent_containers/hypospray/autoinjector(src) @@ -112,31 +100,18 @@ desc = "Contains white gloves." icon_state = "latex" -/obj/item/storage/box/gloves/New() - ..() - new /obj/item/clothing/gloves/color/latex(src) - new /obj/item/clothing/gloves/color/latex(src) - new /obj/item/clothing/gloves/color/latex(src) - new /obj/item/clothing/gloves/color/latex(src) - new /obj/item/clothing/gloves/color/latex(src) - new /obj/item/clothing/gloves/color/latex(src) - new /obj/item/clothing/gloves/color/latex(src) +/obj/item/storage/box/gloves/populate_contents() + for(var/I in 1 to 7) + new /obj/item/clothing/gloves/color/latex(src) /obj/item/storage/box/masks name = "sterile masks" desc = "This box contains masks of sterility." icon_state = "sterile" -/obj/item/storage/box/masks/New() - ..() - new /obj/item/clothing/mask/surgical(src) - new /obj/item/clothing/mask/surgical(src) - new /obj/item/clothing/mask/surgical(src) - new /obj/item/clothing/mask/surgical(src) - new /obj/item/clothing/mask/surgical(src) - new /obj/item/clothing/mask/surgical(src) - new /obj/item/clothing/mask/surgical(src) - +/obj/item/storage/box/masks/populate_contents() + for(var/I in 1 to 7) + new /obj/item/clothing/mask/surgical(src) /obj/item/storage/box/syringes name = "syringes" @@ -144,37 +119,24 @@ desc = "A biohazard alert warning is printed on the box" icon_state = "syringe" -/obj/item/storage/box/syringes/New() - ..() - new /obj/item/reagent_containers/syringe( src ) - new /obj/item/reagent_containers/syringe( src ) - new /obj/item/reagent_containers/syringe( src ) - new /obj/item/reagent_containers/syringe( src ) - new /obj/item/reagent_containers/syringe( src ) - new /obj/item/reagent_containers/syringe( src ) - new /obj/item/reagent_containers/syringe( src ) +/obj/item/storage/box/syringes/populate_contents() + for(var/I in 1 to 7) + new /obj/item/reagent_containers/syringe(src) /obj/item/storage/box/beakers name = "beaker box" icon_state = "beaker" -/obj/item/storage/box/beakers/New() - ..() - new /obj/item/reagent_containers/glass/beaker( src ) - new /obj/item/reagent_containers/glass/beaker( src ) - new /obj/item/reagent_containers/glass/beaker( src ) - new /obj/item/reagent_containers/glass/beaker( src ) - new /obj/item/reagent_containers/glass/beaker( src ) - new /obj/item/reagent_containers/glass/beaker( src ) - new /obj/item/reagent_containers/glass/beaker( src ) +/obj/item/storage/box/beakers/populate_contents() + for(var/I in 1 to 7) + new /obj/item/reagent_containers/glass/beaker(src) /obj/item/storage/box/beakers/bluespace name = "box of bluespace beakers" icon_state = "beaker" -/obj/item/storage/box/beakers/bluespace/New() - ..() - for(var/i in 1 to 7) +/obj/item/storage/box/beakers/bluespace/populate_contents() + for(var/I in 1 to 7) new /obj/item/reagent_containers/glass/beaker/bluespace(src) /obj/item/storage/box/iv_bags @@ -182,48 +144,34 @@ desc = "A box full of empty IV bags." icon_state = "beaker" -/obj/item/storage/box/iv_bags/New() - ..() - new /obj/item/reagent_containers/iv_bag( src ) - new /obj/item/reagent_containers/iv_bag( src ) - new /obj/item/reagent_containers/iv_bag( src ) - new /obj/item/reagent_containers/iv_bag( src ) - new /obj/item/reagent_containers/iv_bag( src ) - new /obj/item/reagent_containers/iv_bag( src ) - new /obj/item/reagent_containers/iv_bag( src ) +/obj/item/storage/box/iv_bags/populate_contents() + for(var/I in 1 to 7) + new /obj/item/reagent_containers/iv_bag(src) /obj/item/storage/box/injectors name = "\improper DNA injectors" desc = "This box contains injectors it seems." -/obj/item/storage/box/injectors/New() - ..() - new /obj/item/dnainjector/h2m(src) - new /obj/item/dnainjector/h2m(src) - new /obj/item/dnainjector/h2m(src) - new /obj/item/dnainjector/m2h(src) - new /obj/item/dnainjector/m2h(src) - new /obj/item/dnainjector/m2h(src) +/obj/item/storage/box/injectors/populate_contents() + for(var/I in 1 to 6) + new /obj/item/dnainjector/h2m(src) /obj/item/storage/box/slug name = "Ammunition Box (Slug)" desc = "A small box capable of holding seven shotgun shells." icon_state = "slugbox" -/obj/item/storage/box/slug/New() - ..() - for(var/i in 1 to 7) +/obj/item/storage/box/slug/populate_contents() + for(var/I in 1 to 7) new /obj/item/ammo_casing/shotgun(src) - /obj/item/storage/box/buck name = "Ammunition Box (Buckshot)" desc = "A small box capable of holding seven shotgun shells." icon_state = "buckshotbox" -/obj/item/storage/box/buck/New() - ..() - for(var/i in 1 to 7) +/obj/item/storage/box/buck/populate_contents() + for(var/I in 1 to 7) new /obj/item/ammo_casing/shotgun/buckshot(src) /obj/item/storage/box/dragonsbreath @@ -231,9 +179,8 @@ desc = "A small box capable of holding seven shotgun shells." icon_state = "dragonsbreathbox" -/obj/item/storage/box/dragonsbreath/New() - ..() - for(var/i in 1 to 7) +/obj/item/storage/box/dragonsbreath/populate_contents() + for(var/I in 1 to 7) new /obj/item/ammo_casing/shotgun/incendiary/dragonsbreath(src) /obj/item/storage/box/stun @@ -241,9 +188,8 @@ desc = "A small box capable of holding seven shotgun shells." icon_state = "stunbox" -/obj/item/storage/box/stun/New() - ..() - for(var/i in 1 to 7) +/obj/item/storage/box/stun/populate_contents() + for(var/I in 1 to 7) new /obj/item/ammo_casing/shotgun/stunslug(src) /obj/item/storage/box/beanbag @@ -251,9 +197,8 @@ desc = "A small box capable of holding seven shotgun shells." icon_state = "beanbagbox" -/obj/item/storage/box/beanbag/New() - ..() - for(var/i in 1 to 7) +/obj/item/storage/box/beanbag/populate_contents() + for(var/I in 1 to 7) new /obj/item/ammo_casing/shotgun/beanbag(src) /obj/item/storage/box/rubbershot @@ -261,9 +206,8 @@ desc = "A small box capable of holding seven shotgun shells." icon_state = "rubbershotbox" -/obj/item/storage/box/rubbershot/New() - ..() - for(var/i in 1 to 7) +/obj/item/storage/box/rubbershot/populate_contents() + for(var/I in 1 to 7) new /obj/item/ammo_casing/shotgun/rubbershot(src) /obj/item/storage/box/tranquilizer @@ -271,9 +215,8 @@ desc = "A small box capable of holding seven shotgun shells." icon_state = "tranqbox" -/obj/item/storage/box/tranquilizer/New() - ..() - for(var/i in 1 to 7) +/obj/item/storage/box/tranquilizer/populate_contents() + for(var/I in 1 to 7) new /obj/item/ammo_casing/shotgun/tranquilizer(src) /obj/item/storage/box/flashbangs @@ -281,57 +224,36 @@ desc = "WARNING: These devices are extremely dangerous and can cause blindness or deafness in repeated use." icon_state = "flashbang" -/obj/item/storage/box/flashbangs/New() - ..() - new /obj/item/grenade/flashbang(src) - new /obj/item/grenade/flashbang(src) - new /obj/item/grenade/flashbang(src) - new /obj/item/grenade/flashbang(src) - new /obj/item/grenade/flashbang(src) - new /obj/item/grenade/flashbang(src) - new /obj/item/grenade/flashbang(src) +/obj/item/storage/box/flashbangs/populate_contents() + for(var/I in 1 to 7) + new /obj/item/grenade/flashbang(src) /obj/item/storage/box/flashes name = "box of flashbulbs" desc = "WARNING: Flashes can cause serious eye damage, protective eyewear is required." icon_state = "flashbang" -/obj/item/storage/box/flashes/New() - ..() - new /obj/item/flash(src) - new /obj/item/flash(src) - new /obj/item/flash(src) - new /obj/item/flash(src) - new /obj/item/flash(src) - new /obj/item/flash(src) +/obj/item/storage/box/flashes/populate_contents() + for(var/I in 1 to 6) + new /obj/item/flash(src) /obj/item/storage/box/teargas name = "box of tear gas grenades (WARNING)" desc = "WARNING: These devices are extremely dangerous and can cause blindness and skin irritation." icon_state = "flashbang" -/obj/item/storage/box/teargas/New() - ..() - new /obj/item/grenade/chem_grenade/teargas(src) - new /obj/item/grenade/chem_grenade/teargas(src) - new /obj/item/grenade/chem_grenade/teargas(src) - new /obj/item/grenade/chem_grenade/teargas(src) - new /obj/item/grenade/chem_grenade/teargas(src) - new /obj/item/grenade/chem_grenade/teargas(src) - new /obj/item/grenade/chem_grenade/teargas(src) +/obj/item/storage/box/teargas/populate_contents() + for(var/I in 1 to 7) + new /obj/item/grenade/chem_grenade/teargas(src) /obj/item/storage/box/emps name = "emp grenades" desc = "A box with 5 emp grenades." icon_state = "flashbang" -/obj/item/storage/box/emps/New() - ..() - new /obj/item/grenade/empgrenade(src) - new /obj/item/grenade/empgrenade(src) - new /obj/item/grenade/empgrenade(src) - new /obj/item/grenade/empgrenade(src) - new /obj/item/grenade/empgrenade(src) +/obj/item/storage/box/emps/populate_contents() + for(var/I in 1 to 5) + new /obj/item/grenade/empgrenade(src) /obj/item/storage/box/trackimp @@ -339,8 +261,7 @@ desc = "Box full of scum-bag tracking utensils." icon_state = "implant" -/obj/item/storage/box/trackimp/New() - ..() +/obj/item/storage/box/trackimp/populate_contents() new /obj/item/implantcase/tracking(src) new /obj/item/implantcase/tracking(src) new /obj/item/implantcase/tracking(src) @@ -354,8 +275,7 @@ desc = "For finding those who have died on the accursed lavaworld." icon_state = "implant" -/obj/item/storage/box/minertracker/New() - ..() +/obj/item/storage/box/minertracker/populate_contents() new /obj/item/implantcase/tracking(src) new /obj/item/implantcase/tracking(src) new /obj/item/implantcase/tracking(src) @@ -368,13 +288,9 @@ desc = "Box of stuff used to implant chemicals." icon_state = "implant" -/obj/item/storage/box/chemimp/New() - ..() - new /obj/item/implantcase/chem(src) - new /obj/item/implantcase/chem(src) - new /obj/item/implantcase/chem(src) - new /obj/item/implantcase/chem(src) - new /obj/item/implantcase/chem(src) +/obj/item/storage/box/chemimp/populate_contents() + for(var/I in 1 to 5) + new /obj/item/implantcase/chem(src) new /obj/item/implanter(src) new /obj/item/implantpad(src) @@ -383,13 +299,9 @@ desc = "Box of exile implants. It has a picture of a clown being booted through the Gateway." icon_state = "implant" -/obj/item/storage/box/exileimp/New() - ..() - new /obj/item/implantcase/exile(src) - new /obj/item/implantcase/exile(src) - new /obj/item/implantcase/exile(src) - new /obj/item/implantcase/exile(src) - new /obj/item/implantcase/exile(src) +/obj/item/storage/box/exileimp/populate_contents() + for(var/I in 1 to 5) + new /obj/item/implantcase/exile(src) new /obj/item/implanter(src) /obj/item/storage/box/deathimp @@ -397,14 +309,9 @@ desc = "Box of life sign monitoring implants." icon_state = "implant" -/obj/item/storage/box/deathimp/New() - ..() - new /obj/item/implantcase/death_alarm(src) - new /obj/item/implantcase/death_alarm(src) - new /obj/item/implantcase/death_alarm(src) - new /obj/item/implantcase/death_alarm(src) - new /obj/item/implantcase/death_alarm(src) - new /obj/item/implantcase/death_alarm(src) +/obj/item/storage/box/deathimp/populate_contents() + for(var/I in 1 to 6) + new /obj/item/implantcase/death_alarm(src) new /obj/item/implanter(src) /obj/item/storage/box/tapes @@ -412,114 +319,60 @@ desc = "A box of spare recording tapes" icon_state = "box" -/obj/item/storage/box/tapes/New() - ..() - new /obj/item/tape(src) - new /obj/item/tape(src) - new /obj/item/tape(src) - new /obj/item/tape(src) - new /obj/item/tape(src) - new /obj/item/tape(src) +/obj/item/storage/box/tapes/populate_contents() + for(var/I in 1 to 6) + new /obj/item/tape(src) /obj/item/storage/box/rxglasses name = "prescription glasses" desc = "This box contains nerd glasses." icon_state = "glasses" -/obj/item/storage/box/rxglasses/New() - ..() - new /obj/item/clothing/glasses/regular(src) - new /obj/item/clothing/glasses/regular(src) - new /obj/item/clothing/glasses/regular(src) - new /obj/item/clothing/glasses/regular(src) - new /obj/item/clothing/glasses/regular(src) - new /obj/item/clothing/glasses/regular(src) - new /obj/item/clothing/glasses/regular(src) +/obj/item/storage/box/rxglasses/populate_contents() + for(var/I in 1 to 7) + new /obj/item/clothing/glasses/regular(src) /obj/item/storage/box/drinkingglasses name = "box of drinking glasses" desc = "It has a picture of drinking glasses on it." -/obj/item/storage/box/drinkingglasses/New() - ..() - new /obj/item/reagent_containers/food/drinks/drinkingglass(src) - new /obj/item/reagent_containers/food/drinks/drinkingglass(src) - new /obj/item/reagent_containers/food/drinks/drinkingglass(src) - new /obj/item/reagent_containers/food/drinks/drinkingglass(src) - new /obj/item/reagent_containers/food/drinks/drinkingglass(src) - new /obj/item/reagent_containers/food/drinks/drinkingglass(src) - -/obj/item/storage/box/cdeathalarm_kit - name = "Death Alarm Kit" - desc = "Box of stuff used to implant death alarms." - icon_state = "implant" - item_state = "syringe_kit" - -/obj/item/storage/box/cdeathalarm_kit/New() - ..() - new /obj/item/implanter(src) - new /obj/item/implantcase/death_alarm(src) - new /obj/item/implantcase/death_alarm(src) - new /obj/item/implantcase/death_alarm(src) - new /obj/item/implantcase/death_alarm(src) - new /obj/item/implantcase/death_alarm(src) - new /obj/item/implantcase/death_alarm(src) +/obj/item/storage/box/drinkingglasses/populate_contents() + for(var/I in 1 to 6) + new /obj/item/reagent_containers/food/drinks/drinkingglass(src) /obj/item/storage/box/condimentbottles name = "box of condiment bottles" desc = "It has a large ketchup smear on it." -/obj/item/storage/box/condimentbottles/New() - ..() - new /obj/item/reagent_containers/food/condiment(src) - new /obj/item/reagent_containers/food/condiment(src) - new /obj/item/reagent_containers/food/condiment(src) - new /obj/item/reagent_containers/food/condiment(src) - new /obj/item/reagent_containers/food/condiment(src) - new /obj/item/reagent_containers/food/condiment(src) +/obj/item/storage/box/condimentbottles/populate_contents() + for(var/I in 1 to 6) + new /obj/item/reagent_containers/food/condiment(src) /obj/item/storage/box/cups name = "box of paper cups" desc = "It has pictures of paper cups on the front." -/obj/item/storage/box/cups/New() - ..() - new /obj/item/reagent_containers/food/drinks/sillycup( src ) - new /obj/item/reagent_containers/food/drinks/sillycup( src ) - new /obj/item/reagent_containers/food/drinks/sillycup( src ) - new /obj/item/reagent_containers/food/drinks/sillycup( src ) - new /obj/item/reagent_containers/food/drinks/sillycup( src ) - new /obj/item/reagent_containers/food/drinks/sillycup( src ) - new /obj/item/reagent_containers/food/drinks/sillycup( src ) - +/obj/item/storage/box/cups/populate_contents() + for(var/I in 1 to 7) + new /obj/item/reagent_containers/food/drinks/sillycup(src) /obj/item/storage/box/donkpockets name = "box of donk-pockets" desc = "Instructions: Heat in microwave. Product will cool if not eaten within seven minutes." icon_state = "donk_kit" -/obj/item/storage/box/donkpockets/New() - ..() - new /obj/item/reagent_containers/food/snacks/donkpocket(src) - new /obj/item/reagent_containers/food/snacks/donkpocket(src) - new /obj/item/reagent_containers/food/snacks/donkpocket(src) - new /obj/item/reagent_containers/food/snacks/donkpocket(src) - new /obj/item/reagent_containers/food/snacks/donkpocket(src) - new /obj/item/reagent_containers/food/snacks/donkpocket(src) +/obj/item/storage/box/donkpockets/populate_contents() + for(var/I in 1 to 6) + new /obj/item/reagent_containers/food/snacks/donkpocket(src) /obj/item/storage/box/syndidonkpockets name = "box of donk-pockets" desc = "This box feels slightly warm" icon_state = "donk_kit" -/obj/item/storage/box/syndidonkpockets/New() - ..() - new /obj/item/reagent_containers/food/snacks/syndidonkpocket(src) - new /obj/item/reagent_containers/food/snacks/syndidonkpocket(src) - new /obj/item/reagent_containers/food/snacks/syndidonkpocket(src) - new /obj/item/reagent_containers/food/snacks/syndidonkpocket(src) - new /obj/item/reagent_containers/food/snacks/syndidonkpocket(src) - new /obj/item/reagent_containers/food/snacks/syndidonkpocket(src) +/obj/item/storage/box/syndidonkpockets/populate_contents() + for(var/I in 1 to 6) + new /obj/item/reagent_containers/food/snacks/syndidonkpocket(src) /obj/item/storage/box/monkeycubes name = "monkey cube box" @@ -530,9 +383,8 @@ can_hold = list(/obj/item/reagent_containers/food/snacks/monkeycube) var/monkey_cube_type = /obj/item/reagent_containers/food/snacks/monkeycube -/obj/item/storage/box/monkeycubes/New() - ..() - for(var/i in 1 to 5) +/obj/item/storage/box/monkeycubes/populate_contents() + for(var/I in 1 to 5) new monkey_cube_type(src) /obj/item/storage/box/monkeycubes/syndicate @@ -564,15 +416,9 @@ desc = "A box for containing construction permits, used to officially declare built rooms as additions to the station." icon_state = "id" -/obj/item/storage/box/permits/New() - ..() - new /obj/item/areaeditor/permit(src) - new /obj/item/areaeditor/permit(src) - new /obj/item/areaeditor/permit(src) - new /obj/item/areaeditor/permit(src) - new /obj/item/areaeditor/permit(src) - new /obj/item/areaeditor/permit(src) - new /obj/item/areaeditor/permit(src) +/obj/item/storage/box/permits/populate_contents() + for(var/I in 1 to 7) + new /obj/item/areaeditor/permit(src) /obj/item/storage/box/ids @@ -580,23 +426,16 @@ desc = "Has so many empty IDs." icon_state = "id" -/obj/item/storage/box/ids/New() - ..() - new /obj/item/card/id(src) - new /obj/item/card/id(src) - new /obj/item/card/id(src) - new /obj/item/card/id(src) - new /obj/item/card/id(src) - new /obj/item/card/id(src) - new /obj/item/card/id(src) +/obj/item/storage/box/ids/populate_contents() + for(var/I in 1 to 7) + new /obj/item/card/id(src) /obj/item/storage/box/prisoner name = "prisoner IDs" desc = "Take away their last shred of dignity, their name." icon_state = "id" -/obj/item/storage/box/prisoner/New() - ..() +/obj/item/storage/box/prisoner/populate_contents() new /obj/item/card/id/prisoner/one(src) new /obj/item/card/id/prisoner/two(src) new /obj/item/card/id/prisoner/three(src) @@ -610,23 +449,16 @@ desc = "A box full of R.O.B.U.S.T. Cartridges, used by Security." icon_state = "pda" -/obj/item/storage/box/seccarts/New() - ..() - new /obj/item/cartridge/security(src) - new /obj/item/cartridge/security(src) - new /obj/item/cartridge/security(src) - new /obj/item/cartridge/security(src) - new /obj/item/cartridge/security(src) - new /obj/item/cartridge/security(src) - new /obj/item/cartridge/security(src) +/obj/item/storage/box/seccarts/populate_contents() + for(var/I in 1 to 7) + new /obj/item/cartridge/security(src) /obj/item/storage/box/holobadge name = "holobadge box" icon_state = "box_badge" desc = "A box claiming to contain holobadges." -/obj/item/storage/box/holobadge/New() - ..() +/obj/item/storage/box/holobadge/populate_contents() new /obj/item/clothing/accessory/holobadge(src) new /obj/item/clothing/accessory/holobadge(src) new /obj/item/clothing/accessory/holobadge(src) @@ -639,53 +471,35 @@ desc = "A box claiming to contain evidence bags." icon_state = "box_evidence" -/obj/item/storage/box/evidence/New() - new /obj/item/evidencebag(src) - new /obj/item/evidencebag(src) - new /obj/item/evidencebag(src) - new /obj/item/evidencebag(src) - new /obj/item/evidencebag(src) - new /obj/item/evidencebag(src) - ..() +/obj/item/storage/box/evidence/populate_contents() + for(var/I in 1 to 6) + new /obj/item/evidencebag(src) /obj/item/storage/box/handcuffs name = "spare handcuffs" desc = "A box full of handcuffs." icon_state = "handcuff" -/obj/item/storage/box/handcuffs/New() - ..() - new /obj/item/restraints/handcuffs(src) - new /obj/item/restraints/handcuffs(src) - new /obj/item/restraints/handcuffs(src) - new /obj/item/restraints/handcuffs(src) - new /obj/item/restraints/handcuffs(src) - new /obj/item/restraints/handcuffs(src) - new /obj/item/restraints/handcuffs(src) +/obj/item/storage/box/handcuffs/populate_contents() + for(var/I in 1 to 7) + new /obj/item/restraints/handcuffs(src) /obj/item/storage/box/zipties name = "box of spare zipties" desc = "A box full of zipties." icon_state = "handcuff" -/obj/item/storage/box/zipties/New() - ..() - new /obj/item/restraints/handcuffs/cable/zipties(src) - new /obj/item/restraints/handcuffs/cable/zipties(src) - new /obj/item/restraints/handcuffs/cable/zipties(src) - new /obj/item/restraints/handcuffs/cable/zipties(src) - new /obj/item/restraints/handcuffs/cable/zipties(src) - new /obj/item/restraints/handcuffs/cable/zipties(src) - new /obj/item/restraints/handcuffs/cable/zipties(src) +/obj/item/storage/box/zipties/populate_contents() + for(var/I in 1 to 7) + new /obj/item/restraints/handcuffs/cable/zipties(src) /obj/item/storage/box/alienhandcuffs name = "box of spare handcuffs" desc = "A box full of handcuffs." icon_state = "alienboxCuffs" -/obj/item/storage/box/alienhandcuffs/New() - ..() - for(var/i in 1 to 7) +/obj/item/storage/box/alienhandcuffs/populate_contents() + for(var/I in 1 to 7) new /obj/item/restraints/handcuffs/alien(src) /obj/item/storage/box/fakesyndiesuit @@ -693,8 +507,7 @@ desc = "A sleek, sturdy box used to hold replica spacesuits." icon_state = "box_of_doom" -/obj/item/storage/box/fakesyndiesuit/New() - ..() +/obj/item/storage/box/fakesyndiesuit/populate_contents() new /obj/item/clothing/head/syndicatefake(src) new /obj/item/clothing/suit/syndicatefake(src) @@ -703,8 +516,7 @@ desc = "A box marked with pictures of an enforcer pistol, two ammo clips, and the word 'NON-LETHAL'." icon_state = "box_ert" -/obj/item/storage/box/enforcer_rubber/New() - ..() +/obj/item/storage/box/enforcer_rubber/populate_contents() new /obj/item/gun/projectile/automatic/pistol/enforcer(src) // loaded with rubber by default new /obj/item/ammo_box/magazine/enforcer(src) new /obj/item/ammo_box/magazine/enforcer(src) @@ -714,8 +526,7 @@ desc = "A box marked with pictures of an enforcer pistol, two ammo clips, and the word 'LETHAL'." icon_state = "box_ert" -/obj/item/storage/box/enforcer_lethal/New() - ..() +/obj/item/storage/box/enforcer_lethal/populate_contents() new /obj/item/gun/projectile/automatic/pistol/enforcer/lethal(src) new /obj/item/ammo_box/magazine/enforcer/lethal(src) new /obj/item/ammo_box/magazine/enforcer/lethal(src) @@ -724,8 +535,7 @@ name = "bartender rare reagents kit" desc = "A box intended for experienced bartenders." -/obj/item/storage/box/bartender_rare_ingredients_kit/New() - ..() +/obj/item/storage/box/bartender_rare_ingredients_kit/populate_contents() var/list/reagent_list = list("sacid", "radium", "ether", "methamphetamine", "plasma", "gold", "silver", "capsaicin", "psilocybin") for(var/reag in reagent_list) var/obj/item/reagent_containers/glass/bottle/B = new(src) @@ -736,8 +546,7 @@ name = "chef rare reagents kit" desc = "A box intended for experienced chefs." -/obj/item/storage/box/chef_rare_ingredients_kit/New() - ..() +/obj/item/storage/box/chef_rare_ingredients_kit/populate_contents() new /obj/item/reagent_containers/food/condiment/soysauce(src) new /obj/item/reagent_containers/food/condiment/enzyme(src) new /obj/item/reagent_containers/food/condiment/pack/hotsauce(src) @@ -753,57 +562,34 @@ desc = "WARNING: Keep out of reach of children." icon_state = "mousetraps" -/obj/item/storage/box/mousetraps/New() - ..() - new /obj/item/assembly/mousetrap( src ) - new /obj/item/assembly/mousetrap( src ) - new /obj/item/assembly/mousetrap( src ) - new /obj/item/assembly/mousetrap( src ) - new /obj/item/assembly/mousetrap( src ) - new /obj/item/assembly/mousetrap( src ) +/obj/item/storage/box/mousetraps/populate_contents() + for(var/I in 1 to 6) + new /obj/item/assembly/mousetrap(src) /obj/item/storage/box/pillbottles name = "box of pill bottles" desc = "It has pictures of pill bottles on its front." -/obj/item/storage/box/pillbottles/New() - ..() - new /obj/item/storage/pill_bottle( src ) - new /obj/item/storage/pill_bottle( src ) - new /obj/item/storage/pill_bottle( src ) - new /obj/item/storage/pill_bottle( src ) - new /obj/item/storage/pill_bottle( src ) - new /obj/item/storage/pill_bottle( src ) - new /obj/item/storage/pill_bottle( src ) +/obj/item/storage/box/pillbottles/populate_contents() + for(var/I in 1 to 7) + new /obj/item/storage/pill_bottle(src) /obj/item/storage/box/patch_packs name = "box of patch packs" desc = "It has pictures of patch packs on its front." -/obj/item/storage/box/patch_packs/New() - ..() - new /obj/item/storage/pill_bottle/patch_pack(src) - new /obj/item/storage/pill_bottle/patch_pack(src) - new /obj/item/storage/pill_bottle/patch_pack(src) - new /obj/item/storage/pill_bottle/patch_pack(src) - new /obj/item/storage/pill_bottle/patch_pack(src) - new /obj/item/storage/pill_bottle/patch_pack(src) - new /obj/item/storage/pill_bottle/patch_pack(src) +/obj/item/storage/box/patch_packs/populate_contents() + for(var/I in 1 to 7) + new /obj/item/storage/pill_bottle/patch_pack(src) /obj/item/storage/box/bodybags name = "body bags" desc = "This box contains body bags." icon_state = "bodybags" -/obj/item/storage/box/bodybags/New() - ..() - new /obj/item/bodybag(src) - new /obj/item/bodybag(src) - new /obj/item/bodybag(src) - new /obj/item/bodybag(src) - new /obj/item/bodybag(src) - new /obj/item/bodybag(src) - new /obj/item/bodybag(src) +/obj/item/storage/box/bodybags/populate_contents() + for(var/I in 1 to 7) + new /obj/item/bodybag(src) /obj/item/storage/box/snappops name = "snap pop box" @@ -813,9 +599,8 @@ storage_slots = 8 can_hold = list(/obj/item/toy/snappop) -/obj/item/storage/box/snappops/New() - ..() - for(var/i=1; i <= storage_slots; i++) +/obj/item/storage/box/snappops/populate_contents() + for(var/I in 1 to storage_slots) new /obj/item/toy/snappop(src) /obj/item/storage/box/matches @@ -828,11 +613,12 @@ w_class = WEIGHT_CLASS_TINY max_w_class = WEIGHT_CLASS_TINY slot_flags = SLOT_BELT + drop_sound = 'sound/items/handling/matchbox_drop.ogg' + pickup_sound = 'sound/items/handling/matchbox_pickup.ogg' can_hold = list(/obj/item/match) -/obj/item/storage/box/matches/New() - ..() - for(var/i in 1 to storage_slots) +/obj/item/storage/box/matches/populate_contents() + for(var/I in 1 to storage_slots) new /obj/item/match(src) /obj/item/storage/box/matches/attackby(obj/item/match/W, mob/user, params) @@ -846,9 +632,8 @@ desc = "Contains autoinjectors." icon_state = "syringe" -/obj/item/storage/box/autoinjectors/New() - ..() - for(var/i; i < storage_slots; i++) +/obj/item/storage/box/autoinjectors/populate_contents() + for(var/I in 1 to storage_slots) new /obj/item/reagent_containers/hypospray/autoinjector(src) /obj/item/storage/box/autoinjector/utility @@ -856,8 +641,7 @@ desc = "A box with several utility autoinjectors for the economical miner." icon_state = "syringe" -/obj/item/storage/box/autoinjector/utility/New() - ..() +/obj/item/storage/box/autoinjector/utility/populate_contents() new /obj/item/reagent_containers/hypospray/autoinjector/teporone(src) new /obj/item/reagent_containers/hypospray/autoinjector/teporone(src) new /obj/item/reagent_containers/hypospray/autoinjector/stimpack(src) @@ -870,34 +654,31 @@ icon_state = "light" desc = "This box is shaped on the inside so that only light tubes and bulbs fit." item_state = "syringe_kit" - storage_slots=21 + storage_slots = 21 can_hold = list(/obj/item/light/tube, /obj/item/light/bulb) max_combined_w_class = 21 use_to_pickup = 1 // for picking up broken bulbs, not that most people will try -/obj/item/storage/box/lights/bulbs/New() - ..() - for(var/i = 0; i < 21; i++) +/obj/item/storage/box/lights/bulbs/populate_contents() + for(var/I in 1 to storage_slots) new /obj/item/light/bulb(src) /obj/item/storage/box/lights/tubes name = "replacement tubes" icon_state = "lighttube" -/obj/item/storage/box/lights/tubes/New() - ..() - for(var/i = 0; i < 21; i++) +/obj/item/storage/box/lights/tubes/populate_contents() + for(var/I in 1 to storage_slots) new /obj/item/light/tube(src) /obj/item/storage/box/lights/mixed name = "replacement lights" icon_state = "lightmixed" -/obj/item/storage/box/lights/mixed/New() - ..() - for(var/i = 0; i < 14; i++) +/obj/item/storage/box/lights/mixed/populate_contents() + for(var/I in 1 to 14) new /obj/item/light/tube(src) - for(var/i = 0; i < 7; i++) + for(var/I in 1 to 7) new /obj/item/light/bulb(src) /obj/item/storage/box/barber @@ -905,8 +686,7 @@ desc = "For all hairstyling needs." icon_state = "implant" -/obj/item/storage/box/barber/New() - ..() +/obj/item/storage/box/barber/populate_contents() new /obj/item/scissors/barber(src) new /obj/item/hair_dye_bottle(src) new /obj/item/reagent_containers/glass/bottle/reagent/hairgrownium(src) @@ -920,8 +700,7 @@ desc = "For all your lip coloring needs." icon_state = "implant" -/obj/item/storage/box/lip_stick/New() - ..() +/obj/item/storage/box/lip_stick/populate_contents() new /obj/item/lipstick(src) new /obj/item/lipstick/purple(src) new /obj/item/lipstick/jade(src) @@ -1002,9 +781,7 @@ storage_slots = 14 max_combined_w_class = 20 -/obj/item/storage/box/centcomofficer/New() - ..() - contents = list() +/obj/item/storage/box/centcomofficer/populate_contents() new /obj/item/clothing/mask/breath(src) new /obj/item/tank/internals/emergency_oxygen/double(src) new /obj/item/flashlight/seclite(src) @@ -1022,8 +799,7 @@ name = "boxed survival kit" icon_state = "box_ert" -/obj/item/storage/box/responseteam/New() - ..() +/obj/item/storage/box/responseteam/populate_contents() new /obj/item/clothing/mask/breath(src) new /obj/item/tank/internals/emergency_oxygen/engi(src) new /obj/item/flashlight/flare(src) @@ -1042,31 +818,29 @@ /obj/item/storage/box/emptysandbags name = "box of empty sandbags" -/obj/item/storage/box/emptysandbags/New() - ..() - contents = list() - for(var/i in 1 to 7) +/obj/item/storage/box/emptysandbags/populate_contents() + for(var/I in 1 to 7) new /obj/item/emptysandbag(src) /obj/item/storage/box/rndboards name = "the Liberator's legacy" desc = "A box containing a gift for worthy golems." -/obj/item/storage/box/rndboards/New() - ..() - contents = list() +/obj/item/storage/box/rndboards/populate_contents() new /obj/item/circuitboard/protolathe(src) new /obj/item/circuitboard/destructive_analyzer(src) new /obj/item/circuitboard/circuit_imprinter(src) new /obj/item/circuitboard/rdconsole/public(src) +/obj/item/storage/box/stockparts + display_contents_with_number = TRUE + /obj/item/storage/box/stockparts/basic //for ruins where it's a bad idea to give access to an autolathe/protolathe, but still want to make stock parts accessible name = "box of stock parts" desc = "Contains a variety of basic stock parts." -/obj/item/storage/box/stockparts/basic/New() - ..() - for(var/i in 1 to 3) +/obj/item/storage/box/stockparts/basic/populate_contents() + for(var/I in 1 to 3) new /obj/item/stock_parts/capacitor(src) new /obj/item/stock_parts/scanning_module(src) new /obj/item/stock_parts/manipulator(src) @@ -1077,9 +851,8 @@ name = "box of deluxe stock parts" desc = "Contains a variety of deluxe stock parts." -/obj/item/storage/box/stockparts/deluxe/New() - ..() - for(var/i in 1 to 3) +/obj/item/storage/box/stockparts/deluxe/populate_contents() + for(var/I in 1 to 3) new /obj/item/stock_parts/capacitor/quadratic(src) new /obj/item/stock_parts/scanning_module/triphasic(src) new /obj/item/stock_parts/manipulator/femto(src) diff --git a/code/game/objects/items/weapons/storage/briefcase.dm b/code/game/objects/items/weapons/storage/briefcase.dm index 55911d4ddc5..952da94ff73 100644 --- a/code/game/objects/items/weapons/storage/briefcase.dm +++ b/code/game/objects/items/weapons/storage/briefcase.dm @@ -19,8 +19,7 @@ desc = "Its label reads \"genuine hardened Captain leather\", but suspiciously has no other tags or branding. Smells like L'Air du Temps." force = 10 -/obj/item/storage/briefcase/sniperbundle/New() - ..() +/obj/item/storage/briefcase/sniperbundle/populate_contents() new /obj/item/gun/projectile/automatic/sniper_rifle/syndicate(src) new /obj/item/clothing/accessory/red(src) new /obj/item/clothing/under/syndicate/sniper(src) @@ -47,7 +46,7 @@ var/obj/item/gun/stored_gun = stored_item stored_gun.afterattack(A, user, flag, params) -/obj/item/storage/briefcase/false_bottomed/attackby(var/obj/item/I, mob/user) +/obj/item/storage/briefcase/false_bottomed/attackby(obj/item/I, mob/user) if(bottom_open) if(stored_item) to_chat(user, "There's already something in the false bottom!") diff --git a/code/game/objects/items/weapons/storage/fancy.dm b/code/game/objects/items/weapons/storage/fancy.dm index 98c6a439ac4..71852c60541 100644 --- a/code/game/objects/items/weapons/storage/fancy.dm +++ b/code/game/objects/items/weapons/storage/fancy.dm @@ -18,9 +18,9 @@ resistance_flags = FLAMMABLE var/icon_type -/obj/item/storage/fancy/update_icon(var/itemremoved = 0) - var/total_contents = src.contents.len - itemremoved - src.icon_state = "[src.icon_type]box[total_contents]" +/obj/item/storage/fancy/update_icon(itemremoved = 0) + var/total_contents = length(contents) - itemremoved + icon_state = "[icon_type]box[total_contents]" return /obj/item/storage/fancy/examine(mob/user) @@ -28,11 +28,11 @@ if(in_range(user, src)) var/len = LAZYLEN(contents) if(len <= 0) - . += "There are no [src.icon_type]s left in the box." + . += "There are no [icon_type]s left in the box." else if(len == 1) - . += "There is one [src.icon_type] left in the box." + . += "There is one [icon_type] left in the box." else - . += "There are [src.contents.len] [src.icon_type]s in the box." + . += "There are [length(contents)] [icon_type]s in the box." /* * Donut Box @@ -51,23 +51,21 @@ /obj/item/storage/fancy/donut_box/update_icon() overlays.Cut() - for(var/i = 1 to length(contents)) - var/obj/item/reagent_containers/food/snacks/donut/donut = contents[i] + for(var/I = 1 to length(contents)) + var/obj/item/reagent_containers/food/snacks/donut/donut = contents[I] var/icon/new_donut_icon = icon('icons/obj/food/containers.dmi', "donut_[donut.donut_sprite_type]") - new_donut_icon.Shift(EAST, 3 * (i-1)) + new_donut_icon.Shift(EAST, 3 * (I-1)) overlays += new_donut_icon overlays += icon('icons/obj/food/containers.dmi', "donutbox_front") -/obj/item/storage/fancy/donut_box/New() - ..() - if(!empty) - for(var/i = 1 to storage_slots) - new /obj/item/reagent_containers/food/snacks/donut(src) +/obj/item/storage/fancy/donut_box/populate_contents() + for(var/I in 1 to storage_slots) + new /obj/item/reagent_containers/food/snacks/donut(src) update_icon() -/obj/item/storage/fancy/donut_box/empty - empty = TRUE +/obj/item/storage/fancy/donut_box/empty/populate_contents() + return /* * Egg Box @@ -81,11 +79,9 @@ storage_slots = 12 can_hold = list(/obj/item/reagent_containers/food/snacks/egg) -/obj/item/storage/fancy/egg_box/New() - ..() - for(var/i=1; i <= storage_slots; i++) +/obj/item/storage/fancy/egg_box/populate_contents() + for(var/I in 1 to storage_slots) new /obj/item/reagent_containers/food/snacks/egg(src) - return /* * Candle Box @@ -103,21 +99,17 @@ slot_flags = SLOT_BELT -/obj/item/storage/fancy/candle_box/full/New() - ..() - for(var/i=1; i <= storage_slots; i++) +/obj/item/storage/fancy/candle_box/full/populate_contents() + for(var/I in 1 to storage_slots) new /obj/item/candle(src) - return /obj/item/storage/fancy/candle_box/eternal name = "Eternal Candle pack" desc = "A pack of red candles made with a special wax." -/obj/item/storage/fancy/candle_box/eternal/New() - ..() - for(var/i=1; i <= storage_slots; i++) +/obj/item/storage/fancy/candle_box/eternal/populate_contents() + for(var/I in 1 to storage_slots) new /obj/item/candle/eternal(src) - return /* * Crayon Box @@ -135,8 +127,7 @@ /obj/item/toy/crayon ) -/obj/item/storage/fancy/crayons/New() - ..() +/obj/item/storage/fancy/crayons/populate_contents() new /obj/item/toy/crayon/red(src) new /obj/item/toy/crayon/orange(src) new /obj/item/toy/crayon/yellow(src) @@ -151,9 +142,10 @@ for(var/obj/item/toy/crayon/crayon in contents) overlays += image('icons/obj/crayons.dmi',crayon.colourName) -/obj/item/storage/fancy/crayons/attackby(obj/item/W as obj, mob/user as mob, params) - if(istype(W,/obj/item/toy/crayon)) - switch(W:colourName) +/obj/item/storage/fancy/crayons/attackby(obj/item/I, mob/user, params) + if(istype(I, /obj/item/toy/crayon)) + var/obj/item/toy/crayon/C = I + switch(C.colourName) if("mime") to_chat(usr, "This crayon is too sad to be contained in this box.") return @@ -185,9 +177,8 @@ icon_type = "cigarette" var/cigarette_type = /obj/item/clothing/mask/cigarette -/obj/item/storage/fancy/cigarettes/New() - ..() - for(var/i = 1 to storage_slots) +/obj/item/storage/fancy/cigarettes/populate_contents() + for(var/I in 1 to storage_slots) new cigarette_type(src) /obj/item/storage/fancy/cigarettes/update_icon() @@ -227,7 +218,7 @@ to_chat(usr, "Putting [W] in [src] while lit probably isn't a good idea.") return 0 //if we get this far, handle the insertion checks as normal - .=..() + . = ..() /obj/item/storage/fancy/cigarettes/decompile_act(obj/item/matter_decompiler/C, mob/user) if(!length(contents)) @@ -249,8 +240,8 @@ icon_state = "robustpacket" item_state = "robustpacket" -/obj/item/storage/fancy/cigarettes/syndicate/New() - ..() +/obj/item/storage/fancy/cigarettes/syndicate/Initialize(mapload) + . = ..() var/new_name = pick("evil", "suspicious", "ominous", "donk-flavored", "robust", "sneaky") name = "[new_name] cigarette packet" @@ -262,7 +253,7 @@ cigarette_type = /obj/item/clothing/mask/cigarette/syndicate /obj/item/storage/fancy/cigarettes/cigpack_med - name = "Medical Marijuana Packet" + name = "\improper Medical Marijuana Packet" desc = "A prescription packet containing six marijuana cigarettes." icon_state = "medpacket" item_state = "medpacket" @@ -326,9 +317,8 @@ icon_type = "rolling paper" can_hold = list(/obj/item/rollingpaper) -/obj/item/storage/fancy/rollingpapers/New() - ..() - for(var/i in 1 to storage_slots) +/obj/item/storage/fancy/rollingpapers/populate_contents() + for(var/I in 1 to storage_slots) new /obj/item/rollingpaper(src) /obj/item/storage/fancy/rollingpapers/update_icon() @@ -349,9 +339,8 @@ can_hold = list(/obj/item/reagent_containers/glass/beaker/vial) -/obj/item/storage/fancy/vials/New() - ..() - for(var/i=1; i <= storage_slots; i++) +/obj/item/storage/fancy/vials/populate_contents() + for(var/I in 1 to storage_slots) new /obj/item/reagent_containers/glass/beaker/vial(src) return @@ -367,23 +356,21 @@ storage_slots = 6 req_access = list(ACCESS_VIROLOGY) -/obj/item/storage/lockbox/vials/New() - ..() +/obj/item/storage/lockbox/vials/Initialize(mapload) + . = ..() update_icon() -/obj/item/storage/lockbox/vials/update_icon(var/itemremoved = 0) - var/total_contents = src.contents.len - itemremoved - src.icon_state = "vialbox[total_contents]" - src.overlays.Cut() +/obj/item/storage/lockbox/vials/update_icon() + icon_state = "vialbox[length(contents)]" + cut_overlays() if(!broken) overlays += image(icon, src, "led[locked]") if(locked) overlays += image(icon, src, "cover") else overlays += image(icon, src, "ledb") - return -/obj/item/storage/lockbox/vials/attackby(obj/item/W as obj, mob/user as mob, params) +/obj/item/storage/lockbox/vials/attackby(obj/item/I, mob/user, params) ..() update_icon() @@ -402,8 +389,7 @@ /obj/item/storage/firstaid/aquatic_kit/full desc = "It's a starter kit for an aquarium; includes 1 tank brush, 1 egg scoop, 1 fish net, 1 container of fish food and 1 fish bag." -/obj/item/storage/firstaid/aquatic_kit/full/New() - ..() +/obj/item/storage/firstaid/aquatic_kit/full/populate_contents() new /obj/item/egg_scoop(src) new /obj/item/fish_net(src) new /obj/item/tank_brush(src) diff --git a/code/game/objects/items/weapons/storage/firstaid.dm b/code/game/objects/items/weapons/storage/firstaid.dm index d875e469464..ec00a0c4c08 100644 --- a/code/game/objects/items/weapons/storage/firstaid.dm +++ b/code/game/objects/items/weapons/storage/firstaid.dm @@ -32,28 +32,25 @@ item_state = "firstaid-ointment" med_bot_skin = "ointment" -/obj/item/storage/firstaid/fire/New() - ..() - if(empty) - return +/obj/item/storage/firstaid/fire/Initialize(mapload) + . = ..() icon_state = pick("ointment", "firefirstaid") + +/obj/item/storage/firstaid/fire/populate_contents() new /obj/item/reagent_containers/applicator/burn(src) new /obj/item/reagent_containers/food/pill/patch/silver_sulf/small(src) new /obj/item/healthanalyzer(src) new /obj/item/reagent_containers/hypospray/autoinjector(src) new /obj/item/reagent_containers/food/pill/salicylic(src) -/obj/item/storage/firstaid/fire/empty - empty = TRUE +/obj/item/storage/firstaid/fire/empty/populate_contents() + return /obj/item/storage/firstaid/regular desc = "A general medical kit that contains medical patches for both brute damage and burn damage. Also contains an epinephrine syringe for emergency use and a health analyzer" icon_state = "firstaid" -/obj/item/storage/firstaid/regular/New() - ..() - if(empty) - return +/obj/item/storage/firstaid/regular/populate_contents() new /obj/item/reagent_containers/food/pill/patch/styptic(src) new /obj/item/reagent_containers/food/pill/patch/styptic(src) new /obj/item/reagent_containers/food/pill/salicylic(src) @@ -62,14 +59,14 @@ new /obj/item/healthanalyzer(src) new /obj/item/reagent_containers/hypospray/autoinjector(src) +/obj/item/storage/firstaid/regular/empty/populate_contents() + return + /obj/item/storage/firstaid/doctor desc = "A general medical kit that contains medical patches for both brute damage and burn damage. Also contains an epinephrine syringe for emergency use and a health analyzer" icon_state = "firstaid" -/obj/item/storage/firstaid/doctor/New() - ..() - if(empty) - return +/obj/item/storage/firstaid/doctor/populate_contents() new /obj/item/reagent_containers/applicator/brute(src) new /obj/item/reagent_containers/applicator/burn(src) new /obj/item/reagent_containers/food/pill/patch/styptic(src) @@ -85,21 +82,18 @@ item_state = "firstaid-toxin" med_bot_skin = "tox" -/obj/item/storage/firstaid/toxin/New() - ..() - if(empty) - return +/obj/item/storage/firstaid/toxin/Initialize(mapload) + . = ..() icon_state = pick("antitoxin", "antitoxfirstaid", "antitoxfirstaid2", "antitoxfirstaid3") - new /obj/item/reagent_containers/syringe/charcoal(src) - new /obj/item/reagent_containers/syringe/charcoal(src) - new /obj/item/reagent_containers/syringe/charcoal(src) - new /obj/item/reagent_containers/food/pill/charcoal(src) - new /obj/item/reagent_containers/food/pill/charcoal(src) - new /obj/item/reagent_containers/food/pill/charcoal(src) + +/obj/item/storage/firstaid/toxin/populate_contents() + for(var/I in 1 to 3) + new /obj/item/reagent_containers/syringe/charcoal(src) + new /obj/item/reagent_containers/food/pill/charcoal(src) new /obj/item/healthanalyzer(src) -/obj/item/storage/firstaid/toxin/empty - empty = TRUE +/obj/item/storage/firstaid/toxin/empty/populate_contents() + return /obj/item/storage/firstaid/o2 name = "oxygen deprivation first aid kit" @@ -108,18 +102,15 @@ item_state = "firstaid-o2" med_bot_skin = "o2" -/obj/item/storage/firstaid/o2/New() - ..() - if(empty) - return +/obj/item/storage/firstaid/o2/populate_contents() new /obj/item/reagent_containers/food/pill/salbutamol(src) new /obj/item/reagent_containers/food/pill/salbutamol(src) new /obj/item/reagent_containers/food/pill/salbutamol(src) new /obj/item/reagent_containers/food/pill/salbutamol(src) new /obj/item/healthanalyzer(src) -/obj/item/storage/firstaid/o2/empty - empty = TRUE +/obj/item/storage/firstaid/o2/empty/populate_contents() + return /obj/item/storage/firstaid/brute name = "brute trauma treatment kit" @@ -128,19 +119,19 @@ item_state = "firstaid-brute" med_bot_skin = "brute" -/obj/item/storage/firstaid/brute/New() - ..() - if(empty) - return +/obj/item/storage/firstaid/brute/Initialize(mapload) + . = ..() icon_state = pick("brute", "brute2") + +/obj/item/storage/firstaid/brute/populate_contents() new /obj/item/reagent_containers/applicator/brute(src) new /obj/item/reagent_containers/food/pill/patch/styptic/small(src) new /obj/item/healthanalyzer(src) new /obj/item/reagent_containers/hypospray/autoinjector(src) new /obj/item/stack/medical/bruise_pack(src) -/obj/item/storage/firstaid/brute/empty - empty = TRUE +/obj/item/storage/firstaid/brute/empty/populate_contents() + return /obj/item/storage/firstaid/adv name = "advanced first-aid kit" @@ -149,10 +140,7 @@ item_state = "firstaid-advanced" med_bot_skin = "adv" -/obj/item/storage/firstaid/adv/New() - ..() - if(empty) - return +/obj/item/storage/firstaid/adv/populate_contents() new /obj/item/stack/medical/bruise_pack(src) new /obj/item/stack/medical/bruise_pack/advanced(src) new /obj/item/stack/medical/bruise_pack/advanced(src) @@ -161,8 +149,8 @@ new /obj/item/reagent_containers/hypospray/autoinjector(src) new /obj/item/healthanalyzer(src) -/obj/item/storage/firstaid/adv/empty - empty = TRUE +/obj/item/storage/firstaid/adv/empty/populate_contents() + return /obj/item/storage/firstaid/machine name = "machine repair kit" @@ -171,19 +159,15 @@ item_state = "firstaid-machine" med_bot_skin = "machine" -/obj/item/storage/firstaid/machine/New() - ..() - if(empty) - return +/obj/item/storage/firstaid/machine/populate_contents() new /obj/item/weldingtool(src) new /obj/item/stack/cable_coil(src) new /obj/item/stack/cable_coil(src) new /obj/item/stack/cable_coil(src) new /obj/item/robotanalyzer(src) -/obj/item/storage/firstaid/machine/empty - empty = TRUE - +/obj/item/storage/firstaid/machine/empty/populate_contents() + return /obj/item/storage/firstaid/tactical name = "first-aid kit" @@ -198,17 +182,14 @@ med_bot_skin = "bezerk" syndicate_aligned = TRUE -/obj/item/storage/firstaid/tactical/New() - ..() - if(empty) - return +/obj/item/storage/firstaid/tactical/populate_contents() new /obj/item/reagent_containers/hypospray/combat(src) new /obj/item/reagent_containers/applicator/dual/syndi(src) // Because you ain't got no time to look at what damage dey taking yo new /obj/item/defibrillator/compact/combat/loaded(src) new /obj/item/clothing/glasses/hud/health/night(src) -/obj/item/storage/firstaid/tactical/empty - empty = TRUE +/obj/item/storage/firstaid/tactical/empty/populate_contents() + return /obj/item/storage/firstaid/surgery name = "field surgery kit" @@ -220,8 +201,7 @@ can_hold = list(/obj/item/roller,/obj/item/bonesetter,/obj/item/bonegel, /obj/item/scalpel, /obj/item/hemostat, /obj/item/cautery, /obj/item/retractor, /obj/item/FixOVein, /obj/item/surgicaldrill, /obj/item/circular_saw) -/obj/item/storage/firstaid/surgery/New() - ..() +/obj/item/storage/firstaid/surgery/populate_contents() new /obj/item/roller(src) new /obj/item/bonesetter(src) new /obj/item/bonegel(src) @@ -263,8 +243,8 @@ /// The icon state of the wrapper overlay. var/wrapper_state = "pillbottle_wrap" -/obj/item/storage/pill_bottle/New() - ..() +/obj/item/storage/pill_bottle/Initialize(mapload) + . = ..() base_name = name if(allow_wrap) apply_wrap() @@ -294,16 +274,12 @@ /obj/item/storage/pill_bottle/ert wrapper_color = COLOR_MAROON -/obj/item/storage/pill_bottle/ert/New() - ..() - new /obj/item/reagent_containers/food/pill/salicylic(src) - new /obj/item/reagent_containers/food/pill/salicylic(src) - new /obj/item/reagent_containers/food/pill/salicylic(src) - new /obj/item/reagent_containers/food/pill/charcoal(src) - new /obj/item/reagent_containers/food/pill/charcoal(src) - new /obj/item/reagent_containers/food/pill/charcoal(src) +/obj/item/storage/pill_bottle/ert/populate_contents() + for(var/I in 1 to 3) + new /obj/item/reagent_containers/food/pill/salicylic(src) + new /obj/item/reagent_containers/food/pill/charcoal(src) -/obj/item/storage/pill_bottle/MouseDrop(obj/over_object as obj) // Best utilized if you're a cantankerous doctor with a Vicodin habit. +/obj/item/storage/pill_bottle/MouseDrop(obj/over_object) // Best utilized if you're a cantankerous doctor with a Vicodin habit. if(iscarbon(over_object)) var/mob/living/carbon/C = over_object if(loc == C && src == C.get_active_hand()) @@ -340,37 +316,23 @@ desc = "Contains pills used to counter toxins." wrapper_color = COLOR_GREEN -/obj/item/storage/pill_bottle/charcoal/New() - ..() - new /obj/item/reagent_containers/food/pill/charcoal(src) - new /obj/item/reagent_containers/food/pill/charcoal(src) - new /obj/item/reagent_containers/food/pill/charcoal(src) - new /obj/item/reagent_containers/food/pill/charcoal(src) - new /obj/item/reagent_containers/food/pill/charcoal(src) - new /obj/item/reagent_containers/food/pill/charcoal(src) - new /obj/item/reagent_containers/food/pill/charcoal(src) +/obj/item/storage/pill_bottle/charcoal/populate_contents() + for(var/I in 1 to 7) + new /obj/item/reagent_containers/food/pill/charcoal(src) /obj/item/storage/pill_bottle/painkillers name = "Pill Bottle (Salicylic Acid)" desc = "Contains various pills for minor pain relief." wrapper_color = COLOR_RED -/obj/item/storage/pill_bottle/painkillers/New() - ..() - new /obj/item/reagent_containers/food/pill/salicylic(src) - new /obj/item/reagent_containers/food/pill/salicylic(src) - new /obj/item/reagent_containers/food/pill/salicylic(src) - new /obj/item/reagent_containers/food/pill/salicylic(src) - new /obj/item/reagent_containers/food/pill/salicylic(src) - new /obj/item/reagent_containers/food/pill/salicylic(src) - new /obj/item/reagent_containers/food/pill/salicylic(src) - new /obj/item/reagent_containers/food/pill/salicylic(src) +/obj/item/storage/pill_bottle/painkillers/populate_contents() + for(var/I in 1 to 8) + new /obj/item/reagent_containers/food/pill/salicylic(src) /obj/item/storage/pill_bottle/fakedeath allow_wrap = FALSE -/obj/item/storage/pill_bottle/fakedeath/New() - ..() +/obj/item/storage/pill_bottle/fakedeath/populate_contents() new /obj/item/reagent_containers/food/pill/fakedeath(src) new /obj/item/reagent_containers/food/pill/fakedeath(src) new /obj/item/reagent_containers/food/pill/fakedeath(src) diff --git a/code/game/objects/items/weapons/storage/internal.dm b/code/game/objects/items/weapons/storage/internal.dm index 293157cb375..278f1af1403 100644 --- a/code/game/objects/items/weapons/storage/internal.dm +++ b/code/game/objects/items/weapons/storage/internal.dm @@ -36,7 +36,7 @@ return 0 if(over_object == user && Adjacent(user)) // this must come before the screen objects only block - src.open(user) + open(user) return 0 if(!( istype(over_object, /obj/screen) )) @@ -50,10 +50,10 @@ if(!( user.restrained() ) && !( user.stat )) switch(over_object.name) if("r_hand") - user.unEquip(master_item) + user.unEquip(master_item, silent = TRUE) user.put_in_r_hand(master_item) if("l_hand") - user.unEquip(master_item) + user.unEquip(master_item, silent = TRUE) user.put_in_l_hand(master_item) master_item.add_fingerprint(user) return 0 @@ -75,15 +75,15 @@ H.r_store = null return 0 - src.add_fingerprint(user) + add_fingerprint(user) if(master_item.loc == user) - src.open(user) + open(user) return 0 for(var/mob/M in range(1, master_item.loc)) if(M.s_active == src) - src.close(M) + close(M) return 1 -/obj/item/storage/internal/Adjacent(var/atom/neighbor) +/obj/item/storage/internal/Adjacent(atom/neighbor) return master_item.Adjacent(neighbor) diff --git a/code/game/objects/items/weapons/storage/lockbox.dm b/code/game/objects/items/weapons/storage/lockbox.dm index b67ba9154e3..851ca02a441 100644 --- a/code/game/objects/items/weapons/storage/lockbox.dm +++ b/code/game/objects/items/weapons/storage/lockbox.dm @@ -77,8 +77,7 @@ name = "Lockbox (Mindshield Implants)" req_access = list(ACCESS_SECURITY) -/obj/item/storage/lockbox/mindshield/New() - ..() +/obj/item/storage/lockbox/mindshield/populate_contents() new /obj/item/implantcase/mindshield(src) new /obj/item/implantcase/mindshield(src) new /obj/item/implantcase/mindshield(src) @@ -89,8 +88,7 @@ desc = "You have a bad feeling about opening this." req_access = list(ACCESS_SECURITY) -/obj/item/storage/lockbox/clusterbang/New() - ..() +/obj/item/storage/lockbox/clusterbang/populate_contents() new /obj/item/grenade/clusterbuster(src) /obj/item/storage/lockbox/medal @@ -107,8 +105,7 @@ icon_closed = "medalbox" icon_broken = "medalbox+b" -/obj/item/storage/lockbox/medal/New() - ..() +/obj/item/storage/lockbox/medal/populate_contents() new /obj/item/clothing/accessory/medal/gold/captain(src) new /obj/item/clothing/accessory/medal/silver/leadership(src) new /obj/item/clothing/accessory/medal/silver/valor(src) @@ -119,8 +116,7 @@ desc = "Contains three T4 breaching charges." req_access = list(ACCESS_CENT_SPECOPS) -/obj/item/storage/lockbox/t4/New() - ..() +/obj/item/storage/lockbox/t4/populate_contents() for(var/i in 0 to 2) new /obj/item/grenade/plastic/x4/thermite(src) diff --git a/code/game/objects/items/weapons/storage/secure.dm b/code/game/objects/items/weapons/storage/secure.dm index 57ddb8b78ad..dd859ccd9ea 100644 --- a/code/game/objects/items/weapons/storage/secure.dm +++ b/code/game/objects/items/weapons/storage/secure.dm @@ -31,6 +31,10 @@ if(in_range(user, src)) . += "The service panel is [open ? "open" : "closed"]." +/obj/item/storage/secure/populate_contents() + new /obj/item/paper(src) + new /obj/item/pen(src) + /obj/item/storage/secure/attackby(obj/item/W as obj, mob/user as mob, params) if(locked) if((istype(W, /obj/item/melee/energy/blade)) && (!emagged)) @@ -76,7 +80,7 @@ if(istype(weapon, /obj/item/melee/energy/blade)) do_sparks(5, 0, loc) playsound(loc, 'sound/weapons/blade1.ogg', 50, 1) - playsound(loc, "sparks", 50, 1) + playsound(loc, "sparks", 50, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) to_chat(user, "You slice through the lock on [src].") else to_chat(user, "You short out the lock on [src].") @@ -192,11 +196,6 @@ max_combined_w_class = 21 attack_verb = list("bashed", "battered", "bludgeoned", "thrashed", "whacked") -/obj/item/storage/secure/briefcase/New() - ..() - handle_item_insertion(new /obj/item/paper, 1) - handle_item_insertion(new /obj/item/pen, 1) - /obj/item/storage/secure/briefcase/attack_hand(mob/user as mob) if((loc == user) && (locked == 1)) to_chat(usr, "[src] is locked and cannot be opened!") @@ -218,10 +217,10 @@ /obj/item/storage/secure/briefcase/syndie force = 15 -/obj/item/storage/secure/briefcase/syndie/New() +/obj/item/storage/secure/briefcase/syndie/populate_contents() ..() - for(var/i = 0, i < storage_slots - 2, i++) - handle_item_insertion(new /obj/item/stack/spacecash/c1000, 1) + for(var/I in 1 to 5) + new /obj/item/stack/spacecash/c1000(src) // ----------------------------- // Secure Safe @@ -241,10 +240,5 @@ density = 0 cant_hold = list(/obj/item/storage/secure/briefcase) -/obj/item/storage/secure/safe/New() - ..() - handle_item_insertion(new /obj/item/paper, 1) - handle_item_insertion(new /obj/item/pen, 1) - /obj/item/storage/secure/safe/attack_hand(mob/user as mob) return attack_self(user) diff --git a/code/game/objects/items/weapons/storage/storage.dm b/code/game/objects/items/weapons/storage/storage.dm index f709a9496a4..d1548eb2305 100644 --- a/code/game/objects/items/weapons/storage/storage.dm +++ b/code/game/objects/items/weapons/storage/storage.dm @@ -9,117 +9,167 @@ name = "storage" icon = 'icons/obj/storage.dmi' w_class = WEIGHT_CLASS_NORMAL - var/silent = FALSE // No message on putting items in - var/list/can_hold = new/list() //List of objects which this item can store (if set, it can't store anything else) - var/list/cant_hold = new/list() //List of objects which this item can't store (in effect only if can_hold isn't set) - var/empty = FALSE // Will this spawn as an empty box - var/max_w_class = WEIGHT_CLASS_SMALL //Max size of objects that this object can store (in effect only if can_hold isn't set) - var/max_combined_w_class = 14 //The sum of the w_classes of all the items in this storage item. - var/storage_slots = 7 //The number of storage slots in this container. + /// No message on putting items in. + var/silent = FALSE + /// List of objects which this item can store (if set, it can't store anything else) + var/list/can_hold = new/list() + /// List of objects which this item can't store (in effect only if can_hold isn't set) + var/list/cant_hold = new/list() + /// Max size of objects that this object can store (in effect only if can_hold isn't set) + var/max_w_class = WEIGHT_CLASS_SMALL + /// The sum of the w_classes of all the items in this storage item. + var/max_combined_w_class = 14 + /// The number of storage slots in this container. + var/storage_slots = 7 var/obj/screen/storage/boxes = null var/obj/screen/close/closer = null - var/use_to_pickup //Set this to make it possible to use this item in an inverse way, so you can have the item in your hand and click items on the floor to pick them up. - var/display_contents_with_number //Set this to make the storage item group contents of the same type and display them as a number. - var/allow_quick_empty //Set this variable to allow the object to have the 'empty' verb, which dumps all the contents on the floor. - var/allow_quick_gather //Set this variable to allow the object to have the 'toggle mode' verb, which quickly collects all items from a tile. - var/pickup_all_on_tile = TRUE //FALSE = pick one at a time, TRUE = pick all on tile - var/use_sound = "rustle" //sound played when used. null for no sound. + + /// Set this to make it possible to use this item in an inverse way, so you can have the item in your hand and click items on the floor to pick them up. + var/use_to_pickup = FALSE + /// Set this to make the storage item group contents of the same type and display them as a number. + var/display_contents_with_number + /// Set this variable to allow the object to have the 'empty' verb, which dumps all the contents on the floor. + var/allow_quick_empty + /// Set this variable to allow the object to have the 'toggle mode' verb, which quickly collects all items from a tile. + var/allow_quick_gather + /// Pick up one item at a time or everything on the tile + var/pickup_all_on_tile = TRUE + /// Sound played when used. `null` for no sound. + var/use_sound = "rustle" /// What kind of [/obj/item/stack] can this be folded into. (e.g. Boxes and cardboard) var/foldable = null /// How much of the stack item do you get. var/foldable_amt = 0 +/obj/item/storage/Initialize(mapload) + . = ..() + can_hold = typecacheof(can_hold) + cant_hold = typecacheof(cant_hold) + + if(allow_quick_empty) + verbs += /obj/item/storage/verb/quick_empty + else + verbs -= /obj/item/storage/verb/quick_empty + + if(allow_quick_gather) + verbs += /obj/item/storage/verb/toggle_gathering_mode + else + verbs -= /obj/item/storage/verb/toggle_gathering_mode + + populate_contents() + + boxes = new /obj/screen/storage() + boxes.name = "storage" + boxes.master = src + boxes.icon_state = "block" + boxes.screen_loc = "7,7 to 10,8" + boxes.layer = HUD_LAYER + boxes.plane = HUD_PLANE + closer = new /obj/screen/close() + closer.master = src + closer.icon_state = "backpack_close" + closer.layer = ABOVE_HUD_LAYER + closer.plane = ABOVE_HUD_PLANE + orient2hud() + /obj/item/storage/MouseDrop(obj/over_object) - if(ishuman(usr)) //so monkeys can take off their backpacks -- Urist - var/mob/M = usr + if(!ismob(usr)) //so monkeys can take off their backpacks -- Urist + return + var/mob/M = usr - if(istype(M.loc,/obj/mecha) || M.incapacitated(FALSE, TRUE, TRUE)) // Stops inventory actions in a mech as well as while being incapacitated - return + if(istype(M.loc, /obj/mecha) || M.incapacitated(FALSE, TRUE, TRUE)) // Stops inventory actions in a mech as well as while being incapacitated + return - if(over_object == M && Adjacent(M)) // this must come before the screen objects only block - if(M.s_active) - M.s_active.close(M) - show_to(M) - return + if(over_object == M && Adjacent(M)) // this must come before the screen objects only block + if(M.s_active) + M.s_active.close(M) + show_to(M) + return - if((istype(over_object, /obj/structure/table) || istype(over_object, /turf/simulated/floor)) \ - && contents.len && loc == usr && !usr.stat && !usr.restrained() && usr.canmove && over_object.Adjacent(usr) \ - && !istype(src, /obj/item/storage/lockbox)) - var/turf/T = get_turf(over_object) - if(istype(over_object, /turf/simulated/floor)) - if(get_turf(usr) != T) - return // Can only empty containers onto the floor under you - if("Yes" != alert(usr,"Empty \the [src] onto \the [T]?","Confirm","Yes","No")) + if((istype(over_object, /obj/structure/table) || isfloorturf(over_object)) && length(contents) \ + && loc == M && !M.stat && !M.restrained() && M.canmove && over_object.Adjacent(M) && !istype(src, /obj/item/storage/lockbox)) // Worlds longest `if()` + var/turf/T = get_turf(over_object) + if(isfloorturf(over_object)) + if(get_turf(M) != T) + return // Can only empty containers onto the floor under you + if(alert(M, "Empty [src] onto [T]?", "Confirm", "Yes", "No") != "Yes") + return + if(!(M && over_object && length(contents) && loc == M && !M.stat && !M.restrained() && M.canmove && get_turf(M) == T)) + return // Something happened while the player was thinking + hide_from(M) + M.face_atom(over_object) + M.visible_message("[M] empties [src] onto [over_object].", + "You empty [src] onto [over_object].") + for(var/obj/item/I in contents) + remove_from_storage(I, T) + update_icon() // For content-sensitive icons + return + + if(!(istype(over_object, /obj/screen))) + return ..() + if(!(loc == M) || (loc && loc.loc == M)) + return + playsound(loc, "rustle", 50, 1, -5) + if(!M.restrained() && !M.stat) + switch(over_object.name) + if("r_hand") + if(!M.unEquip(src, silent = TRUE)) return - if(!(usr && over_object && contents.len && loc == usr && !usr.stat && !usr.restrained() && usr.canmove && get_turf(usr) == T)) - return // Something happened while the player was thinking - hide_from(usr) - usr.face_atom(over_object) - usr.visible_message("[usr] empties \the [src] onto \the [over_object].", - "You empty \the [src] onto \the [over_object].") - for(var/obj/item/I in contents) - remove_from_storage(I, T) - update_icon() // For content-sensitive icons - return - - if(!(istype(over_object, /obj/screen))) - return ..() - if(!(loc == usr) || (loc && loc.loc == usr)) - return - playsound(loc, "rustle", 50, TRUE, -5) - if(!(M.restrained()) && !(M.stat)) - switch(over_object.name) - if("r_hand") - if(!M.unEquip(src)) - return - M.put_in_r_hand(src) - if("l_hand") - if(!M.unEquip(src)) - return - M.put_in_l_hand(src) - add_fingerprint(usr) - return - if(over_object == usr && in_range(src, usr) || usr.contents.Find(src)) - if(usr.s_active) - usr.s_active.close(usr) - show_to(usr) - return + M.put_in_r_hand(src) + if("l_hand") + if(!M.unEquip(src, silent = TRUE)) + return + M.put_in_l_hand(src) + add_fingerprint(usr) + return + if(over_object == usr && in_range(src, usr) || usr.contents.Find(src)) + if(usr.s_active) + usr.s_active.close(usr) + show_to(usr) /obj/item/storage/AltClick(mob/user) + . = ..() if(ishuman(user) && Adjacent(user) && !user.incapacitated(FALSE, TRUE, TRUE)) show_to(user) playsound(loc, "rustle", 50, TRUE, -5) add_fingerprint(user) else if(isobserver(user)) show_to(user) - return ..() +/** + * Loops through any nested containers inside `src`, and returns a list of everything inside them. + * + * Currently checks for storage containers, gifts containing storage containers, and folders. + */ /obj/item/storage/proc/return_inv() var/list/L = list() + L += contents // Inventory of the main storage item - L += contents - - for(var/obj/item/storage/S in src) + for(var/obj/item/storage/S in src) // Inventory of nested storage items L += S.return_inv() for(var/obj/item/gift/G in src) L += G.gift - if(istype(G.gift, /obj/item/storage)) - L += G.gift:return_inv() + if(istype(G.gift, /obj/item/storage)) // If the gift contains a storage item + var/obj/item/storage/S = G.gift + L += S.return_inv() for(var/obj/item/folder/F in src) L += F.contents return L +/** + * Shows `user` the contents of `src`, and activates any mouse trap style triggers. + */ /obj/item/storage/proc/show_to(mob/user) if(!user.client) return - if(user.s_active != src) + if(user.s_active != src) // Switching from another container for(var/obj/item/I in src) - if(I.on_found(user)) - return - orient2hud(user) // this only needs to happen to make .contents show properly as screen objects. + if(I.on_found(user)) // For mouse traps and such + return // If something triggered, don't open the UI + orient2hud(user) // this only needs to happen to make .contents show properly as screen objects. if(user.s_active) - user.s_active.hide_from(user) + user.s_active.hide_from(user) // If there's already an interface open, close it. user.client.screen -= boxes user.client.screen -= closer user.client.screen -= contents @@ -127,20 +177,20 @@ user.client.screen += closer user.client.screen += contents user.s_active = src - return +/** + * Hides the current container interface from `user`. + */ /obj/item/storage/proc/hide_from(mob/user) if(!user.client) return - user.client.screen -= boxes user.client.screen -= closer user.client.screen -= contents if(user.s_active == src) user.s_active = null - return -/obj/item/storage/proc/open(mob/user as mob) +/obj/item/storage/proc/open(mob/user) if(use_sound) playsound(loc, use_sound, 50, TRUE, -5) @@ -152,8 +202,14 @@ hide_from(user) user.s_active = null -//This proc draws out the inventory and places the items on it. tx and ty are the upper left tile and mx, my are the bottm right. -//The numbers are calculated from the bottom-left The bottom-left slot being 1,1. +/** + * Draws the inventory and places the items on it using custom positions. + * + * `tx` and `ty` are the upper left tile. + * `mx` and `my` are the bottom right tile. + * + * The numbers are calculated from the bottom left, with the bottom left being `1,1`. + */ /obj/item/storage/proc/orient_objs(tx, ty, mx, my) var/cx = tx var/cy = ty @@ -211,125 +267,142 @@ //This proc determins the size of the inventory to be displayed. Please touch it only if you know what you're doing. /obj/item/storage/proc/orient2hud(mob/user) - var/adjusted_contents = contents.len + var/adjusted_contents = length(contents) //Numbered contents display - var/list/datum/numbered_display/display_contents + var/list/datum/numbered_display/numbered_contents if(display_contents_with_number) for(var/obj/O in contents) O.layer = initial(O.layer) O.plane = initial(O.plane) - display_contents = list() + numbered_contents = list() adjusted_contents = 0 for(var/obj/item/I in contents) var/found = FALSE - for(var/datum/numbered_display/ND in display_contents) + for(var/datum/numbered_display/ND in numbered_contents) if(ND.sample_object.type == I.type && ND.sample_object.name == I.name) ND.number++ found = TRUE break if(!found) adjusted_contents++ - display_contents.Add(new/datum/numbered_display(I)) + numbered_contents += new/datum/numbered_display(I) - //var/mob/living/carbon/human/H = user var/row_num = 0 var/col_count = min(7, storage_slots) - 1 if(adjusted_contents > 7) row_num = round((adjusted_contents - 1) / 7) // 7 is the maximum allowed width. - standard_orient_objs(row_num, col_count, display_contents) + standard_orient_objs(row_num, col_count, numbered_contents) -//This proc returns TRUE if the item can be picked up and FALSE if it can't. -//Set the stop_messages to stop it from printing messages -/obj/item/storage/proc/can_be_inserted(obj/item/W, stop_messages = FALSE) - if(!istype(W) || (W.flags & ABSTRACT)) //Not an item +/** + * Checks whether `I` can be inserted into the container. + * + * Returns `TRUE` if it can, and `FALSE` if it can't. + * Arguments: + * * obj/item/I - The item to insert + * * stop_messages - Don't display a warning message if the item can't be inserted + */ +/obj/item/storage/proc/can_be_inserted(obj/item/I, stop_messages = FALSE) + if(!istype(I) || (I.flags & ABSTRACT)) // Not an item return - if(loc == W) + if(loc == I) return FALSE //Means the item is already in the storage item - if(contents.len >= storage_slots) + + if(length(contents) >= storage_slots) if(!stop_messages) - to_chat(usr, "[W] won't fit in [src], make some space!") + to_chat(usr, "[I] won't fit in [src], make some space!") return FALSE //Storage item is full - if(can_hold.len) - if(!is_type_in_typecache(W, can_hold)) + if(length(can_hold)) + if(!is_type_in_typecache(I, can_hold)) if(!stop_messages) - to_chat(usr, "[src] cannot hold [W].") + to_chat(usr, "[src] cannot hold [I].") return FALSE - if(is_type_in_typecache(W, cant_hold)) //Check for specific items which this container can't hold. + if(is_type_in_typecache(I, cant_hold)) //Check for specific items which this container can't hold. if(!stop_messages) - to_chat(usr, "[src] cannot hold [W].") + to_chat(usr, "[src] cannot hold [I].") return FALSE - if(W.w_class > max_w_class) + if(I.w_class > max_w_class) if(!stop_messages) - to_chat(usr, "[W] is too big for [src].") + to_chat(usr, "[I] is too big for [src].") return FALSE - var/sum_w_class = W.w_class - for(var/obj/item/I in contents) - sum_w_class += I.w_class //Adds up the combined w_classes which will be in the storage item if the item is added to it. + var/sum_w_class = I.w_class + for(var/obj/item/item in contents) + sum_w_class += item.w_class //Adds up the combined w_classes which will be in the storage item if the item is added to it. if(sum_w_class > max_combined_w_class) if(!stop_messages) - to_chat(usr, "[src] is full, make some space.") + to_chat(usr, "[src] is full, make some space.") return FALSE - if(W.w_class >= w_class && (istype(W, /obj/item/storage))) - if(!istype(src, /obj/item/storage/backpack/holding)) //bohs should be able to hold backpacks again. The override for putting a boh in a boh is in backpack.dm. + if(I.w_class >= w_class && istype(I, /obj/item/storage)) + if(!istype(src, /obj/item/storage/backpack/holding)) //BoHs should be able to hold backpacks again. The override for putting a BoH in a BoH is in backpack.dm. if(!stop_messages) - to_chat(usr, "[src] cannot hold [W] as it's a storage item of the same size.") + to_chat(usr, "[src] cannot hold [I] as it's a storage item of the same size.") return FALSE //To prevent the stacking of same sized storage items. - if(W.flags & NODROP) //SHOULD be handled in unEquip, but better safe than sorry. - to_chat(usr, "\the [W] is stuck to your hand, you can't put it in \the [src]") + if(I.flags & NODROP) //SHOULD be handled in unEquip, but better safe than sorry. + to_chat(usr, "[I] is stuck to your hand, you can't put it in [src]") return FALSE return TRUE -//This proc handles items being inserted. It does not perform any checks of whether an item can or can't be inserted. That's done by can_be_inserted() -//The stop_warning parameter will stop the insertion message from being displayed. It is intended for cases where you are inserting multiple items at once, -//such as when picking up all the items on a tile with one click. -/obj/item/storage/proc/handle_item_insertion(obj/item/W, prevent_warning = FALSE) - if(!istype(W)) +/** + * Handles items being inserted into a storage container. + * + * This doesn't perform any checks of whether an item can be inserted. That's done by [/obj/item/storage/proc/can_be_inserted] + * Arguments: + * * obj/item/I - The item to be inserted + * * prevent_warning - Stop the insertion message being displayed. Intended for cases when you are inserting multiple items at once. + */ +/obj/item/storage/proc/handle_item_insertion(obj/item/I, prevent_warning = FALSE) + if(!istype(I)) return FALSE if(usr) - if(!usr.unEquip(W)) + if(!usr.unEquip(I, silent = TRUE)) return FALSE usr.update_icons() //update our overlays if(silent) prevent_warning = TRUE - W.forceMove(src) - W.on_enter_storage(src) + I.forceMove(src) + I.on_enter_storage(src) if(usr) if(usr.client && usr.s_active != src) - usr.client.screen -= W - W.dropped(usr) + usr.client.screen -= I + I.dropped(usr, TRUE) add_fingerprint(usr) - if(!prevent_warning && !istype(W, /obj/item/gun/energy/kinetic_accelerator/crossbow)) + if(!prevent_warning && !istype(I, /obj/item/gun/energy/kinetic_accelerator/crossbow)) for(var/mob/M in viewers(usr, null)) if(M == usr) - to_chat(usr, "You put [W] into [src].") + to_chat(usr, "You put [I] into [src].") else if(M in range(1)) //If someone is standing close enough, they can tell what it is... - M.show_message("[usr] puts [W] into [src].") - else if(W && W.w_class >= WEIGHT_CLASS_NORMAL) //Otherwise they can only see large or normal items from a distance... - M.show_message("[usr] puts [W] into [src].") + M.show_message("[usr] puts [I] into [src].") + else if(I && I.w_class >= WEIGHT_CLASS_NORMAL) //Otherwise they can only see large or normal items from a distance... + M.show_message("[usr] puts [I] into [src].") orient2hud(usr) if(usr.s_active) usr.s_active.show_to(usr) - W.mouse_opacity = MOUSE_OPACITY_OPAQUE //So you can click on the area around the item to equip it, instead of having to pixel hunt - W.in_inventory = TRUE + I.mouse_opacity = MOUSE_OPACITY_OPAQUE //So you can click on the area around the item to equip it, instead of having to pixel hunt + I.in_inventory = TRUE update_icon() return TRUE -//Call this proc to handle the removal of an item from the storage item. The item will be moved to the atom sent as new_target -/obj/item/storage/proc/remove_from_storage(obj/item/W, atom/new_location) - if(!istype(W)) +/** + * Handles the removal of an item from a storage container. + * + * Arguments: + * * obj/item/I - The item to be removed + * * atom/new_location - The location to send the item to. + */ +/obj/item/storage/proc/remove_from_storage(obj/item/I, atom/new_location) + if(!istype(I)) return FALSE if(istype(src, /obj/item/storage/fancy)) @@ -337,32 +410,31 @@ F.update_icon(TRUE) for(var/mob/M in range(1, loc)) - if(M.s_active == src) - if(M.client) - M.client.screen -= W + if((M.s_active == src) && M.client) + M.client.screen -= I if(new_location) if(ismob(loc)) - W.dropped(usr) + I.dropped(usr, TRUE) if(ismob(new_location)) - W.layer = ABOVE_HUD_LAYER - W.plane = ABOVE_HUD_PLANE + I.layer = ABOVE_HUD_LAYER + I.plane = ABOVE_HUD_PLANE else - W.layer = initial(W.layer) - W.plane = initial(W.plane) - W.forceMove(new_location) + I.layer = initial(I.layer) + I.plane = initial(I.plane) + I.forceMove(new_location) else - W.forceMove(get_turf(src)) + I.forceMove(get_turf(src)) if(usr) orient2hud(usr) if(usr.s_active) usr.s_active.show_to(usr) - if(W.maptext) - W.maptext = "" - W.on_exit_storage(src) + if(I.maptext) + I.maptext = "" + I.on_exit_storage(src) update_icon() - W.mouse_opacity = initial(W.mouse_opacity) + I.mouse_opacity = initial(I.mouse_opacity) return TRUE /obj/item/storage/Exited(atom/A, loc) @@ -389,25 +461,27 @@ return //Robots can't interact with storage items. if(!can_be_inserted(I)) - if(contents.len >= storage_slots) //don't use items on the backpack if they don't fit + if(length(contents) >= storage_slots) //don't use items on the backpack if they don't fit return TRUE return FALSE handle_item_insertion(I) + /obj/item/storage/attack_hand(mob/user) playsound(loc, "rustle", 50, TRUE, -5) if(ishuman(user)) var/mob/living/carbon/human/H = user - if(H.l_store == src && !H.get_active_hand()) //Prevents opening if it's in a pocket. - H.put_in_hands(src) - H.l_store = null - return - if(H.r_store == src && !H.get_active_hand()) - H.put_in_hands(src) - H.r_store = null - return + if(!H.get_active_hand()) + if(H.l_store == src) //Prevents opening if it's in a pocket. + H.put_in_hands(src) + H.l_store = null + return + if(H.r_store == src) + H.put_in_hands(src) + H.r_store = null + return orient2hud(user) if(loc == user) @@ -454,34 +528,13 @@ remove_from_storage(I, T) CHECK_TICK -/obj/item/storage/New() - ..() - can_hold = typecacheof(can_hold) - cant_hold = typecacheof(cant_hold) - - if(allow_quick_empty) - verbs += /obj/item/storage/verb/quick_empty - else - verbs -= /obj/item/storage/verb/quick_empty - - if(allow_quick_gather) - verbs += /obj/item/storage/verb/toggle_gathering_mode - else - verbs -= /obj/item/storage/verb/toggle_gathering_mode - - boxes = new /obj/screen/storage() - boxes.name = "storage" - boxes.master = src - boxes.icon_state = "block" - boxes.screen_loc = "7,7 to 10,8" - boxes.layer = HUD_LAYER - boxes.plane = HUD_PLANE - closer = new /obj/screen/close() - closer.master = src - closer.icon_state = "backpack_close" - closer.layer = ABOVE_HUD_LAYER - closer.plane = ABOVE_HUD_PLANE - orient2hud() +/** + * Populates the container with items + * + * Override with whatever you want to put in the container + */ +/obj/item/storage/proc/populate_contents() + return // Override /obj/item/storage/Destroy() for(var/obj/O in contents) @@ -493,8 +546,8 @@ /obj/item/storage/emp_act(severity) ..() - for(var/i in contents) - var/atom/A = i + for(var/I in contents) + var/atom/A = I A.emp_act(severity) /obj/item/storage/hear_talk(mob/living/M, list/message_pieces) @@ -536,8 +589,12 @@ user.put_in_hands(I) qdel(src) -//Returns the storage depth of an atom. This is the number of storage items the atom is contained in before reaching toplevel (the area). -//Returns -1 if the atom was not found on container. +/** + * Returns the storage depth of an atom up to the area level. + * + * The storage depth is the number of storage items the atom is contained in. + * Returns `-1` if the atom was not found in a container. + */ /atom/proc/storage_depth(atom/container) var/depth = 0 var/atom/cur_atom = src @@ -554,8 +611,11 @@ return depth -//Like storage depth, but returns the depth to the nearest turf -//Returns -1 if no top level turf (a loc was null somewhere, or a non-turf atom's loc was an area somehow). +/** + * Like [/atom/proc/storage_depth], but returns the depth to the nearest turf. + * + * Returns `-1` if there's no top level turf. (A loc was null somewhere, or a non-turf atom's loc was an area somehow.) + */ /atom/proc/storage_depth_turf() var/depth = 0 var/atom/cur_atom = src diff --git a/code/game/objects/items/weapons/storage/toolbox.dm b/code/game/objects/items/weapons/storage/toolbox.dm index c95e61cbf14..db3e97b4154 100644 --- a/code/game/objects/items/weapons/storage/toolbox.dm +++ b/code/game/objects/items/weapons/storage/toolbox.dm @@ -1,12 +1,13 @@ /obj/item/storage/toolbox name = "toolbox" desc = "Danger. Very robust." - icon = 'icons/obj/storage.dmi' - icon_state = "red" - item_state = "toolbox_red" + icon_state = "toolbox_default" + item_state = "toolbox_default" + lefthand_file = 'icons/mob/inhands/equipment/toolbox_lefthand.dmi' + righthand_file = 'icons/mob/inhands/equipment/toolbox_righthand.dmi' flags = CONDUCT - force = 10.0 - throwforce = 10.0 + force = 10 + throwforce = 10 throw_speed = 2 throw_range = 7 w_class = WEIGHT_CLASS_BULKY @@ -14,14 +15,32 @@ origin_tech = "combat=1;engineering=1" 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/latches = "single_latch" + var/has_latches = TRUE + +/obj/item/storage/toolbox/Initialize(mapload) + . = ..() + if(has_latches) + if(prob(10)) + latches = "double_latch" + if(prob(1)) + latches = "triple_latch" + update_icon() + +/obj/item/storage/toolbox/update_icon() + ..() + cut_overlays() + if(has_latches) + add_overlay(latches) /obj/item/storage/toolbox/emergency name = "emergency toolbox" icon_state = "red" item_state = "toolbox_red" -/obj/item/storage/toolbox/emergency/New() - ..() +/obj/item/storage/toolbox/emergency/populate_contents() new /obj/item/crowbar/red(src) new /obj/item/weldingtool/mini(src) new /obj/item/extinguisher/mini(src) @@ -34,14 +53,14 @@ /obj/item/storage/toolbox/emergency/old name = "rusty red toolbox" icon_state = "toolbox_red_old" + has_latches = FALSE /obj/item/storage/toolbox/mechanical name = "mechanical toolbox" icon_state = "blue" item_state = "toolbox_blue" -/obj/item/storage/toolbox/mechanical/New() - ..() +/obj/item/storage/toolbox/mechanical/populate_contents() new /obj/item/screwdriver(src) new /obj/item/wrench(src) new /obj/item/weldingtool(src) @@ -55,14 +74,14 @@ /obj/item/storage/toolbox/mechanical/old name = "rusty blue toolbox" icon_state = "toolbox_blue_old" + has_latches = FALSE /obj/item/storage/toolbox/electrical name = "electrical toolbox" icon_state = "yellow" item_state = "toolbox_yellow" -/obj/item/storage/toolbox/electrical/New() - ..() +/obj/item/storage/toolbox/electrical/populate_contents() var/pickedcolor = pick(COLOR_RED, COLOR_YELLOW, COLOR_GREEN, COLOR_BLUE, COLOR_PINK, COLOR_ORANGE, COLOR_CYAN, COLOR_WHITE) new /obj/item/screwdriver(src) new /obj/item/wirecutters(src) @@ -80,12 +99,11 @@ icon_state = "syndicate" item_state = "toolbox_syndi" origin_tech = "combat=2;syndicate=1;engineering=2" - silent = 1 - force = 15.0 - throwforce = 18.0 + silent = TRUE + force = 15 + throwforce = 18 -/obj/item/storage/toolbox/syndicate/New() - ..() +/obj/item/storage/toolbox/syndicate/populate_contents() new /obj/item/screwdriver(src, "red") new /obj/item/wrench(src) new /obj/item/weldingtool/largetank(src) @@ -105,8 +123,7 @@ icon_state = "blue" item_state = "toolbox_blue" -/obj/item/storage/toolbox/drone/New() - ..() +/obj/item/storage/toolbox/drone/populate_contents() var/pickedcolor = pick(pick(COLOR_RED, COLOR_YELLOW, COLOR_GREEN, COLOR_BLUE, COLOR_PINK, COLOR_ORANGE, COLOR_CYAN, COLOR_WHITE)) new /obj/item/screwdriver(src) new /obj/item/wrench(src) @@ -115,23 +132,3 @@ new /obj/item/stack/cable_coil(src, 30, paramcolor = pickedcolor) new /obj/item/wirecutters(src) new /obj/item/multitool(src) - -/obj/item/storage/toolbox/brass - name = "brass box" - desc = "A huge brass box with several indentations in its surface." - icon_state = "brassbox" - item_state = null - resistance_flags = FIRE_PROOF | ACID_PROOF - w_class = WEIGHT_CLASS_HUGE - max_w_class = WEIGHT_CLASS_NORMAL - max_combined_w_class = 28 - storage_slots = 28 - attack_verb = list("robusted", "crushed", "smashed") - -/obj/item/storage/toolbox/brass/prefilled/New() - ..() - new /obj/item/screwdriver/brass(src) - new /obj/item/wirecutters/brass(src) - new /obj/item/wrench/brass(src) - new /obj/item/crowbar/brass(src) - new /obj/item/weldingtool/experimental/brass(src) diff --git a/code/game/objects/items/weapons/storage/uplink_kits.dm b/code/game/objects/items/weapons/storage/uplink_kits.dm index ae8bd6ca3dc..2747be43612 100644 --- a/code/game/objects/items/weapons/storage/uplink_kits.dm +++ b/code/game/objects/items/weapons/storage/uplink_kits.dm @@ -1,127 +1,121 @@ -/obj/item/storage/box/syndicate/New() - ..() - switch(pickweight(list("bloodyspai" = 1, "thief" = 1, "bond" = 1, "sabotage" = 1, "payday" = 1, "implant" = 1, "hacker" = 1, "darklord" = 1, "professional" = 1))) - if("bloodyspai") // 37TC + one 0TC - new /obj/item/clothing/under/chameleon(src) // 2TC - new /obj/item/clothing/mask/chameleon(src) // 0TC - new /obj/item/card/id/syndicate(src) // 2TC - new /obj/item/clothing/shoes/chameleon/noslip(src) // 2TC - new /obj/item/camera_bug(src) // 1TC - new /obj/item/multitool/ai_detect(src) // 1TC - new /obj/item/encryptionkey/syndicate(src) // 2TC - new /obj/item/twohanded/garrote(src) // 10TC - new /obj/item/pinpointer/advpinpointer(src) // 4TC - new /obj/item/storage/fancy/cigarettes/cigpack_syndicate(src) // 2TC - new /obj/item/flashlight/emp(src) // 2TC - new /obj/item/clothing/glasses/hud/security/chameleon(src) // 2TC - new /obj/item/chameleon(src) // 7TC - return +/obj/item/storage/box/syndicate // Traitor bundles - if("thief") // 39TC - new /obj/item/gun/energy/kinetic_accelerator/crossbow(src) // 12TC - new /obj/item/chameleon(src) // 7TC - new /obj/item/clothing/glasses/chameleon/thermal(src) // 6TC - new /obj/item/clothing/gloves/color/black/thief(src) // 6TC - new /obj/item/card/id/syndicate(src) // 2TC - new /obj/item/clothing/shoes/chameleon/noslip(src) // 2TC - new /obj/item/storage/backpack/satchel_flat(src) // 2TC - new /obj/item/encryptionkey/syndicate(src) // 2TC - return + var/static/list/spy = list( // 37TC + one 0TC + /obj/item/clothing/under/chameleon, // 2TC + /obj/item/clothing/mask/chameleon, // 0TC + /obj/item/card/id/syndicate, // 2TC + /obj/item/clothing/shoes/chameleon/noslip, // 2TC + /obj/item/camera_bug, // 1TC + /obj/item/multitool/ai_detect, // 1TC + /obj/item/encryptionkey/syndicate, // 2TC + /obj/item/twohanded/garrote, // 10TC + /obj/item/pinpointer/advpinpointer, // 4TC + /obj/item/storage/fancy/cigarettes/cigpack_syndicate, // 2TC + /obj/item/flashlight/emp, // 2TC + /obj/item/clothing/glasses/hud/security/chameleon, // 2TC + /obj/item/chameleon) // 7TC - if("bond") // 33TC + three 0TC - new /obj/item/gun/projectile/automatic/pistol(src) // 4TC - new /obj/item/suppressor(src) // 1TC - new /obj/item/ammo_box/magazine/m10mm/hp(src) // 3TC - new /obj/item/ammo_box/magazine/m10mm/ap(src) // 2TC - new /obj/item/clothing/under/suit_jacket/really_black(src) // 0TC - new /obj/item/card/id/syndicate(src) // 2TC - new /obj/item/clothing/suit/storage/lawyer/blackjacket/armored(src) // 0TC - new /obj/item/encryptionkey/syndicate(src) // 2TC - new /obj/item/reagent_containers/food/drinks/drinkingglass/alliescocktail(src) // 0TC - new /obj/item/dnascrambler(src) // 4TC - new /obj/item/storage/box/syndie_kit/emp(src) // 2TC - new /obj/item/CQC_manual(src) // 13TC - return + var/static/list/thief = list( // 39TC + /obj/item/gun/energy/kinetic_accelerator/crossbow, // 12TC + /obj/item/chameleon, // 7TC + /obj/item/clothing/glasses/chameleon/thermal, // 6TC + /obj/item/clothing/gloves/color/black/thief, // 6TC + /obj/item/card/id/syndicate, // 2TC + /obj/item/clothing/shoes/chameleon/noslip, // 2TC + /obj/item/storage/backpack/satchel_flat, // 2TC + /obj/item/encryptionkey/syndicate) // 2TC - if("sabotage") // 41TC + two 0TC - new /obj/item/grenade/plastic/c4(src) // 1TC - new /obj/item/grenade/plastic/c4(src) // 1TC - new /obj/item/camera_bug(src) // 1TC - new /obj/item/powersink(src) // 10TC - new /obj/item/cartridge/syndicate(src) // 6TC - new /obj/item/rcd/preloaded(src) // 0TC - new /obj/item/card/emag(src) // 6TC - new /obj/item/clothing/gloves/color/yellow(src) // 0TC - new /obj/item/grenade/syndieminibomb(src) // 6TC - new /obj/item/grenade/clusterbuster/n2o(src) // 4TC - new /obj/item/storage/box/syndie_kit/space(src) // 4TC - new /obj/item/encryptionkey/syndicate(src) // 2TC - return + var/static/list/bond = list( // 33TC + three 0TC + /obj/item/gun/projectile/automatic/pistol, // 4TC + /obj/item/suppressor, // 1TC + /obj/item/ammo_box/magazine/m10mm/hp, // 3TC + /obj/item/ammo_box/magazine/m10mm/ap, // 2TC + /obj/item/clothing/under/suit_jacket/really_black, // 0TC + /obj/item/card/id/syndicate, // 2TC + /obj/item/clothing/suit/storage/lawyer/blackjacket/armored, // 0TC + /obj/item/encryptionkey/syndicate, // 2TC + /obj/item/reagent_containers/food/drinks/drinkingglass/alliescocktail, // 0TC + /obj/item/dnascrambler, // 4TC + /obj/item/storage/box/syndie_kit/emp, // 2TC + /obj/item/CQC_manual) // 13TC - if("payday") // 35TC + four 0TC - new /obj/item/gun/projectile/revolver(src) // 13TC - new /obj/item/ammo_box/a357(src) // 3TC - new /obj/item/ammo_box/a357(src) // 3TC - new /obj/item/card/emag(src) // 6TC - new /obj/item/jammer(src) // 5TC - new /obj/item/card/id/syndicate(src) // 2TC - new /obj/item/clothing/under/suit_jacket/really_black(src) //0TC - new /obj/item/clothing/suit/storage/lawyer/blackjacket/armored(src) //0TC - new /obj/item/clothing/gloves/color/latex/nitrile(src) //0 TC - new /obj/item/clothing/mask/gas/clown_hat(src) // 0TC - new /obj/item/thermal_drill/diamond_drill(src) // 1TC - new /obj/item/encryptionkey/syndicate(src) // 2TC - return + var/static/list/sabotage = list( // 41TC + two 0TC + /obj/item/grenade/plastic/c4, // 1TC + /obj/item/grenade/plastic/c4, // 1TC + /obj/item/camera_bug, // 1TC + /obj/item/powersink, // 10TC + /obj/item/cartridge/syndicate, // 6TC + /obj/item/rcd/preloaded, // 0TC + /obj/item/card/emag, // 6TC + /obj/item/clothing/gloves/color/yellow, // 0TC + /obj/item/grenade/syndieminibomb, // 6TC + /obj/item/grenade/clusterbuster/n2o, // 4TC + /obj/item/storage/box/syndie_kit/space, // 4TC + /obj/item/encryptionkey/syndicate) // 2TC - if("implant") // 39TC + ten free TC - new /obj/item/implanter/freedom(src) // 5TC - new /obj/item/implanter/uplink(src) // 14TC (ten free TC) - new /obj/item/implanter/emp(src) // 0TC - new /obj/item/implanter/adrenalin(src) // 8TC - new /obj/item/implanter/explosive(src) // 2TC - new /obj/item/implanter/storage(src) // 8TC - new /obj/item/encryptionkey/syndicate(src) // 2TC - return + var/static/list/payday = list( // 35TC + four 0TC + /obj/item/gun/projectile/revolver, // 13TC + /obj/item/ammo_box/a357, // 3TC + /obj/item/ammo_box/a357, // 3TC + /obj/item/card/emag, // 6TC + /obj/item/jammer, // 5TC + /obj/item/card/id/syndicate, // 2TC + /obj/item/clothing/under/suit_jacket/really_black, //0TC + /obj/item/clothing/suit/storage/lawyer/blackjacket/armored, //0TC + /obj/item/clothing/gloves/color/latex/nitrile, //0 TC + /obj/item/clothing/mask/gas/clown_hat, // 0TC + /obj/item/thermal_drill/diamond_drill, // 1TC + /obj/item/encryptionkey/syndicate) // 2TC - if("hacker") // 37TC + two 0TC - new /obj/item/aiModule/syndicate(src) // 12TC - new /obj/item/card/emag(src) // 6TC - new /obj/item/encryptionkey/syndicate(src) // 2TC - new /obj/item/encryptionkey/binary(src) // 5TC - new /obj/item/aiModule/toyAI(src) // 0TC - new /obj/item/clothing/glasses/chameleon/thermal(src) // 6TC - new /obj/item/storage/belt/military/traitor/hacker(src) // 3TC - new /obj/item/clothing/gloves/combat(src) // 0TC - new /obj/item/multitool/ai_detect(src) // 1TC - new /obj/item/flashlight/emp(src) // 2TC - return + var/static/list/implant = list( // 39TC + ten free TC + /obj/item/implanter/freedom, // 5TC + /obj/item/implanter/uplink, // 14TC (ten free TC) + /obj/item/implanter/emp, // 0TC + /obj/item/implanter/adrenalin, // 8TC + /obj/item/implanter/explosive, // 2TC + /obj/item/implanter/storage, // 8TC + /obj/item/encryptionkey/syndicate) // 2TC - if("darklord") // 24TC + two 0TC - new /obj/item/melee/energy/sword/saber/red(src) // 8TC - new /obj/item/melee/energy/sword/saber/red(src) // 8TC - new /obj/item/dnainjector/telemut/darkbundle(src) // 0TC - new /obj/item/clothing/suit/hooded/chaplain_hoodie(src) // 0TC - new /obj/item/card/id/syndicate(src) // 2TC - new /obj/item/clothing/shoes/chameleon/noslip(src) // 2TC - new /obj/item/clothing/mask/chameleon(src) // 2TC - new /obj/item/encryptionkey/syndicate(src) // 2TC - return + var/static/list/hacker = list( // 37TC + two 0TC + /obj/item/aiModule/syndicate, // 12TC + /obj/item/card/emag, // 6TC + /obj/item/encryptionkey/syndicate, // 2TC + /obj/item/encryptionkey/binary, // 5TC + /obj/item/aiModule/toyAI, // 0TC + /obj/item/clothing/glasses/chameleon/thermal, // 6TC + /obj/item/storage/belt/military/traitor/hacker, // 3TC + /obj/item/clothing/gloves/combat, // 0TC + /obj/item/multitool/ai_detect, // 1TC + /obj/item/flashlight/emp) // 2TC - if("professional") // 34TC + two 0TC - new /obj/item/gun/projectile/automatic/sniper_rifle/syndicate/penetrator(src) // 16TC - new /obj/item/ammo_box/magazine/sniper_rounds/penetrator(src) // 5TC - new /obj/item/ammo_box/magazine/sniper_rounds/soporific(src) // 3TC - new /obj/item/clothing/glasses/chameleon/thermal(src) // 6TC - new /obj/item/clothing/gloves/combat(src) // 0 TC - new /obj/item/clothing/under/suit_jacket/really_black(src) // 0 TC - new /obj/item/clothing/suit/storage/lawyer/blackjacket/armored(src) // 0TC - new /obj/item/pen/edagger(src) // 2TC - new /obj/item/encryptionkey/syndicate(src) // 2TC - return + var/static/list/darklord = list( // 24TC + two 0TC + /obj/item/melee/energy/sword/saber/red, // 8TC + /obj/item/melee/energy/sword/saber/red, // 8TC + /obj/item/dnainjector/telemut/darkbundle, // 0TC + /obj/item/clothing/suit/hooded/chaplain_hoodie, // 0TC + /obj/item/card/id/syndicate, // 2TC + /obj/item/clothing/shoes/chameleon/noslip, // 2TC + /obj/item/clothing/mask/chameleon, // 2TC + /obj/item/encryptionkey/syndicate) // 2TC + + var/static/list/professional = list( // 34TC + two 0TC + /obj/item/gun/projectile/automatic/sniper_rifle/syndicate/penetrator, // 16TC + /obj/item/ammo_box/magazine/sniper_rounds/penetrator, // 5TC + /obj/item/ammo_box/magazine/sniper_rounds/soporific, // 3TC + /obj/item/clothing/glasses/chameleon/thermal, // 6TC + /obj/item/clothing/gloves/combat, // 0 TC + /obj/item/clothing/under/suit_jacket/really_black, // 0 TC + /obj/item/clothing/suit/storage/lawyer/blackjacket/armored, // 0TC + /obj/item/pen/edagger, // 2TC + /obj/item/encryptionkey/syndicate) // 2TC + +/obj/item/storage/box/syndicate/populate_contents() + var/list/bundle = pick(spy, thief, bond, sabotage, payday, implant, hacker, darklord, professional) + for(var/item in bundle) + new item(src) /obj/item/storage/box/syndie_kit - name = "Box" - desc = "A sleek, sturdy box" + desc = "A sleek, sturdy box." icon_state = "box_of_doom" /obj/item/storage/box/syndie_kit/space @@ -129,21 +123,18 @@ can_hold = list(/obj/item/clothing/suit/space/syndicate/black/red, /obj/item/clothing/head/helmet/space/syndicate/black/red, /obj/item/tank/internals/emergency_oxygen/engi/syndi, /obj/item/clothing/mask/gas/syndicate) max_w_class = WEIGHT_CLASS_NORMAL -/obj/item/storage/box/syndie_kit/space/New() - ..() +/obj/item/storage/box/syndie_kit/space/populate_contents() new /obj/item/clothing/suit/space/syndicate/black/red(src) new /obj/item/clothing/head/helmet/space/syndicate/black/red(src) new /obj/item/clothing/mask/gas/syndicate(src) new /obj/item/tank/internals/emergency_oxygen/engi/syndi(src) - return /obj/item/storage/box/syndie_kit/hardsuit name = "Boxed Blood Red Suit and Helmet" can_hold = list(/obj/item/clothing/suit/space/hardsuit/syndi, /obj/item/tank/internals/emergency_oxygen/engi/syndi, /obj/item/clothing/mask/gas/syndicate) max_w_class = WEIGHT_CLASS_NORMAL -/obj/item/storage/box/syndie_kit/hardsuit/New() - ..() +/obj/item/storage/box/syndie_kit/hardsuit/populate_contents() new /obj/item/clothing/suit/space/hardsuit/syndi(src) new /obj/item/clothing/mask/gas/syndicate(src) new /obj/item/tank/internals/emergency_oxygen/engi/syndi(src) @@ -151,29 +142,21 @@ /obj/item/storage/box/syndie_kit/conversion name = "box (CK)" -/obj/item/storage/box/syndie_kit/conversion/New() - ..() +/obj/item/storage/box/syndie_kit/conversion/populate_contents() new /obj/item/conversion_kit(src) new /obj/item/ammo_box/a357(src) - return /obj/item/storage/box/syndie_kit/boolets name = "Shotgun shells" -/obj/item/storage/box/syndie_kit/boolets/New() - ..() - new /obj/item/ammo_casing/shotgun/fakebeanbag(src) - new /obj/item/ammo_casing/shotgun/fakebeanbag(src) - new /obj/item/ammo_casing/shotgun/fakebeanbag(src) - new /obj/item/ammo_casing/shotgun/fakebeanbag(src) - new /obj/item/ammo_casing/shotgun/fakebeanbag(src) - new /obj/item/ammo_casing/shotgun/fakebeanbag(src) +/obj/item/storage/box/syndie_kit/boolets/populate_contents() + for(var/I in 1 to 6) + new /obj/item/ammo_casing/shotgun/fakebeanbag(src) /obj/item/storage/box/syndie_kit/emp name = "boxed EMP kit" -/obj/item/storage/box/syndie_kit/emp/New() - ..() +/obj/item/storage/box/syndie_kit/emp/populate_contents() new /obj/item/grenade/empgrenade(src) new /obj/item/grenade/empgrenade(src) new /obj/item/implanter/emp/(src) @@ -181,13 +164,9 @@ /obj/item/storage/box/syndie_kit/c4 name = "Pack of C-4 Explosives" -/obj/item/storage/box/syndie_kit/c4/New() - ..() - new /obj/item/grenade/plastic/c4(src) - new /obj/item/grenade/plastic/c4(src) - new /obj/item/grenade/plastic/c4(src) - new /obj/item/grenade/plastic/c4(src) - new /obj/item/grenade/plastic/c4(src) +/obj/item/storage/box/syndie_kit/c4/populate_contents() + for(var/I in 1 to 5) + new /obj/item/grenade/plastic/c4(src) /obj/item/storage/box/syndie_kit/throwing_weapons name = "boxed throwing kit" @@ -195,21 +174,16 @@ max_combined_w_class = 16 max_w_class = WEIGHT_CLASS_NORMAL -/obj/item/storage/box/syndie_kit/throwing_weapons/New() - ..() - new /obj/item/throwing_star(src) - new /obj/item/throwing_star(src) - new /obj/item/throwing_star(src) - new /obj/item/throwing_star(src) - new /obj/item/throwing_star(src) +/obj/item/storage/box/syndie_kit/throwing_weapons/populate_contents() + for(var/I in 1 to 5) + new /obj/item/throwing_star(src) new /obj/item/restraints/legcuffs/bola/tactical(src) new /obj/item/restraints/legcuffs/bola/tactical(src) /obj/item/storage/box/syndie_kit/sarin name = "Sarin Gas Grenades" -/obj/item/storage/box/syndie_kit/sarin/New() - ..() +/obj/item/storage/box/syndie_kit/sarin/populate_contents() new /obj/item/grenade/chem_grenade/saringas(src) new /obj/item/grenade/chem_grenade/saringas(src) new /obj/item/grenade/chem_grenade/saringas(src) @@ -218,43 +192,29 @@ /obj/item/storage/box/syndie_kit/bioterror name = "bioterror syringe box" -/obj/item/storage/box/syndie_kit/bioterror/New() - ..() - new /obj/item/reagent_containers/syringe/bioterror(src) - new /obj/item/reagent_containers/syringe/bioterror(src) - new /obj/item/reagent_containers/syringe/bioterror(src) - new /obj/item/reagent_containers/syringe/bioterror(src) - new /obj/item/reagent_containers/syringe/bioterror(src) - new /obj/item/reagent_containers/syringe/bioterror(src) - new /obj/item/reagent_containers/syringe/bioterror(src) - return +/obj/item/storage/box/syndie_kit/bioterror/populate_contents() + for(var/I in 1 to 7) + new /obj/item/reagent_containers/syringe/bioterror(src) /obj/item/storage/box/syndie_kit/caneshotgun name = "cane gun kit" -/obj/item/storage/box/syndie_kit/caneshotgun/New() - ..() - new /obj/item/ammo_casing/shotgun/assassination(src) - new /obj/item/ammo_casing/shotgun/assassination(src) - new /obj/item/ammo_casing/shotgun/assassination(src) - new /obj/item/ammo_casing/shotgun/assassination(src) - new /obj/item/ammo_casing/shotgun/assassination(src) - new /obj/item/ammo_casing/shotgun/assassination(src) +/obj/item/storage/box/syndie_kit/caneshotgun/populate_contents() + for(var/I in 1 to 6) + new /obj/item/ammo_casing/shotgun/assassination(src) new /obj/item/gun/projectile/revolver/doublebarrel/improvised/cane(src) /obj/item/storage/box/syndie_kit/fake_revolver name = "trick revolver kit" -/obj/item/storage/box/syndie_kit/fake_revolver/New() - ..() +/obj/item/storage/box/syndie_kit/fake_revolver/populate_contents() new /obj/item/toy/russian_revolver/trick_revolver(src) /obj/item/storage/box/syndie_kit/mimery name = "advanced mimery kit" -/obj/item/storage/box/syndie_kit/mimery/New() - ..() +/obj/item/storage/box/syndie_kit/mimery/populate_contents() new /obj/item/spellbook/oneuse/mime/greaterwall(src) new /obj/item/spellbook/oneuse/mime/fingergun(src) @@ -262,8 +222,7 @@ /obj/item/storage/box/syndie_kit/atmosn2ogrenades name = "Atmos N2O Grenades" -/obj/item/storage/box/syndie_kit/atmosn2ogrenades/New() - ..() +/obj/item/storage/box/syndie_kit/atmosn2ogrenades/populate_contents() new /obj/item/grenade/clusterbuster/n2o(src) new /obj/item/grenade/clusterbuster/n2o(src) @@ -271,8 +230,7 @@ /obj/item/storage/box/syndie_kit/atmosfiregrenades name = "Plasma Fire Grenades" -/obj/item/storage/box/syndie_kit/atmosfiregrenades/New() - ..() +/obj/item/storage/box/syndie_kit/atmosfiregrenades/populate_contents() new /obj/item/grenade/clusterbuster/plasma(src) new /obj/item/grenade/clusterbuster/plasma(src) @@ -280,8 +238,7 @@ /obj/item/storage/box/syndie_kit/missionary_set name = "Missionary Starter Kit" -/obj/item/storage/box/syndie_kit/missionary_set/New() - ..() +/obj/item/storage/box/syndie_kit/missionary_set/populate_contents() new /obj/item/nullrod/missionary_staff(src) new /obj/item/clothing/suit/hooded/chaplain_hoodie/missionary_robe(src) var/obj/item/storage/bible/B = new /obj/item/storage/bible(src) @@ -294,8 +251,7 @@ /obj/item/storage/box/syndie_kit/cutouts name = "Fortified Artistic Box" -/obj/item/storage/box/syndie_kit/cutouts/New() - ..() +/obj/item/storage/box/syndie_kit/cutouts/populate_contents() for(var/i in 1 to 3) new/obj/item/cardboard_cutout/adaptive(src) new/obj/item/toy/crayon/spraycan(src) @@ -304,8 +260,7 @@ name = "bone repair kit" desc = "A box containing one prototype field bone repair kit." -/obj/item/storage/box/syndie_kit/bonerepair/New() - ..() +/obj/item/storage/box/syndie_kit/bonerepair/populate_contents() new /obj/item/reagent_containers/hypospray/autoinjector/nanocalcium(src) var/obj/item/paper/P = new /obj/item/paper(src) P.name = "Bone repair guide" @@ -324,8 +279,7 @@ To apply, hold the injector a short distance away from the outer thigh before ap name = "Safe-cracking Kit" desc = "Everything you need to quietly open a mechanical combination safe." -/obj/item/storage/box/syndie_kit/safecracking/New() - ..() +/obj/item/storage/box/syndie_kit/safecracking/populate_contents() new /obj/item/clothing/gloves/color/latex/nitrile(src) new /obj/item/clothing/mask/balaclava(src) new /obj/item/clothing/accessory/stethoscope(src) @@ -334,8 +288,7 @@ To apply, hold the injector a short distance away from the outer thigh before ap /obj/item/storage/box/syndie_kit/chameleon name = "chameleon kit" -/obj/item/storage/box/syndie_kit/chameleon/New() - ..() +/obj/item/storage/box/syndie_kit/chameleon/populate_contents() new /obj/item/clothing/under/chameleon(src) new /obj/item/clothing/suit/chameleon(src) new /obj/item/clothing/gloves/chameleon(src) @@ -351,10 +304,8 @@ To apply, hold the injector a short distance away from the outer thigh before ap /obj/item/storage/box/syndie_kit/dart_gun name = "dart gun kit" -/obj/item/storage/box/syndie_kit/dart_gun/New() - ..() +/obj/item/storage/box/syndie_kit/dart_gun/populate_contents() new /obj/item/gun/syringe/syndicate(src) new /obj/item/reagent_containers/syringe/capulettium_plus(src) new /obj/item/reagent_containers/syringe/sarin(src) new /obj/item/reagent_containers/syringe/pancuronium(src) - diff --git a/code/game/objects/items/weapons/storage/wallets.dm b/code/game/objects/items/weapons/storage/wallets.dm index 197a3cad49f..a2f52ff243b 100644 --- a/code/game/objects/items/weapons/storage/wallets.dm +++ b/code/game/objects/items/weapons/storage/wallets.dm @@ -74,29 +74,20 @@ else return ..() -/obj/item/storage/wallet/random/New() - ..() - var/item1_type = pick(/obj/item/stack/spacecash, +/obj/item/storage/wallet/random/populate_contents() + var/cash = pick(/obj/item/stack/spacecash, /obj/item/stack/spacecash/c10, /obj/item/stack/spacecash/c100, /obj/item/stack/spacecash/c500, /obj/item/stack/spacecash/c1000) - var/item2_type - if(prob(50)) - item2_type = pick(/obj/item/stack/spacecash, - /obj/item/stack/spacecash/c10, - /obj/item/stack/spacecash/c100, - /obj/item/stack/spacecash/c500, - /obj/item/stack/spacecash/c1000) - var/item3_type = pick( /obj/item/coin/silver, /obj/item/coin/silver, /obj/item/coin/gold, /obj/item/coin/iron, /obj/item/coin/iron, /obj/item/coin/iron ) + var/coin = pickweight(list(/obj/item/coin/iron = 3, + /obj/item/coin/silver = 2, + /obj/item/coin/gold = 1)) - spawn(2) - if(item1_type) - new item1_type(src) - if(item2_type) - new item2_type(src) - if(item3_type) - new item3_type(src) + new cash(src) + if(prob(50)) // 50% chance of a second + new cash(src) + new coin(src) ////////////////////////////////////// // Color Wallets // @@ -107,11 +98,11 @@ desc = "A cheap wallet from the arcade." storage_slots = 5 //smaller storage than normal wallets -/obj/item/storage/wallet/color/New() - ..() +/obj/item/storage/wallet/color/Initialize(mapload) + . = ..() if(!item_color) var/color_wallet = pick(subtypesof(/obj/item/storage/wallet/color)) - new color_wallet(src.loc) + new color_wallet(loc) qdel(src) return UpdateDesc() diff --git a/code/game/objects/items/weapons/stunbaton.dm b/code/game/objects/items/weapons/stunbaton.dm index 8edba5c577d..f8104a2d9ea 100644 --- a/code/game/objects/items/weapons/stunbaton.dm +++ b/code/game/objects/items/weapons/stunbaton.dm @@ -168,9 +168,7 @@ return H.forcesay(GLOB.hit_appends) - if(iscarbon(L)) - var/mob/living/carbon/C = L - C.shock_internal_organs(33) + SEND_SIGNAL(L, COMSIG_LIVING_MINOR_SHOCK, 33) L.Stun(stunforce) L.Weaken(stunforce) diff --git a/code/game/objects/items/weapons/tanks/watertank.dm b/code/game/objects/items/weapons/tanks/watertank.dm index b1fb8a0e703..f2145970843 100644 --- a/code/game/objects/items/weapons/tanks/watertank.dm +++ b/code/game/objects/items/weapons/tanks/watertank.dm @@ -141,7 +141,7 @@ /obj/item/reagent_containers/spray/mister/attack_self() return -/proc/check_tank_exists(parent_tank, var/mob/living/carbon/human/M, var/obj/O) +/proc/check_tank_exists(parent_tank, mob/living/carbon/human/M, obj/O) if(!parent_tank || !istype(parent_tank, /obj/item/watertank)) //To avoid weird issues from admin spawns M.unEquip(O) qdel(0) @@ -182,7 +182,7 @@ /obj/item/watertank/janitor/make_noz() return new /obj/item/reagent_containers/spray/mister/janitor(src) -/obj/item/reagent_containers/spray/mister/janitor/attack_self(var/mob/user) +/obj/item/reagent_containers/spray/mister/janitor/attack_self(mob/user) amount_per_transfer_from_this = (amount_per_transfer_from_this == 10 ? 5 : 10) to_chat(user, "You [amount_per_transfer_from_this == 10 ? "remove" : "fix"] the nozzle. You'll now use [amount_per_transfer_from_this] units per spray.") diff --git a/code/game/objects/items/weapons/tape.dm b/code/game/objects/items/weapons/tape.dm index 7084fdbc163..ccc1a9ddbbd 100644 --- a/code/game/objects/items/weapons/tape.dm +++ b/code/game/objects/items/weapons/tape.dm @@ -8,7 +8,7 @@ amount = 25 max_amount = 25 -/obj/item/stack/tape_roll/New(var/loc, var/amount=null) +/obj/item/stack/tape_roll/New(loc, amount=null) ..() update_icon() diff --git a/code/game/objects/items/weapons/twohanded.dm b/code/game/objects/items/weapons/twohanded.dm index 10f69e15b69..a7ac1d632c7 100644 --- a/code/game/objects/items/weapons/twohanded.dm +++ b/code/game/objects/items/weapons/twohanded.dm @@ -638,7 +638,7 @@ /obj/item/twohanded/singularityhammer name = "singularity hammer" desc = "The pinnacle of close combat technology, the hammer harnesses the power of a miniaturized singularity to deal crushing blows." - icon_state = "mjollnir0" + icon_state = "singulohammer0" flags = CONDUCT slot_flags = SLOT_BACK force = 5 @@ -665,7 +665,7 @@ charged++ /obj/item/twohanded/singularityhammer/update_icon() //Currently only here to fuck with the on-mob icons. - icon_state = "mjollnir[wielded]" + icon_state = "singulohammer[wielded]" ..() /obj/item/twohanded/singularityhammer/proc/vortex(turf/pull, mob/wielder) @@ -728,7 +728,7 @@ if(wielded) //if(charged == 5) //charged = 0 - playsound(loc, "sparks", 50, 1) + playsound(loc, "sparks", 50, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) if(isliving(M)) M.Stun(3) shock(M) @@ -806,76 +806,3 @@ Z.ex_act(2) charged = 3 playsound(user, 'sound/weapons/marauder.ogg', 50, 1) - -/obj/item/twohanded/pitchfork - icon_state = "pitchfork0" - name = "pitchfork" - desc = "A simple tool used for moving hay." - force = 7 - throwforce = 15 - w_class = WEIGHT_CLASS_BULKY - force_unwielded = 7 - force_wielded = 15 - attack_verb = list("attacked", "impaled", "pierced") - hitsound = 'sound/weapons/bladeslice.ogg' - max_integrity = 200 - 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/pitchfork/demonic - name = "demonic pitchfork" - desc = "A red pitchfork, it looks like the work of the devil." - force = 19 - throwforce = 24 - force_unwielded = 19 - force_wielded = 25 - -/obj/item/twohanded/pitchfork/demonic/greater - force = 24 - throwforce = 50 - force_unwielded = 24 - force_wielded = 34 - -/obj/item/twohanded/pitchfork/demonic/ascended - force = 100 - throwforce = 100 - force_unwielded = 100 - force_wielded = 500000 // Kills you DEAD. - -/obj/item/twohanded/pitchfork/update_icon() - icon_state = "pitchfork[wielded]" - -/obj/item/twohanded/pitchfork/suicide_act(mob/user) - user.visible_message("[user] impales \himself in \his abdomen with [src]! It looks like \he's trying to commit suicide...") - return BRUTELOSS - -/obj/item/twohanded/pitchfork/demonic/pickup(mob/user) - . = ..() - if(istype(user, /mob/living)) - var/mob/living/U = user - if(U.mind && !U.mind.devilinfo && (U.mind.soulOwner == U.mind)) //Burn hands unless they are a devil or have sold their soul - U.visible_message("As [U] picks [src] up, [U]'s arms briefly catch fire.", \ - "\"As you pick up the [src] your arms ignite, reminding you of all your past sins.\"") - if(ishuman(U)) - var/mob/living/carbon/human/H = U - H.apply_damage(rand(force/2, force), BURN, pick("l_arm", "r_arm")) - else - U.adjustFireLoss(rand(force/2,force)) - -/obj/item/twohanded/pitchfork/demonic/attack(mob/target, mob/living/carbon/human/user) - if(user.mind && !user.mind.devilinfo && (user.mind.soulOwner != user.mind)) - to_chat(user, "The [src] burns in your hands.") - user.apply_damage(rand(force/2, force), BURN, pick("l_arm", "r_arm")) - ..() - -// It's no fun being the lord of all hell if you can't get out of a simple room -/obj/item/twohanded/pitchfork/demonic/ascended/afterattack(atom/target, mob/user, proximity) - if(!proximity || !wielded) - return - if(istype(target, /turf/simulated/wall)) - var/turf/simulated/wall/W = target - user.visible_message("[user] blasts \the [target] with \the [src]!") - playsound(target, 'sound/magic/Disintegrate.ogg', 100, 1) - W.devastate_wall(TRUE) - return 1 - ..() diff --git a/code/game/objects/structures.dm b/code/game/objects/structures.dm index 0f63a5315ad..e508b09fc8e 100644 --- a/code/game/objects/structures.dm +++ b/code/game/objects/structures.dm @@ -41,7 +41,7 @@ do_climb(usr) -/obj/structure/MouseDrop_T(var/atom/movable/C, mob/user as mob) +/obj/structure/MouseDrop_T(atom/movable/C, mob/user as mob) if(..()) return if(C == user) @@ -56,7 +56,7 @@ return T return null -/obj/structure/proc/do_climb(var/mob/living/user) +/obj/structure/proc/do_climb(mob/living/user) if(!can_touch(user) || !climbable) return var/blocking_object = density_check() @@ -127,7 +127,7 @@ H.UpdateDamageIcon() return -/obj/structure/proc/can_touch(var/mob/user) +/obj/structure/proc/can_touch(mob/user) if(!user) return 0 if(!Adjacent(user)) diff --git a/code/game/objects/structures/barsign.dm b/code/game/objects/structures/barsign.dm index 83d03263571..357a5c0db51 100644 --- a/code/game/objects/structures/barsign.dm +++ b/code/game/objects/structures/barsign.dm @@ -25,7 +25,7 @@ //randomly assigning a sign set_sign(pick(barsigns)) -/obj/structure/sign/barsign/proc/set_sign(var/datum/barsign/sign) +/obj/structure/sign/barsign/proc/set_sign(datum/barsign/sign) if(!istype(sign)) return icon_state = sign.icon @@ -68,7 +68,7 @@ -/obj/structure/sign/barsign/attackby(var/obj/item/I, var/mob/user) +/obj/structure/sign/barsign/attackby(obj/item/I, mob/user) if( istype(I, /obj/item/screwdriver)) if(!panel_open) to_chat(user, "You open the maintenance panel.") diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm index fef7fee544c..741afa2738b 100644 --- a/code/game/objects/structures/crates_lockers/closets.dm +++ b/code/game/objects/structures/crates_lockers/closets.dm @@ -16,7 +16,10 @@ var/can_be_emaged = FALSE var/wall_mounted = 0 //never solid (You can always pass over it) var/lastbang - var/sound = 'sound/machines/click.ogg' + var/open_sound = 'sound/machines/closet_open.ogg' + var/close_sound = 'sound/machines/closet_close.ogg' + var/open_sound_volume = 35 + var/close_sound_volume = 50 var/storage_capacity = 30 //This is so that someone can't pack hundreds of items in a locker/crate then open it in a populated area to crash clients. var/material_drop = /obj/item/stack/sheet/metal var/material_drop_amount = 2 @@ -72,10 +75,14 @@ /obj/structure/closet/proc/dump_contents() var/turf/T = get_turf(src) - for(var/atom/movable/AM in src) - AM.forceMove(T) + for(var/mob/AM1 in src) //Does the same as below but removes the mobs first to avoid forcing players to step on items in the locker (e.g. soap) when opened. + AM1.forceMove(T) if(throwing) // you keep some momentum when getting out of a thrown closet - step(AM, dir) + step(AM1, dir) + for(var/atom/movable/AM2 in src) + AM2.forceMove(T) + if(throwing) // you keep some momentum when getting out of a thrown closet + step(AM2, dir) if(throwing) throwing.finalize(FALSE) @@ -90,10 +97,7 @@ icon_state = icon_opened opened = TRUE - if(sound) - playsound(loc, sound, 15, 1, -3) - else - playsound(loc, 'sound/machines/click.ogg', 15, 1, -3) + playsound(loc, open_sound, open_sound_volume, TRUE, -3) density = 0 return TRUE @@ -136,10 +140,7 @@ icon_state = icon_closed opened = FALSE - if(sound) - playsound(loc, sound, 15, 1, -3) - else - playsound(loc, 'sound/machines/click.ogg', 15, 1, -3) + playsound(loc, close_sound, close_sound_volume, TRUE, -3) density = 1 return TRUE @@ -311,7 +312,7 @@ return FALSE return TRUE -/obj/structure/closet/container_resist(var/mob/living/L) +/obj/structure/closet/container_resist(mob/living/L) var/breakout_time = 2 //2 minutes by default if(opened) if(L.loc == src) diff --git a/code/game/objects/structures/crates_lockers/closets/cardboardbox.dm b/code/game/objects/structures/crates_lockers/closets/cardboardbox.dm index 593212c97f2..e94d0772f67 100644 --- a/code/game/objects/structures/crates_lockers/closets/cardboardbox.dm +++ b/code/game/objects/structures/crates_lockers/closets/cardboardbox.dm @@ -8,7 +8,10 @@ resistance_flags = FLAMMABLE max_integrity = 70 integrity_failure = 0 - sound = 'sound/effects/rustle2.ogg' + open_sound = 'sound/machines/cardboard_box.ogg' + close_sound = 'sound/machines/cardboard_box.ogg' + open_sound_volume = 35 + close_sound_volume = 35 material_drop = /obj/item/stack/sheet/cardboard var/amt = 4 var/move_delay = 0 diff --git a/code/game/objects/structures/crates_lockers/closets/coffin.dm b/code/game/objects/structures/crates_lockers/closets/coffin.dm index b763796947b..edb3d1e50d1 100644 --- a/code/game/objects/structures/crates_lockers/closets/coffin.dm +++ b/code/game/objects/structures/crates_lockers/closets/coffin.dm @@ -7,6 +7,10 @@ resistance_flags = FLAMMABLE max_integrity = 70 material_drop = /obj/item/stack/sheet/wood + open_sound = 'sound/machines/wooden_closet_open.ogg' + close_sound = 'sound/machines/wooden_closet_close.ogg' + open_sound_volume = 25 + close_sound_volume = 50 /obj/structure/closet/coffin/update_icon() if(!opened) @@ -19,5 +23,6 @@ icon_state = "sarc" icon_closed = "sarc" icon_opened = "sarc_open" - sound = 'sound/effects/stonedoor_openclose.ogg' + open_sound = 'sound/effects/stonedoor_openclose.ogg' + close_sound = 'sound/effects/stonedoor_openclose.ogg' material_drop = /obj/item/stack/sheet/mineral/sandstone diff --git a/code/game/objects/structures/crates_lockers/closets/fireaxe.dm b/code/game/objects/structures/crates_lockers/closets/fireaxe.dm index 741a9bae5a2..ed16e8d338e 100644 --- a/code/game/objects/structures/crates_lockers/closets/fireaxe.dm +++ b/code/game/objects/structures/crates_lockers/closets/fireaxe.dm @@ -19,7 +19,7 @@ . = ..() . += "Use a multitool to lock/unlock it." -/obj/structure/closet/fireaxecabinet/attackby(var/obj/item/O as obj, var/mob/living/user as mob) //Marker -Agouri +/obj/structure/closet/fireaxecabinet/attackby(obj/item/O as obj, mob/living/user as mob) //Marker -Agouri if(isrobot(user) || locked) if(istype(O, /obj/item/multitool)) to_chat(user, "Resetting circuitry...") diff --git a/code/game/objects/structures/crates_lockers/closets/gimmick.dm b/code/game/objects/structures/crates_lockers/closets/gimmick.dm index eba0dff4086..0126a7f8a68 100644 --- a/code/game/objects/structures/crates_lockers/closets/gimmick.dm +++ b/code/game/objects/structures/crates_lockers/closets/gimmick.dm @@ -5,6 +5,10 @@ icon_closed = "cabinet_closed" icon_opened = "cabinet_open" resistance_flags = FLAMMABLE + open_sound = 'sound/machines/wooden_closet_open.ogg' + close_sound = 'sound/machines/wooden_closet_close.ogg' + open_sound_volume = 25 + close_sound_volume = 50 max_integrity = 70 /obj/structure/closet/cabinet/update_icon() diff --git a/code/game/objects/structures/crates_lockers/closets/secure/bar.dm b/code/game/objects/structures/crates_lockers/closets/secure/bar.dm index 7e66da3be62..1f49de3de2a 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/bar.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/bar.dm @@ -9,6 +9,10 @@ icon_off = "cabinetdetective_broken" resistance_flags = FLAMMABLE max_integrity = 70 + open_sound = 'sound/machines/wooden_closet_open.ogg' + close_sound = 'sound/machines/wooden_closet_close.ogg' + open_sound_volume = 25 + close_sound_volume = 50 /obj/structure/closet/secure_closet/bar/populate_contents() new /obj/item/reagent_containers/food/drinks/cans/beer(src) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/cargo.dm b/code/game/objects/structures/crates_lockers/closets/secure/cargo.dm index 98d0bce5e5e..cf1ad89b4ed 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/cargo.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/cargo.dm @@ -40,4 +40,4 @@ new /obj/item/clothing/glasses/meson(src) new /obj/item/clothing/head/soft(src) new /obj/item/door_remote/quartermaster(src) - new /obj/item/organ/internal/cyberimp/eyes/meson(src) + new /obj/item/organ/internal/eyes/cybernetic/meson(src) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm b/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm index f11b301202c..7fa60e02c3c 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm @@ -38,7 +38,7 @@ new /obj/item/door_remote/chief_engineer(src) new /obj/item/rpd(src) new /obj/item/reagent_containers/food/drinks/mug/ce(src) - new /obj/item/organ/internal/cyberimp/eyes/meson(src) + new /obj/item/organ/internal/eyes/cybernetic/meson(src) new /obj/item/clothing/accessory/medal/engineering(src) new /obj/item/holosign_creator/atmos(src) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/freezer.dm b/code/game/objects/structures/crates_lockers/closets/secure/freezer.dm index 7b8494a01ba..16d1875044e 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/freezer.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/freezer.dm @@ -15,7 +15,7 @@ else icon_state = icon_opened -/obj/structure/closet/secure_closet/freezer/ex_act(var/severity) +/obj/structure/closet/secure_closet/freezer/ex_act(severity) // IF INDIANA JONES CAN DO IT SO CAN YOU // Bomb in here? (using same search as space transits searching for nuke disk) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/personal.dm b/code/game/objects/structures/crates_lockers/closets/secure/personal.dm index 7ba28e6a4a0..6c9ae35553c 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/personal.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/personal.dm @@ -32,6 +32,10 @@ icon_off = "cabinetdetective_broken" resistance_flags = FLAMMABLE max_integrity = 70 + open_sound = 'sound/machines/wooden_closet_open.ogg' + close_sound = 'sound/machines/wooden_closet_close.ogg' + open_sound_volume = 25 + close_sound_volume = 50 /obj/structure/closet/secure_closet/personal/cabinet/update_icon() if(broken) 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 6c10146321f..8c878cd6c59 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 @@ -60,7 +60,6 @@ return if(allowed(user)) locked = !locked - playsound(loc, 'sound/machines/click.ogg', 15, 1, -3) visible_message("The locker has been [locked ? null : "un"]locked by [user].") update_icon() else @@ -115,7 +114,7 @@ else icon_state = icon_opened -/obj/structure/closet/secure_closet/container_resist(var/mob/living/L) +/obj/structure/closet/secure_closet/container_resist(mob/living/L) var/breakout_time = 2 //2 minutes by default if(opened) if(L.loc == src) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/security.dm b/code/game/objects/structures/crates_lockers/closets/secure/security.dm index 95cd8753ae9..d8441b26c0b 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/security.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/security.dm @@ -27,6 +27,7 @@ new /obj/item/clothing/shoes/brown(src) new /obj/item/clothing/shoes/laceup(src) new /obj/item/radio/headset/heads/captain/alt(src) + new /obj/item/clothing/glasses/sunglasses(src) new /obj/item/clothing/gloves/color/captain(src) new /obj/item/storage/belt/rapier(src) new /obj/item/gun/energy/gun(src) @@ -50,6 +51,7 @@ new /obj/item/clothing/head/hopcap(src) new /obj/item/cartridge/hop(src) new /obj/item/radio/headset/heads/hop(src) + new /obj/item/clothing/glasses/sunglasses(src) new /obj/item/storage/box/ids(src) new /obj/item/storage/box/PDAs(src) new /obj/item/clothing/suit/armor/vest(src) @@ -272,6 +274,7 @@ new /obj/item/paicard(src) new /obj/item/flash(src) new /obj/item/clothing/glasses/hud/skills/sunglasses(src) + new /obj/item/clothing/glasses/sunglasses(src) new /obj/item/clothing/gloves/color/white(src) new /obj/item/clothing/shoes/centcom(src) new /obj/item/clothing/under/lawyer/oldman(src) @@ -323,6 +326,8 @@ icon_off = "cabinetdetective_broken" resistance_flags = FLAMMABLE max_integrity = 70 + open_sound = 'sound/machines/wooden_closet_open.ogg' + close_sound = 'sound/machines/wooden_closet_close.ogg' /obj/structure/closet/secure_closet/detective/populate_contents() new /obj/item/clothing/under/det(src) diff --git a/code/game/objects/structures/crates_lockers/closets/statue.dm b/code/game/objects/structures/crates_lockers/closets/statue.dm index 54b9b8a1c56..71455c67275 100644 --- a/code/game/objects/structures/crates_lockers/closets/statue.dm +++ b/code/game/objects/structures/crates_lockers/closets/statue.dm @@ -12,7 +12,7 @@ var/intialOxy = 0 var/timer = 240 //eventually the person will be freed -/obj/structure/closet/statue/Initialize(mapload, var/mob/living/L) +/obj/structure/closet/statue/Initialize(mapload, mob/living/L) . = ..() if(ishuman(L) || iscorgi(L)) if(L.buckled) diff --git a/code/game/objects/structures/crates_lockers/crates.dm b/code/game/objects/structures/crates_lockers/crates.dm index c729c93e2f4..f6b9ab8de60 100644 --- a/code/game/objects/structures/crates_lockers/crates.dm +++ b/code/game/objects/structures/crates_lockers/crates.dm @@ -6,8 +6,11 @@ icon_opened = "crateopen" icon_closed = "crate" climbable = TRUE -// mouse_drag_pointer = MOUSE_ACTIVE_POINTER //??? var/rigged = FALSE + open_sound = 'sound/machines/crate_open.ogg' + close_sound = 'sound/machines/crate_close.ogg' + open_sound_volume = 35 + close_sound_volume = 50 var/obj/item/paper/manifest/manifest // A list of beacon names that the crate will announce the arrival of, when delivered. var/list/announce_beacons = list() @@ -45,7 +48,7 @@ do_sparks(5, 1, src) return 2 - playsound(src.loc, 'sound/machines/click.ogg', 15, 1, -3) + playsound(loc, open_sound, open_sound_volume, TRUE, -3) for(var/obj/O in src) //Objects O.forceMove(loc) for(var/mob/M in src) //Mobs @@ -64,7 +67,7 @@ if(!src.can_close()) return FALSE - playsound(src.loc, 'sound/machines/click.ogg', 15, 1, -3) + playsound(loc, close_sound, close_sound_volume, TRUE, -3) var/itemcount = 0 for(var/obj/O in get_turf(src)) if(itemcount >= storage_capacity) @@ -148,7 +151,7 @@ src.toggle(user, by_hand = TRUE) // Called when a crate is delivered by MULE at a location, for notifying purposes -/obj/structure/closet/crate/proc/notifyRecipient(var/destination) +/obj/structure/closet/crate/proc/notifyRecipient(destination) var/list/msg = list("[capitalize(name)] has arrived at [destination].") if(destination in announce_beacons) for(var/obj/machinery/requests_console/D in GLOB.allRequestConsoles) @@ -254,7 +257,7 @@ if(locked) overlays += sparks spawn(6) overlays -= sparks //Tried lots of stuff but nothing works right. so i have to use this *sadface* - playsound(src.loc, "sparks", 60, 1) + playsound(src.loc, "sparks", 50, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) src.locked = 0 src.broken = 1 update_icon() @@ -269,7 +272,7 @@ else overlays += sparks spawn(6) overlays -= sparks //Tried lots of stuff but nothing works right. so i have to use this *sadface* - playsound(src.loc, 'sound/effects/sparks4.ogg', 75, 1) + playsound(src, "sparks", 50, TRUE, SHORT_RANGE_SOUND_EXTRARANGE) src.locked = 0 update_icon() if(!opened && prob(20/severity)) @@ -371,6 +374,8 @@ icon_opened = "largebinopen" icon_closed = "largebin" anchored = TRUE + open_sound = 'sound/effects/bin_open.ogg' + close_sound = 'sound/effects/bin_close.ogg' /obj/structure/closet/crate/can/wrench_act(mob/user, obj/item/I) . = TRUE @@ -423,6 +428,8 @@ greenlight = "largebing" sparks = "largebinsparks" emag = "largebinemag" + open_sound = 'sound/effects/bin_open.ogg' + close_sound = 'sound/effects/bin_close.ogg' /obj/structure/closet/crate/large name = "large crate" diff --git a/code/game/objects/structures/crates_lockers/crittercrate.dm b/code/game/objects/structures/crates_lockers/crittercrate.dm index dfc0e9b50ce..69067bf740a 100644 --- a/code/game/objects/structures/crates_lockers/crittercrate.dm +++ b/code/game/objects/structures/crates_lockers/crittercrate.dm @@ -7,6 +7,10 @@ var/already_opened = 0 var/content_mob = null var/amount = 1 + open_sound = 'sound/machines/wooden_closet_open.ogg' + close_sound = 'sound/machines/wooden_closet_close.ogg' + open_sound_volume = 25 + close_sound_volume = 50 /obj/structure/closet/critter/can_open() if(welded) diff --git a/code/game/objects/structures/disaster_counter.dm b/code/game/objects/structures/disaster_counter.dm new file mode 100644 index 00000000000..186771ea968 --- /dev/null +++ b/code/game/objects/structures/disaster_counter.dm @@ -0,0 +1,100 @@ +/** + * # Disaster counter. + * + * Tracks how many shifts it has been since the counter with that ID was exploded. + */ +/obj/structure/disaster_counter + name = "disaster counter" + desc = "This device will count how many shifts it has been since a major disaster in this area. A safe workplace is a productive workplace." + icon = 'icons/obj/status_display.dmi' + icon_state = "frame" + anchored = TRUE + maptext_y = 10 // Offset by 10 so it renders properly + /// ID of the counter. Must be overriden. Use alphanumerics with no spaces only, as this is used in the filesystem. + var/counter_id + /// Current count number + var/current_count = 0 + /// Record count + var/record_count = 0 + +/obj/structure/disaster_counter/examine(mob/user) + . = ..() + . += "The display reads 'Currently [max(current_count, 0)] shifts without an accident, with a record of [record_count] shifts!'" + +/obj/structure/disaster_counter/Initialize(mapload) + . = ..() + if(!counter_id) + stack_trace("Disaster counter at [x],[y],[z] does not have a counter_id set. Deleting...") + return INITIALIZE_HINT_QDEL + + // If we still exist, put ourselves in + SSpersistent_data.register(src) + +/obj/structure/disaster_counter/ex_act(severity) + current_count = -1 + persistent_save() + update_maptext() + . = ..() + +/obj/structure/disaster_counter/Destroy() + if(counter_id) + SSpersistent_data.registered_atoms -= src // Take us out the list + return ..() + +/obj/structure/disaster_counter/proc/update_maptext() + maptext = "[max(current_count, 0)]/[record_count]" + +/obj/structure/disaster_counter/persistent_load() + // Just incase some bad actor sets the counter ID to "../../../../Windows/System32" + // Yes I am that paranoid + if(counter_id != paranoid_sanitize(counter_id)) + stack_trace("Counter ID did not pass sanitization for disaster counter at [x],[y],[z]. Potential attempt at filesystem manipulation.") + qdel(src) + return + + var/savefile/S = new /savefile("data/disaster_counters/[counter_id].sav") + S["count"] >> current_count + S["record"] >> record_count + + if(isnull(current_count)) + current_count = 0 + else + current_count++ // Increase by 1 since this is the next shift without a disaster (yet) + + if(isnull(record_count)) + record_count = current_count + else + // NEW RECORD + if(current_count > record_count) + record_count = current_count + log_debug("Persistent data for [src] loaded (current_count: [current_count] | record_count: [record_count])") + update_maptext() + +/obj/structure/disaster_counter/persistent_save() + if(counter_id != paranoid_sanitize(counter_id)) + stack_trace("Counter ID did not pass sanitization for disaster counter at [x],[y],[z]. Potential attempt at filesystem manipulation.") + qdel(src) + return + + var/savefile/S = new /savefile("data/disaster_counters/[counter_id].sav") + + S["count"] << current_count + S["record"] << record_count + log_debug("Persistent data for [src] saved (current_count: [current_count] | record_count: [record_count])") + +// Prefab definitions to make mapping easier +/obj/structure/disaster_counter/supermatter + name = "supermatter disaster counter" + counter_id = "supermatter" + +/obj/structure/disaster_counter/chemistry + name = "chemistry disaster counter" + counter_id = "chemistry" + +/obj/structure/disaster_counter/scichem + name = "science chemistry disaster counter" + counter_id = "scichem" + +/obj/structure/disaster_counter/toxins + name = "toxins launch room disaster counter" + counter_id = "toxinslaunch" diff --git a/code/game/objects/structures/door_assembly.dm b/code/game/objects/structures/door_assembly.dm index 0d9db6737b6..02cad716d3d 100644 --- a/code/game/objects/structures/door_assembly.dm +++ b/code/game/objects/structures/door_assembly.dm @@ -75,7 +75,7 @@ state = AIRLOCK_ASSEMBLY_NEEDS_ELECTRONICS to_chat(user, "You wire the airlock assembly.") - else if(istype(W, /obj/item/airlock_electronics) && state == AIRLOCK_ASSEMBLY_NEEDS_ELECTRONICS && W.icon_state != "door_electronics_smoked") + else if(istype(W, /obj/item/airlock_electronics) && state == AIRLOCK_ASSEMBLY_NEEDS_ELECTRONICS && !istype(W, /obj/item/airlock_electronics/destroyed)) playsound(loc, W.usesound, 100, 1) user.visible_message("[user] installs the electronics into the airlock assembly.", "You start to install electronics into the airlock assembly...") @@ -187,6 +187,7 @@ door.name = base_name door.previous_airlock = previous_assembly electronics.forceMove(door) + electronics = null qdel(src) update_icon() diff --git a/code/game/objects/structures/flora.dm b/code/game/objects/structures/flora.dm index ec74469f7e7..3679587d654 100644 --- a/code/game/objects/structures/flora.dm +++ b/code/game/objects/structures/flora.dm @@ -223,9 +223,10 @@ /obj/item/twohanded/required/kirbyplants/equipped(mob/living/user) . = ..() - var/image/I = image(icon = 'icons/obj/flora/plants.dmi' , icon_state = src.icon_state, loc = user) - I.override = 1 - user.add_alt_appearance("sneaking_mission", I, GLOB.player_list) + if(wielded) + var/image/I = image(icon, user, icon_state) + I.override = TRUE + user.add_alt_appearance("sneaking_mission", I, GLOB.player_list) /obj/item/twohanded/required/kirbyplants/dropped(mob/living/user) ..() @@ -319,7 +320,7 @@ A.loc = get_turf(src) */ -/obj/structure/bush/attackby(var/obj/I as obj, var/mob/user as mob, params) +/obj/structure/bush/attackby(obj/I as obj, mob/user as mob, params) //hatchets can clear away undergrowth if(istype(I, /obj/item/hatchet) && !stump) if(indestructable) diff --git a/code/game/objects/structures/grille.dm b/code/game/objects/structures/grille.dm index 1b7e86571de..68025f98fce 100644 --- a/code/game/objects/structures/grille.dm +++ b/code/game/objects/structures/grille.dm @@ -117,28 +117,28 @@ var/atom/movable/mover = caller . = . || mover.checkpass(PASSGRILLE) -/obj/structure/grille/attackby(obj/item/W, mob/user, params) +/obj/structure/grille/attackby(obj/item/I, mob/user, params) user.changeNext_move(CLICK_CD_MELEE) add_fingerprint(user) - if(istype(W, /obj/item/stack/rods) && broken) - var/obj/item/stack/rods/R = W - if(!shock(user, 90)) - user.visible_message("[user] rebuilds the broken grille.", \ - "You rebuild the broken grille.") - new grille_type(loc) - R.use(1) - qdel(src) - return + if(istype(I, /obj/item/stack/rods) && broken) + repair(user, I) //window placing begin - else if(is_glass_sheet(W)) - build_window(W, user) + else if(is_glass_sheet(I)) + build_window(I, user) return //window placing end - else if(istype(W, /obj/item/shard) || !shock(user, 70)) + else if(istype(I, /obj/item/shard) || !shock(user, 70)) return ..() +/obj/structure/grille/proc/repair(mob/user, obj/item/stack/rods/R) + user.visible_message("[user] rebuilds the broken grille.", + "You rebuild the broken grille.") + new grille_type(loc) + R.use(1) + qdel(src) + /obj/structure/grille/wirecutter_act(mob/user, obj/item/I) . = TRUE if(shock(user, 100)) diff --git a/code/game/objects/structures/inflatable.dm b/code/game/objects/structures/inflatable.dm index d3cf5b0dd96..785d6894215 100644 --- a/code/game/objects/structures/inflatable.dm +++ b/code/game/objects/structures/inflatable.dm @@ -59,10 +59,12 @@ qdel(src) else visible_message("[src] slowly deflates.") - spawn(50) - var/obj/item/inflatable/R = new intact(loc) - transfer_fingerprints_to(R) - qdel(src) + addtimer(CALLBACK(src, .proc/deflate), 5 SECONDS) + +/obj/structure/inflatable/proc/deflate() + var/obj/item/inflatable/R = new intact(loc) + transfer_fingerprints_to(R) + qdel(src) /obj/structure/inflatable/verb/hand_deflate() set name = "Deflate" diff --git a/code/game/objects/structures/morgue.dm b/code/game/objects/structures/morgue.dm index ee717fe5a8b..5510c1b4c46 100644 --- a/code/game/objects/structures/morgue.dm +++ b/code/game/objects/structures/morgue.dm @@ -49,7 +49,7 @@ if(M) var/mob/dead/observer/G = M.get_ghost() - if(M.mind && M.mind.is_revivable() && !M.mind.suicided) + if(M.mind && !M.mind.suicided) if(M.client) icon_state = "morgue3" desc = initial(desc) + "\n[status_descriptors[4]]" @@ -161,7 +161,7 @@ QDEL_NULL(connected) return ..() -/obj/structure/morgue/container_resist(var/mob/living/L) +/obj/structure/morgue/container_resist(mob/living/L) var/mob/living/carbon/CM = L if(!istype(CM)) return @@ -391,7 +391,7 @@ QDEL_NULL(connected) return ..() -/obj/structure/crematorium/container_resist(var/mob/living/L) +/obj/structure/crematorium/container_resist(mob/living/L) var/mob/living/carbon/CM = L if(!istype(CM)) return @@ -457,6 +457,10 @@ name = "crematorium igniter" icon = 'icons/obj/power.dmi' icon_state = "crema_switch" + power_channel = EQUIP + use_power = IDLE_POWER_USE + idle_power_usage = 100 + active_power_usage = 5000 anchored = 1.0 req_access = list(ACCESS_CREMATORIUM) var/on = 0 @@ -469,13 +473,17 @@ return attack_hand(user) /obj/machinery/crema_switch/attack_hand(mob/user) - if(allowed(usr) || user.can_advanced_admin_interact()) - for(var/obj/structure/crematorium/C in world) - if(C.id == id) - if(!C.cremating) - C.cremate(user) - else - to_chat(usr, "Access denied.") + if(powered(power_channel)) // Do we have power? + if(allowed(usr) || user.can_advanced_admin_interact()) + use_power(400000) + for(var/obj/structure/crematorium/C in world) + if(C.id == id) + if(!C.cremating) + C.cremate(user) + + + else + to_chat(usr, "Access denied.") /mob/proc/update_morgue() if(stat == DEAD) diff --git a/code/game/objects/structures/noticeboard.dm b/code/game/objects/structures/noticeboard.dm index 6b9615cd994..64a0361dc5d 100644 --- a/code/game/objects/structures/noticeboard.dm +++ b/code/game/objects/structures/noticeboard.dm @@ -18,7 +18,7 @@ icon_state = "nboard0[notices]" //attaching papers!! -/obj/structure/noticeboard/attackby(var/obj/item/O as obj, var/mob/user as mob, params) +/obj/structure/noticeboard/attackby(obj/item/O as obj, mob/user as mob, params) if(istype(O, /obj/item/paper)) if(notices < 5) O.add_fingerprint(user) diff --git a/code/game/objects/structures/safe.dm b/code/game/objects/structures/safe.dm index 2f751dbfadd..5bfe4e8a880 100644 --- a/code/game/objects/structures/safe.dm +++ b/code/game/objects/structures/safe.dm @@ -7,7 +7,7 @@ SAFE CODES */ #define DRILL_SPARK_CHANCE 15 -#define DRILL_TIME 300 SECONDS +#define DRILL_TIME 120 SECONDS #define SOUND_CHANCE 10 GLOBAL_LIST_EMPTY(safes) diff --git a/code/game/objects/structures/spirit_board.dm b/code/game/objects/structures/spirit_board.dm index 8fa6e0d7dd1..647f0a53c6e 100644 --- a/code/game/objects/structures/spirit_board.dm +++ b/code/game/objects/structures/spirit_board.dm @@ -24,7 +24,7 @@ spirit_board_pick_letter(user) -/obj/structure/spirit_board/proc/spirit_board_pick_letter(var/mob/M) +/obj/structure/spirit_board/proc/spirit_board_pick_letter(mob/M) if(!spirit_board_checks(M)) return 0 @@ -43,7 +43,7 @@ visible_message("The planchette slowly moves... and stops at the letter \"[planchette]\".") -/obj/structure/spirit_board/proc/spirit_board_checks(var/mob/M) +/obj/structure/spirit_board/proc/spirit_board_checks(mob/M) //cooldown var/bonus = 0 if(M.ckey == lastuser) diff --git a/code/game/objects/structures/statues.dm b/code/game/objects/structures/statues.dm index 2c7ffbe2e90..15874e0c812 100644 --- a/code/game/objects/structures/statues.dm +++ b/code/game/objects/structures/statues.dm @@ -46,9 +46,6 @@ user.visible_message("[user] rubs some dust off from the [name]'s surface.", \ "You rub some dust off from the [name]'s surface.") -/obj/structure/statue/CanAtmosPass() - return !density - /obj/structure/statue/deconstruct(disassembled = TRUE) if(!(flags & NODECONSTRUCT)) if(material_drop_type) 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 9def5542c76..1a162c250fa 100644 --- a/code/game/objects/structures/stool_bed_chair_nest/wheelchair.dm +++ b/code/game/objects/structures/stool_bed_chair_nest/wheelchair.dm @@ -156,3 +156,6 @@ else . = 1 + +/obj/structure/chair/wheelchair/bike/wrench_act(mob/user, obj/item/I) + return diff --git a/code/game/objects/structures/tables_racks.dm b/code/game/objects/structures/tables_racks.dm index d287c2f5bbf..5bce42875fe 100644 --- a/code/game/objects/structures/tables_racks.dm +++ b/code/game/objects/structures/tables_racks.dm @@ -591,7 +591,7 @@ verbs -= /obj/structure/table/verb/do_flip typecache_can_hold = typecacheof(typecache_can_hold) for(var/atom/movable/held in get_turf(src)) - if(is_type_in_typecache(held, typecache_can_hold)) + if(!held.anchored && held.move_resist != INFINITY && is_type_in_typecache(held, typecache_can_hold)) held_items += held.UID() /obj/structure/table/tray/Move(NewLoc, direct) diff --git a/code/game/objects/structures/transit_tubes/transit_tube_pod.dm b/code/game/objects/structures/transit_tubes/transit_tube_pod.dm index 126133cddc0..0e6327090c9 100644 --- a/code/game/objects/structures/transit_tubes/transit_tube_pod.dm +++ b/code/game/objects/structures/transit_tubes/transit_tube_pod.dm @@ -28,7 +28,7 @@ return TRUE else return ..() -/obj/structure/transit_tube_pod/proc/follow_tube(var/reverse_launch) +/obj/structure/transit_tube_pod/proc/follow_tube(reverse_launch) if(moving) return diff --git a/code/game/objects/structures/windoor_assembly.dm b/code/game/objects/structures/windoor_assembly.dm index fb89c95815b..73e6fadac80 100644 --- a/code/game/objects/structures/windoor_assembly.dm +++ b/code/game/objects/structures/windoor_assembly.dm @@ -131,7 +131,7 @@ if("02") //Adding airlock electronics for access. Step 6 complete. - if(istype(W, /obj/item/airlock_electronics)) + if(istype(W, /obj/item/airlock_electronics) && !istype(W, /obj/item/airlock_electronics/destroyed)) playsound(loc, W.usesound, 100, 1) user.visible_message("[user] installs the electronics into the airlock assembly.", "You start to install electronics into the airlock assembly...") user.drop_item() diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm index edeaec45545..b0d9464a0a3 100644 --- a/code/game/objects/structures/window.dm +++ b/code/game/objects/structures/window.dm @@ -166,7 +166,15 @@ return 1 //skip the afterattack add_fingerprint(user) - if(istype(I, /obj/item/grab) && get_dist(src, user) < 2) + if(istype(I, /obj/item/stack/rods) && user.a_intent == INTENT_HELP) + for(var/obj/structure/grille/G in get_turf(src)) + if(!G.broken) + continue + to_chat(user, "You start rebuilding the broken grille.") + if(do_after(user, 4 SECONDS, FALSE, G)) + G.repair(user, I) + + else if(istype(I, /obj/item/grab) && get_dist(src, user) < 2) var/obj/item/grab/G = I if(isliving(G.affecting)) var/mob/living/M = G.affecting @@ -193,8 +201,8 @@ M.Weaken(5) M.apply_damage(30) take_damage(75) - return - return ..() + else + return ..() /obj/structure/window/crowbar_act(mob/user, obj/item/I) diff --git a/code/game/sound.dm b/code/game/sound.dm index dbd8022c2b8..a836aba710f 100644 --- a/code/game/sound.dm +++ b/code/game/sound.dm @@ -23,14 +23,34 @@ ) environment = SOUND_ENVIRONMENT_NONE //Default to none so sounds without overrides dont get reverb -/proc/playsound(atom/source, soundin, vol as num, vary, extrarange as num, falloff, frequency = null, channel = 0, pressure_affected = TRUE, ignore_walls = TRUE, use_reverb = TRUE) +/*! playsound + +playsound is a proc used to play a 3D sound in a specific range. This uses SOUND_RANGE + extra_range to determine that. + +source - Origin of sound +soundin - Either a file, or a string that can be used to get an SFX +vol - The volume of the sound, excluding falloff and pressure affection. +vary - bool that determines if the sound changes pitch every time it plays +extrarange - modifier for sound range. This gets added on top of SOUND_RANGE +falloff_exponent - Rate of falloff for the audio. Higher means quicker drop to low volume. Should generally be over 1 to indicate a quick dive to 0 rather than a slow dive. +frequency - playback speed of audio +channel - The channel the sound is played at +pressure_affected - Whether or not difference in pressure affects the sound (E.g. if you can hear in space) +ignore_walls - Whether or not the sound can pass through walls. +falloff_distance - Distance at which falloff begins. Sound is at peak volume (in regards to falloff) aslong as it is in this range. + +*/ + +/proc/playsound(atom/source, soundin, vol as num, vary, extrarange as num, falloff_exponent = SOUND_FALLOFF_EXPONENT, frequency = null, channel = 0, pressure_affected = TRUE, ignore_walls = TRUE, falloff_distance = SOUND_DEFAULT_FALLOFF_DISTANCE, use_reverb = TRUE) if(isarea(source)) error("[source] is an area and is trying to make the sound: [soundin]") return var/turf/turf_source = get_turf(source) + if(!turf_source) return + if(!SSsounds.channel_list) // Not ready yet return @@ -39,10 +59,12 @@ // Looping through the player list has the added bonus of working for mobs inside containers var/sound/S = sound(get_sfx(soundin)) - var/maxdistance = (world.view + extrarange) * 3 + var/maxdistance = SOUND_RANGE + extrarange + var/list/listeners = GLOB.player_list if(!ignore_walls) //these sounds don't carry through walls listeners = listeners & hearers(maxdistance, turf_source) + for(var/P in listeners) var/mob/M = P if(!M || !M.client) @@ -57,9 +79,9 @@ var/distance = get_dist(M, turf_source) if(distance <= maxdistance) - M.playsound_local(turf_source, soundin, vol, vary, frequency, falloff, channel, pressure_affected, S, 1, use_reverb) + M.playsound_local(turf_source, soundin, vol, vary, frequency, falloff_exponent, channel, pressure_affected, S, maxdistance, falloff_distance, 1, use_reverb) -/mob/proc/playsound_local(turf/turf_source, soundin, vol as num, vary, frequency, falloff, channel = 0, pressure_affected = TRUE, sound/S, distance_multiplier = 1, use_reverb = TRUE) +/mob/proc/playsound_local(turf/turf_source, soundin, vol as num, vary, frequency, falloff_exponent = SOUND_FALLOFF_EXPONENT, channel = 0, pressure_affected = TRUE, sound/S, max_distance, falloff_distance = SOUND_DEFAULT_FALLOFF_DISTANCE, distance_multiplier = 1, use_reverb = TRUE) if(!client || !can_hear()) return @@ -70,6 +92,9 @@ S.channel = channel || SSsounds.random_available_channel() S.volume = vol + if(channel) + S.volume *= client.prefs.get_channel_volume(channel) + if(vary) if(frequency) S.frequency = frequency @@ -81,9 +106,12 @@ //sound volume falloff with distance var/distance = get_dist(T, turf_source) + distance *= distance_multiplier - S.volume -= max(distance - world.view, 0) * 2 //multiplicative falloff to add on top of natural audio falloff. + if(max_distance) //If theres no max_distance we're not a 3D sound, so no falloff. + S.volume -= (max(distance - falloff_distance, 0) ** (1 / falloff_exponent)) / ((max(max_distance, distance) - falloff_distance) ** (1 / falloff_exponent)) * S.volume + //https://www.desmos.com/calculator/sqdfl8ipgf if(pressure_affected) //Atmosphere affects sound @@ -113,7 +141,8 @@ S.z = dz * distance_multiplier // The y value is for above your head, but there is no ceiling in 2d spessmens. S.y = 1 - S.falloff = (falloff ? falloff : FALLOFF_SOUNDS) + + S.falloff = max_distance || 1 //use max_distance, else just use 1 as we are a direct sound so falloff isnt relevant. // Sounds can't have their own environment. A sound's environment will be: // 1. the mob's @@ -125,18 +154,20 @@ S.environment = A.sound_environment if(use_reverb && S.environment != SOUND_ENVIRONMENT_NONE) //We have reverb, reset our echo setting - S.echo[3] = 0 //Room setting, 0 means normal reverb - S.echo[4] = 0 //RoomHF setting, 0 means normal reverb. + // Check that the user has reverb enabled in their prefs + if(!(client?.prefs?.toggles2 & PREFTOGGLE_2_REVERB_DISABLE)) + S.echo[3] = 0 //Room setting, 0 means normal reverb + S.echo[4] = 0 //RoomHF setting, 0 means normal reverb. SEND_SOUND(src, S) -/proc/sound_to_playing_players(soundin, volume = 100, vary = FALSE, frequency = 0, falloff = FALSE, channel = 0, pressure_affected = FALSE, sound/S) +/proc/sound_to_playing_players(soundin, volume = 100, vary = FALSE, frequency = 0, channel = 0, pressure_affected = FALSE, sound/S) if(!S) S = sound(get_sfx(soundin)) for(var/m in GLOB.player_list) if(ismob(m) && !isnewplayer(m)) var/mob/M = m - M.playsound_local(M, null, volume, vary, frequency, falloff, channel, pressure_affected, S) + M.playsound_local(M, null, volume, vary, frequency, null, channel, pressure_affected, S) /mob/proc/stop_sound_channel(chan) SEND_SOUND(src, sound(null, repeat = 0, wait = 0, channel = chan)) @@ -150,7 +181,7 @@ if(!SSticker || !SSticker.login_music || config.disable_lobby_music) return if(prefs.sound & SOUND_LOBBY) - SEND_SOUND(src, sound(SSticker.login_music, repeat = 0, wait = 0, volume = 85, channel = CHANNEL_LOBBYMUSIC)) // MAD JAMS + SEND_SOUND(src, sound(SSticker.login_music, repeat = 0, wait = 0, volume = 85 * prefs.get_channel_volume(CHANNEL_LOBBYMUSIC), channel = CHANNEL_LOBBYMUSIC)) // MAD JAMS /proc/get_rand_frequency() return rand(32000, 55000) //Frequency stuff only works with 45kbps oggs. @@ -162,6 +193,10 @@ soundin = pick('sound/effects/glassbr1.ogg','sound/effects/glassbr2.ogg','sound/effects/glassbr3.ogg') if("explosion") soundin = pick('sound/effects/explosion1.ogg','sound/effects/explosion2.ogg') + if("explosion_creaking") + soundin = pick('sound/effects/explosioncreak1.ogg', 'sound/effects/explosioncreak2.ogg') + if("hull_creaking") + soundin = pick('sound/effects/creak1.ogg', 'sound/effects/creak2.ogg', 'sound/effects/creak3.ogg') if("sparks") soundin = pick('sound/effects/sparks1.ogg','sound/effects/sparks2.ogg','sound/effects/sparks3.ogg','sound/effects/sparks4.ogg') if("rustle") @@ -170,10 +205,6 @@ soundin = pick('sound/effects/bodyfall1.ogg','sound/effects/bodyfall2.ogg','sound/effects/bodyfall3.ogg','sound/effects/bodyfall4.ogg') if("punch") soundin = pick('sound/weapons/punch1.ogg','sound/weapons/punch2.ogg','sound/weapons/punch3.ogg','sound/weapons/punch4.ogg') - if("clownstep") - soundin = pick('sound/effects/clownstep1.ogg','sound/effects/clownstep2.ogg') - if("jackboot") - soundin = pick('sound/effects/jackboot1.ogg','sound/effects/jackboot2.ogg') if("swing_hit") soundin = pick('sound/weapons/genhit1.ogg', 'sound/weapons/genhit2.ogg', 'sound/weapons/genhit3.ogg') if("hiss") diff --git a/code/game/turfs/simulated/floor.dm b/code/game/turfs/simulated/floor.dm index 614b8232b0b..3ba2e638099 100644 --- a/code/game/turfs/simulated/floor.dm +++ b/code/game/turfs/simulated/floor.dm @@ -31,6 +31,11 @@ GLOBAL_LIST_INIT(icons_to_ignore_at_floor_init, list("damaged1","damaged2","dama 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/footstep = FOOTSTEP_FLOOR + var/barefootstep = FOOTSTEP_HARD_BAREFOOT + var/clawfootstep = FOOTSTEP_HARD_CLAW + var/heavyfootstep = FOOTSTEP_GENERIC_HEAVY + /turf/simulated/floor/Initialize(mapload) . = ..() if(icon_state in GLOB.icons_to_ignore_at_floor_init) //so damaged/burned tiles or plating icons aren't saved as the default diff --git a/code/game/turfs/simulated/floor/asteroid.dm b/code/game/turfs/simulated/floor/asteroid.dm index d912e183aec..4e337008830 100644 --- a/code/game/turfs/simulated/floor/asteroid.dm +++ b/code/game/turfs/simulated/floor/asteroid.dm @@ -7,7 +7,10 @@ baseturf = /turf/simulated/floor/plating/asteroid icon_state = "asteroid" icon_plating = "asteroid" - footstep_sounds = list() + footstep = FOOTSTEP_SAND + barefootstep = FOOTSTEP_SAND + clawfootstep = FOOTSTEP_SAND + heavyfootstep = FOOTSTEP_GENERIC_HEAVY var/environment_type = "asteroid" var/turf_type = /turf/simulated/floor/plating/asteroid //Because caves do whacky shit to revert to normal var/floor_variance = 20 //probability floor has a different icon state diff --git a/code/game/turfs/simulated/floor/fancy_floor.dm b/code/game/turfs/simulated/floor/fancy_floor.dm index bfbfa70331e..0b8938fc204 100644 --- a/code/game/turfs/simulated/floor/fancy_floor.dm +++ b/code/game/turfs/simulated/floor/fancy_floor.dm @@ -3,11 +3,10 @@ floor_tile = /obj/item/stack/tile/wood prying_tool_list = list(TOOL_SCREWDRIVER) broken_states = list("wood-broken", "wood-broken2", "wood-broken3", "wood-broken4", "wood-broken5", "wood-broken6", "wood-broken7") - - footstep_sounds = list( - "human" = list('sound/effects/footstep/wood_all.ogg'), //@RonaldVanWonderen of Freesound.org - "xeno" = list('sound/effects/footstep/wood_all.ogg') //@RonaldVanWonderen of Freesound.org - ) + footstep = FOOTSTEP_WOOD + barefootstep = FOOTSTEP_WOOD_BAREFOOT + clawfootstep = FOOTSTEP_WOOD_CLAW + heavyfootstep = FOOTSTEP_GENERIC_HEAVY /turf/simulated/floor/wood/screwdriver_act(mob/user, obj/item/I) . = TRUE @@ -48,6 +47,10 @@ icon_state = "grass1" floor_tile = /obj/item/stack/tile/grass broken_states = list("sand") + footstep = FOOTSTEP_GRASS + barefootstep = FOOTSTEP_GRASS + clawfootstep = FOOTSTEP_GRASS + heavyfootstep = FOOTSTEP_GENERIC_HEAVY /turf/simulated/floor/grass/Initialize(mapload) . = ..() @@ -73,12 +76,10 @@ broken_states = list("damaged") smooth = SMOOTH_TRUE canSmoothWith = null - - footstep_sounds = list( - "human" = list('sound/effects/footstep/carpet_human.ogg'), - "xeno" = list('sound/effects/footstep/carpet_xeno.ogg') - ) - + footstep = FOOTSTEP_CARPET + barefootstep = FOOTSTEP_CARPET_BAREFOOT + clawfootstep = FOOTSTEP_CARPET_BAREFOOT + heavyfootstep = FOOTSTEP_GENERIC_HEAVY /turf/simulated/floor/carpet/Initialize(mapload) . = ..() diff --git a/code/game/turfs/simulated/floor/indestructible.dm b/code/game/turfs/simulated/floor/indestructible.dm index 4f551fb485a..cd7abaeb188 100644 --- a/code/game/turfs/simulated/floor/indestructible.dm +++ b/code/game/turfs/simulated/floor/indestructible.dm @@ -46,6 +46,10 @@ nitrogen = 23 temperature = 300 planetary_atmos = TRUE + footstep = FOOTSTEP_LAVA + barefootstep = FOOTSTEP_LAVA + clawfootstep = FOOTSTEP_LAVA + heavyfootstep = FOOTSTEP_LAVA /turf/simulated/floor/indestructible/necropolis/Initialize(mapload) . = ..() diff --git a/code/game/turfs/simulated/floor/lava.dm b/code/game/turfs/simulated/floor/lava.dm index 14a08639132..29485f4a808 100644 --- a/code/game/turfs/simulated/floor/lava.dm +++ b/code/game/turfs/simulated/floor/lava.dm @@ -7,6 +7,10 @@ light_range = 2 light_power = 0.75 light_color = LIGHT_COLOR_LAVA + footstep = FOOTSTEP_LAVA + barefootstep = FOOTSTEP_LAVA + clawfootstep = FOOTSTEP_LAVA + heavyfootstep = FOOTSTEP_LAVA /turf/simulated/floor/plating/lava/ex_act() return diff --git a/code/game/turfs/simulated/floor/mineral.dm b/code/game/turfs/simulated/floor/mineral.dm index 4f62b4dc87b..6ab388fd3c5 100644 --- a/code/game/turfs/simulated/floor/mineral.dm +++ b/code/game/turfs/simulated/floor/mineral.dm @@ -205,8 +205,10 @@ name = "silent floor" icon_state = "tranquillite" floor_tile = /obj/item/stack/tile/mineral/tranquillite - shoe_running_volume = 0 - shoe_walking_volume = 0 + footstep = null + barefootstep = null + clawfootstep = null + heavyfootstep = null //DIAMOND /turf/simulated/floor/mineral/diamond diff --git a/code/game/turfs/simulated/floor/misc_floor.dm b/code/game/turfs/simulated/floor/misc_floor.dm index c80cddff699..2876378eb06 100644 --- a/code/game/turfs/simulated/floor/misc_floor.dm +++ b/code/game/turfs/simulated/floor/misc_floor.dm @@ -42,6 +42,10 @@ /turf/simulated/floor/beach name = "beach" icon = 'icons/misc/beach.dmi' + footstep = FOOTSTEP_SAND + barefootstep = FOOTSTEP_SAND + clawfootstep = FOOTSTEP_SAND + heavyfootstep = FOOTSTEP_GENERIC_HEAVY /turf/simulated/floor/beach/pry_tile(obj/item/C, mob/user, silent = FALSE) return @@ -56,17 +60,29 @@ icon = 'icons/misc/beach2.dmi' icon_state = "sandwater" baseturf = /turf/simulated/floor/beach/coastline + footstep = FOOTSTEP_WATER + barefootstep = FOOTSTEP_WATER + clawfootstep = FOOTSTEP_WATER + heavyfootstep = FOOTSTEP_WATER /turf/simulated/floor/beach/coastline_t name = "coastline" desc = "Tide's high tonight. Charge your batons." icon_state = "sandwater_t" baseturf = /turf/simulated/floor/beach/coastline_t + footstep = FOOTSTEP_WATER + barefootstep = FOOTSTEP_WATER + clawfootstep = FOOTSTEP_WATER + heavyfootstep = FOOTSTEP_WATER /turf/simulated/floor/beach/coastline_b name = "coastline" icon_state = "sandwater_b" baseturf = /turf/simulated/floor/beach/coastline_b + footstep = FOOTSTEP_WATER + barefootstep = FOOTSTEP_WATER + clawfootstep = FOOTSTEP_WATER + heavyfootstep = FOOTSTEP_WATER /turf/simulated/floor/beach/water // TODO - Refactor water so they share the same parent type - Or alternatively component something like that name = "water" @@ -74,6 +90,10 @@ mouse_opacity = MOUSE_OPACITY_TRANSPARENT var/obj/machinery/poolcontroller/linkedcontroller = null baseturf = /turf/simulated/floor/beach/water + footstep = FOOTSTEP_WATER + barefootstep = FOOTSTEP_WATER + clawfootstep = FOOTSTEP_WATER + heavyfootstep = FOOTSTEP_WATER /turf/simulated/floor/beach/water/Initialize(mapload) . = ..() diff --git a/code/game/turfs/simulated/floor/plating.dm b/code/game/turfs/simulated/floor/plating.dm index 703b98fd094..94d95c2af86 100644 --- a/code/game/turfs/simulated/floor/plating.dm +++ b/code/game/turfs/simulated/floor/plating.dm @@ -6,13 +6,11 @@ floor_tile = null broken_states = list("damaged1", "damaged2", "damaged3", "damaged4", "damaged5") burnt_states = list("floorscorched1", "floorscorched2") - var/unfastened = FALSE - - footstep_sounds = list( - "human" = list('sound/effects/footstep/plating_human.ogg'), - "xeno" = list('sound/effects/footstep/plating_xeno.ogg') - ) + footstep = FOOTSTEP_PLATING + barefootstep = FOOTSTEP_HARD_BAREFOOT + clawfootstep = FOOTSTEP_HARD_CLAW + heavyfootstep = FOOTSTEP_GENERIC_HEAVY /turf/simulated/floor/plating/Initialize(mapload) . = ..() @@ -127,6 +125,10 @@ thermal_conductivity = 0.025 heat_capacity = 325000 floor_tile = /obj/item/stack/rods + footstep = FOOTSTEP_PLATING + barefootstep = FOOTSTEP_HARD_BAREFOOT + clawfootstep = FOOTSTEP_HARD_CLAW + heavyfootstep = FOOTSTEP_GENERIC_HEAVY /turf/simulated/floor/engine/break_tile() return //unbreakable @@ -261,6 +263,10 @@ name = "snow" icon = 'icons/turf/snow.dmi' icon_state = "snow" + footstep = FOOTSTEP_SAND + barefootstep = FOOTSTEP_SAND + clawfootstep = FOOTSTEP_SAND + heavyfootstep = FOOTSTEP_GENERIC_HEAVY /turf/simulated/floor/plating/snow/ex_act(severity) return @@ -272,6 +278,10 @@ name = "snow" icon = 'icons/turf/snow.dmi' icon_state = "snow" + footstep = FOOTSTEP_SAND + barefootstep = FOOTSTEP_SAND + clawfootstep = FOOTSTEP_SAND + heavyfootstep = FOOTSTEP_GENERIC_HEAVY /turf/simulated/floor/snow/ex_act(severity) return @@ -295,7 +305,7 @@ if(MFOAM_IRON) icon_state = "ironfoam" -/turf/simulated/floor/plating/metalfoam/attackby(var/obj/item/C, mob/user, params) +/turf/simulated/floor/plating/metalfoam/attackby(obj/item/C, mob/user, params) if(..()) return TRUE diff --git a/code/game/turfs/simulated/minerals.dm b/code/game/turfs/simulated/minerals.dm index 538c1599069..d2109bee2f0 100644 --- a/code/game/turfs/simulated/minerals.dm +++ b/code/game/turfs/simulated/minerals.dm @@ -20,7 +20,7 @@ var/mineralType = null var/mineralAmt = 3 var/spread = 0 //will the seam spread? - var/spreadChance = 0 //the percentual chance of an ore spreading to the neighbouring tiles + var/spreadChance = 0 //the percentile chance of an ore spreading to the neighboring tiles var/last_act = 0 var/scan_state = "" //Holder for the image we display when we're pinged by a mining scanner var/defer_change = 0 @@ -478,7 +478,7 @@ det_time = 0 visible_message("The chain reaction was stopped! The gibtonite had [det_time] reactions left till the explosion!") -/turf/simulated/mineral/gibtonite/gets_drilled(var/mob/user, triggered_by_explosion = 0) +/turf/simulated/mineral/gibtonite/gets_drilled(mob/user, triggered_by_explosion = 0) if(stage == GIBTONITE_UNSTRUCK && mineralAmt >= 1) //Gibtonite deposit is activated playsound(src,'sound/effects/hit_on_shattered_glass.ogg', 50, TRUE) explosive_reaction(user, triggered_by_explosion) diff --git a/code/game/turfs/simulated/walls.dm b/code/game/turfs/simulated/walls.dm index 6b8e5affdd1..1eb89e6a238 100644 --- a/code/game/turfs/simulated/walls.dm +++ b/code/game/turfs/simulated/walls.dm @@ -4,10 +4,10 @@ /turf/simulated/wall name = "wall" - desc = "A huge chunk of metal used to seperate rooms." + desc = "A huge chunk of metal used to separate rooms." icon = 'icons/turf/walls/wall.dmi' icon_state = "wall" - var/rotting = 0 + var/rotting = FALSE var/damage = 0 var/damage_cap = 100 //Wall will break down to girders if damage reaches this point @@ -28,7 +28,7 @@ var/can_dismantle_with_welder = TRUE var/hardness = 40 //lower numbers are harder. Used to determine the probability of a hulk smashing through. - var/slicing_duration = 100 + var/slicing_duration = 10 SECONDS var/engraving //engraving on the wall var/engraving_quality var/list/dent_decals @@ -76,7 +76,7 @@ if(!damage) if(damage_overlay) overlays -= damage_overlays[damage_overlay] - damage_overlay = 0 + damage_overlay = null return var/overlay = round(damage / damage_cap * damage_overlays.len) + 1 @@ -330,38 +330,38 @@ to_chat(user, "You burn off the fungi with [I].") return - if(!I.tool_use_check(user, 0)) //Wall repair stuff + // Wall repair stuff + if(!I.tool_use_check(user, 0)) return - var/time_required = slicing_duration - var/intention - if(can_dismantle_with_welder) - intention = "Dismantle" - if(damage || LAZYLEN(dent_decals)) - intention = "Repair" + var/repairing + var/time + if(user.a_intent == INTENT_HARM) // Harm intent if(can_dismantle_with_welder) - var/moved_away = user.loc - intention = alert(user, "Would you like to repair or dismantle [src]?", "[src]", "Repair", "Dismantle") - if(user.loc != moved_away) - to_chat(user, "Stay still while doing this!") - return - if(intention == "Repair") - time_required = max(5, damage / 5) - if(!intention) - return - if(intention == "Dismantle") - WELDER_ATTEMPT_SLICING_MESSAGE - else - WELDER_ATTEMPT_REPAIR_MESSAGE - if(I.use_tool(src, user, time_required, volume = I.tool_volume)) - if(intention == "Dismantle") - WELDER_SLICING_SUCCESS_MESSAGE - dismantle_wall() + repairing = FALSE + time = slicing_duration + WELDER_ATTEMPT_SLICING_MESSAGE else + return + + else // Any other intents + if(damage || LAZYLEN(dent_decals)) + repairing = TRUE + time = max(5, damage / 5) + WELDER_ATTEMPT_REPAIR_MESSAGE + else + to_chat(user, "[src] doesn't need repairing.") + return + + if(I.use_tool(src, user, time, volume = I.tool_volume)) + if(repairing) WELDER_REPAIR_SUCCESS_MESSAGE cut_overlay(dent_decals) - dent_decals?.Cut() + dent_decals?.Cut() // I feel like this isn't needed but it can't hurt to keep it in anyway take_damage(-damage) + else + WELDER_SLICING_SUCCESS_MESSAGE + dismantle_wall() /turf/simulated/wall/proc/try_rot(obj/item/I, mob/user, params) if((!is_sharp(I) && I.force >= 10) || I.force >= 20) diff --git a/code/game/turfs/simulated/walls_mineral.dm b/code/game/turfs/simulated/walls_mineral.dm index 7bc49c2951e..9d743ae9c18 100644 --- a/code/game/turfs/simulated/walls_mineral.dm +++ b/code/game/turfs/simulated/walls_mineral.dm @@ -82,7 +82,7 @@ /turf/simulated/wall/mineral/plasma name = "plasma wall" - desc = "A wall with plasma plating. This is definately a bad idea." + desc = "A wall with plasma plating. This is definitely a bad idea." icon = 'icons/turf/walls/plasma_wall.dmi' icon_state = "plasma" sheet_type = /obj/item/stack/sheet/mineral/plasma @@ -122,7 +122,7 @@ if(exposed_temperature > 300) PlasmaBurn(exposed_temperature) -/turf/simulated/wall/mineral/plasma/bullet_act(var/obj/item/projectile/Proj) +/turf/simulated/wall/mineral/plasma/bullet_act(obj/item/projectile/Proj) if(Proj.damage == 0)//lasertag guns and so on don't set off plasma anymore. can't use nodamage here because lasertag guns actually don't have it. return if(istype(Proj,/obj/item/projectile/beam)) @@ -303,26 +303,6 @@ icon_state = "map-overspace" fixed_underlay = list("space"=1) -/turf/simulated/wall/mineral/plastitanium/explosive - var/explosive_wall_group = EXPLOSIVE_WALL_GROUP_SYNDICATE_BASE - icon_state = "map-shuttle_nd" - smooth = SMOOTH_MORE - -/turf/simulated/wall/mineral/plastitanium/explosive/Initialize(mapload) - . = ..() - GLOB.explosive_walls += src - -/turf/simulated/wall/mineral/plastitanium/explosive/Destroy() - GLOB.explosive_walls -= src - return ..() - -/turf/simulated/wall/mineral/plastitanium/explosive/proc/self_destruct() - var/obj/item/bombcore/large/explosive_wall/bombcore = new(get_turf(src)) - bombcore.detonate() - -/turf/simulated/wall/mineral/plastitanium/explosive/ex_act(severity) - return - //have to copypaste this code /turf/simulated/wall/mineral/plastitanium/interior/copyTurf(turf/T) if(T.type != type) diff --git a/code/game/turfs/simulated/walls_misc.dm b/code/game/turfs/simulated/walls_misc.dm index 89122891702..e32fa627297 100644 --- a/code/game/turfs/simulated/walls_misc.dm +++ b/code/game/turfs/simulated/walls_misc.dm @@ -11,7 +11,7 @@ /turf/simulated/wall/cult/Initialize(mapload) . = ..() - if(SSticker.mode)//game hasn't started offically don't do shit.. + if(SSticker.mode)//game hasn't started officially don't do shit.. new /obj/effect/temp_visual/cult/turf(src) icon_state = SSticker.cultdat.cult_wall_icon_state diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm index 8fe9726525b..4678bd94ce4 100644 --- a/code/game/turfs/turf.dm +++ b/code/game/turfs/turf.dm @@ -35,10 +35,6 @@ var/list/blueprint_data //for the station blueprints, images of objects eg: pipes - var/list/footstep_sounds - var/shoe_running_volume = 50 - var/shoe_walking_volume = 20 - /turf/Initialize(mapload) SHOULD_CALL_PARENT(FALSE) if(initialized) @@ -352,7 +348,7 @@ // Returns the surrounding cardinal turfs with open links // Including through doors openable with the ID -/turf/proc/CardinalTurfsWithAccess(var/obj/item/card/id/ID) +/turf/proc/CardinalTurfsWithAccess(obj/item/card/id/ID) var/list/L = new() var/turf/simulated/T diff --git a/code/game/verbs/ooc.dm b/code/game/verbs/ooc.dm index 0aea3e234c5..f4f37f313a1 100644 --- a/code/game/verbs/ooc.dm +++ b/code/game/verbs/ooc.dm @@ -104,7 +104,7 @@ GLOBAL_VAR_INIT(admin_ooc_colour, "#b82e00") else to_chat(world, "The OOC channel has been globally disabled!") -/proc/auto_toggle_ooc(var/on) +/proc/auto_toggle_ooc(on) if(config.auto_toggle_ooc_during_round && config.ooc_allowed != on) toggle_ooc() diff --git a/code/game/world.dm b/code/game/world.dm index 0cb7e750c77..5ba97917661 100644 --- a/code/game/world.dm +++ b/code/game/world.dm @@ -175,7 +175,7 @@ GLOBAL_LIST_EMPTY(world_topic_handlers) GLOB.master_mode = Lines[1] log_game("Saved mode is '[GLOB.master_mode]'") -/world/proc/save_mode(var/the_mode) +/world/proc/save_mode(the_mode) var/F = file("data/mode.txt") fdel(F) F << the_mode diff --git a/code/modules/admin/NewBan.dm b/code/modules/admin/NewBan.dm index e0c93f8b40e..4169ca380ab 100644 --- a/code/modules/admin/NewBan.dm +++ b/code/modules/admin/NewBan.dm @@ -2,7 +2,7 @@ GLOBAL_VAR(CMinutes) GLOBAL_DATUM(banlist_savefile, /savefile) GLOBAL_PROTECT(banlist_savefile) // Obvious reasons -/proc/CheckBan(var/ckey, var/id, var/address) +/proc/CheckBan(ckey, id, address) if(!GLOB.banlist_savefile) // if banlist_savefile cannot be located for some reason LoadBans() // try to load the bans if(!GLOB.banlist_savefile) // uh oh, can't find bans! diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index daf195af8f8..2f7ef2e44c8 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -2,14 +2,14 @@ GLOBAL_VAR_INIT(BSACooldown, 0) GLOBAL_VAR_INIT(nologevent, 0) //////////////////////////////// -/proc/message_admins(var/msg) +/proc/message_admins(msg) msg = "ADMIN LOG: [msg]" for(var/client/C in GLOB.admins) if(R_ADMIN & C.holder.rights) if(C.prefs && !(C.prefs.toggles & PREFTOGGLE_CHAT_NO_ADMINLOGS)) to_chat(C, msg) -/proc/msg_admin_attack(var/text, var/loglevel) +/proc/msg_admin_attack(text, loglevel) if(!GLOB.nologevent) var/rendered = "ATTACK: [text]" for(var/client/C in GLOB.admins) @@ -34,7 +34,7 @@ GLOBAL_VAR_INIT(nologevent, 0) to_chat(C, msg) if(important) if(C.prefs?.sound & SOUND_ADMINHELP) - SEND_SOUND(C, 'sound/effects/adminhelp.ogg') + SEND_SOUND(C, sound('sound/effects/adminhelp.ogg')) window_flash(C) /** @@ -51,10 +51,10 @@ GLOBAL_VAR_INIT(nologevent, 0) to_chat(C, msg) if(important) if(C.prefs?.sound & SOUND_MENTORHELP) - SEND_SOUND(C, 'sound/effects/adminhelp.ogg') + SEND_SOUND(C, sound('sound/effects/adminhelp.ogg')) window_flash(C) -/proc/admin_ban_mobsearch(var/mob/M, var/ckey_to_find, var/mob/admin_to_notify) +/proc/admin_ban_mobsearch(mob/M, ckey_to_find, mob/admin_to_notify) if(!M || !M.ckey) if(ckey_to_find) for(var/mob/O in GLOB.mob_list) @@ -70,7 +70,7 @@ GLOBAL_VAR_INIT(nologevent, 0) ///////////////////////////////////////////////////////////////////////////////////////////////Panels -/datum/admins/proc/show_player_panel(var/mob/M in GLOB.mob_list) +/datum/admins/proc/show_player_panel(mob/M in GLOB.mob_list) set category = null set name = "Show Player Panel" set desc="Edit player (respawn, ban, heal, etc)" @@ -299,7 +299,7 @@ GLOBAL_VAR_INIT(nologevent, 0) show_note() -/datum/admins/proc/show_player_notes(var/key as text) +/datum/admins/proc/show_player_notes(key as text) set category = "Admin" set name = "Show Player Notes" @@ -662,7 +662,7 @@ GLOBAL_VAR_INIT(nologevent, 0) return 0 -/datum/admins/proc/spawn_atom(var/object as text) +/datum/admins/proc/spawn_atom(object as text) set category = "Debug" set desc = "(atom path) Spawn an atom" set name = "Spawn" @@ -698,7 +698,7 @@ GLOBAL_VAR_INIT(nologevent, 0) log_admin("[key_name(usr)] spawned [chosen] at ([usr.x],[usr.y],[usr.z])") SSblackbox.record_feedback("tally", "admin_verb", 1, "Spawn Atom") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! -/datum/admins/proc/show_traitor_panel(var/mob/M in GLOB.mob_list) +/datum/admins/proc/show_traitor_panel(mob/M in GLOB.mob_list) set category = "Admin" set desc = "Edit mobs's memory and role" set name = "Show Traitor Panel" @@ -801,7 +801,7 @@ GLOBAL_VAR_INIT(gamma_ship_location, 1) // 0 = station , 1 = space GLOB.gamma_ship_location = 1 return -/proc/formatJumpTo(var/location,var/where="") +/proc/formatJumpTo(location, where="") var/turf/loc if(istype(location,/turf/)) loc = location @@ -811,7 +811,7 @@ GLOBAL_VAR_INIT(gamma_ship_location, 1) // 0 = station , 1 = space where=formatLocation(loc) return "[where]" -/proc/formatLocation(var/location) +/proc/formatLocation(location) var/turf/loc if(istype(location,/turf/)) loc = location @@ -820,7 +820,7 @@ GLOBAL_VAR_INIT(gamma_ship_location, 1) // 0 = station , 1 = space var/area/A = get_area(location) return "[A.name] - [loc.x],[loc.y],[loc.z]" -/proc/formatPlayerPanel(var/mob/U,var/text="PP") +/proc/formatPlayerPanel(mob/U, text="PP") return "[ADMIN_PP(U,"[text]")]" //Kicks all the clients currently in the lobby. The second parameter (kick_only_afk) determins if an is_afk() check is ran, or if all clients are kicked @@ -840,7 +840,7 @@ GLOBAL_VAR_INIT(gamma_ship_location, 1) // 0 = station , 1 = space //returns 1 to let the dragdrop code know we are trapping this event //returns 0 if we don't plan to trap the event -/datum/admins/proc/cmd_ghost_drag(var/mob/dead/observer/frommob, var/tothing) +/datum/admins/proc/cmd_ghost_drag(mob/dead/observer/frommob, tothing) if(!istype(frommob)) return //extra sanity check to make sure only observers are shoved into things diff --git a/code/modules/admin/admin_investigate.dm b/code/modules/admin/admin_investigate.dm index 527540e9490..24ea8f95886 100644 --- a/code/modules/admin/admin_investigate.dm +++ b/code/modules/admin/admin_investigate.dm @@ -8,14 +8,14 @@ #define INVESTIGATE_DIR "data/investigate/" //SYSTEM -/proc/investigate_subject2file(var/subject) +/proc/investigate_subject2file(subject) return file("[INVESTIGATE_DIR][subject].html") /proc/investigate_reset() if(fdel(INVESTIGATE_DIR)) return 1 return 0 -/atom/proc/investigate_log(var/message, var/subject) +/atom/proc/investigate_log(message, subject) if(!message) return var/F = investigate_subject2file(subject) if(!F) return diff --git a/code/modules/admin/admin_ranks.dm b/code/modules/admin/admin_ranks.dm index f913d9d98ef..72376027dc5 100644 --- a/code/modules/admin/admin_ranks.dm +++ b/code/modules/admin/admin_ranks.dm @@ -117,7 +117,7 @@ GLOBAL_PROTECT(admin_ranks) // this shit is being protected for obvious reasons load_admins() return - var/datum/db_query/query = SSdbcore.NewQuery("SELECT ckey, rank, level, flags FROM [format_table_name("admin")]") + var/datum/db_query/query = SSdbcore.NewQuery("SELECT ckey, admin_rank, level, flags FROM [format_table_name("admin")]") if(!query.warn_execute(async=run_async)) qdel(query) return diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index e4bd51f1f5b..f63473216a9 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -24,12 +24,9 @@ GLOBAL_LIST_INIT(admin_verbs_admin, list( /client/proc/cmd_admin_check_contents, /*displays the contents of an instance*/ /client/proc/cmd_admin_open_logging_view, /client/proc/getserverlogs, /*allows us to fetch server logs (diary) for other days*/ - /client/proc/jumptocoord, /*we ghost and jump to a coordinate*/ /client/proc/Getmob, /*teleports a mob to our location*/ /client/proc/Getkey, /*teleports a mob with a certain ckey to our location*/ - /client/proc/Jump, - /client/proc/jumptokey, /*allows us to jump to the location of a mob with a certain ckey*/ - /client/proc/jumptomob, /*allows us to jump to a specific mob*/ + /client/proc/jump_to, /*Opens a menu for jumping to an Area, Mob, Key or Coordinate*/ /client/proc/jumptoturf, /*allows us to jump to a specific turf*/ /client/proc/admin_call_shuttle, /*allows us to call the emergency shuttle*/ /client/proc/admin_cancel_shuttle, /*allows us to cancel the emergency shuttle, sending it back to centcomm*/ @@ -606,7 +603,7 @@ GLOBAL_LIST_INIT(admin_verbs_ticket, list( log_admin("[key_name(usr)] gave [key_name(T)] the disease [D].") message_admins("[key_name_admin(usr)] gave [key_name(T)] the disease [D].") -/client/proc/make_sound(var/obj/O in view()) // -- TLE +/client/proc/make_sound(obj/O in view()) // -- TLE set category = "Event" set name = "Make Sound" set desc = "Display a message to everyone who can hear the target" @@ -635,7 +632,7 @@ GLOBAL_LIST_INIT(admin_verbs_ticket, list( togglebuildmode(src.mob) SSblackbox.record_feedback("tally", "admin_verb", 1, "Toggle Build Mode") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! -/client/proc/object_talk(var/msg as text) // -- TLE +/client/proc/object_talk(msg as text) // -- TLE set category = "Event" set name = "oSay" set desc = "Display a message to everyone who can hear the target" @@ -696,7 +693,7 @@ GLOBAL_LIST_INIT(admin_verbs_ticket, list( return var/datum/db_query/rank_read = SSdbcore.NewQuery( - "SELECT rank FROM [format_table_name("admin")] WHERE ckey=:ckey", + "SELECT admin_rank FROM [format_table_name("admin")] WHERE ckey=:ckey", list("ckey" = ckey) ) @@ -722,7 +719,7 @@ GLOBAL_LIST_INIT(admin_verbs_ticket, list( return var/datum/db_query/admin_read = SSdbcore.NewQuery( - "SELECT ckey, rank, flags FROM [format_table_name("admin")] WHERE ckey=:ckey", + "SELECT ckey, admin_rank, flags FROM [format_table_name("admin")] WHERE ckey=:ckey", list("ckey" = ckey) ) @@ -987,7 +984,7 @@ GLOBAL_LIST_INIT(admin_verbs_ticket, list( to_chat(T, "Man up and deal with it.") to_chat(T, "Move on.") - T << 'sound/voice/manup1.ogg' + SEND_SOUND(T, sound('sound/voice/manup1.ogg')) log_admin("[key_name(usr)] told [key_name(T)] to man up and deal with it.") message_admins("[key_name_admin(usr)] told [key_name(T)] to man up and deal with it.") @@ -1003,9 +1000,10 @@ GLOBAL_LIST_INIT(admin_verbs_ticket, list( var/confirm = alert("Are you sure you want to send the global message?", "Confirm Man Up Global", "Yes", "No") if(confirm == "Yes") - for(var/mob/T as mob in GLOB.mob_list) - to_chat(T, "
      Man up.
      Deal with it.

      Move on.

      ") - T << 'sound/voice/manup1.ogg' + var/manned_up_sound = sound('sound/voice/manup1.ogg') + for(var/sissy in GLOB.player_list) + to_chat(sissy, "
      Man up.
      Deal with it.

      Move on.

      ") + SEND_SOUND(sissy, manned_up_sound) log_admin("[key_name(usr)] told everyone to man up and deal with it.") message_admins("[key_name_admin(usr)] told everyone to man up and deal with it.") diff --git a/code/modules/admin/banjob.dm b/code/modules/admin/banjob.dm index 7ff26de5992..51b1299079b 100644 --- a/code/modules/admin/banjob.dm +++ b/code/modules/admin/banjob.dm @@ -118,7 +118,7 @@ GLOBAL_DATUM_INIT(jobban_regex, /regex, regex("(\[\\S]+) - (\[^#]+\[^# ])(?: ## /proc/jobban_unban_client(ckey, rank) jobban_remove("[ckey] - [rank]") -/proc/ban_unban_log_save(var/formatted_log) +/proc/ban_unban_log_save(formatted_log) text2file(formatted_log,"data/ban_unban_log.txt") diff --git a/code/modules/admin/create_mob.dm b/code/modules/admin/create_mob.dm index 616d5aa9ee8..6740a3d59b7 100644 --- a/code/modules/admin/create_mob.dm +++ b/code/modules/admin/create_mob.dm @@ -1,5 +1,5 @@ GLOBAL_VAR(create_mob_html) -/datum/admins/proc/create_mob(var/mob/user) +/datum/admins/proc/create_mob(mob/user) if(!GLOB.create_mob_html) var/mobjs = null mobjs = jointext(typesof(/mob), ";") diff --git a/code/modules/admin/create_object.dm b/code/modules/admin/create_object.dm index c311be0d017..99706d19950 100644 --- a/code/modules/admin/create_object.dm +++ b/code/modules/admin/create_object.dm @@ -1,7 +1,7 @@ GLOBAL_VAR(create_object_html) GLOBAL_LIST_INIT(create_object_forms, list(/obj, /obj/structure, /obj/machinery, /obj/effect, /obj/item, /obj/mecha, /obj/item/clothing, /obj/item/stack, /obj/item/reagent_containers, /obj/item/gun)) -/datum/admins/proc/create_object(var/mob/user) +/datum/admins/proc/create_object(mob/user) if(!GLOB.create_object_html) var/objectjs = null objectjs = jointext(typesof(/obj), ";") @@ -10,7 +10,7 @@ GLOBAL_LIST_INIT(create_object_forms, list(/obj, /obj/structure, /obj/machinery, user << browse(replacetext(GLOB.create_object_html, "/* ref src */", UID()), "window=create_object;size=425x475") -/datum/admins/proc/quick_create_object(var/mob/user) +/datum/admins/proc/quick_create_object(mob/user) var/path = input("Select the path of the object you wish to create.", "Path", /obj) in GLOB.create_object_forms var/html_form = GLOB.create_object_forms[path] diff --git a/code/modules/admin/create_turf.dm b/code/modules/admin/create_turf.dm index c65c7b22b1a..9ef3b465194 100644 --- a/code/modules/admin/create_turf.dm +++ b/code/modules/admin/create_turf.dm @@ -1,5 +1,5 @@ GLOBAL_VAR(create_turf_html) -/datum/admins/proc/create_turf(var/mob/user) +/datum/admins/proc/create_turf(mob/user) if(!GLOB.create_turf_html) var/turfjs = null turfjs = jointext(typesof(/turf), ";") diff --git a/code/modules/admin/db_ban/functions.dm b/code/modules/admin/db_ban/functions.dm index 105c6bd6778..24c2c558e2e 100644 --- a/code/modules/admin/db_ban/functions.dm +++ b/code/modules/admin/db_ban/functions.dm @@ -1,6 +1,6 @@ #define MAX_ADMIN_BANS_PER_ADMIN 1 -/datum/admins/proc/DB_ban_record(var/bantype, var/mob/banned_mob, var/duration = -1, var/reason, var/job = "", var/rounds = 0, var/banckey = null, var/banip = null, var/bancid = null) +/datum/admins/proc/DB_ban_record(bantype, mob/banned_mob, duration = -1, reason, job = "", rounds = 0, banckey = null, banip = null, bancid = null) if(!check_rights(R_BAN)) return @@ -186,7 +186,7 @@ else flag_account_for_forum_sync(ckey) -/datum/admins/proc/DB_ban_unban(var/ckey, var/bantype, var/job = "") +/datum/admins/proc/DB_ban_unban(ckey, bantype, job = "") if(!check_rights(R_BAN)) return @@ -275,7 +275,7 @@ else flag_account_for_forum_sync(ckey) -/datum/admins/proc/DB_ban_edit(var/banid = null, var/param = null) +/datum/admins/proc/DB_ban_edit(banid = null, param = null) if(!check_rights(R_BAN)) return @@ -361,7 +361,7 @@ to_chat(usr, "Cancelled") return -/datum/admins/proc/DB_ban_unban_by_id(var/id) +/datum/admins/proc/DB_ban_unban_by_id(id) if(!check_rights(R_BAN)) return @@ -428,7 +428,7 @@ holder.DB_ban_panel() -/datum/admins/proc/DB_ban_panel(var/playerckey = null, var/adminckey = null, var/playerip = null, var/playercid = null, var/dbbantype = null, var/match = null) +/datum/admins/proc/DB_ban_panel(playerckey = null, adminckey = null, playerip = null, playercid = null, dbbantype = null, match = null) if(!usr.client) return diff --git a/code/modules/admin/holder2.dm b/code/modules/admin/holder2.dm index 470293bfe76..2aacdb50b54 100644 --- a/code/modules/admin/holder2.dm +++ b/code/modules/admin/holder2.dm @@ -78,7 +78,7 @@ proc/admin_proc() NOTE: it checks usr! not src! So if you're checking somebody's rank in a proc which they did not call you will have to do something like if(client.holder.rights & R_ADMIN) yourself. */ -/proc/check_rights(rights_required, show_msg=1, var/mob/user = usr) +/proc/check_rights(rights_required, show_msg=1, mob/user = usr) if(user && user.client) if(rights_required) if(user.client.holder) diff --git a/code/modules/admin/ipintel.dm b/code/modules/admin/ipintel.dm index 70d02303ed7..b0d411a2727 100644 --- a/code/modules/admin/ipintel.dm +++ b/code/modules/admin/ipintel.dm @@ -83,7 +83,7 @@ qdel(query_add_ip_intel) -/proc/ip_intel_query(ip, var/retryed=0) +/proc/ip_intel_query(ip, retryed=0) . = -1 //default if(!ip) return diff --git a/code/modules/admin/permissionverbs/permissionedit.dm b/code/modules/admin/permissionverbs/permissionedit.dm index 748dee2cae3..0abbb877350 100644 --- a/code/modules/admin/permissionverbs/permissionedit.dm +++ b/code/modules/admin/permissionverbs/permissionedit.dm @@ -51,7 +51,7 @@ usr << browse(output,"window=editrights;size=600x500") -/datum/admins/proc/log_admin_rank_modification(var/adm_ckey, var/new_rank) +/datum/admins/proc/log_admin_rank_modification(adm_ckey, new_rank) if(config.admin_legacy_system) return if(!usr.client) @@ -90,7 +90,7 @@ qdel(select_query) flag_account_for_forum_sync(adm_ckey) if(new_admin) - var/datum/db_query/insert_query = SSdbcore.NewQuery("INSERT INTO [format_table_name("admin")] (`id`, `ckey`, `rank`, `level`, `flags`) VALUES (null, :adm_ckey, :new_rank, -1, 0)", list( + var/datum/db_query/insert_query = SSdbcore.NewQuery("INSERT INTO [format_table_name("admin")] (`id`, `ckey`, `admin_rank`, `level`, `flags`) VALUES (null, :adm_ckey, :new_rank, -1, 0)", list( "adm_ckey" = adm_ckey, "new_rank" = new_rank )) @@ -113,7 +113,7 @@ to_chat(usr, "New admin added.") else if(!isnull(admin_id) && isnum(admin_id)) - var/datum/db_query/insert_query = SSdbcore.NewQuery("UPDATE [format_table_name("admin")] SET rank=:new_rank WHERE id=:admin_id", list( + var/datum/db_query/insert_query = SSdbcore.NewQuery("UPDATE [format_table_name("admin")] SET admin_rank=:new_rank WHERE id=:admin_id", list( "new_rank" = new_rank, "admin_id" = admin_id, )) @@ -134,7 +134,7 @@ qdel(log_query) to_chat(usr, "Admin rank changed.") -/datum/admins/proc/log_admin_permission_modification(var/adm_ckey, var/new_permission) +/datum/admins/proc/log_admin_permission_modification(adm_ckey, new_permission) if(IsAdminAdvancedProcCall()) to_chat(usr, "Admin edit blocked: Advanced ProcCall detected.") message_admins("[key_name(usr)] attempted to edit admin ranks via advanced proc-call") diff --git a/code/modules/admin/player_panel.dm b/code/modules/admin/player_panel.dm index 2986035e15a..248e1e262c2 100644 --- a/code/modules/admin/player_panel.dm +++ b/code/modules/admin/player_panel.dm @@ -494,9 +494,6 @@ if(SSticker.mode.vampire_enthralled.len) dat += check_role_table("Vampire Thralls", SSticker.mode.vampire_enthralled) - if(SSticker.mode.devils.len) - dat += check_role_table("Devils", SSticker.mode.devils) - if(SSticker.mode.xenos.len) dat += check_role_table("Xenos", SSticker.mode.xenos) diff --git a/code/modules/admin/stickyban.dm b/code/modules/admin/stickyban.dm index 61759f2e36d..0c2af216d2e 100644 --- a/code/modules/admin/stickyban.dm +++ b/code/modules/admin/stickyban.dm @@ -167,7 +167,7 @@ "} usr << browse(html,"window=stickybans;size=700x400") -/proc/get_stickyban_from_ckey(var/ckey) +/proc/get_stickyban_from_ckey(ckey) if(!ckey) return null ckey = ckey(ckey) @@ -177,7 +177,7 @@ . = stickyban2list(world.GetConfig("ban",key)) break -/proc/stickyban2list(var/ban) +/proc/stickyban2list(ban) if(!ban) return null . = params2list(ban) @@ -186,7 +186,7 @@ .["IP"] = splittext(.["IP"], ",") .["computer_id"] = splittext(.["computer_id"], ",") -/proc/list2stickyban(var/list/ban) +/proc/list2stickyban(list/ban) if(!ban || !islist(ban)) return null . = ban.Copy() diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index 8bc4e3f2657..26fa05cebfb 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -17,7 +17,7 @@ if(!isclient(C)) return - C << 'sound/effects/adminhelp.ogg' + SEND_SOUND(C, sound('sound/effects/adminhelp.ogg')) to_chat(C, "- AdminHelp Rejected! -") to_chat(C, "Your admin help was rejected.") @@ -2326,7 +2326,7 @@ message_admins("[key_name_admin(usr)] sent [H.job] [H] to cryo.") if(href_list["cryoafk"]) // Warn them if they are send to storage and are AFK to_chat(H, "The admins have moved you to cryo storage for being AFK. Please eject yourself (right click, eject) out of the cryostorage if you want to avoid being despawned.") - SEND_SOUND(H, 'sound/effects/adminhelp.ogg') + SEND_SOUND(H, sound('sound/effects/adminhelp.ogg')) if(H.client) window_flash(H.client) else if(href_list["FaxReplyTemplate"]) @@ -2930,20 +2930,32 @@ GLOB.event_announcement.Announce("Feedback surge detected in mass-distributions systems. Artifical gravity has been disabled whilst the system reinitializes. Further failures may result in a gravitational collapse and formation of blackholes. Have a nice day.") if("power") - SSblackbox.record_feedback("tally", "admin_secrets_fun_used", 1, "Power All APCs") - log_admin("[key_name(usr)] made all areas powered", 1) - message_admins("[key_name_admin(usr)] made all areas powered", 1) - power_restore() + switch(alert("What Would You Like to Do?", "Make All Areas Powered", "Power all APCs", "Repair all APCs", "Repair and Power APCs")) //Alert notification in this code for standarization purposes + if("Power all APCs") + power_restore(TRUE, 0) + SSblackbox.record_feedback("tally", "admin_secrets_fun_used", 1, "Power all APCs") + log_and_message_admins("[key_name_admin(usr)] powered all APCs", 1) + if("Repair all APCs") + power_restore(TRUE, 1) + SSblackbox.record_feedback("tally", "admin_secrets_fun_used", 1, "Repair all APCs") + log_and_message_admins("[key_name_admin(usr)] repaired all APCs", 1) + if("Repair and Power APCs") + power_restore(TRUE, 2) + SSblackbox.record_feedback("tally", "admin_secrets_fun_used", 1, "Repair and Power all APCs") + log_and_message_admins("[key_name_admin(usr)] repaired and powered all APCs", 1) if("unpower") - SSblackbox.record_feedback("tally", "admin_secrets_fun_used", 1, "Depower All APCs") - log_admin("[key_name(usr)] made all areas unpowered", 1) - message_admins("[key_name_admin(usr)] made all areas unpowered", 1) - power_failure() + if(alert("What Would You Like to Do?", "Make All Areas Unpowered", "Depower all APCs", "Short out APCs") == "Depower all APCs") + depower_apcs() + SSblackbox.record_feedback("tally", "admin_secrets_fun_used", 1, "Depower all APCs") + log_and_message_admins("[key_name_admin(usr)] made all areas unpowered", 1) + else + power_failure() + SSblackbox.record_feedback("tally", "admin_secrets_fun_used", 1, "Short out APCs") + log_and_message_admins("[key_name_admin(usr)] has shorted APCs", 1) if("quickpower") - SSblackbox.record_feedback("tally", "admin_secrets_fun_used", 1, "Power All SMESs") - log_admin("[key_name(usr)] made all SMESs powered", 1) - message_admins("[key_name_admin(usr)] made all SMESs powered", 1) power_restore_quick() + SSblackbox.record_feedback("tally", "admin_secrets_fun_used", 1, "Power All SMESs") + log_and_message_admins("[key_name(usr)] made all SMESs powered", 1) if("prisonwarp") if(!SSticker) alert("The game hasn't started yet!", null, null, null, null, null) @@ -2967,9 +2979,6 @@ if(!security) //strip their stuff before they teleport into a cell :downs: for(var/obj/item/W in H) - if(istype(W, /obj/item/organ/external)) - continue - //don't strip organs H.unEquip(W) if(H.client) H.client.screen -= W @@ -3548,7 +3557,7 @@ popup.set_content(dat) popup.open(FALSE) -/client/proc/create_eventmob_for(var/mob/living/carbon/human/H, var/killthem = 0) +/client/proc/create_eventmob_for(mob/living/carbon/human/H, killthem = 0) if(!check_rights(R_EVENT)) return var/admin_outfits = subtypesof(/datum/outfit/admin) @@ -3608,7 +3617,7 @@ tatorhud.join_hud(hunter_mob) set_antag_hud(hunter_mob, "hudsyndicate") -/proc/admin_jump_link(var/atom/target) +/proc/admin_jump_link(atom/target) if(!target) return // The way admin jump links handle their src is weirdly inconsistent... diff --git a/code/modules/admin/verbs/SDQL2/SDQL_2.dm b/code/modules/admin/verbs/SDQL2/SDQL_2.dm index c4eabef3eae..ad8b1ff90d0 100644 --- a/code/modules/admin/verbs/SDQL2/SDQL_2.dm +++ b/code/modules/admin/verbs/SDQL2/SDQL_2.dm @@ -437,7 +437,7 @@ return v -/proc/SDQL_function(var/datum/object, var/procname, var/list/arguments, source) +/proc/SDQL_function(datum/object, procname, list/arguments, source) var/list/new_args = list() for(var/arg in arguments) new_args[++new_args.len] = SDQL_expression(source, arg) diff --git a/code/modules/admin/verbs/SDQL2/SDQL_2_parser.dm b/code/modules/admin/verbs/SDQL2/SDQL_2_parser.dm index 50c852af03b..98334649315 100644 --- a/code/modules/admin/verbs/SDQL2/SDQL_2_parser.dm +++ b/code/modules/admin/verbs/SDQL2/SDQL_2_parser.dm @@ -311,7 +311,7 @@ //assignment: '=' expression -/datum/SDQL_parser/proc/assignment(var/i, var/list/node, var/list/assignment_list = list()) +/datum/SDQL_parser/proc/assignment(i, list/node, list/assignment_list = list()) assignment_list += token(i) if(token(i + 1) == ".") @@ -415,7 +415,7 @@ return i + 1 //array: '{' expression, expression, ... '}' -/datum/SDQL_parser/proc/array(var/i, var/list/node) +/datum/SDQL_parser/proc/array(i, list/node) // Arrays get turned into this: list("{", list(exp_1a = exp_1b, ...), ...), "{" is to mark the next node as an array. if(copytext(token(i), 1, 2) != "{") parse_error("Expected an array but found '[token(i)]'") diff --git a/code/modules/admin/verbs/adminjump.dm b/code/modules/admin/verbs/adminjump.dm index 00db28c83e5..ed2aff985f1 100644 --- a/code/modules/admin/verbs/adminjump.dm +++ b/code/modules/admin/verbs/adminjump.dm @@ -1,23 +1,56 @@ -/client/proc/Jump(area/A in return_sorted_areas()) - set name = "Jump to Area" - set desc = "Area to jump to" +/client/proc/jump_to() + set name = "Jump to..." + set desc = "Area, Mob, Key or Coordinate" set category = "Admin" + var/list/choices = list("Area", "Mob", "Key", "Coordinates") if(!check_rights(R_ADMIN)) return - if(!A) + var/chosen = input(src, null, "Jump to...") as null|anything in choices + if(!chosen) + return + + var/jumping // Thing to jump to + switch(chosen) + if("Area") + jumping = input(src, "Area to jump to", "Jump to Area") as null|anything in return_sorted_areas() + if(jumping) + return jumptoarea(jumping) + if("Mob") + jumping = input(src, "Mob to jump to", "Jump to Mob") as null|anything in GLOB.mob_list + if(jumping) + return jumptomob(jumping) + if("Key") + jumping = input(src, "Key to jump to", "Jump to Key") as null|anything in sortKey(GLOB.clients) + if(jumping) + return jumptokey(jumping) + if("Coordinates") + var/x = input(src, "X Coordinate", "Jump to Coordinates") as null|num + if(!x) + return + var/y = input(src, "Y Coordinate", "Jump to Coordinates") as null|num + if(!y) + return + var/z = input(src, "Z Coordinate", "Jump to Coordinates") as null|num + if(!z) + return + return jumptocoord(x, y, z) + + +/client/proc/jumptoarea(area/A) + if(!A || !check_rights(R_ADMIN)) return var/list/turfs = list() for(var/turf/T in A) if(T.density) continue - if(locate(/obj/structure/grille, T)) // Quick check to not spawn in windows + if(locate(/obj/structure/grille) in T) // Quick check to not spawn in windows continue - turfs.Add(T) + turfs += T - var/turf/T = pick_n_take(turfs) + var/turf/T = safepick(turfs) if(!T) to_chat(src, "Nowhere to jump to!") return @@ -32,7 +65,7 @@ message_admins("[key_name_admin(usr)] jumped to [A]") SSblackbox.record_feedback("tally", "admin_verb", 1, "Jump To Area") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! -/client/proc/jumptoturf(var/turf/T in world) +/client/proc/jumptoturf(turf/T in world) set name = "Jump to Turf" set category = null @@ -49,11 +82,9 @@ SSblackbox.record_feedback("tally", "admin_verb", 1, "Jump To Turf") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! return -/client/proc/jumptomob(var/mob/M in GLOB.mob_list) - set category = "Admin" +/client/proc/jumptomob(mob/M) set name = "Jump to Mob" - - if(!check_rights(R_ADMIN)) + if(!M || !check_rights(R_ADMIN)) return log_admin("[key_name(usr)] jumped to [key_name(M)]") @@ -72,9 +103,6 @@ to_chat(A, "This mob is not located in the game world.") /client/proc/jumptocoord(tx as num, ty as num, tz as num) - set category = "Admin" - set name = "Jump to Coordinate" - if(!isobserver(usr) && !check_rights(R_ADMIN)) // Only admins can jump without being a ghost return @@ -91,21 +119,10 @@ if(!isobserver(usr)) message_admins("[key_name_admin(usr)] jumped to coordinates [tx], [ty], [tz]") -/client/proc/jumptokey() - set category = "Admin" - set name = "Jump to Key" - - if(!check_rights(R_ADMIN)) +/client/proc/jumptokey(client/C) + if(!C?.mob || !check_rights(R_ADMIN)) return - - var/list/keys = list() - for(var/mob/M in GLOB.player_list) - keys += M.client - var/selection = input("Please, select a player!", "Admin Jumping", null, null) as null|anything in sortKey(keys) - if(!selection) - to_chat(src, "No keys found.") - return - var/mob/M = selection:mob + var/mob/M = C.mob log_admin("[key_name(usr)] jumped to [key_name(M)]") if(!isobserver(usr)) message_admins("[key_name_admin(usr)] jumped to [key_name_admin(M)]", 1) @@ -116,7 +133,7 @@ SSblackbox.record_feedback("tally", "admin_verb", 1, "Jump To Key") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! -/client/proc/Getmob(var/mob/M in GLOB.mob_list) +/client/proc/Getmob(mob/M in GLOB.mob_list) set category = null set name = "Get Mob" set desc = "Mob to teleport" diff --git a/code/modules/admin/verbs/adminpm.dm b/code/modules/admin/verbs/adminpm.dm index 1e04cb7bd62..87009e78b52 100644 --- a/code/modules/admin/verbs/adminpm.dm +++ b/code/modules/admin/verbs/adminpm.dm @@ -169,7 +169,7 @@ //play the recieving admin the adminhelp sound (if they have them enabled) //non-admins always hear the sound, as they cannot toggle it if((!C.holder) || (C.prefs.sound & SOUND_ADMINHELP)) - C << 'sound/effects/adminhelp.ogg' + SEND_SOUND(C, sound('sound/effects/adminhelp.ogg')) log_admin("PM: [key_name(src)]->[key_name(C)]: [msg]") //we don't use message_admins here because the sender/receiver might get it too diff --git a/code/modules/admin/verbs/adminsay.dm b/code/modules/admin/verbs/adminsay.dm index 78f3caa7e53..be4a4763bff 100644 --- a/code/modules/admin/verbs/adminsay.dm +++ b/code/modules/admin/verbs/adminsay.dm @@ -16,7 +16,7 @@ if(R_ADMIN & C.holder.rights) // Lets see if this admin was pinged in the asay message if(findtext(msg, "@[C.ckey]") || findtext(msg, "@[C.key]")) // Check ckey and key, so you can type @AffectedArc07 or @affectedarc07 - SEND_SOUND(C, 'sound/misc/ping.ogg') + SEND_SOUND(C, sound('sound/misc/ping.ogg')) msg = replacetext(msg, "@[C.ckey]", "@[C.ckey]") msg = replacetext(msg, "@[C.key]", "@[C.key]") // Same applies here. key and ckey. diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm index c27f4502af2..b09941d0f06 100644 --- a/code/modules/admin/verbs/debug.dm +++ b/code/modules/admin/verbs/debug.dm @@ -171,7 +171,7 @@ GLOBAL_PROTECT(AdminProcCallSpamPrevention) return usr && usr.client && GLOB.AdminProcCaller == usr.client.ckey #endif -/client/proc/callproc_datum(var/A as null|area|mob|obj|turf) +/client/proc/callproc_datum(A as null|area|mob|obj|turf) set category = null set name = "Atom ProcCall" @@ -284,7 +284,7 @@ GLOBAL_PROTECT(AdminProcCallSpamPrevention) usr.show_message(t, 1) SSblackbox.record_feedback("tally", "admin_verb", 1, "Air Status (Location)") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! -/client/proc/cmd_admin_robotize(var/mob/M in GLOB.mob_list) +/client/proc/cmd_admin_robotize(mob/M in GLOB.mob_list) set category = "Event" set name = "Make Robot" @@ -302,7 +302,7 @@ GLOBAL_PROTECT(AdminProcCallSpamPrevention) else alert("Invalid mob") -/client/proc/cmd_admin_animalize(var/mob/M in GLOB.mob_list) +/client/proc/cmd_admin_animalize(mob/M in GLOB.mob_list) set category = "Event" set name = "Make Simple Animal" @@ -326,7 +326,7 @@ GLOBAL_PROTECT(AdminProcCallSpamPrevention) M.Animalize() -/client/proc/makepAI(var/turf/T in GLOB.mob_list) +/client/proc/makepAI(turf/T in GLOB.mob_list) set category = "Event" set name = "Make pAI" set desc = "Specify a location to spawn a pAI device, then specify a key to play that pAI" @@ -362,7 +362,7 @@ GLOBAL_PROTECT(AdminProcCallSpamPrevention) 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! -/client/proc/cmd_admin_alienize(var/mob/M in GLOB.mob_list) +/client/proc/cmd_admin_alienize(mob/M in GLOB.mob_list) set category = "Event" set name = "Make Alien" @@ -382,7 +382,7 @@ GLOBAL_PROTECT(AdminProcCallSpamPrevention) else alert("Invalid mob") -/client/proc/cmd_admin_slimeize(var/mob/M in GLOB.mob_list) +/client/proc/cmd_admin_slimeize(mob/M in GLOB.mob_list) set category = "Event" set name = "Make slime" @@ -402,7 +402,7 @@ GLOBAL_PROTECT(AdminProcCallSpamPrevention) else alert("Invalid mob") -/client/proc/cmd_admin_super(var/mob/M in GLOB.mob_list) +/client/proc/cmd_admin_super(mob/M in GLOB.mob_list) set category = "Event" set name = "Make Superhero" @@ -455,7 +455,7 @@ GLOBAL_PROTECT(AdminProcCallSpamPrevention) message_admins("[key_name_admin(src)] has remade the powernets. makepowernets() called.", 0) SSblackbox.record_feedback("tally", "admin_verb", 1, "Make Powernets") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! -/client/proc/cmd_admin_grantfullaccess(var/mob/M in GLOB.mob_list) +/client/proc/cmd_admin_grantfullaccess(mob/M in GLOB.mob_list) set category = "Admin" set name = "Grant Full Access" @@ -489,7 +489,7 @@ GLOBAL_PROTECT(AdminProcCallSpamPrevention) log_admin("[key_name(src)] has granted [M.key] full access.") message_admins("[key_name_admin(usr)] has granted [M.key] full access.", 1) -/client/proc/cmd_assume_direct_control(var/mob/M in GLOB.mob_list) +/client/proc/cmd_assume_direct_control(mob/M in GLOB.mob_list) set category = "Admin" set name = "Assume direct control" set desc = "Direct intervention" @@ -845,7 +845,7 @@ GLOBAL_PROTECT(AdminProcCallSpamPrevention) usr << browse(dat, "window=simpledellog") -/client/proc/cmd_admin_toggle_block(var/mob/M,var/block) +/client/proc/cmd_admin_toggle_block(mob/M, block) if(!check_rights(R_SPAWN)) return diff --git a/code/modules/admin/verbs/massmodvar.dm b/code/modules/admin/verbs/massmodvar.dm index cc9197f24a5..542d5a5b5fe 100644 --- a/code/modules/admin/verbs/massmodvar.dm +++ b/code/modules/admin/verbs/massmodvar.dm @@ -1,4 +1,4 @@ -/client/proc/cmd_mass_modify_object_variables(atom/A, var/var_name) +/client/proc/cmd_mass_modify_object_variables(atom/A, var_name) set category = "Debug" set name = "Mass Edit Variables" set desc="(target) Edit all instances of a target item's variables" @@ -205,7 +205,7 @@ 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)") -/proc/get_all_of_type(var/T, subtypes = TRUE) +/proc/get_all_of_type(T, subtypes = TRUE) var/list/typecache = list() typecache[T] = 1 if(subtypes) diff --git a/code/modules/admin/verbs/modifyvariables.dm b/code/modules/admin/verbs/modifyvariables.dm index 079446b0994..975071350fb 100644 --- a/code/modules/admin/verbs/modifyvariables.dm +++ b/code/modules/admin/verbs/modifyvariables.dm @@ -2,7 +2,7 @@ GLOBAL_LIST_INIT(VVlocked, list("vars", "var_edited", "client", "firemut", "ishu GLOBAL_LIST_INIT(VVicon_edit_lock, list("icon", "icon_state", "overlays", "underlays", "resize")) // R_EVENT | R_DEBUG GLOBAL_LIST_INIT(VVckey_edit, list("key", "ckey")) // R_EVENT | R_DEBUG GLOBAL_LIST_INIT(VVpixelmovement, list("step_x", "step_y", "step_size", "bound_height", "bound_width", "bound_x", "bound_y")) // R_DEBUG + warning -/client/proc/vv_get_class(var/var_value) +/client/proc/vv_get_class(var_value) if(isnull(var_value)) . = VV_NULL @@ -268,7 +268,7 @@ GLOBAL_LIST_INIT(VVpixelmovement, list("step_x", "step_y", "step_size", "bound_h //FALSE = no subtypes, strict exact type pathing (or the type doesn't have subtypes) //TRUE = Yes subtypes //NULL = User cancelled at the prompt or invalid type given -/client/proc/vv_subtype_prompt(var/type) +/client/proc/vv_subtype_prompt(type) if(!ispath(type)) return var/list/subtypes = subtypesof(type) diff --git a/code/modules/admin/verbs/one_click_antag.dm b/code/modules/admin/verbs/one_click_antag.dm index 58677605714..66bc9aae6cc 100644 --- a/code/modules/admin/verbs/one_click_antag.dm +++ b/code/modules/admin/verbs/one_click_antag.dm @@ -25,7 +25,7 @@ usr << browse(dat, "window=oneclickantag;size=400x400") return -/datum/admins/proc/CandCheck(var/role = null, var/mob/living/carbon/human/M, var/datum/game_mode/temp = null) +/datum/admins/proc/CandCheck(role = null, mob/living/carbon/human/M, datum/game_mode/temp = null) // You pass in ROLE define (optional), the applicant, and the gamemode, and it will return true / false depending on whether the applicant qualify for the candidacy in question if(jobban_isbanned(M, "Syndicate")) return FALSE @@ -368,7 +368,7 @@ return 1 -/proc/makeBody(var/mob/dead/observer/G_found) // Uses stripped down and bastardized code from respawn character +/proc/makeBody(mob/dead/observer/G_found) // Uses stripped down and bastardized code from respawn character if(!G_found || !G_found.key) return //First we spawn a dude. diff --git a/code/modules/admin/verbs/onlyone.dm b/code/modules/admin/verbs/onlyone.dm index 9f2579ad162..32ec86541ab 100644 --- a/code/modules/admin/verbs/onlyone.dm +++ b/code/modules/admin/verbs/onlyone.dm @@ -30,8 +30,6 @@ for(var/obj/item/I in H) if(istype(I, /obj/item/implant)) continue - if(istype(I, /obj/item/organ)) - continue qdel(I) H.equip_to_slot_or_del(new /obj/item/clothing/under/kilt(H), slot_w_uniform) @@ -55,7 +53,14 @@ message_admins("[key_name_admin(usr)] used THERE CAN BE ONLY ONE! -NO ATTACK LOGS WILL BE SENT TO ADMINS FROM THIS POINT FORTH-", 1) log_admin("[key_name(usr)] used there can be only one.") GLOB.nologevent = 1 - world << sound('sound/music/thunderdome.ogg') + + var/sound/music = sound('sound/music/thunderdome.ogg', channel = CHANNEL_ADMIN) + for(var/mob/M in GLOB.player_list) + if(M.client.prefs.sound & SOUND_MIDI) + if(isnewplayer(M) && (M.client.prefs.sound & SOUND_LOBBY)) + M.stop_sound_channel(CHANNEL_LOBBYMUSIC) + music.volume = 100 * M.client.prefs.get_channel_volume(CHANNEL_ADMIN) + SEND_SOUND(M, music) /client/proc/only_me() if(!SSticker) @@ -101,4 +106,11 @@ message_admins("[key_name_admin(usr)] used THERE CAN BE ONLY ME! -NO ATTACK LOGS WILL BE SENT TO ADMINS FROM THIS POINT FORTH-", 1) log_admin("[key_name(usr)] used there can be only me.") GLOB.nologevent = 1 - world << sound('sound/music/thunderdome.ogg') + + var/sound/music = sound('sound/music/thunderdome.ogg', channel = CHANNEL_ADMIN) + for(var/mob/M in GLOB.player_list) + if(M.client.prefs.sound & SOUND_MIDI) + if(isnewplayer(M) && (M.client.prefs.sound & SOUND_LOBBY)) + M.stop_sound_channel(CHANNEL_LOBBYMUSIC) + music.volume = 100 * M.client.prefs.get_channel_volume(CHANNEL_ADMIN) + SEND_SOUND(M, music) diff --git a/code/modules/admin/verbs/onlyoneteam.dm b/code/modules/admin/verbs/onlyoneteam.dm index 974b65e05d2..a822367b68c 100644 --- a/code/modules/admin/verbs/onlyoneteam.dm +++ b/code/modules/admin/verbs/onlyoneteam.dm @@ -18,8 +18,6 @@ for(var/obj/item/I in H) if(istype(I, /obj/item/implant)) continue - if(istype (I, /obj/item/organ)) - continue qdel(I) to_chat(H, "You are part of the [station_name()] dodgeball tournament. Throw dodgeballs at crewmembers wearing a different color than you. OOC: Use THROW on an EMPTY-HAND to catch thrown dodgeballs.") diff --git a/code/modules/admin/verbs/playsound.dm b/code/modules/admin/verbs/playsound.dm index d8bb2a1c85d..6f00c39a459 100644 --- a/code/modules/admin/verbs/playsound.dm +++ b/code/modules/admin/verbs/playsound.dm @@ -33,6 +33,7 @@ GLOBAL_LIST_EMPTY(sounds_cache) if(M.client.prefs.sound & SOUND_MIDI) if(isnewplayer(M) && (M.client.prefs.sound & SOUND_LOBBY)) M.stop_sound_channel(CHANNEL_LOBBYMUSIC) + uploaded_sound.volume = 100 * M.client.prefs.get_channel_volume(CHANNEL_ADMIN) SEND_SOUND(M, uploaded_sound) SSblackbox.record_feedback("tally", "admin_verb", 1, "Play Global Sound") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! @@ -102,52 +103,3 @@ GLOBAL_LIST_EMPTY(sounds_cache) if(!I.on && !ignore_power) continue playsound(I, melody, cvol) - -/* -/client/proc/cuban_pete() - set category = "Event" - set name = "Cuban Pete Time" - - message_admins("[key_name_admin(usr)] has declared Cuban Pete Time!", 1) - for(var/mob/M in world) - if(M.client) - if(M.client.midis) - M << 'cubanpetetime.ogg' - - for(var/mob/living/carbon/human/CP in world) - if(CP.real_name=="Cuban Pete" && CP.key!="Rosham") - C << "Your body can't contain the rhumba beat" - CP.gib() - - -/client/proc/bananaphone() - set category = "Event" - set name = "Banana Phone" - - message_admins("[key_name_admin(usr)] has activated Banana Phone!", 1) - for(var/mob/M in world) - if(M.client) - if(M.client.midis) - M << 'bananaphone.ogg' - - -client/proc/space_asshole() - set category = "Event" - set name = "Space Asshole" - - message_admins("[key_name_admin(usr)] has played the Space Asshole Hymn.", 1) - for(var/mob/M in world) - if(M.client) - if(M.client.midis) - M << 'sound/music/space_asshole.ogg' - - -client/proc/honk_theme() - set category = "Event" - set name = "Honk" - - message_admins("[key_name_admin(usr)] has creeped everyone out with Blackest Honks.", 1) - for(var/mob/M in world) - if(M.client) - if(M.client.midis) - M << 'honk_theme.ogg'*/ diff --git a/code/modules/admin/verbs/pray.dm b/code/modules/admin/verbs/pray.dm index 32708a7f65e..5bb640ed8ea 100644 --- a/code/modules/admin/verbs/pray.dm +++ b/code/modules/admin/verbs/pray.dm @@ -36,39 +36,39 @@ if(check_rights(R_EVENT,0,X.mob)) to_chat(X, msg) if(X.prefs.sound & SOUND_PRAYERNOTIFY) - SEND_SOUND(X, 'sound/items/PDA/ambicha4-short.ogg') + SEND_SOUND(X, sound('sound/items/PDA/ambicha4-short.ogg')) to_chat(usr, "Your prayers have been received by the gods.") SSblackbox.record_feedback("tally", "admin_verb", 1, "Pray") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! -/proc/Centcomm_announce(var/text , var/mob/Sender) +/proc/Centcomm_announce(text, mob/Sender) var/msg = sanitize(copytext(text, 1, MAX_MESSAGE_LEN)) msg = "CENTCOMM: [key_name(Sender, 1)] ([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(R_EVENT & X.holder.rights) to_chat(X, msg) if(X.prefs.sound & SOUND_ADMINHELP) - X << 'sound/effects/adminhelp.ogg' + SEND_SOUND(X, sound('sound/effects/adminhelp.ogg')) -/proc/Syndicate_announce(var/text , var/mob/Sender) +/proc/Syndicate_announce(text, mob/Sender) var/msg = sanitize(copytext(text, 1, MAX_MESSAGE_LEN)) msg = "SYNDICATE: [key_name(Sender, 1)] ([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_SYNDICATE_REPLY(Sender,"RPLY")]): [msg]" for(var/client/X in GLOB.admins) if(check_rights(R_EVENT,0,X.mob)) to_chat(X, msg) if(X.prefs.sound & SOUND_ADMINHELP) - X << 'sound/effects/adminhelp.ogg' + SEND_SOUND(X, sound('sound/effects/adminhelp.ogg')) -/proc/HONK_announce(var/text , var/mob/Sender) +/proc/HONK_announce(text, mob/Sender) var/msg = sanitize(copytext(text, 1, MAX_MESSAGE_LEN)) msg = "HONK: [key_name(Sender, 1)] ([ADMIN_PP(Sender,"PP")]) ([ADMIN_VV(Sender,"VV")]) ([ADMIN_TP(Sender,"TP")]) ([ADMIN_SM(Sender,"SM")]) ([admin_jump_link(Sender)]) ([ADMIN_BSA(Sender,"BSA")]) (RPLY): [msg]" for(var/client/X in GLOB.admins) if(R_EVENT & X.holder.rights) to_chat(X, msg) if(X.prefs.sound & SOUND_ADMINHELP) - X << 'sound/effects/adminhelp.ogg' + SEND_SOUND(X, sound('sound/effects/adminhelp.ogg')) -/proc/ERT_Announce(var/text , var/mob/Sender, var/repeat_warning) +/proc/ERT_Announce(text, mob/Sender, repeat_warning) var/msg = sanitize(copytext(text, 1, MAX_MESSAGE_LEN)) msg = "ERT REQUEST: [key_name(Sender, 1)] ([ADMIN_PP(Sender,"PP")]) ([ADMIN_VV(Sender,"VV")]) ([ADMIN_TP(Sender,"TP")]) ([ADMIN_SM(Sender,"SM")]) ([admin_jump_link(Sender)]) ([ADMIN_BSA(Sender,"BSA")]) (RESPOND): [msg]" if(repeat_warning) @@ -77,7 +77,7 @@ if(check_rights(R_EVENT,0,X.mob)) to_chat(X, msg) if(X.prefs.sound & SOUND_ADMINHELP) - X << 'sound/effects/adminhelp.ogg' + SEND_SOUND(X, sound('sound/effects/adminhelp.ogg')) /proc/Nuke_request(text , mob/Sender) var/nuke_code = get_nuke_code() @@ -88,4 +88,4 @@ to_chat(X, msg) to_chat(X, "The nuke code is [nuke_code].") if(X.prefs.sound & SOUND_ADMINHELP) - X << 'sound/effects/adminhelp.ogg' + SEND_SOUND(X, sound('sound/effects/adminhelp.ogg')) diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm index bbc849d1fde..484bd321bf1 100644 --- a/code/modules/admin/verbs/randomverbs.dm +++ b/code/modules/admin/verbs/randomverbs.dm @@ -122,7 +122,7 @@ message_admins("GlobalNarrate: [key_name_admin(usr)]: [msg]
      ", 1) SSblackbox.record_feedback("tally", "admin_verb", 1, "Global Narrate") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! -/client/proc/cmd_admin_direct_narrate(var/mob/M) // Targetted narrate -- TLE +/client/proc/cmd_admin_direct_narrate(mob/M) // Targetted narrate -- TLE set category = null set name = "Direct Narrate" @@ -526,7 +526,7 @@ Traitors and the like can also be revived with the previous role mostly intact. return 1 -/client/proc/get_ghosts(var/notify = 0,var/what = 2) +/client/proc/get_ghosts(notify = 0, what = 2) // what = 1, return ghosts ass list. // what = 2, return mob list diff --git a/code/modules/admin/verbs/striketeam.dm b/code/modules/admin/verbs/striketeam.dm index 59ab53f3ca6..55895e5b282 100644 --- a/code/modules/admin/verbs/striketeam.dm +++ b/code/modules/admin/verbs/striketeam.dm @@ -136,15 +136,14 @@ GLOBAL_VAR_INIT(sent_strike_team, 0) /client/proc/create_death_commando(obj/spawn_location, is_leader = FALSE) var/mob/living/carbon/human/new_commando = new(spawn_location.loc) var/commando_leader_rank = pick("Lieutenant", "Captain", "Major") - var/commando_rank = pick("Corporal", "Sergeant", "Staff Sergeant", "Sergeant 1st Class", "Master Sergeant", "Sergeant Major") - var/commando_name = pick(GLOB.last_names) + var/commando_name = pick(GLOB.commando_names) var/datum/preferences/A = new()//Randomize appearance for the commando. if(is_leader) A.age = rand(35,45) A.real_name = "[commando_leader_rank] [commando_name]" else - A.real_name = "[commando_rank] [commando_name]" + A.real_name = "[commando_name]" A.copy_to(new_commando) diff --git a/code/modules/antagonists/_common/antag_spawner.dm b/code/modules/antagonists/_common/antag_spawner.dm index 35dfc22b1fb..9d3bfdb18d4 100644 --- a/code/modules/antagonists/_common/antag_spawner.dm +++ b/code/modules/antagonists/_common/antag_spawner.dm @@ -285,4 +285,4 @@ M.mind.objectives += KillDaCrew to_chat(M, "Objective #[1]: [KillDaWiz.explanation_text]") to_chat(M, "Objective #[2]: [KillDaCrew.explanation_text]") - M << 'sound/magic/mutate.ogg' + SEND_SOUND(M, sound('sound/magic/mutate.ogg')) diff --git a/code/modules/antagonists/traitor/datum_traitor.dm b/code/modules/antagonists/traitor/datum_traitor.dm index d3d663d90a7..b4d9db4817f 100644 --- a/code/modules/antagonists/traitor/datum_traitor.dm +++ b/code/modules/antagonists/traitor/datum_traitor.dm @@ -361,7 +361,7 @@ return 1 -/datum/antagonist/traitor/proc/assign_exchange_role(var/datum/mind/owner) +/datum/antagonist/traitor/proc/assign_exchange_role(datum/mind/owner) //set faction var/faction = "red" if(owner == SSticker.mode.exchange_blue) diff --git a/code/modules/arcade/arcade_base.dm b/code/modules/arcade/arcade_base.dm index df007b83ad3..2a2a5edaec0 100644 --- a/code/modules/arcade/arcade_base.dm +++ b/code/modules/arcade/arcade_base.dm @@ -59,7 +59,7 @@ to_chat(user, "Someone else is already playing this machine, please wait your turn!") return -/obj/machinery/arcade/attackby(var/obj/item/O as obj, var/mob/user as mob, params) +/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 @@ -93,7 +93,7 @@ cashmoney.use(token_price) return 1 -/obj/machinery/arcade/proc/pay_with_card(var/obj/item/card/id/I, var/mob/user) +/obj/machinery/arcade/proc/pay_with_card(obj/item/card/id/I, mob/user) visible_message("[usr] swipes a card through [src].") var/datum/money_account/customer_account = attempt_account_access_nosec(I.associated_account_number) if(!customer_account) diff --git a/code/modules/arcade/arcade_prize.dm b/code/modules/arcade/arcade_prize.dm index 832d1c46649..3adc53684cf 100644 --- a/code/modules/arcade/arcade_prize.dm +++ b/code/modules/arcade/arcade_prize.dm @@ -18,7 +18,7 @@ if(opening) return opening = 1 - playsound(src.loc, 'sound/items/bubblewrap.ogg', 30, 1, extrarange = -4, falloff = 10) + playsound(loc, 'sound/items/bubblewrap.ogg', 30, TRUE) icon_state = "prizeconfetti" src.color = pick(GLOB.random_color_list) var/prize_inside = pick(possible_contents) @@ -69,7 +69,7 @@ w_class = WEIGHT_CLASS_TINY max_amount = 9999 //Dang that's a lot of tickets -/obj/item/stack/tickets/New(var/loc, var/amount=null) +/obj/item/stack/tickets/New(loc, amount=null) ..() update_icon() diff --git a/code/modules/arcade/claw_game.dm b/code/modules/arcade/claw_game.dm index da17adff562..3af88b647c4 100644 --- a/code/modules/arcade/claw_game.dm +++ b/code/modules/arcade/claw_game.dm @@ -57,7 +57,7 @@ GLOBAL_VAR(claw_game_html) else atom_say("WINNER!") new /obj/item/toy/prizeball(get_turf(src)) - playsound(src.loc, 'sound/arcade/win.ogg', 50, 1, extrarange = -3, falloff = 10) + playsound(loc, 'sound/arcade/win.ogg', 50, TRUE) addtimer(CALLBACK(src, .proc/update_icon), 10) /obj/machinery/arcade/claw/start_play(mob/user as mob) diff --git a/code/modules/arcade/prize_counter.dm b/code/modules/arcade/prize_counter.dm index 9c8a4dea685..364486792d4 100644 --- a/code/modules/arcade/prize_counter.dm +++ b/code/modules/arcade/prize_counter.dm @@ -31,7 +31,7 @@ icon_state = "prize_counter-on" return -/obj/machinery/prize_counter/attackby(var/obj/item/O as obj, var/mob/user as mob, params) +/obj/machinery/prize_counter/attackby(obj/item/O as obj, mob/user as mob, params) if(istype(O, /obj/item/stack/tickets)) var/obj/item/stack/tickets/T = O if(user.unEquip(T)) //Because if you can't drop it for some reason, you shouldn't be increasing the tickets var diff --git a/code/modules/arcade/prize_datums.dm b/code/modules/arcade/prize_datums.dm index 2b9f17c3d04..9e402020242 100644 --- a/code/modules/arcade/prize_datums.dm +++ b/code/modules/arcade/prize_datums.dm @@ -7,7 +7,7 @@ GLOBAL_DATUM_INIT(global_prizes, /datum/prizes, new()) for(var/itempath in subtypesof(/datum/prize_item)) prizes += new itempath() -/datum/prizes/proc/PlaceOrder(var/obj/machinery/prize_counter/prize_counter, var/itemID) +/datum/prizes/proc/PlaceOrder(obj/machinery/prize_counter/prize_counter, itemID) if(!prize_counter.Adjacent(usr)) to_chat(usr, "You need to be closer!") return diff --git a/code/modules/assembly/assembly.dm b/code/modules/assembly/assembly.dm index 6567dd62ede..2e198be45c5 100644 --- a/code/modules/assembly/assembly.dm +++ b/code/modules/assembly/assembly.dm @@ -18,6 +18,8 @@ origin_tech = "magnets=1;engineering=1" toolspeed = 1 usesound = 'sound/items/deconstruct.ogg' + drop_sound = 'sound/items/handling/component_drop.ogg' + pickup_sound = 'sound/items/handling/component_pickup.ogg' var/bomb_name = "bomb" // used for naming bombs / mines diff --git a/code/modules/assembly/holder.dm b/code/modules/assembly/holder.dm index 87fefe4fc65..7f3edf98f46 100644 --- a/code/modules/assembly/holder.dm +++ b/code/modules/assembly/holder.dm @@ -16,7 +16,7 @@ /obj/item/assembly_holder/proc/attach(obj/item/D, obj/item/D2, mob/user) return -/obj/item/assembly_holder/proc/process_activation(var/obj/item/D) +/obj/item/assembly_holder/proc/process_activation(obj/item/D) return /obj/item/assembly_holder/IsAssemblyHolder() diff --git a/code/modules/assembly/infrared.dm b/code/modules/assembly/infrared.dm index 9de2f32ed6f..d1efa862a63 100644 --- a/code/modules/assembly/infrared.dm +++ b/code/modules/assembly/infrared.dm @@ -116,7 +116,7 @@ qdel(first) return TRUE -/obj/item/assembly/infra/equipped(var/mob/user, var/slot) +/obj/item/assembly/infra/equipped(mob/user, slot) qdel(first) return ..() diff --git a/code/modules/atmospherics/environmental/LINDA_system.dm b/code/modules/atmospherics/environmental/LINDA_system.dm index d5e8c50e074..8c1fcdab34c 100644 --- a/code/modules/atmospherics/environmental/LINDA_system.dm +++ b/code/modules/atmospherics/environmental/LINDA_system.dm @@ -1,4 +1,4 @@ -/turf/proc/CanAtmosPass(var/turf/T) +/turf/proc/CanAtmosPass(turf/T) if(!istype(T)) return 0 var/R if(blocks_air || T.blocks_air) @@ -101,26 +101,26 @@ return adjacent_turfs -/atom/movable/proc/air_update_turf(var/command = 0) +/atom/movable/proc/air_update_turf(command = 0) if(!istype(loc,/turf) && command) return for(var/turf/T in locs) // used by double wide doors and other nonexistant multitile structures T.air_update_turf(command) -/turf/proc/air_update_turf(var/command = 0) +/turf/proc/air_update_turf(command = 0) if(command) CalculateAdjacentTurfs() if(SSair) SSair.add_to_active(src,command) -/atom/movable/proc/move_update_air(var/turf/T) +/atom/movable/proc/move_update_air(turf/T) if(istype(T,/turf)) T.air_update_turf(1) air_update_turf(1) -/atom/movable/proc/atmos_spawn_air(var/text, var/amount) //because a lot of people loves to copy paste awful code lets just make a easy proc to spawn your plasma fires +/atom/movable/proc/atmos_spawn_air(text, amount) //because a lot of people loves to copy paste awful code lets just make a easy proc to spawn your plasma fires var/turf/simulated/T = get_turf(src) if(!istype(T)) return diff --git a/code/modules/atmospherics/environmental/LINDA_turf_tile.dm b/code/modules/atmospherics/environmental/LINDA_turf_tile.dm index f2a37876881..cd5186b1d7f 100644 --- a/code/modules/atmospherics/environmental/LINDA_turf_tile.dm +++ b/code/modules/atmospherics/environmental/LINDA_turf_tile.dm @@ -273,6 +273,7 @@ var/atmos_overlay = get_atmos_overlay_by_name(atmos_overlay_type) if(atmos_overlay) vis_contents -= atmos_overlay + atmos_overlay_type = null atmos_overlay = get_atmos_overlay_by_name(new_overlay_type) if(atmos_overlay) @@ -308,7 +309,7 @@ T.consider_pressure_difference(src, difference) last_share_check() -/turf/proc/consider_pressure_difference(var/turf/simulated/T, var/difference) +/turf/proc/consider_pressure_difference(turf/simulated/T, difference) SSair.high_pressure_delta |= src if(difference > pressure_difference) pressure_direction = get_dir(src, T) @@ -354,13 +355,13 @@ if(SSair) SSair.excited_groups += src -/datum/excited_group/proc/add_turf(var/turf/simulated/T) +/datum/excited_group/proc/add_turf(turf/simulated/T) turf_list += T T.excited_group = src T.recently_active = 1 reset_cooldowns() -/datum/excited_group/proc/merge_groups(var/datum/excited_group/E) +/datum/excited_group/proc/merge_groups(datum/excited_group/E) if(length(turf_list) > length(E.turf_list)) SSair.excited_groups -= E for(var/turf/simulated/T in E.turf_list) diff --git a/code/modules/atmospherics/machinery/airalarm.dm b/code/modules/atmospherics/machinery/airalarm.dm index c3c901da845..13e2d7bcb16 100644 --- a/code/modules/atmospherics/machinery/airalarm.dm +++ b/code/modules/atmospherics/machinery/airalarm.dm @@ -144,7 +144,7 @@ /obj/machinery/alarm/kitchen_cold_room preset = AALARM_PRESET_COLDROOM -/obj/machinery/alarm/proc/apply_preset(var/no_cycle_after=0) +/obj/machinery/alarm/proc/apply_preset(no_cycle_after=0) // Propogate settings. for(var/obj/machinery/alarm/AA in alarm_area) if(!(AA.stat & (NOPOWER|BROKEN)) && !AA.shorted && AA.preset != src.preset) @@ -541,6 +541,12 @@ /obj/machinery/alarm/proc/post_alert(alert_level) if(!report_danger_level) + // Don't report the level to computers, but do toggle firedoors + var/area/A = get_area(src) + if(alert_level == ATMOS_ALARM_NONE) + A.air_doors_open() + else if(alert_level != ATMOS_ALARM_NONE) + A.air_doors_close() return var/datum/radio_frequency/frequency = SSradio.return_frequency(alarm_frequency) @@ -1046,8 +1052,7 @@ stat &= ~NOPOWER else stat |= NOPOWER - spawn(rand(0,15)) - update_icon() + update_icon() /obj/machinery/alarm/obj_break(damage_flag) ..() diff --git a/code/modules/atmospherics/machinery/atmospherics.dm b/code/modules/atmospherics/machinery/atmospherics.dm index d5e6176ca22..8a77e3908f1 100644 --- a/code/modules/atmospherics/machinery/atmospherics.dm +++ b/code/modules/atmospherics/machinery/atmospherics.dm @@ -83,14 +83,14 @@ Pipelines + Other Objects -> Pipe network return TRUE -/obj/machinery/atmospherics/proc/color_cache_name(var/obj/machinery/atmospherics/node) +/obj/machinery/atmospherics/proc/color_cache_name(obj/machinery/atmospherics/node) //Don't use this for standard pipes if(!istype(node)) return null return node.pipe_color -/obj/machinery/atmospherics/proc/add_underlay(var/turf/T, var/obj/machinery/atmospherics/node, var/direction, var/icon_connect_type) +/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)) //underlays += SSair.icon_manager.get_atmos_icon("underlay_down", direction, color_cache_name(node)) @@ -253,7 +253,7 @@ Pipelines + Other Objects -> Pipe network build_network() // Find a connecting /obj/machinery/atmospherics in specified direction. -/obj/machinery/atmospherics/proc/findConnecting(var/direction) +/obj/machinery/atmospherics/proc/findConnecting(direction) for(var/obj/machinery/atmospherics/target in get_step(src,direction)) var/can_connect = check_connect_types(target, src) if(can_connect && (target.initialize_directions & get_dir(target,src))) @@ -292,7 +292,7 @@ Pipelines + Other Objects -> Pipe network spawn(1) user.canmove = 1 -/obj/machinery/atmospherics/AltClick(var/mob/living/L) +/obj/machinery/atmospherics/AltClick(mob/living/L) if(is_type_in_list(src, GLOB.ventcrawl_machinery)) L.handle_ventcrawl(src) return @@ -301,7 +301,7 @@ Pipelines + Other Objects -> Pipe network /obj/machinery/atmospherics/proc/can_crawl_through() return 1 -/obj/machinery/atmospherics/proc/change_color(var/new_color) +/obj/machinery/atmospherics/proc/change_color(new_color) //only pass valid pipe colors please ~otherwise your pipe will turn invisible if(!pipe_color_check(new_color)) return @@ -310,7 +310,7 @@ Pipelines + Other Objects -> Pipe network update_icon() // Additional icon procs -/obj/machinery/atmospherics/proc/universal_underlays(var/obj/machinery/atmospherics/node, var/direction) +/obj/machinery/atmospherics/proc/universal_underlays(obj/machinery/atmospherics/node, direction) var/turf/T = get_turf(src) if(!istype(T)) return if(node) @@ -332,7 +332,7 @@ Pipelines + Other Objects -> Pipe network add_underlay_adapter(T, , direction, "-scrubbers") add_underlay_adapter(T, , direction, "") -/obj/machinery/atmospherics/proc/add_underlay_adapter(var/turf/T, var/obj/machinery/atmospherics/node, var/direction, var/icon_connect_type) //modified from add_underlay, does not make exposed underlays +/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)) underlays += SSair.icon_manager.get_atmos_icon("underlay", direction, color_cache_name(node), "down" + icon_connect_type) diff --git a/code/modules/atmospherics/machinery/components/binary_devices/binary_atmos_base.dm b/code/modules/atmospherics/machinery/components/binary_devices/binary_atmos_base.dm index 0a8b9eb95a4..b0ca5531af1 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/binary_atmos_base.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/binary_atmos_base.dm @@ -134,7 +134,7 @@ else if(Old == parent2) parent2 = New -/obj/machinery/atmospherics/binary/unsafe_pressure_release(var/mob/user,var/pressures) +/obj/machinery/atmospherics/binary/unsafe_pressure_release(mob/user, pressures) ..() var/turf/T = get_turf(src) diff --git a/code/modules/atmospherics/machinery/components/binary_devices/dp_vent_pump.dm b/code/modules/atmospherics/machinery/components/binary_devices/dp_vent_pump.dm index 11e9897136f..0ff312806e9 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/dp_vent_pump.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/dp_vent_pump.dm @@ -71,7 +71,7 @@ add_underlay(T, node1, turn(dir, -180)) add_underlay(T, node2, dir) -/obj/machinery/atmospherics/binary/dp_vent_pump/update_icon(var/safety = 0) +/obj/machinery/atmospherics/binary/dp_vent_pump/update_icon(safety = 0) ..() if(!check_icon_cache()) @@ -227,22 +227,20 @@ ) if(signal.data["status"]) - spawn(2) - broadcast_status() + broadcast_status() return //do not update_icon - spawn(2) - broadcast_status() + broadcast_status() update_icon() -/obj/machinery/atmospherics/binary/dp_vent_pump/attackby(var/obj/item/W as obj, var/mob/user as mob) +/obj/machinery/atmospherics/binary/dp_vent_pump/attackby(obj/item/W as obj, mob/user as mob) if(istype(W, /obj/item/multitool)) update_multitool_menu(user) return 1 return ..() -/obj/machinery/atmospherics/binary/dp_vent_pump/multitool_menu(var/mob/user,var/obj/item/multitool/P) +/obj/machinery/atmospherics/binary/dp_vent_pump/multitool_menu(mob/user, obj/item/multitool/P) return {"
      • Frequency: [format_frequency(frequency)] GHz (Reset)
      • diff --git a/code/modules/atmospherics/machinery/components/binary_devices/passive_gate.dm b/code/modules/atmospherics/machinery/components/binary_devices/passive_gate.dm index 2dd2705901d..2c12b3fa6a6 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/passive_gate.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/passive_gate.dm @@ -110,12 +110,10 @@ investigate_log("was turned [on ? "on" : "off"] by a remote signal", "atmos") if("status" in signal.data) - spawn(2) - broadcast_status() + broadcast_status() return //do not update_icon - spawn(2) - broadcast_status() + broadcast_status() update_icon() return diff --git a/code/modules/atmospherics/machinery/components/binary_devices/pump.dm b/code/modules/atmospherics/machinery/components/binary_devices/pump.dm index c8d96628433..fec536ad0c9 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/pump.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/pump.dm @@ -165,12 +165,10 @@ Thus, the two variables affect pump operation are set in New(): investigate_log("was turned [on ? "on" : "off"] by a remote signal", "atmos") if(signal.data["status"]) - spawn(2) - broadcast_status() + broadcast_status() return //do not update_icon - spawn(2) - broadcast_status() + broadcast_status() update_icon() return diff --git a/code/modules/atmospherics/machinery/components/binary_devices/valve.dm b/code/modules/atmospherics/machinery/components/binary_devices/valve.dm index dd43bee7b4f..47286270a4c 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/valve.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/valve.dm @@ -135,13 +135,13 @@ if(open) close() -/obj/machinery/atmospherics/binary/valve/digital/attackby(var/obj/item/W as obj, var/mob/user) +/obj/machinery/atmospherics/binary/valve/digital/attackby(obj/item/W as obj, mob/user) if(istype(W, /obj/item/multitool)) update_multitool_menu(user) return 1 return ..() -/obj/machinery/atmospherics/binary/valve/digital/multitool_menu(var/mob/user,var/obj/item/multitool/P) +/obj/machinery/atmospherics/binary/valve/digital/multitool_menu(mob/user, obj/item/multitool/P) return {"
        • Frequency: [format_frequency(frequency)] GHz (Reset)
        • diff --git a/code/modules/atmospherics/machinery/components/binary_devices/volume_pump.dm b/code/modules/atmospherics/machinery/components/binary_devices/volume_pump.dm index 7f6cc228844..83d01cb20aa 100644 --- a/code/modules/atmospherics/machinery/components/binary_devices/volume_pump.dm +++ b/code/modules/atmospherics/machinery/components/binary_devices/volume_pump.dm @@ -163,12 +163,10 @@ Thus, the two variables affect pump operation are set in New(): investigate_log("was turned [on ? "on" : "off"] by a remote signal", "atmos") if(signal.data["status"]) - spawn(2) - broadcast_status() + broadcast_status() return //do not update_icon - spawn(2) - broadcast_status() + broadcast_status() update_icon() /obj/machinery/atmospherics/binary/volume_pump/attack_hand(mob/user) diff --git a/code/modules/atmospherics/machinery/components/trinary_devices/trinary_base.dm b/code/modules/atmospherics/machinery/components/trinary_devices/trinary_base.dm index 79fae0f7d88..5b54f0ff91c 100644 --- a/code/modules/atmospherics/machinery/components/trinary_devices/trinary_base.dm +++ b/code/modules/atmospherics/machinery/components/trinary_devices/trinary_base.dm @@ -190,7 +190,7 @@ else if(Old == parent3) parent3 = New -/obj/machinery/atmospherics/trinary/unsafe_pressure_release(var/mob/user,var/pressures) +/obj/machinery/atmospherics/trinary/unsafe_pressure_release(mob/user, pressures) ..() var/turf/T = get_turf(src) diff --git a/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm b/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm index 8c11ea9618d..01d18336b5c 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/cryo.dm @@ -280,7 +280,7 @@ add_fingerprint(usr) -/obj/machinery/atmospherics/unary/cryo_cell/attackby(var/obj/item/G, var/mob/user, params) +/obj/machinery/atmospherics/unary/cryo_cell/attackby(obj/item/G, mob/user, params) if(istype(G, /obj/item/reagent_containers/glass)) var/obj/item/reagent_containers/B = G if(beaker) diff --git a/code/modules/atmospherics/machinery/components/unary_devices/outlet_injector.dm b/code/modules/atmospherics/machinery/components/unary_devices/outlet_injector.dm index 8a2e383a710..11c032a522d 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/outlet_injector.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/outlet_injector.dm @@ -138,14 +138,12 @@ volume_rate = between(0, number, air_contents.volume) if(signal.data["status"]) - spawn(2) - broadcast_status() + broadcast_status() return //do not update_icon //log_admin("DEBUG \[[world.timeofday]\]: outlet_injector/receive_signal: unknown command \"[signal.data["command"]]\"\n[signal.debug_print()]") //return - spawn(2) - broadcast_status() + broadcast_status() update_icon() /*hide(var/i) //to make the little pipe section invisible, the icon changes. @@ -159,7 +157,7 @@ on = 0 return*/ -/obj/machinery/atmospherics/unary/outlet_injector/multitool_menu(var/mob/user,var/obj/item/multitool/P) +/obj/machinery/atmospherics/unary/outlet_injector/multitool_menu(mob/user, obj/item/multitool/P) return {"
          • Frequency: [format_frequency(frequency)] GHz (Reset)
          • @@ -180,5 +178,5 @@ /obj/machinery/atmospherics/unary/outlet_injector/interact(mob/user as mob) update_multitool_menu(user) -/obj/machinery/atmospherics/unary/outlet_injector/hide(var/i) +/obj/machinery/atmospherics/unary/outlet_injector/hide(i) update_underlays() diff --git a/code/modules/atmospherics/machinery/components/unary_devices/portables_connector.dm b/code/modules/atmospherics/machinery/components/unary_devices/portables_connector.dm index 7b4ba08af77..eadd1bac280 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/portables_connector.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/portables_connector.dm @@ -35,7 +35,7 @@ return 0 parent.update = 1 -/obj/machinery/atmospherics/unary/portables_connector/attackby(var/obj/item/W as obj, var/mob/user as mob, params) +/obj/machinery/atmospherics/unary/portables_connector/attackby(obj/item/W as obj, mob/user as mob, params) if(istype(W, /obj/item/wrench)) if(connected_device) to_chat(user, "You cannot unwrench this [src], detach [connected_device] first.") diff --git a/code/modules/atmospherics/machinery/components/unary_devices/unary_base.dm b/code/modules/atmospherics/machinery/components/unary_devices/unary_base.dm index 08af292d62e..0f838f1dc94 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/unary_base.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/unary_base.dm @@ -87,7 +87,7 @@ if(Old == parent) parent = New -/obj/machinery/atmospherics/unary/unsafe_pressure_release(var/mob/user,var/pressures) +/obj/machinery/atmospherics/unary/unsafe_pressure_release(mob/user, pressures) ..() var/turf/T = get_turf(src) diff --git a/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm b/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm index e380ddb3b94..d85d502c3ab 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm @@ -379,7 +379,7 @@ /obj/machinery/atmospherics/unary/vent_pump/interact(mob/user as mob) update_multitool_menu(user) -/obj/machinery/atmospherics/unary/vent_pump/multitool_menu(var/mob/user,var/obj/item/multitool/P) +/obj/machinery/atmospherics/unary/vent_pump/multitool_menu(mob/user, obj/item/multitool/P) return {" "} -/obj/machinery/atmospherics/unary/vent_pump/multitool_topic(var/mob/user, var/list/href_list, var/obj/O) +/obj/machinery/atmospherics/unary/vent_pump/multitool_topic(mob/user, list/href_list, obj/O) if("set_id" in href_list) var/newid = copytext(reject_bad_text(input(usr, "Specify the new ID tag for this machine", src, src.id_tag) as null|text), 1, MAX_MESSAGE_LEN) if(!newid) diff --git a/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm b/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm index 7048ee61639..7a983e8b7cc 100644 --- a/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm +++ b/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm @@ -92,7 +92,7 @@ use_power(amount, power_channel) return 1 -/obj/machinery/atmospherics/unary/vent_scrubber/update_icon(var/safety = 0) +/obj/machinery/atmospherics/unary/vent_scrubber/update_icon(safety = 0) ..() plane = FLOOR_PLANE @@ -215,7 +215,7 @@ if(istype(T)) adjacent_turfs = T.GetAtmosAdjacentTurfs(alldir=1) -/obj/machinery/atmospherics/unary/vent_scrubber/proc/scrub(var/turf/simulated/tile) +/obj/machinery/atmospherics/unary/vent_scrubber/proc/scrub(turf/simulated/tile) if(!tile || !istype(tile)) return 0 @@ -275,7 +275,7 @@ return 1 -/obj/machinery/atmospherics/unary/vent_scrubber/hide(var/i) //to make the little pipe section invisible, the icon changes. +/obj/machinery/atmospherics/unary/vent_scrubber/hide(i) //to make the little pipe section invisible, the icon changes. update_icon() /obj/machinery/atmospherics/unary/vent_scrubber/receive_signal(datum/signal/signal) @@ -341,7 +341,7 @@ if(old_stat != stat) update_icon() -/obj/machinery/atmospherics/unary/vent_scrubber/multitool_menu(var/mob/user,var/obj/item/multitool/P) +/obj/machinery/atmospherics/unary/vent_scrubber/multitool_menu(mob/user, obj/item/multitool/P) return {" "} -/obj/machinery/atmospherics/unary/vent_scrubber/multitool_topic(var/mob/user, var/list/href_list, var/obj/O) +/obj/machinery/atmospherics/unary/vent_scrubber/multitool_topic(mob/user, list/href_list, obj/O) if("set_id" in href_list) var/newid = copytext(reject_bad_text(input(usr, "Specify the new ID tag for this machine", src, src:id_tag) as null|text),1,MAX_MESSAGE_LEN) if(!newid) @@ -379,7 +379,7 @@ pipe_image.plane = ABOVE_HUD_PLANE playsound(loc, 'sound/weapons/bladeslice.ogg', 100, TRUE) -/obj/machinery/atmospherics/unary/vent_scrubber/attackby(var/obj/item/W as obj, var/mob/user as mob, params) +/obj/machinery/atmospherics/unary/vent_scrubber/attackby(obj/item/W as obj, mob/user as mob, params) if(istype(W, /obj/item/multitool)) update_multitool_menu(user) return 1 diff --git a/code/modules/atmospherics/machinery/datum_icon_manager.dm b/code/modules/atmospherics/machinery/datum_icon_manager.dm index 014fafc5c18..2e0ef593bae 100644 --- a/code/modules/atmospherics/machinery/datum_icon_manager.dm +++ b/code/modules/atmospherics/machinery/datum_icon_manager.dm @@ -6,12 +6,12 @@ // atmospherics devices. //-------------------------------------------- -/proc/pipe_color_lookup(var/color) +/proc/pipe_color_lookup(color) for(var/C in GLOB.pipe_colors) if(color == GLOB.pipe_colors[C]) return "[C]" -/proc/pipe_color_check(var/color) +/proc/pipe_color_check(color) if(!color) return 1 for(var/C in GLOB.pipe_colors) @@ -37,7 +37,7 @@ /datum/pipe_icon_manager/New() check_icons() -/datum/pipe_icon_manager/proc/get_atmos_icon(var/device, var/dir, var/color, var/state) +/datum/pipe_icon_manager/proc/get_atmos_icon(device, dir, color, state) check_icons() device = "[device]" diff --git a/code/modules/atmospherics/machinery/other/area_atmos_computer.dm b/code/modules/atmospherics/machinery/other/area_atmos_computer.dm index d7650d1cb68..52d4cdf8b18 100644 --- a/code/modules/atmospherics/machinery/other/area_atmos_computer.dm +++ b/code/modules/atmospherics/machinery/other/area_atmos_computer.dm @@ -112,7 +112,7 @@ scrubber.on = text2num(href_list["toggle"]) scrubber.update_icon() -/obj/machinery/computer/area_atmos/proc/validscrubber( var/obj/machinery/portable_atmospherics/scrubber/huge/scrubber as obj ) +/obj/machinery/computer/area_atmos/proc/validscrubber(obj/machinery/portable_atmospherics/scrubber/huge/scrubber as obj) if(!isobj(scrubber) || get_dist(scrubber.loc, src.loc) > src.range || scrubber.loc.z != src.loc.z) return 0 diff --git a/code/modules/atmospherics/machinery/other/meter.dm b/code/modules/atmospherics/machinery/other/meter.dm index 7c72c9e2b09..84688b03195 100644 --- a/code/modules/atmospherics/machinery/other/meter.dm +++ b/code/modules/atmospherics/machinery/other/meter.dm @@ -123,7 +123,7 @@ return ..() -/obj/machinery/meter/attackby(var/obj/item/W as obj, var/mob/user as mob, params) +/obj/machinery/meter/attackby(obj/item/W as obj, mob/user as mob, params) if(istype(W, /obj/item/multitool)) update_multitool_menu(user) return 1 @@ -162,10 +162,10 @@ target = loc ..() -/obj/machinery/meter/turf/attackby(var/obj/item/W as obj, var/mob/user as mob, params) +/obj/machinery/meter/turf/attackby(obj/item/W as obj, mob/user as mob, params) return -/obj/machinery/meter/multitool_menu(var/mob/user, var/obj/item/multitool/P) +/obj/machinery/meter/multitool_menu(mob/user, obj/item/multitool/P) return {" Main
              diff --git a/code/modules/atmospherics/machinery/pipes/cap.dm b/code/modules/atmospherics/machinery/pipes/cap.dm index 94ba0b5429c..516660e72ba 100644 --- a/code/modules/atmospherics/machinery/pipes/cap.dm +++ b/code/modules/atmospherics/machinery/pipes/cap.dm @@ -16,7 +16,7 @@ ..() initialize_directions = dir -/obj/machinery/atmospherics/pipe/cap/hide(var/i) +/obj/machinery/atmospherics/pipe/cap/hide(i) if(level == 1 && istype(loc, /turf/simulated)) invisibility = i ? INVISIBILITY_MAXIMUM : 0 update_icon() @@ -47,13 +47,13 @@ ..() -/obj/machinery/atmospherics/pipe/cap/change_color(var/new_color) +/obj/machinery/atmospherics/pipe/cap/change_color(new_color) ..() //for updating connected atmos device pipes (i.e. vents, manifolds, etc) if(node) node.update_underlays() -/obj/machinery/atmospherics/pipe/cap/update_icon(var/safety = 0) +/obj/machinery/atmospherics/pipe/cap/update_icon(safety = 0) ..() if(!check_icon_cache()) diff --git a/code/modules/atmospherics/machinery/pipes/manifold.dm b/code/modules/atmospherics/machinery/pipes/manifold.dm index 17f93dd7a23..ab7196e0864 100644 --- a/code/modules/atmospherics/machinery/pipes/manifold.dm +++ b/code/modules/atmospherics/machinery/pipes/manifold.dm @@ -58,7 +58,7 @@ hide(T.intact) update_icon() -/obj/machinery/atmospherics/pipe/manifold/hide(var/i) +/obj/machinery/atmospherics/pipe/manifold/hide(i) if(level == 1 && istype(loc, /turf/simulated)) invisibility = i ? INVISIBILITY_MAXIMUM : 0 @@ -104,7 +104,7 @@ update_icon() ..() -/obj/machinery/atmospherics/pipe/manifold/change_color(var/new_color) +/obj/machinery/atmospherics/pipe/manifold/change_color(new_color) ..() //for updating connected atmos device pipes (i.e. vents, manifolds, etc) if(node1) @@ -114,7 +114,7 @@ if(node3) node3.update_underlays() -/obj/machinery/atmospherics/pipe/manifold/update_icon(var/safety = 0) +/obj/machinery/atmospherics/pipe/manifold/update_icon(safety = 0) ..() if(!check_icon_cache()) diff --git a/code/modules/atmospherics/machinery/pipes/manifold4w.dm b/code/modules/atmospherics/machinery/pipes/manifold4w.dm index a5e32eb6f69..0ac16c2c69d 100644 --- a/code/modules/atmospherics/machinery/pipes/manifold4w.dm +++ b/code/modules/atmospherics/machinery/pipes/manifold4w.dm @@ -76,7 +76,7 @@ ..() -/obj/machinery/atmospherics/pipe/manifold4w/change_color(var/new_color) +/obj/machinery/atmospherics/pipe/manifold4w/change_color(new_color) ..() //for updating connected atmos device pipes (i.e. vents, manifolds, etc) if(node1) @@ -88,7 +88,7 @@ if(node4) node4.update_underlays() -/obj/machinery/atmospherics/pipe/manifold4w/update_icon(var/safety = 0) +/obj/machinery/atmospherics/pipe/manifold4w/update_icon(safety = 0) ..() if(!check_icon_cache()) @@ -131,7 +131,7 @@ // 1: 1-4 nodes exist, we continue existing return 1 -/obj/machinery/atmospherics/pipe/manifold4w/hide(var/i) +/obj/machinery/atmospherics/pipe/manifold4w/hide(i) if(level == 1 && istype(loc, /turf/simulated)) invisibility = i ? INVISIBILITY_MAXIMUM : 0 diff --git a/code/modules/atmospherics/machinery/pipes/pipe.dm b/code/modules/atmospherics/machinery/pipes/pipe.dm index 56141b0573d..70c25a7939b 100644 --- a/code/modules/atmospherics/machinery/pipes/pipe.dm +++ b/code/modules/atmospherics/machinery/pipes/pipe.dm @@ -75,7 +75,7 @@ /obj/machinery/atmospherics/pipe/setPipenet(datum/pipeline/P) parent = P -/obj/machinery/atmospherics/pipe/color_cache_name(var/obj/machinery/atmospherics/node) +/obj/machinery/atmospherics/pipe/color_cache_name(obj/machinery/atmospherics/node) if(istype(node, /obj/machinery/atmospherics/pipe/manifold) || istype(node, /obj/machinery/atmospherics/pipe/manifold4w)) if(pipe_color == node.pipe_color) return node.pipe_color diff --git a/code/modules/atmospherics/machinery/pipes/simple/pipe_simple.dm b/code/modules/atmospherics/machinery/pipes/simple/pipe_simple.dm index 70abc375ca2..92c421fbff9 100644 --- a/code/modules/atmospherics/machinery/pipes/simple/pipe_simple.dm +++ b/code/modules/atmospherics/machinery/pipes/simple/pipe_simple.dm @@ -128,7 +128,7 @@ /obj/machinery/atmospherics/pipe/simple/pipeline_expansion() return list(node1, node2) -/obj/machinery/atmospherics/pipe/simple/change_color(var/new_color) +/obj/machinery/atmospherics/pipe/simple/change_color(new_color) ..() //for updating connected atmos device pipes (i.e. vents, manifolds, etc) if(node1) @@ -136,7 +136,7 @@ if(node2) node2.update_underlays() -/obj/machinery/atmospherics/pipe/simple/update_icon(var/safety = 0) +/obj/machinery/atmospherics/pipe/simple/update_icon(safety = 0) ..() if(!check_icon_cache()) @@ -162,6 +162,6 @@ /obj/machinery/atmospherics/pipe/simple/update_underlays() return -/obj/machinery/atmospherics/pipe/simple/hide(var/i) +/obj/machinery/atmospherics/pipe/simple/hide(i) if(level == 1 && istype(loc, /turf/simulated)) invisibility = i ? INVISIBILITY_MAXIMUM : 0 diff --git a/code/modules/atmospherics/machinery/pipes/simple/pipe_simple_hidden.dm b/code/modules/atmospherics/machinery/pipes/simple/pipe_simple_hidden.dm index 98390b515c4..fcfe622e483 100644 --- a/code/modules/atmospherics/machinery/pipes/simple/pipe_simple_hidden.dm +++ b/code/modules/atmospherics/machinery/pipes/simple/pipe_simple_hidden.dm @@ -27,7 +27,7 @@ connect_types = list(1,2,3) icon_state = "map_universal" -/obj/machinery/atmospherics/pipe/simple/hidden/universal/update_icon(var/safety = 0) +/obj/machinery/atmospherics/pipe/simple/hidden/universal/update_icon(safety = 0) ..() if(!check_icon_cache()) diff --git a/code/modules/atmospherics/machinery/pipes/simple/pipe_simple_visible.dm b/code/modules/atmospherics/machinery/pipes/simple/pipe_simple_visible.dm index 7d9abccc394..c2aa015fb23 100644 --- a/code/modules/atmospherics/machinery/pipes/simple/pipe_simple_visible.dm +++ b/code/modules/atmospherics/machinery/pipes/simple/pipe_simple_visible.dm @@ -44,7 +44,7 @@ connect_types = list(1,2,3) icon_state = "map_universal" -/obj/machinery/atmospherics/pipe/simple/visible/universal/update_icon(var/safety = 0) +/obj/machinery/atmospherics/pipe/simple/visible/universal/update_icon(safety = 0) ..() if(!check_icon_cache()) diff --git a/code/modules/atmospherics/machinery/portable/canister.dm b/code/modules/atmospherics/machinery/portable/canister.dm index 07edc75c590..cc4daa540ff 100644 --- a/code/modules/atmospherics/machinery/portable/canister.dm +++ b/code/modules/atmospherics/machinery/portable/canister.dm @@ -278,14 +278,14 @@ update_flag else if(valve_open && holding) investigate_log("[key_name(user)] started a transfer into [holding].
              ", "atmos") -/obj/machinery/portable_atmospherics/canister/attack_ai(var/mob/user) +/obj/machinery/portable_atmospherics/canister/attack_ai(mob/user) add_hiddenprint(user) return attack_hand(user) -/obj/machinery/portable_atmospherics/canister/attack_ghost(var/mob/user) +/obj/machinery/portable_atmospherics/canister/attack_ghost(mob/user) return ui_interact(user) -/obj/machinery/portable_atmospherics/canister/attack_hand(var/mob/user) +/obj/machinery/portable_atmospherics/canister/attack_hand(mob/user) return ui_interact(user) /obj/machinery/portable_atmospherics/canister/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = TRUE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.physical_state) diff --git a/code/modules/awaymissions/corpse.dm b/code/modules/awaymissions/corpse.dm index c3a483c04d8..f11e6e238da 100644 --- a/code/modules/awaymissions/corpse.dm +++ b/code/modules/awaymissions/corpse.dm @@ -33,6 +33,7 @@ var/banType = ROLE_GHOST var/ghost_usable = TRUE var/offstation_role = TRUE // If set to true, the role of the user's mind will be set to offstation + var/death_cooldown = 0 // How long you have to wait after dying before using it again, in deciseconds. People that join as observers are not included. /obj/effect/mob_spawn/attack_ghost(mob/user) var/mob/dead/observer/O = user @@ -50,6 +51,8 @@ if(!O.can_reenter_corpse) to_chat(user, "You have forfeited the right to respawn.") return + if(time_check(user)) + return var/ghost_role = alert("Become [mob_name]? (Warning, You can no longer be cloned!)",,"Yes","No") if(ghost_role == "No") return @@ -86,6 +89,30 @@ /obj/effect/mob_spawn/proc/equip(mob/M) return +/obj/effect/mob_spawn/proc/time_check(mob/user) + var/deathtime = world.time - user.timeofdeath + var/joinedasobserver = FALSE + if(isobserver(user)) + var/mob/dead/observer/G = user + if(G.started_as_observer) + joinedasobserver = TRUE + + var/deathtimeminutes = round(deathtime / 600) + var/pluralcheck = "minute" + if(deathtimeminutes == 0) + pluralcheck = "" + else if(deathtimeminutes == 1) + pluralcheck = " [deathtimeminutes] minute and" + else if(deathtimeminutes > 1) + pluralcheck = " [deathtimeminutes] minutes and" + var/deathtimeseconds = round((deathtime - deathtimeminutes * 600) / 10, 1) + + if(deathtime <= death_cooldown && !joinedasobserver) + to_chat(user, "You have been dead for[pluralcheck] [deathtimeseconds] seconds.") + to_chat(user, "You must wait [death_cooldown / 600] minutes to respawn!") + return TRUE + return FALSE + /obj/effect/mob_spawn/proc/create(ckey, flavour = TRUE, name) var/mob/living/M = new mob_type(get_turf(src)) //living mobs only var/mob/living/carbon/human/H = M diff --git a/code/modules/awaymissions/gateway.dm b/code/modules/awaymissions/gateway.dm index 19cefa36fa5..ba78a3f9b02 100644 --- a/code/modules/awaymissions/gateway.dm +++ b/code/modules/awaymissions/gateway.dm @@ -279,7 +279,7 @@ GLOBAL_DATUM_INIT(the_gateway, /obj/machinery/gateway/centerstation, null) if(M.client) M.client.move_delay = max(world.time + 5, M.client.move_delay) -/obj/machinery/gateway/centeraway/proc/exilecheck(var/mob/living/carbon/M) +/obj/machinery/gateway/centeraway/proc/exilecheck(mob/living/carbon/M) for(var/obj/item/implant/exile/E in M)//Checking that there is an exile implant in the contents if(E.imp_in == M)//Checking that it's actually implanted vs just in their pocket to_chat(M, "The station gate has detected your exile implant and is blocking your entry.") diff --git a/code/modules/awaymissions/mission_code/academy.dm b/code/modules/awaymissions/mission_code/academy.dm index 65c64edd83f..82e0789e955 100644 --- a/code/modules/awaymissions/mission_code/academy.dm +++ b/code/modules/awaymissions/mission_code/academy.dm @@ -94,7 +94,7 @@ smoke.set_up(amount, 0, drop_location()) smoke.start() -/obj/item/dice/d20/fate/proc/effect(var/mob/living/carbon/human/user, roll) +/obj/item/dice/d20/fate/proc/effect(mob/living/carbon/human/user, roll) var/turf/T = get_turf(src) switch(roll) if(1) @@ -114,7 +114,7 @@ //Destroy Equipment T.visible_message("Everything [user] is holding and wearing disappears!") for(var/obj/item/I in user) - if(istype(I, /obj/item/implant) || istype(I, /obj/item/organ)) + if(istype(I, /obj/item/implant)) continue qdel(I) if(5) @@ -217,9 +217,8 @@ if(19) //Instrinct Resistance T.visible_message("[user] looks very robust!") - var/datum/species/S = user.dna.species - S.brute_mod *= 0.5 - S.burn_mod *= 0.5 + user.physiology.brute_mod *= 0.5 + user.physiology.burn_mod *= 0.5 if(20) //Free wizard! diff --git a/code/modules/awaymissions/mission_code/beach.dm b/code/modules/awaymissions/mission_code/beach.dm index 1252943e66f..418e256fd8d 100644 --- a/code/modules/awaymissions/mission_code/beach.dm +++ b/code/modules/awaymissions/mission_code/beach.dm @@ -47,6 +47,10 @@ icon_state = "desert" mouse_opacity = MOUSE_OPACITY_ICON baseturf = /turf/simulated/floor/beach/away/sand + footstep = FOOTSTEP_SAND + barefootstep = FOOTSTEP_SAND + clawfootstep = FOOTSTEP_SAND + heavyfootstep = FOOTSTEP_GENERIC_HEAVY /turf/simulated/floor/beach/away/sand/Initialize(mapload) . = ..() //adds some aesthetic randomness to the beach sand @@ -63,6 +67,10 @@ icon_state = "beach" water_overlay_image = "water_coast" baseturf = /turf/simulated/floor/beach/away/coastline + footstep = FOOTSTEP_WATER + barefootstep = FOOTSTEP_WATER + clawfootstep = FOOTSTEP_WATER + heavyfootstep = FOOTSTEP_WATER /turf/simulated/floor/beach/away/coastline/dense //for boundary "walls" density = TRUE @@ -74,6 +82,10 @@ water_overlay_image = "water_shallow" var/obj/machinery/poolcontroller/linkedcontroller = null baseturf = /turf/simulated/floor/beach/away/water + footstep = FOOTSTEP_WATER + barefootstep = FOOTSTEP_WATER + clawfootstep = FOOTSTEP_WATER + heavyfootstep = FOOTSTEP_WATER /turf/simulated/floor/beach/away/water/Entered(atom/movable/AM, atom/OldLoc) . = ..() 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 0996f214691..2c7be0f1329 100644 --- a/code/modules/awaymissions/mission_code/ghost_role_spawners/golems.dm +++ b/code/modules/awaymissions/mission_code/ghost_role_spawners/golems.dm @@ -61,6 +61,7 @@ anchored = FALSE move_resist = MOVE_FORCE_NORMAL density = FALSE + death_cooldown = 300 SECONDS var/has_owner = FALSE var/can_transfer = TRUE //if golems can switch bodies to this new shell var/mob/living/owner = null //golem's owner if it has one @@ -134,6 +135,25 @@ user.death() return +/obj/effect/mob_spawn/human/golem/attackby(obj/item/I, mob/living/carbon/user, params) + if(!istype(I, /obj/item/slimepotion/transference)) + return ..() + if(iscarbon(user) && can_transfer) + var/human_transfer_choice = alert("Transfer your soul to [src]? (Warning, your old body will die!)", null, "Yes", "No") + if(human_transfer_choice != "Yes") + return + if(QDELETED(src) || uses <= 0 || user.stat >= 1 || QDELETED(I)) + return + if(istype(src, /obj/effect/mob_spawn/human/golem/servant)) + has_owner = FALSE + flavour_text = null + user.visible_message("As [user] applies the potion on the golem shell, a faint light leaves them, moving to [src] and animating it!", + "You apply the potion to [src], feeling your mind leave your body!") + message_admins("[key_name(user)] used [I] to transfer their mind into [src]") + create(ckey = user.ckey, name = user.real_name) + user.death() //Keeps brain intact to prevent forcing redtext + qdel(I) + /obj/effect/mob_spawn/human/golem/servant has_owner = TRUE name = "inert servant golem shell" diff --git a/code/modules/awaymissions/mission_code/stationCollision.dm b/code/modules/awaymissions/mission_code/stationCollision.dm index 8f1e583a2ee..1f440d5496d 100644 --- a/code/modules/awaymissions/mission_code/stationCollision.dm +++ b/code/modules/awaymissions/mission_code/stationCollision.dm @@ -176,7 +176,7 @@ GLOBAL_VAR_INIT(sc_safecode5, "[rand(0,9)]") if(prob(25)) mezzer() -/obj/singularity/narsie/sc_Narsie/consume(var/atom/A) +/obj/singularity/narsie/sc_Narsie/consume(atom/A) if(!A.simulated) return FALSE if(is_type_in_list(A, uneatable)) diff --git a/code/modules/awaymissions/mission_code/wildwest.dm b/code/modules/awaymissions/mission_code/wildwest.dm index 94743390f30..d943da48997 100644 --- a/code/modules/awaymissions/mission_code/wildwest.dm +++ b/code/modules/awaymissions/mission_code/wildwest.dm @@ -50,7 +50,7 @@ var/chargesa = 1 var/insistinga = 0 -/obj/machinery/wish_granter_dark/attack_hand(var/mob/living/carbon/human/user as mob) +/obj/machinery/wish_granter_dark/attack_hand(mob/living/carbon/human/user as mob) usr.set_machine(src) if(chargesa <= 0) diff --git a/code/modules/client/asset_cache.dm b/code/modules/client/asset_cache.dm index 36d51843b8c..ce32a9c28b4 100644 --- a/code/modules/client/asset_cache.dm +++ b/code/modules/client/asset_cache.dm @@ -28,7 +28,7 @@ You can set verify to TRUE if you want send() to sleep until the client has the //This proc sends the asset to the client, but only if it needs it. //This proc blocks(sleeps) unless verify is set to false -/proc/send_asset(var/client/client, var/asset_name, var/verify = TRUE) +/proc/send_asset(client/client, asset_name, verify = TRUE) if(!istype(client)) if(ismob(client)) var/mob/M = client @@ -73,7 +73,7 @@ You can set verify to TRUE if you want send() to sleep until the client has the return 1 //This proc blocks(sleeps) unless verify is set to false -/proc/send_asset_list(var/client/client, var/list/asset_list, var/verify = TRUE) +/proc/send_asset_list(client/client, list/asset_list, verify = TRUE) if(!istype(client)) if(ismob(client)) var/mob/M = client @@ -124,7 +124,7 @@ You can set verify to TRUE if you want send() to sleep until the client has the //This proc will download the files without clogging up the browse() queue, used for passively sending files on connection start. //The proc calls procs that sleep for long times. -/proc/getFilesSlow(var/client/client, var/list/files, var/register_asset = TRUE) +/proc/getFilesSlow(client/client, list/files, register_asset = TRUE) var/concurrent_tracker = 1 for(var/file in files) if(!client) @@ -141,7 +141,7 @@ You can set verify to TRUE if you want send() to sleep until the client has the //This proc "registers" an asset, it adds it to the cache for further use, you cannot touch it from this point on or you'll fuck things up. //if it's an icon or something be careful, you'll have to copy it before further use. -/proc/register_asset(var/asset_name, var/asset) +/proc/register_asset(asset_name, asset) SSassets.cache[asset_name] = asset //These datums are used to populate the asset cache, the proc "register()" does this. @@ -150,7 +150,7 @@ You can set verify to TRUE if you want send() to sleep until the client has the GLOBAL_LIST_EMPTY(asset_datums) //get a assetdatum or make a new one -/proc/get_asset_datum(var/type) +/proc/get_asset_datum(type) if(!(type in GLOB.asset_datums)) return new type() return GLOB.asset_datums[type] diff --git a/code/modules/client/client_defines.dm b/code/modules/client/client_defines.dm index ca30cf25d5a..1950c70556a 100644 --- a/code/modules/client/client_defines.dm +++ b/code/modules/client/client_defines.dm @@ -30,8 +30,8 @@ /////////////// //SOUND STUFF// /////////////// - var/ambience_playing = 0 - var/played = 0 + + var/ambience_playing = FALSE //////////// //SECURITY// diff --git a/code/modules/client/client_procs.dm b/code/modules/client/client_procs.dm index 3f3d50ed8d5..fe1799b5048 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.1536 -#define SUGGESTED_CLIENT_BUILD 1536 // only integers (e.g: 1536, 1539) are useful here. This is the part AFTER the ".", IE 1536 out of 513.1536 +#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 SSD_WARNING_TIMER 30 // cycles, not seconds, so 30=60s @@ -211,7 +211,7 @@ /client/proc/setDir(newdir) dir = newdir -/client/proc/handle_spam_prevention(var/message, var/mute_type, var/throttle = 0) +/client/proc/handle_spam_prevention(message, mute_type, throttle = 0) if(throttle) if((last_message_time + throttle > world.time) && !check_rights(R_ADMIN, 0)) var/wait_time = round(((last_message_time + throttle) - world.time) / 10, 1) @@ -368,6 +368,8 @@ if(!winexists(src, "asset_cache_browser")) // The client is using a custom skin, tell them. to_chat(src, "Unable to access asset cache browser, if you are using a custom skin file, please allow DS to download the updated version, if you are not, then make a bug report. This is not a critical issue but can cause issues with resource downloading, as it is impossible to know when extra resources arrived to you.") + update_ambience_pref() + //This is down here because of the browse() calls in tooltip/New() if(!tooltips) tooltips = new /datum/tooltip(src) @@ -422,6 +424,7 @@ if(movingmob) movingmob.client_mobs_in_contents -= mob UNSETEMPTY(movingmob.client_mobs_in_contents) + SSambience.ambience_listening_clients -= src Master.UpdateTickRate() ..() //Even though we're going to be hard deleted there are still some things that want to know the destroy is happening return QDEL_HINT_HARDDEL_NOW @@ -1218,6 +1221,13 @@ 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) + return // If already properly set we don't want to reset the timer. + SSambience.ambience_listening_clients[src] = world.time + 10 SECONDS //Just wait 10 seconds before the next one aight mate? cheers. + else + SSambience.ambience_listening_clients -= src #undef LIMITER_SIZE #undef CURRENT_SECOND diff --git a/code/modules/client/message.dm b/code/modules/client/message.dm index 1bb9d03dd88..8848e16ace9 100644 --- a/code/modules/client/message.dm +++ b/code/modules/client/message.dm @@ -1,6 +1,6 @@ GLOBAL_LIST_EMPTY(clientmessages) -/proc/addclientmessage(var/ckey, var/message) +/proc/addclientmessage(ckey, message) ckey = ckey(ckey) if(!ckey || !message) return diff --git a/code/modules/client/preference/loadout/gear_tweaks.dm b/code/modules/client/preference/loadout/gear_tweaks.dm index 9446008b762..d462cc1f342 100644 --- a/code/modules/client/preference/loadout/gear_tweaks.dm +++ b/code/modules/client/preference/loadout/gear_tweaks.dm @@ -1,16 +1,16 @@ -/datum/gear_tweak/proc/get_contents(var/metadata) +/datum/gear_tweak/proc/get_contents(metadata) return -/datum/gear_tweak/proc/get_metadata(var/user, var/metadata) +/datum/gear_tweak/proc/get_metadata(user, metadata) return /datum/gear_tweak/proc/get_default() return -/datum/gear_tweak/proc/tweak_gear_data(var/metadata, var/datum/gear_data) +/datum/gear_tweak/proc/tweak_gear_data(metadata, datum/gear_data) return -/datum/gear_tweak/proc/tweak_item(var/obj/item/I, var/metadata) +/datum/gear_tweak/proc/tweak_item(obj/item/I, metadata) return /* @@ -21,22 +21,22 @@ GLOBAL_DATUM_INIT(gear_tweak_free_color_choice, /datum/gear_tweak/color, new()) /datum/gear_tweak/color var/list/valid_colors -/datum/gear_tweak/color/New(var/list/colors) +/datum/gear_tweak/color/New(list/colors) valid_colors = colors ..() -/datum/gear_tweak/color/get_contents(var/metadata) +/datum/gear_tweak/color/get_contents(metadata) return "Color: " /datum/gear_tweak/color/get_default() return valid_colors ? valid_colors[1] : COLOR_GRAY -/datum/gear_tweak/color/get_metadata(var/user, var/metadata) +/datum/gear_tweak/color/get_metadata(user, metadata) if(valid_colors) return input(user, "Choose an item color.", "Character Preference", metadata) as null|anything in valid_colors return input(user, "Choose an item color.", "Global Preference", metadata) as color|null -/datum/gear_tweak/color/tweak_item(var/obj/item/I, var/metadata) +/datum/gear_tweak/color/tweak_item(obj/item/I, metadata) if(valid_colors && !(metadata in valid_colors)) return I.color = metadata @@ -48,20 +48,20 @@ GLOBAL_DATUM_INIT(gear_tweak_free_color_choice, /datum/gear_tweak/color, new()) /datum/gear_tweak/path var/list/valid_paths -/datum/gear_tweak/path/New(var/list/paths) +/datum/gear_tweak/path/New(list/paths) valid_paths = paths ..() -/datum/gear_tweak/path/get_contents(var/metadata) +/datum/gear_tweak/path/get_contents(metadata) return "Type: [metadata]" /datum/gear_tweak/path/get_default() return valid_paths[1] -/datum/gear_tweak/path/get_metadata(var/user, var/metadata) +/datum/gear_tweak/path/get_metadata(user, metadata) return input(user, "Choose a type.", "Character Preference", metadata) as null|anything in valid_paths -/datum/gear_tweak/path/tweak_gear_data(var/metadata, var/datum/gear_data/gear_data) +/datum/gear_tweak/path/tweak_gear_data(metadata, datum/gear_data/gear_data) if(!(metadata in valid_paths)) return gear_data.path = valid_paths[metadata] @@ -77,7 +77,7 @@ GLOBAL_DATUM_INIT(gear_tweak_free_color_choice, /datum/gear_tweak/color, new()) valid_contents = args.Copy() ..() -/datum/gear_tweak/contents/get_contents(var/metadata) +/datum/gear_tweak/contents/get_contents(metadata) return "Contents: [english_list(metadata, and_text = ", ")]" /datum/gear_tweak/contents/get_default() @@ -85,7 +85,7 @@ GLOBAL_DATUM_INIT(gear_tweak_free_color_choice, /datum/gear_tweak/color, new()) for(var/i = 1 to valid_contents.len) . += "Random" -/datum/gear_tweak/contents/get_metadata(var/user, var/list/metadata) +/datum/gear_tweak/contents/get_metadata(user, list/metadata) . = list() for(var/i = metadata.len to valid_contents.len) metadata += "Random" @@ -96,7 +96,7 @@ GLOBAL_DATUM_INIT(gear_tweak_free_color_choice, /datum/gear_tweak/color, new()) else return metadata -/datum/gear_tweak/contents/tweak_item(var/obj/item/I, var/list/metadata) +/datum/gear_tweak/contents/tweak_item(obj/item/I, list/metadata) if(metadata.len != valid_contents.len) return for(var/i = 1 to valid_contents.len) diff --git a/code/modules/client/preference/loadout/loadout_uniform.dm b/code/modules/client/preference/loadout/loadout_uniform.dm index 2911e64e87c..e188431f719 100644 --- a/code/modules/client/preference/loadout/loadout_uniform.dm +++ b/code/modules/client/preference/loadout/loadout_uniform.dm @@ -4,7 +4,7 @@ slot = slot_w_uniform sort_category = "Uniforms and Casual Dress" -/datum/gear/uniform/suits +/datum/gear/uniform/suit subtype_path = /datum/gear/uniform/suit //there's a lot more colors than I thought there were @_@ diff --git a/code/modules/client/preference/preferences.dm b/code/modules/client/preference/preferences.dm index fd4f9d869f2..5a838c3ac9a 100644 --- a/code/modules/client/preference/preferences.dm +++ b/code/modules/client/preference/preferences.dm @@ -23,8 +23,7 @@ GLOBAL_LIST_INIT(special_role_times, list( //minimum age (in days) for accounts ROLE_BORER = 21, ROLE_NINJA = 21, ROLE_GSPIDER = 21, - ROLE_ABDUCTOR = 30, - ROLE_DEVIL = 14 + ROLE_ABDUCTOR = 30 )) /proc/player_old_enough_antag(client/C, role) @@ -49,7 +48,7 @@ GLOBAL_LIST_INIT(special_role_times, list( //minimum age (in days) for accounts return max(0, minimal_player_age_antag - C.player_age) -/proc/check_client_age(client/C, var/days) // If days isn't provided, returns the age of the client. If it is provided, it returns the days until the player_age is equal to or greater than the days variable +/proc/check_client_age(client/C, days) // If days isn't provided, returns the age of the client. If it is provided, it returns the days until the player_age is equal to or greater than the days variable if(!days) return C.player_age else @@ -184,8 +183,19 @@ GLOBAL_LIST_INIT(special_role_times, list( //minimum age (in days) for accounts var/slot_name = "" var/saved = FALSE // Indicates whether the character comes from the database or not - // jukebox volume - var/volume = 100 + /// 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 + "1023" = 100, // CHANNEL_ADMIN + "1022" = 100, // CHANNEL_VOX + "1021" = 100, // CHANNEL_JUKEBOX + "1020" = 100, // CHANNEL_HEARTBEAT + "1019" = 100, // CHANNEL_BUZZ + "1018" = 100, // CHANNEL_AMBIENCE + "1017" = 100, // CHANNEL_ENGINE + ) + /// The volume mixer save timer handle. Used to debounce the DB call to save, to avoid spamming. + var/volume_mixer_saving = null // BYOND membership var/unlock_content = 0 @@ -195,6 +205,8 @@ GLOBAL_LIST_INIT(special_role_times, list( //minimum age (in days) for accounts var/gear_tab = "General" // Parallax var/parallax = PARALLAX_HIGH + /// Do we want to force our runechat colour to be white? + var/force_white_runechat = FALSE /datum/preferences/New(client/C) parent = C @@ -570,20 +582,20 @@ GLOBAL_LIST_INIT(special_role_times, list( //minimum age (in days) for accounts popup.open(0) -/datum/preferences/proc/get_gear_metadata(var/datum/gear/G) +/datum/preferences/proc/get_gear_metadata(datum/gear/G) . = loadout_gear[G.display_name] if(!.) . = list() loadout_gear[G.display_name] = . -/datum/preferences/proc/get_tweak_metadata(var/datum/gear/G, var/datum/gear_tweak/tweak) +/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]"] = . -/datum/preferences/proc/set_tweak_metadata(var/datum/gear/G, var/datum/gear_tweak/tweak, var/new_metadata) +/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 @@ -752,7 +764,7 @@ GLOBAL_LIST_INIT(special_role_times, list( //minimum age (in days) for accounts popup.open(0) return -/datum/preferences/proc/SetJobPreferenceLevel(var/datum/job/job, var/level) +/datum/preferences/proc/SetJobPreferenceLevel(datum/job/job, level) if(!job) return 0 @@ -975,7 +987,7 @@ GLOBAL_LIST_INIT(special_role_times, list( //minimum age (in days) for accounts job_karma_low = 0 -/datum/preferences/proc/GetJobDepartment(var/datum/job/job, var/level) +/datum/preferences/proc/GetJobDepartment(datum/job/job, level) if(!job || !level) return 0 switch(job.department_flag) if(JOBCAT_SUPPORT) @@ -1012,7 +1024,7 @@ GLOBAL_LIST_INIT(special_role_times, list( //minimum age (in days) for accounts return job_karma_low return 0 -/datum/preferences/proc/SetJobDepartment(var/datum/job/job, var/level) +/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 diff --git a/code/modules/client/preference/preferences_mysql.dm b/code/modules/client/preference/preferences_mysql.dm index e94ffc115e0..f921bec24c6 100644 --- a/code/modules/client/preference/preferences_mysql.dm +++ b/code/modules/client/preference/preferences_mysql.dm @@ -10,7 +10,7 @@ toggles, toggles_2, sound, - volume, + volume_mixer, lastchangelog, exp, clientfps, @@ -38,7 +38,7 @@ toggles = text2num(query.item[7]) toggles2 = text2num(query.item[8]) sound = text2num(query.item[9]) - volume = text2num(query.item[10]) + volume_mixer = deserialize_volume_mixer(query.item[10]) lastchangelog = query.item[11] exp = query.item[12] clientfps = text2num(query.item[13]) @@ -50,14 +50,13 @@ //Sanitize ooccolor = sanitize_hexcolor(ooccolor, initial(ooccolor)) - UI_style = sanitize_inlist(UI_style, list("White", "Midnight"), initial(UI_style)) + UI_style = sanitize_inlist(UI_style, list("White", "Midnight", "Plasmafire", "Retro", "Slimecore", "Operative"), initial(UI_style)) default_slot = sanitize_integer(default_slot, 1, max_save_slots, initial(default_slot)) toggles = sanitize_integer(toggles, 0, TOGGLES_TOTAL, initial(toggles)) toggles2 = sanitize_integer(toggles2, 0, TOGGLES_2_TOTAL, initial(toggles2)) sound = sanitize_integer(sound, 0, 65535, initial(sound)) UI_style_color = sanitize_hexcolor(UI_style_color, initial(UI_style_color)) UI_style_alpha = sanitize_integer(UI_style_alpha, 0, 255, initial(UI_style_alpha)) - volume = sanitize_integer(volume, 0, 100, initial(volume)) lastchangelog = sanitize_text(lastchangelog, initial(lastchangelog)) exp = sanitize_text(exp, initial(exp)) clientfps = sanitize_integer(clientfps, 0, 1000, initial(clientfps)) @@ -74,6 +73,11 @@ log_runtime(EXCEPTION("[C.key] had a malformed role entry: '[role]'. Removing!"), src) be_special -= role + // We're saving volume_mixer here as well, so no point in keeping the timer running + if(volume_mixer_saving) + deltimer(volume_mixer_saving) + volume_mixer_saving = null + var/datum/db_query/query = SSdbcore.NewQuery({"UPDATE [format_table_name("player")] SET ooccolor=:ooccolour, @@ -86,7 +90,7 @@ toggles_2=:toggles2, atklog=:atklog, sound=:sound, - volume=:volume, + volume_mixer=:volume_mixer, lastchangelog=:lastchangelog, clientfps=:clientfps, parallax=:parallax @@ -103,7 +107,7 @@ "toggles2" = num2text(toggles2, CEILING(log(10, (TOGGLES_2_TOTAL)), 1)), "atklog" = atklog, "sound" = sound, - "volume" = volume, + "volume_mixer" = serialize_volume_mixer(volume_mixer), "lastchangelog" = lastchangelog, "clientfps" = clientfps, "parallax" = parallax, @@ -657,3 +661,24 @@ saved = FALSE return TRUE + +/** + * Saves [/datum/preferences/proc/volume_mixer] for the current client. + */ +/datum/preferences/proc/save_volume_mixer() + volume_mixer_saving = null + + var/datum/db_query/update_query = SSdbcore.NewQuery( + "UPDATE [format_table_name("player")] SET volume_mixer=:volume_mixer WHERE ckey=:ckey", + list( + "volume_mixer" = serialize_volume_mixer(volume_mixer), + "ckey" = parent.ckey + ) + ) + + if(!update_query.warn_execute()) + qdel(update_query) + return FALSE + + qdel(update_query) + return TRUE diff --git a/code/modules/client/preference/preferences_toggles.dm b/code/modules/client/preference/preferences_toggles.dm index 054fd5ccd39..d3ac6cc874b 100644 --- a/code/modules/client/preference/preferences_toggles.dm +++ b/code/modules/client/preference/preferences_toggles.dm @@ -179,6 +179,7 @@ else to_chat(src, "You will no longer hear ambient sounds.") usr.stop_sound_channel(CHANNEL_AMBIENCE) + update_ambience_pref() SSblackbox.record_feedback("tally", "toggle_verbs", 1, "Toggle Ambience") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/verb/Toggle_Buzz() //No more headaches because headphones bump up shipambience.ogg to insanity levels. @@ -331,3 +332,19 @@ prefs.toggles2 ^= PREFTOGGLE_2_DEATHMESSAGE prefs.save_preferences(src) to_chat(src, "You will [(prefs.toggles2 & PREFTOGGLE_2_DEATHMESSAGE) ? "now" : "no longer"] see a notification in deadchat when a player dies.") + +/client/verb/toggle_reverb() + set name = "Enable/Disable Reverb" + set category = "Preferences" + set desc = "Toggle ingame reverb effects" + prefs.toggles2 ^= PREFTOGGLE_2_REVERB_DISABLE + prefs.save_preferences(src) + to_chat(src, "You will [(prefs.toggles2 & PREFTOGGLE_2_REVERB_DISABLE) ? "no longer" : "now"] get reverb on ingame sounds.") + +/client/verb/toggle_forced_white_runechat() + set name = "Toggle Runechat Colour Forcing" + set category = "Preferences" + 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.") diff --git a/code/modules/client/preference/preferences_volume_mixer.dm b/code/modules/client/preference/preferences_volume_mixer.dm new file mode 100644 index 00000000000..0779dd04839 --- /dev/null +++ b/code/modules/client/preference/preferences_volume_mixer.dm @@ -0,0 +1,84 @@ +/** + * Returns a DB-friendly version of a volume mixer list. + * + * Arguments + * * vm - The volume mixer list to serialize. + */ +/datum/preferences/proc/serialize_volume_mixer(list/vm) + var/list/temp = list() + for(var/channel in vm) + if(!get_channel_name(text2num(channel))) + continue + temp["[channel]"] = vm[channel] + return json_encode(temp) + +/** + * Returns a volume mixer list from text, usually from the DB. + * + * Failure to deserialize will return the current value. + * + * Arguments + * * vmt - The volume mixer list to deserialize. + */ +/datum/preferences/proc/deserialize_volume_mixer(vmt) + if(!istext(vmt)) + return volume_mixer + var/list/vm = json_decode(vmt) + if(!islist(vm)) + return volume_mixer + var/list/temp = list() + // Ensure the default values are present + for(var/channel in volume_mixer) + temp[channel] = volume_mixer[channel] + for(var/channel in vm) + if(!get_channel_name(text2num(channel))) + continue + temp[channel] = vm[channel] + return temp + +/** + * Changes a channel's volume then queues it for DB save. + * + * Arguments: + * * channel - The channel whose volume to change. + * * volume - The new volume, clamped between 0 and 100. + * * debounce_save - Whether to debounce the save call to prevent spamming of DB calls. + */ +/datum/preferences/proc/set_channel_volume(channel, volume, debounce_save = TRUE) + if(!get_channel_name(channel)) + return + // Set the volume + volume = clamp(volume, 0, 100) + volume_mixer["[channel]"] = volume + // Update the sound channel + var/sound/S = sound(null, channel = channel, volume = volume) + S.status = SOUND_UPDATE + SEND_SOUND(parent, S) + // Save it + if(debounce_save) + volume_mixer_saving = addtimer(CALLBACK(src, .proc/save_volume_mixer), 3 SECONDS, TIMER_UNIQUE | TIMER_OVERRIDE | TIMER_STOPPABLE) + else + if(volume_mixer_saving) + deltimer(volume_mixer_saving) + save_volume_mixer() + +/** + * Returns a volume multiplier for the given channel, from 0 to 1 (default). + * + * Arguments: + * * channel - The channel whose volume to get. + */ +/datum/preferences/proc/get_channel_volume(channel) + if(!istext(channel)) + channel = "[channel]" + if(isnull(volume_mixer[channel])) + return 1 + return clamp(volume_mixer[channel] / 100, 0, 1) + +/client/verb/volume_mixer() + set name = "Open Volume Mixer" + set category = "Preferences" + set hidden = TRUE + + var/datum/ui_module/volume_mixer/VM = new() + VM.ui_interact(usr) diff --git a/code/modules/clothing/chameleon.dm b/code/modules/clothing/chameleon.dm index 38b49314667..c34e17943cb 100644 --- a/code/modules/clothing/chameleon.dm +++ b/code/modules/clothing/chameleon.dm @@ -175,7 +175,7 @@ select_look(owner) return 1 -/datum/action/item_action/chameleon/change/proc/emp_randomise(var/amount = EMP_RANDOMISE_TIME) +/datum/action/item_action/chameleon/change/proc/emp_randomise(amount = EMP_RANDOMISE_TIME) START_PROCESSING(SSprocessing, src) random_look(owner) @@ -263,6 +263,7 @@ icon_state = "meson" 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) sprite_sheets = list( diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index 6567a71642b..9baf6c46079 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -101,7 +101,7 @@ return 1 -/obj/item/clothing/proc/refit_for_species(var/target_species) +/obj/item/clothing/proc/refit_for_species(target_species) //Set species_restricted list switch(target_species) if("Human", "Skrell") //humanoid bodytypes @@ -181,7 +181,7 @@ icon_state = "block" slot_flags = SLOT_EARS | SLOT_TWOEARS -/obj/item/clothing/ears/offear/New(var/obj/O) +/obj/item/clothing/ears/offear/New(obj/O) . = ..() name = O.name desc = O.desc @@ -370,7 +370,7 @@ BLIND // can't see anything put_on_delay = 40 //Proc that moves gas/breath masks out of the way -/obj/item/clothing/mask/proc/adjustmask(var/mob/user) +/obj/item/clothing/mask/proc/adjustmask(mob/user) var/mob/living/carbon/human/H = usr //Used to check if the mask is on the head, to check if the hands are full, and to turn off internals if they were on when the mask was pushed out of the way. if(user.incapacitated()) //This check allows you to adjust your masks while you're buckled into chairs or beds. return @@ -442,9 +442,6 @@ BLIND // can't see anything body_parts_covered = FEET slot_flags = SLOT_FEET - var/silence_steps = 0 - var/shoe_sound_footstep = 1 - var/shoe_sound = null var/blood_state = BLOOD_STATE_NOT_BLOODY var/list/bloody_shoes = list(BLOOD_STATE_HUMAN = 0, BLOOD_STATE_XENO = 0, BLOOD_STATE_NOT_BLOODY = 0) @@ -484,36 +481,18 @@ BLIND // can't see anything else return ..() -/obj/item/clothing/shoes/proc/step_action(var/mob/living/carbon/human/H) //squeek squeek - SEND_SIGNAL(src, COMSIG_SHOES_STEP_ACTION) - if(shoe_sound) - var/turf/T = get_turf(H) - - if(!istype(H) || !istype(T)) - return 0 - - if(H.m_intent == MOVE_INTENT_RUN) - if(shoe_sound_footstep >= 2) - if(T.shoe_running_volume) - playsound(src, shoe_sound, T.shoe_running_volume, 1) - shoe_sound_footstep = 0 - else - shoe_sound_footstep++ - else if(T.shoe_walking_volume) - playsound(src, shoe_sound, T.shoe_walking_volume, 1) - - return 1 - /obj/item/proc/negates_gravity() return 0 //Suit /obj/item/clothing/suit - icon = 'icons/obj/clothing/suits.dmi' name = "suit" + 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) + drop_sound = 'sound/items/handling/cloth_drop.ogg' + pickup_sound = 'sound/items/handling/cloth_pickup.ogg' slot_flags = SLOT_OCLOTHING var/blood_overlay_type = "suit" var/suittoggled = FALSE @@ -523,7 +502,7 @@ BLIND // can't see anything var/list/hide_tail_by_species = null //Proc that opens and closes jackets. -/obj/item/clothing/suit/proc/adjustsuit(var/mob/user) +/obj/item/clothing/suit/proc/adjustsuit(mob/user) if(!ignore_suitadjust) if(!user.incapacitated()) if(!HAS_TRAIT(user, TRAIT_HULK)) @@ -571,7 +550,7 @@ BLIND // can't see anything else to_chat(user, "You attempt to button up the velcro on \the [src], before promptly realising how foolish you are.") -/obj/item/clothing/suit/equipped(var/mob/living/carbon/human/user, var/slot) //Handle tail-hiding on a by-species basis. +/obj/item/clothing/suit/equipped(mob/living/carbon/human/user, slot) //Handle tail-hiding on a by-species basis. ..() if(ishuman(user) && hide_tail_by_species && slot == slot_wear_suit) if(user.dna.species.name in hide_tail_by_species) @@ -594,7 +573,7 @@ BLIND // can't see anything //Note: Everything in modules/clothing/spacesuits should have the entire suit grouped together. // Meaning the the suit is defined directly after the corrisponding helmet. Just like below! /obj/item/clothing/head/helmet/space - name = "Space helmet" + name = "space helmet" icon_state = "space" desc = "A special helmet designed for work in a hazardous, low-pressure environment." w_class = WEIGHT_CLASS_NORMAL @@ -617,7 +596,7 @@ BLIND // can't see anything /obj/item/clothing/suit/space - name = "Space suit" + name = "space suit" desc = "A suit that protects against low pressure environments. Has a big 13 on the back." icon_state = "space" item_state = "s_suit" @@ -639,7 +618,9 @@ BLIND // can't see anything resistance_flags = NONE hide_tail_by_species = null species_restricted = list("exclude","Wryn") - + sprite_sheets = list( + "Vox" = 'icons/mob/species/vox/suit.dmi' + ) //Under clothing /obj/item/clothing/under @@ -649,6 +630,9 @@ BLIND // can't see anything 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) + equip_sound = 'sound/items/equip/jumpsuit_equip.ogg' + drop_sound = 'sound/items/handling/cloth_drop.ogg' + pickup_sound = 'sound/items/handling/cloth_pickup.ogg' sprite_sheets = list( "Vox" = 'icons/mob/species/vox/uniform.dmi', diff --git a/code/modules/clothing/glasses/glasses.dm b/code/modules/clothing/glasses/glasses.dm index ea030fb8905..d07b95d18eb 100644 --- a/code/modules/clothing/glasses/glasses.dm +++ b/code/modules/clothing/glasses/glasses.dm @@ -4,31 +4,33 @@ // Pre-upgraded upgradable glasses name = "prescription [name]" -/obj/item/clothing/glasses/attackby(var/obj/item/O as obj, var/mob/user as mob) - if(user.stat || user.restrained() || !ishuman(user)) +/obj/item/clothing/glasses/attackby(obj/item/I, mob/user) + if(!prescription_upgradable || user.stat || user.restrained() || !ishuman(user)) return ..() var/mob/living/carbon/human/H = user - if(prescription_upgradable) - if(istype(O, /obj/item/clothing/glasses/regular)) - if(prescription) - to_chat(H, "You can't possibly imagine how adding more lenses would improve \the [name].") - return - H.unEquip(O) - O.loc = src // Store the glasses for later removal - to_chat(H, "You fit \the [name] with lenses from \the [O].") - prescription = 1 - name = "prescription [name]" + + // Adding prescription glasses + if(istype(I, /obj/item/clothing/glasses/regular)) + if(prescription) + to_chat(H, "You can't possibly imagine how adding more lenses would improve [src].") return - if(prescription && istype(O, /obj/item/screwdriver)) - var/obj/item/clothing/glasses/regular/G = locate() in src - if(!G) - G = new(get_turf(H)) - to_chat(H, "You salvage the prescription lenses from \the [name].") - prescription = 0 - name = initial(name) - H.put_in_hands(G) - return - return ..() + H.unEquip(I) + I.loc = src // Store the glasses for later removal + to_chat(H, "You fit [src] with lenses from [I].") + prescription = TRUE + name = "prescription [initial(name)]" + + // Removing prescription glasses + else if(prescription && istype(I, /obj/item/screwdriver)) + var/obj/item/clothing/glasses/regular/G = locate() in src + if(!G) + G = new(src) + to_chat(H, "You salvage the prescription lenses from [src].") + prescription = FALSE + name = initial(name) + H.put_in_hands(G) + + H.update_nearsighted_effects() /obj/item/clothing/glasses/visor_toggling() ..() @@ -59,7 +61,7 @@ eyes.receive_damage(5) /obj/item/clothing/glasses/meson - name = "Optical Meson Scanner" + name = "optical meson scanner" desc = "Used for seeing walls, floors, and stuff through anything." icon_state = "meson" item_state = "meson" @@ -76,8 +78,8 @@ ) /obj/item/clothing/glasses/meson/night - name = "Night Vision Optical Meson Scanner" - desc = "An Optical Meson Scanner fitted with an amplified visible light spectrum overlay, providing greater visual clarity in darkness." + name = "night vision optical meson scanner" + desc = "An optical meson scanner fitted with an amplified visible light spectrum overlay, providing greater visual clarity in darkness." icon_state = "nvgmeson" origin_tech = "magnets=4;engineering=5;plasmatech=4" see_in_dark = 8 @@ -100,7 +102,7 @@ sharp = 1 /obj/item/clothing/glasses/meson/cyber - name = "Eye Replacement Implant" + name = "eye replacement implant" desc = "An implanted replacement for a left eye with meson vision capabilities." icon_state = "cybereye-green" item_state = "eyepatch" @@ -114,7 +116,7 @@ icon_state = "purple" item_state = "glasses" origin_tech = "magnets=2;engineering=1" - prescription_upgradable = 0 + 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) @@ -130,15 +132,16 @@ return 1 /obj/item/clothing/glasses/science/night - name = "Night Vision Science Goggle" + name = "night vision science goggles" desc = "Now you can science in darkness." icon_state = "nvpurple" item_state = "glasses" see_in_dark = 8 + prescription_upgradable = FALSE lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE //don't render darkness while wearing these /obj/item/clothing/glasses/janitor - name = "Janitorial Goggles" + name = "janitorial goggles" desc = "These'll keep the soap out of your eyes." icon_state = "purple" item_state = "glasses" @@ -148,7 +151,7 @@ ) /obj/item/clothing/glasses/night - name = "Night Vision Goggles" + name = "night vision goggles" desc = "You can totally see in the dark now!" icon_state = "night" item_state = "glasses" @@ -188,7 +191,7 @@ ) /obj/item/clothing/glasses/material - name = "Optical Material Scanner" + name = "optical material scanner" desc = "Very confusing glasses." icon_state = "material" item_state = "glasses" @@ -202,7 +205,7 @@ ) /obj/item/clothing/glasses/material/cyber - name = "Eye Replacement Implant" + name = "eye replacement implant" desc = "An implanted replacement for a left eye with material vision capabilities." icon_state = "cybereye-blue" item_state = "eyepatch" @@ -210,7 +213,7 @@ flags_cover = null /obj/item/clothing/glasses/material/lighting - name = "Neutron Goggles" + name = "neutron goggles" desc = "These odd glasses use a form of neutron-based imaging to completely negate the effects of light and darkness." origin_tech = null vision_flags = 0 @@ -238,8 +241,8 @@ item_state = "hipster_glasses" /obj/item/clothing/glasses/threedglasses + name = "\improper 3D glasses" desc = "A long time ago, people used these glasses to makes images from screens threedimensional." - name = "3D glasses" icon_state = "3d" item_state = "3d" @@ -250,7 +253,7 @@ ) /obj/item/clothing/glasses/gglasses - name = "Green Glasses" + name = "green glasses" desc = "Forest green glasses, like the kind you'd wear when hatching a nasty scheme." icon_state = "gglasses" item_state = "gglasses" @@ -263,8 +266,8 @@ prescription_upgradable = 1 /obj/item/clothing/glasses/sunglasses - desc = "Strangely ancient technology used to help provide rudimentary eye cover. Enhanced shielding blocks many flashes." name = "sunglasses" + desc = "Strangely ancient technology used to help provide rudimentary eye cover. Enhanced shielding blocks many flashes." icon_state = "sun" item_state = "sunglasses" see_in_dark = 1 @@ -279,8 +282,8 @@ ) /obj/item/clothing/glasses/sunglasses_fake - desc = "Cheap, plastic sunglasses. They don't even have UV protection." name = "cheap sunglasses" + desc = "Cheap, plastic sunglasses. They don't even have UV protection." icon_state = "sun" item_state = "sunglasses" see_in_dark = 0 @@ -332,8 +335,8 @@ scan_reagents = 1 /obj/item/clothing/glasses/virussunglasses - desc = "Strangely ancient technology used to help provide rudimentary eye cover. Enhanced shielding blocks many flashes." name = "sunglasses" + desc = "Strangely ancient technology used to help provide rudimentary eye cover. Enhanced shielding blocks many flashes." icon_state = "sun" item_state = "sunglasses" see_in_dark = 1 @@ -347,8 +350,8 @@ ) /obj/item/clothing/glasses/sunglasses/lasers - desc = "A peculiar set of sunglasses; they have various chips and other panels attached to the sides of the frames." name = "high-tech sunglasses" + desc = "A peculiar set of sunglasses; they have various chips and other panels attached to the sides of the frames." flags = NODROP /obj/item/clothing/glasses/sunglasses/lasers/equipped(mob/user, slot) //grant them laser eyes upon equipping it. @@ -401,7 +404,7 @@ item_state = "bigsunglasses" /obj/item/clothing/glasses/thermal - name = "Optical Thermal Scanner" + name = "optical thermal scanner" desc = "Thermals in the shape of glasses." icon_state = "thermal" item_state = "glasses" @@ -421,25 +424,25 @@ ..() /obj/item/clothing/glasses/thermal/monocle - name = "Thermoncle" - desc = "A monocle thermal." + name = "thermoncle" + desc = "A thermal monocle." icon_state = "thermoncle" flags_cover = null //doesn't protect eyes because it's a monocle, duh /obj/item/clothing/glasses/thermal/eyepatch - name = "Optical Thermal Eyepatch" + name = "optical thermal eyepatch" desc = "An eyepatch with built-in thermal optics" icon_state = "eyepatch" item_state = "eyepatch" /obj/item/clothing/glasses/thermal/jensen - name = "Optical Thermal Implants" + name = "optical thermal implant" desc = "A set of implantable lenses designed to augment your vision" icon_state = "thermalimplants" item_state = "syringe_kit" /obj/item/clothing/glasses/thermal/cyber - name = "Eye Replacement Implant" + name = "eye replacement implant" desc = "An implanted replacement for a left eye with thermal vision capabilities." icon_state = "cybereye-red" item_state = "eyepatch" @@ -454,6 +457,7 @@ vision_flags = SEE_TURFS|SEE_MOBS|SEE_OBJS see_in_dark = 8 scan_reagents = 1 + prescription = TRUE flags = NODROP flags_cover = null lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_INVISIBLE diff --git a/code/modules/clothing/glasses/hud.dm b/code/modules/clothing/glasses/hud.dm index 04d603631d4..f0dce270fb6 100644 --- a/code/modules/clothing/glasses/hud.dm +++ b/code/modules/clothing/glasses/hud.dm @@ -28,7 +28,7 @@ desc = desc + " The display flickers slightly." /obj/item/clothing/glasses/hud/health - name = "\improper Health Scanner HUD" + name = "health scanner HUD" desc = "A heads-up display that scans the humans in view and provides accurate data about their health status." icon_state = "healthhud" origin_tech = "magnets=3;biotech=2" @@ -42,7 +42,7 @@ ) /obj/item/clothing/glasses/hud/health/night - name = "\improper Night Vision Health Scanner HUD" + name = "night vision health scanner HUD" desc = "An advanced medical head-up display that allows doctors to find patients in complete darkness." icon_state = "healthhudnight" item_state = "glasses" @@ -60,7 +60,7 @@ tint = 1 /obj/item/clothing/glasses/hud/diagnostic - name = "Diagnostic HUD" + name = "diagnostic HUD" 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" @@ -73,7 +73,7 @@ ) /obj/item/clothing/glasses/hud/diagnostic/night - name = "Night Vision Diagnostic HUD" + name = "night vision diagnostic HUD" desc = "A robotics diagnostic HUD fitted with a light amplifier." icon_state = "diagnostichudnight" item_state = "glasses" @@ -91,7 +91,7 @@ tint = 1 /obj/item/clothing/glasses/hud/security - name = "\improper Security HUD" + name = "security HUD" desc = "A heads-up display that scans the humans in view and provides accurate data about their ID status and security records." icon_state = "securityhud" origin_tech = "magnets=3;combat=2" @@ -115,7 +115,7 @@ lighting_alpha = LIGHTING_PLANE_ALPHA_MOSTLY_VISIBLE /obj/item/clothing/glasses/hud/security/night - name = "\improper Night Vision Security HUD" + name = "night vision security HUD" desc = "An advanced heads-up display which provides id data and vision in complete darkness." icon_state = "securityhudnight" origin_tech = "magnets=4;combat=4;plasmatech=4;engineering=5" @@ -146,7 +146,7 @@ prescription = 1 /obj/item/clothing/glasses/hud/hydroponic - name = "Hydroponic HUD" + name = "hydroponic HUD" desc = "A heads-up display capable of analyzing the health and status of plants growing in hydro trays and soil." icon_state = "hydroponichud" HUDType = DATA_HUD_HYDROPONIC @@ -158,7 +158,7 @@ ) /obj/item/clothing/glasses/hud/hydroponic/night - name = "Night Vision Hydroponic HUD" + name = "night vision hydroponic HUD" desc = "A hydroponic HUD fitted with a light amplifier." icon_state = "hydroponichudnight" item_state = "glasses" @@ -201,7 +201,7 @@ toggle_veil() /obj/item/clothing/glasses/hud/skills - name = "Skills HUD" + name = "skills HUD" desc = "A heads-up display capable of showing the employment history records of NT crew members." icon_state = "skill" item_state = "glasses" @@ -214,7 +214,7 @@ ) /obj/item/clothing/glasses/hud/skills/sunglasses - name = "Skills HUD Sunglasses" + name = "skills HUD sunglasses" desc = "Sunglasses with a build-in skills HUD, showing the employment history of nearby NT crew members." icon_state = "sunhudskill" see_in_dark = 1 // None of these three can be converted to booleans. Do not try it. diff --git a/code/modules/clothing/gloves/color.dm b/code/modules/clothing/gloves/color.dm index ec4ac9bbf15..146ca3cf25e 100644 --- a/code/modules/clothing/gloves/color.dm +++ b/code/modules/clothing/gloves/color.dm @@ -1,6 +1,6 @@ /obj/item/clothing/gloves/color/yellow - desc = "These gloves will protect the wearer from electric shock." name = "insulated gloves" + desc = "These gloves will protect the wearer from electric shock." icon_state = "yellow" item_state = "ygloves" siemens_coefficient = 0 @@ -30,6 +30,7 @@ to_chat(H, "You feel like you have UNLIMITED POWER!!") /obj/item/clothing/gloves/color/yellow/power/dropped(mob/user, slot) + ..() if(!ishuman(user)) return var/mob/living/carbon/human/H = user @@ -51,8 +52,8 @@ siemens_coefficient = 1 /obj/item/clothing/gloves/color/fyellow //Cheap Chinese Crap - desc = "These gloves are cheap copies of the coveted gloves, no way this can end badly." name = "budget insulated gloves" + desc = "These gloves are cheap copies of the coveted gloves, no way this can end badly." icon_state = "yellow" item_state = "ygloves" siemens_coefficient = 1 //Set to a default of 1, gets overridden in New() @@ -65,16 +66,16 @@ siemens_coefficient = pick(0,0.5,0.5,0.5,0.5,0.75,1.5) /obj/item/clothing/gloves/color/fyellow/old - desc = "Old and worn out insulated gloves, hopefully they still work." name = "worn out insulated gloves" + desc = "Old and worn out insulated gloves, hopefully they still work." /obj/item/clothing/gloves/color/fyellow/old/New() ..() siemens_coefficient = pick(0,0,0,0.5,0.5,0.5,0.75) /obj/item/clothing/gloves/color/black - desc = "These gloves are fire-resistant." name = "black gloves" + desc = "These gloves are fire-resistant." icon_state = "black" item_state = "bgloves" item_color="brown" @@ -225,8 +226,8 @@ /obj/item/clothing/gloves/color/captain - desc = "Regal blue gloves, with a nice gold trim. Swanky." name = "captain's gloves" + desc = "Regal blue gloves, with a nice gold trim. Swanky." icon_state = "captain" item_state = "egloves" item_color = "captain" diff --git a/code/modules/clothing/gloves/miscellaneous.dm b/code/modules/clothing/gloves/miscellaneous.dm index 4345a4542d2..a6ece08feee 100644 --- a/code/modules/clothing/gloves/miscellaneous.dm +++ b/code/modules/clothing/gloves/miscellaneous.dm @@ -12,8 +12,8 @@ clipped = 1 /obj/item/clothing/gloves/cyborg - desc = "beep boop borp" name = "cyborg gloves" + desc = "beep boop borp" icon_state = "black" item_state = "r_hands" @@ -25,8 +25,8 @@ can_leave_fibers = FALSE /obj/item/clothing/gloves/combat - desc = "These tactical gloves are both insulated and offer protection from heat sources." name = "combat gloves" + desc = "These tactical gloves are both insulated and offer protection from heat sources." icon_state = "combat" item_state = "swat_gl" siemens_coefficient = 0 @@ -55,8 +55,8 @@ 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 - desc = "These leather gloves protect against thorns, barbs, prickles, spikes and other harmful objects of floral origin." name = "botanist's leather gloves" + desc = "These leather gloves protect against thorns, barbs, prickles, spikes and other harmful objects of floral origin." icon_state = "leather" item_state = "ggloves" permeability_coefficient = 0.9 @@ -68,8 +68,8 @@ 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 - desc = "Used for handling all things bat related." name = "batgloves" + desc = "Used for handling all things bat related." icon_state = "bmgloves" item_state = "bmgloves" item_color="bmgloves" @@ -157,7 +157,7 @@ update_icon() /obj/item/clothing/gloves/fingerless/rapid - name = "Gloves of the North Star" + name = "gloves of the North Star" desc = "Just looking at these fills you with an urge to beat the shit out of people." var/accepted_intents = list(INTENT_HARM) var/click_speed_modifier = CLICK_CD_RAPID @@ -166,20 +166,20 @@ var/mob/living/M = loc if(M.a_intent in accepted_intents) - if(istype(M.mind.martial_art, /datum/martial_art/cqc)) + 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 /obj/item/clothing/gloves/fingerless/rapid/admin - name = "Advanced Interactive Gloves" + name = "advanced interactive gloves" desc = "The gloves are covered in indecipherable buttons and dials, your mind warps by merely looking at them." accepted_intents = list(INTENT_HELP, INTENT_DISARM, INTENT_GRAB, INTENT_HARM) click_speed_modifier = 0 siemens_coefficient = 0 /obj/item/clothing/gloves/fingerless/rapid/headpat - name = "Gloves of Headpats" + name = "gloves of headpats" desc = "You feel the irresistable urge to give headpats by merely glimpsing these." accepted_intents = list(INTENT_HELP) diff --git a/code/modules/clothing/head/hardhat.dm b/code/modules/clothing/head/hardhat.dm index b5d4b94038f..95c4e04b3ac 100644 --- a/code/modules/clothing/head/hardhat.dm +++ b/code/modules/clothing/head/hardhat.dm @@ -55,14 +55,12 @@ icon_state = "hardhat0_orange" item_state = "hardhat0_orange" item_color = "orange" - dog_fashion = null /obj/item/clothing/head/hardhat/red + name = "firefighter helmet" icon_state = "hardhat0_red" item_state = "hardhat0_red" item_color = "red" - dog_fashion = null - name = "firefighter helmet" flags = STOPSPRESSUREDMAGE heat_protection = HEAD max_heat_protection_temperature = FIRE_HELM_MAX_TEMP_PROTECT @@ -84,14 +82,13 @@ icon_state = "hardhat0_dblue" item_state = "hardhat0_dblue" item_color = "dblue" - dog_fashion = null /obj/item/clothing/head/hardhat/atmos + name = "atmospheric technician's firefighting helmet" + desc = "A firefighter's helmet, able to keep the user cool in any situation." icon_state = "hardhat0_atmos" item_state = "hardhat0_atmos" item_color = "atmos" - name = "atmospheric technician's firefighting helmet" - desc = "A firefighter's helmet, able to keep the user cool in any situation." flags = STOPSPRESSUREDMAGE flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE heat_protection = HEAD diff --git a/code/modules/clothing/head/helmet.dm b/code/modules/clothing/head/helmet.dm index bafe3a9f0a9..e8ce88dba1e 100644 --- a/code/modules/clothing/head/helmet.dm +++ b/code/modules/clothing/head/helmet.dm @@ -162,7 +162,7 @@ icon_state = "roman" item_state = "roman" strip_delay = 100 - dog_fashion = null + dog_fashion = /datum/dog_fashion/head/roman /obj/item/clothing/head/helmet/roman/fake desc = "An ancient helmet made of plastic and leather." diff --git a/code/modules/clothing/head/jobs.dm b/code/modules/clothing/head/jobs.dm index 3ed9aafda44..9f01c2edcdb 100644 --- a/code/modules/clothing/head/jobs.dm +++ b/code/modules/clothing/head/jobs.dm @@ -25,7 +25,7 @@ name = "captain's parade cap" desc = "Worn only by Captains with an abundance of class." icon_state = "capcap" - dog_fashion = null + dog_fashion = /datum/dog_fashion/head/captain //Head of Personnel /obj/item/clothing/head/hopcap @@ -101,16 +101,18 @@ //Security /obj/item/clothing/head/HoS - name = "head of security cap" + 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) strip_delay = 80 + dog_fashion = /datum/dog_fashion/head/HoS /obj/item/clothing/head/HoS/beret - name = "head of security beret" + name = "head of security's beret" desc = "A robust beret for the Head of Security, for looking stylish while not sacrificing protection." icon_state = "beret_hos_black" + dog_fashion = /datum/dog_fashion/head/HoS /obj/item/clothing/head/warden name = "warden's police hat" @@ -134,7 +136,7 @@ icon_state = "beret_officer" 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 = null + dog_fashion = /datum/dog_fashion/head/beret/sec /obj/item/clothing/head/beret/sec/warden name = "warden's beret" @@ -153,7 +155,7 @@ icon_state = "beret_atmospherics" /obj/item/clothing/head/beret/ce - name = "chief engineer beret" + name = "chief engineer's beret" desc = "A white beret with the engineering insignia emblazoned on it. Its owner knows what they're doing. Probably." icon_state = "beret_ce" @@ -180,15 +182,19 @@ /obj/item/clothing/head/surgery/purple 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 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 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 /obj/item/clothing/head/surgery/black - desc = "A cap coroners wear during autopsies. Keeps their hair from falling into the cadavers. It is as dark than the coroner's humor." + desc = "A cap coroners wear during autopsies. Keeps their hair from falling into the cadavers. It is as dark as the coroner's humor." icon_state = "surgcap_black" + dog_fashion = /datum/dog_fashion/head/surgery diff --git a/code/modules/clothing/head/misc.dm b/code/modules/clothing/head/misc.dm index 543ba75160a..388fa0374ed 100644 --- a/code/modules/clothing/head/misc.dm +++ b/code/modules/clothing/head/misc.dm @@ -21,10 +21,11 @@ item_state = "pwig" /obj/item/clothing/head/justice_wig - name = "Justice wig" + name = "justice wig" desc = "A fancy powdered wig given to arbitrators of the law. It looks itchy." icon_state = "jwig" item_state = "jwig" + dog_fashion = /datum/dog_fashion/head/justice_wig /obj/item/clothing/head/beret/blue icon_state = "beret_blue" @@ -187,6 +188,7 @@ icon_state = "bowler_hat" item_state = "bowler_hat" desc = "For that industrial age look." + dog_fashion = /datum/dog_fashion/head/bowlerhat /obj/item/clothing/head/beaverhat name = "beaver hat" @@ -298,10 +300,10 @@ flags = BLOCKHAIR /obj/item/clothing/head/xenos - name = "xenos helmet" + name = "xeno helmet" + desc = "A helmet made out of chitinous alien hide." icon_state = "xenos" item_state = "xenos_helm" - desc = "A helmet made out of chitinous alien hide." flags = BLOCKHAIR flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE @@ -330,51 +332,51 @@ "Vox" = 'icons/mob/species/vox/head.dmi' ) -/obj/item/clothing/head/stalhelm - name = "Clown Stalhelm" +/obj/item/clothing/head/stalhelm //Why do these exist + name = "clown stalhelm" desc = "The typical clown soldier's helmet." icon_state = "stalhelm" item_state = "stalhelm" flags = BLOCKHAIR flags_inv = HIDEEARS -/obj/item/clothing/head/panzer - name = "Clown HONKMech Cap" +/obj/item/clothing/head/panzer //Why + name = "clown HONKMech cap" desc = "The softcap worn by HONK Mech pilots." icon_state = "panzercap" item_state = "panzercap" flags = BLOCKHAIR -/obj/item/clothing/head/naziofficer - name = "Clown Officer Cap" +/obj/item/clothing/head/naziofficer //Ah, come on + name = "clown officer cap" desc = "The peaked clown officer's cap, disturbingly similar to the warden's." icon_state = "officercap" item_state = "officercap" flags = BLOCKHAIR flags_inv = HIDEEARS -/obj/item/clothing/head/beret/purple +/obj/item/clothing/head/beret/purple //Fluff? name = "Pierson Family Beret" desc = " A purple beret, with a small golden crescent moon sewn onto it." icon_state = "beret_purple" item_state = "purpleberet" /obj/item/clothing/head/beret/centcom/officer - name = "officers beret" + 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) strip_delay = 60 /obj/item/clothing/head/beret/centcom/officer/navy - name = "navy blue officers beret" + 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) strip_delay = 60 /obj/item/clothing/head/beret/centcom/captain - name = "captains beret" + name = "captain's beret" desc = "A white beret adorned with the shield—a cobalt kite shield with an engraved sword—of the Nanotrasen security forces, worn only by those captaining a vessel of the Nanotrasen Navy." icon_state = "beret_centcom_captain" @@ -401,8 +403,8 @@ dog_fashion = null /obj/item/clothing/head/cone - desc = "This cone is trying to warn you of something!" name = "warning cone" + desc = "This cone is trying to warn you of something!" icon = 'icons/obj/janitor.dmi' icon_state = "cone" item_state = "cone" @@ -448,7 +450,7 @@ /obj/item/clothing/head/lordadmiralhat - name = "Lord Admiral's Hat" + name = "lord admiral's hat" desc = "A hat suitable for any man of high and exalted rank." icon_state = "lordadmiralhat" item_state = "lordadmiralhat" diff --git a/code/modules/clothing/head/misc_special.dm b/code/modules/clothing/head/misc_special.dm index 8d37c2a872f..28dd6f4cb55 100644 --- a/code/modules/clothing/head/misc_special.dm +++ b/code/modules/clothing/head/misc_special.dm @@ -198,7 +198,7 @@ var/icon/mob dog_fashion = /datum/dog_fashion/head/kitty -/obj/item/clothing/head/kitty/update_icon(var/mob/living/carbon/human/user) +/obj/item/clothing/head/kitty/update_icon(mob/living/carbon/human/user) if(!istype(user)) return var/obj/item/organ/external/head/head_organ = user.get_organ("head") @@ -210,7 +210,7 @@ icon_override = mob -/obj/item/clothing/head/kitty/equipped(var/mob/M, slot) +/obj/item/clothing/head/kitty/equipped(mob/M, slot) . = ..() if(ishuman(M) && slot == slot_head) update_icon(M) @@ -221,7 +221,7 @@ desc = "A pair of mouse ears. Squeak!" icon_state = "mousey" -/obj/item/clothing/head/kitty/mouse/update_icon(var/mob/living/carbon/human/user) +/obj/item/clothing/head/kitty/mouse/update_icon(mob/living/carbon/human/user) if(!istype(user)) return var/obj/item/organ/external/head/head_organ = user.get_organ("head") mob = new/icon("icon" = 'icons/mob/head.dmi', "icon_state" = "mousey") diff --git a/code/modules/clothing/head/soft_caps.dm b/code/modules/clothing/head/soft_caps.dm index 7ac87e5d5bc..dd2c70692f5 100644 --- a/code/modules/clothing/head/soft_caps.dm +++ b/code/modules/clothing/head/soft_caps.dm @@ -38,35 +38,35 @@ desc = "It's a baseball hat in a tasteless red colour." icon_state = "redsoft" item_color = "red" - dog_fashion = null + dog_fashion = /datum/dog_fashion/head/softcap /obj/item/clothing/head/soft/blue name = "blue cap" desc = "It's a baseball hat in a tasteless blue colour." icon_state = "bluesoft" item_color = "blue" - dog_fashion = null + dog_fashion = /datum/dog_fashion/head/softcap /obj/item/clothing/head/soft/green name = "green cap" desc = "It's a baseball hat in a tasteless green colour." icon_state = "greensoft" item_color = "green" - dog_fashion = null + dog_fashion = /datum/dog_fashion/head/softcap /obj/item/clothing/head/soft/yellow name = "yellow cap" desc = "It's a baseball hat in a tasteless yellow colour." icon_state = "yellowsoft" item_color = "yellow" - dog_fashion = null + dog_fashion = /datum/dog_fashion/head/softcap /obj/item/clothing/head/soft/grey name = "grey cap" desc = "It's a baseball hat in a tasteful grey colour." icon_state = "greysoft" item_color = "grey" - dog_fashion = null + dog_fashion = /datum/dog_fashion/head/softcap /obj/item/clothing/head/soft/orange name = "orange cap" @@ -79,28 +79,28 @@ desc = "It's a baseball hat in a tasteless white colour." icon_state = "mimesoft" item_color = "mime" - dog_fashion = null + dog_fashion = /datum/dog_fashion/head/softcap /obj/item/clothing/head/soft/purple name = "purple cap" desc = "It's a baseball hat in a tasteless purple colour." icon_state = "purplesoft" item_color = "purple" - dog_fashion = null + dog_fashion = /datum/dog_fashion/head/softcap /obj/item/clothing/head/soft/black name = "black cap" desc = "It's a baseball hat in a tasteless black colour." icon_state = "blacksoft" item_color = "black" - dog_fashion = null + dog_fashion = /datum/dog_fashion/head/softcap /obj/item/clothing/head/soft/rainbow name = "rainbow cap" desc = "It's a baseball hat in a bright rainbow of colors." icon_state = "rainbowsoft" item_color = "rainbow" - dog_fashion = null + dog_fashion = /datum/dog_fashion/head/softcap /obj/item/clothing/head/soft/sec name = "security cap" @@ -109,7 +109,7 @@ item_color = "sec" 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 = null + dog_fashion = /datum/dog_fashion/head/softcap /obj/item/clothing/head/soft/sec/corp name = "corporate security cap" @@ -118,15 +118,15 @@ item_color = "corp" /obj/item/clothing/head/soft/solgov - name = "Sol Federation marine cap" - desc = "A soft cap worn by marines of the Sol Federation." + name = "\improper Trans-Solar Federation marine cap" + desc = "A soft cap worn by marines of the Trans-Solar Federation." icon_state = "solgovsoft" item_color = "solgov" dog_fashion = null /obj/item/clothing/head/soft/solgov/command - name = "Sol Federation Lieutenant's cap" - desc = "A soft cap worn by marines of the Sol Federation. The insignia signifies the wearer bears the rank of a Lieutenant." + 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." icon_state = "solgovcsoft" item_color = "solgovc" dog_fashion = null diff --git a/code/modules/clothing/masks/boxing.dm b/code/modules/clothing/masks/boxing.dm index 14afa81cb58..090011ce47d 100644 --- a/code/modules/clothing/masks/boxing.dm +++ b/code/modules/clothing/masks/boxing.dm @@ -18,11 +18,11 @@ "Drask" = 'icons/mob/species/drask/mask.dmi' ) -/obj/item/clothing/mask/balaclava/attack_self(var/mob/user) +/obj/item/clothing/mask/balaclava/attack_self(mob/user) adjustmask(user) /obj/item/clothing/mask/luchador - name = "Luchador Mask" + name = "luchador mask" desc = "Worn by robust fighters, flying high to defeat their foes!" icon_state = "luchag" item_state = "luchag" @@ -40,13 +40,13 @@ ) /obj/item/clothing/mask/luchador/tecnicos - name = "Tecnicos Mask" + name = "tecnicos mask" desc = "Worn by robust fighters who uphold justice and fight honorably." icon_state = "luchador" item_state = "luchador" /obj/item/clothing/mask/luchador/rudos - name = "Rudos Mask" + name = "rudos mask" desc = "Worn by robust fighters who are willing to do anything to win." icon_state = "luchar" item_state = "luchar" diff --git a/code/modules/clothing/masks/breath.dm b/code/modules/clothing/masks/breath.dm index 032062461e7..28a0dad852d 100644 --- a/code/modules/clothing/masks/breath.dm +++ b/code/modules/clothing/masks/breath.dm @@ -1,6 +1,6 @@ /obj/item/clothing/mask/breath - desc = "A close-fitting mask that can be connected to an air supply." name = "breath mask" + desc = "A close-fitting mask that can be connected to an air supply." icon_state = "breath" item_state = "breath" flags = AIRTIGHT @@ -21,7 +21,7 @@ "Plasmaman" = 'icons/mob/species/plasmaman/mask.dmi' ) -/obj/item/clothing/mask/breath/attack_self(var/mob/user) +/obj/item/clothing/mask/breath/attack_self(mob/user) adjustmask(user) /obj/item/clothing/mask/breath/AltClick(mob/user) @@ -31,23 +31,23 @@ adjustmask(user) /obj/item/clothing/mask/breath/medical - desc = "A close-fitting sterile mask that can be connected to an air supply." name = "medical mask" + desc = "A close-fitting sterile mask that can be connected to an air supply." icon_state = "medical" item_state = "medical" permeability_coefficient = 0.01 put_on_delay = 10 /obj/item/clothing/mask/breath/vox - desc = "A weirdly-shaped breath mask." name = "vox breath mask" + desc = "A weirdly-shaped breath mask." icon_state = "voxmask" item_state = "voxmask" permeability_coefficient = 0.01 species_restricted = list("Vox", "Vox Armalis") //These should fit the "Mega Vox" just fine. actions_types = list() -/obj/item/clothing/mask/breath/vox/attack_self(var/mob/user) +/obj/item/clothing/mask/breath/vox/attack_self(mob/user) return /obj/item/clothing/mask/breath/vox/AltClick(mob/user) diff --git a/code/modules/clothing/masks/gasmask.dm b/code/modules/clothing/masks/gasmask.dm index b02bfc537bd..d9a3c6030d1 100644 --- a/code/modules/clothing/masks/gasmask.dm +++ b/code/modules/clothing/masks/gasmask.dm @@ -234,7 +234,7 @@ "dredd" = "I am, the LAW!" ) /obj/item/clothing/mask/gas/sechailer/hos - name = "\improper HOS SWAT mask" + name = "head of security's SWAT mask" desc = "A close-fitting tactical mask with an especially aggressive Compli-o-nator 3000. It has a tan stripe." icon_state = "hosmask" aggressiveness = 3 @@ -242,7 +242,7 @@ actions_types = list(/datum/action/item_action/halt, /datum/action/item_action/selectphrase) /obj/item/clothing/mask/gas/sechailer/warden - name = "\improper Warden SWAT mask" + name = "warden's SWAT mask" desc = "A close-fitting tactical mask with an especially aggressive Compli-o-nator 3000. It has a blue stripe." icon_state = "wardenmask" aggressiveness = 3 diff --git a/code/modules/clothing/masks/miscellaneous.dm b/code/modules/clothing/masks/miscellaneous.dm index 15895046dbc..8514c038a58 100644 --- a/code/modules/clothing/masks/miscellaneous.dm +++ b/code/modules/clothing/masks/miscellaneous.dm @@ -176,7 +176,7 @@ return loc return FALSE -/obj/item/clothing/mask/muzzle/safety/shock/proc/process_activation(var/obj/D, var/normal = 1, var/special = 1) +/obj/item/clothing/mask/muzzle/safety/shock/proc/process_activation(obj/D, normal = 1, special = 1) visible_message("[bicon(src)] *beep* *beep*", "*beep* *beep*") var/mob/M = can_shock(loc) if(M) @@ -225,7 +225,7 @@ ) -/obj/item/clothing/mask/surgical/attack_self(var/mob/user) +/obj/item/clothing/mask/surgical/attack_self(mob/user) adjustmask(user) /obj/item/clothing/mask/fakemoustache @@ -408,7 +408,7 @@ w_class = WEIGHT_CLASS_SMALL /obj/item/clothing/mask/gas/clown_hat/pennywise - name = "Pennywise Mask" + name = "\improper Pennywise mask" desc = "It's the eater of worlds, and of children." icon_state = "pennywise_mask" item_state = "pennywise_mask" @@ -436,7 +436,7 @@ ) actions_types = list(/datum/action/item_action/adjust) -/obj/item/clothing/mask/bandana/attack_self(var/mob/user) +/obj/item/clothing/mask/bandana/attack_self(mob/user) adjustmask(user) /obj/item/clothing/mask/bandana/red diff --git a/code/modules/clothing/shoes/magboots.dm b/code/modules/clothing/shoes/magboots.dm index abe67fb68e6..1477e4673ad 100644 --- a/code/modules/clothing/shoes/magboots.dm +++ b/code/modules/clothing/shoes/magboots.dm @@ -1,6 +1,6 @@ /obj/item/clothing/shoes/magboots - desc = "Magnetic boots, often used during extravehicular activity to ensure the user remains safely attached to the vehicle." name = "magboots" + desc = "Magnetic boots, often used during extravehicular activity to ensure the user remains safely attached to the vehicle." icon_state = "magboots0" origin_tech = "materials=3;magnets=4;engineering=4" var/magboot_state = "magboots" @@ -46,8 +46,8 @@ /obj/item/clothing/shoes/magboots/advance - desc = "Advanced magnetic boots that have a lighter magnetic pull, placing less burden on the wearer." name = "advanced magboots" + desc = "Advanced magnetic boots that have a lighter magnetic pull, placing less burden on the wearer." icon_state = "advmag0" magboot_state = "advmag" gustprotection = TRUE @@ -56,20 +56,20 @@ resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF /obj/item/clothing/shoes/magboots/syndie - desc = "Reverse-engineered magnetic boots that have a heavy magnetic pull. Property of Gorlex Marauders." name = "blood-red magboots" + desc = "Reverse-engineered magnetic boots that have a heavy magnetic pull. Property of Gorlex Marauders." icon_state = "syndiemag0" magboot_state = "syndiemag" origin_tech = "magnets=4;syndicate=2" /obj/item/clothing/shoes/magboots/syndie/advance //For the Syndicate Strike Team - desc = "Reverse-engineered magboots that appear to be based on an advanced model, as they have a lighter magnetic pull. Property of Gorlex Marauders." name = "advanced blood-red magboots" + desc = "Reverse-engineered magboots that appear to be based on an advanced model, as they have a lighter magnetic pull. Property of Gorlex Marauders." slowdown_active = SHOES_SLOWDOWN /obj/item/clothing/shoes/magboots/clown - desc = "The prankster's standard-issue clowning shoes. Damn they're huge! There's a red light on the side." name = "clown shoes" + desc = "The prankster's standard-issue clowning shoes. Damn they're huge! There's a red light on the side." icon_state = "clownmag0" magboot_state = "clownmag" item_state = "clown_shoes" @@ -78,11 +78,13 @@ slowdown_passive = SHOES_SLOWDOWN+1 magpulse_name = "honk-powered traction system" item_color = "clown" - silence_steps = 1 - shoe_sound = "clownstep" origin_tech = "magnets=4;syndicate=2" var/enabled_waddle = TRUE +/obj/item/clothing/shoes/magboots/clown/Initialize(mapload) + . = ..() + AddComponent(/datum/component/squeak, list('sound/effects/clownstep1.ogg' = 1, 'sound/effects/clownstep2.ogg' = 1), 50, falloff_exponent = 20) //die off quick please + /obj/item/clothing/shoes/magboots/clown/equipped(mob/user, slot) . = ..() if(slot == slot_shoes && enabled_waddle) diff --git a/code/modules/clothing/shoes/miscellaneous.dm b/code/modules/clothing/shoes/miscellaneous.dm index 240d6181b66..ed0fbd60307 100644 --- a/code/modules/clothing/shoes/miscellaneous.dm +++ b/code/modules/clothing/shoes/miscellaneous.dm @@ -22,16 +22,16 @@ flags = NOSLIP /obj/item/clothing/shoes/sandal - desc = "A pair of rather plain, wooden sandals." name = "sandals" + desc = "A pair of rather plain, wooden sandals." icon_state = "wizard" strip_delay = 50 put_on_delay = 50 magical = TRUE /obj/item/clothing/shoes/sandal/marisa - desc = "A pair of magic, black shoes." name = "magic shoes" + desc = "A pair of magic, black shoes." icon_state = "black" resistance_flags = FIRE_PROOF | ACID_PROOF @@ -41,8 +41,8 @@ resistance_flags = FIRE_PROOF | ACID_PROOF /obj/item/clothing/shoes/galoshes - desc = "A pair of yellow rubber boots, designed to prevent slipping on wet surfaces." name = "galoshes" + desc = "A pair of yellow rubber boots, designed to prevent slipping on wet surfaces." icon_state = "galoshes" permeability_coefficient = 0.05 flags = NOSLIP @@ -57,22 +57,30 @@ desc = "A pair of purple rubber boots, designed to prevent slipping on wet surfaces while also drying them." icon_state = "galoshes_dry" -/obj/item/clothing/shoes/galoshes/dry/step_action() +/obj/item/clothing/shoes/galoshes/dry/Initialize(mapload) + . = ..() + RegisterSignal(src, COMSIG_SHOES_STEP_ACTION, .proc/on_step) + +/obj/item/clothing/shoes/galoshes/dry/proc/on_step() + SIGNAL_HANDLER + var/turf/simulated/t_loc = get_turf(src) if(istype(t_loc) && t_loc.wet) t_loc.MakeDry(TURF_WET_WATER) /obj/item/clothing/shoes/clown_shoes - desc = "The prankster's standard-issue clowning shoes. Damn they're huge! Ctrl-click to toggle the waddle dampeners!" name = "clown shoes" + desc = "The prankster's standard-issue clowning shoes. Damn they're huge! Ctrl-click to toggle the waddle dampeners!" icon_state = "clown" item_state = "clown_shoes" slowdown = SHOES_SLOWDOWN+1 item_color = "clown" - var/footstep = 1 //used for squeeks whilst walking - shoe_sound = "clownstep" var/enabled_waddle = TRUE +/obj/item/clothing/shoes/clown_shoes/Initialize(mapload) + . = ..() + AddComponent(/datum/component/squeak, list('sound/effects/clownstep1.ogg' = 1, 'sound/effects/clownstep2.ogg' = 1), 50, falloff_exponent = 20) //die off quick please + /obj/item/clothing/shoes/clown_shoes/equipped(mob/user, slot) . = ..() if(slot == slot_shoes && enabled_waddle) @@ -113,8 +121,6 @@ strip_delay = 50 put_on_delay = 50 resistance_flags = NONE - var/footstep = 1 - shoe_sound = "jackboot" /obj/item/clothing/shoes/jackboots/jacksandals name = "jacksandals" @@ -208,24 +214,14 @@ item_color = "noble_boot" item_state = "noble_boot" -/obj/item/clothing/shoes/attackby(obj/item/I, mob/user, params) - if(istype(I, /obj/item/stack/tape_roll) && !silence_steps) - var/obj/item/stack/tape_roll/TR = I - if((!silence_steps || shoe_sound) && TR.use(4)) - silence_steps = TRUE - shoe_sound = null - to_chat(user, "You tape the soles of [src] to silence your footsteps.") - else - return ..() - /obj/item/clothing/shoes/sandal/white - name = "White Sandals" + name = "white sandals" desc = "Medical sandals that nerds wear." icon_state = "medsandal" item_color = "medsandal" /obj/item/clothing/shoes/sandal/fancy - name = "Fancy Sandals" + name = "fancy sandals" desc = "FANCY!!." icon_state = "fancysandal" item_color = "fancysandal" @@ -241,7 +237,10 @@ righthand_file = 'icons/goonstation/mob/inhands/clothing_righthand.dmi' resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF flags = NODROP - shoe_sound = "clownstep" + +/obj/item/clothing/shoes/cursedclown/Initialize(mapload) + . = ..() + AddComponent(/datum/component/squeak, list('sound/effects/clownstep1.ogg' = 1, 'sound/effects/clownstep2.ogg' = 1), 50, falloff_exponent = 20) //die off quick please /obj/item/clothing/shoes/singery name = "yellow performer's boots" @@ -311,7 +310,6 @@ icon_state = "clothwrap" item_state = "clothwrap" force = 0 - silence_steps = TRUE w_class = WEIGHT_CLASS_SMALL /obj/item/clothing/shoes/bhop @@ -351,4 +349,7 @@ desc = "These shoes are made for quacking, and thats just what they'll do." icon_state = "ducky" item_state = "ducky" - shoe_sound = "sound/items/squeaktoy.ogg" + +/obj/item/clothing/shoes/ducky/Initialize(mapload) + . = ..() + AddComponent(/datum/component/squeak, list('sound/items/squeaktoy.ogg' = 1), 50, falloff_exponent = 20) //die off quick please diff --git a/code/modules/clothing/spacesuits/alien.dm b/code/modules/clothing/spacesuits/alien.dm index aad6a5af1a0..51d06aec017 100644 --- a/code/modules/clothing/spacesuits/alien.dm +++ b/code/modules/clothing/spacesuits/alien.dm @@ -1,6 +1,6 @@ //Skrell space gear. Sleek like a wetsuit. /obj/item/clothing/head/helmet/space/skrell - name = "Skrellian helmet" + name = "skrellian helmet" desc = "Smoothly contoured and polished to a shine. Still looks like a fishbowl." species_restricted = list("Skrell","Human") @@ -15,7 +15,7 @@ item_color = "skrell_helmet_black" /obj/item/clothing/suit/space/skrell - name = "Skrellian hardsuit" + name = "skrellian hardsuit" desc = "Seems like a wetsuit with reinforced plating seamlessly attached to it. Very chic." species_restricted = list("Skrell","Human") @@ -175,8 +175,8 @@ ) /obj/item/clothing/gloves/color/yellow/vox - desc = "These bizarre gauntlets seem to be fitted for... bird claws?" name = "insulated gauntlets" + desc = "These bizarre gauntlets seem to be fitted for... bird claws?" icon_state = "gloves-vox" item_state = "gloves-vox" siemens_coefficient = 0 @@ -190,8 +190,8 @@ ) /obj/item/clothing/shoes/magboots/vox - desc = "A pair of heavy, jagged armoured foot pieces, seemingly suitable for a velociraptor." name = "vox magclaws" + desc = "A pair of heavy, jagged armoured foot pieces, seemingly suitable for a velociraptor." item_state = "boots-vox" icon_state = "boots-vox" icon = 'icons/obj/clothing/species/vox/shoes.dmi' diff --git a/code/modules/clothing/spacesuits/breaches.dm b/code/modules/clothing/spacesuits/breaches.dm index 899cb8e8d46..c739a93744d 100644 --- a/code/modules/clothing/spacesuits/breaches.dm +++ b/code/modules/clothing/spacesuits/breaches.dm @@ -52,7 +52,7 @@ GLOBAL_LIST_INIT(breach_burn_descriptors, list( descriptor = GLOB.breach_brute_descriptors[class] //Repair a certain amount of brute or burn damage to the suit. -/obj/item/clothing/suit/space/proc/repair_breaches(var/damtype, var/amount, var/mob/user) +/obj/item/clothing/suit/space/proc/repair_breaches(damtype, amount, mob/user) if(!can_breach || !breaches || !breaches.len || !damage) to_chat(user, "There are no breaches to repair on \the [src].") @@ -84,7 +84,7 @@ GLOBAL_LIST_INIT(breach_burn_descriptors, list( user.visible_message("[user] patches some of the damage on \the [src].") calc_breach_damage() -/obj/item/clothing/suit/space/proc/create_breaches(var/damtype, var/amount) +/obj/item/clothing/suit/space/proc/create_breaches(damtype, amount) if(!can_breach || !amount) return diff --git a/code/modules/clothing/spacesuits/chronosuit.dm b/code/modules/clothing/spacesuits/chronosuit.dm index 94773ceaa31..aab301df1a8 100644 --- a/code/modules/clothing/spacesuits/chronosuit.dm +++ b/code/modules/clothing/spacesuits/chronosuit.dm @@ -1,5 +1,5 @@ /obj/item/clothing/head/helmet/space/chronos - name = "Chronosuit Helmet" + name = "chronosuit helmet" desc = "A white helmet with an opaque blue visor." icon_state = "chronohelmet" item_state = "chronohelmet" @@ -19,7 +19,7 @@ /obj/item/clothing/suit/space/chronos - name = "Chronosuit" + name = "chronosuit" desc = "An advanced spacesuit equipped with teleportation and anti-compression technology" icon_state = "chronosuit" item_state = "chronosuit" @@ -34,7 +34,7 @@ var/teleporting = 0 -/obj/item/clothing/suit/space/chronos/proc/new_camera(var/mob/user) +/obj/item/clothing/suit/space/chronos/proc/new_camera(mob/user) if(camera) qdel(camera) camera = new /obj/effect/chronos_cam(get_turf(user)) @@ -65,7 +65,7 @@ to_chat(user, "Elecrtromagnetic pulse detected, shutting down systems to preserve integrity...") deactivate() -/obj/item/clothing/suit/space/chronos/proc/chronowalk(var/mob/living/carbon/human/user) +/obj/item/clothing/suit/space/chronos/proc/chronowalk(mob/living/carbon/human/user) if(!teleporting && user && (user.stat == CONSCIOUS)) teleporting = 1 var/turf/from_turf = get_turf(user) @@ -178,7 +178,7 @@ /obj/effect/chronos_cam - name = "Chronosuit View" + name = "chronosuit view" density = 0 anchored = 1 invisibility = 101 @@ -192,7 +192,7 @@ /obj/effect/chronos_cam/singularity_pull() return -/obj/effect/chronos_cam/relaymove(var/mob/user, direction) +/obj/effect/chronos_cam/relaymove(mob/user, direction) if(holder) if(user == holder) if(user.client && user.client.eye != src) diff --git a/code/modules/clothing/spacesuits/hardsuit.dm b/code/modules/clothing/spacesuits/hardsuit.dm index a732869c7e4..f5d7d500029 100644 --- a/code/modules/clothing/spacesuits/hardsuit.dm +++ b/code/modules/clothing/spacesuits/hardsuit.dm @@ -95,7 +95,7 @@ else if(scanning) soundloop.start(user) -/obj/item/clothing/head/helmet/space/hardsuit/proc/display_visor_message(var/msg) +/obj/item/clothing/head/helmet/space/hardsuit/proc/display_visor_message(msg) var/mob/wearer = loc if(msg && ishuman(wearer)) wearer.show_message("[msg]", 1) @@ -285,9 +285,9 @@ max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT /obj/item/clothing/suit/space/hardsuit/engine/elite - icon_state = "hardsuit-white" name = "advanced hardsuit" 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) heat_protection = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS //Uncomment to enable firesuit protection @@ -310,9 +310,9 @@ brightness_on = 7 /obj/item/clothing/suit/space/hardsuit/mining - icon_state = "hardsuit-mining" name = "mining hardsuit" desc = "A special suit that protects against hazardous, low pressure environments. Has reinforced plating." + icon_state = "hardsuit-mining" item_state = "mining_hardsuit" max_heat_protection_temperature = FIRE_SUIT_MAX_TEMP_PROTECT resistance_flags = FIRE_PROOF @@ -482,15 +482,76 @@ scan_reagents = 1 //Generally worn by the CMO, so they'd get utility off of seeing reagents /obj/item/clothing/suit/space/hardsuit/medical - icon_state = "hardsuit-medical" name = "medical hardsuit" desc = "A special helmet designed for work in a hazardous, low pressure environment. Built with lightweight materials for extra comfort." + 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) helmettype = /obj/item/clothing/head/helmet/space/hardsuit/medical slowdown = 0.5 + //Research Director hardsuit +/obj/item/clothing/head/helmet/space/hardsuit/rd + name = "prototype hardsuit helmet" + desc = "A prototype helmet designed for research in a hazardous, low pressure environment. Scientific data flashes across the visor." + icon_state = "hardsuit0-rd" + item_state = "rd" + 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) + var/hud_active = FALSE + var/explosion_detection_dist = 21 + +/obj/item/clothing/head/helmet/space/hardsuit/rd/equipped(mob/user, slot) + ..() + if(slot == slot_head) + GLOB.doppler_arrays += src //Needed to sense the kabooms + if(ishuman(user)) + 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) + hud_active = TRUE + + +/obj/item/clothing/head/helmet/space/hardsuit/rd/dropped(mob/living/carbon/human/user) + ..() + 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) + +/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) + var/turf/T = get_turf(src) + var/dx = abs(x0 - T.x) + var/dy = abs(y0 - T.y) + var/distance + if(T.z != z0) + return + if(dx > dy) + distance = dx + else + distance = dy + if(distance > explosion_detection_dist) + return + display_visor_message("Explosion detected! Epicenter radius: [devastation_range], Outer radius: [heavy_impact_range], Shockwave radius: [light_impact_range]") + +/obj/item/clothing/suit/space/hardsuit/rd + name = "prototype hardsuit" + desc = "A prototype suit that protects against hazardous, low pressure environments. Fitted with extensive plating for handling explosives and dangerous research materials." + icon_state = "hardsuit-rd" + item_state = "hardsuit-rd" + 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) + helmettype = /obj/item/clothing/head/helmet/space/hardsuit/rd + + //Security /obj/item/clothing/head/helmet/space/hardsuit/security name = "security hardsuit helmet" @@ -501,9 +562,9 @@ 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 - icon_state = "hardsuit-sec" 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) 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) @@ -536,9 +597,9 @@ sprite_sheets = null /obj/item/clothing/suit/space/hardsuit/singuloth - icon_state = "hardsuit-singuloth" name = "singuloth knight's armor" desc = "This is a ceremonial armor from the chapter of the Singuloth Knights. It's made of pure forged adamantium." + icon_state = "hardsuit-singuloth" item_state = "singuloth_hardsuit" flags = STOPSPRESSUREDMAGE armor = list(melee = 45, bullet = 25, laser = 30, energy = 10, bomb = 25, bio = 100, rad = 100, fire = 95, acid = 95) @@ -601,6 +662,12 @@ return mutable_appearance('icons/effects/effects.dmi', shield_state, MOB_LAYER + 0.01) /obj/item/clothing/head/helmet/space/hardsuit/shielded + name = "shielded hardsuit helmet" + desc = "A hardsuit helmet with built in energy shielding. Will rapidly recharge when not under fire." + 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) resistance_flags = FIRE_PROOF | ACID_PROOF diff --git a/code/modules/clothing/spacesuits/miscellaneous.dm b/code/modules/clothing/spacesuits/miscellaneous.dm index c3ce1778a27..d732f3a00ab 100644 --- a/code/modules/clothing/spacesuits/miscellaneous.dm +++ b/code/modules/clothing/spacesuits/miscellaneous.dm @@ -81,7 +81,7 @@ ) /obj/item/clothing/head/helmet/space/deathsquad/beret - name = "officer's beret" + 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) @@ -158,7 +158,7 @@ //Paramedic EVA suit /obj/item/clothing/head/helmet/space/eva/paramedic - name = "Paramedic EVA helmet" + name = "paramedic EVA helmet" desc = "A brand new paramedic EVA helmet. It seems to mold to your head shape. Used for retrieving bodies in space." icon_state = "paramedic-eva-helmet" item_state = "paramedic-eva-helmet" @@ -179,7 +179,7 @@ ) /obj/item/clothing/suit/space/eva/paramedic - name = "Paramedic EVA suit" + name = "paramedic EVA suit" icon_state = "paramedic-eva" item_state = "paramedic-eva" desc = "A brand new paramedic EVA suit. The nitrile seems a bit too thin to be space proof. Used for retrieving bodies in space." @@ -242,7 +242,7 @@ //Mime's Hardsuit /obj/item/clothing/head/helmet/space/eva/mime - name = "mime eva helmet" + name = "mime EVA helmet" // icon = 'spaceciv.dmi' desc = ". . ." icon_state = "spacemimehelmet" @@ -253,7 +253,7 @@ sprite_sheets_obj = null /obj/item/clothing/suit/space/eva/mime - name = "mime eva suit" + name = "mime EVA suit" // icon = 'spaceciv.dmi' desc = ". . ." icon_state = "spacemime_suit" @@ -264,7 +264,7 @@ sprite_sheets_obj = null /obj/item/clothing/head/helmet/space/eva/clown - name = "clown eva helmet" + name = "clown EVA helmet" // icon = 'spaceciv.dmi' desc = "An EVA helmet specifically designed for the clown. SPESSHONK!" icon_state = "clownhelmet" @@ -275,7 +275,7 @@ sprite_sheets_obj = null /obj/item/clothing/suit/space/eva/clown - name = "clown eva suit" + name = "clown EVA suit" // icon = 'spaceciv.dmi' desc = "An EVA suit specifically designed for the clown. SPESSHONK!" icon_state = "spaceclown_suit" diff --git a/code/modules/clothing/spacesuits/plasmamen.dm b/code/modules/clothing/spacesuits/plasmamen.dm index b27f7a66729..e672852858d 100644 --- a/code/modules/clothing/spacesuits/plasmamen.dm +++ b/code/modules/clothing/spacesuits/plasmamen.dm @@ -147,7 +147,7 @@ item_state = "scientist_envirohelm" /obj/item/clothing/head/helmet/space/plasmaman/rd - name = "research director plasma envirosuit helmet" + name = "research director's plasma envirosuit helmet" desc = "A plasmaman envirohelmet designed for the research director." icon_state = "rd_envirohelm" item_state = "rd_envirohelm" @@ -209,7 +209,7 @@ item_state = "chef_envirohelm" /obj/item/clothing/head/helmet/space/plasmaman/librarian - name = "librarian's plasma envirosuit helmet" + name = "librarian plasma envirosuit helmet" desc = "A slight modification on a traditional voidsuit helmet, this helmet was Nanotrasen's first solution to the *logistical problems* that come with employing plasmamen. Despite their limitations, these helmets still see use by historian and old-styled plasmamen alike." icon_state = "prototype_envirohelm" item_state = "prototype_envirohelm" @@ -243,19 +243,19 @@ visor_icon = "clown_envisor" /obj/item/clothing/head/helmet/space/plasmaman/hop - name = "head of personnel envirosuit helmet" + name = "head of personnel's envirosuit helmet" desc = "A plasmaman envirohelm that reeks of bureaucracy." icon_state = "hop_envirohelm" item_state = "hop_envirohelm" /obj/item/clothing/head/helmet/space/plasmaman/captain - name = "captain envirosuit helmet" + name = "captain's envirosuit helmet" desc = "A plasmaman envirohelm designed with the insignia and markings befitting a captain." icon_state = "cap_envirohelm" item_state = "cap_envirohelm" /obj/item/clothing/head/helmet/space/plasmaman/blueshield - name = "blueshield envirosuit helmet" + name = "blueshield's envirosuit helmet" desc = "A plasmaman envirohelm designed for the blueshield." icon_state = "bs_envirohelm" item_state = "bs_envirohelm" diff --git a/code/modules/clothing/spacesuits/syndi.dm b/code/modules/clothing/spacesuits/syndi.dm index 8e702089d7f..52a230fa60b 100644 --- a/code/modules/clothing/spacesuits/syndi.dm +++ b/code/modules/clothing/spacesuits/syndi.dm @@ -31,55 +31,55 @@ //Green syndicate space suit /obj/item/clothing/head/helmet/space/syndicate/green - name = "Green Space Helmet" + name = "green space helmet" icon_state = "syndicate-helm-green" item_state = "syndicate-helm-green" /obj/item/clothing/suit/space/syndicate/green - name = "Green Space Suit" + name = "green space suit" icon_state = "syndicate-green" item_state = "syndicate-green" //Dark green syndicate space suit /obj/item/clothing/head/helmet/space/syndicate/green/dark - name = "Dark Green Space Helmet" + name = "dark green space helmet" icon_state = "syndicate-helm-green-dark" item_state = "syndicate-helm-green-dark" /obj/item/clothing/suit/space/syndicate/green/dark - name = "Dark Green Space Suit" + name = "dark green space suit" icon_state = "syndicate-green-dark" item_state = "syndicate-green-dark" //Orange syndicate space suit /obj/item/clothing/head/helmet/space/syndicate/orange - name = "Orange Space Helmet" + name = "orange space helmet" icon_state = "syndicate-helm-orange" item_state = "syndicate-helm-orange" /obj/item/clothing/suit/space/syndicate/orange - name = "Orange Space Suit" + name = "orange space suit" icon_state = "syndicate-orange" item_state = "syndicate-orange" //Blue syndicate space suit /obj/item/clothing/head/helmet/space/syndicate/blue - name = "Blue Space Helmet" + name = "blue space helmet" icon_state = "syndicate-helm-blue" item_state = "syndicate-helm-blue" /obj/item/clothing/suit/space/syndicate/blue - name = "Blue Space Suit" + name = "blue space suit" icon_state = "syndicate-blue" item_state = "syndicate-blue" //Black syndicate space suit /obj/item/clothing/head/helmet/space/syndicate/black - name = "Black Space Helmet" + name = "black space helmet" icon_state = "syndicate-helm-black" item_state = "syndicate-helm-black" @@ -91,7 +91,7 @@ resistance_flags = ACID_PROOF /obj/item/clothing/suit/space/syndicate/black - name = "Black Space Suit" + name = "black space suit" icon_state = "syndicate-black" item_state = "syndicate-black" @@ -104,55 +104,55 @@ //Black-green syndicate space suit /obj/item/clothing/head/helmet/space/syndicate/black/green - name = "Black Space Helmet" + name = "black space helmet" icon_state = "syndicate-helm-black-green" item_state = "syndicate-helm-black-green" /obj/item/clothing/suit/space/syndicate/black/green - name = "Black and Green Space Suit" + name = "black and green space suit" icon_state = "syndicate-black-green" item_state = "syndicate-black-green" //Black-blue syndicate space suit /obj/item/clothing/head/helmet/space/syndicate/black/blue - name = "Black Space Helmet" + name = "black space helmet" icon_state = "syndicate-helm-black-blue" item_state = "syndicate-helm-black-blue" /obj/item/clothing/suit/space/syndicate/black/blue - name = "Black and Blue Space Suit" + name = "black and blue space suit" icon_state = "syndicate-black-blue" item_state = "syndicate-black-blue" //Black medical syndicate space suit /obj/item/clothing/head/helmet/space/syndicate/black/med - name = "Black Space Helmet" + name = "black space helmet" icon_state = "syndicate-helm-black-med" item_state = "syndicate-helm-black" /obj/item/clothing/suit/space/syndicate/black/med - name = "Green Space Suit" + name = "green space suit" icon_state = "syndicate-black-med" item_state = "syndicate-black" //Black-orange syndicate space suit /obj/item/clothing/head/helmet/space/syndicate/black/orange - name = "Black Space Helmet" + name = "black space helmet" icon_state = "syndicate-helm-black-orange" item_state = "syndicate-helm-black" /obj/item/clothing/suit/space/syndicate/black/orange - name = "Black and Orange Space Suit" + name = "black and orange space suit" icon_state = "syndicate-black-orange" item_state = "syndicate-black" //Black-red syndicate space suit /obj/item/clothing/head/helmet/space/syndicate/black/red - name = "Black Space Helmet" + name = "black space helmet" icon_state = "syndicate-helm-black-red" item_state = "syndicate-helm-black-red" @@ -164,7 +164,7 @@ resistance_flags = ACID_PROOF /obj/item/clothing/suit/space/syndicate/black/red - name = "Black and Red Space Suit" + name = "black and red space suit" icon_state = "syndicate-black-red" item_state = "syndicate-black-red" @@ -178,12 +178,12 @@ //Black with yellow/red engineering syndicate space suit /obj/item/clothing/head/helmet/space/syndicate/black/engie - name = "Black Space Helmet" + name = "black space helmet" icon_state = "syndicate-helm-black-engie" item_state = "syndicate-helm-black" /obj/item/clothing/suit/space/syndicate/black/engie - name = "Black Engineering Space Suit" + name = "black engineering space suit" icon_state = "syndicate-black-engie" item_state = "syndicate-black" diff --git a/code/modules/clothing/spacesuits/void.dm b/code/modules/clothing/spacesuits/void.dm index 482c0fc137d..e279b4697d3 100644 --- a/code/modules/clothing/spacesuits/void.dm +++ b/code/modules/clothing/spacesuits/void.dm @@ -1,7 +1,7 @@ //Voidsuits /obj/item/clothing/head/helmet/space/nasavoid - name = "NASA Void Helmet" + name = "\improper NASA void helmet" desc = "A high tech, NASA Centcom branch designed space suit helmet. Used for AI satellite maintenance." icon_state = "void-red" item_state = "void" @@ -59,26 +59,26 @@ //Captian's Suit, like the other captian's suit, but looks better, at the cost of armor /obj/item/clothing/head/helmet/space/nasavoid/captain - name = "Fancy Retro Void Helmet" + name = "fancy retro void helmet" icon_state = "void-captian" desc = "A high tech, NASA Centcom branch designed space suit helmet. Used for AI satellite maintenance. This one is fit for a captain." /obj/item/clothing/suit/space/nasavoid/captain - name = "Fancy NASA Void Suit" + name = "fancy NASA void suit" icon_state = "void-captian" desc = "A high tech, NASA Centcom branch designed space suit. Used for AI satellite maintenance. This one is fit for a captain." //Syndi's suit, on par with a blood red softsuit /obj/item/clothing/head/helmet/space/nasavoid/syndi - name = "Blood Red Retro Void Helmet" + name = "blood-red retro void helmet" 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) /obj/item/clothing/suit/space/nasavoid/syndi - name = "Blood Red NASA Void Suit" + name = "blood-red NASA void suit" icon_state = "void-syndi" desc = "A high tech, NASA Centcom branch designed space suit. This one looks rather suspicious." w_class = WEIGHT_CLASS_NORMAL @@ -88,7 +88,7 @@ //random spawner /obj/effect/nasavoidsuitspawner - name = "NASA Void Suit Spawner" + name = "\improper NASA void suit spawner" icon = 'icons/obj/clothing/suits.dmi' icon_state = "void-red" desc = "You shouldn't see this, a spawner for NASA Void Suits." diff --git a/code/modules/clothing/suits/armor.dm b/code/modules/clothing/suits/armor.dm index 650e8edf141..db127c5b100 100644 --- a/code/modules/clothing/suits/armor.dm +++ b/code/modules/clothing/suits/armor.dm @@ -81,7 +81,7 @@ ..() /obj/item/clothing/suit/armor/vest/blueshield - name = "blueshield security armor" + name = "blueshield's security armor" desc = "An armored vest with the badge of a Blueshield Lieutenant." icon_state = "blueshield" item_state = "blueshield" @@ -139,7 +139,7 @@ sprite_sheets = null /obj/item/clothing/suit/armor/vest/warden - name = "Warden's armored jacket" + name = "warden's armored jacket" desc = "An armored jacket with silver rank pips and livery." icon_state = "warden_jacket" item_state = "armor" @@ -172,7 +172,7 @@ item_state = "capspacesuit" /obj/item/clothing/suit/armor/riot - name = "Riot Suit" + name = "riot suit" desc = "A suit of armor with heavy padding to protect against melee attacks. Looks like it might impair movement." icon_state = "riot" item_state = "swat_suit" @@ -223,7 +223,7 @@ 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" + name = "bulletproof vest" desc = "A bulletproof vest that excels in protecting the wearer against traditional projectile weaponry and explosives to a minor extent." icon_state = "bulletproof" item_state = "armor" @@ -233,7 +233,7 @@ put_on_delay = 50 /obj/item/clothing/suit/armor/laserproof - name = "Ablative Armor Vest" + name = "ablative armor vest" desc = "A vest that excels in protecting the wearer against energy projectiles. Projects an energy field around the user, allowing a chance of energy projectile deflection no matter where on the user it would hit." icon_state = "armor_reflec" item_state = "armor_reflec" @@ -261,7 +261,8 @@ name = "reactive armor" desc = "Doesn't seem to do much for some reason." var/active = FALSE - var/emp_d = FALSE + /// Is the armor disabled, and prevented from reactivating temporarly? + var/disabled = FALSE icon_state = "reactiveoff" item_state = "reactiveoff" blood_overlay_type = "armor" @@ -272,8 +273,8 @@ /obj/item/clothing/suit/armor/reactive/attack_self(mob/user) active = !(active) - if(emp_d) - to_chat(user, "[src] is disabled from an electromagnetic pulse!") + if(disabled) + to_chat(user, "[src] is disabled and rebooting!") return if(active) to_chat(user, "[src] is now active.") @@ -290,18 +291,37 @@ A.UpdateButtonIcon() /obj/item/clothing/suit/armor/reactive/emp_act(severity) + var/emp_power = 5 + (severity-1 ? 0 : 5) + disable(emp_power) + ..() + +/obj/item/clothing/suit/armor/reactive/proc/disable(disable_time = 0) active = FALSE - emp_d = TRUE + disabled = TRUE icon_state = "reactiveoff" item_state = "reactiveoff" if(istype(loc, /mob/living/carbon/human)) var/mob/living/carbon/human/C = loc C.update_inv_wear_suit() - addtimer(CALLBACK(src, .proc/reboot), 100 / severity) - ..() + addtimer(CALLBACK(src, .proc/reboot), disable_time SECONDS) /obj/item/clothing/suit/armor/reactive/proc/reboot() - emp_d = FALSE + disabled = FALSE + active = TRUE + icon_state = "reactive" + item_state = "reactive" + if(ishuman(loc)) + var/mob/living/carbon/human/C = loc + C.update_inv_wear_suit() + +/obj/item/clothing/suit/armor/reactive/proc/reaction_check(hitby) + if(prob(hit_reaction_chance)) + if(istype(hitby, /obj/item/projectile)) + var/obj/item/projectile/P = hitby + if(!P.nodamage) + return TRUE + else + return TRUE //When the wearer gets hit, this armor will teleport the user a short distance away (to safety or to more danger, no one knows. That's the fun of it!) /obj/item/clothing/suit/armor/reactive/teleport @@ -312,7 +332,7 @@ /obj/item/clothing/suit/armor/reactive/teleport/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(!active) return 0 - if(prob(hit_reaction_chance)) + if(reaction_check(hitby)) var/mob/living/carbon/human/H = owner owner.visible_message("The reactive teleport system flings [H] clear of [attack_text]!") var/list/turfs = new/list() @@ -332,33 +352,35 @@ if(!isturf(picked)) return H.forceMove(picked) - return 1 - return 0 + return TRUE + return FALSE /obj/item/clothing/suit/armor/reactive/fire name = "reactive incendiary armor" + desc = "This armor uses the power of a pyro anomaly core to shoot protective jets of fire." /obj/item/clothing/suit/armor/reactive/fire/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(!active) - return 0 - if(prob(hit_reaction_chance)) + return FALSE + if(reaction_check(hitby)) owner.visible_message("The [src] blocks the [attack_text], sending out jets of flame!") for(var/mob/living/carbon/C in range(6, owner)) if(C != owner) C.fire_stacks += 8 C.IgniteMob() owner.fire_stacks = -20 - return 1 - return 0 + return TRUE + return FALSE /obj/item/clothing/suit/armor/reactive/stealth name = "reactive stealth armor" + desc = "This armor uses an anomaly core combined with holographic projectors to make the user invisible temporarly, and make a fake image of the user." /obj/item/clothing/suit/armor/reactive/stealth/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(!active) - return 0 - if(prob(hit_reaction_chance)) + return FALSE + if(reaction_check(hitby)) var/mob/living/simple_animal/hostile/illusion/escape/E = new(owner.loc) E.Copy_Parent(owner, 50) E.GiveTarget(owner) //so it starts running right away @@ -367,23 +389,64 @@ owner.visible_message("[owner] is hit by [attack_text] in the chest!") //We pretend to be hit, since blocking it would stop the message otherwise spawn(40) owner.alpha = initial(owner.alpha) - return 1 + return TRUE /obj/item/clothing/suit/armor/reactive/tesla name = "reactive tesla armor" + desc = "This armor uses the power of a flux anomaly core to protect the user in shocking ways." /obj/item/clothing/suit/armor/reactive/tesla/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(!active) - return 0 - if(prob(hit_reaction_chance)) + return FALSE + if(reaction_check(hitby)) owner.visible_message("The [src] blocks the [attack_text], sending out arcs of lightning!") for(var/mob/living/M in view(6, owner)) if(M == owner) continue owner.Beam(M,icon_state="lightning[rand(1, 12)]",icon='icons/effects/effects.dmi',time=5) - M.adjustFireLoss(25) + M.adjustFireLoss(20) playsound(M, 'sound/machines/defib_zap.ogg', 50, 1, -1) - return 1 + disable(rand(2, 5)) // let's not have buckshot set it off 4 times and do 80 burn damage. + return TRUE + +/obj/item/clothing/suit/armor/reactive/repulse + name = "reactive repulse armor" + desc = "An experimental suit of armor that violently throws back attackers with the power of a gravitational anomaly core." + ///How strong the reactive armor is for throwing + var/repulse_power = 3 + /// How far away are we finding things to throw + var/repulse_range = 5 + +/obj/item/clothing/suit/armor/reactive/repulse/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(!active) + return FALSE + if(reaction_check(hitby)) + owner.visible_message("[src] blocks [attack_text], converting the attack into a wave of force!") + var/list/thrownatoms = list() + for(var/turf/T in range(repulse_range, owner)) //Done this way so things don't get thrown all around hilariously. + for(var/atom/movable/AM in T) + thrownatoms += AM + + for(var/am in thrownatoms) + var/atom/movable/AM = am + if(AM == owner || AM.anchored) + continue + + var/throwtarget = get_edge_target_turf(owner, get_dir(owner, get_step_away(AM, owner))) + var/distfromuser = get_dist(owner, AM) + if(distfromuser == 0) + if(isliving(AM)) + var/mob/living/M = AM + M.Weaken(3) + to_chat(M, "You're slammed into the floor by [owner]'s reactive armor!") + else + if(isliving(AM)) + var/mob/living/M = AM + to_chat(M, "You're thrown back by the [owner]'s reactive armor!") + spawn(0) + AM.throw_at(throwtarget, ((clamp((repulse_power - (clamp(distfromuser - 2, 0, distfromuser))), 3, repulse_power))), 1)//So stuff gets tossed around at the same time. + disable(rand(2, 5)) + return TRUE //All of the armor below is mostly unused @@ -427,13 +490,13 @@ hide_tail_by_species = list("Vox") /obj/item/clothing/suit/armor/tdome/red - name = "Red Thunderdome Armor" + name = "red Thunderdome armor" desc = "Armor worn by the red Thunderdome team." icon_state = "tdred" item_state = "tdred" /obj/item/clothing/suit/armor/tdome/green - name = "Green Thunderdome Armor" + name = "green Thunderdome armor" desc = "Armor worn by the green Thunderdome team." icon_state = "tdgreen" item_state = "tdgreen" diff --git a/code/modules/clothing/suits/bio.dm b/code/modules/clothing/suits/bio.dm index f2bc0f1bd8e..996ce7e3ad9 100644 --- a/code/modules/clothing/suits/bio.dm +++ b/code/modules/clothing/suits/bio.dm @@ -95,7 +95,7 @@ //Plague Dr mask can be found in clothing/masks/gasmask.dm /obj/item/clothing/suit/bio_suit/plaguedoctorsuit - name = "Plague doctor suit" + name = "plague doctor suit" desc = "It protected doctors from the Black Death, back then. You bet your arse it's gonna help you against viruses." icon_state = "plaguedoctor" item_state = "bio_suit" diff --git a/code/modules/clothing/suits/jobs.dm b/code/modules/clothing/suits/jobs.dm index 49b552d099d..b3fd2c5aa85 100644 --- a/code/modules/clothing/suits/jobs.dm +++ b/code/modules/clothing/suits/jobs.dm @@ -17,7 +17,7 @@ //Brig Physician /obj/item/clothing/suit/storage/brigdoc - name = "brig physician vest" + name = "brig physician's vest" desc = "A vest often worn by doctors caring for inmates." icon_state = "brigphysician-vest" item_state = "brigphysician-vest" @@ -209,7 +209,7 @@ //Blueshield /obj/item/clothing/suit/storage/blueshield - name = "blueshield coat" + name = "blueshield's coat" desc = "NT deluxe ripoff. You finally have your own coat." icon_state = "blueshieldcoat" item_state = "blueshieldcoat" diff --git a/code/modules/clothing/suits/labcoat.dm b/code/modules/clothing/suits/labcoat.dm index 5281a32676e..5e286ccb7e5 100644 --- a/code/modules/clothing/suits/labcoat.dm +++ b/code/modules/clothing/suits/labcoat.dm @@ -59,7 +59,7 @@ item_state = "labcoat_mort_open" /obj/item/clothing/suit/storage/labcoat/emt - name = "EMT labcoat" + name = "\improper EMT labcoat" desc = "A comfortable suit for paramedics. Has dark colours." icon_state = "labcoat_emt_open" item_state = "labcoat_emt_open" diff --git a/code/modules/clothing/suits/miscellaneous.dm b/code/modules/clothing/suits/miscellaneous.dm index 6efe1d38026..ff4afe5d2ce 100644 --- a/code/modules/clothing/suits/miscellaneous.dm +++ b/code/modules/clothing/suits/miscellaneous.dm @@ -83,7 +83,7 @@ /obj/item/clothing/suit/greatcoat name = "great coat" - desc = "A Nazi great coat." + desc = "A Nazi great coat." //A what icon_state = "nazi" item_state = "nazi" @@ -708,7 +708,7 @@ icon_state = "white_jacket" /obj/item/clothing/suit/xenos - name = "xenos suit" + name = "xeno suit" desc = "A suit made out of chitinous alien hide." icon_state = "xenos" item_state = "xenos_helm" @@ -762,7 +762,7 @@ flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT|HIDETAIL /obj/item/clothing/head/mercy_hood - name = "Mercy Hood" + name = "mercy Hood" desc = "A soft white hood made of a synthetic fiber that provides improved protection against biohazards. Its elegant design allows a clear field of vision." icon_state = "mercy_hood" item_state = "mercy_hood" @@ -839,8 +839,8 @@ cold_protection = UPPER_TORSO|LOWER_TORSO|ARMS|LEGS /obj/item/clothing/suit/officercoat - name = "Clown Officer's Coat" - desc = "A classy clown officer's overcoat, also designed by Hugo Boss." + name = "clown officer's coat" + desc = "A classy clown officer's overcoat, also designed by Hugo Boss." //What and why icon_state = "officersuit" item_state = "officersuit" ignore_suitadjust = 0 @@ -852,7 +852,7 @@ ) /obj/item/clothing/suit/soldiercoat - name = "Clown Soldier's Coat" + name = "clown soldier's coat" desc = "An overcoat for the clown soldier, to keep him warm during those cold winter nights on the front." icon_state = "soldiersuit" item_state = "soldiersuit" @@ -895,7 +895,7 @@ A.UpdateButtonIcon() /obj/item/clothing/suit/lordadmiral - name = "Lord Admiral's Coat" + name = "lord admiral's coat" desc = "You'll be the Ruler of the King's Navy in no time." icon_state = "lordadmiral" item_state = "lordadmiral" @@ -912,7 +912,7 @@ ///Advanced Protective Suit, AKA, God Mode in wearable form. /obj/item/clothing/suit/advanced_protective_suit - name = "Advanced Protective Suit" + name = "advanced protective suit" desc = "An incredibly advanced and complex suit; it has so many buttons and dials as to be incomprehensible." w_class = WEIGHT_CLASS_BULKY icon_state = "bomb" diff --git a/code/modules/clothing/suits/storage.dm b/code/modules/clothing/suits/storage.dm index 1da4138fe77..6d198a28b1e 100644 --- a/code/modules/clothing/suits/storage.dm +++ b/code/modules/clothing/suits/storage.dm @@ -33,7 +33,7 @@ pockets.hear_talk(M, message_pieces) ..() -/obj/item/clothing/suit/storage/hear_message(mob/M, var/msg) +/obj/item/clothing/suit/storage/hear_message(mob/M, msg) pockets.hear_message(M, msg) ..() diff --git a/code/modules/clothing/suits/utility.dm b/code/modules/clothing/suits/utility.dm index 526086d2347..6cd8596d8b3 100644 --- a/code/modules/clothing/suits/utility.dm +++ b/code/modules/clothing/suits/utility.dm @@ -122,7 +122,7 @@ * Radiation protection */ /obj/item/clothing/head/radiation - name = "Radiation Hood" + name = "radiation hood" icon_state = "rad" desc = "A hood with radiation protective properties. Label: Made with lead, do not eat insulation" flags = BLOCKHAIR|THICKMATERIAL @@ -138,7 +138,7 @@ ) /obj/item/clothing/suit/radiation - name = "Radiation suit" + name = "radiation suit" desc = "A suit that protects against radiation. Label: Made with lead, do not eat insulation." icon_state = "rad" item_state = "rad_suit" diff --git a/code/modules/clothing/suits/wiz_robe.dm b/code/modules/clothing/suits/wiz_robe.dm index 0c3a0e92310..d7c146e3602 100644 --- a/code/modules/clothing/suits/wiz_robe.dm +++ b/code/modules/clothing/suits/wiz_robe.dm @@ -22,7 +22,7 @@ name = "black wizard hat" desc = "Strange-looking black hat-wear that most certainly belongs to a real skeleton. Spooky." icon_state = "blackwizard" - dog_fashion = null + dog_fashion = /datum/dog_fashion/head/black_wizard /obj/item/clothing/head/wizard/clown name = "purple wizard hat" @@ -55,17 +55,17 @@ dog_fashion = /datum/dog_fashion/head/blue_wizard /obj/item/clothing/head/wizard/marisa - name = "Witch Hat" + name = "witch hat" desc = "Strange-looking hat-wear, makes you want to cast fireballs." icon_state = "marisa" - dog_fashion = null + dog_fashion = /datum/dog_fashion/head/wizard/marisa /obj/item/clothing/head/wizard/magus - name = "Magus Helm" + name = "magus helm" desc = "A mysterious helmet that hums with an unearthly power" icon_state = "magus" item_state = "magus" - dog_fashion = null + dog_fashion = /datum/dog_fashion/head/wizard/magus /obj/item/clothing/head/wizard/amp name = "psychic amplifier" @@ -119,19 +119,19 @@ ) /obj/item/clothing/suit/wizrobe/marisa - name = "Witch Robe" + name = "witch robe" desc = "Magic is all about the spell power, ZE!" icon_state = "marisa" item_state = "marisarobe" /obj/item/clothing/suit/wizrobe/magusblue - name = "Magus Robe" + name = "magus robe" desc = "A set of armoured robes that seem to radiate a dark power" icon_state = "magusblue" item_state = "magusblue" /obj/item/clothing/suit/wizrobe/magusred - name = "Magus Robe" + name = "magus robe" desc = "A set of armoured robes that seem to radiate a dark power" icon_state = "magusred" item_state = "magusred" @@ -154,7 +154,7 @@ magical = FALSE /obj/item/clothing/head/wizard/marisa/fake - name = "Witch Hat" + name = "witch hat" desc = "Strange-looking hat-wear, makes you want to cast fireballs." icon_state = "marisa" gas_transfer_coefficient = 1 @@ -164,7 +164,7 @@ magical = FALSE /obj/item/clothing/suit/wizrobe/marisa/fake - name = "Witch Robe" + name = "witch robe" desc = "Magic is all about the spell power, ZE!" icon_state = "marisa" item_state = "marisarobe" @@ -177,7 +177,7 @@ //Shielded Armour /obj/item/clothing/suit/space/hardsuit/shielded/wizard - name = "battlemage armour" + name = "battlemage armor" desc = "Not all wizards are afraid of getting up close and personal. Not spaceproof despite its appearance." icon_state = "hardsuit-wiz" item_state = "wiz_hardsuit" diff --git a/code/modules/clothing/under/accessories/accessory.dm b/code/modules/clothing/under/accessories/accessory.dm index 48710377615..33563eabe29 100644 --- a/code/modules/clothing/under/accessories/accessory.dm +++ b/code/modules/clothing/under/accessories/accessory.dm @@ -501,7 +501,7 @@ else icon_state = "[base_icon]" -/obj/item/clothing/accessory/necklace/locket/attackby(var/obj/item/O as obj, mob/user as mob) +/obj/item/clothing/accessory/necklace/locket/attackby(obj/item/O as obj, mob/user as mob) if(!open) to_chat(user, "You have to open it first.") return @@ -708,6 +708,7 @@ START_PROCESSING(SSobj, src) /obj/item/clothing/accessory/petcollar/dropped(mob/living/simple_animal/user) + ..() STOP_PROCESSING(SSobj, src) /obj/item/clothing/accessory/petcollar/process() diff --git a/code/modules/clothing/under/accessories/storage.dm b/code/modules/clothing/under/accessories/storage.dm index 727aba06b37..8d7cbc1a143 100644 --- a/code/modules/clothing/under/accessories/storage.dm +++ b/code/modules/clothing/under/accessories/storage.dm @@ -44,7 +44,7 @@ hold.hear_talk(M, message_pieces, verb) ..() -/obj/item/clothing/accessory/storage/hear_message(mob/M, var/msg, verb, datum/language/speaking) +/obj/item/clothing/accessory/storage/hear_message(mob/M, msg, verb, datum/language/speaking) hold.hear_message(M, msg) ..() diff --git a/code/modules/clothing/under/jobs/civilian.dm b/code/modules/clothing/under/jobs/civilian.dm index 6384efb2021..8f3c2976fb1 100644 --- a/code/modules/clothing/under/jobs/civilian.dm +++ b/code/modules/clothing/under/jobs/civilian.dm @@ -67,7 +67,7 @@ /obj/item/clothing/under/rank/clown/Initialize() . = ..() - AddComponent(/datum/component/squeak, list('sound/items/bikehorn.ogg' = 1), 50) + AddComponent(/datum/component/squeak, list('sound/items/bikehorn.ogg' = 1), 50, falloff_exponent = 20) //die off quick please /obj/item/clothing/under/rank/clown/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(ishuman(loc)) diff --git a/code/modules/clothing/under/jobs/plasmamen/civilian_service.dm b/code/modules/clothing/under/jobs/plasmamen/civilian_service.dm index 2ca942338b1..2c106e456ec 100644 --- a/code/modules/clothing/under/jobs/plasmamen/civilian_service.dm +++ b/code/modules/clothing/under/jobs/plasmamen/civilian_service.dm @@ -71,7 +71,7 @@ item_color = "clown_envirosuit" /obj/item/clothing/under/plasmaman/assistant - name = "Assistant envirosuit" + name = "assistant's envirosuit" desc = "The finest from the bottom of the plasmamen clothing barrel." icon_state = "assistant_envirosuit" item_state = "assistant_envirosuit" @@ -93,21 +93,21 @@ return FALSE /obj/item/clothing/under/plasmaman/hop - name = "head of personnel envirosuit" + name = "head of personnel's envirosuit" desc = "An envirosuit designed for plasmamen employed as the head of personnel." icon_state = "hop_envirosuit" item_state = "hop_envirosuit" item_color = "hop_envirosuit" /obj/item/clothing/under/plasmaman/captain - name = "captain envirosuit" + name = "captain's envirosuit" desc = "An envirosuit designed for plasmamen employed as the captain." icon_state = "cap_envirosuit" item_state = "cap_envirosuit" item_color = "cap_envirosuit" /obj/item/clothing/under/plasmaman/blueshield - name = "blueshield envirosuit" + name = "blueshield's envirosuit" desc = "An envirosuit designed for plasmamen employed as the blueshield." icon_state = "bs_envirosuit" item_state = "bs_envirosuit" diff --git a/code/modules/clothing/under/jobs/plasmamen/engineering.dm b/code/modules/clothing/under/jobs/plasmamen/engineering.dm index 02a71afcaf6..62c46f050a5 100644 --- a/code/modules/clothing/under/jobs/plasmamen/engineering.dm +++ b/code/modules/clothing/under/jobs/plasmamen/engineering.dm @@ -7,7 +7,7 @@ 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 plasma envirosuit" + name = "chief engineer's plasma envirosuit" desc = "An airtight suit designed to be used by plasmamen employed as the chief engineer." icon_state = "ce_envirosuit" item_state = "ce_envirosuit" diff --git a/code/modules/clothing/under/jobs/plasmamen/medsci.dm b/code/modules/clothing/under/jobs/plasmamen/medsci.dm index 531bc3fb124..424540914b4 100644 --- a/code/modules/clothing/under/jobs/plasmamen/medsci.dm +++ b/code/modules/clothing/under/jobs/plasmamen/medsci.dm @@ -6,7 +6,7 @@ item_color = "doctor_envirosuit" /obj/item/clothing/under/plasmaman/cmo - name = "cmo plasma envirosuit" + name = "chief medical officer's plasma envirosuit" desc = "A suit designed for the station's more plasma-based chief medical officer." icon_state = "cmo_envirosuit" item_state = "cmo_envirosuit" @@ -20,7 +20,7 @@ item_color = "scientist_envirosuit" /obj/item/clothing/under/plasmaman/rd - name = "rd plasma envirosuit" + name = "research director's plasma envirosuit" desc = "A plasmaman envirosuit designed for the research director." icon_state = "rd_envirosuit" item_state = "rd_envirosuit" diff --git a/code/modules/clothing/under/jobs/security.dm b/code/modules/clothing/under/jobs/security.dm index afeca2fb3bd..f022ab40d9d 100644 --- a/code/modules/clothing/under/jobs/security.dm +++ b/code/modules/clothing/under/jobs/security.dm @@ -10,8 +10,8 @@ * Security */ /obj/item/clothing/under/rank/warden - desc = "It's made of a slightly sturdier material than standard jumpsuits, to allow for more robust protection. It has the word \"Warden\" written on the shoulders." name = "warden's jumpsuit" + desc = "It's made of a slightly sturdier material than standard jumpsuits, to allow for more robust protection. It has the word \"Warden\" written on the shoulders." icon_state = "warden" item_state = "r_suit" item_color = "warden" @@ -19,8 +19,8 @@ strip_delay = 50 /obj/item/clothing/under/rank/warden/skirt - desc = "Standard feminine fashion for a Warden. It is made of sturdier material than standard jumpskirts. It has the word \"Warden\" written on the shoulders." name = "warden's jumpskirt" + desc = "Standard feminine fashion for a Warden. It is made of sturdier material than standard jumpskirts. It has the word \"Warden\" written on the shoulders." icon_state = "wardenf" item_state = "r_suit" item_color = "wardenf" @@ -91,8 +91,8 @@ * Head of Security */ /obj/item/clothing/under/rank/head_of_security - desc = "It's a jumpsuit worn by those few with the dedication to achieve the position of \"Head of Security\". It has additional armor to protect the wearer." name = "head of security's jumpsuit" + desc = "It's a jumpsuit worn by those few with the dedication to achieve the position of \"Head of Security\". It has additional armor to protect the wearer." icon_state = "hos" item_state = "r_suit" item_color = "hosred" @@ -100,8 +100,8 @@ strip_delay = 60 /obj/item/clothing/under/rank/head_of_security/skirt - desc = "It's a fashionable jumpskirt worn by those few with the dedication to achieve the position of \"Head of Security\". It has additional armor to protect the wearer." name = "head of security's jumpskirt" + desc = "It's a fashionable jumpskirt worn by those few with the dedication to achieve the position of \"Head of Security\". It has additional armor to protect the wearer." icon_state = "hosredf" item_state = "r_suit" item_color = "hosredf" @@ -113,8 +113,8 @@ //Jensen cosplay gear /obj/item/clothing/under/rank/head_of_security/jensen - desc = "You never asked for anything that stylish." name = "head of security's jumpsuit" + desc = "You never asked for anything that stylish." icon_state = "jensen" item_state = "jensen" item_color = "jensen" @@ -122,12 +122,12 @@ //Paradise Station /obj/item/clothing/suit/armor/hos/hosnavyjacket - name = "head of security navy jacket" + name = "head of security's navy jacket" icon_state = "hosdnavyjacket" item_state = "hosdnavyjacket" /obj/item/clothing/suit/armor/hos/hosbluejacket - name = "head of security blue jacket" + name = "head of security's blue jacket" icon_state = "hosbluejacket" item_state = "hosbluejacket" @@ -167,8 +167,8 @@ //Brig Physician /obj/item/clothing/under/rank/security/brigphys - desc = "Jumpsuit for Brig Physician it has both medical and security protection." name = "brig physician's jumpsuit" + desc = "Jumpsuit for Brig Physician it has both medical and security protection." icon_state = "brig_phys" item_state = "brig_phys" item_color = "brig_phys" @@ -176,8 +176,8 @@ armor = list(melee = 10, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 10, rad = 0, fire = 30, acid = 30) /obj/item/clothing/under/rank/security/brigphys/skirt - desc = "A skirted Brig Physician uniform. It has both security and medical protection." name = "brig physician's jumpskirt" + desc = "A skirted Brig Physician uniform. It has both security and medical protection." icon_state = "brig_physf" item_state = "brig_physf" item_color = "brig_physf" @@ -185,8 +185,8 @@ //Pod Pilot /obj/item/clothing/under/rank/security/pod_pilot - desc = "Suit for your regular 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 974ad9fd26f..f4a16283fac 100644 --- a/code/modules/clothing/under/miscellaneous.dm +++ b/code/modules/clothing/under/miscellaneous.dm @@ -61,8 +61,8 @@ item_color = "vice" /obj/item/clothing/under/solgov - name = "Sol Federation marine uniform" - desc = "A comfortable and durable combat uniform worn by Sol Federation Marine Forces." + name = "\improper Trans-Solar Federation marine uniform" + desc = "A comfortable and durable combat uniform worn by Trans-Solar Federation Marine Forces." icon_state = "solgov" item_state = "ro_suit" item_color = "solgov" @@ -70,21 +70,21 @@ displays_id = 0 /obj/item/clothing/under/solgov/command - name = "Sol Federation Lieutenant's uniform" - desc = "A comfortable and durable combat uniform worn by Sol Federation Marine Forces. This one has additional insignia on its shoulders." + name = "\improper Trans-Solar Federation Lieutenant's uniform" + desc = "A comfortable and durable combat uniform worn by Trans-Solar Federation Marine Forces. This one has additional insignia on its shoulders." 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) /obj/item/clothing/under/solgov/rep - name = "Sol Federation representative's uniform" - desc = "A formal uniform worn by the diplomatic representatives of the Sol Federation." + name = "\improper Trans-Solar Federation representative's uniform" + desc = "A formal uniform worn by the diplomatic representatives of the Trans-Solar Federation." icon_state = "solgovr" item_color = "solgovr" /obj/item/clothing/under/rank/centcom_officer - desc = "It's a jumpsuit worn by CentComm Officers." name = "\improper CentComm officer's jumpsuit" + desc = "It's a jumpsuit worn by CentComm Officers." icon_state = "officer" item_state = "g_suit" item_color = "officer" @@ -94,15 +94,15 @@ random_sensor = FALSE /obj/item/clothing/under/rank/centcom_commander + name = "\improper CentComm commander's jumpsuit" desc = "It's a jumpsuit worn by CentComm's highest-tier Commanders." - name = "\improper CentComm officer's jumpsuit" icon_state = "centcom" item_state = "dg_suit" item_color = "centcom" /obj/item/clothing/under/rank/centcom/officer + name = "\improper Nanotrasen naval officer's uniform" desc = "Gold trim on space-black cloth, this uniform displays the rank of \"Lieutenant-Commander\" and bears \"N.A.S. Trurl \" on the left shoulder. Worn exclusively by officers of the Nanotrasen Navy. It's got exotic materials for protection." - name = "\improper Nanotrasen Naval Officer Uniform" icon_state = "navy_gold" item_state = "navy_gold" item_color = "navy_gold" @@ -110,8 +110,8 @@ displays_id = 0 /obj/item/clothing/under/rank/centcom/captain + name = "\improper Nanotrasen naval captain's uniform" desc = "Gold trim on space-black cloth, this uniform displays the rank of \"Captain\" and bears \"N.A.S. Trurl \" on the left shoulder. Worn exclusively by officers of the Nanotrasen Navy. It's got exotic materials for protection." - name = "\improper Nanotrasen Naval Captain Uniform" icon_state = "navy_gold" item_state = "navy_gold" item_color = "navy_gold" @@ -119,8 +119,8 @@ displays_id = 0 /obj/item/clothing/under/rank/centcom/blueshield + name = "formal blueshield's uniform" desc = "Gold trim on space-black cloth, this uniform bears \"Close Protection\" on the left shoulder. It's got exotic materials for protection." - name = "\improper Formal Blueshield's Uniform" icon_state = "officer" item_state = "g_suit" item_color = "officer" @@ -128,8 +128,8 @@ displays_id = 0 /obj/item/clothing/under/rank/centcom/representative + name = "formal Nanotrasen Representative's uniform" desc = "Gold trim on space-black cloth, this uniform bears \"N.S.S. Cyberiad\" on the left shoulder." - name = "\improper Formal Nanotrasen Representative's Uniform" icon_state = "officer" item_state = "g_suit" item_color = "officer" @@ -140,8 +140,8 @@ desc = "Gold trim on space-black cloth, this uniform bears [station_name()] on the left shoulder." /obj/item/clothing/under/rank/centcom/magistrate + name = "formal magistrate's uniform" desc = "Gold trim on space-black cloth, this uniform displays the rank of \"Magistrate\" and bears \"N.S.S. Cyberiad\" on the left shoulder." - name = "\improper Formal Magistrate's Uniform" icon_state = "officer" item_state = "g_suit" item_color = "officer" @@ -152,8 +152,8 @@ desc = "Gold trim on space-black cloth, this uniform displays the rank of \"Magistrate\" and bears [station_name()] on the left shoulder." /obj/item/clothing/under/rank/centcom/diplomatic + name = "\improper Nanotrasen diplomatic uniform" desc = "A very gaudy and official looking uniform of the Nanotrasen Diplomatic Corps." - name = "\improper Nanotrasen Diplomatic Uniform" icon_state = "presidente" item_state = "g_suit" item_color = "presidente" @@ -422,25 +422,25 @@ item_color = "dress_saloon" /obj/item/clothing/under/dress/dress_rd - name = "research director dress uniform" + name = "research director's dress uniform" desc = "Feminine fashion for the style concious RD." icon_state = "dress_rd" item_color = "dress_rd" /obj/item/clothing/under/dress/dress_cap - name = "captain dress uniform" + name = "captain's dress uniform" desc = "Feminine fashion for the style concious captain." icon_state = "dress_cap" item_color = "dress_cap" /obj/item/clothing/under/dress/dress_hop - name = "head of personal dress uniform" + name = "head of personal's dress uniform" desc = "Feminine fashion for the style concious HoP." icon_state = "dress_hop" item_color = "dress_hop" /obj/item/clothing/under/dress/dress_hr - name = "human resources director uniform" + name = "human resources director's uniform" desc = "Superior class for the nosy H.R. Director." icon_state = "huresource" item_color = "huresource" @@ -604,14 +604,14 @@ /obj/item/clothing/under/bane - name = "Bane Harness" + name = "bane harness" desc = "Wear this harness to become the bane of the station." icon_state = "bane" item_state = "bane" item_color = "bane" /obj/item/clothing/under/vox - name = "Ripped Jumpsuit" + name = "ripped jumpsuit" desc = "A jumpsuit that looks like it's been shredded by some talons. Who could wear this now?" icon = 'icons/obj/clothing/species/vox/uniforms.dmi' icon_state = "vgrey" @@ -619,35 +619,35 @@ item_color = "vgrey" /obj/item/clothing/under/psyjump - name = "Psychic Amp Jumpsuit" + name = "psychic amp jumpsuit" desc = "A suit made of strange materials." icon_state = "psyamp" item_state = "psyamp" item_color = "psyamp" /obj/item/clothing/under/rebeloutfit - name = "Rebel Outfit" + name = "rebel outfit" desc = "Made in Seattle, 2216." icon_state = "colin_earle" item_state = "colin_earle" item_color = "colin_earle" /obj/item/clothing/under/officeruniform - name = "Clown Officer's Uniform" + name = "clown officer's uniform" desc = "For Clown officers, this uniform was designed by the great clown designer Hugo Boss." icon_state = "officeruniform" item_color = "officeruniform" body_parts_covered = UPPER_TORSO|LOWER_TORSO /obj/item/clothing/under/soldieruniform - name = "Clown Soldier's Uniform" + name = "clown soldier's uniform" desc = "For the basic grunt of the Clown army." icon_state = "soldieruniform" item_color = "soldieruniform" body_parts_covered = UPPER_TORSO|LOWER_TORSO /obj/item/clothing/under/pennywise - name = "Pennywise Costume" + name = "\improper Pennywise costume" desc = "It's everything you ever were afraid of." icon_state = "pennywise" item_color = "pennywise" diff --git a/code/modules/clothing/under/oldstation_uni.dm b/code/modules/clothing/under/oldstation_uni.dm index 97a3fa7614b..c39add82a3d 100644 --- a/code/modules/clothing/under/oldstation_uni.dm +++ b/code/modules/clothing/under/oldstation_uni.dm @@ -1,32 +1,32 @@ //Let's keep clothing sorting clean. This is for all the oldstation clothes. /obj/item/clothing/under/retro/security - desc = "A (now) retro corporate security jumpsuit. It doesn't have any sort of robust fabric, good ol' NT cutting costs." name = "retro security officer's uniform" + desc = "A (now) retro corporate security jumpsuit. It doesn't have any sort of robust fabric, good ol' NT cutting costs." icon_state = "retro_sec" item_state = "retro_sec" item_color = "retro_sec" displays_id = 0 /obj/item/clothing/under/retro/medical - desc = "A once biologically resistant medical uniform. The high-vis stripes are faded and unreflective." name = "retro medical officer's uniform" + desc = "A once biologically resistant medical uniform. The high-vis stripes are faded and unreflective." icon_state = "retro_med" item_state = "retro_med" item_color = "retro_med" displays_id = 0 /obj/item/clothing/under/retro/engineering - desc = "A faded grimy engineering jumpsuit and overall combo. It's coated with oil, dust, and grit." name = "retro engineering uniform" + desc = "A faded grimy engineering jumpsuit and overall combo. It's coated with oil, dust, and grit." icon_state = "retro_eng" item_state = "retro_eng" item_color = "retro_eng" displays_id = 0 /obj/item/clothing/under/retro/science - desc = "A faded polo and set of distinct white slacks. What a ridiculous tie." name = "retro science officer's uniform" + desc = "A faded polo and set of distinct white slacks. What a ridiculous tie." icon_state = "retro_sci" item_state = "retro_sci" item_color = "retro_sci" diff --git a/code/modules/crafting/craft.dm b/code/modules/crafting/craft.dm index d41c9ce9f00..f6dbb48ed63 100644 --- a/code/modules/crafting/craft.dm +++ b/code/modules/crafting/craft.dm @@ -166,12 +166,13 @@ if(!check_pathtools(user, R, contents)) return ", missing tool." var/list/parts = del_reqs(R, user) - var/atom/movable/I = new R.result (get_turf(user.loc)) - I.CheckParts(parts, R) - if(isitem(I)) - user.put_in_hands(I) - if(send_feedback) - SSblackbox.record_feedback("tally", "object_crafted", 1, I.type) + for(var/I in R.result) + var/atom/movable/M = new I (get_turf(user)) + M.CheckParts(parts) + if(isitem(M)) + user.put_in_hands(M) + if(send_feedback) + SSblackbox.record_feedback("tally", "object_crafted", 1, M.type) return 0 return "." return ", missing tool." diff --git a/code/modules/crafting/guncrafting.dm b/code/modules/crafting/guncrafting.dm index 8cc13b0185a..da24e248355 100644 --- a/code/modules/crafting/guncrafting.dm +++ b/code/modules/crafting/guncrafting.dm @@ -36,7 +36,7 @@ icon = 'icons/obj/improvised.dmi' icon_state = "ishotgunstep1" -/obj/item/weaponcrafting/ishotgunconstruction/attackby(var/obj/item/I, mob/user as mob, params) +/obj/item/weaponcrafting/ishotgunconstruction/attackby(obj/item/I, mob/user as mob, params) ..() if(istype(I, /obj/item/screwdriver)) var/obj/item/weaponcrafting/ishotgunconstruction2/C = new /obj/item/weaponcrafting/ishotgunconstruction2 @@ -67,7 +67,7 @@ icon = 'icons/obj/improvised.dmi' icon_state = "ishotgunstep2" -/obj/item/weaponcrafting/ishotgunconstruction3/attackby(var/obj/item/I, mob/user as mob, params) +/obj/item/weaponcrafting/ishotgunconstruction3/attackby(obj/item/I, mob/user as mob, params) ..() if(istype(I, /obj/item/stack/packageWrap)) var/obj/item/stack/packageWrap/C = I diff --git a/code/modules/crafting/recipes.dm b/code/modules/crafting/recipes.dm index dcf12d64746..3905458d864 100644 --- a/code/modules/crafting/recipes.dm +++ b/code/modules/crafting/recipes.dm @@ -1,21 +1,33 @@ /datum/crafting_recipe - var/name = "" //in-game display name - var/reqs[] = list() //type paths of items consumed associated with how many are needed - var/blacklist[] = list() //type paths of items explicitly not allowed as an ingredient - var/result //type path of item resulting from this craft - var/tools[] = list() //tool behaviours of items needed but not consumed - var/pathtools[] = list() //type paths of items needed but not consumed - var/time = 30 //time in deciseconds - var/parts[] = list() //type paths of items that will be placed in the result - var/chem_catalysts[] = list() //like tools but for reagents - var/category = CAT_NONE //where it shows up in the crafting UI + /// In-game display name. + var/name = "" + /// Type paths of items consumed associated with how many are needed. + var/list/reqs = list() + /// Type paths of items explicitly not allowed as an ingredient. + var/list/blacklist = list() + /// Type paths of item(s) resulting from this craft. + var/list/result = list() + /// Tool behaviours of items needed but not consumed. + var/list/tools = list() + /// Type paths of items needed but not consumed. + var/list/pathtools = list() + /// Crafting time in deciseconds. + var/time = 30 + /// Type paths of items that will be placed inside the result. + var/list/parts = list() + var/list/chem_catalysts = list() //like tools but for reagents + /// What category it's shown under in the crafting UI. + var/category = CAT_NONE + /// What subcategory it's shown under in the crafting UI. (e.g 'Ammo' under 'Weapons') var/subcategory = CAT_NONE - var/always_availible = TRUE //Set to FALSE if it needs to be learned first. + /// Is this recipe always available, or does it need to be learned first. + var/always_availible = TRUE + /// Will this recipe send an admin message when it's completed. var/alert_admins_on_craft = FALSE /datum/crafting_recipe/IED name = "IED" - result = /obj/item/grenade/iedcasing + result = list(/obj/item/grenade/iedcasing) reqs = list(/datum/reagent/fuel = 50, /obj/item/stack/cable_coil = 1, /obj/item/assembly/igniter = 1, @@ -27,7 +39,7 @@ /datum/crafting_recipe/molotov name = "Molotov" - result = /obj/item/reagent_containers/food/drinks/bottle/molotov + result = list(/obj/item/reagent_containers/food/drinks/bottle/molotov) reqs = list(/obj/item/reagent_containers/glass/rag = 1, /obj/item/reagent_containers/food/drinks/bottle = 1) parts = list(/obj/item/reagent_containers/food/drinks/bottle = 1) @@ -37,7 +49,7 @@ /datum/crafting_recipe/stunprod name = "Stunprod" - result = /obj/item/melee/baton/cattleprod + result = list(/obj/item/melee/baton/cattleprod) reqs = list(/obj/item/restraints/handcuffs/cable = 1, /obj/item/stack/rods = 1, /obj/item/assembly/igniter = 1) @@ -47,7 +59,7 @@ /datum/crafting_recipe/bola name = "Bola" - result = /obj/item/restraints/legcuffs/bola + result = list(/obj/item/restraints/legcuffs/bola) reqs = list(/obj/item/restraints/handcuffs/cable = 1, /obj/item/stack/sheet/metal = 6) time = 20//15 faster than crafting them by hand! @@ -56,7 +68,7 @@ /datum/crafting_recipe/ed209 name = "ED209" - result = /mob/living/simple_animal/bot/ed209 + result = list(/mob/living/simple_animal/bot/ed209) reqs = list(/obj/item/robot_parts/robot_suit = 1, /obj/item/clothing/head/helmet = 1, /obj/item/clothing/suit/armor/vest = 1, @@ -73,7 +85,7 @@ /datum/crafting_recipe/secbot name = "Secbot" - result = /mob/living/simple_animal/bot/secbot + result = list(/mob/living/simple_animal/bot/secbot) reqs = list(/obj/item/assembly/signaler = 1, /obj/item/clothing/head/helmet = 1, /obj/item/melee/baton = 1, @@ -85,7 +97,7 @@ /datum/crafting_recipe/griefsky name = "General Griefsky" - result = /mob/living/simple_animal/bot/secbot/griefsky + result = list(/mob/living/simple_animal/bot/secbot/griefsky) reqs = list(/obj/item/assembly/signaler = 1, /obj/item/clothing/head/helmet = 1, /obj/item/melee/energy/sword = 4, @@ -99,7 +111,7 @@ /datum/crafting_recipe/cleanbot name = "Cleanbot" - result = /mob/living/simple_animal/bot/cleanbot + result = list(/mob/living/simple_animal/bot/cleanbot) reqs = list(/obj/item/reagent_containers/glass/bucket = 1, /obj/item/assembly/prox_sensor = 1, /obj/item/robot_parts/r_arm = 1) @@ -108,7 +120,7 @@ /datum/crafting_recipe/honkbot name = "Honkbot" - result = /mob/living/simple_animal/bot/honkbot + result = list(/mob/living/simple_animal/bot/honkbot) reqs = list(/obj/item/robot_parts/r_arm = 1, /obj/item/bikehorn = 1, /obj/item/assembly/prox_sensor = 1, @@ -119,7 +131,7 @@ /datum/crafting_recipe/floorbot name = "Floorbot" - result = /mob/living/simple_animal/bot/floorbot + result = list(/mob/living/simple_animal/bot/floorbot) reqs = list(/obj/item/storage/toolbox = 1, /obj/item/stack/tile/plasteel = 10, /obj/item/assembly/prox_sensor = 1, @@ -129,7 +141,7 @@ /datum/crafting_recipe/medbot name = "Medbot" - result = /mob/living/simple_animal/bot/medbot + result = list(/mob/living/simple_animal/bot/medbot) reqs = list(/obj/item/healthanalyzer = 1, /obj/item/storage/firstaid = 1, /obj/item/assembly/prox_sensor = 1, @@ -139,7 +151,7 @@ /datum/crafting_recipe/flamethrower name = "Flamethrower" - result = /obj/item/flamethrower + result = list(/obj/item/flamethrower) reqs = list(/obj/item/weldingtool = 1, /obj/item/assembly/igniter = 1, /obj/item/stack/rods = 1) @@ -153,7 +165,7 @@ /datum/crafting_recipe/pulseslug name = "Pulse Slug Shell" - result = /obj/item/ammo_casing/shotgun/pulseslug + result = list(/obj/item/ammo_casing/shotgun/pulseslug) reqs = list(/obj/item/ammo_casing/shotgun/techshell = 1, /obj/item/stock_parts/capacitor/adv = 2, /obj/item/stock_parts/micro_laser/ultra = 1) @@ -164,7 +176,7 @@ /datum/crafting_recipe/dragonsbreath name = "Dragonsbreath Shell" - result = /obj/item/ammo_casing/shotgun/incendiary/dragonsbreath + result = list(/obj/item/ammo_casing/shotgun/incendiary/dragonsbreath) reqs = list(/obj/item/ammo_casing/shotgun/techshell = 1, /datum/reagent/phosphorus = 5,) tools = list(TOOL_SCREWDRIVER) @@ -174,7 +186,7 @@ /datum/crafting_recipe/frag12 name = "FRAG-12 Shell" - result = /obj/item/ammo_casing/shotgun/frag12 + result = list(/obj/item/ammo_casing/shotgun/frag12) reqs = list(/obj/item/ammo_casing/shotgun/techshell = 1, /datum/reagent/glycerol = 5, /datum/reagent/acid = 5, @@ -186,7 +198,7 @@ /datum/crafting_recipe/ionslug name = "Ion Scatter Shell" - result = /obj/item/ammo_casing/shotgun/ion + result = list(/obj/item/ammo_casing/shotgun/ion) reqs = list(/obj/item/ammo_casing/shotgun/techshell = 1, /obj/item/stock_parts/micro_laser/ultra = 1) tools = list(TOOL_SCREWDRIVER) @@ -196,7 +208,7 @@ /datum/crafting_recipe/improvisedslug name = "Improvised Shotgun Shell" - result = /obj/item/ammo_casing/shotgun/improvised + result = list(/obj/item/ammo_casing/shotgun/improvised) reqs = list(/obj/item/grenade/chem_grenade = 1, /obj/item/stack/sheet/metal = 1, /obj/item/stack/cable_coil = 1, @@ -208,7 +220,7 @@ /datum/crafting_recipe/improvisedslugoverload name = "Overload Improvised Shell" - result = /obj/item/ammo_casing/shotgun/improvised/overload + result = list(/obj/item/ammo_casing/shotgun/improvised/overload) reqs = list(/obj/item/ammo_casing/shotgun/improvised = 1, /datum/reagent/blackpowder = 10, /datum/reagent/plasma_dust = 20) @@ -219,7 +231,7 @@ /datum/crafting_recipe/laserslug name = "Laser Slug Shell" - result = /obj/item/ammo_casing/shotgun/laserslug + result = list(/obj/item/ammo_casing/shotgun/laserslug) reqs = list(/obj/item/ammo_casing/shotgun/techshell = 1, /obj/item/stock_parts/capacitor/adv = 1, /obj/item/stock_parts/micro_laser/high = 1) @@ -230,7 +242,7 @@ /datum/crafting_recipe/ishotgun name = "Improvised Shotgun" - result = /obj/item/gun/projectile/revolver/doublebarrel/improvised + result = list(/obj/item/gun/projectile/revolver/doublebarrel/improvised) reqs = list(/obj/item/weaponcrafting/receiver = 1, /obj/item/pipe = 1, /obj/item/weaponcrafting/stock = 1, @@ -242,7 +254,7 @@ /datum/crafting_recipe/chainsaw name = "Chainsaw" - result = /obj/item/twohanded/required/chainsaw + result = list(/obj/item/twohanded/required/chainsaw) reqs = list(/obj/item/circular_saw = 1, /obj/item/stack/cable_coil = 1, /obj/item/stack/sheet/plasteel = 1) @@ -254,7 +266,7 @@ /datum/crafting_recipe/spear name = "Spear" - result = /obj/item/twohanded/spear + result = list(/obj/item/twohanded/spear) reqs = list(/obj/item/restraints/handcuffs/cable = 1, /obj/item/shard = 1, /obj/item/stack/rods = 1) @@ -264,7 +276,7 @@ /datum/crafting_recipe/spooky_camera name = "Camera Obscura" - result = /obj/item/camera/spooky + result = list(/obj/item/camera/spooky) time = 15 reqs = list(/obj/item/camera = 1, /datum/reagent/holywater = 10) @@ -273,14 +285,22 @@ /datum/crafting_recipe/papersack name = "Paper Sack" - result = /obj/item/storage/box/papersack + result = list(/obj/item/storage/box/papersack) time = 10 reqs = list(/obj/item/paper = 5) category = CAT_MISC +/datum/crafting_recipe/flashlight_eyes + name = "Flashlight Eyes" + result = list(/obj/item/organ/internal/eyes/cybernetic/flashlight) + time = 10 + reqs = list(/obj/item/flashlight = 2, + /obj/item/restraints/handcuffs/cable = 1) + category = CAT_MISC + /datum/crafting_recipe/sushimat name = "Sushi Mat" - result = /obj/item/kitchen/sushimat + result = list(/obj/item/kitchen/sushimat) time = 10 reqs = list(/obj/item/stack/sheet/wood = 1, /obj/item/stack/cable_coil = 2) @@ -288,7 +308,7 @@ /datum/crafting_recipe/notreallysoap name = "Homemade Soap" - result = /obj/item/soap/ducttape + result = list(/obj/item/soap/ducttape) time = 50 reqs = list(/obj/item/stack/tape_roll = 1, /datum/reagent/liquidgibs = 10) @@ -296,7 +316,7 @@ /datum/crafting_recipe/garrote name = "Makeshift Garrote" - result = /obj/item/twohanded/garrote/improvised + result = list(/obj/item/twohanded/garrote/improvised) time = 15 reqs = list(/obj/item/stack/sheet/wood = 1, /obj/item/stack/cable_coil = 5) @@ -306,7 +326,7 @@ /datum/crafting_recipe/makeshift_bolt name = "Makeshift Bolt" - result = /obj/item/arrow/rod + result = list(/obj/item/arrow/rod) time = 5 reqs = list(/obj/item/stack/rods = 1) tools = list(TOOL_WELDER) @@ -315,7 +335,7 @@ /datum/crafting_recipe/crossbow name = "Powered Crossbow" - result = /obj/item/gun/throw/crossbow + result = list(/obj/item/gun/throw/crossbow) time = 150 reqs = list(/obj/item/stack/rods = 3, /obj/item/stack/cable_coil = 10, @@ -327,7 +347,7 @@ /datum/crafting_recipe/glove_balloon name = "Latex Glove Balloon" - result = /obj/item/latexballon + result = list(/obj/item/latexballon) time = 15 reqs = list(/obj/item/clothing/gloves/color/latex = 1, /obj/item/stack/cable_coil = 5) @@ -335,15 +355,22 @@ /datum/crafting_recipe/gold_horn name = "Golden bike horn" - result = /obj/item/bikehorn/golden + result = list(/obj/item/bikehorn/golden) time = 20 reqs = list(/obj/item/stack/sheet/mineral/bananium = 5, /obj/item/bikehorn) category = CAT_MISC +/datum/crafting_recipe/sad_trombone + name = "Sad trombone" + result = list(/obj/item/instrument/trombone/sad) + time = 20 + reqs = list(/obj/item/stack/sheet/mineral/bananium = 5) + category = CAT_MISC + /datum/crafting_recipe/blackcarpet name = "Black Carpet" - result = /obj/item/stack/tile/carpet/black + result = list(/obj/item/stack/tile/carpet/black) time = 20 reqs = list(/obj/item/stack/tile/carpet = 1) pathtools = list(/obj/item/toy/crayon) @@ -351,7 +378,7 @@ /datum/crafting_recipe/showercurtain name = "Shower Curtains" - result = /obj/structure/curtain + result = list(/obj/structure/curtain) time = 20 reqs = list(/obj/item/stack/sheet/cloth = 2, /obj/item/stack/sheet/plastic = 2, @@ -360,7 +387,7 @@ /datum/crafting_recipe/chemical_payload name = "Chemical Payload (C4)" - result = /obj/item/bombcore/chemical + result = list(/obj/item/bombcore/chemical) reqs = list( /obj/item/stock_parts/matter_bin = 1, /obj/item/grenade/plastic/c4 = 1, @@ -374,7 +401,7 @@ /datum/crafting_recipe/chemical_payload2 name = "Chemical Payload (gibtonite)" - result = /obj/item/bombcore/chemical + result = list(/obj/item/bombcore/chemical) reqs = list( /obj/item/stock_parts/matter_bin = 1, /obj/item/twohanded/required/gibtonite = 1, @@ -388,7 +415,7 @@ /datum/crafting_recipe/toxins_payload name = "Toxins Payload Casing" - result = /obj/item/bombcore/toxins + result = list(/obj/item/bombcore/toxins) reqs = list( /obj/item/stock_parts/matter_bin = 1, /obj/item/assembly/signaler = 1, @@ -399,14 +426,14 @@ /datum/crafting_recipe/bonearmor name = "Bone Armor" - result = /obj/item/clothing/suit/armor/bone + result = list(/obj/item/clothing/suit/armor/bone) time = 30 reqs = list(/obj/item/stack/sheet/bone = 6) category = CAT_PRIMAL /datum/crafting_recipe/bonetalisman name = "Bone Talisman" - result = /obj/item/clothing/accessory/necklace/talisman + result = list(/obj/item/clothing/accessory/necklace/talisman) time = 20 reqs = list(/obj/item/stack/sheet/bone = 2, /obj/item/stack/sheet/sinew = 1) @@ -414,7 +441,7 @@ /datum/crafting_recipe/bonecodpiece name = "Skull Codpiece" - result = /obj/item/clothing/accessory/necklace/skullcodpiece + result = list(/obj/item/clothing/accessory/necklace/skullcodpiece) time = 20 reqs = list(/obj/item/stack/sheet/bone = 2, /obj/item/stack/sheet/animalhide/goliath_hide = 1) @@ -422,7 +449,7 @@ /datum/crafting_recipe/bracers name = "Bone Bracers" - result = /obj/item/clothing/gloves/bracer + result = list(/obj/item/clothing/gloves/bracer) time = 20 reqs = list(/obj/item/stack/sheet/bone = 2, /obj/item/stack/sheet/sinew = 1) @@ -430,14 +457,14 @@ /datum/crafting_recipe/skullhelm name = "Skull Helmet" - result = /obj/item/clothing/head/helmet/skull + result = list(/obj/item/clothing/head/helmet/skull) time = 30 reqs = list(/obj/item/stack/sheet/bone = 4) category = CAT_PRIMAL /datum/crafting_recipe/goliathcloak name = "Goliath Cloak" - result = /obj/item/clothing/suit/hooded/goliath + result = list(/obj/item/clothing/suit/hooded/goliath) time = 50 reqs = list(/obj/item/stack/sheet/leather = 2, /obj/item/stack/sheet/sinew = 2, @@ -446,7 +473,7 @@ /datum/crafting_recipe/drakecloak name = "Ash Drake Armour" - result = /obj/item/clothing/suit/hooded/drake + result = list(/obj/item/clothing/suit/hooded/drake) time = 60 reqs = list(/obj/item/stack/sheet/bone = 10, /obj/item/stack/sheet/sinew = 2, @@ -455,7 +482,7 @@ /datum/crafting_recipe/firebrand name = "Firebrand" - result = /obj/item/match/firebrand + result = list(/obj/item/match/firebrand) time = 100 //Long construction time. Making fire is hard work. reqs = list(/obj/item/stack/sheet/wood = 2) category = CAT_PRIMAL @@ -465,19 +492,19 @@ time = 20 reqs = list(/obj/item/stack/sheet/bone = 2, /obj/item/stack/sheet/sinew = 1) - result = /obj/item/stack/medical/splint/tribal + result = list(/obj/item/stack/medical/splint/tribal) category = CAT_PRIMAL /datum/crafting_recipe/bonedagger name = "Bone Dagger" - result = /obj/item/kitchen/knife/combat/survival/bone + result = list(/obj/item/kitchen/knife/combat/survival/bone) time = 20 reqs = list(/obj/item/stack/sheet/bone = 2) category = CAT_PRIMAL /datum/crafting_recipe/bonespear name = "Bone Spear" - result = /obj/item/twohanded/spear/bonespear + result = list(/obj/item/twohanded/spear/bonespear) time = 30 reqs = list(/obj/item/stack/sheet/bone = 4, /obj/item/stack/sheet/sinew = 1) @@ -485,7 +512,7 @@ /datum/crafting_recipe/boneaxe name = "Bone Axe" - result = /obj/item/twohanded/fireaxe/boneaxe + result = list(/obj/item/twohanded/fireaxe/boneaxe) time = 50 reqs = list(/obj/item/stack/sheet/bone = 6, /obj/item/stack/sheet/sinew = 3) @@ -495,7 +522,7 @@ name = "Bonfire" time = 60 reqs = list(/obj/item/grown/log = 5) - result = /obj/structure/bonfire + result = list(/obj/structure/bonfire) category = CAT_PRIMAL alert_admins_on_craft = TRUE @@ -503,19 +530,19 @@ name = "Rake" time = 30 reqs = list(/obj/item/stack/sheet/wood = 5) - result = /obj/item/cultivator/rake + result = list(/obj/item/cultivator/rake) category = CAT_PRIMAL /datum/crafting_recipe/woodbucket name = "Wooden Bucket" time = 30 reqs = list(/obj/item/stack/sheet/wood = 3) - result = /obj/item/reagent_containers/glass/bucket/wooden + result = list(/obj/item/reagent_containers/glass/bucket/wooden) category = CAT_PRIMAL /datum/crafting_recipe/guillotine name = "Guillotine" - result = /obj/structure/guillotine + result = list(/obj/structure/guillotine) time = 150 // Building a functioning guillotine takes time reqs = list(/obj/item/stack/sheet/plasteel = 3, /obj/item/stack/sheet/wood = 20, @@ -525,7 +552,7 @@ /datum/crafting_recipe/ghettojetpack name = "Improvised Jetpack" - result = /obj/item/tank/jetpack/improvised + result = list(/obj/item/tank/jetpack/improvised) time = 30 reqs = list(/obj/item/tank/internals/oxygen = 2, /obj/item/extinguisher = 1, /obj/item/pipe = 3, /obj/item/stack/cable_coil = MAXCOIL) category = CAT_MISC @@ -533,7 +560,7 @@ /datum/crafting_recipe/drill name = "Thermal Drill" - result = /obj/item/thermal_drill + result = list(/obj/item/thermal_drill) time = 60 reqs = list(/obj/item/stack/cable_coil = 5, /obj/item/mecha_parts/mecha_equipment/drill = 1, @@ -545,7 +572,7 @@ /datum/crafting_recipe/d_drill name = "Diamond Tipped Thermal Drill" - result = /obj/item/thermal_drill/diamond_drill + result = list(/obj/item/thermal_drill/diamond_drill) time = 60 reqs = list(/obj/item/stack/cable_coil = 5, /obj/item/mecha_parts/mecha_equipment/drill/diamonddrill = 1, @@ -557,7 +584,7 @@ /datum/crafting_recipe/faketoolbox name = "Black and Red toolbox" - result = /obj/item/storage/toolbox/fakesyndi + result = list(/obj/item/storage/toolbox/fakesyndi) time = 40 reqs = list(/datum/reagent/paint/red = 10, /datum/reagent/paint/black = 30, @@ -567,7 +594,7 @@ /datum/crafting_recipe/snowman name = "Snowman" - result = /obj/structure/snowman/built + result = list(/obj/structure/snowman/built) reqs = list(/obj/item/snowball = 10, /obj/item/reagent_containers/food/snacks/grown/carrot = 1, /obj/item/grown/log = 2) @@ -578,7 +605,7 @@ /datum/crafting_recipe/paper_craft name = "Paper Heart" time = 10 - result = /obj/item/decorations/sticky_decorations/flammable/heart + result = list(/obj/item/decorations/sticky_decorations/flammable/heart) reqs = list(/obj/item/paper = 1, /obj/item/stack/tape_roll = 1) tools = list(TOOL_WIRECUTTER) //cutters act as makeshift scissors. I doubt the barber wants to have their scissors stolen when somone wants to decorate @@ -588,7 +615,7 @@ /datum/crafting_recipe/paper_craft/single_eye name = "Paper Eye" - result = /obj/item/decorations/sticky_decorations/flammable/singleeye + result = list(/obj/item/decorations/sticky_decorations/flammable/singleeye) tools = list(TOOL_WIRECUTTER) pathtools = list(/obj/item/pen, /obj/item/toy/crayon/blue) category = CAT_DECORATIONS @@ -596,7 +623,7 @@ /datum/crafting_recipe/paper_craft/googlyeyes name = "Paper Googly Eye" - result = /obj/item/decorations/sticky_decorations/flammable/googlyeyes + result = list(/obj/item/decorations/sticky_decorations/flammable/googlyeyes) tools = list(TOOL_WIRECUTTER) pathtools = list(/obj/item/pen) category = CAT_DECORATIONS @@ -604,7 +631,7 @@ /datum/crafting_recipe/paper_craft/clock name = "Paper Clock" - result = /obj/item/decorations/sticky_decorations/flammable/paperclock + result = list(/obj/item/decorations/sticky_decorations/flammable/paperclock) tools = list(TOOL_WIRECUTTER) pathtools = list(/obj/item/pen) category = CAT_DECORATIONS @@ -612,7 +639,7 @@ /datum/crafting_recipe/paper_craft/jack_o_lantern name = "Paper Jack o'Lantern" - result = /obj/item/decorations/sticky_decorations/flammable/jack_o_lantern + result = list(/obj/item/decorations/sticky_decorations/flammable/jack_o_lantern) tools = list(TOOL_WIRECUTTER) pathtools = list(/obj/item/pen, /obj/item/toy/crayon/orange, @@ -622,7 +649,7 @@ /datum/crafting_recipe/paper_craft/ghost name = "Paper Ghost" - result = /obj/item/decorations/sticky_decorations/flammable/ghost + result = list(/obj/item/decorations/sticky_decorations/flammable/ghost) tools = list(TOOL_WIRECUTTER) pathtools = list(/obj/item/pen)//it's white paper why need a white crayon? category = CAT_DECORATIONS @@ -630,7 +657,7 @@ /datum/crafting_recipe/paper_craft/spider name = "Paper Spider" - result = /obj/item/decorations/sticky_decorations/flammable/spider + result = list(/obj/item/decorations/sticky_decorations/flammable/spider) tools = list(TOOL_WIRECUTTER) pathtools = list(/obj/item/pen, /obj/item/toy/crayon/red) @@ -639,7 +666,7 @@ /datum/crafting_recipe/paper_craft/spiderweb name = "Paper Spiderweb" - result = /obj/item/decorations/sticky_decorations/flammable/spiderweb + result = list(/obj/item/decorations/sticky_decorations/flammable/spiderweb) tools = list(TOOL_WIRECUTTER) pathtools = list() category = CAT_DECORATIONS @@ -647,7 +674,7 @@ /datum/crafting_recipe/paper_craft/skull name = "Paper Skull" - result = /obj/item/decorations/sticky_decorations/flammable/skull + result = list(/obj/item/decorations/sticky_decorations/flammable/skull) tools = list(TOOL_WIRECUTTER) pathtools = list(/obj/item/pen) category = CAT_DECORATIONS @@ -655,7 +682,7 @@ /datum/crafting_recipe/paper_craft/skeleton name = "Paper Skeleton" - result = /obj/item/decorations/sticky_decorations/flammable/skeleton + result = list(/obj/item/decorations/sticky_decorations/flammable/skeleton) tools = list(TOOL_WIRECUTTER) pathtools = list(/obj/item/pen) category = CAT_DECORATIONS @@ -663,7 +690,7 @@ /datum/crafting_recipe/paper_craft/cauldron name = "Paper Cauldron" - result = /obj/item/decorations/sticky_decorations/flammable/cauldron + result = list(/obj/item/decorations/sticky_decorations/flammable/cauldron) tools = list(TOOL_WIRECUTTER) pathtools = list(/obj/item/pen) category = CAT_DECORATIONS @@ -671,7 +698,7 @@ /datum/crafting_recipe/paper_craft/snowman name = "Paper Snowman" - result = /obj/item/decorations/sticky_decorations/flammable/snowman + result = list(/obj/item/decorations/sticky_decorations/flammable/snowman) tools = list(TOOL_WIRECUTTER) pathtools = list(/obj/item/pen, /obj/item/toy/crayon/orange) @@ -680,7 +707,7 @@ /datum/crafting_recipe/paper_craft/christmas_stocking name = "Paper Christmas Stocking" - result = /obj/item/decorations/sticky_decorations/flammable/christmas_stocking + result = list(/obj/item/decorations/sticky_decorations/flammable/christmas_stocking) tools = list(TOOL_WIRECUTTER) pathtools = list(/obj/item/toy/crayon/red) category = CAT_DECORATIONS @@ -688,7 +715,7 @@ /datum/crafting_recipe/paper_craft/christmas_tree name = "Paper Christmas Tree" - result = /obj/item/decorations/sticky_decorations/flammable/christmas_tree + result = list(/obj/item/decorations/sticky_decorations/flammable/christmas_tree) tools = list(TOOL_WIRECUTTER) pathtools = list(/obj/item/toy/crayon/red, /obj/item/toy/crayon/yellow, @@ -699,7 +726,7 @@ /datum/crafting_recipe/paper_craft/snowflake name = "Paper Snowflake" - result = /obj/item/decorations/sticky_decorations/flammable/snowflake + result = list(/obj/item/decorations/sticky_decorations/flammable/snowflake) tools = list(TOOL_WIRECUTTER) pathtools = list() category = CAT_DECORATIONS @@ -707,7 +734,7 @@ /datum/crafting_recipe/paper_craft/candy_cane name = "Paper Candy Cane" - result = /obj/item/decorations/sticky_decorations/flammable/candy_cane + result = list(/obj/item/decorations/sticky_decorations/flammable/candy_cane) tools = list(TOOL_WIRECUTTER) pathtools = list(/obj/item/toy/crayon/red) category = CAT_DECORATIONS @@ -715,7 +742,7 @@ /datum/crafting_recipe/paper_craft/mistletoe name = "Paper Mistletoe" - result = /obj/item/decorations/sticky_decorations/flammable/mistletoe + result = list(/obj/item/decorations/sticky_decorations/flammable/mistletoe) tools = list(TOOL_WIRECUTTER) pathtools = list(/obj/item/toy/crayon/red, /obj/item/toy/crayon/green) @@ -724,7 +751,7 @@ /datum/crafting_recipe/paper_craft/holly name = "Paper Holly" - result = /obj/item/decorations/sticky_decorations/flammable/holly + result = list(/obj/item/decorations/sticky_decorations/flammable/holly) tools = list(TOOL_WIRECUTTER) pathtools = list(/obj/item/toy/crayon/red, /obj/item/toy/crayon/green) @@ -734,7 +761,7 @@ /datum/crafting_recipe/paper_craft/tinsel_white name = "Paper Tinsel White" time = 10 - result = /obj/item/decorations/sticky_decorations/flammable/tinsel + result = list(/obj/item/decorations/sticky_decorations/flammable/tinsel) reqs = list(/obj/item/paper = 1, /obj/item/stack/tape_roll = 2) tools = list(TOOL_WIRECUTTER) @@ -745,7 +772,7 @@ /datum/crafting_recipe/paper_craft/tinsel_red name = "Red Paper Tinsel" time = 10 - result = /obj/item/decorations/sticky_decorations/flammable/tinsel/red + result = list(/obj/item/decorations/sticky_decorations/flammable/tinsel/red) reqs = list(/obj/item/paper = 1, /obj/item/stack/tape_roll = 2) tools = list(TOOL_WIRECUTTER) @@ -756,7 +783,7 @@ /datum/crafting_recipe/paper_craft/tinsel_blue name = "Blue Paper Tinsel" time = 10 - result = /obj/item/decorations/sticky_decorations/flammable/tinsel/blue + result = list(/obj/item/decorations/sticky_decorations/flammable/tinsel/blue) reqs = list(/obj/item/paper = 1, /obj/item/stack/tape_roll = 2) tools = list(TOOL_WIRECUTTER) @@ -767,7 +794,7 @@ /datum/crafting_recipe/paper_craft/tinsel_yellow name = "Yellow Paper Tinsel" time = 10 - result = /obj/item/decorations/sticky_decorations/flammable/tinsel/yellow + result = list(/obj/item/decorations/sticky_decorations/flammable/tinsel/yellow) reqs = list(/obj/item/paper = 1, /obj/item/stack/tape_roll = 2) tools = list(TOOL_WIRECUTTER) @@ -778,7 +805,7 @@ /datum/crafting_recipe/paper_craft/tinsel_purple name = "Purple Paper Tinsel" time = 10 - result = /obj/item/decorations/sticky_decorations/flammable/tinsel/purple + result = list(/obj/item/decorations/sticky_decorations/flammable/tinsel/purple) reqs = list(/obj/item/paper = 1, /obj/item/stack/tape_roll = 2) tools = list(TOOL_WIRECUTTER) @@ -789,7 +816,7 @@ /datum/crafting_recipe/paper_craft/tinsel_green name = "Green Paper Tinsel" time = 10 - result = /obj/item/decorations/sticky_decorations/flammable/tinsel/green + result = list(/obj/item/decorations/sticky_decorations/flammable/tinsel/green) reqs = list(/obj/item/paper = 1, /obj/item/stack/tape_roll = 2) tools = list(TOOL_WIRECUTTER) @@ -800,7 +827,7 @@ /datum/crafting_recipe/paper_craft/tinsel_orange name = "Orange Paper Tinsel" time = 10 - result = /obj/item/decorations/sticky_decorations/flammable/tinsel/orange + result = list(/obj/item/decorations/sticky_decorations/flammable/tinsel/orange) reqs = list(/obj/item/paper = 1, /obj/item/stack/tape_roll = 2) tools = list(TOOL_WIRECUTTER) @@ -811,7 +838,7 @@ /datum/crafting_recipe/paper_craft/tinsel_black name = "Black Paper Tinsel" time = 10 - result = /obj/item/decorations/sticky_decorations/flammable/tinsel/black + result = list(/obj/item/decorations/sticky_decorations/flammable/tinsel/black) reqs = list(/obj/item/paper = 1, /obj/item/stack/tape_roll = 2) tools = list(TOOL_WIRECUTTER) @@ -822,7 +849,7 @@ /datum/crafting_recipe/paper_craft/tinsel_halloween name = "Halloween style Paper Tinsel" time = 10 - result = /obj/item/decorations/sticky_decorations/flammable/tinsel/halloween + result = list(/obj/item/decorations/sticky_decorations/flammable/tinsel/halloween) reqs = list(/obj/item/paper = 1, /obj/item/stack/tape_roll = 2) tools = list(TOOL_WIRECUTTER) @@ -833,7 +860,7 @@ /datum/crafting_recipe/paper_craft/arrowed_heart name = "Paper Arrowed Heart" - result = /obj/item/decorations/sticky_decorations/flammable/arrowed_heart + result = list(/obj/item/decorations/sticky_decorations/flammable/arrowed_heart) tools = list(TOOL_WIRECUTTER) pathtools = list(/obj/item/toy/crayon/red) category = CAT_DECORATIONS @@ -841,7 +868,7 @@ /datum/crafting_recipe/paper_craft/heart_chain name = "Paper Heart Chain" - result = /obj/item/decorations/sticky_decorations/flammable/heart_chain + result = list(/obj/item/decorations/sticky_decorations/flammable/heart_chain) reqs = list(/obj/item/paper = 1, /obj/item/stack/tape_roll = 2, /obj/item/stack/cable_coil = 2) @@ -852,7 +879,7 @@ /datum/crafting_recipe/paper_craft/four_leaf_clover name = "Paper Four Leaf Clover" - result = /obj/item/decorations/sticky_decorations/flammable/four_leaf_clover + result = list(/obj/item/decorations/sticky_decorations/flammable/four_leaf_clover) tools = list(TOOL_WIRECUTTER) pathtools = list(/obj/item/toy/crayon/green) category = CAT_DECORATIONS @@ -860,7 +887,7 @@ /datum/crafting_recipe/paper_craft/pot_of_gold name = "Paper Pot of Gold" - result = /obj/item/decorations/sticky_decorations/flammable/pot_of_gold + result = list(/obj/item/decorations/sticky_decorations/flammable/pot_of_gold) tools = list(TOOL_WIRECUTTER) pathtools = list(/obj/item/pen, /obj/item/toy/crayon/red, @@ -875,7 +902,7 @@ /datum/crafting_recipe/paper_craft/leprechaun_hat name = "Paper Leprechaun Hat" time = 10 - result = /obj/item/decorations/sticky_decorations/flammable/leprechaun_hat + result = list(/obj/item/decorations/sticky_decorations/flammable/leprechaun_hat) tools = list(TOOL_WIRECUTTER) pathtools = list(/obj/item/pen, /obj/item/toy/crayon/yellow, @@ -885,7 +912,7 @@ /datum/crafting_recipe/paper_craft/easter_bunny name = "Paper Easter Bunny" - result = /obj/item/decorations/sticky_decorations/flammable/easter_bunny + result = list(/obj/item/decorations/sticky_decorations/flammable/easter_bunny) tools = list(TOOL_WIRECUTTER) pathtools = list(/obj/item/pen, /obj/item/toy/crayon/blue, @@ -895,7 +922,7 @@ /datum/crafting_recipe/paper_craft/easter_egg_blue name = "Blue Paper Easter Egg" - result = /obj/item/decorations/sticky_decorations/flammable/easter_egg + result = list(/obj/item/decorations/sticky_decorations/flammable/easter_egg) tools = list(TOOL_WIRECUTTER) pathtools = list(/obj/item/toy/crayon/blue) category = CAT_DECORATIONS @@ -903,7 +930,7 @@ /datum/crafting_recipe/paper_craft/easter_egg_yellow name = "Yellow Paper Easter Egg" - result = /obj/item/decorations/sticky_decorations/flammable/easter_egg/yellow + result = list(/obj/item/decorations/sticky_decorations/flammable/easter_egg/yellow) tools = list(TOOL_WIRECUTTER) pathtools = list(/obj/item/toy/crayon/yellow) category = CAT_DECORATIONS @@ -911,7 +938,7 @@ /datum/crafting_recipe/paper_craft/easter_egg_red name = "Red Paper Easter Egg" - result = /obj/item/decorations/sticky_decorations/flammable/easter_egg/red + result = list(/obj/item/decorations/sticky_decorations/flammable/easter_egg/red) tools = list(TOOL_WIRECUTTER) pathtools = list(/obj/item/toy/crayon/red) category = CAT_DECORATIONS @@ -919,7 +946,7 @@ /datum/crafting_recipe/paper_craft/easter_egg_purple name = "Purple Paper Easter Egg" - result = /obj/item/decorations/sticky_decorations/flammable/easter_egg/purple + result = list(/obj/item/decorations/sticky_decorations/flammable/easter_egg/purple) tools = list(TOOL_WIRECUTTER) pathtools = list(/obj/item/toy/crayon/purple) category = CAT_DECORATIONS @@ -927,7 +954,7 @@ /datum/crafting_recipe/paper_craft/easter_egg_orange name = "Orange Paper Easter Egg" - result = /obj/item/decorations/sticky_decorations/flammable/easter_egg/orange + result = list(/obj/item/decorations/sticky_decorations/flammable/easter_egg/orange) tools = list(TOOL_WIRECUTTER) pathtools = list(/obj/item/toy/crayon/orange) category = CAT_DECORATIONS @@ -936,7 +963,7 @@ /datum/crafting_recipe/metal_angel_statue name = "Metal angel statue" time = 50 - result = /obj/structure/decorative_structures/metal/statue/metal_angel + result = list(/obj/structure/decorative_structures/metal/statue/metal_angel) reqs = list(/obj/item/stack/sheet/metal = 10, /obj/item/stack/sheet/mineral/gold = 6) tools = list(TOOL_WELDER) @@ -946,7 +973,7 @@ /datum/crafting_recipe/golden_disk_statue name = "Golden disk statue" time = 50 - result = /obj/structure/decorative_structures/metal/statue/golden_disk + result = list(/obj/structure/decorative_structures/metal/statue/golden_disk) reqs = list(/obj/item/stack/sheet/metal = 10, /obj/item/stack/sheet/mineral/plasma = 3, /obj/item/stack/sheet/mineral/gold = 8) @@ -957,7 +984,7 @@ /datum/crafting_recipe/sun_statue name = "Sun statue" time = 40 - result = /obj/structure/decorative_structures/metal/statue/sun + result = list(/obj/structure/decorative_structures/metal/statue/sun) reqs = list(/obj/item/stack/sheet/metal = 6, /obj/item/stack/sheet/mineral/gold = 4) tools = list(TOOL_WELDER) @@ -967,7 +994,7 @@ /datum/crafting_recipe/moon_statue name = "Moon statue" time = 50 - result = /obj/structure/decorative_structures/metal/statue/moon + result = list(/obj/structure/decorative_structures/metal/statue/moon) reqs = list(/obj/item/stack/sheet/metal = 6, /obj/item/stack/sheet/mineral/silver = 6, /obj/item/stack/sheet/mineral/gold = 4) @@ -978,7 +1005,7 @@ /datum/crafting_recipe/tesla_statue name = "Tesla statue" time = 40 - result = /obj/structure/decorative_structures/metal/statue/tesla + result = list(/obj/structure/decorative_structures/metal/statue/tesla) reqs = list(/obj/item/stack/sheet/metal = 4, /obj/item/stack/sheet/glass = 8) tools = list(TOOL_WELDER) @@ -988,7 +1015,7 @@ /datum/crafting_recipe/tesla_monument name = "Tesla monument" time = 50 - result = /obj/structure/decorative_structures/metal/statue/tesla_monument + result = list(/obj/structure/decorative_structures/metal/statue/tesla_monument) reqs = list(/obj/item/stack/sheet/metal = 8, /obj/item/stock_parts/cell = 3, /obj/item/stack/cable_coil = 4) @@ -999,7 +1026,7 @@ /datum/crafting_recipe/grandfather_clock name = "Grandfather clock" time = 50 - result = /obj/structure/decorative_structures/flammable/grandfather_clock + result = list(/obj/structure/decorative_structures/flammable/grandfather_clock) reqs = list(/obj/item/stack/sheet/wood = 5, /obj/item/stack/sheet/mineral/gold = 1, /obj/item/stack/sheet/glass = 2) @@ -1009,7 +1036,7 @@ /datum/crafting_recipe/lava_land_display name = "Lava land display" time = 50 - result = /obj/structure/decorative_structures/flammable/lava_land_display + result = list(/obj/structure/decorative_structures/flammable/lava_land_display) reqs = list(/obj/item/paper = 4, /obj/item/stack/sheet/wood = 4, /obj/item/stack/rods = 4, diff --git a/code/modules/crafting/tailoring.dm b/code/modules/crafting/tailoring.dm index 68fa7fca3f3..6a597e9e8fa 100644 --- a/code/modules/crafting/tailoring.dm +++ b/code/modules/crafting/tailoring.dm @@ -1,6 +1,6 @@ /datum/crafting_recipe/durathread_vest name = "Durathread Vest" - result = /obj/item/clothing/suit/armor/vest/durathread + result = list(/obj/item/clothing/suit/armor/vest/durathread) reqs = list(/obj/item/stack/sheet/durathread = 5, /obj/item/stack/sheet/leather = 4) time = 50 @@ -8,7 +8,7 @@ /datum/crafting_recipe/durathread_helmet name = "Durathread Helmet" - result = /obj/item/clothing/head/helmet/durathread + result = list(/obj/item/clothing/head/helmet/durathread) reqs = list(/obj/item/stack/sheet/durathread = 4, /obj/item/stack/sheet/leather = 5) time = 40 @@ -16,35 +16,35 @@ /datum/crafting_recipe/durathread_jumpsuit name = "Durathread Jumpsuit" - result = /obj/item/clothing/under/misc/durathread + result = list(/obj/item/clothing/under/misc/durathread) reqs = list(/obj/item/stack/sheet/durathread = 4) time = 40 category = CAT_CLOTHING /datum/crafting_recipe/durathread_beret name = "Durathread Beret" - result = /obj/item/clothing/head/beret/durathread + result = list(/obj/item/clothing/head/beret/durathread) reqs = list(/obj/item/stack/sheet/durathread = 2) time = 40 category = CAT_CLOTHING /datum/crafting_recipe/durathread_beanie name = "Durathread Beanie" - result = /obj/item/clothing/head/beanie/durathread + result = list(/obj/item/clothing/head/beanie/durathread) reqs = list(/obj/item/stack/sheet/durathread = 2) time = 40 category = CAT_CLOTHING /datum/crafting_recipe/durathread_bandana name = "Durathread Bandana" - result = /obj/item/clothing/mask/bandana/durathread + result = list(/obj/item/clothing/mask/bandana/durathread) reqs = list(/obj/item/stack/sheet/durathread = 1) time = 25 category = CAT_CLOTHING /datum/crafting_recipe/fannypack name = "Fannypack" - result = /obj/item/storage/belt/fannypack + result = list(/obj/item/storage/belt/fannypack) reqs = list(/obj/item/stack/sheet/cloth = 2, /obj/item/stack/sheet/leather = 1) time = 20 @@ -52,7 +52,7 @@ /datum/crafting_recipe/hudsunsec name = "Security HUDsunglasses" - result = /obj/item/clothing/glasses/hud/security/sunglasses + result = list(/obj/item/clothing/glasses/hud/security/sunglasses) time = 20 tools = list(TOOL_SCREWDRIVER, TOOL_WIRECUTTER) reqs = list(/obj/item/clothing/glasses/hud/security = 1, @@ -62,7 +62,7 @@ /datum/crafting_recipe/hudsunsecremoval name = "Security HUD removal" - result = /obj/item/clothing/glasses/sunglasses + result = list(/obj/item/clothing/glasses/sunglasses, /obj/item/clothing/glasses/hud/security) time = 20 tools = list(TOOL_SCREWDRIVER, TOOL_WIRECUTTER) reqs = list(/obj/item/clothing/glasses/hud/security/sunglasses = 1) @@ -70,7 +70,7 @@ /datum/crafting_recipe/hudsunmed name = "Medical HUDsunglasses" - result = /obj/item/clothing/glasses/hud/health/sunglasses + result = list(/obj/item/clothing/glasses/hud/health/sunglasses) time = 20 tools = list(TOOL_SCREWDRIVER, TOOL_WIRECUTTER) reqs = list(/obj/item/clothing/glasses/hud/health = 1, @@ -80,7 +80,7 @@ /datum/crafting_recipe/hudsunmedremoval name = "Medical HUD removal" - result = /obj/item/clothing/glasses/sunglasses + result = list(/obj/item/clothing/glasses/sunglasses, /obj/item/clothing/glasses/hud/health) time = 20 tools = list(TOOL_SCREWDRIVER, TOOL_WIRECUTTER) reqs = list(/obj/item/clothing/glasses/hud/health/sunglasses = 1) @@ -88,7 +88,7 @@ /datum/crafting_recipe/hudsundiag name = "Diagnostic HUDsunglasses" - result = /obj/item/clothing/glasses/hud/diagnostic/sunglasses + result = list(/obj/item/clothing/glasses/hud/diagnostic/sunglasses) time = 20 tools = list(TOOL_SCREWDRIVER, TOOL_WIRECUTTER) reqs = list(/obj/item/clothing/glasses/hud/diagnostic = 1, @@ -98,15 +98,15 @@ /datum/crafting_recipe/hudsundiagremoval name = "Diagnostic HUD removal" - result = /obj/item/clothing/glasses/sunglasses + result = list(/obj/item/clothing/glasses/sunglasses, /obj/item/clothing/glasses/hud/diagnostic) time = 20 tools = list(TOOL_SCREWDRIVER, TOOL_WIRECUTTER) reqs = list(/obj/item/clothing/glasses/hud/diagnostic/sunglasses = 1) category = CAT_CLOTHING /datum/crafting_recipe/beergoggles - name = "Beer Goggles" - result = /obj/item/clothing/glasses/sunglasses/reagent + name = "Sunscanners" + result = list(/obj/item/clothing/glasses/sunglasses/reagent) time = 20 tools = list(TOOL_SCREWDRIVER, TOOL_WIRECUTTER) reqs = list(/obj/item/clothing/glasses/science = 1, @@ -115,8 +115,8 @@ category = CAT_CLOTHING /datum/crafting_recipe/beergogglesremoval - name = "Beer Goggles removal" - result = /obj/item/clothing/glasses/sunglasses + name = "Sunscanners removal" + result = list(/obj/item/clothing/glasses/sunglasses, /obj/item/clothing/glasses/science) time = 20 tools = list(TOOL_SCREWDRIVER, TOOL_WIRECUTTER) reqs = list(/obj/item/clothing/glasses/sunglasses/reagent = 1) @@ -124,7 +124,7 @@ /datum/crafting_recipe/ghostsheet name = "Ghost Sheet" - result = /obj/item/clothing/suit/ghost_sheet + result = list(/obj/item/clothing/suit/ghost_sheet) time = 5 tools = list(TOOL_WIRECUTTER) reqs = list(/obj/item/bedsheet = 1) @@ -132,21 +132,21 @@ /datum/crafting_recipe/cowboyboots name = "Cowboy Boots" - result = /obj/item/clothing/shoes/cowboy + result = list(/obj/item/clothing/shoes/cowboy) reqs = list(/obj/item/stack/sheet/leather = 2) time = 45 category = CAT_CLOTHING /datum/crafting_recipe/lizardboots name = "Lizard Skin Boots" - result = /obj/effect/spawner/lootdrop/lizardboots + result = list(/obj/effect/spawner/lootdrop/lizardboots) reqs = list(/obj/item/stack/sheet/animalhide/lizard = 1, /obj/item/stack/sheet/leather = 1) time = 60 category = CAT_CLOTHING /datum/crafting_recipe/rubberduckyshoes name = "Rubber Ducky Shoes" - result = /obj/item/clothing/shoes/ducky + result = list(/obj/item/clothing/shoes/ducky) time = 45 reqs = list(/obj/item/bikehorn/rubberducky = 2, /obj/item/clothing/shoes/sandal = 1) @@ -155,7 +155,7 @@ /datum/crafting_recipe/salmonsuit name = "Salmon Suit" - result = /obj/item/clothing/suit/hooded/salmon_costume + result = list(/obj/item/clothing/suit/hooded/salmon_costume) time = 60 reqs = list(/obj/item/fish/salmon = 20, /obj/item/stack/tape_roll = 5) diff --git a/code/modules/customitems/item_defines.dm b/code/modules/customitems/item_defines.dm index 18c6553bf66..e49e063b59d 100644 --- a/code/modules/customitems/item_defines.dm +++ b/code/modules/customitems/item_defines.dm @@ -944,7 +944,7 @@ actions_types = list(/datum/action/item_action/toggle) suit_adjusted = 0 -/obj/item/clothing/suit/storage/fluff/k3_webbing/adjustsuit(var/mob/user) +/obj/item/clothing/suit/storage/fluff/k3_webbing/adjustsuit(mob/user) if(!user.incapacitated()) var/flavour if(suit_adjusted) diff --git a/code/modules/customitems/item_spawning.dm b/code/modules/customitems/item_spawning.dm index c60364cc421..33566ddfef8 100644 --- a/code/modules/customitems/item_spawning.dm +++ b/code/modules/customitems/item_spawning.dm @@ -76,7 +76,7 @@ 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(var/mob/living/carbon/human/M,var/obj/item/I,var/script) +/proc/HackProperties(mob/living/carbon/human/M, obj/item/I, script) var/list/statements = splittext(script,";") if(statements.len == 0) return diff --git a/code/modules/detective_work/evidence.dm b/code/modules/detective_work/evidence.dm index 555dbe542de..e8bb1b578ae 100644 --- a/code/modules/detective_work/evidence.dm +++ b/code/modules/detective_work/evidence.dm @@ -76,6 +76,7 @@ "You hear someone rustle around in a plastic bag, and remove something.") overlays.Cut() //remove the overlays user.put_in_hands(I) + I.pickup(user) w_class = WEIGHT_CLASS_TINY icon_state = "evidenceobj" desc = "An empty evidence bag." @@ -83,4 +84,3 @@ else to_chat(user, "[src] is empty.") icon_state = "evidenceobj" - diff --git a/code/modules/economy/Accounts.dm b/code/modules/economy/Accounts.dm index 0d0b1d317e6..c51500bedc7 100644 --- a/code/modules/economy/Accounts.dm +++ b/code/modules/economy/Accounts.dm @@ -50,7 +50,7 @@ GLOBAL_LIST_EMPTY(all_money_accounts) //the current ingame time (hh:mm:ss) can be obtained by calling: //station_time_timestamp("hh:mm:ss") -/proc/create_account(var/new_owner_name = "Default user", var/starting_funds = 0, var/obj/machinery/computer/account_database/source_db) +/proc/create_account(new_owner_name = "Default user", starting_funds = 0, obj/machinery/computer/account_database/source_db) //create a new account var/datum/money_account/M = new() @@ -148,18 +148,18 @@ GLOBAL_LIST_EMPTY(all_money_accounts) return 0 //this returns the first account datum that matches the supplied accnum/pin combination, it returns null if the combination did not match any account -/proc/attempt_account_access(var/attempt_account_number, var/attempt_pin_number, var/security_level_passed = 0,var/pin_needed=1) +/proc/attempt_account_access(attempt_account_number, attempt_pin_number, security_level_passed = 0, pin_needed=1) for(var/datum/money_account/D in GLOB.all_money_accounts) if(D.account_number == attempt_account_number) if( D.security_level <= security_level_passed && (!D.security_level || D.remote_access_pin == attempt_pin_number || !pin_needed) ) return D -/obj/machinery/computer/account_database/proc/get_account(var/account_number) +/obj/machinery/computer/account_database/proc/get_account(account_number) for(var/datum/money_account/D in GLOB.all_money_accounts) if(D.account_number == account_number) return D -/proc/attempt_account_access_nosec(var/attempt_account_number) +/proc/attempt_account_access_nosec(attempt_account_number) for(var/datum/money_account/D in GLOB.all_money_accounts) if(D.account_number == attempt_account_number) return D diff --git a/code/modules/economy/Economy_TradeDestinations.dm b/code/modules/economy/Economy_TradeDestinations.dm index 0efa3a4a058..9f3f12faaea 100644 --- a/code/modules/economy/Economy_TradeDestinations.dm +++ b/code/modules/economy/Economy_TradeDestinations.dm @@ -13,7 +13,7 @@ GLOBAL_LIST_EMPTY(weighted_mundaneevent_locations) var/list/temp_price_change[BIOMEDICAL] var/list/viable_mundane_events = list() -/datum/trade_destination/proc/get_custom_eventstring(var/event_type) +/datum/trade_destination/proc/get_custom_eventstring(event_type) return null //distance is measured in AU and co-relates to travel time @@ -35,7 +35,7 @@ GLOBAL_LIST_EMPTY(weighted_mundaneevent_locations) viable_random_events = list(SECURITY_BREACH, CULT_CELL_REVEALED, BIOHAZARD_OUTBREAK, PIRATES, ALIEN_RAIDERS) viable_mundane_events = list(RESEARCH_BREAKTHROUGH, RESEARCH_BREAKTHROUGH, BARGAINS, GOSSIP) -/datum/trade_destination/anansi/get_custom_eventstring(var/event_type) +/datum/trade_destination/anansi/get_custom_eventstring(event_type) if(event_type == RESEARCH_BREAKTHROUGH) return "Thanks to research conducted on the NSS Anansi, Second Green Cross Society wishes to announce a major breakthough in the field of \ [pick("mind-machine interfacing","neuroscience","nano-augmentation","genetics")]. Nanotrasen is expected to announce a co-exploitation deal within the fortnight." @@ -58,7 +58,7 @@ GLOBAL_LIST_EMPTY(weighted_mundaneevent_locations) viable_random_events = list(INDUSTRIAL_ACCIDENT, PIRATES, CORPORATE_ATTACK) viable_mundane_events = list(RESEARCH_BREAKTHROUGH, RESEARCH_BREAKTHROUGH) -/datum/trade_destination/redolant/get_custom_eventstring(var/event_type) +/datum/trade_destination/redolant/get_custom_eventstring(event_type) if(event_type == RESEARCH_BREAKTHROUGH) return "Thanks to research conducted on the OAV Redolant, Osiris Atmospherics wishes to announce a major breakthough in the field of \ [pick("plasma research","high energy flux capacitance","super-compressed materials","theoretical particle physics")]. Nanotrasen is expected to announce a co-exploitation deal within the fortnight." diff --git a/code/modules/economy/utils.dm b/code/modules/economy/utils.dm index 4d7273cd719..f5d5a6018c8 100644 --- a/code/modules/economy/utils.dm +++ b/code/modules/economy/utils.dm @@ -4,7 +4,7 @@ // Economy system is such a mess of spaghetti. This should help. //////////////////////// -/proc/get_money_account(var/account_number, var/from_z=-1) +/proc/get_money_account(account_number, from_z=-1) for(var/obj/machinery/computer/account_database/DB in GLOB.machines) if(from_z > -1 && DB.z != from_z) continue if((DB.stat & NOPOWER) || !DB.activated ) continue @@ -13,7 +13,7 @@ return acct -/obj/proc/get_card_account(var/obj/item/card/I, var/mob/user=null, var/terminal_name="", var/transaction_purpose="", var/require_pin=0) +/obj/proc/get_card_account(obj/item/card/I, mob/user=null, terminal_name="", transaction_purpose="", require_pin=0) if(terminal_name=="") terminal_name=src.name if(istype(I, /obj/item/card/id)) @@ -27,7 +27,7 @@ if(D) return D -/mob/proc/get_worn_id_account(var/require_pin=0, var/mob/user=null) +/mob/proc/get_worn_id_account(require_pin=0, mob/user=null) if(ishuman(src)) var/mob/living/carbon/human/H=src var/obj/item/card/id/I=H.get_idcard() diff --git a/code/modules/error_handler/error_handler.dm b/code/modules/error_handler/error_handler.dm index 93df8ac13ca..4995f798968 100644 --- a/code/modules/error_handler/error_handler.dm +++ b/code/modules/error_handler/error_handler.dm @@ -6,7 +6,7 @@ GLOBAL_VAR_INIT(total_runtimes, 0) GLOBAL_VAR_INIT(total_runtimes_skipped, 0) // The ifdef needs to be down here, since the error viewer references total_runtimes #ifdef DEBUG -/world/Error(var/exception/e, var/datum/e_src) +/world/Error(exception/e, datum/e_src) if(!istype(e)) // Something threw an unusual exception log_world("\[[time_stamp()]] Uncaught exception: [e]") return ..() diff --git a/code/modules/error_handler/error_viewer.dm b/code/modules/error_handler/error_viewer.dm index 661aff8bb6c..96a228a8bff 100644 --- a/code/modules/error_handler/error_viewer.dm +++ b/code/modules/error_handler/error_viewer.dm @@ -24,7 +24,7 @@ GLOBAL_DATUM(error_cache, /datum/ErrorViewer/ErrorCache) /datum/ErrorViewer/ var/name = "" -/datum/ErrorViewer/proc/browseTo(var/user, var/html) +/datum/ErrorViewer/proc/browseTo(user, html) if(user) var/datum/browser/popup = new(user, "error_viewer", "Runtime Viewer", 700, 500) popup.add_head_content({"",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(430),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(16),a=n(8),c=n(25),i=n(17),l=n(179),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(180);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(176);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(16),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":446,"./AIFixer.js":447,"./APC.js":448,"./ATM.js":449,"./AccountsUplinkTerminal.js":450,"./AiAirlock.js":451,"./AirAlarm.js":452,"./AirlockAccessController.js":453,"./AirlockElectronics.js":454,"./AppearanceChanger.js":455,"./AtmosAlertConsole.js":456,"./AtmosControl.js":457,"./AtmosFilter.js":458,"./AtmosMixer.js":459,"./AtmosPump.js":460,"./Autolathe.js":461,"./BlueSpaceArtilleryControl.js":462,"./BluespaceTap.js":463,"./BodyScanner.js":464,"./BotClean.js":465,"./BotSecurity.js":466,"./BrigCells.js":467,"./BrigTimer.js":468,"./CameraConsole.js":469,"./Canister.js":470,"./CardComputer.js":471,"./CargoConsole.js":472,"./ChemDispenser.js":473,"./ChemHeater.js":477,"./ChemMaster.js":478,"./CloningConsole.js":479,"./CommunicationsComputer.js":480,"./Contractor.js":481,"./ConveyorSwitch.js":482,"./CrewMonitor.js":483,"./Cryo.js":484,"./DNAModifier.js":485,"./DisposalBin.js":486,"./DnaVault.js":487,"./DroneConsole.js":488,"./EFTPOS.js":489,"./ERTManager.js":490,"./Electropack.js":491,"./EvolutionMenu.js":492,"./ExosuitFabricator.js":493,"./ExternalAirlockController.js":494,"./FaxMachine.js":495,"./FloorPainter.js":496,"./GPS.js":497,"./GravityGen.js":498,"./HandheldChemDispenser.js":499,"./Instrument.js":500,"./KeycardAuth.js":501,"./LaborClaimConsole.js":502,"./LawManager.js":503,"./MechBayConsole.js":504,"./MechaControlConsole.js":505,"./MedicalRecords.js":506,"./MiningVendor.js":507,"./Newscaster.js":508,"./NuclearBomb.js":509,"./OperatingComputer.js":510,"./Orbit.js":511,"./OreRedemption.js":512,"./PAI.js":513,"./PDA.js":526,"./Pacman.js":542,"./PersonalCrafting.js":543,"./PodTracking.js":544,"./PoolController.js":545,"./PortablePump.js":546,"./PortableScrubber.js":547,"./PortableTurret.js":548,"./PowerMonitor.js":188,"./RCD.js":549,"./RPD.js":550,"./Radio.js":551,"./RequestConsole.js":552,"./RndConsole.js":62,"./RoboticsControlConsole.js":567,"./Safe.js":568,"./SatelliteControl.js":569,"./SecurityRecords.js":570,"./ShuttleConsole.js":571,"./ShuttleManipulator.js":572,"./Sleeper.js":573,"./SlotMachine.js":574,"./Smartfridge.js":575,"./Smes.js":576,"./SolarControl.js":577,"./SpawnersMenu.js":578,"./StationAlertConsole.js":579,"./SupermatterMonitor.js":580,"./SyndicateComputerSimple.js":581,"./TEG.js":582,"./TachyonArray.js":583,"./Tank.js":584,"./TankDispenser.js":585,"./TcommsCore.js":586,"./TcommsRelay.js":587,"./Teleporter.js":588,"./ThermoMachine.js":589,"./TransferValve.js":590,"./Uplink.js":591,"./Vending.js":592,"./Wires.js":593};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=445},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(182);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(20),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(182);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;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:u.temperature_c+" C",onClick:function(){return i("temperature")}})]})}),(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(94);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,q=d.body_accessory_style,Y=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===q,onClick:function(){return l("body_accessory",{body_accessory:e.bodyaccessorystyle})}},e.bodyaccessorystyle)}))}),!!Y&&(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 1===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(20),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(16),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(20));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(475)()},function(e,t,n){"use strict";var o=n(476);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(16),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(16),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(1),a=n(2),c=n(183),i=n(4);var l={1:["ACTIVE","good"],2:["COMPLETED","good"],3:["FAILED","bad"]},d=["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,c=(0,r.useBackend)(t),l=c.act,C=c.data;n=C.unauthorized?(0,o.createComponentVNode)(2,a.Flex.Item,{grow:"1",backgroundColor:"rgba(0, 0, 0, 0.8)",children:(0,o.createComponentVNode)(2,f,{height:"100%",allMessages:["ERROR: UNAUTHORIZED USER"],finishedTimeout:100,onFinished:function(){}})}):C.load_animation_completed?(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Flex.Item,{basis:"content",children:(0,o.createComponentVNode)(2,u)}),(0,o.createComponentVNode)(2,a.Flex.Item,{basis:"content",mt:"0.5rem",children:(0,o.createComponentVNode)(2,s)}),(0,o.createComponentVNode)(2,a.Flex.Item,{grow:"1",overflow:"hidden",children:1===C.page?(0,o.createComponentVNode)(2,m,{height:"100%"}):(0,o.createComponentVNode)(2,p,{height:"100%"})})],4):(0,o.createComponentVNode)(2,a.Flex.Item,{grow:"1",backgroundColor:"rgba(0, 0, 0, 0.8)",children:(0,o.createComponentVNode)(2,f,{height:"100%",allMessages:d,finishedTimeout:3e3,onFinished:function(){return l("complete_load_animation")}})});var N=(0,r.useLocalState)(t,"viewingPhoto",""),b=N[0];N[1];return(0,o.createComponentVNode)(2,i.Window,{theme:"syndicate",children:[b&&(0,o.createComponentVNode)(2,h),(0,o.createComponentVNode)(2,i.Window.Content,{className:"Contractor",children:(0,o.createComponentVNode)(2,a.Flex,{direction:"column",height:"100%",children:n})})]})};var u=function(e,t){var n=(0,r.useBackend)(t),c=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,a.Section,Object.assign({title:"Summary",buttons:(0,o.createComponentVNode)(2,a.Box,{verticalAlign:"middle",mt:"0.25rem",children:[s," Rep"]})},e,{children:(0,o.createComponentVNode)(2,a.Flex,{children:[(0,o.createComponentVNode)(2,a.Box,{flexBasis:"50%",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"TC Available",verticalAlign:"middle",children:(0,o.createComponentVNode)(2,a.Flex,{align:"center",children:[(0,o.createComponentVNode)(2,a.Flex.Item,{grow:"1",children:[l," TC"]}),(0,o.createComponentVNode)(2,a.Button,{disabled:l<=0,content:"Claim",mx:"0.75rem",mb:"0",flexBasis:"content",onClick:function(){return c("claim")}})]})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"TC Earned",children:[d," TC"]})]})}),(0,o.createComponentVNode)(2,a.Box,{flexBasis:"50%",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Contracts Completed",verticalAlign:"middle",children:(0,o.createComponentVNode)(2,a.Box,{height:"20px",lineHeight:"20px",display:"inline-block",children:u})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Contractor Status",verticalAlign:"middle",children:"ACTIVE"})]})})]})})))},s=function(e,t){var n=(0,r.useBackend)(t),c=n.act,i=n.data.page;return(0,o.normalizeProps)((0,o.createComponentVNode)(2,a.Tabs,Object.assign({},e,{children:[(0,o.createComponentVNode)(2,a.Tabs.Tab,{selected:1===i,onClick:function(){return c("page",{page:1})},children:[(0,o.createComponentVNode)(2,a.Icon,{name:"suitcase"}),"Contracts"]}),(0,o.createComponentVNode)(2,a.Tabs.Tab,{selected:2===i,onClick:function(){return c("page",{page:2})},children:[(0,o.createComponentVNode)(2,a.Icon,{name:"shopping-cart"}),"Hub"]})]})))},m=function(e,t){var n=(0,r.useBackend)(t),i=n.act,d=n.data,u=d.contracts,s=d.contract_active,m=d.can_extract,p=!!s&&u.filter((function(e){return 1===e.status}))[0],f=p&&p.time_left>0,h=(0,r.useLocalState)(t,"viewingPhoto",""),C=(h[0],h[1]);return(0,o.normalizeProps)((0,o.createComponentVNode)(2,a.Section,Object.assign({title:"Available Contracts",overflow:"auto",buttons:(0,o.createComponentVNode)(2,a.Button,{disabled:!m||f,icon:"parachute-box",content:["Call Extraction",f&&(0,o.createComponentVNode)(2,c.Countdown,{timeLeft:p.time_left,format:function(e,t){return" ("+t.substr(3)+")"}})],onClick:function(){return i("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,a.Section,{title:(0,o.createComponentVNode)(2,a.Flex,{children:[(0,o.createComponentVNode)(2,a.Flex.Item,{grow:"1",color:1===e.status&&"good",children:e.target_name}),(0,o.createComponentVNode)(2,a.Flex.Item,{basis:"content",children:e.has_photo&&(0,o.createComponentVNode)(2,a.Button,{icon:"camera",mb:"-0.5rem",ml:"0.5rem",onClick:function(){return C("target_photo_"+e.uid+".png")}})})]}),className:"Contractor__Contract",buttons:(0,o.createComponentVNode)(2,a.Box,{width:"100%",children:[!!l[e.status]&&(0,o.createComponentVNode)(2,a.Box,{color:l[e.status][1],display:"inline-block",mt:1!==e.status&&"0.125rem",mr:"0.25rem",lineHeight:"20px",children:l[e.status][0]}),1===e.status&&(0,o.createComponentVNode)(2,a.Button.Confirm,{icon:"ban",color:"bad",content:"Abort",ml:"0.5rem",onClick:function(){return i("abort")}})]}),children:(0,o.createComponentVNode)(2,a.Flex,{width:"100%",children:[(0,o.createComponentVNode)(2,a.Flex.Item,{grow:"2",mr:"0.5rem",children:[e.fluff_message,!!e.completed_time&&(0,o.createComponentVNode)(2,a.Box,{color:"good",children:[(0,o.createVNode)(1,"br"),(0,o.createComponentVNode)(2,a.Icon,{name:"check",mr:"0.5rem"}),"Contract completed at ",e.completed_time]}),!!e.dead_extraction&&(0,o.createComponentVNode)(2,a.Box,{color:"bad",mt:"0.5rem",bold:!0,children:[(0,o.createComponentVNode)(2,a.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,a.Box,{color:"bad",children:[(0,o.createVNode)(1,"br"),(0,o.createComponentVNode)(2,a.Icon,{name:"times",mr:"0.5rem"}),"Contract failed: ",e.fail_reason]})]}),(0,o.createComponentVNode)(2,a.Flex.Item,{grow:"1",flexBasis:"100%",children:[(0,o.createComponentVNode)(2,a.Box,{mb:"0.5rem",color:"label",children:"Extraction Zone:"}),null==(t=e.difficulties)?void 0:t.map((function(t,n){return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Button.Confirm,{disabled:!!s,content:t.name+" ("+t.reward+" TC)",onClick:function(){return i("activate",{uid:e.uid,difficulty:n+1})}}),(0,o.createVNode)(1,"br")],4)})),!!e.objective&&(0,o.createComponentVNode)(2,a.Box,{color:"white",bold:!0,children:[e.objective.extraction_zone,(0,o.createVNode)(1,"br"),"(",(e.objective.reward_tc||0)+" TC",",\xa0",(e.objective.reward_credits||0)+" Credits",")"]})]})]})},e.uid)}))})))},p=function(e,t){var n=(0,r.useBackend)(t),c=n.act,i=n.data,l=i.rep,d=i.buyables;return(0,o.normalizeProps)((0,o.createComponentVNode)(2,a.Section,Object.assign({title:"Available Purchases",overflow:"auto"},e,{children:d.map((function(e){return(0,o.createComponentVNode)(2,a.Section,{title:e.name,children:[e.description,(0,o.createVNode)(1,"br"),(0,o.createComponentVNode)(2,a.Button.Confirm,{disabled:l-1&&(0,o.createComponentVNode)(2,a.Box,{as:"span",color:0===e.stock?"bad":"good",ml:"0.5rem",children:[e.stock," in stock"]})]},e.uid)}))})))},f=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 c=r.prototype;return c.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))},c.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)},c.componentWillUnmount=function(){clearTimeout(this.timer)},c.render=function(){return(0,o.createComponentVNode)(2,a.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),h=function(e,t){var n=(0,r.useLocalState)(t,"viewingPhoto",""),c=n[0],i=n[1];return(0,o.createComponentVNode)(2,a.Modal,{className:"Contractor__photoZoom",children:[(0,o.createComponentVNode)(2,a.Box,{as:"img",src:c}),(0,o.createComponentVNode)(2,a.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(20),c=n(1),i=n(2),l=n(76),d=n(39),u=n(4),s=function(e){return e.dead?"Deceased":1===parseInt(e.stat,10)?"Unconscious":"Living"},m=function(e){return e.dead?"red":1===parseInt(e.stat,10)?"orange":"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),children:s(e)}),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)},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(16),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(20),c=n(1),i=n(2),l=n(183),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(1),a=n(2),c=n(4),i=function(e){return e?"("+e.join(", ")+")":"ERROR"};t.GPS=function(e,t){var n=(0,r.useBackend)(t).data,i=n.emped,m=n.active,p=n.area,f=n.position,h=n.saved;return(0,o.createComponentVNode)(2,c.Window,{children:(0,o.createComponentVNode)(2,c.Window.Content,{children:(0,o.createComponentVNode)(2,a.Flex,{direction:"column",height:"100%",children:i?(0,o.createComponentVNode)(2,a.Flex.Item,{grow:"1",basis:"0",children:(0,o.createComponentVNode)(2,l,{emp:!0})}):(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Flex.Item,{children:(0,o.createComponentVNode)(2,d)}),m?(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Flex.Item,{mt:"0.5rem",children:(0,o.createComponentVNode)(2,u,{area:p,position:f})}),h&&(0,o.createComponentVNode)(2,a.Flex.Item,{mt:"0.5rem",children:(0,o.createComponentVNode)(2,u,{title:"Saved Position",position:h})}),(0,o.createComponentVNode)(2,a.Flex.Item,{mt:"0.5rem",grow:"1",basis:"0",children:(0,o.createComponentVNode)(2,s,{height:"100%"})})],0):(0,o.createComponentVNode)(2,l)],0)})})})};var l=function(e,t){var n=e.emp;return(0,o.createComponentVNode)(2,a.Section,{mt:"0.5rem",width:"100%",height:"100%",stretchContents:!0,children:(0,o.createComponentVNode)(2,a.Box,{width:"100%",height:"100%",color:"label",textAlign:"center",children:(0,o.createComponentVNode)(2,a.Flex,{height:"100%",children:(0,o.createComponentVNode)(2,a.Flex.Item,{grow:"1",align:"center",color:"label",children:[(0,o.createComponentVNode)(2,a.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."]})})})})},d=function(e,t){var n=(0,r.useBackend)(t),c=n.act,i=n.data,l=i.active,d=i.tag,u=i.same_z,s=(0,r.useLocalState)(t,"newTag",d),m=s[0],p=s[1];return(0,o.createComponentVNode)(2,a.Section,{title:"Settings",buttons:(0,o.createComponentVNode)(2,a.Button,{selected:l,icon:l?"toggle-on":"toggle-off",content:l?"On":"Off",onClick:function(){return c("toggle")}}),children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Tag",children:[(0,o.createComponentVNode)(2,a.Input,{width:"5rem",value:d,onEnter:function(){return c("tag",{newtag:m})},onInput:function(e,t){return p(t)}}),(0,o.createComponentVNode)(2,a.Button,{disabled:d===m,width:"20px",mb:"0",ml:"0.25rem",onClick:function(){return c("tag",{newtag:m})},children:(0,o.createComponentVNode)(2,a.Icon,{name:"pen"})})]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Range",children:(0,o.createComponentVNode)(2,a.Button,{selected:!u,icon:u?"compress":"expand",content:u?"Local Sector":"Global",onClick:function(){return c("same_z")}})})]})})},u=function(e,t){var n=e.title,r=e.area,c=e.position;return(0,o.createComponentVNode)(2,a.Section,{title:n||"Position",children:(0,o.createComponentVNode)(2,a.Box,{fontSize:"1.5rem",children:[r&&(0,o.createFragment)([r,(0,o.createVNode)(1,"br")],0),i(c)]})})},s=function(e,t){var n=(0,r.useBackend)(t).data,c=n.position,l=n.signals;return(0,o.normalizeProps)((0,o.createComponentVNode)(2,a.Section,Object.assign({title:"Signals",overflow:"auto"},e,{children:(0,o.createComponentVNode)(2,a.Table,{children:l.map((function(e){return Object.assign({},e,{},function(e,t){if(e&&t){if(e[2]!==t[2])return null;var n,o=Math.atan2(t[1]-e[1],t[0]-e[0]),r=Math.sqrt(Math.pow(t[1]-e[1],2)+Math.pow(t[0]-e[0],2));return{angle:(n=o,n*(180/Math.PI)),distance:r}}}(c,e.position))})).map((function(e,t){return(0,o.createComponentVNode)(2,a.Table.Row,{backgroundColor:t%2==0&&"rgba(255, 255, 255, 0.05)",children:[(0,o.createComponentVNode)(2,a.Table.Cell,{width:"30%",verticalAlign:"middle",color:"label",p:"0.25rem",bold:!0,children:e.tag}),(0,o.createComponentVNode)(2,a.Table.Cell,{verticalAlign:"middle",color:"grey",children:e.area}),(0,o.createComponentVNode)(2,a.Table.Cell,{verticalAlign:"middle",collapsing:!0,children:e.distance!==undefined&&(0,o.createComponentVNode)(2,a.Box,{opacity:Math.max(1-Math.min(e.distance,100)/100,.5),children:[(0,o.createComponentVNode)(2,a.Icon,{name:e.distance>0?"arrow-right":"circle",rotation:-e.angle}),"\xa0",Math.floor(e.distance)+"m"]})}),(0,o.createComponentVNode)(2,a.Table.Cell,{verticalAlign:"middle",pr:"0.25rem",collapsing:!0,children:i(e.position)})]},t)}))})})))}},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.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(16),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(20),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(16),n(1)),a=n(2),c=n(4),i=n(20);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(135),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(20),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.authfull,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(16),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(20),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(514);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":515,"./pai_bioscan.js":516,"./pai_directives.js":517,"./pai_doorjack.js":518,"./pai_main_menu.js":519,"./pai_manifest.js":520,"./pai_medrecords.js":521,"./pai_messenger.js":522,"./pai_radio.js":523,"./pai_secrecords.js":524,"./pai_signaler.js":525};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=514},function(e,t,n){"use strict";t.__esModule=!0,t.pai_atmosphere=void 0;var o=n(0),r=n(1),a=n(184);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(185);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(16),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(527);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":528,"./pda_janitor.js":529,"./pda_main_menu.js":530,"./pda_manifest.js":531,"./pda_medical.js":532,"./pda_messenger.js":186,"./pda_mob_hunt.js":533,"./pda_mule.js":534,"./pda_notes.js":535,"./pda_power.js":536,"./pda_secbot.js":537,"./pda_security.js":538,"./pda_signaler.js":539,"./pda_status_display.js":540,"./pda_supplyrecords.js":541};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=527},function(e,t,n){"use strict";t.__esModule=!0,t.pda_atmos_scan=void 0;var o=n(0),r=n(1),a=n(184);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(16),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(185);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.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(20),a=n(1),c=n(2),i=n(75),l=n(4),d=n(49),u=n(132),s=n(133),m=n(135),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):3===f&&(n=(0,o.createComponentVNode)(2,V)),(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"]}),(0,o.createComponentVNode)(2,c.Tabs.Tab,{selected:2===l,onClick:function(){return r("page",{page:2})},children:[(0,o.createComponentVNode)(2,c.Icon,{name:"wrench"}),"Record Maintenance"]}),3===l&&d&&!d.empty&&(0,o.createComponentVNode)(2,c.Tabs.Tab,{selected:3===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).act;return(0,o.createComponentVNode)(2,c.Box,{children:[(0,o.createComponentVNode)(2,c.Button,{disabled:!0,icon:"download",content:"Backup to Disk",tooltip:"This feature is not available.",tooltipPosition:"right"}),(0,o.createVNode)(1,"br"),(0,o.createComponentVNode)(2,c.Button,{disabled:!0,icon:"upload",content:"Upload from Disk",tooltip:"This feature is not available.",tooltipPosition:"right",my:"0.5rem"}),(0,o.createVNode)(1,"br"),(0,o.createComponentVNode)(2,c.Button.Confirm,{icon:"trash",content:"Delete All Security Records",onClick:function(){return n("delete_security_all")},mb:"0.5rem"}),(0,o.createVNode)(1,"br"),(0,o.createComponentVNode)(2,c.Button.Confirm,{icon:"trash",content:"Delete All Cell Logs",onClick:function(){return n("delete_cell_logs")}})]})},V=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,y)})],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!"})},y=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(16),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.SupermatterMonitor=void 0;var o=n(0),r=n(26),a=n(43),c=n(16),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(178);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(16),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(20),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.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)}))})]})})}}]); \ 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(430),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(16),a=n(8),c=n(25),i=n(17),l=n(179),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(180);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(176);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(16),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":446,"./AIFixer.js":447,"./APC.js":448,"./ATM.js":449,"./AccountsUplinkTerminal.js":450,"./AiAirlock.js":451,"./AirAlarm.js":452,"./AirlockAccessController.js":453,"./AirlockElectronics.js":454,"./AppearanceChanger.js":455,"./AtmosAlertConsole.js":456,"./AtmosControl.js":457,"./AtmosFilter.js":458,"./AtmosMixer.js":459,"./AtmosPump.js":460,"./Autolathe.js":461,"./BlueSpaceArtilleryControl.js":462,"./BluespaceTap.js":463,"./BodyScanner.js":464,"./BotClean.js":465,"./BotSecurity.js":466,"./BrigCells.js":467,"./BrigTimer.js":468,"./CameraConsole.js":469,"./Canister.js":470,"./CardComputer.js":471,"./CargoConsole.js":472,"./ChemDispenser.js":473,"./ChemHeater.js":477,"./ChemMaster.js":478,"./CloningConsole.js":479,"./CommunicationsComputer.js":480,"./Contractor.js":481,"./ConveyorSwitch.js":482,"./CrewMonitor.js":483,"./Cryo.js":484,"./DNAModifier.js":485,"./DisposalBin.js":486,"./DnaVault.js":487,"./DroneConsole.js":488,"./EFTPOS.js":489,"./ERTManager.js":490,"./Electropack.js":491,"./EvolutionMenu.js":492,"./ExosuitFabricator.js":493,"./ExternalAirlockController.js":494,"./FaxMachine.js":495,"./FloorPainter.js":496,"./GPS.js":497,"./GravityGen.js":498,"./GuestPass.js":499,"./HandheldChemDispenser.js":500,"./Instrument.js":501,"./KeycardAuth.js":502,"./LaborClaimConsole.js":503,"./LawManager.js":504,"./MechBayConsole.js":505,"./MechaControlConsole.js":506,"./MedicalRecords.js":507,"./MiningVendor.js":508,"./Newscaster.js":509,"./NuclearBomb.js":510,"./OperatingComputer.js":511,"./Orbit.js":512,"./OreRedemption.js":513,"./PAI.js":514,"./PDA.js":527,"./Pacman.js":543,"./PersonalCrafting.js":544,"./PodTracking.js":545,"./PoolController.js":546,"./PortablePump.js":547,"./PortableScrubber.js":548,"./PortableTurret.js":549,"./PowerMonitor.js":188,"./RCD.js":550,"./RPD.js":551,"./Radio.js":552,"./RequestConsole.js":553,"./RndConsole.js":62,"./RoboticsControlConsole.js":568,"./Safe.js":569,"./SatelliteControl.js":570,"./SecurityRecords.js":571,"./ShuttleConsole.js":572,"./ShuttleManipulator.js":573,"./Sleeper.js":574,"./SlotMachine.js":575,"./Smartfridge.js":576,"./Smes.js":577,"./SolarControl.js":578,"./SpawnersMenu.js":579,"./StationAlertConsole.js":580,"./SuitStorage.js":581,"./SupermatterMonitor.js":582,"./SyndicateComputerSimple.js":583,"./TEG.js":584,"./TachyonArray.js":585,"./Tank.js":586,"./TankDispenser.js":587,"./TcommsCore.js":588,"./TcommsRelay.js":589,"./Teleporter.js":590,"./ThermoMachine.js":591,"./TransferValve.js":592,"./Uplink.js":593,"./Vending.js":594,"./VolumeMixer.js":595,"./Wires.js":596};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=445},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(182);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(20),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(182);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;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:u.temperature_c+" C",onClick:function(){return i("temperature")}})]})}),(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,q=d.body_accessory_style,Y=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===q,onClick:function(){return l("body_accessory",{body_accessory:e.bodyaccessorystyle})}},e.bodyaccessorystyle)}))}),!!Y&&(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 1===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(20),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(16),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(20));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(475)()},function(e,t,n){"use strict";var o=n(476);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(16),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(16),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(1),a=n(2),c=n(183),i=n(4);var l={1:["ACTIVE","good"],2:["COMPLETED","good"],3:["FAILED","bad"]},d=["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,c=(0,r.useBackend)(t),l=c.act,C=c.data;n=C.unauthorized?(0,o.createComponentVNode)(2,a.Flex.Item,{grow:"1",backgroundColor:"rgba(0, 0, 0, 0.8)",children:(0,o.createComponentVNode)(2,f,{height:"100%",allMessages:["ERROR: UNAUTHORIZED USER"],finishedTimeout:100,onFinished:function(){}})}):C.load_animation_completed?(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Flex.Item,{basis:"content",children:(0,o.createComponentVNode)(2,u)}),(0,o.createComponentVNode)(2,a.Flex.Item,{basis:"content",mt:"0.5rem",children:(0,o.createComponentVNode)(2,s)}),(0,o.createComponentVNode)(2,a.Flex.Item,{grow:"1",overflow:"hidden",children:1===C.page?(0,o.createComponentVNode)(2,m,{height:"100%"}):(0,o.createComponentVNode)(2,p,{height:"100%"})})],4):(0,o.createComponentVNode)(2,a.Flex.Item,{grow:"1",backgroundColor:"rgba(0, 0, 0, 0.8)",children:(0,o.createComponentVNode)(2,f,{height:"100%",allMessages:d,finishedTimeout:3e3,onFinished:function(){return l("complete_load_animation")}})});var N=(0,r.useLocalState)(t,"viewingPhoto",""),b=N[0];N[1];return(0,o.createComponentVNode)(2,i.Window,{theme:"syndicate",children:[b&&(0,o.createComponentVNode)(2,h),(0,o.createComponentVNode)(2,i.Window.Content,{className:"Contractor",children:(0,o.createComponentVNode)(2,a.Flex,{direction:"column",height:"100%",children:n})})]})};var u=function(e,t){var n=(0,r.useBackend)(t),c=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,a.Section,Object.assign({title:"Summary",buttons:(0,o.createComponentVNode)(2,a.Box,{verticalAlign:"middle",mt:"0.25rem",children:[s," Rep"]})},e,{children:(0,o.createComponentVNode)(2,a.Flex,{children:[(0,o.createComponentVNode)(2,a.Box,{flexBasis:"50%",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"TC Available",verticalAlign:"middle",children:(0,o.createComponentVNode)(2,a.Flex,{align:"center",children:[(0,o.createComponentVNode)(2,a.Flex.Item,{grow:"1",children:[l," TC"]}),(0,o.createComponentVNode)(2,a.Button,{disabled:l<=0,content:"Claim",mx:"0.75rem",mb:"0",flexBasis:"content",onClick:function(){return c("claim")}})]})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"TC Earned",children:[d," TC"]})]})}),(0,o.createComponentVNode)(2,a.Box,{flexBasis:"50%",children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Contracts Completed",verticalAlign:"middle",children:(0,o.createComponentVNode)(2,a.Box,{height:"20px",lineHeight:"20px",display:"inline-block",children:u})}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Contractor Status",verticalAlign:"middle",children:"ACTIVE"})]})})]})})))},s=function(e,t){var n=(0,r.useBackend)(t),c=n.act,i=n.data.page;return(0,o.normalizeProps)((0,o.createComponentVNode)(2,a.Tabs,Object.assign({},e,{children:[(0,o.createComponentVNode)(2,a.Tabs.Tab,{selected:1===i,onClick:function(){return c("page",{page:1})},children:[(0,o.createComponentVNode)(2,a.Icon,{name:"suitcase"}),"Contracts"]}),(0,o.createComponentVNode)(2,a.Tabs.Tab,{selected:2===i,onClick:function(){return c("page",{page:2})},children:[(0,o.createComponentVNode)(2,a.Icon,{name:"shopping-cart"}),"Hub"]})]})))},m=function(e,t){var n=(0,r.useBackend)(t),i=n.act,d=n.data,u=d.contracts,s=d.contract_active,m=d.can_extract,p=!!s&&u.filter((function(e){return 1===e.status}))[0],f=p&&p.time_left>0,h=(0,r.useLocalState)(t,"viewingPhoto",""),C=(h[0],h[1]);return(0,o.normalizeProps)((0,o.createComponentVNode)(2,a.Section,Object.assign({title:"Available Contracts",overflow:"auto",buttons:(0,o.createComponentVNode)(2,a.Button,{disabled:!m||f,icon:"parachute-box",content:["Call Extraction",f&&(0,o.createComponentVNode)(2,c.Countdown,{timeLeft:p.time_left,format:function(e,t){return" ("+t.substr(3)+")"}})],onClick:function(){return i("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,a.Section,{title:(0,o.createComponentVNode)(2,a.Flex,{children:[(0,o.createComponentVNode)(2,a.Flex.Item,{grow:"1",color:1===e.status&&"good",children:e.target_name}),(0,o.createComponentVNode)(2,a.Flex.Item,{basis:"content",children:e.has_photo&&(0,o.createComponentVNode)(2,a.Button,{icon:"camera",mb:"-0.5rem",ml:"0.5rem",onClick:function(){return C("target_photo_"+e.uid+".png")}})})]}),className:"Contractor__Contract",buttons:(0,o.createComponentVNode)(2,a.Box,{width:"100%",children:[!!l[e.status]&&(0,o.createComponentVNode)(2,a.Box,{color:l[e.status][1],display:"inline-block",mt:1!==e.status&&"0.125rem",mr:"0.25rem",lineHeight:"20px",children:l[e.status][0]}),1===e.status&&(0,o.createComponentVNode)(2,a.Button.Confirm,{icon:"ban",color:"bad",content:"Abort",ml:"0.5rem",onClick:function(){return i("abort")}})]}),children:(0,o.createComponentVNode)(2,a.Flex,{width:"100%",children:[(0,o.createComponentVNode)(2,a.Flex.Item,{grow:"2",mr:"0.5rem",children:[e.fluff_message,!!e.completed_time&&(0,o.createComponentVNode)(2,a.Box,{color:"good",children:[(0,o.createVNode)(1,"br"),(0,o.createComponentVNode)(2,a.Icon,{name:"check",mr:"0.5rem"}),"Contract completed at ",e.completed_time]}),!!e.dead_extraction&&(0,o.createComponentVNode)(2,a.Box,{color:"bad",mt:"0.5rem",bold:!0,children:[(0,o.createComponentVNode)(2,a.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,a.Box,{color:"bad",children:[(0,o.createVNode)(1,"br"),(0,o.createComponentVNode)(2,a.Icon,{name:"times",mr:"0.5rem"}),"Contract failed: ",e.fail_reason]})]}),(0,o.createComponentVNode)(2,a.Flex.Item,{grow:"1",flexBasis:"100%",children:[(0,o.createComponentVNode)(2,a.Box,{mb:"0.5rem",color:"label",children:"Extraction Zone:"}),null==(t=e.difficulties)?void 0:t.map((function(t,n){return(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Button.Confirm,{disabled:!!s,content:t.name+" ("+t.reward+" TC)",onClick:function(){return i("activate",{uid:e.uid,difficulty:n+1})}}),(0,o.createVNode)(1,"br")],4)})),!!e.objective&&(0,o.createComponentVNode)(2,a.Box,{color:"white",bold:!0,children:[e.objective.extraction_zone,(0,o.createVNode)(1,"br"),"(",(e.objective.reward_tc||0)+" TC",",\xa0",(e.objective.reward_credits||0)+" Credits",")"]})]})]})},e.uid)}))})))},p=function(e,t){var n=(0,r.useBackend)(t),c=n.act,i=n.data,l=i.rep,d=i.buyables;return(0,o.normalizeProps)((0,o.createComponentVNode)(2,a.Section,Object.assign({title:"Available Purchases",overflow:"auto"},e,{children:d.map((function(e){return(0,o.createComponentVNode)(2,a.Section,{title:e.name,children:[e.description,(0,o.createVNode)(1,"br"),(0,o.createComponentVNode)(2,a.Button.Confirm,{disabled:l-1&&(0,o.createComponentVNode)(2,a.Box,{as:"span",color:0===e.stock?"bad":"good",ml:"0.5rem",children:[e.stock," in stock"]})]},e.uid)}))})))},f=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 c=r.prototype;return c.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))},c.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)},c.componentWillUnmount=function(){clearTimeout(this.timer)},c.render=function(){return(0,o.createComponentVNode)(2,a.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),h=function(e,t){var n=(0,r.useLocalState)(t,"viewingPhoto",""),c=n[0],i=n[1];return(0,o.createComponentVNode)(2,a.Modal,{className:"Contractor__photoZoom",children:[(0,o.createComponentVNode)(2,a.Box,{as:"img",src:c}),(0,o.createComponentVNode)(2,a.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(20),c=n(1),i=n(2),l=n(76),d=n(39),u=n(4),s=function(e){return e.dead?"Deceased":1===parseInt(e.stat,10)?"Unconscious":"Living"},m=function(e){return e.dead?"red":1===parseInt(e.stat,10)?"orange":"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),children:s(e)}),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)},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(16),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(20),c=n(1),i=n(2),l=n(183),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(1),a=n(2),c=n(4),i=function(e){return e?"("+e.join(", ")+")":"ERROR"};t.GPS=function(e,t){var n=(0,r.useBackend)(t).data,i=n.emped,m=n.active,p=n.area,f=n.position,h=n.saved;return(0,o.createComponentVNode)(2,c.Window,{children:(0,o.createComponentVNode)(2,c.Window.Content,{children:(0,o.createComponentVNode)(2,a.Flex,{direction:"column",height:"100%",children:i?(0,o.createComponentVNode)(2,a.Flex.Item,{grow:"1",basis:"0",children:(0,o.createComponentVNode)(2,l,{emp:!0})}):(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Flex.Item,{children:(0,o.createComponentVNode)(2,d)}),m?(0,o.createFragment)([(0,o.createComponentVNode)(2,a.Flex.Item,{mt:"0.5rem",children:(0,o.createComponentVNode)(2,u,{area:p,position:f})}),h&&(0,o.createComponentVNode)(2,a.Flex.Item,{mt:"0.5rem",children:(0,o.createComponentVNode)(2,u,{title:"Saved Position",position:h})}),(0,o.createComponentVNode)(2,a.Flex.Item,{mt:"0.5rem",grow:"1",basis:"0",children:(0,o.createComponentVNode)(2,s,{height:"100%"})})],0):(0,o.createComponentVNode)(2,l)],0)})})})};var l=function(e,t){var n=e.emp;return(0,o.createComponentVNode)(2,a.Section,{mt:"0.5rem",width:"100%",height:"100%",stretchContents:!0,children:(0,o.createComponentVNode)(2,a.Box,{width:"100%",height:"100%",color:"label",textAlign:"center",children:(0,o.createComponentVNode)(2,a.Flex,{height:"100%",children:(0,o.createComponentVNode)(2,a.Flex.Item,{grow:"1",align:"center",color:"label",children:[(0,o.createComponentVNode)(2,a.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."]})})})})},d=function(e,t){var n=(0,r.useBackend)(t),c=n.act,i=n.data,l=i.active,d=i.tag,u=i.same_z,s=(0,r.useLocalState)(t,"newTag",d),m=s[0],p=s[1];return(0,o.createComponentVNode)(2,a.Section,{title:"Settings",buttons:(0,o.createComponentVNode)(2,a.Button,{selected:l,icon:l?"toggle-on":"toggle-off",content:l?"On":"Off",onClick:function(){return c("toggle")}}),children:(0,o.createComponentVNode)(2,a.LabeledList,{children:[(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Tag",children:[(0,o.createComponentVNode)(2,a.Input,{width:"5rem",value:d,onEnter:function(){return c("tag",{newtag:m})},onInput:function(e,t){return p(t)}}),(0,o.createComponentVNode)(2,a.Button,{disabled:d===m,width:"20px",mb:"0",ml:"0.25rem",onClick:function(){return c("tag",{newtag:m})},children:(0,o.createComponentVNode)(2,a.Icon,{name:"pen"})})]}),(0,o.createComponentVNode)(2,a.LabeledList.Item,{label:"Range",children:(0,o.createComponentVNode)(2,a.Button,{selected:!u,icon:u?"compress":"expand",content:u?"Local Sector":"Global",onClick:function(){return c("same_z")}})})]})})},u=function(e,t){var n=e.title,r=e.area,c=e.position;return(0,o.createComponentVNode)(2,a.Section,{title:n||"Position",children:(0,o.createComponentVNode)(2,a.Box,{fontSize:"1.5rem",children:[r&&(0,o.createFragment)([r,(0,o.createVNode)(1,"br")],0),i(c)]})})},s=function(e,t){var n=(0,r.useBackend)(t).data,c=n.position,l=n.signals;return(0,o.normalizeProps)((0,o.createComponentVNode)(2,a.Section,Object.assign({title:"Signals",overflow:"auto"},e,{children:(0,o.createComponentVNode)(2,a.Table,{children:l.map((function(e){return Object.assign({},e,{},function(e,t){if(e&&t){if(e[2]!==t[2])return null;var n,o=Math.atan2(t[1]-e[1],t[0]-e[0]),r=Math.sqrt(Math.pow(t[1]-e[1],2)+Math.pow(t[0]-e[0],2));return{angle:(n=o,n*(180/Math.PI)),distance:r}}}(c,e.position))})).map((function(e,t){return(0,o.createComponentVNode)(2,a.Table.Row,{backgroundColor:t%2==0&&"rgba(255, 255, 255, 0.05)",children:[(0,o.createComponentVNode)(2,a.Table.Cell,{width:"30%",verticalAlign:"middle",color:"label",p:"0.25rem",bold:!0,children:e.tag}),(0,o.createComponentVNode)(2,a.Table.Cell,{verticalAlign:"middle",color:"grey",children:e.area}),(0,o.createComponentVNode)(2,a.Table.Cell,{verticalAlign:"middle",collapsing:!0,children:e.distance!==undefined&&(0,o.createComponentVNode)(2,a.Box,{opacity:Math.max(1-Math.min(e.distance,100)/100,.5),children:[(0,o.createComponentVNode)(2,a.Icon,{name:e.distance>0?"arrow-right":"circle",rotation:-e.angle}),"\xa0",Math.floor(e.distance)+"m"]})}),(0,o.createComponentVNode)(2,a.Table.Cell,{verticalAlign:"middle",pr:"0.25rem",collapsing:!0,children:i(e.position)})]},t)}))})})))}},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(16),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(20),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(16),n(1)),a=n(2),c=n(4),i=n(20);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(135),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(20),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(16),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(20),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(515);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":516,"./pai_bioscan.js":517,"./pai_directives.js":518,"./pai_doorjack.js":519,"./pai_main_menu.js":520,"./pai_manifest.js":521,"./pai_medrecords.js":522,"./pai_messenger.js":523,"./pai_radio.js":524,"./pai_secrecords.js":525,"./pai_signaler.js":526};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=515},function(e,t,n){"use strict";t.__esModule=!0,t.pai_atmosphere=void 0;var o=n(0),r=n(1),a=n(184);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(185);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(16),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(528);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":529,"./pda_janitor.js":530,"./pda_main_menu.js":531,"./pda_manifest.js":532,"./pda_medical.js":533,"./pda_messenger.js":186,"./pda_mob_hunt.js":534,"./pda_mule.js":535,"./pda_notes.js":536,"./pda_power.js":537,"./pda_secbot.js":538,"./pda_security.js":539,"./pda_signaler.js":540,"./pda_status_display.js":541,"./pda_supplyrecords.js":542};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=528},function(e,t,n){"use strict";t.__esModule=!0,t.pda_atmos_scan=void 0;var o=n(0),r=n(1),a=n(184);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(16),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(185);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.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(20),a=n(1),c=n(2),i=n(75),l=n(4),d=n(49),u=n(132),s=n(133),m=n(135),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(16),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(16),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(178);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(16),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(20),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)}))})]})})}}]); \ No newline at end of file diff --git a/tgui/yarn.lock b/tgui/yarn.lock index 1808ceea6a4..ccab41cb56e 100644 --- a/tgui/yarn.lock +++ b/tgui/yarn.lock @@ -1240,10 +1240,10 @@ bluebird@^3.5.5: resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== -bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0: - version "4.11.9" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.9.tgz#26d556829458f9d1e81fc48952493d0ba3507828" - integrity sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw== +bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.11.9: + version "4.12.0" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" + integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== body-parser@1.19.0: version "1.19.0" @@ -1297,7 +1297,7 @@ braces@~3.0.2: dependencies: fill-range "^7.0.1" -brorand@^1.0.1: +brorand@^1.0.1, brorand@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= @@ -2198,17 +2198,17 @@ electron-to-chromium@^1.3.390: integrity sha512-DbCBdwtARI0l3e3m6ZIxVaTNahb6dSsmGjuag/twiVcWuM4MSpL5IfsJsJSyqLqxosE/m0CXlZaBmxegQW/dAg== elliptic@^6.0.0: - version "6.5.3" - resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.3.tgz#cb59eb2efdaf73a0bd78ccd7015a62ad6e0f93d6" - integrity sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw== + version "6.5.4" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" + integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== dependencies: - bn.js "^4.4.0" - brorand "^1.0.1" + bn.js "^4.11.9" + brorand "^1.1.0" hash.js "^1.0.0" - hmac-drbg "^1.0.0" - inherits "^2.0.1" - minimalistic-assert "^1.0.0" - minimalistic-crypto-utils "^1.0.0" + hmac-drbg "^1.0.1" + inherits "^2.0.4" + minimalistic-assert "^1.0.1" + minimalistic-crypto-utils "^1.0.1" emoji-regex@^7.0.1: version "7.0.3" @@ -3020,7 +3020,7 @@ hex-color-regex@^1.1.0: resolved "https://registry.yarnpkg.com/hex-color-regex/-/hex-color-regex-1.1.0.tgz#4c06fccb4602fe2602b3c93df82d7e7dbf1a8a8e" integrity sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ== -hmac-drbg@^1.0.0: +hmac-drbg@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE= @@ -3183,7 +3183,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.1, inherits@~2.0.3: +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -3900,7 +3900,7 @@ minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== -minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: +minimalistic-crypto-utils@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= @@ -5529,9 +5529,9 @@ sprintf-js@~1.0.2: integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= ssri@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.1.tgz#2a3c41b28dd45b62b63676ecb74001265ae9edd8" - integrity sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA== + version "6.0.2" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-6.0.2.tgz#157939134f20464e7301ddba3e90ffa8f7728ac5" + integrity sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q== dependencies: figgy-pudding "^3.5.1" @@ -6311,9 +6311,9 @@ xtend@^4.0.0, xtend@~4.0.1: integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== y18n@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" - integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== + version "4.0.1" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.1.tgz#8db2b83c31c5d75099bb890b23f3094891e247d4" + integrity sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ== yallist@^3.0.2: version "3.1.1" diff --git a/tools/ci/check_grep.sh b/tools/ci/check_grep.sh index 5b5c232c374..24f1952e2ba 100755 --- a/tools/ci/check_grep.sh +++ b/tools/ci/check_grep.sh @@ -14,6 +14,10 @@ if grep -P 'step_[xy]' _maps/**/*.dmm; then echo "ERROR: step_x/step_y variables detected in maps, please remove them." st=1 fi; +if grep -P '^/[\w/]\S+\(.*(var/|, ?var/.*).*\)' code/**/*.dm; then + echo "changed files contains proc argument starting with 'var'" + st=1 +fi; if grep -P '^/*var/' code/**/*.dm; then echo "ERROR: Unmanaged global var use detected in code, please use the helpers." st=1 diff --git a/tools/ci/dbconfig.txt b/tools/ci/dbconfig.txt index d97fffaf812..2fff6faf540 100644 --- a/tools/ci/dbconfig.txt +++ b/tools/ci/dbconfig.txt @@ -2,12 +2,12 @@ # Dont use it ingame # Remember to update this when you increase the SQL version! -aa SQL_ENABLED -DB_VERSION 20 +DB_VERSION 22 ADDRESS 127.0.0.1 PORT 3306 FEEDBACK_DATABASE feedback FEEDBACK_TABLEPREFIX -FEEDBACK_LOGIN ci_sql -FEEDBACK_PASSWORD not_a_strong_password +FEEDBACK_LOGIN root +FEEDBACK_PASSWORD root ASYNC_QUERY_TIMEOUT 10 RUST_SQL_THREAD_LIMIT 50 diff --git a/tools/ci/generate_sql_scripts.py b/tools/ci/generate_sql_scripts.py index 6091148909e..5c7cf97230b 100644 --- a/tools/ci/generate_sql_scripts.py +++ b/tools/ci/generate_sql_scripts.py @@ -45,7 +45,7 @@ scriptLines = [ "#!/bin/bash\n", "set -euo pipefail\n" "python3 -m pip install setuptools\n" # Yes I know you can PIP multiple things but they need to happen in this order - "python3 -m pip install mysql-connector\n" + "python3 -m pip install mysql-connector-python\n" "mysql -u root -proot < tools/ci/sql_v0.sql\n" ] @@ -79,7 +79,6 @@ scriptLines.append("mysql -u root -proot -e 'DROP DATABASE feedback;'\n") scriptLines.append("mysql -u root -proot < SQL/paradise_schema_prefixed.sql\n") scriptLines.append("mysql -u root -proot -e 'DROP DATABASE feedback;'\n") scriptLines.append("mysql -u root -proot < SQL/paradise_schema.sql\n") -scriptLines.append("mysql -u root -proot -e 'GRANT ALL on feedback.* TO `ci_sql`@`127.0.0.1` IDENTIFIED BY \"not_a_strong_password\";'\n") outputScript = open("tools/ci/validate_sql.sh", "w+") outputScript.writelines(scriptLines) diff --git a/tools/ci/validate_rustg_windows.py b/tools/ci/validate_rustg_windows.py new file mode 100644 index 00000000000..3d4535484ed --- /dev/null +++ b/tools/ci/validate_rustg_windows.py @@ -0,0 +1,91 @@ +# Script to validate RUSTG DLL functions under windows (Running DD under windows in a CI environment is pain) +# Author: AffectedArc07 +# This script is invoked by GitHub actions as part of CI to validate that the windows DLL for RUSTG works and creates proper formats + +# Imports +import os, sys +from ctypes import * +from datetime import datetime, timedelta + +# Initial vars +ci_log_file = "ci_log.log" +ci_testing_text = "This is a test message" + +# Helpers +def success(msg): + print("[Y] {}".format(msg)) + +def fail(msg): + print("[X] {}".format(msg)) + exit(1) # Exit with 1 to fail the CI + +# Cleanup +if os.path.exists(ci_log_file): + os.remove(ci_log_file) + +# Check the DLL exists at all +if os.path.exists("rust_g.dll"): + success("RUSTG Dll exists") +else: + fail("RUSTG Dll does NOT exist") + +# Check DM header file exists +if os.path.exists("code/__DEFINES/rust_g.dm"): + success("RUSTG DM header file exists") +else: + fail("RUSTG DM header file does NOT exist") + +# Parse the version from the DM file +f = open("code/__DEFINES/rust_g.dm", "r") +lines = f.readlines() +f.close() +dm_version = None +for line in lines: + if line.startswith("#define RUST_G_VERSION"): + dm_version = line.split("#define RUST_G_VERSION")[1].strip().strip("\"") + break + +if not dm_version: + fail("Could not detect RUSTG version inside DM header file") + +# Begin DLL loading +rustg_dll = CDLL("./rust_g.dll") + + +# Set args for version retrieval +rustg_dll.get_version.restype = c_char_p +dll_version = rustg_dll.get_version().decode() + +if dll_version == dm_version: + success("DLL and DM versions match") +else: + fail("DLL and DM version mismatch! Got {} DM version, got {} DLL version".format(dm_version, dll_version)) + +# Now test log writing. This hurt to write. +string_array = c_char_p * 2 +sa = string_array(bytes(ci_log_file, "ascii"), bytes(ci_testing_text, "ascii")) +rustg_dll.log_write.argtypes = [c_int, c_char_p * 2] + +timestamp = datetime.now() + +# Generate valid results for the time now and the next 2 seconds. This is so we can account for spurious CI lag. +valid_results = [] +for count in range(3): + timestamp_text = timestamp.strftime('[%Y-%m-%dT%H:%M:%S]') # 8601 is king + valid_results.append("{} {}".format(timestamp_text, ci_testing_text)) + timestamp = timestamp + timedelta(seconds=1) + +# Invoke this now we have prepared +rustg_dll.log_write(2, sa) + +# Now read the output back +logfile = open(ci_log_file, "r") +logline = logfile.readlines()[0].strip("\n") # Remove newline +logfile.close() + +if logline in valid_results: + success("Log timestamp is valid 8601") +else: + fail("Log timestamp is not valid 8601. Got {}".format(logline)) + +exit(0) # Success diff --git a/tools/mapmerge2/requirements.txt b/tools/mapmerge2/requirements.txt index 65d1a5e0b17..7a6c3f1c94f 100644 --- a/tools/mapmerge2/requirements.txt +++ b/tools/mapmerge2/requirements.txt @@ -1,3 +1,3 @@ pygit2==1.0.1 bidict==0.13.1 -Pillow==7.1.1 +Pillow==8.1.1